v26.3
This commit is contained in:
1 parent
9332fc9254
commit
7e22831d08
20 files changed
+945
-1489
No files matched your search
+199
-44
@@ -27,11 +27,16 @@ const {
|
||||
} = require('../Structures/DashboardSession.js');
|
||||
const {
|
||||
OAUTH_STATE_COOKIE,
|
||||
OAUTH_REDIRECT_COOKIE,
|
||||
getTrustProxySetting,
|
||||
resolveOAuthRedirectUri,
|
||||
isSecureRequest,
|
||||
buildAuthorizeUrl,
|
||||
exchangeCode,
|
||||
fetchDiscordUser,
|
||||
createOAuthState,
|
||||
oauthStateCookieOptions,
|
||||
oauthRedirectCookieOptions,
|
||||
isOAuthConfigured,
|
||||
discordAvatarUrl,
|
||||
} = require('../Structures/DiscordOAuth.js');
|
||||
@@ -64,6 +69,8 @@ const {
|
||||
} = require('../Structures/GuildManager.js');
|
||||
const { withTimeout } = require('../Structures/asyncTimeout.js');
|
||||
const transcriptTemplate = require('../Structures/TranscriptTemplate.js');
|
||||
const transcriptStore = require('../Structures/TranscriptStore.js');
|
||||
const dashboardBranding = require('../Structures/DashboardBranding.js');
|
||||
const {
|
||||
listCatalogAddons,
|
||||
listInstalledAddons,
|
||||
@@ -96,9 +103,40 @@ class APIServer {
|
||||
this.oauth = this.config.OAuth || {};
|
||||
bootstrapFromOAuth(this.oauth);
|
||||
|
||||
const trustProxy = getTrustProxySetting(this.config);
|
||||
if (trustProxy !== false) {
|
||||
this.app.set('trust proxy', trustProxy);
|
||||
}
|
||||
|
||||
this.app.use(cors({ origin: true, credentials: true }));
|
||||
this.app.use(cookieParser());
|
||||
this.app.use(express.json());
|
||||
this.app.use(express.json({ limit: '2mb' }));
|
||||
|
||||
this.app.get('/api/branding', (req, res) => {
|
||||
try {
|
||||
const branding = dashboardBranding.readBranding();
|
||||
res.json({
|
||||
success: true,
|
||||
data: dashboardBranding.publicPayload(branding),
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to load branding' });
|
||||
}
|
||||
});
|
||||
|
||||
this.app.get('/api/branding/favicon', (req, res) => {
|
||||
try {
|
||||
const favicon = dashboardBranding.getFaviconPath();
|
||||
if (!favicon) {
|
||||
return res.status(404).end();
|
||||
}
|
||||
res.setHeader('Cache-Control', 'public, max-age=300');
|
||||
res.type(favicon.mime);
|
||||
return res.sendFile(favicon.filePath);
|
||||
} catch (err) {
|
||||
return res.status(500).end();
|
||||
}
|
||||
});
|
||||
|
||||
this.app.get('/api/health', (req, res) => {
|
||||
const guild =
|
||||
@@ -115,6 +153,10 @@ class APIServer {
|
||||
|
||||
this.setupAuthRoutes();
|
||||
|
||||
this.app.get('/transcripts/:id', (req, res) => {
|
||||
transcriptStore.servePublicTranscript(req, res);
|
||||
});
|
||||
|
||||
const api = express.Router();
|
||||
api.use((req, res, next) => this.authenticate(req, res, next));
|
||||
this.apiRouter = api;
|
||||
@@ -203,15 +245,20 @@ class APIServer {
|
||||
setupAuthRoutes() {
|
||||
const secret = this.config.SecretKey;
|
||||
const oauth = this.oauth;
|
||||
const apiConfig = this.config;
|
||||
|
||||
this.app.get('/api/auth/discord', (req, res) => {
|
||||
if (!isOAuthConfigured(oauth)) {
|
||||
return res.redirect('/login?error=oauth_not_configured');
|
||||
}
|
||||
|
||||
const redirectUri = resolveOAuthRedirectUri(req, oauth, apiConfig);
|
||||
const state = createOAuthState();
|
||||
res.cookie(OAUTH_STATE_COOKIE, state, oauthStateCookieOptions());
|
||||
res.redirect(buildAuthorizeUrl(oauth, state));
|
||||
const cookieOpts = oauthStateCookieOptions(req, oauth, apiConfig);
|
||||
|
||||
res.cookie(OAUTH_STATE_COOKIE, state, cookieOpts);
|
||||
res.cookie(OAUTH_REDIRECT_COOKIE, redirectUri, oauthRedirectCookieOptions(req, oauth, apiConfig));
|
||||
res.redirect(buildAuthorizeUrl(oauth, state, redirectUri));
|
||||
});
|
||||
|
||||
this.app.get('/api/auth/discord/callback', async (req, res) => {
|
||||
@@ -228,14 +275,21 @@ class APIServer {
|
||||
}
|
||||
|
||||
const savedState = req.cookies?.[OAUTH_STATE_COOKIE];
|
||||
res.clearCookie(OAUTH_STATE_COOKIE, { path: '/' });
|
||||
const savedRedirect = req.cookies?.[OAUTH_REDIRECT_COOKIE];
|
||||
const cookieOpts = oauthStateCookieOptions(req, oauth, apiConfig);
|
||||
|
||||
res.clearCookie(OAUTH_STATE_COOKIE, { path: '/', secure: cookieOpts.secure });
|
||||
res.clearCookie(OAUTH_REDIRECT_COOKIE, { path: '/', secure: cookieOpts.secure });
|
||||
|
||||
if (!savedState || savedState !== state) {
|
||||
return res.redirect('/login?error=invalid_state');
|
||||
}
|
||||
|
||||
const redirectUri =
|
||||
savedRedirect || resolveOAuthRedirectUri(req, oauth, apiConfig);
|
||||
|
||||
try {
|
||||
const accessToken = await exchangeCode(oauth, String(code));
|
||||
const accessToken = await exchangeCode(oauth, String(code), redirectUri);
|
||||
const user = await fetchDiscordUser(accessToken);
|
||||
|
||||
if (!canLogin(user.id, oauth)) {
|
||||
@@ -250,7 +304,13 @@ class APIServer {
|
||||
|
||||
const payload = createSessionPayload(user);
|
||||
const token = signSession(payload, secret);
|
||||
res.cookie(SESSION_COOKIE, token, sessionCookieOptions());
|
||||
res.cookie(
|
||||
SESSION_COOKIE,
|
||||
token,
|
||||
sessionCookieOptions(undefined, {
|
||||
secure: isSecureRequest(req, oauth, apiConfig),
|
||||
}),
|
||||
);
|
||||
res.redirect('/');
|
||||
} catch (err) {
|
||||
console.error('[API] Discord OAuth callback failed:', err.message);
|
||||
@@ -333,6 +393,7 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
}
|
||||
|
||||
const listenPort = port || this.config.Port || 3000;
|
||||
transcriptStore.startAutoDeleteScheduler();
|
||||
this._httpServer = this.app.listen(listenPort, () => {
|
||||
console.log(`[API] Server running on port ${listenPort}`);
|
||||
this.startNotificationJobs();
|
||||
@@ -403,6 +464,61 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
const p = (permission) => this.requirePermission(permission);
|
||||
const cv = (mode) => this.requireConfigAccess(mode);
|
||||
|
||||
app.put('/branding', p('settings.update'), (req, res) => {
|
||||
try {
|
||||
const branding = dashboardBranding.updateBranding({
|
||||
title: req.body?.title,
|
||||
pageTitle: req.body?.pageTitle,
|
||||
});
|
||||
res.json({
|
||||
success: true,
|
||||
data: dashboardBranding.publicPayload(branding),
|
||||
message: 'Branding saved.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(400).json({ success: false, error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/branding/favicon', p('settings.update'), (req, res) => {
|
||||
try {
|
||||
const branding = dashboardBranding.saveFaviconFromBase64(req.body?.dataUrl);
|
||||
res.json({
|
||||
success: true,
|
||||
data: dashboardBranding.publicPayload(branding),
|
||||
message: 'Favicon updated.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(400).json({ success: false, error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.delete('/branding/favicon', p('settings.update'), (req, res) => {
|
||||
try {
|
||||
const branding = dashboardBranding.clearFavicon();
|
||||
res.json({
|
||||
success: true,
|
||||
data: dashboardBranding.publicPayload(branding),
|
||||
message: 'Favicon removed.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(400).json({ success: false, error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/branding/reset', p('settings.update'), (req, res) => {
|
||||
try {
|
||||
const branding = dashboardBranding.resetBranding();
|
||||
res.json({
|
||||
success: true,
|
||||
data: dashboardBranding.publicPayload(branding),
|
||||
message: 'Branding reset to defaults.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(400).json({ success: false, error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/dashboard-users', p('users.view'), (req, res) => {
|
||||
try {
|
||||
res.json({
|
||||
@@ -1079,22 +1195,11 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
});
|
||||
|
||||
// --- Transcript API ---
|
||||
const transcriptDir = path.join(__dirname, '../Data/Transcripts');
|
||||
|
||||
const readTranscriptFile = (rawId) => {
|
||||
const id = String(rawId).replace(/[^0-9]/g, '');
|
||||
if (!id) return null;
|
||||
const filePath = path.join(transcriptDir, `${id}-transcript.html`);
|
||||
if (!fs.existsSync(filePath)) return null;
|
||||
const content = fs.readFileSync(filePath, 'utf8');
|
||||
const titleMatch = content.match(/<title>\s*Transcript\s*-\s*([^<]+)\s*<\/title>/i);
|
||||
return {
|
||||
id,
|
||||
filePath,
|
||||
filename: `${id}-transcript.html`,
|
||||
content,
|
||||
ticketName: titleMatch ? titleMatch[1].trim() : null,
|
||||
};
|
||||
const canManageTranscripts = (req) => {
|
||||
if (req.dashboardService) return true;
|
||||
if (!hasPermission(req.dashboardPermissions, 'transcripts')) return false;
|
||||
if (req.dashboardRole === 'viewer') return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
const canEditTranscriptTemplate = (req) => {
|
||||
@@ -1139,36 +1244,86 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcript-settings', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const settings = transcriptStore.getSettings();
|
||||
res.json({
|
||||
success: true,
|
||||
data: {
|
||||
...settings,
|
||||
publicBasePath: '/transcripts',
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to load transcript settings' });
|
||||
}
|
||||
});
|
||||
|
||||
app.put('/system/transcript-settings', p('transcripts'), (req, res) => {
|
||||
if (!canManageTranscripts(req)) {
|
||||
return forbid(res);
|
||||
}
|
||||
try {
|
||||
const saved = transcriptStore.saveSettings(req.body);
|
||||
res.json({
|
||||
success: true,
|
||||
data: {
|
||||
...saved,
|
||||
publicBasePath: '/transcripts',
|
||||
},
|
||||
message: 'Transcript settings saved.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: err.message || 'Failed to save settings' });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/system/transcripts/purge', p('transcripts'), (req, res) => {
|
||||
if (!canManageTranscripts(req)) {
|
||||
return forbid(res);
|
||||
}
|
||||
try {
|
||||
const result = transcriptStore.purgeExpiredTranscripts();
|
||||
res.json({
|
||||
success: true,
|
||||
data: result,
|
||||
message: result.skipped
|
||||
? 'Auto-delete is disabled. Enable it in settings to purge old transcripts.'
|
||||
: `Removed ${result.deleted} transcript(s).`,
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: err.message || 'Purge failed' });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcripts', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
if (!fs.existsSync(transcriptDir)) {
|
||||
return res.json({ success: true, data: [] });
|
||||
}
|
||||
const files = fs.readdirSync(transcriptDir);
|
||||
const transcripts = files
|
||||
.filter((f) => f.endsWith('-transcript.html'))
|
||||
.map((f) => {
|
||||
const id = f.replace('-transcript.html', '');
|
||||
const stats = fs.statSync(path.join(transcriptDir, f));
|
||||
const parsed = readTranscriptFile(id);
|
||||
return {
|
||||
id,
|
||||
filename: f,
|
||||
createdAt: stats.mtime.toISOString(),
|
||||
size: stats.size,
|
||||
ticketName: parsed?.ticketName ?? null,
|
||||
};
|
||||
})
|
||||
.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));
|
||||
transcriptStore.purgeExpiredTranscripts();
|
||||
const transcripts = transcriptStore.listTranscripts();
|
||||
res.json({ success: true, data: transcripts });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to list transcripts' });
|
||||
}
|
||||
});
|
||||
|
||||
app.delete('/system/transcripts/:id', p('transcripts'), (req, res) => {
|
||||
if (!canManageTranscripts(req)) {
|
||||
return forbid(res);
|
||||
}
|
||||
try {
|
||||
const removed = transcriptStore.deleteTranscript(req.params.id);
|
||||
if (!removed) {
|
||||
return res.status(404).json({ success: false, error: 'Transcript not found' });
|
||||
}
|
||||
res.json({ success: true, message: 'Transcript deleted.' });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to delete transcript' });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcripts/:id', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
const transcript = transcriptStore.readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).json({ success: false, error: 'Transcript not found' });
|
||||
}
|
||||
@@ -1180,7 +1335,7 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
|
||||
app.get('/system/transcripts/:id/view', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
const transcript = transcriptStore.readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).type('html').send(
|
||||
'<!DOCTYPE html><body style="font-family:sans-serif;padding:2rem;background:#0b0f14;color:#e6edf3"><h1>Transcript not found</h1></body>',
|
||||
@@ -1198,7 +1353,7 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
|
||||
app.get('/system/transcripts/:id/download', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
const transcript = transcriptStore.readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).json({ success: false, error: 'Transcript not found' });
|
||||
}
|
||||
|
||||
@@ -9,11 +9,22 @@ API:
|
||||
|
||||
SecretKey: "CHANGE_ME"
|
||||
|
||||
# Set to 1 when the dashboard is behind nginx, Cloudflare, Pterodactyl proxy, etc.
|
||||
# so http/https is detected from X-Forwarded-Proto.
|
||||
TrustProxy: false
|
||||
|
||||
OAuth:
|
||||
Enabled: true
|
||||
ClientId: "DISCORD_CLIENT_ID"
|
||||
ClientSecret: "DISCORD_CLIENT_SECRET"
|
||||
# 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:
|
||||
- "YOUR_DISCORD_USER_ID"
|
||||
AllowedUserIds: []
|
||||
@@ -12,7 +12,7 @@
|
||||
#
|
||||
# SupportBot Configuration (supportbot.yml)
|
||||
|
||||
SupportBot_Version: "v26.2.0"
|
||||
SupportBot_Version: "v26.3.0"
|
||||
|
||||
# -------------------------
|
||||
# General
|
||||
|
||||
@@ -1,488 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Transcript - ticket-0004</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0b0f14;
|
||||
--panel: #111821;
|
||||
--panel-2: #182230;
|
||||
--panel-3: #1d2938;
|
||||
--border: #283548;
|
||||
--text: #e6edf3;
|
||||
--muted: #9fb0c3;
|
||||
--accent: #22c55e;
|
||||
--accent-soft: rgba(34, 197, 94, 0.12);
|
||||
--code: #0f1720;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
padding: 32px 20px;
|
||||
}
|
||||
|
||||
.page {
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 24px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.header-top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.title-wrap h1 {
|
||||
margin: 0;
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.2;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.title-wrap p {
|
||||
margin: 8px 0 0;
|
||||
color: var(--muted);
|
||||
font-size: 0.98rem;
|
||||
}
|
||||
|
||||
.badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
background: var(--accent-soft);
|
||||
color: #8df0ad;
|
||||
border: 1px solid rgba(34, 197, 94, 0.25);
|
||||
padding: 8px 12px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.meta-grid {
|
||||
margin-top: 18px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.meta-card {
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.meta-label {
|
||||
color: var(--muted);
|
||||
font-size: 0.82rem;
|
||||
margin-bottom: 6px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.meta-value {
|
||||
font-size: 0.98rem;
|
||||
font-weight: 600;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.messages-wrap {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.messages-header {
|
||||
padding: 18px 20px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--panel-2);
|
||||
font-weight: 800;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.message {
|
||||
display: flex;
|
||||
gap: 14px;
|
||||
padding: 18px 20px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.message:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
min-width: 42px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
background: var(--panel-3);
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.message-body {
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.message-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.username {
|
||||
font-weight: 800;
|
||||
color: var(--text);
|
||||
font-size: 0.98rem;
|
||||
}
|
||||
|
||||
.userid {
|
||||
color: var(--muted);
|
||||
font-size: 0.8rem;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
}
|
||||
|
||||
.timestamp {
|
||||
color: var(--muted);
|
||||
font-size: 0.82rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.content {
|
||||
color: var(--text);
|
||||
font-size: 0.96rem;
|
||||
line-height: 1.6;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.content:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.discord-embed {
|
||||
margin-top: 12px;
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-left: 4px solid var(--accent);
|
||||
border-radius: 10px;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
|
||||
.discord-embed-title {
|
||||
font-weight: 800;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.discord-embed-description {
|
||||
color: var(--text);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.embed-field {
|
||||
margin-top: 10px;
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid rgba(255,255,255,0.06);
|
||||
}
|
||||
|
||||
.embed-field-name {
|
||||
font-weight: 700;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.embed-field-value {
|
||||
color: var(--text);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.attachment {
|
||||
margin-top: 12px;
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.attachment-file {
|
||||
display: inline-block;
|
||||
color: #8fd9a8;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.attachment-file:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.attachment-preview {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.attachment-preview img,
|
||||
.attachment-preview video {
|
||||
width: 100%;
|
||||
max-width: 560px;
|
||||
border-radius: 10px;
|
||||
border: 1px solid var(--border);
|
||||
display: block;
|
||||
background: #0a0f15;
|
||||
}
|
||||
|
||||
.attachment-preview audio {
|
||||
width: 100%;
|
||||
max-width: 560px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
code {
|
||||
background: var(--code);
|
||||
border: 1px solid var(--border);
|
||||
padding: 2px 6px;
|
||||
border-radius: 6px;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--code);
|
||||
border: 1px solid var(--border);
|
||||
padding: 12px;
|
||||
border-radius: 10px;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #8fd9ff;
|
||||
}
|
||||
|
||||
.empty-state {
|
||||
padding: 24px 20px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
body {
|
||||
padding: 18px 12px;
|
||||
}
|
||||
|
||||
.header,
|
||||
.messages-wrap {
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.message {
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.timestamp {
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<section class="header">
|
||||
<div class="header-top">
|
||||
<div class="title-wrap">
|
||||
<h1>Ticket Transcript</h1>
|
||||
<p>Exported conversation log for support ticket <strong>ticket-0004</strong></p>
|
||||
</div>
|
||||
<div class="badge">Closed Transcript</div>
|
||||
</div>
|
||||
|
||||
<div class="meta-grid">
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Channel</div>
|
||||
<div class="meta-value">ticket-0004</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Ticket ID</div>
|
||||
<div class="meta-value">1505240742992548034</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Message Count</div>
|
||||
<div class="meta-value">8</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Close Reason</div>
|
||||
<div class="meta-value">No Reason Provided.</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="messages-wrap">
|
||||
<div class="messages-header">Messages</div>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/1289713673123922032/5a9367a3f220aa781b3600571c1ea8de.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">BLITZ</span>
|
||||
<span class="userid">1289713673123922032</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content"></div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">sd</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">sdaf</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">dsf</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">eefw</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">dsf</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">ef</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:09</span>
|
||||
</div>
|
||||
|
||||
<div class="content">dsf</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,426 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Transcript - ticket-0005</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700;800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0e0e0e;
|
||||
--panel: #1d1d1d;
|
||||
--panel-2: #222222;
|
||||
--panel-3: #1d2938;
|
||||
--border: #2e2e2e;
|
||||
--text: #e6edf3;
|
||||
--muted: #606060;
|
||||
--accent: #396ff8;
|
||||
--accent-soft: rgba(34, 197, 94, 0.12);
|
||||
--accent-border: rgba(34, 197, 94, 0.25);
|
||||
--accent-text: #8df0ad;
|
||||
--link: #396ff8;
|
||||
--attachment-link: #396ff8;
|
||||
--code: #0e0e0e;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: "Poppins", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
}
|
||||
|
||||
body { padding: 32px 20px; }
|
||||
|
||||
.page { max-width: 1100px; margin: 0 auto; }
|
||||
|
||||
.header {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 24px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.header-top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.title-wrap h1 {
|
||||
margin: 0;
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.2;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.title-wrap p {
|
||||
margin: 8px 0 0;
|
||||
color: var(--muted);
|
||||
font-size: 0.98rem;
|
||||
}
|
||||
|
||||
.badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
background: var(--accent-soft);
|
||||
color: var(--accent-text);
|
||||
border: 1px solid var(--accent-border);
|
||||
padding: 8px 12px;
|
||||
border-radius: 999px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.meta-grid {
|
||||
margin-top: 18px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.meta-card {
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.meta-label {
|
||||
color: var(--muted);
|
||||
font-size: 0.82rem;
|
||||
margin-bottom: 6px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.meta-value {
|
||||
font-size: 0.98rem;
|
||||
font-weight: 600;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.messages-wrap {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.messages-header {
|
||||
padding: 18px 20px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--panel-2);
|
||||
font-weight: 800;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.message {
|
||||
display: flex;
|
||||
gap: 14px;
|
||||
padding: 18px 20px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.message:last-child { border-bottom: none; }
|
||||
|
||||
.avatar {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
min-width: 42px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
background: var(--panel-3);
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.message-body { min-width: 0; flex: 1; }
|
||||
|
||||
.message-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.username {
|
||||
font-weight: 800;
|
||||
color: var(--text);
|
||||
font-size: 0.98rem;
|
||||
}
|
||||
|
||||
.userid {
|
||||
color: var(--muted);
|
||||
font-size: 0.8rem;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
}
|
||||
|
||||
.timestamp {
|
||||
color: var(--muted);
|
||||
font-size: 0.82rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.content {
|
||||
color: var(--text);
|
||||
font-size: 0.96rem;
|
||||
line-height: 1.6;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.content:empty { display: none; }
|
||||
|
||||
.discord-embed {
|
||||
margin-top: 12px;
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-left: 4px solid var(--accent);
|
||||
border-radius: 10px;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
|
||||
.discord-embed-title { font-weight: 800; margin-bottom: 6px; }
|
||||
.discord-embed-description { color: var(--text); line-height: 1.5; }
|
||||
|
||||
.embed-field {
|
||||
margin-top: 10px;
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid rgba(255,255,255,0.06);
|
||||
}
|
||||
|
||||
.embed-field-name { font-weight: 700; margin-bottom: 4px; }
|
||||
.embed-field-value { color: var(--text); line-height: 1.5; }
|
||||
|
||||
.attachment {
|
||||
margin-top: 12px;
|
||||
background: var(--panel-2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.attachment-file {
|
||||
display: inline-block;
|
||||
color: var(--attachment-link);
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.attachment-file:hover { text-decoration: underline; }
|
||||
|
||||
.attachment-preview { margin-top: 10px; }
|
||||
|
||||
.attachment-preview img,
|
||||
.attachment-preview video {
|
||||
width: 100%;
|
||||
max-width: 560px;
|
||||
border-radius: 10px;
|
||||
border: 1px solid var(--border);
|
||||
display: block;
|
||||
background: #0a0f15;
|
||||
}
|
||||
|
||||
.attachment-preview audio {
|
||||
width: 100%;
|
||||
max-width: 560px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
code {
|
||||
background: var(--code);
|
||||
border: 1px solid var(--border);
|
||||
padding: 2px 6px;
|
||||
border-radius: 6px;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--code);
|
||||
border: 1px solid var(--border);
|
||||
padding: 12px;
|
||||
border-radius: 10px;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
pre code { background: transparent; border: none; padding: 0; }
|
||||
|
||||
a { color: var(--link); }
|
||||
|
||||
.empty-state { padding: 24px 20px; color: var(--muted); }
|
||||
|
||||
@media (max-width: 700px) {
|
||||
body { padding: 18px 12px; }
|
||||
.header, .messages-wrap { border-radius: 12px; }
|
||||
.message { padding: 14px; }
|
||||
.timestamp { width: 100%; margin-left: 0; }
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<section class="header">
|
||||
<div class="header-top">
|
||||
<div class="title-wrap">
|
||||
<h1>Ticket Transcript</h1>
|
||||
<p>Exported conversation log for support ticket <strong>ticket-0005</strong></p>
|
||||
</div>
|
||||
<div class="badge">Closed Transcript</div>
|
||||
</div>
|
||||
|
||||
<div class="meta-grid">
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Ticket Name</div>
|
||||
<div class="meta-value">ticket-0005</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Ticket ID</div>
|
||||
<div class="meta-value">1505247252829180018</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Message Count</div>
|
||||
<div class="meta-value">8</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Close Reason</div>
|
||||
<div class="meta-value">No Reason Provided.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<section class="messages-wrap">
|
||||
<div class="messages-header">Messages</div>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/1289713673123922032/5a9367a3f220aa781b3600571c1ea8de.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">BLITZ</span>
|
||||
<span class="userid">1289713673123922032</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">fdg</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">fdg</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">df</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">gfdg</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">df</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">gdfg</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="message">
|
||||
<img src="https://cdn.discordapp.com/avatars/829112572816130058/823630e777efe85c7fe71402f00ab0c1.png?size=128" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">ch_ar.</span>
|
||||
<span class="userid">829112572816130058</span>
|
||||
<span class="timestamp">16 May 2026, 17:35</span>
|
||||
</div>
|
||||
<div class="content">fdg</div>
|
||||
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"autoDelete": {
|
||||
"enabled": false,
|
||||
"afterDays": 30
|
||||
},
|
||||
"publicAccess": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
[2026-05-16T16:08:27.722Z] Error handling ticket close: Error: Transcript log channel missing or inaccessible.
|
||||
[2026-05-16T16:09:37.993Z] Error handling ticket close: Error: Transcript log channel missing or inaccessible.
|
||||
[2026-05-16T16:10:44.033Z] Error handling ticket close: Error: Transcript log channel missing or inaccessible.
|
||||
[2026-05-16T16:34:05.434Z] Error handling ticket close: Error: Transcript log channel missing or inaccessible.
|
||||
@@ -1,323 +0,0 @@
|
||||
[2026-05-16T16:05:18.835Z] [API] Server running on port 3000
|
||||
[2026-05-16T16:05:19.572Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:05:19.573Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:05:19.573Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:05:19.574Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:05:19.574Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:05:19.575Z] [90m------[0m
|
||||
[2026-05-16T16:05:19.576Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:05:19.576Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:05:19.576Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:05:19.577Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:05:19.577Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:05:19.578Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:05:19.578Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:05:19.579Z] [90m-----[0m
|
||||
[2026-05-16T16:05:19.580Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:05:19.580Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:05:19.581Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:05:19.581Z]
|
||||
[2026-05-16T16:05:19.582Z] [Dashboard] Discord bot is ready — full stats and guild tools are available
|
||||
[2026-05-16T16:05:19.584Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:05:19.585Z] [90m------------[0m
|
||||
[2026-05-16T16:05:19.587Z] [33m![0m Missing roles (ROLE_ID, ROLE_ID, ROLE_ID)
|
||||
[2026-05-16T16:05:19.587Z] [33m![0m Missing channels (1469028381638000725)
|
||||
[2026-05-16T16:05:19.588Z]
|
||||
[2026-05-16T16:05:19.975Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:06:05.176Z] [32m [Executed] [37;1m ch_ar. has executed ticketpanel
|
||||
[2026-05-16T16:06:05.178Z] [TICKET PANEL] TicketHome channel not found. Please check your config file.
|
||||
[2026-05-16T16:06:40.773Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:06:41.788Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:06:41.788Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:06:41.789Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:06:41.789Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:06:41.789Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:06:41.789Z] [90m------[0m
|
||||
[2026-05-16T16:06:41.790Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:06:41.790Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:06:41.790Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:06:41.791Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:06:41.791Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:06:41.792Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:06:41.792Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:06:41.792Z] [90m-----[0m
|
||||
[2026-05-16T16:06:41.793Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:06:41.794Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:06:41.796Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:06:41.797Z]
|
||||
[2026-05-16T16:06:41.798Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:06:41.799Z] [90m------------[0m
|
||||
[2026-05-16T16:06:41.799Z] [33m![0m Missing roles (ROLE_ID, ROLE_ID, ROLE_ID)
|
||||
[2026-05-16T16:06:41.800Z]
|
||||
[2026-05-16T16:06:42.207Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:06:42.208Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:06:46.079Z] [32m [Executed] [37;1m ch_ar. has executed ticketpanel
|
||||
[2026-05-16T16:07:13.971Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:07:14.625Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:07:14.626Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:07:14.626Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:07:14.627Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:07:14.627Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:07:14.629Z] [90m------[0m
|
||||
[2026-05-16T16:07:14.629Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:07:14.630Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:07:14.630Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:07:14.630Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:07:14.631Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:07:14.631Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:07:14.632Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:07:14.632Z] [90m-----[0m
|
||||
[2026-05-16T16:07:14.633Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:07:14.634Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:07:14.634Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:07:14.635Z]
|
||||
[2026-05-16T16:07:14.636Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:07:14.637Z] [90m------------[0m
|
||||
[2026-05-16T16:07:14.638Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:07:14.639Z]
|
||||
[2026-05-16T16:07:14.949Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:07:14.950Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:07:53.691Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:07:54.472Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:07:54.473Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:07:54.473Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:07:54.473Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:07:54.474Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:07:54.474Z] [90m------[0m
|
||||
[2026-05-16T16:07:54.474Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:07:54.475Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:07:54.475Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:07:54.476Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:07:54.476Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:07:54.476Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:07:54.477Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:07:54.477Z] [90m-----[0m
|
||||
[2026-05-16T16:07:54.478Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:07:54.479Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:07:54.479Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:07:54.480Z]
|
||||
[2026-05-16T16:07:54.480Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:07:54.481Z] [90m------------[0m
|
||||
[2026-05-16T16:07:54.481Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:07:54.482Z]
|
||||
[2026-05-16T16:07:54.774Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:07:54.774Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:09:08.559Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:09:09.098Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:09:09.099Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:09:09.101Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:09:09.101Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:09:09.102Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:09:09.102Z] [90m------[0m
|
||||
[2026-05-16T16:09:09.103Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:09:09.103Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:09:09.104Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:09:09.104Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:09:09.105Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:09:09.105Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:09:09.105Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:09:09.106Z] [90m-----[0m
|
||||
[2026-05-16T16:09:09.107Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:09:09.107Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:09:09.108Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:09:09.109Z]
|
||||
[2026-05-16T16:09:09.110Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:09:09.111Z] [90m------------[0m
|
||||
[2026-05-16T16:09:09.112Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:09:09.112Z]
|
||||
[2026-05-16T16:09:09.434Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:09:09.435Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:10:24.089Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:10:24.662Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:10:24.662Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:10:24.663Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:10:24.663Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:10:24.664Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:10:24.664Z] [90m------[0m
|
||||
[2026-05-16T16:10:24.664Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:10:24.665Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:10:24.665Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:10:24.666Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:10:24.666Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:10:24.666Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:10:24.667Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:10:24.667Z] [90m-----[0m
|
||||
[2026-05-16T16:10:24.668Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:10:24.670Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:10:24.671Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:10:24.671Z]
|
||||
[2026-05-16T16:10:24.672Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:10:24.673Z] [90m------------[0m
|
||||
[2026-05-16T16:10:24.674Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:10:24.675Z]
|
||||
[2026-05-16T16:10:24.951Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:10:24.952Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:21:37.767Z] [API] Server running on port 3000
|
||||
[2026-05-16T16:21:38.731Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:21:38.731Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:21:38.732Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:21:38.732Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:21:38.733Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:21:38.733Z] [90m------[0m
|
||||
[2026-05-16T16:21:38.733Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:21:38.734Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:21:38.734Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:21:38.735Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:21:38.735Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:21:38.736Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:21:38.736Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:21:38.737Z] [90m-----[0m
|
||||
[2026-05-16T16:21:38.737Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:21:38.738Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:21:38.738Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:21:38.739Z]
|
||||
[2026-05-16T16:21:38.740Z] [Dashboard] Discord bot is ready — full stats and guild tools are available
|
||||
[2026-05-16T16:21:38.741Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:21:38.741Z] [90m------------[0m
|
||||
[2026-05-16T16:21:38.743Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:21:38.745Z]
|
||||
[2026-05-16T16:21:38.986Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:22:10.150Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:22:10.821Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:22:10.821Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:22:10.822Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:22:10.822Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:22:10.822Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:22:10.823Z] [90m------[0m
|
||||
[2026-05-16T16:22:10.823Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:22:10.823Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:22:10.824Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:22:10.825Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:22:10.826Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:22:10.827Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:22:10.827Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:22:10.828Z] [90m-----[0m
|
||||
[2026-05-16T16:22:10.828Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:22:10.829Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:22:10.829Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:22:10.830Z]
|
||||
[2026-05-16T16:22:10.831Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:22:10.831Z] [90m------------[0m
|
||||
[2026-05-16T16:22:10.832Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:22:10.832Z]
|
||||
[2026-05-16T16:22:11.140Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:22:11.140Z] [BotReload] Bot restarted successfully
|
||||
[2026-05-16T16:28:25.190Z] [API] Server running on port 3000
|
||||
[2026-05-16T16:28:26.233Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:28:26.234Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:28:26.234Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:28:26.235Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:28:26.235Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:28:26.236Z] [90m------[0m
|
||||
[2026-05-16T16:28:26.236Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:28:26.237Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:28:26.237Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:28:26.238Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:28:26.238Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:28:26.240Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:28:26.241Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:28:26.241Z] [90m-----[0m
|
||||
[2026-05-16T16:28:26.242Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:28:26.243Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:28:26.243Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:28:26.244Z]
|
||||
[2026-05-16T16:28:26.244Z] [Dashboard] Discord bot is ready — full stats and guild tools are available
|
||||
[2026-05-16T16:28:26.248Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:28:26.250Z] [90m------------[0m
|
||||
[2026-05-16T16:28:26.252Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:28:26.252Z]
|
||||
[2026-05-16T16:28:26.661Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:32:06.353Z] [API] Server running on port 3000
|
||||
[2026-05-16T16:32:07.061Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:32:07.062Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:32:07.063Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:32:07.063Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:32:07.064Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:32:07.065Z] [90m------[0m
|
||||
[2026-05-16T16:32:07.065Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:32:07.065Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:32:07.066Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:32:07.066Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:32:07.067Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:32:07.067Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:32:07.067Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:32:07.068Z] [90m-----[0m
|
||||
[2026-05-16T16:32:07.068Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:32:07.069Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:32:07.070Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:32:07.070Z]
|
||||
[2026-05-16T16:32:07.071Z] [Dashboard] Discord bot is ready — full stats and guild tools are available
|
||||
[2026-05-16T16:32:07.073Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:32:07.074Z] [90m------------[0m
|
||||
[2026-05-16T16:32:07.076Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:32:07.076Z]
|
||||
[2026-05-16T16:32:07.631Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:34:35.063Z] [BotReload] Restarting Discord bot after config change…
|
||||
[2026-05-16T16:34:35.633Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:34:35.633Z] [1m[32mSupportBot[0m
|
||||
[2026-05-16T16:34:35.634Z] [90mEmerald Services[0m
|
||||
[2026-05-16T16:34:35.634Z] [90m────────────────────────────────────────────────────────[0m
|
||||
[2026-05-16T16:34:35.634Z]
|
||||
[32mSystem[0m
|
||||
[2026-05-16T16:34:35.635Z] [90m------[0m
|
||||
[2026-05-16T16:34:35.635Z] [90mBot Name [0m SupportBo
|
||||
[2026-05-16T16:34:35.636Z] [90mVersion [0m v26.1.1
|
||||
[2026-05-16T16:34:35.636Z] [90mNode.js [0m v24.14.1
|
||||
[2026-05-16T16:34:35.636Z] [90mDiscord.js [0m v14.26.4
|
||||
[2026-05-16T16:34:35.637Z] [90mLogged in as [0m BLITZ#7183
|
||||
[2026-05-16T16:34:35.637Z] [90mGuilds [0m 1
|
||||
[2026-05-16T16:34:35.637Z]
|
||||
[32mLinks[0m
|
||||
[2026-05-16T16:34:35.638Z] [90m-----[0m
|
||||
[2026-05-16T16:34:35.638Z] [90mDocs [0m https://emerald-services.gitbook.io/
|
||||
[2026-05-16T16:34:35.639Z] [90mDiscord [0m https://dsc.gg/emerald-dev
|
||||
[2026-05-16T16:34:35.639Z] [90mInvite [0m https://discord.com/api/oauth2/authorize?client_id=1289713673123922032&permissions=8&scope=bot%20applications.commands
|
||||
[2026-05-16T16:34:35.639Z]
|
||||
[2026-05-16T16:34:35.640Z]
|
||||
[32mConfig Check[0m
|
||||
[2026-05-16T16:34:35.641Z] [90m------------[0m
|
||||
[2026-05-16T16:34:35.642Z] [32m✓[0m All configurations validated successfully
|
||||
[2026-05-16T16:34:35.642Z]
|
||||
[2026-05-16T16:34:35.923Z]
|
||||
[32m✓[0m [37mSlash Commands Registered[0m [90mfor Char's Test Server[0m
|
||||
[2026-05-16T16:34:35.924Z] [BotReload] Bot restarted successfully
|
||||
@@ -125,11 +125,11 @@ API:
|
||||
**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`)
|
||||
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
|
||||
|
||||
For production, change `RedirectUri` to your public URL (e.g. `https://bot.example.com/api/auth/discord/callback`) and use HTTPS.
|
||||
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
|
||||
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const BRANDING_DIR = path.join(__dirname, '../Data/branding');
|
||||
const BRANDING_FILE = path.join(BRANDING_DIR, 'branding.json');
|
||||
const FAVICON_BASENAME = 'favicon';
|
||||
|
||||
const DEFAULTS = {
|
||||
title: 'SupportBot',
|
||||
pageTitle: 'SupportBot Dashboard',
|
||||
faviconFile: null,
|
||||
faviconMime: null,
|
||||
updatedAt: null,
|
||||
};
|
||||
|
||||
const ALLOWED_MIME = new Set([
|
||||
'image/png',
|
||||
'image/jpeg',
|
||||
'image/x-icon',
|
||||
'image/vnd.microsoft.icon',
|
||||
'image/svg+xml',
|
||||
'image/webp',
|
||||
]);
|
||||
|
||||
const MIME_EXT = {
|
||||
'image/png': '.png',
|
||||
'image/jpeg': '.jpg',
|
||||
'image/x-icon': '.ico',
|
||||
'image/vnd.microsoft.icon': '.ico',
|
||||
'image/svg+xml': '.svg',
|
||||
'image/webp': '.webp',
|
||||
};
|
||||
|
||||
function ensureDir() {
|
||||
if (!fs.existsSync(BRANDING_DIR)) {
|
||||
fs.mkdirSync(BRANDING_DIR, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function readBranding() {
|
||||
ensureDir();
|
||||
if (!fs.existsSync(BRANDING_FILE)) {
|
||||
return { ...DEFAULTS };
|
||||
}
|
||||
try {
|
||||
const raw = JSON.parse(fs.readFileSync(BRANDING_FILE, 'utf8'));
|
||||
return {
|
||||
title: String(raw.title || DEFAULTS.title).slice(0, 64),
|
||||
pageTitle: String(raw.pageTitle || DEFAULTS.pageTitle).slice(0, 80),
|
||||
faviconFile: raw.faviconFile || null,
|
||||
faviconMime: raw.faviconMime || null,
|
||||
updatedAt: raw.updatedAt || null,
|
||||
};
|
||||
} catch {
|
||||
return { ...DEFAULTS };
|
||||
}
|
||||
}
|
||||
|
||||
function writeBranding(data) {
|
||||
ensureDir();
|
||||
const next = {
|
||||
title: String(data.title || DEFAULTS.title).slice(0, 64),
|
||||
pageTitle: String(data.pageTitle || DEFAULTS.pageTitle).slice(0, 80),
|
||||
faviconFile: data.faviconFile ?? null,
|
||||
faviconMime: data.faviconMime ?? null,
|
||||
updatedAt: Date.now(),
|
||||
};
|
||||
fs.writeFileSync(BRANDING_FILE, JSON.stringify(next, null, 2), 'utf8');
|
||||
return next;
|
||||
}
|
||||
|
||||
function publicPayload(branding) {
|
||||
const hasFavicon = Boolean(branding.faviconFile);
|
||||
return {
|
||||
title: branding.title,
|
||||
pageTitle: branding.pageTitle,
|
||||
hasFavicon,
|
||||
faviconUrl: hasFavicon ? '/api/branding/favicon' : null,
|
||||
updatedAt: branding.updatedAt,
|
||||
};
|
||||
}
|
||||
|
||||
function updateBranding({ title, pageTitle }) {
|
||||
const current = readBranding();
|
||||
return writeBranding({
|
||||
...current,
|
||||
title: title !== undefined ? title : current.title,
|
||||
pageTitle: pageTitle !== undefined ? pageTitle : current.pageTitle,
|
||||
});
|
||||
}
|
||||
|
||||
function removeExistingFavicons() {
|
||||
if (!fs.existsSync(BRANDING_DIR)) return;
|
||||
for (const file of fs.readdirSync(BRANDING_DIR)) {
|
||||
if (file.startsWith(`${FAVICON_BASENAME}.`)) {
|
||||
fs.unlinkSync(path.join(BRANDING_DIR, file));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveFaviconFromBase64(dataUrl) {
|
||||
const match = String(dataUrl || '').match(
|
||||
/^data:([\w/+.-]+);base64,([A-Za-z0-9+/=]+)$/,
|
||||
);
|
||||
if (!match) {
|
||||
throw new Error('Invalid image data. Upload a PNG, ICO, SVG, or WebP file.');
|
||||
}
|
||||
|
||||
const mime = match[1];
|
||||
if (!ALLOWED_MIME.has(mime)) {
|
||||
throw new Error('Unsupported image type. Use PNG, ICO, SVG, JPEG, or WebP.');
|
||||
}
|
||||
|
||||
const buffer = Buffer.from(match[2], 'base64');
|
||||
if (buffer.length > 512 * 1024) {
|
||||
throw new Error('Favicon must be 512 KB or smaller.');
|
||||
}
|
||||
|
||||
ensureDir();
|
||||
removeExistingFavicons();
|
||||
|
||||
const ext = MIME_EXT[mime] || '.png';
|
||||
const filename = `${FAVICON_BASENAME}${ext}`;
|
||||
const filePath = path.join(BRANDING_DIR, filename);
|
||||
fs.writeFileSync(filePath, buffer);
|
||||
|
||||
const current = readBranding();
|
||||
return writeBranding({
|
||||
...current,
|
||||
faviconFile: filename,
|
||||
faviconMime: mime,
|
||||
});
|
||||
}
|
||||
|
||||
function clearFavicon() {
|
||||
removeExistingFavicons();
|
||||
const current = readBranding();
|
||||
return writeBranding({
|
||||
...current,
|
||||
faviconFile: null,
|
||||
faviconMime: null,
|
||||
});
|
||||
}
|
||||
|
||||
function getFaviconPath() {
|
||||
const branding = readBranding();
|
||||
if (!branding.faviconFile) return null;
|
||||
const filePath = path.join(BRANDING_DIR, branding.faviconFile);
|
||||
if (!fs.existsSync(filePath)) return null;
|
||||
return { filePath, mime: branding.faviconMime || 'image/png' };
|
||||
}
|
||||
|
||||
function resetBranding() {
|
||||
clearFavicon();
|
||||
return writeBranding({ ...DEFAULTS });
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
readBranding,
|
||||
writeBranding,
|
||||
publicPayload,
|
||||
updateBranding,
|
||||
saveFaviconFromBase64,
|
||||
clearFavicon,
|
||||
getFaviconPath,
|
||||
resetBranding,
|
||||
DEFAULTS,
|
||||
};
|
||||
@@ -51,10 +51,14 @@ function createSessionPayload(user) {
|
||||
};
|
||||
}
|
||||
|
||||
function sessionCookieOptions(maxAgeMs = SESSION_MAX_AGE_MS) {
|
||||
function sessionCookieOptions(maxAgeMs = SESSION_MAX_AGE_MS, opts = {}) {
|
||||
const secure =
|
||||
opts.secure !== undefined
|
||||
? Boolean(opts.secure)
|
||||
: process.env.NODE_ENV === "production";
|
||||
return {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === "production",
|
||||
secure,
|
||||
sameSite: "lax",
|
||||
maxAge: maxAgeMs,
|
||||
path: "/",
|
||||
|
||||
+133
-6
@@ -3,7 +3,9 @@ const axios = require("axios");
|
||||
|
||||
const DISCORD_API = "https://discord.com/api";
|
||||
const OAUTH_STATE_COOKIE = "sb_oauth_state";
|
||||
const OAUTH_REDIRECT_COOKIE = "sb_oauth_redirect";
|
||||
const OAUTH_STATE_MAX_AGE_MS = 10 * 60 * 1000;
|
||||
const CALLBACK_PATH = "/api/auth/discord/callback";
|
||||
|
||||
function discordAvatarUrl(user) {
|
||||
if (user.avatar) {
|
||||
@@ -14,10 +16,125 @@ function discordAvatarUrl(user) {
|
||||
return `https://cdn.discordapp.com/embed/avatars/${index}.png`;
|
||||
}
|
||||
|
||||
function buildAuthorizeUrl(oauth, state) {
|
||||
function getTrustProxySetting(apiConfig) {
|
||||
if (apiConfig?.TrustProxy === false) return false;
|
||||
if (typeof apiConfig?.TrustProxy === "number") return apiConfig.TrustProxy;
|
||||
if (apiConfig?.TrustProxy === true) return 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
function getRequestProto(req, apiConfig) {
|
||||
if (apiConfig?.TrustProxy !== false) {
|
||||
const forwarded = req.get("x-forwarded-proto");
|
||||
if (forwarded) {
|
||||
return forwarded.split(",")[0].trim().toLowerCase();
|
||||
}
|
||||
}
|
||||
return (req.protocol || "http").toLowerCase();
|
||||
}
|
||||
|
||||
function getRequestHost(req) {
|
||||
const forwarded = req.get("x-forwarded-host");
|
||||
if (forwarded) {
|
||||
return forwarded.split(",")[0].trim();
|
||||
}
|
||||
return req.get("host") || "";
|
||||
}
|
||||
|
||||
function getRequestOrigin(req, apiConfig) {
|
||||
const proto = getRequestProto(req, apiConfig);
|
||||
const host = getRequestHost(req);
|
||||
if (!host) return null;
|
||||
return `${proto}://${host}`;
|
||||
}
|
||||
|
||||
function normalizeRedirectUri(uri) {
|
||||
try {
|
||||
const u = new URL(uri);
|
||||
u.hash = "";
|
||||
u.search = "";
|
||||
return u.toString();
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function redirectUriMatchesHostPath(a, b) {
|
||||
try {
|
||||
const ua = new URL(a);
|
||||
const ub = new URL(b);
|
||||
return ua.host === ub.host && ua.pathname === ub.pathname;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function collectConfiguredRedirectUris(oauth) {
|
||||
const list = [];
|
||||
if (oauth?.RedirectUri) {
|
||||
const normalized = normalizeRedirectUri(oauth.RedirectUri);
|
||||
if (normalized) list.push(normalized);
|
||||
}
|
||||
if (Array.isArray(oauth?.RedirectUris)) {
|
||||
for (const entry of oauth.RedirectUris) {
|
||||
const normalized = normalizeRedirectUri(entry);
|
||||
if (normalized && !list.includes(normalized)) {
|
||||
list.push(normalized);
|
||||
}
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick the OAuth redirect_uri for this request. When UseRequestOrigin is enabled
|
||||
* (default), uses the same host/path as RedirectUri but the protocol the user
|
||||
* actually used (http vs https). Register every variant in the Discord portal.
|
||||
*/
|
||||
function resolveOAuthRedirectUri(req, oauth, apiConfig) {
|
||||
const configured = collectConfiguredRedirectUris(oauth);
|
||||
const fallback = configured[0] || oauth?.RedirectUri || "";
|
||||
|
||||
const useRequestOrigin = oauth?.UseRequestOrigin !== false;
|
||||
if (!useRequestOrigin || !req) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
const origin = getRequestOrigin(req, apiConfig);
|
||||
if (!origin) return fallback;
|
||||
|
||||
const dynamic = `${origin}${CALLBACK_PATH}`;
|
||||
const normalizedDynamic = normalizeRedirectUri(dynamic);
|
||||
if (!normalizedDynamic) return fallback;
|
||||
|
||||
if (configured.includes(normalizedDynamic)) {
|
||||
return normalizedDynamic;
|
||||
}
|
||||
|
||||
const matchesConfigured = configured.some((uri) =>
|
||||
redirectUriMatchesHostPath(uri, normalizedDynamic),
|
||||
);
|
||||
if (matchesConfigured) {
|
||||
return normalizedDynamic;
|
||||
}
|
||||
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function isSecureRequest(req, oauth, apiConfig) {
|
||||
if (oauth?.CookieSecure === true) return true;
|
||||
if (oauth?.CookieSecure === false) return false;
|
||||
if (req) {
|
||||
if (typeof req.secure === "boolean") return req.secure;
|
||||
return getRequestProto(req, apiConfig) === "https";
|
||||
}
|
||||
return process.env.NODE_ENV === "production";
|
||||
}
|
||||
|
||||
function buildAuthorizeUrl(oauth, state, redirectUri) {
|
||||
const params = new URLSearchParams({
|
||||
client_id: oauth.ClientId,
|
||||
redirect_uri: oauth.RedirectUri,
|
||||
redirect_uri: redirectUri,
|
||||
response_type: "code",
|
||||
scope: "identify",
|
||||
state,
|
||||
@@ -26,13 +143,13 @@ function buildAuthorizeUrl(oauth, state) {
|
||||
return `${DISCORD_API}/oauth2/authorize?${params.toString()}`;
|
||||
}
|
||||
|
||||
async function exchangeCode(oauth, code) {
|
||||
async function exchangeCode(oauth, code, redirectUri) {
|
||||
const body = new URLSearchParams({
|
||||
client_id: oauth.ClientId,
|
||||
client_secret: oauth.ClientSecret,
|
||||
grant_type: "authorization_code",
|
||||
code,
|
||||
redirect_uri: oauth.RedirectUri,
|
||||
redirect_uri: redirectUri,
|
||||
});
|
||||
|
||||
const { data } = await axios.post(`${DISCORD_API}/oauth2/token`, body, {
|
||||
@@ -55,16 +172,20 @@ function createOAuthState() {
|
||||
return crypto.randomBytes(24).toString("hex");
|
||||
}
|
||||
|
||||
function oauthStateCookieOptions() {
|
||||
function oauthStateCookieOptions(req, oauth, apiConfig) {
|
||||
return {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === "production",
|
||||
secure: isSecureRequest(req, oauth, apiConfig),
|
||||
sameSite: "lax",
|
||||
maxAge: OAUTH_STATE_MAX_AGE_MS,
|
||||
path: "/",
|
||||
};
|
||||
}
|
||||
|
||||
function oauthRedirectCookieOptions(req, oauth, apiConfig) {
|
||||
return oauthStateCookieOptions(req, oauth, apiConfig);
|
||||
}
|
||||
|
||||
function isOAuthConfigured(oauth) {
|
||||
return Boolean(
|
||||
oauth?.Enabled &&
|
||||
@@ -93,12 +214,18 @@ function formatPublicUser(user) {
|
||||
|
||||
module.exports = {
|
||||
OAUTH_STATE_COOKIE,
|
||||
OAUTH_REDIRECT_COOKIE,
|
||||
OAUTH_STATE_MAX_AGE_MS,
|
||||
CALLBACK_PATH,
|
||||
getTrustProxySetting,
|
||||
resolveOAuthRedirectUri,
|
||||
isSecureRequest,
|
||||
buildAuthorizeUrl,
|
||||
exchangeCode,
|
||||
fetchDiscordUser,
|
||||
createOAuthState,
|
||||
oauthStateCookieOptions,
|
||||
oauthRedirectCookieOptions,
|
||||
isOAuthConfigured,
|
||||
isUserAllowed,
|
||||
formatPublicUser,
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const TRANSCRIPT_DIR = path.join(__dirname, '../Data/Transcripts');
|
||||
const SETTINGS_FILE = path.join(__dirname, '../Data/transcript-settings.json');
|
||||
|
||||
const DEFAULT_SETTINGS = {
|
||||
autoDelete: {
|
||||
enabled: false,
|
||||
afterDays: 30,
|
||||
},
|
||||
publicAccess: {
|
||||
enabled: false,
|
||||
},
|
||||
};
|
||||
|
||||
let purgeTimer = null;
|
||||
|
||||
function ensureTranscriptDir() {
|
||||
if (!fs.existsSync(TRANSCRIPT_DIR)) {
|
||||
fs.mkdirSync(TRANSCRIPT_DIR, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function getSettings() {
|
||||
try {
|
||||
if (!fs.existsSync(SETTINGS_FILE)) {
|
||||
return JSON.parse(JSON.stringify(DEFAULT_SETTINGS));
|
||||
}
|
||||
const raw = JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8'));
|
||||
const days = Number(raw?.autoDelete?.afterDays);
|
||||
return {
|
||||
autoDelete: {
|
||||
enabled: Boolean(raw?.autoDelete?.enabled),
|
||||
afterDays:
|
||||
Number.isFinite(days) && days >= 1
|
||||
? Math.min(Math.floor(days), 3650)
|
||||
: DEFAULT_SETTINGS.autoDelete.afterDays,
|
||||
},
|
||||
publicAccess: {
|
||||
enabled: Boolean(raw?.publicAccess?.enabled),
|
||||
},
|
||||
};
|
||||
} catch {
|
||||
return JSON.parse(JSON.stringify(DEFAULT_SETTINGS));
|
||||
}
|
||||
}
|
||||
|
||||
function saveSettings(patch) {
|
||||
const current = getSettings();
|
||||
const next = {
|
||||
autoDelete: {
|
||||
enabled:
|
||||
patch?.autoDelete?.enabled !== undefined
|
||||
? Boolean(patch.autoDelete.enabled)
|
||||
: current.autoDelete.enabled,
|
||||
afterDays:
|
||||
patch?.autoDelete?.afterDays !== undefined
|
||||
? Math.min(
|
||||
Math.max(Math.floor(Number(patch.autoDelete.afterDays) || 1), 1),
|
||||
3650,
|
||||
)
|
||||
: current.autoDelete.afterDays,
|
||||
},
|
||||
publicAccess: {
|
||||
enabled:
|
||||
patch?.publicAccess?.enabled !== undefined
|
||||
? Boolean(patch.publicAccess.enabled)
|
||||
: current.publicAccess.enabled,
|
||||
},
|
||||
};
|
||||
|
||||
const dir = path.dirname(SETTINGS_FILE);
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(next, null, 2), 'utf8');
|
||||
return next;
|
||||
}
|
||||
|
||||
function normalizeId(rawId) {
|
||||
return String(rawId).replace(/[^0-9]/g, '');
|
||||
}
|
||||
|
||||
function readTranscriptFile(rawId) {
|
||||
const id = normalizeId(rawId);
|
||||
if (!id) return null;
|
||||
ensureTranscriptDir();
|
||||
const filePath = path.join(TRANSCRIPT_DIR, `${id}-transcript.html`);
|
||||
if (!fs.existsSync(filePath)) return null;
|
||||
const content = fs.readFileSync(filePath, 'utf8');
|
||||
const titleMatch = content.match(/<title>\s*Transcript\s*-\s*([^<]+)\s*<\/title>/i);
|
||||
return {
|
||||
id,
|
||||
filePath,
|
||||
filename: `${id}-transcript.html`,
|
||||
content,
|
||||
ticketName: titleMatch ? titleMatch[1].trim() : null,
|
||||
};
|
||||
}
|
||||
|
||||
function listTranscripts() {
|
||||
ensureTranscriptDir();
|
||||
if (!fs.existsSync(TRANSCRIPT_DIR)) {
|
||||
return [];
|
||||
}
|
||||
return fs
|
||||
.readdirSync(TRANSCRIPT_DIR)
|
||||
.filter((f) => f.endsWith('-transcript.html'))
|
||||
.map((f) => {
|
||||
const id = f.replace('-transcript.html', '');
|
||||
const stats = fs.statSync(path.join(TRANSCRIPT_DIR, f));
|
||||
const parsed = readTranscriptFile(id);
|
||||
return {
|
||||
id,
|
||||
filename: f,
|
||||
createdAt: stats.mtime.toISOString(),
|
||||
size: stats.size,
|
||||
ticketName: parsed?.ticketName ?? null,
|
||||
};
|
||||
})
|
||||
.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));
|
||||
}
|
||||
|
||||
function deleteTranscript(rawId) {
|
||||
const id = normalizeId(rawId);
|
||||
if (!id) return false;
|
||||
const filePath = path.join(TRANSCRIPT_DIR, `${id}-transcript.html`);
|
||||
if (!fs.existsSync(filePath)) return false;
|
||||
fs.unlinkSync(filePath);
|
||||
return true;
|
||||
}
|
||||
|
||||
function purgeExpiredTranscripts() {
|
||||
const settings = getSettings();
|
||||
if (!settings.autoDelete.enabled) {
|
||||
return { deleted: 0, skipped: true };
|
||||
}
|
||||
|
||||
ensureTranscriptDir();
|
||||
const maxAgeMs = settings.autoDelete.afterDays * 24 * 60 * 60 * 1000;
|
||||
const cutoff = Date.now() - maxAgeMs;
|
||||
let deleted = 0;
|
||||
|
||||
for (const f of fs.readdirSync(TRANSCRIPT_DIR)) {
|
||||
if (!f.endsWith('-transcript.html')) continue;
|
||||
const filePath = path.join(TRANSCRIPT_DIR, f);
|
||||
const stats = fs.statSync(filePath);
|
||||
if (stats.mtime.getTime() < cutoff) {
|
||||
fs.unlinkSync(filePath);
|
||||
deleted += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return { deleted, skipped: false };
|
||||
}
|
||||
|
||||
function notFoundHtml(message = 'Transcript not found') {
|
||||
return `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Transcript</title>
|
||||
<style>body{font-family:system-ui,sans-serif;padding:2rem;background:#0b0f14;color:#e6edf3;margin:0}</style></head>
|
||||
<body><h1>${message}</h1></body></html>`;
|
||||
}
|
||||
|
||||
function servePublicTranscript(req, res) {
|
||||
const settings = getSettings();
|
||||
if (!settings.publicAccess.enabled) {
|
||||
return res.status(404).type('html').send(notFoundHtml('Transcript not found'));
|
||||
}
|
||||
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).type('html').send(notFoundHtml('Transcript not found'));
|
||||
}
|
||||
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader('Cache-Control', 'public, max-age=120');
|
||||
return res.send(transcript.content);
|
||||
}
|
||||
|
||||
function startAutoDeleteScheduler(intervalMs = 60 * 60 * 1000) {
|
||||
if (purgeTimer) return;
|
||||
|
||||
const run = () => {
|
||||
try {
|
||||
const result = purgeExpiredTranscripts();
|
||||
if (result.deleted > 0) {
|
||||
console.log(
|
||||
`[Transcripts] Auto-deleted ${result.deleted} transcript(s) older than ${getSettings().autoDelete.afterDays} day(s)`,
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('[Transcripts] Auto-delete failed:', err.message);
|
||||
}
|
||||
};
|
||||
|
||||
run();
|
||||
purgeTimer = setInterval(run, intervalMs);
|
||||
if (typeof purgeTimer.unref === 'function') {
|
||||
purgeTimer.unref();
|
||||
}
|
||||
}
|
||||
|
||||
function getPublicUrl(req, id) {
|
||||
const settings = getSettings();
|
||||
if (!settings.publicAccess.enabled) return null;
|
||||
const host = req.get('host');
|
||||
const proto = req.get('x-forwarded-proto') || req.protocol || 'http';
|
||||
return `${proto}://${host}/transcripts/${id}`;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
TRANSCRIPT_DIR,
|
||||
DEFAULT_SETTINGS,
|
||||
getSettings,
|
||||
saveSettings,
|
||||
readTranscriptFile,
|
||||
listTranscripts,
|
||||
deleteTranscript,
|
||||
purgeExpiredTranscripts,
|
||||
servePublicTranscript,
|
||||
startAutoDeleteScheduler,
|
||||
getPublicUrl,
|
||||
};
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "supportbot",
|
||||
"version": "26.2.0",
|
||||
"version": "26.3.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "supportbot",
|
||||
"version": "26.2.0",
|
||||
"version": "26.3.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitalets/google-translate-api": "^9.2.1",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "supportbot",
|
||||
"version": "26.2.0",
|
||||
"version": "26.3.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": {
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
function PE(t,r){for(var a=0;a<r.length;a++){const l=r[a];if(typeof l!="string"&&!Array.isArray(l)){for(const s in l)if(s!=="default"&&!(s in t)){const c=Object.getOwnPropertyDescriptor(l,s);c&&Object.defineProperty(t,s,c.get?c:{enumerable:!0,get:()=>l[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 f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&l(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 l(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function jb(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Zf={exports:{}},cs={};/**
|
||||
* @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 o1;function BE(){if(o1)return cs;o1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(l,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:l,key:f,ref:s!==void 0?s:null,props:c}}return cs.Fragment=r,cs.jsx=a,cs.jsxs=a,cs}var l1;function $E(){return l1||(l1=1,Zf.exports=BE()),Zf.exports}var u=$E(),Qf={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 s1;function UE(){if(s1)return je;s1=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"),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 _(){}_.prototype=N.prototype;function A(M,D,H){this.props=M,this.context=D,this.refs=j,this.updater=H||E}var T=A.prototype=new _;T.constructor=A,w(T,N.prototype),T.isPureReactComponent=!0;var z=Array.isArray;function P(){}var B={H:null,A:null,T:null,S:null},U=Object.prototype.hasOwnProperty;function Y(M,D,H){var X=H.ref;return{$$typeof:t,type:M,key:D,ref:X!==void 0?X:null,props:H}}function se(M,D){return Y(M.type,D,M.props)}function te(M){return typeof M=="object"&&M!==null&&M.$$typeof===t}function ce(M){var D={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(H){return D[H]})}var me=/\/+/g;function ae(M,D){return typeof M=="object"&&M!==null&&M.key!=null?ce(""+M.key):D.toString(36)}function de(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 O(M,D,H,X,F){var oe=typeof M;(oe==="undefined"||oe==="boolean")&&(M=null);var ee=!1;if(M===null)ee=!0;else switch(oe){case"bigint":case"string":case"number":ee=!0;break;case"object":switch(M.$$typeof){case t:case r:ee=!0;break;case b:return ee=M._init,O(ee(M._payload),D,H,X,F)}}if(ee)return F=F(M),ee=X===""?"."+ae(M,0):X,z(F)?(H="",ee!=null&&(H=ee.replace(me,"$&/")+"/"),O(F,D,H,"",function(Ce){return Ce})):F!=null&&(te(F)&&(F=se(F,H+(F.key==null||M&&M.key===F.key?"":(""+F.key).replace(me,"$&/")+"/")+ee)),D.push(F)),1;ee=0;var fe=X===""?".":X+":";if(z(M))for(var ue=0;ue<M.length;ue++)X=M[ue],oe=fe+ae(X,ue),ee+=O(X,D,H,oe,F);else if(ue=C(M),typeof ue=="function")for(M=ue.call(M),ue=0;!(X=M.next()).done;)X=X.value,oe=fe+ae(X,ue++),ee+=O(X,D,H,oe,F);else if(oe==="object"){if(typeof M.then=="function")return O(de(M),D,H,X,F);throw D=String(M),Error("Objects are not valid as a React child (found: "+(D==="[object Object]"?"object with keys {"+Object.keys(M).join(", ")+"}":D)+"). If you meant to render a collection of children, use an array instead.")}return ee}function q(M,D,H){if(M==null)return M;var X=[],F=0;return O(M,X,"","",function(oe){return D.call(H,oe,F++)}),X}function J(M){if(M._status===-1){var D=M._result;D=D(),D.then(function(H){(M._status===0||M._status===-1)&&(M._status=1,M._result=H)},function(H){(M._status===0||M._status===-1)&&(M._status=2,M._result=H)}),M._status===-1&&(M._status=0,M._result=D)}if(M._status===1)return M._result.default;throw M._result}var re=typeof reportError=="function"?reportError:function(M){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var D=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof M=="object"&&M!==null&&typeof M.message=="string"?String(M.message):String(M),error:M});if(!window.dispatchEvent(D))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",M);return}console.error(M)},Z={map:q,forEach:function(M,D,H){q(M,function(){D.apply(this,arguments)},H)},count:function(M){var D=0;return q(M,function(){D++}),D},toArray:function(M){return q(M,function(D){return D})||[]},only:function(M){if(!te(M))throw Error("React.Children.only expected to receive a single React element child.");return M}};return je.Activity=v,je.Children=Z,je.Component=N,je.Fragment=a,je.Profiler=s,je.PureComponent=A,je.StrictMode=l,je.Suspense=g,je.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=B,je.__COMPILER_RUNTIME={__proto__:null,c:function(M){return B.H.useMemoCache(M)}},je.cache=function(M){return function(){return M.apply(null,arguments)}},je.cacheSignal=function(){return null},je.cloneElement=function(M,D,H){if(M==null)throw Error("The argument must beLine truncated
|
||||
* @license React
|
||||
* scheduler.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 HE(){return c1||(c1=1,(function(t){function r(O,q){var J=O.length;O.push(q);e:for(;0<J;){var re=J-1>>>1,Z=O[re];if(0<s(Z,q))O[re]=q,O[J]=Z,J=re;else break e}}function a(O){return O.length===0?null:O[0]}function l(O){if(O.length===0)return null;var q=O[0],J=O.pop();if(J!==q){O[0]=J;e:for(var re=0,Z=O.length,M=Z>>>1;re<M;){var D=2*(re+1)-1,H=O[D],X=D+1,F=O[X];if(0>s(H,J))X<Z&&0>s(F,H)?(O[re]=F,O[X]=J,re=X):(O[re]=H,O[D]=J,re=D);else if(X<Z&&0>s(F,J))O[re]=F,O[X]=J,re=X;else break e}}return q}function s(O,q){var J=O.sortIndex-q.sortIndex;return J!==0?J:O.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,_=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function T(O){for(var q=a(h);q!==null;){if(q.callback===null)l(h);else if(q.startTime<=O)l(h),q.sortIndex=q.expirationTime,r(g,q);else break;q=a(h)}}function z(O){if(w=!1,T(O),!E)if(a(g)!==null)E=!0,P||(P=!0,ce());else{var q=a(h);q!==null&&de(z,q.startTime-O)}}var P=!1,B=-1,U=5,Y=-1;function se(){return j?!0:!(t.unstable_now()-Y<U)}function te(){if(j=!1,P){var O=t.unstable_now();Y=O;var q=!0;try{e:{E=!1,w&&(w=!1,_(B),B=-1),C=!0;var J=x;try{t:{for(T(O),v=a(g);v!==null&&!(v.expirationTime>O&&se());){var re=v.callback;if(typeof re=="function"){v.callback=null,x=v.priorityLevel;var Z=re(v.expirationTime<=O);if(O=t.unstable_now(),typeof Z=="function"){v.callback=Z,T(O),q=!0;break t}v===a(g)&&l(g),T(O)}else l(g);v=a(g)}if(v!==null)q=!0;else{var M=a(h);M!==null&&de(z,M.startTime-O),q=!1}}break e}finally{v=null,x=J,C=!1}q=void 0}}finally{q?ce():P=!1}}}var ce;if(typeof A=="function")ce=function(){A(te)};else if(typeof MessageChannel<"u"){var me=new MessageChannel,ae=me.port2;me.port1.onmessage=te,ce=function(){ae.postMessage(null)}}else ce=function(){N(te,0)};function de(O,q){B=N(function(){O(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(O){O.callback=null},t.unstable_forceFrameRate=function(O){0>O||125<O?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<O?Math.floor(1e3/O):5},t.unstable_getCurrentPriorityLevel=function(){return x},t.unstable_next=function(O){switch(x){case 1:case 2:case 3:var q=3;break;default:q=x}var J=x;x=q;try{return O()}finally{x=J}},t.unstable_requestPaint=function(){j=!0},t.unstable_runWithPriority=function(O,q){switch(O){case 1:case 2:case 3:case 4:case 5:break;default:O=3}var J=x;x=O;try{return q()}finally{x=J}},t.unstable_scheduleCallback=function(O,q,J){var re=t.unstable_now();switch(typeof J=="object"&&J!==null?(J=J.delay,J=typeof J=="number"&&0<J?re+J:re):J=re,O){case 1:var Z=-1;break;case 2:Z=250;break;case 5:Z=1073741823;break;case 4:Z=1e4;break;default:Z=5e3}return Z=J+Z,O={id:b++,callback:q,priorityLevel:O,startTime:J,expirationTime:Z,sortIndex:-1},J>re?(O.sortIndex=J,r(h,O),a(g)===null&&O===a(h)&&(w?(_(B),B=-1):w=!0,de(z,J-re))):(O.sortIndex=Z,r(g,O),E||C||(E=!0,P||(P=!0,ce()))),O},t.unstable_shouldYield=se,t.unstable_wrapCallback=function(O){var q=x;return function(){var J=x;x=q;try{return O.apply(this,arguments)}finally{x=J}}}})(tm)),tm}var u1;function IE(){return u1||(u1=1,em.exports=HE()),em.exports}var nm={exports:{}},Pt={};/**
|
||||
* @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 d1;function VE(){if(d1)return Pt;d1=1;var t=Zc();function r(g){var h="https://react.dev/errors/"+g;if(1<arguments.length){h+="?args[]="+encodeURIComponent(arguments[1]);for(var b=2;b<arguments.length;b++)h+="&args[]="+encodeURIComponent(arguments[b])}return"Minified React error #"+g+"; visit "+h+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var l={d:{f:a,r:function(){throw Error(r(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},s=Symbol.for("react.portal");function c(g,h,b){var v=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:s,key:v==null?null:""+v,children:g,containerInfo:h,implementation:b}}var f=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function m(g,h){if(g==="font")return"";if(typeof h=="string")return h==="use-credentials"?h:""}return Pt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=l,Pt.createPortal=function(g,h){var b=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!h||h.nodeType!==1&&h.nodeType!==9&&h.nodeType!==11)throw Error(r(299));return c(g,h,null,b)},Pt.flushSync=function(g){var h=f.T,b=l.p;try{if(f.T=null,l.p=2,g)return g()}finally{f.T=h,l.p=b,l.d.f()}},Pt.preconnect=function(g,h){typeof g=="string"&&(h?(h=h.crossOrigin,h=typeof h=="string"?h==="use-credentials"?h:"":void 0):h=null,l.d.C(g,h))},Pt.prefetchDNS=function(g){typeof g=="string"&&l.d.D(g)},Pt.preinit=function(g,h){if(typeof g=="string"&&h&&typeof h.as=="string"){var b=h.as,v=m(b,h.crossOrigin),x=typeof h.integrity=="string"?h.integrity:void 0,C=typeof h.fetchPriority=="string"?h.fetchPriority:void 0;b==="style"?l.d.S(g,typeof h.precedence=="string"?h.precedence:void 0,{crossOrigin:v,integrity:x,fetchPriority:C}):b==="script"&&l.d.X(g,{crossOrigin:v,integrity:x,fetchPriority:C,nonce:typeof h.nonce=="string"?h.nonce:void 0})}},Pt.preinitModule=function(g,h){if(typeof g=="string")if(typeof h=="object"&&h!==null){if(h.as==null||h.as==="script"){var b=m(h.as,h.crossOrigin);l.d.M(g,{crossOrigin:b,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0})}}else h==null&&l.d.M(g)},Pt.preload=function(g,h){if(typeof g=="string"&&typeof h=="object"&&h!==null&&typeof h.as=="string"){var b=h.as,v=m(b,h.crossOrigin);l.d.L(g,b,{crossOrigin:v,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0,type:typeof h.type=="string"?h.type:void 0,fetchPriority:typeof h.fetchPriority=="string"?h.fetchPriority:void 0,referrerPolicy:typeof h.referrerPolicy=="string"?h.referrerPolicy:void 0,imageSrcSet:typeof h.imageSrcSet=="string"?h.imageSrcSet:void 0,imageSizes:typeof h.imageSizes=="string"?h.imageSizes:void 0,media:typeof h.media=="string"?h.media:void 0})}},Pt.preloadModule=function(g,h){if(typeof g=="string")if(h){var b=m(h.as,h.crossOrigin);l.d.m(g,{as:typeof h.as=="string"&&h.as!=="script"?h.as:void 0,crossOrigin:b,integrity:typeof h.integrity=="string"?h.integrity:void 0})}else l.d.m(g)},Pt.requestFormReset=function(g){l.d.r(g)},Pt.unstable_batchedUpdates=function(g,h){return g(h)},Pt.useFormState=function(g,h,b){return f.H.useFormState(g,h,b)},Pt.useFormStatus=function(){return f.H.useHostTransitionStatus()},Pt.version="19.2.6",Pt}var f1;function Rb(){if(f1)return nm.exports;f1=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),nm.exports=VE(),nm.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 m1;function GE(){if(m1)return us;m1=1;var t=IE(),r=Zc(),a=Rb();function l(e){var n="https://react.dev/errors/"+e;if(1<arguments.length){n+="?args[]="+encodeURIComponent(arguments[1]);for(var o=2;o<arguments.length;o++)n+="&args[]="+encodeURIComponent(arguments[o])}return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function c(e){var n=e,o=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do n=e,(n.flags&4098)!==0&&(o=n.return),e=n.return;while(e)}return n.tag===3?o:null}function f(e){if(e.tag===13){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function m(e){if(e.tag===31){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function g(e){if(c(e)!==e)throw Error(l(188))}function h(e){var n=e.alternate;if(!n){if(n=c(e),n===null)throw Error(l(188));return n!==e?null:e}for(var o=e,i=n;;){var p=o.return;if(p===null)break;var y=p.alternate;if(y===null){if(i=p.return,i!==null){o=i;continue}break}if(p.child===y.child){for(y=p.child;y;){if(y===o)return g(p),e;if(y===i)return g(p),n;y=y.sibling}throw Error(l(188))}if(o.return!==i.return)o=p,i=y;else{for(var S=!1,R=p.child;R;){if(R===o){S=!0,o=p,i=y;break}if(R===i){S=!0,i=p,o=y;break}R=R.sibling}if(!S){for(R=y.child;R;){if(R===o){S=!0,o=y,i=p;break}if(R===i){S=!0,i=y,o=p;break}R=R.sibling}if(!S)throw Error(l(189))}}if(o.alternate!==i)throw Error(l(190))}if(o.tag!==3)throw Error(l(188));return o.stateNode.current===o?e:n}function b(e){var n=e.tag;if(n===5||n===26||n===27||n===6)return e;for(e=e.child;e!==null;){if(n=b(e),n!==null)return n;e=e.sibling}return null}var v=Object.assign,x=Symbol.for("react.element"),C=Symbol.for("react.transitional.element"),E=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),j=Symbol.for("react.strict_mode"),N=Symbol.for("react.profiler"),_=Symbol.for("react.consumer"),A=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),z=Symbol.for("react.suspense"),P=Symbol.for("react.suspense_list"),B=Symbol.for("react.memo"),U=Symbol.for("react.lazy"),Y=Symbol.for("react.activity"),se=Symbol.for("react.memo_cache_sentinel"),te=Symbol.iterator;function ce(e){return e===null||typeof e!="object"?null:(e=te&&e[te]||e["@@iterator"],typeof e=="function"?e:null)}var me=Symbol.for("react.client.reference");function ae(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===me?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case w:return"Fragment";case N:return"Profiler";case j:return"StrictMode";case z:return"Suspense";case P:return"SuspenseList";case Y:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case E:return"Portal";case A:return e.displayName||"Context";case _:return(e._context.displayName||"Context")+".Consumer";case T:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case B:return n=e.displayName||null,n!==null?n:ae(e.type)||"Memo";case U:n=e._payload,e=e._init;try{return ae(e(n))}catch{}}return null}var de=Array.isArray,O=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,q=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,J={pending:!1,data:null,method:null,action:null},re=[],Z=-1;function M(e){return{current:e}}function D(e){0>Z||(e.current=re[Z],re[Z]=null,Z--)}function H(e,n){Z++,re[Z]=e.current,e.current=n}var X=M(null),F=M(null),oe=M(null),ee=M(null);function fe(e,n){switch(H(oe,n),H(F,e),H(X,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?Ty(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)n=Ty(n),e=Ay(n,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(X),H(X,e)}function ue(){D(X),D(F),D(oe)}function Ce(e){e.memoizedState!==null&&H(ee,e);var n=X.current,o=Ay(n,e.type);n!==o&&(H(F,e),H(X,o))}function Re(e){F.current===e&&(D(X),D(F)),ee.current===e&&(D(ee),os._currentValue=J)}var Ne,nt;function We(e){if(Ne===void 0)try{throw Error()}catch(o){var n=o.stack.trim().match(/\n( *(at )?)/);Ne=n&&n[1]||"",nt=-1<o.stack.indexOf(`
|
||||
at`)?" (<anonymous>)":-1<o.stack.indexOf("@")?"@unknown:0:0":""}return`
|
||||
`+Ne+e+nt}var Ln=!1;function yn(e,n){if(!e||Ln)return"";Ln=!0;var o=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var i={DetermineComponentFrameRoot:function(){try{if(n){var ne=function(){throw Error()};if(Object.defineProperty(ne.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(ne,[])}catch(W){var G=W}Reflect.construct(e,[],ne)}else{try{ne.call()}catch(W){G=W}e.call(ne.prototype)}}else{try{throw Error()}catch(W){G=W}(ne=e())&&typeof ne.catch=="function"&&ne.catch(function(){})}}catch(W){if(W&&G&&typeof W.stack=="string")return[W.stack,G.stack]}return[null,null]}};i.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var p=Object.getOwnPropertyDescriptor(i.DetermineComponentFrameRoot,"name");p&&p.configurable&&Object.defineProperty(i.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var y=i.DetermineComponentFrameRoot(),S=y[0],R=y[1];if(S&&R){var k=S.split(`
|
||||
`),V=R.split(`
|
||||
`);for(p=i=0;i<k.length&&!k[i].includes("DetermineComponentFrameRoot");)i++;for(;p<V.length&&!V[p].includes("DetermineComponentFrameRoot");)p++;if(i===k.length||p===V.length)for(i=k.length-1,p=V.length-1;1<=i&&0<=p&&k[i]!==V[p];)p--;for(;1<=i&&0<=p;i--,p--)if(k[i]!==V[p]){if(i!==1||p!==1)do if(i--,p--,0>p||k[i]!==V[p]){var K=`
|
||||
`+k[i].replace(" at new "," at ");return e.displayName&&K.includes("<anonymous>")&&(K=K.replace("<anonymous>",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 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 yn(e.type,!1);case 11:return yn(e.type.render,!1);case 1:return yn(e.type,!0);case 31:return We("Activity");default:return""}}function va(e){try{var n="",o=null;do n+=rn(e,o),o=e,e=e.return;while(e);return n}catch(i){return`
|
||||
Error generating stack: `+i.message+`
|
||||
`+i.stack}}var bt=Object.prototype.hasOwnProperty,gl=t.unstable_scheduleCallback,vl=t.unstable_cancelCallback,$t=t.unstable_shouldYield,Or=t.unstable_requestPaint,Ut=t.unstable_now,Bu=t.unstable_getCurrentPriorityLevel,ya=t.unstable_ImmediatePriority,ni=t.unstable_UserBlockingPriority,ba=t.unstable_NormalPriority,yl=t.unstable_LowPriority,ir=t.unstable_IdlePriority,ri=t.log,Dr=t.unstable_setDisableYieldValue,xa=null,Ht=null;function zn(e){if(typeof ri=="function"&&Dr(e),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(xa,e)}catch{}}var Lt=Math.clz32?Math.clz32:qn,$u=Math.log,bl=Math.LN2;function qn(e){return e>>>=0,e===0?32:31-($u(e)/bl|0)|0}var to=256,no=262144,Sa=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 Ee(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 xt(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 zt(){var e=Sa;return Sa<<=1,(Sa&62914560)===0&&(Sa=4194304),e}function Lr(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 Gt(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,V=e.hiddenUpdates;for(o=S&~o;0<o;){var K=31-Lt(o),ne=1<<K;R[K]=0,k[K]=-1;var G=V[K];if(G!==null)for(V[K]=null,K=0;K<G.length;K++){var W=G[K];W!==null&&(W.lane&=-536870913)}o&=~ne}i!==0&&Ca(e,i,0),y!==0&&p===0&&e.tag!==0&&(e.suspendedLanes|=y&~(S&~n))}function Ca(e,n,o){e.pendingLanes|=n,e.suspendedLanes&=~n;var i=31-Lt(n);e.entangledLanes|=n,e.entanglements[i]=e.entanglements[i]|1073741824|o&261930}function Yt(e,n){var o=e.entangledLanes|=n;for(e=e.entanglements;o;){var i=31-Lt(o),p=1<<i;p&n|e[i]&n&&(e[i]|=n),o&=~p}}function Ft(e,n){var o=n&-n;return o=(o&42)!==0?1:ro(o),(o&(e.suspendedLanes|n))!==0?0:o}function ro(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;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:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Pn(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function Uu(){var e=q.p;return e!==0?e:(e=window.event,e===void 0?32:Qy(e.type))}function ph(e,n){var o=q.p;try{return q.p=e,n()}finally{q.p=o}}var zr=Math.random().toString(36).slice(2),jt="__reactFiber$"+zr,Wt="__reactProps$"+zr,ao="__reactContainer$"+zr,Hu="__reactEvents$"+zr,jw="__reactListeners$"+zr,Rw="__reactHandles$"+zr,hh="__reactResources$"+zr,xl="__reactMarker$"+zr;function Iu(e){delete e[jt],delete e[Wt],delete e[Hu],delete e[jw],delete e[Rw]}function oo(e){var n=e[jt];if(n)return n;for(var o=e.parentNode;o;){if(n=o[ao]||o[jt]){if(o=n.alternate,n.child!==null||o!==null&&o.child!==null)for(e=zy(e);e!==null;){if(o=e[jt])return o;e=zy(e)}return n}e=o,o=e.parentNode}return null}function lo(e){if(e=e[jt]||e[ao]){var n=e.tag;if(n===5||n===6||n===13||n===31||n===26||n===27||n===3)return e}return null}function Sl(e){var n=e.tag;if(n===5||n===26||n===27||n===6)return e.stateNode;throw Error(l(33))}function so(e){var n=e[hh];return n||(n=e[hh]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function St(e){e[xl]=!0}var gh=new Set,vh={};function wa(e,n){io(e,n),io(e+"Capture",n)}function io(e,n){for(vh[e]=n,e=0;e<n.length;e++)gh.add(n[e])}var Tw=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u
Line truncated
|
||||
`).replace(oE,"")}function jy(e,n){return n=Ny(n),Ny(e)===n}function Ye(e,n,o,i,p,y){switch(o){case"children":typeof i=="string"?n==="body"||n==="textarea"&&i===""||uo(e,i):(typeof i=="number"||typeof i=="bigint")&&n!=="body"&&uo(e,""+i);break;case"className":oi(e,"class",i);break;case"tabIndex":oi(e,"tabindex",i);break;case"dir":case"role":case"viewBox":case"width":case"height":oi(e,o,i);break;case"style":jh(e,i,y);break;case"data":if(n!=="object"){oi(e,"data",i);break}case"src":case"href":if(i===""&&(n!=="a"||o!=="href")){e.removeAttribute(o);break}if(i==null||typeof i=="function"||typeof i=="symbol"||typeof i=="boolean"){e.removeAttribute(o);break}i=si(""+i),e.setAttribute(o,i);break;case"action":case"formAction":if(typeof i=="function"){e.setAttribute(o,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof y=="function"&&(o==="formAction"?(n!=="input"&&Ye(e,n,"name",p.name,p,null),Ye(e,n,"formEncType",p.formEncType,p,null),Ye(e,n,"formMethod",p.formMethod,p,null),Ye(e,n,"formTarget",p.formTarget,p,null)):(Ye(e,n,"encType",p.encType,p,null),Ye(e,n,"method",p.method,p,null),Ye(e,n,"target",p.target,p,null)));if(i==null||typeof i=="symbol"||typeof i=="boolean"){e.removeAttribute(o);break}i=si(""+i),e.setAttribute(o,i);break;case"onClick":i!=null&&(e.onclick=ur);break;case"onScroll":i!=null&&Oe("scroll",e);break;case"onScrollEnd":i!=null&&Oe("scrollend",e);break;case"dangerouslySetInnerHTML":if(i!=null){if(typeof i!="object"||!("__html"in i))throw Error(l(61));if(o=i.__html,o!=null){if(p.children!=null)throw Error(l(60));e.innerHTML=o}}break;case"multiple":e.multiple=i&&typeof i!="function"&&typeof i!="symbol";break;case"muted":e.muted=i&&typeof i!="function"&&typeof i!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(i==null||typeof i=="function"||typeof i=="boolean"||typeof i=="symbol"){e.removeAttribute("xlink:href");break}o=si(""+i),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":i!=null&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(o,""+i):e.removeAttribute(o);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":i&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(o,""):e.removeAttribute(o);break;case"capture":case"download":i===!0?e.setAttribute(o,""):i!==!1&&i!=null&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(o,i):e.removeAttribute(o);break;case"cols":case"rows":case"size":case"span":i!=null&&typeof i!="function"&&typeof i!="symbol"&&!isNaN(i)&&1<=i?e.setAttribute(o,i):e.removeAttribute(o);break;case"rowSpan":case"start":i==null||typeof i=="function"||typeof i=="symbol"||isNaN(i)?e.removeAttribute(o):e.setAttribute(o,i);break;case"popover":Oe("beforetoggle",e),Oe("toggle",e),ai(e,"popover",i);break;case"xlinkActuate":cr(e,"http://www.w3.org/1999/xlink","xlink:actuate",i);break;case"xlinkArcrole":cr(e,"http://www.w3.org/1999/xlink","xlink:arcrole",i);break;case"xlinkRole":cr(e,"http://www.w3.org/1999/xlink","xlink:role",i);break;case"xlinkShow":cr(e,"http://www.w3.org/1999/xlink","xlink:show",i);break;case"xlinkTitle":cr(e,"http://www.w3.org/1999/xlink","xlink:title",i);break;case"xlinkType":cr(e,"http://www.w3.org/1999/xlink","xlink:type",i);break;case"xmlBase":cr(e,"http://www.w3.org/XML/1998/namespace","xml:base",i);break;case"xmlLang":cr(e,"http://www.w3.org/XML/1998/namespace","xml:lang",i);break;case"xmlSpace":cr(e,"http://www.w3.org/XML/1998/namespace","xml:space",i);break;case"is":ai(e,"is",i);break;case"innerText":case"textContent":break;default:(!(2<o.length)||o[0]!=="o"&&o[0]!=="O"||o[1]!=="n"&&o[1]!=="N")&&(o=Ow.get(o)||o,ai(e,o,i))}}function Of(e,n,o,i,p,y){switch(o){case"style":jh(e,i,y);break;case"dangerouslySetInnerHTML":if(i!=null){if(typeof i!="object"||!("__html"in i))throw Error(l(61));if(o=i.__html,o!=null){if(p.children!=null)throw Error(l(60));e.innerHTML=o}}break;case"children":typeof i=="string"?uo(e,i):(typeof i=="number"||typeof i=="bigint")&&uo(e,""+i);break;case"onScroll":i!=null&&Oe("scroll",e);break;case"onScrollEnd":i!=null&&Oe("scrollend",e);break;case"onClick":i!=null&&(e.onclick=ur);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"inne
Line truncated
|
||||
* 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 h1="popstate";function g1(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function WE(t={}){function r(l,s){var h;let c=(h=s.state)==null?void 0:h.masked,{pathname:f,search:m,hash:g}=c||l.location;return jm("",{pathname:f,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:Cs(s)}return XE(r,a,null,t)}function et(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function kn(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function qE(){return Math.random().toString(36).substring(2,10)}function v1(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 jm(t,r,a=null,l,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?ol(r):r,state:a,key:r&&r.key||l||qE(),mask:s}}function Cs({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 ol(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 XE(t,r,a,l={}){let{window:s=document.defaultView,v5Compat:c=!1}=l,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 _=g1(j)?j:jm(w.location,j,N);h=b()+1;let A=v1(_,h),T=w.createHref(_.mask||_);try{f.pushState(A,"",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 _=g1(j)?j:jm(w.location,j,N);h=b();let A=v1(_,h),T=w.createHref(_.mask||_);f.replaceState(A,"",T),c&&g&&g({action:m,location:w.location,delta:0})}function E(j){return KE(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(h1,v),g=j,()=>{s.removeEventListener(h1,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 KE(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:Cs(t);return l=l.replace(/ $/,"%20"),!r&&l.startsWith("//")&&(l=a+l),new URL(l,a)}function Tb(t,r,a="/"){return ZE(t,r,a,!1)}function ZE(t,r,a,l,s){let c=typeof r=="string"?ol(r):r,f=Tr(c.pathname||"/",a);if(f==null)return null;let m=QE(t),g=null,h=u3(f);for(let b=0;g==null&&b<m.length;++b)g=i3(m[b],h,l);return g}function QE(t){let r=Ab(t);return JE(r),r}function Ab(t,r=[],a=[],l="",s=!1){let c=(f,m,g=s,h)=>{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(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);f.children&&f.children.length>0&&(et(f.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),Ab(f.children,r,x,v,g)),!(f.path==null&&!f.index)&&r.push({path:v,score:l3(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 _b(f.path))c(f,m,!0,h)}),r}function _b(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 f=_b(l.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 JE(t){t.sort((r,a)=>r.score!==a.score?a.score-r.score:s3(r.routesMeta.map(l=>l.childrenIndex),a.routesMeta.map(l=>l.childrenIndex)))}var e3=/^:[\w-]+$/,t3=3,n3=2,r3=1,a3=10,o3=-2,y1=t=>t==="*";function l3(t,r){let a=t.split("/"),l=a.length;return a.some(y1)&&(l+=o3),r&&(l+=n3),a.filter(s=>!y1(s)).reduce((s,c)=>s+(e3.test(c)?t3:c===""?r3:a3),l)}function s3(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 i3(t,r,a=!1){let{routesMeta:l}=t,s={},c="/",f=[];for(let m=0;m<l.length;++m){let g=l[m],h=m===l.length-1,b=c==="/"?r:r.slice(c.length)||"/",v=Dc({path:g.relativePath,caseSensit
Line truncated
|
||||
|
||||
Please change the parent <Route path="${N}"> to <Route path="${N==="/"?"*":`${N}/*`}">.`)}let b=On(),v;if(r){let N=typeof r=="string"?ol(r):r;et(g==="/"||((j=N.pathname)==null?void 0:j.startsWith(g)),`When overriding the location using \`<Routes location>\` 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})):Tb(t,{pathname:C});kn(h||E!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),kn(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 <Outlet /> with a null value by default resulting in an "empty" page.`);let w=P3(E&&E.map(N=>Object.assign({},N,{params:Object.assign({},f,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?d.createElement(zs.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},w):w}function O3(){let t=I3(),r=y3(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},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 D3=d.createElement(O3,null),Hb=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=R3(t.digest);a&&(t=a)}let r=t!==void 0?d.createElement(Fn.Provider,{value:this.props.routeContext},d.createElement(ip.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?d.createElement(L3,{error:t},r):r}};Hb.contextType=Lb;var am=new WeakMap;function L3({children:t,error:r}){let{basename:a}=d.useContext(hn);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let l=j3(r.digest);if(l){let s=am.get(r);if(s)throw s;let c=Ob(l.location,a);if(kb&&!am.get(r))if(c.isExternal||l.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const f=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:l.replace}));throw am.set(r,f),f}return d.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return t}function z3({routeContext:t,match:r,children:a}){let l=d.useContext(ll);return l&&l.static&&l.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=r.route.id),d.createElement(Fn.Provider,{value:t},a)}function P3(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 f=!1,m=-1;if(a&&l){f=l.renderFallback;for(let b=0;b<s.length;b++){let v=s[b];if((v.route.HyLine truncated
|
||||
.`.concat(pR,` {
|
||||
overflow: hidden `).concat(l,`;
|
||||
padding-right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
body[`).concat(Jo,`] {
|
||||
overflow: hidden `).concat(l,`;
|
||||
overscroll-behavior: contain;
|
||||
`).concat([r&&"position: relative ".concat(l,";"),a==="margin"&&`
|
||||
padding-left: `.concat(s,`px;
|
||||
padding-top: `).concat(c,`px;
|
||||
padding-right: `).concat(f,`px;
|
||||
margin-left:0;
|
||||
margin-top:0;
|
||||
margin-right: `).concat(m,"px ").concat(l,`;
|
||||
`),a==="padding"&&"padding-right: ".concat(m,"px ").concat(l,";")].filter(Boolean).join(""),`
|
||||
}
|
||||
|
||||
.`).concat(Mc,` {
|
||||
right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(kc,` {
|
||||
margin-right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(Mc," .").concat(Mc,` {
|
||||
right: 0 `).concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(kc," .").concat(kc,` {
|
||||
margin-right: 0 `).concat(l,`;
|
||||
}
|
||||
|
||||
body[`).concat(Jo,`] {
|
||||
`).concat(hR,": ").concat(m,`px;
|
||||
}
|
||||
`)},Q1=function(){var t=parseInt(document.body.getAttribute(Jo)||"0",10);return isFinite(t)?t:0},DR=function(){d.useEffect(function(){return document.body.setAttribute(Jo,(Q1()+1).toString()),function(){var t=Q1()-1;t<=0?document.body.removeAttribute(Jo):document.body.setAttribute(Jo,t.toString())}},[])},LR=function(t){var r=t.noRelative,a=t.noImportant,l=t.gapMode,s=l===void 0?"margin":l;DR();var c=d.useMemo(function(){return MR(s)},[s]);return d.createElement(kR,{styles:OR(c,!r,s,a?"":"!important")})},Pm=!1;if(typeof window<"u")try{var wc=Object.defineProperty({},"passive",{get:function(){return Pm=!0,!0}});window.addEventListener("test",wc,wc),window.removeEventListener("test",wc,wc)}catch{Pm=!1}var Go=Pm?{passive:!1}:!1,zR=function(t){return t.tagName==="TEXTAREA"},mx=function(t,r){if(!(t instanceof Element))return!1;var a=window.getComputedStyle(t);return a[r]!=="hidden"&&!(a.overflowY===a.overflowX&&!zR(t)&&a[r]==="visible")},PR=function(t){return mx(t,"overflowY")},BR=function(t){return mx(t,"overflowX")},J1=function(t,r){var a=r.ownerDocument,l=r;do{typeof ShadowRoot<"u"&&l instanceof ShadowRoot&&(l=l.host);var s=px(t,l);if(s){var c=hx(t,l),f=c[1],m=c[2];if(f>m)return!0}l=l.parentNode}while(l&&l!==a.body);return!1},$R=function(t){var r=t.scrollTop,a=t.scrollHeight,l=t.clientHeight;return[r,a,l]},UR=function(t){var r=t.scrollLeft,a=t.scrollWidth,l=t.clientWidth;return[r,a,l]},px=function(t,r){return t==="v"?PR(r):BR(r)},hx=function(t,r){return t==="v"?$R(r):UR(r)},HR=function(t,r){return t==="h"&&r==="rtl"?-1:1},IR=function(t,r,a,l,s){var c=HR(t,window.getComputedStyle(r).direction),f=c*l,m=a.target,g=r.contains(m),h=!1,b=f>0,v=0,x=0;do{if(!m)break;var C=hx(t,m),E=C[0],w=C[1],j=C[2],N=w-j-c*E;(E||N)&&px(t,m)&&(v+=N,x+=E);var _=m.parentNode;m=_&&_.nodeType===Node.DOCUMENT_FRAGMENT_NODE?_.host:_}while(!g&&m!==document.body||g&&(r.contains(m)||r===m));return(b&&Math.abs(v)<1||!b&&Math.abs(x)<1)&&(h=!0),h},Ec=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},eb=function(t){return[t.deltaX,t.deltaY]},tb=function(t){return t&&"current"in t?t.current:t},VR=function(t,r){return t[0]===r[0]&&t[1]===r[1]},GR=function(t){return`
|
||||
.block-interactivity-`.concat(t,` {pointer-events: none;}
|
||||
.allow-interactivity-`).concat(t,` {pointer-events: all;}
|
||||
`)},YR=0,Yo=[];function FR(t){var r=d.useRef([]),a=d.useRef([0,0]),l=d.useRef(),s=d.useState(YR++)[0],c=d.useState(fx)[0],f=d.useRef(t);d.useEffect(function(){f.current=t},[t]),d.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(s));var w=mR([t.lockRef.current],(t.shards||[]).map(tb),!0).filter(Boolean);return w.forEach(function(j){return j.classList.add("allow-interactivity-".concat(s))}),function(){document.body.classList.remove("block-interactivity-".concat(s)),w.forEach(function(j){return j.classList.remove("allow-interactivity-".concat(s))})}}},[t.inert,t.lockRef.current,t.shards]);var m=d.useCallback(function(w,j){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!f.current.allowPinchZoom;var N=Ec(w),_=a.current,A="deltaX"in w?w.deltaX:_[0]-N[0],T="deltaY"in w?w.deltaY:_[1]-N[1],z,P=w.target,B=Math.abs(A)>Math.abs(T)?"h":"v";if("touches"in w&&B==="h"&&P.type==="range")return!1;var U=window.getSelection(),Y=U&&U.anchorNode,se=Y?Y===P||Y.contains(P):!1;if(se)return!1;var te=J1(B,P);if(!te)return!0;if(te?z=B:(z=B==="v"?"h":"v",te=J1(B,P)),!te)return!1;if(!l.current&&"changedTouches"in w&&(A||T)&&(l.current=z),!z)return!0;var ce=l.current||z;return IR(ce,j,w,ce==="h"?A:T)},[]),g=d.useCallback(function(w){var j=w;if(!(!Yo.length||Yo[Yo.length-1]!==c)){var N="deltaY"in j?eb(j):Ec(j),_=r.current.filter(function(z){return z.name===j.type&&(z.target===j.target||j.target===z.shadowParent)&&VR(z.delta,N)})[0];if(_&&_.should){j.cancelable&&j.preventDefault();return}if(!_){var A=(f.current.shards||[]).map(tb).filter(Boolean).filter(function(z){return z.contains(j.target)}),T=A.length>0?m(j,A[0]):!f.current.noIsolation;T&&j.cancelable&&j.preventDefault()}}},[]),h=d.useCallback(function(w,j,N,_){var A={name:w,delta:j,target:N,should:_,shadowParent:WR(N)};r.current.push(A),setTimeout(function(){r.current=r.current.filter(function(T){return T!==A})},1)},[]),b=d.useCallback(function(w){a.current=Ec(w),l.current=void 0},[]),v=d.useCallback(function(w){h(w.type,eb(w),w.target,m(w,t.lockRef.current))},[]),x=d.useCallback(function(w){h(w.type,Ec(w),w.target,m(w,t.lockRef.current))},[]);d.useEffect(function(){return Yo.push(c),t.setCallbacks({onScrollCapture:v,onWheelCapture:v,onTouchMoveCapture:x}),document.addEventListener("wheel",g,Go),document.addEventListener("touchmove",g,Go),document.addEventListener("touchstart",b,Go),function(){Yo=Yo.filter(function(w){return w!==c}),document.removeEventListener("wheel",g,Go),document.removeEventListener("touchmove",g,Go),document.removeEventListener("touchstart",b,Go)}},[]);var C=t.removeScrollBar,E=t.inert;return d.createElement(d.Fragment,null,E?d.createElement(c,{styles:GR(s)}):null,C?d.createElement(LR,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function WR(t){for(var r=null;t!==null;)t instanceof ShadowRoot&&(r=t.host,t=t.host),t=t.parentNode;return r}const qR=CR(dx,FR);var Gs=d.forwardRef(function(t,r){return d.createElement(mu,nr({},t,{ref:r,sideCar:qR}))});Gs.classNames=mu.classNames;var Bm=["Enter"," "],XR=["ArrowDown","PageUp","Home"],gx=["ArrowUp","PageDown","End"],KR=[...XR,...gx],ZR={ltr:[...Bm,"ArrowRight"],rtl:[...Bm,"ArrowLeft"]},QR={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Ys="Menu",[js,JR,e9]=Tp(Ys),[Ja,vx]=hj(Ys,[e9,fa,du]),pu=fa(),yx=du(),[t9,eo]=Ja(Ys),[n9,Fs]=Ja(Ys),bx=t=>{const{__scopeMenu:r,open:a=!1,children:l,dir:s,onOpenChange:c,modal:f=!0}=t,m=pu(r),[g,h]=d.useState(null),b=d.useRef(!1),v=Et(c),x=Bs(s);return d.useEffect(()=>{const C=()=>{b.current=!0,document.addEventListener("pointerdown",E,{capture:!0,once:!0}),document.addEventListener("pointermove",E,{capture:!0,once:!0})},E=()=>b.current=!1;return document.addEventListener("keydown",C,{capture:!0}),()=>{document.removeEventListener("keydown",C,{capture:!0}),document.removeEventListener("pointerdown",E,{capture:!0}),document.removeEventListener("pointermove",E,{capture:!0})}},[]),u.jsx(iu,{...m,children:u.jsx(t9,{scope:r,open:a,onOpenChange:v,content:g,onContentChange:h,children:u.jsx(n9,{scope:r,onClose:d.useCallback(()=>v(!1),[v]),isUsingKeyboardRef:b,dir:x,modal:f,children:l})})})};bx.displayName=Ys;var r9="MenuAnchor",Pp=d.forwardRef((t,r)=>{const{__scopeMenu:a,...l}=t,s=pu(a);return u.jsx(Hs,{...s,...l,ref:r})});Pp.displayName=r9;var Bp="MenuPortal",[a9,xx]=Ja(Bp,{forceMount:void 0}),Sx=t=>{const{__scopeMenu:r,forceMount:a,children:l,container:s}=t,c=eo(Bp,r);return u.jsx(a9,{scope:r,forceMount:a,children:u.jsx(Dt,{present:a||c.open,children:u.jsx(pl,{asChild:!0,container:s,children:l})})})};Sx.displayName=Bp;var Mn="MenuContent",[o9,$p]=Ja(Mn),Cx=d.forwardRef((t,r)=>{const a=xx(Mn,t.__scopeMenu),{forceMount:l=a.forceMount,...s}=t,c=eo(Mn,t.__scopeMenu),f=Fs(Mn,t.__scopeMenu);return u.jsx(js.Provider,{scope:t.__scopeMenu,children:u.jsx(Dt,{present:l||c.open,children:u.jsx(js.Slot,{scope:t.__scopeMenu,children:f.modal?u.jsx(l9,{...s,ref:r}):u.jsx(s9,{...s,ref:r})})})})}),l9=d.forwardRef((t,r)=>{const a=eo(Mn,t.__scopeMenu),l=
Line truncated
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const c2=(...t)=>t.filter((r,a,l)=>!!r&&r.trim()!==""&&l.indexOf(r)===a).join(" ").trim();/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const aT=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const oT=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(r,a,l)=>l?l.toUpperCase():a.toLowerCase());/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const rb=t=>{const r=oT(t);return r.charAt(0).toUpperCase()+r.slice(1)};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/var ym={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const lT=t=>{for(const r in t)if(r.startsWith("aria-")||r==="role"||r==="title")return!0;return!1},sT=d.createContext({}),iT=()=>d.useContext(sT),cT=d.forwardRef(({color:t,size:r,strokeWidth:a,absoluteStrokeWidth:l,className:s="",children:c,iconNode:f,...m},g)=>{const{size:h=24,strokeWidth:b=2,absoluteStrokeWidth:v=!1,color:x="currentColor",className:C=""}=iT()??{},E=l??v?Number(a??b)*24/Number(r??h):a??b;return d.createElement("svg",{ref:g,...ym,width:r??h??ym.width,height:r??h??ym.height,stroke:t??x,strokeWidth:E,className:c2("lucide",C,s),...!c&&!lT(m)&&{"aria-hidden":"true"},...m},[...f.map(([w,j])=>d.createElement(w,j)),...Array.isArray(c)?c:[c]])});/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const ma=(t,r)=>{const a=d.forwardRef(({className:l,...s},c)=>d.createElement(cT,{ref:c,iconNode:r,className:c2(`lucide-${aT(rb(t))}`,`lucide-${t}`,l),...s}));return a.displayName=rb(t),a};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const uT=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],u2=ma("check",uT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const dT=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],d2=ma("chevron-down",dT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const fT=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],mT=ma("chevron-right",fT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const pT=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],hT=ma("chevron-up",pT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const gT=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],vT=ma("circle",gT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const yT=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],bT=ma("panel-left",yT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const xT=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],ST=ma("search",xT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const CT=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],f2=ma("x",CT),Gp=tT,Yp=nT,wT=d.forwardRef(({className:t,inset:r,children:a,...l},s)=>u.jsxs(s2,{ref:s,className:le("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",r&&"pl-8",t),...l,children:[a,u.jsx(mT,{className:"ml-auto"})]}));wT.displayName=s2.displayName;const ET=d.forwardRef(({className:t,...r},a)=>u.jsx(i2,{ref:a,className:le("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),...r}));ET.displayName=i2.displayName;const vu=d.forwardRef(({className:t,sideOffset:r=4,...a},l)=>u.jsx(rT,{children:u.jsx(e2,{ref:l,sideOffset:r,className:le("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})}));vu.displayName=e2.displayName;const Ts=d.forwardRef(({className:t,inset:r,...a},l)=>u.jsx(n2,{ref:l,className:le("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",r&&"pl-8",t),...a}));Ts.displayName=n2.displayName;const NT=d.forwardRef(({className:t,children:r,checked:a,...l},s)=>u.jsxs(r2,{ref:s,className:le("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,...l,children:[u.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:u.jsx(o2,{children:u.jsx(u2,{className:"h-4 w-4"})})}),r]}));NT.displayName=r2.displayName;const jT=d.forwardRef(({className:t,children:r,...a},l)=>u.jsxs(a2,{ref:l,className:le("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:[u.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:u.jsx(o2,{children:u.jsx(vT,{className:"h-2 w-2 fill-current"})})}),r]}));jT.displayName=a2.displayName;const Fp=d.forwardRef(({className:t,inset:r,...a},l)=>u.jsx(t2,{ref:l,className:le("px-2 py-1.5 text-sm font-semibold",r&&"pl-8",t),...a}));Fp.displayName=t2.displayName;const Fc=d.forwardRef(({className:t,...r},a)=>u.jsx(l2,{ref:a,className:le("-mx-1 my-1 h-px bg-muted",t),...r}));Fc.displayName=l2.displayName;const bm=768;function RT(){const[t,r]=d.useState(void 0);return d.useEffect(()=>{const a=window.matchMedia(`(max-width: ${bm-1}px)`),l=()=>{r(window.innerWidth<bm)};return a.addEventListener("change",l),r(window.innerWidth<bm),()=>a.removeEventListener("change",l)},[]),!!t}const Bt=d.forwardRef(({className:t,type:r,...a},l)=>u.jsx("input",{type:r,className:le("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:l,...a}));Bt.displayName="Input";var TT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],gn=TT.reduce((t,r)=>{const a=N0(`Primitive.${r}`),l=d.forwardRef((s,c)=>{const{asChild:f,...m}=s,g=f?a:r;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(g,{...m,ref:c})});return l.displayName=`Primitive.${r}`,{...t,[r]:l}},{}),AT="Separator",ab="horizontal",_T=["horizontal","vertical"],m2=d.forwardRef((t,r)=>{const{decorative:a,orientation:l=ab,...s}=t,c=MT(l)?l:ab,m=a?{role:"none"}:{"aria-orientation":c==="vertical"?c:void 0,role:"separator"};returnLine truncated
|
||||
|
||||
If you want to hide the \`${r.titleName}\`, you can wrap it with our VisuallyHidden component.
|
||||
|
||||
For more information, see https://radix-ui.com/primitives/docs/components/${r.docsSlug}`;return d.useEffect(()=>{t&&(document.getElementById(t)||console.error(a))},[a,t]),null},XT="DialogDescriptionWarning",KT=({contentRef:t,descriptionId:r})=>{const l=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${M2(XT).contentName}}.`;return d.useEffect(()=>{var c;const s=(c=t.current)==null?void 0:c.getAttribute("aria-describedby");r&&s&&(document.getElementById(r)||console.warn(l))},[l,t,r]),null},Kp=y2,Zp=S2,qs=C2,Xs=w2,bu=N2,xu=R2,k2=A2;const ZT=Kp,QT=Zp,O2=d.forwardRef(({className:t,...r},a)=>u.jsx(qs,{className:le("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),...r,ref:a}));O2.displayName=qs.displayName;const JT=ul("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"}}),D2=d.forwardRef(({side:t="right",className:r,children:a,...l},s)=>u.jsxs(QT,{children:[u.jsx(O2,{}),u.jsxs(Xs,{ref:s,className:le(JT({side:t}),r),...l,children:[u.jsxs(k2,{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:[u.jsx(f2,{className:"h-4 w-4"}),u.jsx("span",{className:"sr-only",children:"Close"})]}),a]})]}));D2.displayName=Xs.displayName;const L2=({className:t,...r})=>u.jsx("div",{className:le("flex flex-col space-y-2 text-center sm:text-left",t),...r});L2.displayName="SheetHeader";const z2=d.forwardRef(({className:t,...r},a)=>u.jsx(bu,{ref:a,className:le("text-lg font-semibold text-foreground",t),...r}));z2.displayName=bu.displayName;const P2=d.forwardRef(({className:t,...r},a)=>u.jsx(xu,{ref:a,className:le("text-sm text-muted-foreground",t),...r}));P2.displayName=xu.displayName;function ct({className:t,...r}){return u.jsx("div",{className:le("animate-pulse rounded-md bg-primary/10",t),...r})}function eA(t,r=[]){let a=[];function l(c,f){const m=d.createContext(f),g=a.length;a=[...a,f];const h=v=>{var N;const{scope:x,children:C,...E}=v,w=((N=x==null?void 0:x[t])==null?void 0:N[g])||m,j=d.useMemo(()=>E,Object.values(E));return u.jsx(w.Provider,{value:j,children:C})};h.displayName=c+"Provider";function b(v,x){var w;const C=((w=x==null?void 0:x[t])==null?void 0:w[g])||m,E=d.useContext(C);if(E)return E;if(f!==void 0)return f;throw new Error(`\`${v}\` must be used within \`${c}\``)}return[h,b]}const s=()=>{const c=a.map(f=>d.createContext(f));return function(m){const g=(m==null?void 0:m[t])||c;return d.useMemo(()=>({[`__scope${t}`]:{...m,[t]:g}}),[m,g])}};return s.scopeName=t,[l,tA(s,...r)]}function tA(...t){const r=t[0];if(t.length===1)return r;const a=()=>{const l=t.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(c){const f=l.reduce((m,{useScope:g,scopeName:h})=>{const v=g(c)[`__scope${h}`];return{...m,...v}},{});return d.useMemo(()=>({[`__scope${r.scopeName}`]:f}),[f])}};return a.scopeName=r.scopeName,a}function nA(t){const r=rA(t),a=d.forwardRef((l,s)=>{const{children:c,...f}=l,m=d.Children.toArray(c),g=m.find(oA);if(g){const h=g.props.children,b=m.map(v=>v===g?d.Children.count(h)>1?d.Children.only(null):d.isValidElement(h)?h.props.children:null:v);return u.jsx(r,{...f,ref:s,children:d.isValidElement(h)?d.cloneElement(h,void 0,b):null})}return u.jsx(r,{...f,ref:s,children:c})});return a.displayName=`${t}.Slot`,a}function rA(t){const r=d.forwardRef((a,l)=>{const{children:s,...c}=a;if(d.isValidElement(s)){const f=sA(s),m=lA(c,s.props);return s.type!==d.Fragment&&(m.ref=l?Xe(l,f):f),d.cloneElement(s,m)}return d.Children.count(s)>1?d.Children.only(null):null});return r.displayName=`${t}.SlotClone`,r}var B2=Symbol("radix.slottable");function aA(t){const r=({children:a})=>u.jsx(u.Fragment,{children:a});return r.displayName=`${t}.Slottable`,r.__radixId=B2,r}function oA(t){return d.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===B2}function lA(t,r){const a={...r};for(const l in r){const s=t[l],c=r[l];/^on[A-Z]/.test(l)?s&&c?a[l]=(...m)=>{const g=c(...m);return s(...m),g}:s&&(a[l]=s):l==="style"?a[l]={...s,...c}:l==="className"&&(a[l]=[s,c].filter(Boolean).join(" "))}return{...t,...a}}funct
Line truncated
|
||||
* @license React
|
||||
* use-sync-external-store-shim.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 cb;function c_(){if(cb)return Em;cb=1;var t=Zc();function r(v,x){return v===x&&(v!==0||1/v===1/x)||v!==v&&x!==x}var a=typeof Object.is=="function"?Object.is:r,l=t.useState,s=t.useEffect,c=t.useLayoutEffect,f=t.useDebugValue;function m(v,x){var C=x(),E=l({inst:{value:C,getSnapshot:x}}),w=E[0].inst,j=E[1];return c(function(){w.value=C,w.getSnapshot=x,g(w)&&j({inst:w})},[v,C,x]),s(function(){return g(w)&&j({inst:w}),v(function(){g(w)&&j({inst:w})})},[v]),f(C),C}function g(v){var x=v.getSnapshot;v=v.value;try{var C=x();return!a(v,C)}catch{return!0}}function h(v,x){return x()}var b=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:m;return Em.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:b,Em}var ub;function u_(){return ub||(ub=1,wm.exports=c_()),wm.exports}var d_=u_();function f_(){return d_.useSyncExternalStore(m_,()=>!0,()=>!1)}function m_(){return()=>{}}var th="Avatar",[p_]=s_(th),[h_,jS]=p_(th),RS=d.forwardRef((t,r)=>{const{__scopeAvatar:a,...l}=t,[s,c]=d.useState("idle");return u.jsx(h_,{scope:a,imageLoadingStatus:s,onImageLoadingStatusChange:c,children:u.jsx(gn.span,{...l,ref:r})})});RS.displayName=th;var TS="AvatarImage",AS=d.forwardRef((t,r)=>{const{__scopeAvatar:a,src:l,onLoadingStatusChange:s=()=>{},...c}=t,f=jS(TS,a),m=g_(l,c),g=Et(h=>{s(h),f.onImageLoadingStatusChange(h)});return gt(()=>{m!=="idle"&&g(m)},[m,g]),m==="loaded"?u.jsx(gn.img,{...c,ref:r,src:l}):null});AS.displayName=TS;var _S="AvatarFallback",MS=d.forwardRef((t,r)=>{const{__scopeAvatar:a,delayMs:l,...s}=t,c=jS(_S,a),[f,m]=d.useState(l===void 0);return d.useEffect(()=>{if(l!==void 0){const g=window.setTimeout(()=>m(!0),l);return()=>window.clearTimeout(g)}},[l]),f&&c.imageLoadingStatus!=="loaded"?u.jsx(gn.span,{...s,ref:r}):null});MS.displayName=_S;function db(t,r){return t?r?(t.src!==r&&(t.src=r),t.complete&&t.naturalWidth>0?"loaded":"loading"):"error":"idle"}function g_(t,{referrerPolicy:r,crossOrigin:a}){const l=f_(),s=d.useRef(null),c=l?(s.current||(s.current=new window.Image),s.current):null,[f,m]=d.useState(()=>db(c,t));return gt(()=>{m(db(c,t))},[c,t]),gt(()=>{const g=v=>()=>{m(v)};if(!c)return;const h=g("loaded"),b=g("error");return c.addEventListener("load",h),c.addEventListener("error",b),r&&(c.referrerPolicy=r),typeof a=="string"&&(c.crossOrigin=a),()=>{c.removeEventListener("load",h),c.removeEventListener("error",b)}},[c,a,r]),f}var kS=RS,OS=AS,DS=MS;const _s=d.forwardRef(({className:t,...r},a)=>u.jsx(kS,{ref:a,className:le("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",t),...r}));_s.displayName=kS.displayName;const Ms=d.forwardRef(({className:t,...r},a)=>u.jsx(OS,{ref:a,className:le("aspect-square h-full w-full",t),...r}));Ms.displayName=OS.displayName;const ks=d.forwardRef(({className:t,...r},a)=>u.jsx(DS,{ref:a,className:le("flex h-full w-full items-center justify-center rounded-full bg-muted",t),...r}));ks.displayName=DS.displayName;const LS=d.createContext(null);function v_({children:t}){const[r,a]=d.useState([]),[l,s]=d.useState(0),[c,f]=d.useState(!0),m=d.useCallback(async()=>{try{const v=await Ue.getNotifications();v.data&&(a(v.data.items),s(v.data.unreadCount))}catch{}finally{f(!1)}},[]),g=d.useCallback(async()=>{var v;try{const x=await Ue.markNotificationsRead("all");a(C=>C.map(E=>({...E,read:!0}))),s(((v=x.data)==null?void 0:v.unreadCount)??0)}catch{}},[]),h=d.useCallback(async v=>{var x;try{const C=await Ue.dismissNotification(v);a(E=>E.filter(w=>w.id!==v)),s(((x=C.data)==null?void 0:x.unreadCount)??0)}catch{}},[]);d.useEffect(()=>{m();const v=setInterval(m,3e4);return()=>clearInterval(v)},[m]);const b=d.useMemo(()=>({items:r,unreadCount:l,loading:c,refresh:m,markAllRead:g,dismiss:h}),[r,l,c,m,g,h]);return u.jsx(LS.Provider,{value:b,children:t})}function y_(){const t=d.useContext(LS);if(!t)throw new Error("useNotifications must be used within NotificationsProvider");return t}const b_=ul("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 bs({className:t,variant:r,...a}){return u.jsx("div",{className:le(b_({variant:r}),t),...a})}function x_(t){const r=S_(t),a=d.forwardRef((l,s)=>{const{children:c,...f}=l,m=d.Children.toArray(c),g=m.find(w_);if(g){const h=g.props.children,b=m.map(v=>v===g?d.Children.count(h)>1?d.Children.only(null):d.isValidElement(h)?h.props.children:null:v);return u.jsx(r,{...f,ref:s,children:d.isValidElement(h)?d.cloneElement(h,void 0,b):null})}return u.jsx(r,{...f,ref:s,children:c})});return a.displayName=`${t}.SLine truncated
|
||||
@@ -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% Line truncated
|
||||
@@ -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% Line truncated
|
||||
@@ -0,0 +1,187 @@
|
||||
function XE(t,r){for(var a=0;a<r.length;a++){const o=r[a];if(typeof o!="string"&&!Array.isArray(o)){for(const s in o)if(s!=="default"&&!(s in t)){const c=Object.getOwnPropertyDescriptor(o,s);c&&Object.defineProperty(t,s,c.get?c:{enumerable:!0,get:()=>o[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<M.length;ue++)U=M[ue],J=ce+se(U,ue),K+=_(U,D,H,J,I);else if(ue=C(M),typeof ue=="function")for(M=ue.call(M),ue=0;!(U=M.next()).done;)U=U.value,J=ce+se(U,ue++),K+=_(U,D,H,J,I);else if(J==="object"){if(typeof M.then=="function")return _(fe(M),D,H,U,I);throw D=String(M),Error("Objects are not valid as a React child (found: "+(D==="[object Object]"?"object with keys {"+Object.keys(M).join(", ")+"}":D)+"). If you meant to render a collection of children, use an array instead.")}return K}function q(M,D,H){if(M==null)return M;var U=[],I=0;return _(M,U,"","",function(J){return D.call(H,J,I++)}),U}function ee(M){if(M._status===-1){var D=M._result;D=D(),D.then(function(H){(M._status===0||M._status===-1)&&(M._status=1,M._result=H)},function(H){(M._status===0||M._status===-1)&&(M._status=2,M._result=H)}),M._status===-1&&(M._status=0,M._result=D)}if(M._status===1)return M._result.default;throw M._result}var ne=typeof reportError=="function"?reportError:function(M){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var D=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof M=="object"&&M!==null&&typeof M.message=="string"?String(M.message):String(M),error:M});if(!window.dispatchEvent(D))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",M);return}console.error(M)},Q={map:q,forEach:function(M,D,H){q(M,function(){D.apply(this,arguments)},H)},count:function(M){var D=0;return q(M,function(){D++}),D},toArray:function(M){return q(M,function(D){return D})||[]},only:function(M){if(!ie(M))throw Error("React.Children.only expected to receive a single React element child.");return M}};return je.Activity=v,je.Children=Q,je.Component=N,je.Fragment=a,je.Profiler=s,je.PureComponent=k,je.StrictMode=o,je.Suspense=g,je.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=B,je.__COMPILER_RUNTIME={__proto__:null,c:function(M){return B.H.useMemoCache(M)}},je.cache=function(M){return function(){return M.apply(null,arguments)}},je.cacheSignal=function(){return null},je.cloneElement=function(M,D,H){if(M==null)throw Error("The argument must be a React element, but youLine truncated
|
||||
* @license React
|
||||
* scheduler.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 y1;function JE(){return y1||(y1=1,(function(t){function r(_,q){var ee=_.length;_.push(q);e:for(;0<ee;){var ne=ee-1>>>1,Q=_[ne];if(0<s(Q,q))_[ne]=q,_[ee]=Q,ee=ne;else break e}}function a(_){return _.length===0?null:_[0]}function o(_){if(_.length===0)return null;var q=_[0],ee=_.pop();if(ee!==q){_[0]=ee;e:for(var ne=0,Q=_.length,M=Q>>>1;ne<M;){var D=2*(ne+1)-1,H=_[D],U=D+1,I=_[U];if(0>s(H,ee))U<Q&&0>s(I,H)?(_[ne]=I,_[U]=ee,ne=U):(_[ne]=H,_[D]=ee,ne=D);else if(U<Q&&0>s(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<V)}function ie(){if(j=!1,P){var _=t.unstable_now();W=_;var q=!0;try{e:{E=!1,w&&(w=!1,A(B),B=-1),C=!0;var ee=x;try{t:{for(T(_),v=a(g);v!==null&&!(v.expirationTime>_&&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"&&0<ee?ne+ee:ne):ee=ne,_){case 1:var Q=-1;break;case 2:Q=250;break;case 5:Q=1073741823;break;case 4:Q=1e4;break;default:Q=5e3}return Q=ee+Q,_={id:b++,callback:q,priorityLevel:_,startTime:ee,expirationTime:Q,sortIndex:-1},ee>ne?(_.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<arguments.length){h+="?args[]="+encodeURIComponent(arguments[1]);for(var b=2;b<arguments.length;b++)h+="&args[]="+encodeURIComponent(arguments[b])}return"Minified React error #"+g+"; visit "+h+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var o={d:{f:a,r:function(){throw Error(r(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},s=Symbol.for("react.portal");function c(g,h,b){var v=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:s,key:v==null?null:""+v,children:g,containerInfo:h,implementation:b}}var f=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function m(g,h){if(g==="font")return"";if(typeof h=="string")return h==="use-credentials"?h:""}return Bt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=o,Bt.createPortal=function(g,h){var b=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!h||h.nodeType!==1&&h.nodeType!==9&&h.nodeType!==11)throw Error(r(299));return c(g,h,null,b)},Bt.flushSync=function(g){var h=f.T,b=o.p;try{if(f.T=null,o.p=2,g)return g()}finally{f.T=h,o.p=b,o.d.f()}},Bt.preconnect=function(g,h){typeof g=="string"&&(h?(h=h.crossOrigin,h=typeof h=="string"?h==="use-credentials"?h:"":void 0):h=null,o.d.C(g,h))},Bt.prefetchDNS=function(g){typeof g=="string"&&o.d.D(g)},Bt.preinit=function(g,h){if(typeof g=="string"&&h&&typeof h.as=="string"){var b=h.as,v=m(b,h.crossOrigin),x=typeof h.integrity=="string"?h.integrity:void 0,C=typeof h.fetchPriority=="string"?h.fetchPriority:void 0;b==="style"?o.d.S(g,typeof h.precedence=="string"?h.precedence:void 0,{crossOrigin:v,integrity:x,fetchPriority:C}):b==="script"&&o.d.X(g,{crossOrigin:v,integrity:x,fetchPriority:C,nonce:typeof h.nonce=="string"?h.nonce:void 0})}},Bt.preinitModule=function(g,h){if(typeof g=="string")if(typeof h=="object"&&h!==null){if(h.as==null||h.as==="script"){var b=m(h.as,h.crossOrigin);o.d.M(g,{crossOrigin:b,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0})}}else h==null&&o.d.M(g)},Bt.preload=function(g,h){if(typeof g=="string"&&typeof h=="object"&&h!==null&&typeof h.as=="string"){var b=h.as,v=m(b,h.crossOrigin);o.d.L(g,b,{crossOrigin:v,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0,type:typeof h.type=="string"?h.type:void 0,fetchPriority:typeof h.fetchPriority=="string"?h.fetchPriority:void 0,referrerPolicy:typeof h.referrerPolicy=="string"?h.referrerPolicy:void 0,imageSrcSet:typeof h.imageSrcSet=="string"?h.imageSrcSet:void 0,imageSizes:typeof h.imageSizes=="string"?h.imageSizes:void 0,media:typeof h.media=="string"?h.media:void 0})}},Bt.preloadModule=function(g,h){if(typeof g=="string")if(h){var b=m(h.as,h.crossOrigin);o.d.m(g,{as:typeof h.as=="string"&&h.as!=="script"?h.as:void 0,crossOrigin:b,integrity:typeof h.integrity=="string"?h.integrity:void 0})}else o.d.m(g)},Bt.requestFormReset=function(g){o.d.r(g)},Bt.unstable_batchedUpdates=function(g,h){return g(h)},Bt.useFormState=function(g,h,b){return f.H.useFormState(g,h,b)},Bt.useFormStatus=function(){return f.H.useHostTransitionStatus()},Bt.version="19.2.6",Bt}var S1;function Pb(){if(S1)return lm.exports;S1=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"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(1<arguments.length){n+="?args[]="+encodeURIComponent(arguments[1]);for(var l=2;l<arguments.length;l++)n+="&args[]="+encodeURIComponent(arguments[l])}return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function c(e){var n=e,l=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do n=e,(n.flags&4098)!==0&&(l=n.return),e=n.return;while(e)}return n.tag===3?l:null}function f(e){if(e.tag===13){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function m(e){if(e.tag===31){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function g(e){if(c(e)!==e)throw Error(o(188))}function h(e){var n=e.alternate;if(!n){if(n=c(e),n===null)throw Error(o(188));return n!==e?null:e}for(var l=e,i=n;;){var p=l.return;if(p===null)break;var y=p.alternate;if(y===null){if(i=p.return,i!==null){l=i;continue}break}if(p.child===y.child){for(y=p.child;y;){if(y===l)return g(p),e;if(y===i)return g(p),n;y=y.sibling}throw Error(o(188))}if(l.return!==i.return)l=p,i=y;else{for(var S=!1,R=p.child;R;){if(R===l){S=!0,l=p,i=y;break}if(R===i){S=!0,i=p,l=y;break}R=R.sibling}if(!S){for(R=y.child;R;){if(R===l){S=!0,l=y,i=p;break}if(R===i){S=!0,i=y,l=p;break}R=R.sibling}if(!S)throw Error(o(189))}}if(l.alternate!==i)throw Error(o(190))}if(l.tag!==3)throw Error(o(188));return l.stateNode.current===l?e:n}function b(e){var n=e.tag;if(n===5||n===26||n===27||n===6)return e;for(e=e.child;e!==null;){if(n=b(e),n!==null)return n;e=e.sibling}return null}var v=Object.assign,x=Symbol.for("react.element"),C=Symbol.for("react.transitional.element"),E=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),j=Symbol.for("react.strict_mode"),N=Symbol.for("react.profiler"),A=Symbol.for("react.consumer"),k=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),z=Symbol.for("react.suspense"),P=Symbol.for("react.suspense_list"),B=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),W=Symbol.for("react.activity"),oe=Symbol.for("react.memo_cache_sentinel"),ie=Symbol.iterator;function me(e){return e===null||typeof e!="object"?null:(e=ie&&e[ie]||e["@@iterator"],typeof e=="function"?e:null)}var de=Symbol.for("react.client.reference");function se(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===de?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case w:return"Fragment";case N:return"Profiler";case j:return"StrictMode";case z:return"Suspense";case P:return"SuspenseList";case W:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case E:return"Portal";case k:return e.displayName||"Context";case A:return(e._context.displayName||"Context")+".Consumer";case T:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case B:return n=e.displayName||null,n!==null?n:se(e.type)||"Memo";case V:n=e._payload,e=e._init;try{return se(e(n))}catch{}}return null}var fe=Array.isArray,_=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,q=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ee={pending:!1,data:null,method:null,action:null},ne=[],Q=-1;function M(e){return{current:e}}function D(e){0>Q||(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<l.stack.indexOf(`
|
||||
at`)?" (<anonymous>)":-1<l.stack.indexOf("@")?"@unknown:0:0":""}return`
|
||||
`+Ne+e+st}var zn=!1;function bn(e,n){if(!e||zn)return"";zn=!0;var l=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var i={DetermineComponentFrameRoot:function(){try{if(n){var re=function(){throw Error()};if(Object.defineProperty(re.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(re,[])}catch(X){var F=X}Reflect.construct(e,[],re)}else{try{re.call()}catch(X){F=X}e.call(re.prototype)}}else{try{throw Error()}catch(X){F=X}(re=e())&&typeof re.catch=="function"&&re.catch(function(){})}}catch(X){if(X&&F&&typeof X.stack=="string")return[X.stack,F.stack]}return[null,null]}};i.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var p=Object.getOwnPropertyDescriptor(i.DetermineComponentFrameRoot,"name");p&&p.configurable&&Object.defineProperty(i.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var y=i.DetermineComponentFrameRoot(),S=y[0],R=y[1];if(S&&R){var O=S.split(`
|
||||
`),Y=R.split(`
|
||||
`);for(p=i=0;i<O.length&&!O[i].includes("DetermineComponentFrameRoot");)i++;for(;p<Y.length&&!Y[p].includes("DetermineComponentFrameRoot");)p++;if(i===O.length||p===Y.length)for(i=O.length-1,p=Y.length-1;1<=i&&0<=p&&O[i]!==Y[p];)p--;for(;1<=i&&0<=p;i--,p--)if(O[i]!==Y[p]){if(i!==1||p!==1)do if(i--,p--,0>p||O[i]!==Y[p]){var Z=`
|
||||
`+O[i].replace(" at new "," at ");return e.displayName&&Z.includes("<anonymous>")&&(Z=Z.replace("<anonymous>",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<l;){var Z=31-zt(l),re=1<<Z;R[Z]=0,O[Z]=-1;var F=Y[Z];if(F!==null)for(Y[Z]=null,Z=0;Z<F.length;Z++){var X=F[Z];X!==null&&(X.lane&=-536870913)}l&=~re}i!==0&&Ea(e,i,0),y!==0&&p===0&&e.tag!==0&&(e.suspendedLanes|=y&~(S&~n))}function Ea(e,n,l){e.pendingLanes|=n,e.suspendedLanes&=~n;var i=31-zt(n);e.entangledLanes|=n,e.entanglements[i]=e.entanglements[i]|1073741824|l&261930}function Ft(e,n){var l=e.entangledLanes|=n;for(e=e.entanglements;l;){var i=31-zt(l),p=1<<i;p&n|e[i]&n&&(e[i]|=n),l&=~p}}function Wt(e,n){var l=n&-n;return l=(l&42)!==0?1:oo(l),(l&(e.suspendedLanes|n))!==0?0:l}function oo(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;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:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Bn(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function Gu(){var e=q.p;return e!==0?e:(e=window.event,e===void 0?32:s1(e.type))}function wh(e,n){var l=q.p;try{return q.p=e,n()}finally{q.p=l}}var Br=Math.random().toString(36).slice(2),At="__reactFiber$"+Br,qt="__reactProps$"+Br,lo="__reactContainer$"+Br,Yu="__reactEvents$"+Br,Bw="__reactListeners$"+Br,$w="__reactHandles$"+Br,Eh="__reactResources$"+Br,Sl="__reactMarker$"+Br;function Fu(e){delete e[At],delete e[qt],delete e[Yu],delete e[Bw],delete e[$w]}function so(e){var n=e[At];if(n)return n;for(var l=e.parentNode;l;){if(n=l[lo]||l[At]){if(l=n.alternate,n.child!==null||l!==null&&l.child!==null)for(e=Yy(e);e!==null;){if(l=e[At])return l;e=Yy(e)}return n}e=l,l=e.parentNode}return null}function io(e){if(e=e[At]||e[lo]){var n=e.tag;if(n===5||n===6||n===13||n===31||n===26||n===27||n===3)return e}return null}function Cl(e){var n=e.tag;if(n===5||n===26||n===27||n===6)return e.stateNode;throw Error(o(33))}function co(e){var n=e[Eh];return n||(n=e[Eh]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function Nt(e){e[Sl]=!0}var Nh=new Set,jh={};function Na(e,n){uo(e,n),uo(e+"Capture",n)}function uo(e,n){for(jh[e]=n,e=0;e<n.length;e++)Nh.add(n[e])}var Uw=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u
Line truncated
|
||||
`).replace(vE,"")}function Ly(e,n){return n=Dy(n),Dy(e)===n}function Ye(e,n,l,i,p,y){switch(l){case"children":typeof i=="string"?n==="body"||n==="textarea"&&i===""||mo(e,i):(typeof i=="number"||typeof i=="bigint")&&n!=="body"&&mo(e,""+i);break;case"className":si(e,"class",i);break;case"tabIndex":si(e,"tabindex",i);break;case"dir":case"role":case"viewBox":case"width":case"height":si(e,l,i);break;case"style":Lh(e,i,y);break;case"data":if(n!=="object"){si(e,"data",i);break}case"src":case"href":if(i===""&&(n!=="a"||l!=="href")){e.removeAttribute(l);break}if(i==null||typeof i=="function"||typeof i=="symbol"||typeof i=="boolean"){e.removeAttribute(l);break}i=ci(""+i),e.setAttribute(l,i);break;case"action":case"formAction":if(typeof i=="function"){e.setAttribute(l,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof y=="function"&&(l==="formAction"?(n!=="input"&&Ye(e,n,"name",p.name,p,null),Ye(e,n,"formEncType",p.formEncType,p,null),Ye(e,n,"formMethod",p.formMethod,p,null),Ye(e,n,"formTarget",p.formTarget,p,null)):(Ye(e,n,"encType",p.encType,p,null),Ye(e,n,"method",p.method,p,null),Ye(e,n,"target",p.target,p,null)));if(i==null||typeof i=="symbol"||typeof i=="boolean"){e.removeAttribute(l);break}i=ci(""+i),e.setAttribute(l,i);break;case"onClick":i!=null&&(e.onclick=dr);break;case"onScroll":i!=null&&Le("scroll",e);break;case"onScrollEnd":i!=null&&Le("scrollend",e);break;case"dangerouslySetInnerHTML":if(i!=null){if(typeof i!="object"||!("__html"in i))throw Error(o(61));if(l=i.__html,l!=null){if(p.children!=null)throw Error(o(60));e.innerHTML=l}}break;case"multiple":e.multiple=i&&typeof i!="function"&&typeof i!="symbol";break;case"muted":e.muted=i&&typeof i!="function"&&typeof i!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(i==null||typeof i=="function"||typeof i=="boolean"||typeof i=="symbol"){e.removeAttribute("xlink:href");break}l=ci(""+i),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":i!=null&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(l,""+i):e.removeAttribute(l);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":i&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(l,""):e.removeAttribute(l);break;case"capture":case"download":i===!0?e.setAttribute(l,""):i!==!1&&i!=null&&typeof i!="function"&&typeof i!="symbol"?e.setAttribute(l,i):e.removeAttribute(l);break;case"cols":case"rows":case"size":case"span":i!=null&&typeof i!="function"&&typeof i!="symbol"&&!isNaN(i)&&1<=i?e.setAttribute(l,i):e.removeAttribute(l);break;case"rowSpan":case"start":i==null||typeof i=="function"||typeof i=="symbol"||isNaN(i)?e.removeAttribute(l):e.setAttribute(l,i);break;case"popover":Le("beforetoggle",e),Le("toggle",e),li(e,"popover",i);break;case"xlinkActuate":ur(e,"http://www.w3.org/1999/xlink","xlink:actuate",i);break;case"xlinkArcrole":ur(e,"http://www.w3.org/1999/xlink","xlink:arcrole",i);break;case"xlinkRole":ur(e,"http://www.w3.org/1999/xlink","xlink:role",i);break;case"xlinkShow":ur(e,"http://www.w3.org/1999/xlink","xlink:show",i);break;case"xlinkTitle":ur(e,"http://www.w3.org/1999/xlink","xlink:title",i);break;case"xlinkType":ur(e,"http://www.w3.org/1999/xlink","xlink:type",i);break;case"xmlBase":ur(e,"http://www.w3.org/XML/1998/namespace","xml:base",i);break;case"xmlLang":ur(e,"http://www.w3.org/XML/1998/namespace","xml:lang",i);break;case"xmlSpace":ur(e,"http://www.w3.org/XML/1998/namespace","xml:space",i);break;case"is":li(e,"is",i);break;case"innerText":case"textContent":break;default:(!(2<l.length)||l[0]!=="o"&&l[0]!=="O"||l[1]!=="n"&&l[1]!=="N")&&(l=Yw.get(l)||l,li(e,l,i))}}function Pf(e,n,l,i,p,y){switch(l){case"style":Lh(e,i,y);break;case"dangerouslySetInnerHTML":if(i!=null){if(typeof i!="object"||!("__html"in i))throw Error(o(61));if(l=i.__html,l!=null){if(p.children!=null)throw Error(o(60));e.innerHTML=l}}break;case"children":typeof i=="string"?mo(e,i):(typeof i=="number"||typeof i=="bigint")&&mo(e,""+i);break;case"onScroll":i!=null&&Le("scroll",e);break;case"onScrollEnd":i!=null&&Le("scrollend",e);break;case"onClick":i!=null&&(e.onclick=dr);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"inne
Line truncated
|
||||
* 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<m.length;++b)g=x3(m[b],h,o);return g}function u3(t){let r=$b(t);return d3(r),r}function $b(t,r=[],a=[],o="",s=!1){let c=(f,m,g=s,h)=>{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<o.length;++m){let g=o[m],h=m===o.length-1,b=c==="/"?r:r.slice(c.length)||"/",v=zc({path:g.relativePath,caseSensit
Line truncated
|
||||
|
||||
Please change the parent <Route path="${N}"> to <Route path="${N==="/"?"*":`${N}/*`}">.`)}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 \`<Routes location>\` 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 <Outlet /> 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<s.length;b++){let v=s[b];if((v.route.HyLine truncated
|
||||
.`.concat(T9,` {
|
||||
overflow: hidden `).concat(o,`;
|
||||
padding-right: `).concat(m,"px ").concat(o,`;
|
||||
}
|
||||
body[`).concat(el,`] {
|
||||
overflow: hidden `).concat(o,`;
|
||||
overscroll-behavior: contain;
|
||||
`).concat([r&&"position: relative ".concat(o,";"),a==="margin"&&`
|
||||
padding-left: `.concat(s,`px;
|
||||
padding-top: `).concat(c,`px;
|
||||
padding-right: `).concat(f,`px;
|
||||
margin-left:0;
|
||||
margin-top:0;
|
||||
margin-right: `).concat(m,"px ").concat(o,`;
|
||||
`),a==="padding"&&"padding-right: ".concat(m,"px ").concat(o,";")].filter(Boolean).join(""),`
|
||||
}
|
||||
|
||||
.`).concat(Oc,` {
|
||||
right: `).concat(m,"px ").concat(o,`;
|
||||
}
|
||||
|
||||
.`).concat(Dc,` {
|
||||
margin-right: `).concat(m,"px ").concat(o,`;
|
||||
}
|
||||
|
||||
.`).concat(Oc," .").concat(Oc,` {
|
||||
right: 0 `).concat(o,`;
|
||||
}
|
||||
|
||||
.`).concat(Dc," .").concat(Dc,` {
|
||||
margin-right: 0 `).concat(o,`;
|
||||
}
|
||||
|
||||
body[`).concat(el,`] {
|
||||
`).concat(A9,": ").concat(m,`px;
|
||||
}
|
||||
`)},ib=function(){var t=parseInt(document.body.getAttribute(el)||"0",10);return isFinite(t)?t:0},q9=function(){d.useEffect(function(){return document.body.setAttribute(el,(ib()+1).toString()),function(){var t=ib()-1;t<=0?document.body.removeAttribute(el):document.body.setAttribute(el,t.toString())}},[])},X9=function(t){var r=t.noRelative,a=t.noImportant,o=t.gapMode,s=o===void 0?"margin":o;q9();var c=d.useMemo(function(){return Y9(s)},[s]);return d.createElement(F9,{styles:W9(c,!r,s,a?"":"!important")})},Vm=!1;if(typeof window<"u")try{var Nc=Object.defineProperty({},"passive",{get:function(){return Vm=!0,!0}});window.addEventListener("test",Nc,Nc),window.removeEventListener("test",Nc,Nc)}catch{Vm=!1}var Fo=Vm?{passive:!1}:!1,K9=function(t){return t.tagName==="TEXTAREA"},Ex=function(t,r){if(!(t instanceof Element))return!1;var a=window.getComputedStyle(t);return a[r]!=="hidden"&&!(a.overflowY===a.overflowX&&!K9(t)&&a[r]==="visible")},Z9=function(t){return Ex(t,"overflowY")},Q9=function(t){return Ex(t,"overflowX")},cb=function(t,r){var a=r.ownerDocument,o=r;do{typeof ShadowRoot<"u"&&o instanceof ShadowRoot&&(o=o.host);var s=Nx(t,o);if(s){var c=jx(t,o),f=c[1],m=c[2];if(f>m)return!0}o=o.parentNode}while(o&&o!==a.body);return!1},J9=function(t){var r=t.scrollTop,a=t.scrollHeight,o=t.clientHeight;return[r,a,o]},eR=function(t){var r=t.scrollLeft,a=t.scrollWidth,o=t.clientWidth;return[r,a,o]},Nx=function(t,r){return t==="v"?Z9(r):Q9(r)},jx=function(t,r){return t==="v"?J9(r):eR(r)},tR=function(t,r){return t==="h"&&r==="rtl"?-1:1},nR=function(t,r,a,o,s){var c=tR(t,window.getComputedStyle(r).direction),f=c*o,m=a.target,g=r.contains(m),h=!1,b=f>0,v=0,x=0;do{if(!m)break;var C=jx(t,m),E=C[0],w=C[1],j=C[2],N=w-j-c*E;(E||N)&&Nx(t,m)&&(v+=N,x+=E);var A=m.parentNode;m=A&&A.nodeType===Node.DOCUMENT_FRAGMENT_NODE?A.host:A}while(!g&&m!==document.body||g&&(r.contains(m)||r===m));return(b&&Math.abs(v)<1||!b&&Math.abs(x)<1)&&(h=!0),h},jc=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},ub=function(t){return[t.deltaX,t.deltaY]},db=function(t){return t&&"current"in t?t.current:t},rR=function(t,r){return t[0]===r[0]&&t[1]===r[1]},aR=function(t){return`
|
||||
.block-interactivity-`.concat(t,` {pointer-events: none;}
|
||||
.allow-interactivity-`).concat(t,` {pointer-events: all;}
|
||||
`)},oR=0,Wo=[];function lR(t){var r=d.useRef([]),a=d.useRef([0,0]),o=d.useRef(),s=d.useState(oR++)[0],c=d.useState(wx)[0],f=d.useRef(t);d.useEffect(function(){f.current=t},[t]),d.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(s));var w=R9([t.lockRef.current],(t.shards||[]).map(db),!0).filter(Boolean);return w.forEach(function(j){return j.classList.add("allow-interactivity-".concat(s))}),function(){document.body.classList.remove("block-interactivity-".concat(s)),w.forEach(function(j){return j.classList.remove("allow-interactivity-".concat(s))})}}},[t.inert,t.lockRef.current,t.shards]);var m=d.useCallback(function(w,j){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!f.current.allowPinchZoom;var N=jc(w),A=a.current,k="deltaX"in w?w.deltaX:A[0]-N[0],T="deltaY"in w?w.deltaY:A[1]-N[1],z,P=w.target,B=Math.abs(k)>Math.abs(T)?"h":"v";if("touches"in w&&B==="h"&&P.type==="range")return!1;var V=window.getSelection(),W=V&&V.anchorNode,oe=W?W===P||W.contains(P):!1;if(oe)return!1;var ie=cb(B,P);if(!ie)return!0;if(ie?z=B:(z=B==="v"?"h":"v",ie=cb(B,P)),!ie)return!1;if(!o.current&&"changedTouches"in w&&(k||T)&&(o.current=z),!z)return!0;var me=o.current||z;return nR(me,j,w,me==="h"?k:T)},[]),g=d.useCallback(function(w){var j=w;if(!(!Wo.length||Wo[Wo.length-1]!==c)){var N="deltaY"in j?ub(j):jc(j),A=r.current.filter(function(z){return z.name===j.type&&(z.target===j.target||j.target===z.shadowParent)&&rR(z.delta,N)})[0];if(A&&A.should){j.cancelable&&j.preventDefault();return}if(!A){var k=(f.current.shards||[]).map(db).filter(Boolean).filter(function(z){return z.contains(j.target)}),T=k.length>0?m(j,k[0]):!f.current.noIsolation;T&&j.cancelable&&j.preventDefault()}}},[]),h=d.useCallback(function(w,j,N,A){var k={name:w,delta:j,target:N,should:A,shadowParent:sR(N)};r.current.push(k),setTimeout(function(){r.current=r.current.filter(function(T){return T!==k})},1)},[]),b=d.useCallback(function(w){a.current=jc(w),o.current=void 0},[]),v=d.useCallback(function(w){h(w.type,ub(w),w.target,m(w,t.lockRef.current))},[]),x=d.useCallback(function(w){h(w.type,jc(w),w.target,m(w,t.lockRef.current))},[]);d.useEffect(function(){return Wo.push(c),t.setCallbacks({onScrollCapture:v,onWheelCapture:v,onTouchMoveCapture:x}),document.addEventListener("wheel",g,Fo),document.addEventListener("touchmove",g,Fo),document.addEventListener("touchstart",b,Fo),function(){Wo=Wo.filter(function(w){return w!==c}),document.removeEventListener("wheel",g,Fo),document.removeEventListener("touchmove",g,Fo),document.removeEventListener("touchstart",b,Fo)}},[]);var C=t.removeScrollBar,E=t.inert;return d.createElement(d.Fragment,null,E?d.createElement(c,{styles:aR(s)}):null,C?d.createElement(X9,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function sR(t){for(var r=null;t!==null;)t instanceof ShadowRoot&&(r=t.host,t=t.host),t=t.parentNode;return r}const iR=z9(Cx,lR);var Fs=d.forwardRef(function(t,r){return d.createElement(vu,rr({},t,{ref:r,sideCar:iR}))});Fs.classNames=vu.classNames;var Gm=["Enter"," "],cR=["ArrowDown","PageUp","Home"],Rx=["ArrowUp","PageDown","End"],uR=[...cR,...Rx],dR={ltr:[...Gm,"ArrowRight"],rtl:[...Gm,"ArrowLeft"]},fR={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Ws="Menu",[Ts,mR,pR]=Lp(Ws),[to,Tx]=Aj(Ws,[pR,pa,hu]),yu=pa(),Ax=hu(),[hR,no]=to(Ws),[gR,qs]=to(Ws),kx=t=>{const{__scopeMenu:r,open:a=!1,children:o,dir:s,onOpenChange:c,modal:f=!0}=t,m=yu(r),[g,h]=d.useState(null),b=d.useRef(!1),v=Rt(c),x=Us(s);return d.useEffect(()=>{const C=()=>{b.current=!0,document.addEventListener("pointerdown",E,{capture:!0,once:!0}),document.addEventListener("pointermove",E,{capture:!0,once:!0})},E=()=>b.current=!1;return document.addEventListener("keydown",C,{capture:!0}),()=>{document.removeEventListener("keydown",C,{capture:!0}),document.removeEventListener("pointerdown",E,{capture:!0}),document.removeEventListener("pointermove",E,{capture:!0})}},[]),u.jsx(fu,{...m,children:u.jsx(hR,{scope:r,open:a,onOpenChange:v,content:g,onContentChange:h,children:u.jsx(gR,{scope:r,onClose:d.useCallback(()=>v(!1),[v]),isUsingKeyboardRef:b,dir:x,modal:f,children:o})})})};kx.displayName=Ws;var vR="MenuAnchor",Gp=d.forwardRef((t,r)=>{const{__scopeMenu:a,...o}=t,s=yu(a);return u.jsx(Vs,{...s,...o,ref:r})});Gp.displayName=vR;var Yp="MenuPortal",[yR,Mx]=to(Yp,{forceMount:void 0}),_x=t=>{const{__scopeMenu:r,forceMount:a,children:o,container:s}=t,c=no(Yp,r);return u.jsx(yR,{scope:r,forceMount:a,children:u.jsx(Lt,{present:a||c.open,children:u.jsx(hl,{asChild:!0,container:s,children:o})})})};_x.displayName=Yp;var _n="MenuContent",[bR,Fp]=to(_n),Ox=d.forwardRef((t,r)=>{const a=Mx(_n,t.__scopeMenu),{forceMount:o=a.forceMount,...s}=t,c=no(_n,t.__scopeMenu),f=qs(_n,t.__scopeMenu);return u.jsx(Ts.Provider,{scope:t.__scopeMenu,children:u.jsx(Lt,{present:o||c.open,children:u.jsx(Ts.Slot,{scope:t.__scopeMenu,children:f.modal?u.jsx(xR,{...s,ref:r}):u.jsx(SR,{...s,ref:r})})})})}),xR=d.forwardRef((t,r)=>{const a=no(_n,t.__scopeMenu),o=
Line truncated
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const x2=(...t)=>t.filter((r,a,o)=>!!r&&r.trim()!==""&&o.indexOf(r)===a).join(" ").trim();/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const yT=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const bT=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(r,a,o)=>o?o.toUpperCase():a.toLowerCase());/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const mb=t=>{const r=bT(t);return r.charAt(0).toUpperCase()+r.slice(1)};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/var Em={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const xT=t=>{for(const r in t)if(r.startsWith("aria-")||r==="role"||r==="title")return!0;return!1},ST=d.createContext({}),CT=()=>d.useContext(ST),wT=d.forwardRef(({color:t,size:r,strokeWidth:a,absoluteStrokeWidth:o,className:s="",children:c,iconNode:f,...m},g)=>{const{size:h=24,strokeWidth:b=2,absoluteStrokeWidth:v=!1,color:x="currentColor",className:C=""}=CT()??{},E=o??v?Number(a??b)*24/Number(r??h):a??b;return d.createElement("svg",{ref:g,...Em,width:r??h??Em.width,height:r??h??Em.height,stroke:t??x,strokeWidth:E,className:x2("lucide",C,s),...!c&&!xT(m)&&{"aria-hidden":"true"},...m},[...f.map(([w,j])=>d.createElement(w,j)),...Array.isArray(c)?c:[c]])});/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const ha=(t,r)=>{const a=d.forwardRef(({className:o,...s},c)=>d.createElement(wT,{ref:c,iconNode:r,className:x2(`lucide-${yT(mb(t))}`,`lucide-${t}`,o),...s}));return a.displayName=mb(t),a};/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const ET=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],S2=ha("check",ET);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const NT=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],C2=ha("chevron-down",NT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const jT=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],RT=ha("chevron-right",jT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const TT=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],AT=ha("chevron-up",TT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const kT=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],MT=ha("circle",kT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const _T=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],OT=ha("panel-left",_T);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const DT=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],LT=ha("search",DT);/**
|
||||
* @license lucide-react v1.16.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/const zT=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],w2=ha("x",zT),Zp=hT,Qp=gT,PT=d.forwardRef(({className:t,inset:r,children:a,...o},s)=>u.jsxs(y2,{ref:s,className:ae("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",r&&"pl-8",t),...o,children:[a,u.jsx(RT,{className:"ml-auto"})]}));PT.displayName=y2.displayName;const BT=d.forwardRef(({className:t,...r},a)=>u.jsx(b2,{ref:a,className:ae("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),...r}));BT.displayName=b2.displayName;const Su=d.forwardRef(({className:t,sideOffset:r=4,...a},o)=>u.jsx(vT,{children:u.jsx(d2,{ref:o,sideOffset:r,className:ae("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})}));Su.displayName=d2.displayName;const ks=d.forwardRef(({className:t,inset:r,...a},o)=>u.jsx(m2,{ref:o,className:ae("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",r&&"pl-8",t),...a}));ks.displayName=m2.displayName;const $T=d.forwardRef(({className:t,children:r,checked:a,...o},s)=>u.jsxs(p2,{ref:s,className:ae("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:[u.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:u.jsx(g2,{children:u.jsx(S2,{className:"h-4 w-4"})})}),r]}));$T.displayName=p2.displayName;const UT=d.forwardRef(({className:t,children:r,...a},o)=>u.jsxs(h2,{ref:o,className:ae("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:[u.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:u.jsx(g2,{children:u.jsx(MT,{className:"h-2 w-2 fill-current"})})}),r]}));UT.displayName=h2.displayName;const Jp=d.forwardRef(({className:t,inset:r,...a},o)=>u.jsx(f2,{ref:o,className:ae("px-2 py-1.5 text-sm font-semibold",r&&"pl-8",t),...a}));Jp.displayName=f2.displayName;const qc=d.forwardRef(({className:t,...r},a)=>u.jsx(v2,{ref:a,className:ae("-mx-1 my-1 h-px bg-muted",t),...r}));qc.displayName=v2.displayName;const Nm=768;function HT(){const[t,r]=d.useState(void 0);return d.useEffect(()=>{const a=window.matchMedia(`(max-width: ${Nm-1}px)`),o=()=>{r(window.innerWidth<Nm)};return a.addEventListener("change",o),r(window.innerWidth<Nm),()=>a.removeEventListener("change",o)},[]),!!t}const vt=d.forwardRef(({className:t,type:r,...a},o)=>u.jsx("input",{type:r,className:ae("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}));vt.displayName="Input";var IT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],vn=IT.reduce((t,r)=>{const a=z0(`Primitive.${r}`),o=d.forwardRef((s,c)=>{const{asChild:f,...m}=s,g=f?a:r;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(g,{...m,ref:c})});return o.displayName=`Primitive.${r}`,{...t,[r]:o}},{}),VT="Separator",pb="horizontal",GT=["horizontal","vertical"],E2=d.forwardRef((t,r)=>{const{decorative:a,orientation:o=pb,...s}=t,c=YT(o)?o:pb,m=a?{role:"none"}:{"aria-orientation":c==="vertical"?c:void 0,role:"separator"};returnLine truncated
|
||||
|
||||
If you want to hide the \`${r.titleName}\`, you can wrap it with our VisuallyHidden component.
|
||||
|
||||
For more information, see https://radix-ui.com/primitives/docs/components/${r.docsSlug}`;return d.useEffect(()=>{t&&(document.getElementById(t)||console.error(a))},[a,t]),null},c7="DialogDescriptionWarning",u7=({contentRef:t,descriptionId:r})=>{const o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${I2(c7).contentName}}.`;return d.useEffect(()=>{var c;const s=(c=t.current)==null?void 0:c.getAttribute("aria-describedby");r&&s&&(document.getElementById(r)||console.warn(o))},[o,t,r]),null},rh=A2,ah=_2,Ks=O2,Zs=D2,wu=z2,Eu=B2,V2=U2;const d7=rh,f7=ah,G2=d.forwardRef(({className:t,...r},a)=>u.jsx(Ks,{className:ae("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),...r,ref:a}));G2.displayName=Ks.displayName;const m7=dl("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"}}),Y2=d.forwardRef(({side:t="right",className:r,children:a,...o},s)=>u.jsxs(f7,{children:[u.jsx(G2,{}),u.jsxs(Zs,{ref:s,className:ae(m7({side:t}),r),...o,children:[u.jsxs(V2,{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:[u.jsx(w2,{className:"h-4 w-4"}),u.jsx("span",{className:"sr-only",children:"Close"})]}),a]})]}));Y2.displayName=Zs.displayName;const F2=({className:t,...r})=>u.jsx("div",{className:ae("flex flex-col space-y-2 text-center sm:text-left",t),...r});F2.displayName="SheetHeader";const W2=d.forwardRef(({className:t,...r},a)=>u.jsx(wu,{ref:a,className:ae("text-lg font-semibold text-foreground",t),...r}));W2.displayName=wu.displayName;const q2=d.forwardRef(({className:t,...r},a)=>u.jsx(Eu,{ref:a,className:ae("text-sm text-muted-foreground",t),...r}));q2.displayName=Eu.displayName;function lt({className:t,...r}){return u.jsx("div",{className:ae("animate-pulse rounded-md bg-primary/10",t),...r})}function p7(t,r=[]){let a=[];function o(c,f){const m=d.createContext(f),g=a.length;a=[...a,f];const h=v=>{var N;const{scope:x,children:C,...E}=v,w=((N=x==null?void 0:x[t])==null?void 0:N[g])||m,j=d.useMemo(()=>E,Object.values(E));return u.jsx(w.Provider,{value:j,children:C})};h.displayName=c+"Provider";function b(v,x){var w;const C=((w=x==null?void 0:x[t])==null?void 0:w[g])||m,E=d.useContext(C);if(E)return E;if(f!==void 0)return f;throw new Error(`\`${v}\` must be used within \`${c}\``)}return[h,b]}const s=()=>{const c=a.map(f=>d.createContext(f));return function(m){const g=(m==null?void 0:m[t])||c;return d.useMemo(()=>({[`__scope${t}`]:{...m,[t]:g}}),[m,g])}};return s.scopeName=t,[o,h7(s,...r)]}function h7(...t){const r=t[0];if(t.length===1)return r;const a=()=>{const o=t.map(s=>({useScope:s(),scopeName:s.scopeName}));return function(c){const f=o.reduce((m,{useScope:g,scopeName:h})=>{const v=g(c)[`__scope${h}`];return{...m,...v}},{});return d.useMemo(()=>({[`__scope${r.scopeName}`]:f}),[f])}};return a.scopeName=r.scopeName,a}function g7(t){const r=v7(t),a=d.forwardRef((o,s)=>{const{children:c,...f}=o,m=d.Children.toArray(c),g=m.find(b7);if(g){const h=g.props.children,b=m.map(v=>v===g?d.Children.count(h)>1?d.Children.only(null):d.isValidElement(h)?h.props.children:null:v);return u.jsx(r,{...f,ref:s,children:d.isValidElement(h)?d.cloneElement(h,void 0,b):null})}return u.jsx(r,{...f,ref:s,children:c})});return a.displayName=`${t}.Slot`,a}function v7(t){const r=d.forwardRef((a,o)=>{const{children:s,...c}=a;if(d.isValidElement(s)){const f=S7(s),m=x7(c,s.props);return s.type!==d.Fragment&&(m.ref=o?Ze(o,f):f),d.cloneElement(s,m)}return d.Children.count(s)>1?d.Children.only(null):null});return r.displayName=`${t}.SlotClone`,r}var X2=Symbol("radix.slottable");function y7(t){const r=({children:a})=>u.jsx(u.Fragment,{children:a});return r.displayName=`${t}.Slottable`,r.__radixId=X2,r}function b7(t){return d.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===X2}function x7(t,r){const a={...r};for(const o in r){const s=t[o],c=r[o];/^on[A-Z]/.test(o)?s&&c?a[o]=(...m)=>{const g=c(...m);return s(...m),g}:s&&(a[o]=s):o==="style"?a[o]={...s,...c}:o==="className"&&(a[o]=[s,c].filter(Boolean).join(" "))}return{...t,...a}}funct
Line truncated
|
||||
* @license React
|
||||
* use-sync-external-store-shim.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 wk(){if(bb)return km;bb=1;var t=Jc();function r(v,x){return v===x&&(v!==0||1/v===1/x)||v!==v&&x!==x}var a=typeof Object.is=="function"?Object.is:r,o=t.useState,s=t.useEffect,c=t.useLayoutEffect,f=t.useDebugValue;function m(v,x){var C=x(),E=o({inst:{value:C,getSnapshot:x}}),w=E[0].inst,j=E[1];return c(function(){w.value=C,w.getSnapshot=x,g(w)&&j({inst:w})},[v,C,x]),s(function(){return g(w)&&j({inst:w}),v(function(){g(w)&&j({inst:w})})},[v]),f(C),C}function g(v){var x=v.getSnapshot;v=v.value;try{var C=x();return!a(v,C)}catch{return!0}}function h(v,x){return x()}var b=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:m;return km.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:b,km}var xb;function Ek(){return xb||(xb=1,Am.exports=wk()),Am.exports}var Nk=Ek();function jk(){return Nk.useSyncExternalStore(Rk,()=>!0,()=>!1)}function Rk(){return()=>{}}var ih="Avatar",[Tk]=Sk(ih),[Ak,PS]=Tk(ih),BS=d.forwardRef((t,r)=>{const{__scopeAvatar:a,...o}=t,[s,c]=d.useState("idle");return u.jsx(Ak,{scope:a,imageLoadingStatus:s,onImageLoadingStatusChange:c,children:u.jsx(vn.span,{...o,ref:r})})});BS.displayName=ih;var $S="AvatarImage",US=d.forwardRef((t,r)=>{const{__scopeAvatar:a,src:o,onLoadingStatusChange:s=()=>{},...c}=t,f=PS($S,a),m=kk(o,c),g=Rt(h=>{s(h),f.onImageLoadingStatusChange(h)});return yt(()=>{m!=="idle"&&g(m)},[m,g]),m==="loaded"?u.jsx(vn.img,{...c,ref:r,src:o}):null});US.displayName=$S;var HS="AvatarFallback",IS=d.forwardRef((t,r)=>{const{__scopeAvatar:a,delayMs:o,...s}=t,c=PS(HS,a),[f,m]=d.useState(o===void 0);return d.useEffect(()=>{if(o!==void 0){const g=window.setTimeout(()=>m(!0),o);return()=>window.clearTimeout(g)}},[o]),f&&c.imageLoadingStatus!=="loaded"?u.jsx(vn.span,{...s,ref:r}):null});IS.displayName=HS;function Sb(t,r){return t?r?(t.src!==r&&(t.src=r),t.complete&&t.naturalWidth>0?"loaded":"loading"):"error":"idle"}function kk(t,{referrerPolicy:r,crossOrigin:a}){const o=jk(),s=d.useRef(null),c=o?(s.current||(s.current=new window.Image),s.current):null,[f,m]=d.useState(()=>Sb(c,t));return yt(()=>{m(Sb(c,t))},[c,t]),yt(()=>{const g=v=>()=>{m(v)};if(!c)return;const h=g("loaded"),b=g("error");return c.addEventListener("load",h),c.addEventListener("error",b),r&&(c.referrerPolicy=r),typeof a=="string"&&(c.crossOrigin=a),()=>{c.removeEventListener("load",h),c.removeEventListener("error",b)}},[c,a,r]),f}var VS=BS,GS=US,YS=IS;const _s=d.forwardRef(({className:t,...r},a)=>u.jsx(VS,{ref:a,className:ae("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",t),...r}));_s.displayName=VS.displayName;const Os=d.forwardRef(({className:t,...r},a)=>u.jsx(GS,{ref:a,className:ae("aspect-square h-full w-full",t),...r}));Os.displayName=GS.displayName;const Ds=d.forwardRef(({className:t,...r},a)=>u.jsx(YS,{ref:a,className:ae("flex h-full w-full items-center justify-center rounded-full bg-muted",t),...r}));Ds.displayName=YS.displayName;const FS=d.createContext(null);function Mk({children:t}){const[r,a]=d.useState([]),[o,s]=d.useState(0),[c,f]=d.useState(!0),m=d.useCallback(async()=>{try{const v=await ke.getNotifications();v.data&&(a(v.data.items),s(v.data.unreadCount))}catch{}finally{f(!1)}},[]),g=d.useCallback(async()=>{var v;try{const x=await ke.markNotificationsRead("all");a(C=>C.map(E=>({...E,read:!0}))),s(((v=x.data)==null?void 0:v.unreadCount)??0)}catch{}},[]),h=d.useCallback(async v=>{var x;try{const C=await ke.dismissNotification(v);a(E=>E.filter(w=>w.id!==v)),s(((x=C.data)==null?void 0:x.unreadCount)??0)}catch{}},[]);d.useEffect(()=>{m();const v=setInterval(m,3e4);return()=>clearInterval(v)},[m]);const b=d.useMemo(()=>({items:r,unreadCount:o,loading:c,refresh:m,markAllRead:g,dismiss:h}),[r,o,c,m,g,h]);return u.jsx(FS.Provider,{value:b,children:t})}function _k(){const t=d.useContext(FS);if(!t)throw new Error("useNotifications must be used within NotificationsProvider");return t}const Ok=dl("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 xs({className:t,variant:r,...a}){return u.jsx("div",{className:ae(Ok({variant:r}),t),...a})}function Dk(t){const r=Lk(t),a=d.forwardRef((o,s)=>{const{children:c,...f}=o,m=d.Children.toArray(c),g=m.find(Pk);if(g){const h=g.props.children,b=m.map(v=>v===g?d.Children.count(h)>1?d.Children.only(null):d.isValidElement(h)?h.props.children:null:v);return u.jsx(r,{...f,ref:s,children:d.isValidElement(h)?d.cloneElement(h,void 0,b):null})}return u.jsx(r,{...f,ref:s,children:c})});return a.displayName=`${t}.SLine truncated
|
||||
@@ -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"
|
||||
/>
|
||||
<script type="module" crossorigin src="/assets/index-DPWGusls.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DxUg_xTw.css">
|
||||
<script type="module" crossorigin src="/assets/index-WkaLPu9d.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DUq0PrN_.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>␍
|
||||
|
||||
Reference in new issue
Block a user