transcripts
This commit is contained in:
1 parent
b55976508e
commit
018c949104
16 files changed
+2361
-612
No files matched your search
+109
-12
@@ -63,6 +63,7 @@ const {
|
||||
clearGuildResourcesCache,
|
||||
} = require('../Structures/GuildManager.js');
|
||||
const { withTimeout } = require('../Structures/asyncTimeout.js');
|
||||
const transcriptTemplate = require('../Structures/TranscriptTemplate.js');
|
||||
const {
|
||||
listCatalogAddons,
|
||||
listInstalledAddons,
|
||||
@@ -1078,24 +1079,87 @@ 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 canEditTranscriptTemplate = (req) => {
|
||||
if (req.dashboardService) return true;
|
||||
if (!hasPermission(req.dashboardPermissions, 'transcripts')) return false;
|
||||
if (req.dashboardRole === 'viewer') return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
app.get('/system/transcript-template', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
res.json({ success: true, data: transcriptTemplate.getTemplate() });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to load transcript template' });
|
||||
}
|
||||
});
|
||||
|
||||
app.put('/system/transcript-template', p('transcripts'), (req, res) => {
|
||||
if (!canEditTranscriptTemplate(req)) {
|
||||
return forbid(res);
|
||||
}
|
||||
try {
|
||||
const saved = transcriptTemplate.saveTemplate(req.body);
|
||||
res.json({
|
||||
success: true,
|
||||
data: saved,
|
||||
message: 'Transcript appearance saved. New transcripts will use this design.',
|
||||
});
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: err.message || 'Failed to save template' });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/system/transcript-template/preview', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const html = transcriptTemplate.renderPreview(req.body);
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader('Cache-Control', 'no-store');
|
||||
res.send(html);
|
||||
} catch (err) {
|
||||
res.status(500).type('html').send('<!DOCTYPE html><body><h1>Preview failed</h1></body>');
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcripts', p('transcripts'), (req, res) => {
|
||||
const transcriptDir = './Data/Transcripts';
|
||||
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 stats = fs.statSync(`${transcriptDir}/${f}`);
|
||||
.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: f.replace('-transcript.html', ''),
|
||||
id,
|
||||
filename: f,
|
||||
createdAt: stats.mtime
|
||||
createdAt: stats.mtime.toISOString(),
|
||||
size: stats.size,
|
||||
ticketName: parsed?.ticketName ?? null,
|
||||
};
|
||||
})
|
||||
.sort((a, b) => b.createdAt - a.createdAt);
|
||||
.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));
|
||||
res.json({ success: true, data: transcripts });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to list transcripts' });
|
||||
@@ -1103,18 +1167,51 @@ h1{font-size:1.25rem}a{color:#a78bfa}</style></head><body>
|
||||
});
|
||||
|
||||
app.get('/system/transcripts/:id', p('transcripts'), (req, res) => {
|
||||
const id = req.params.id.replace(/[^0-9]/g, ''); // Sanitize ID
|
||||
const filePath = `./Data/Transcripts/${id}-transcript.html`;
|
||||
try {
|
||||
if (!fs.existsSync(filePath)) {
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).json({ success: false, error: 'Transcript not found' });
|
||||
}
|
||||
const content = fs.readFileSync(filePath, 'utf8');
|
||||
res.json({ success: true, data: content });
|
||||
res.json({ success: true, data: transcript.content });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to read transcript' });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcripts/:id/view', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const transcript = 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>',
|
||||
);
|
||||
}
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader('Cache-Control', 'private, max-age=60');
|
||||
res.send(transcript.content);
|
||||
} catch (err) {
|
||||
res.status(500).type('html').send(
|
||||
'<!DOCTYPE html><body style="font-family:sans-serif;padding:2rem"><h1>Failed to load transcript</h1></body>',
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/system/transcripts/:id/download', p('transcripts'), (req, res) => {
|
||||
try {
|
||||
const transcript = readTranscriptFile(req.params.id);
|
||||
if (!transcript) {
|
||||
return res.status(404).json({ success: false, error: 'Transcript not found' });
|
||||
}
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader(
|
||||
'Content-Disposition',
|
||||
`attachment; filename="${transcript.filename}"`,
|
||||
);
|
||||
res.send(transcript.content);
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: 'Failed to download transcript' });
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-17
@@ -63,12 +63,12 @@ Embed:
|
||||
Roles:
|
||||
AutoRole:
|
||||
Enabled: true
|
||||
Role: "ROLE_ID"
|
||||
Role: "1491881628065337404"
|
||||
|
||||
StaffMember:
|
||||
Staff: "ROLE_ID"
|
||||
Admin: "ROLE_ID"
|
||||
Moderator: "ROLE_ID"
|
||||
Staff: "1198299671576195213"
|
||||
Admin: "1198295676128329799"
|
||||
Moderator: "1198299671576195213"
|
||||
|
||||
Mod:
|
||||
AllowSupportStaff: false
|
||||
@@ -79,11 +79,11 @@ Roles:
|
||||
# ----------------------------
|
||||
|
||||
Welcome:
|
||||
Enabled: true
|
||||
Enabled: false
|
||||
Channel: "CHANNEL_ID"
|
||||
|
||||
Leave:
|
||||
Enabled: true
|
||||
Enabled: false
|
||||
Channel: "CHANNEL_ID"
|
||||
|
||||
# ----------------------------
|
||||
@@ -150,16 +150,16 @@ Ticket:
|
||||
DMOnRemove: true # DM the user when they are removed from the ticket
|
||||
DMTranscript: true # DM the user a transcript of the ticket when it is closed
|
||||
|
||||
TicketHome: "1469028381638000725"
|
||||
TicketHome: "1290752269880660079"
|
||||
|
||||
# What is TicketHome?
|
||||
# - Channel where the Ticket creation panel is sent.
|
||||
# - Channel where ticket threads are made. (only if ticket threads is enabled above.)
|
||||
|
||||
# For TicketType: channels
|
||||
TicketChannelsCategory: "CATEGORY_ID"
|
||||
TicketChannelsCategory: "1505240336736452809"
|
||||
TicketChannelsCategory2: "CATEGORY_ID" # This will be used if the first category has reached the max channel limit.
|
||||
TicketArchiveCategory: "CATEGORY_ID"
|
||||
TicketArchiveCategory: "1505240336736452809"
|
||||
# ---
|
||||
|
||||
Channel: "ticket-" # The prefix for ticket channel names
|
||||
@@ -186,7 +186,7 @@ Ticket:
|
||||
|
||||
ClaimTickets:
|
||||
Enabled: false
|
||||
Channel: "CHANNEL_ID"
|
||||
Channel: "1290752269880660079"
|
||||
# Channel where the ticket assignments are sent for staff to claim.
|
||||
|
||||
ClaimAcceptTime: 120000
|
||||
@@ -220,12 +220,12 @@ Ticket:
|
||||
- "Have you tried resolving the issue yourself?"
|
||||
|
||||
Log:
|
||||
TicketDataLog: "CHANNEL_ID"
|
||||
TicketDataLog: "1290752269880660079"
|
||||
TickeDataTitle: "Ticket Data"
|
||||
TicketBlacklistLog: "CHANNEL_ID"
|
||||
TicketBlacklistLog: "1290752269880660079"
|
||||
|
||||
AIMode:
|
||||
Enabled: true
|
||||
Enabled: false
|
||||
ThreadName: "Chat with SupportBot AI"
|
||||
WelcomeMessage: "Hi! I’m SupportBot AI. You can chat with me here about your issue."
|
||||
|
||||
@@ -234,7 +234,7 @@ Ticket:
|
||||
# -------------------------
|
||||
|
||||
DepartmentSystem:
|
||||
Enabled: true
|
||||
Enabled: false
|
||||
Placeholder: "Choose a ticket department"
|
||||
DefaultDepartment: "general"
|
||||
|
||||
@@ -358,12 +358,12 @@ SelectMenus:
|
||||
# -------------------------
|
||||
|
||||
MessageDelete:
|
||||
Channel: "CHANNEL_ID"
|
||||
Channel: "1290752269880660079"
|
||||
Colour: "#d92525"
|
||||
|
||||
MessageUpdate:
|
||||
Channel: "CHANNEL_ID"
|
||||
Channel: "1290752269880660079"
|
||||
Colour: "#f2a024"
|
||||
|
||||
Translate:
|
||||
TranslateLog: "CHANNEL_ID"
|
||||
TranslateLog: "1290752269880660079"
|
||||
@@ -0,0 +1,33 @@
|
||||
Theme:
|
||||
Background: '#0e0e0e'
|
||||
Panel: '#1d1d1d'
|
||||
PanelSecondary: '#222222'
|
||||
PanelTertiary: '#1d2938'
|
||||
Border: '#2e2e2e'
|
||||
Text: '#e6edf3'
|
||||
Muted: '#606060'
|
||||
Accent: '#396ff8'
|
||||
AccentSoft: rgba(34, 197, 94, 0.12)
|
||||
AccentBorder: rgba(34, 197, 94, 0.25)
|
||||
AccentText: '#8df0ad'
|
||||
Link: '#396ff8'
|
||||
AttachmentLink: '#396ff8'
|
||||
CodeBackground: '#0e0e0e'
|
||||
Typography:
|
||||
FontFamily: Poppins
|
||||
Header:
|
||||
Title: Ticket Transcript
|
||||
Subtitle: Exported conversation log for support ticket **{{ticketName}}**
|
||||
Badge: Closed Transcript
|
||||
ShowMetaCards: true
|
||||
Meta:
|
||||
ChannelLabel: Ticket Name
|
||||
TicketIdLabel: Ticket ID
|
||||
MessageCountLabel: Message Count
|
||||
CloseReasonLabel: Close Reason
|
||||
DefaultCloseReason: No Reason Provided.
|
||||
Messages:
|
||||
SectionTitle: Messages
|
||||
EmptyState: No messages were found in this ticket.
|
||||
Advanced:
|
||||
CustomCss: ''
|
||||
@@ -0,0 +1,488 @@
|
||||
<!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>
|
||||
@@ -0,0 +1,426 @@
|
||||
<!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>
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[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.
|
||||
@@ -0,0 +1,323 @@
|
||||
[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
|
||||
+7
-393
@@ -1,4 +1,4 @@
|
||||
const fs = require("fs");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Discord = require("discord.js");
|
||||
const yaml = require("js-yaml");
|
||||
@@ -6,6 +6,7 @@ const db = require("./Database.js");
|
||||
|
||||
const supportbot = require("./ConfigStore").supportbot;
|
||||
const msgconfig = require("./ConfigStore").messages;
|
||||
const { createTranscriptHTML } = require("./TranscriptTemplate.js");
|
||||
|
||||
function escapeHtml(str = "") {
|
||||
return String(str)
|
||||
@@ -68,7 +69,7 @@ function renderAttachment(att) {
|
||||
if (type === "image") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview attachment-image">
|
||||
<img src="${url}" alt="${name}" loading="lazy">
|
||||
</div>
|
||||
@@ -79,7 +80,7 @@ function renderAttachment(att) {
|
||||
if (type === "video") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview">
|
||||
<video controls preload="metadata">
|
||||
<source src="${url}">
|
||||
@@ -92,7 +93,7 @@ function renderAttachment(att) {
|
||||
if (type === "audio") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview">
|
||||
<audio controls preload="metadata">
|
||||
<source src="${url}">
|
||||
@@ -104,7 +105,7 @@ function renderAttachment(att) {
|
||||
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -134,393 +135,6 @@ function renderEmbeds(embeds = []) {
|
||||
.join("");
|
||||
}
|
||||
|
||||
function createTranscriptHTML(ticket, reason) {
|
||||
return `<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Transcript - ${escapeHtml(ticket.name)}</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>${escapeHtml(ticket.name)}</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">${escapeHtml(ticket.name)}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Ticket ID</div>
|
||||
<div class="meta-value">${escapeHtml(ticket.id)}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Message Count</div>
|
||||
<div class="meta-value">${ticket.messages.length}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">Close Reason</div>
|
||||
<div class="meta-value">${escapeHtml(reason || "No Reason Provided.")}</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="messages-wrap">
|
||||
<div class="messages-header">Messages</div>
|
||||
${
|
||||
ticket.messages.length
|
||||
? ticket.messages
|
||||
.map(
|
||||
(msg) => `
|
||||
<article class="message">
|
||||
<img src="${escapeHtml(msg.avatar || "")}" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">${escapeHtml(msg.username || "Unknown User")}</span>
|
||||
<span class="userid">${escapeHtml(msg.userId || "Unknown ID")}</span>
|
||||
<span class="timestamp">${formatDate(msg.timestamp)}</span>
|
||||
</div>
|
||||
|
||||
<div class="content">${parseMarkdown(msg.content || "")}</div>
|
||||
|
||||
${renderEmbeds(msg.embeds || [])}
|
||||
${(msg.attachments || []).map(renderAttachment).join("")}
|
||||
</div>
|
||||
</article>
|
||||
`,
|
||||
)
|
||||
.join("")
|
||||
: `<div class="empty-state">No messages were found in this ticket.</div>`
|
||||
}
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
|
||||
async function createTranscript(interaction, ticket, reason) {
|
||||
const { getChannel } = interaction.client;
|
||||
|
||||
@@ -633,4 +247,4 @@ async function createTranscript(interaction, ticket, reason) {
|
||||
|
||||
module.exports = {
|
||||
createTranscript,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,680 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const yaml = require("js-yaml");
|
||||
const {
|
||||
normalizeFontFamily,
|
||||
resolveTypography,
|
||||
} = require("./googleFonts.js");
|
||||
|
||||
const TEMPLATE_PATH = path.join(__dirname, "../Configs/transcript-template.yml");
|
||||
|
||||
let cachedTemplate = null;
|
||||
|
||||
function escapeHtml(str = "") {
|
||||
return String(str)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """);
|
||||
}
|
||||
|
||||
function parseMarkdown(content = "") {
|
||||
let safe = escapeHtml(content);
|
||||
|
||||
safe = safe.replace(/```([\s\S]*?)```/g, "<pre><code>$1</code></pre>");
|
||||
safe = safe.replace(/`(.*?)`/g, "<code>$1</code>");
|
||||
safe = safe.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>");
|
||||
safe = safe.replace(/\*(.*?)\*/g, "<em>$1</em>");
|
||||
safe = safe.replace(/_(.*?)_/g, "<em>$1</em>");
|
||||
safe = safe.replace(
|
||||
/\[(.*?)\]\((.*?)\)/g,
|
||||
'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>',
|
||||
);
|
||||
|
||||
return safe.replace(/\n/g, "<br>");
|
||||
}
|
||||
|
||||
function formatDate(iso) {
|
||||
try {
|
||||
return new Date(iso).toLocaleString("en-GB", {
|
||||
dateStyle: "medium",
|
||||
timeStyle: "short",
|
||||
});
|
||||
} catch {
|
||||
return iso;
|
||||
}
|
||||
}
|
||||
|
||||
function getFileTypeInfo(att) {
|
||||
const fileName = String(att.name || "attachment").toLowerCase();
|
||||
|
||||
if (/\.(png|jpg|jpeg|gif|webp|bmp|svg)$/i.test(fileName)) {
|
||||
return "image";
|
||||
}
|
||||
if (/\.(mp4|webm|mov|m4v)$/i.test(fileName)) {
|
||||
return "video";
|
||||
}
|
||||
if (/\.(mp3|wav|ogg|m4a|flac)$/i.test(fileName)) {
|
||||
return "audio";
|
||||
}
|
||||
return "file";
|
||||
}
|
||||
|
||||
function renderAttachment(att) {
|
||||
const url = escapeHtml(att.url || "");
|
||||
const name = escapeHtml(att.name || "attachment");
|
||||
const type = getFileTypeInfo(att);
|
||||
|
||||
if (type === "image") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview attachment-image">
|
||||
<img src="${url}" alt="${name}" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (type === "video") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview">
|
||||
<video controls preload="metadata">
|
||||
<source src="${url}">
|
||||
</video>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (type === "audio") {
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
<div class="attachment-preview">
|
||||
<audio controls preload="metadata">
|
||||
<source src="${url}">
|
||||
</audio>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
return `
|
||||
<div class="attachment">
|
||||
<a href="${url}" target="_blank" rel="noopener noreferrer" class="attachment-file">📎 ${name}</a>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function renderEmbeds(embeds = []) {
|
||||
return embeds
|
||||
.map((embed) => {
|
||||
const fields = (embed.fields || [])
|
||||
.map(
|
||||
(field) => `
|
||||
<div class="embed-field">
|
||||
<div class="embed-field-name">${escapeHtml(field.name || "Field")}</div>
|
||||
<div class="embed-field-value">${parseMarkdown(field.value || "")}</div>
|
||||
</div>
|
||||
`,
|
||||
)
|
||||
.join("");
|
||||
|
||||
return `
|
||||
<div class="discord-embed">
|
||||
${embed.title ? `<div class="discord-embed-title">${escapeHtml(embed.title)}</div>` : ""}
|
||||
${embed.description ? `<div class="discord-embed-description">${parseMarkdown(embed.description)}</div>` : ""}
|
||||
${fields}
|
||||
</div>
|
||||
`;
|
||||
})
|
||||
.join("");
|
||||
}
|
||||
|
||||
function deepMerge(base, patch) {
|
||||
const out = structuredClone(base);
|
||||
for (const [key, val] of Object.entries(patch || {})) {
|
||||
if (
|
||||
val &&
|
||||
typeof val === "object" &&
|
||||
!Array.isArray(val) &&
|
||||
out[key] &&
|
||||
typeof out[key] === "object" &&
|
||||
!Array.isArray(out[key])
|
||||
) {
|
||||
out[key] = deepMerge(out[key], val);
|
||||
} else {
|
||||
out[key] = val;
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function getDefaultTemplate() {
|
||||
return {
|
||||
Theme: {
|
||||
Background: "#0b0f14",
|
||||
Panel: "#111821",
|
||||
PanelSecondary: "#182230",
|
||||
PanelTertiary: "#1d2938",
|
||||
Border: "#283548",
|
||||
Text: "#e6edf3",
|
||||
Muted: "#9fb0c3",
|
||||
Accent: "#22c55e",
|
||||
AccentSoft: "rgba(34, 197, 94, 0.12)",
|
||||
AccentBorder: "rgba(34, 197, 94, 0.25)",
|
||||
AccentText: "#8df0ad",
|
||||
Link: "#8fd9ff",
|
||||
AttachmentLink: "#8fd9a8",
|
||||
CodeBackground: "#0f1720",
|
||||
},
|
||||
Typography: {
|
||||
FontFamily: "Inter",
|
||||
},
|
||||
Header: {
|
||||
Title: "Ticket Transcript",
|
||||
Subtitle:
|
||||
"Exported conversation log for support ticket **{{ticketName}}**",
|
||||
Badge: "Closed Transcript",
|
||||
ShowMetaCards: true,
|
||||
},
|
||||
Meta: {
|
||||
ChannelLabel: "Channel",
|
||||
TicketIdLabel: "Ticket ID",
|
||||
MessageCountLabel: "Message Count",
|
||||
CloseReasonLabel: "Close Reason",
|
||||
DefaultCloseReason: "No Reason Provided.",
|
||||
},
|
||||
Messages: {
|
||||
SectionTitle: "Messages",
|
||||
EmptyState: "No messages were found in this ticket.",
|
||||
},
|
||||
Advanced: {
|
||||
CustomCss: "",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeTemplate(raw) {
|
||||
const merged = deepMerge(getDefaultTemplate(), raw || {});
|
||||
if (merged.Typography) {
|
||||
merged.Typography.FontFamily = normalizeFontFamily(
|
||||
merged.Typography.FontFamily,
|
||||
);
|
||||
}
|
||||
return merged;
|
||||
}
|
||||
|
||||
function loadTemplateFromDisk() {
|
||||
try {
|
||||
if (!fs.existsSync(TEMPLATE_PATH)) {
|
||||
const defaults = getDefaultTemplate();
|
||||
fs.mkdirSync(path.dirname(TEMPLATE_PATH), { recursive: true });
|
||||
fs.writeFileSync(TEMPLATE_PATH, yaml.dump(defaults), "utf8");
|
||||
return defaults;
|
||||
}
|
||||
const parsed = yaml.load(fs.readFileSync(TEMPLATE_PATH, "utf8"));
|
||||
return normalizeTemplate(parsed);
|
||||
} catch (err) {
|
||||
console.error("[TranscriptTemplate] Failed to load template:", err.message);
|
||||
return getDefaultTemplate();
|
||||
}
|
||||
}
|
||||
|
||||
function getTemplate() {
|
||||
if (!cachedTemplate) {
|
||||
cachedTemplate = loadTemplateFromDisk();
|
||||
}
|
||||
return structuredClone(cachedTemplate);
|
||||
}
|
||||
|
||||
function reloadTemplate() {
|
||||
cachedTemplate = loadTemplateFromDisk();
|
||||
return getTemplate();
|
||||
}
|
||||
|
||||
function saveTemplate(data) {
|
||||
const merged = normalizeTemplate(data);
|
||||
fs.mkdirSync(path.dirname(TEMPLATE_PATH), { recursive: true });
|
||||
fs.writeFileSync(TEMPLATE_PATH, yaml.dump(merged), "utf8");
|
||||
cachedTemplate = merged;
|
||||
return merged;
|
||||
}
|
||||
|
||||
function applyPlaceholders(text, ctx) {
|
||||
return String(text || "")
|
||||
.replace(/\{\{ticketName\}\}/g, ctx.name || "")
|
||||
.replace(/\{\{ticketId\}\}/g, ctx.id || "")
|
||||
.replace(/\{\{messageCount\}\}/g, String(ctx.messageCount ?? 0))
|
||||
.replace(/\{\{reason\}\}/g, ctx.reason || "");
|
||||
}
|
||||
|
||||
function formatHeaderText(text, ctx) {
|
||||
const withPlaceholders = applyPlaceholders(text, ctx);
|
||||
const escaped = escapeHtml(withPlaceholders);
|
||||
return escaped.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>");
|
||||
}
|
||||
|
||||
function buildStyles(template) {
|
||||
const t = template.Theme;
|
||||
const { fontFamilyCss } = resolveTypography(template.Typography?.FontFamily);
|
||||
const custom = String(template.Advanced?.CustomCss || "").trim();
|
||||
|
||||
return `
|
||||
:root {
|
||||
--bg: ${t.Background};
|
||||
--panel: ${t.Panel};
|
||||
--panel-2: ${t.PanelSecondary};
|
||||
--panel-3: ${t.PanelTertiary};
|
||||
--border: ${t.Border};
|
||||
--text: ${t.Text};
|
||||
--muted: ${t.Muted};
|
||||
--accent: ${t.Accent};
|
||||
--accent-soft: ${t.AccentSoft};
|
||||
--accent-border: ${t.AccentBorder};
|
||||
--accent-text: ${t.AccentText};
|
||||
--link: ${t.Link};
|
||||
--attachment-link: ${t.AttachmentLink};
|
||||
--code: ${t.CodeBackground};
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: ${fontFamilyCss};
|
||||
}
|
||||
|
||||
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; }
|
||||
}
|
||||
|
||||
${custom}
|
||||
`;
|
||||
}
|
||||
|
||||
function getSampleTicket() {
|
||||
return {
|
||||
id: "123456789012345678",
|
||||
name: "ticket-support-demo",
|
||||
messages: [
|
||||
{
|
||||
username: "SupportBot",
|
||||
userId: "100000000000000001",
|
||||
avatar: "https://cdn.discordapp.com/embed/avatars/0.png",
|
||||
timestamp: new Date().toISOString(),
|
||||
content: "Hello! Thanks for opening a ticket. How can we help?",
|
||||
embeds: [],
|
||||
attachments: [],
|
||||
},
|
||||
{
|
||||
username: "Member",
|
||||
userId: "100000000000000002",
|
||||
avatar: "https://cdn.discordapp.com/embed/avatars/1.png",
|
||||
timestamp: new Date(Date.now() - 60000).toISOString(),
|
||||
content: "I need help with my purchase — order **#48291**.",
|
||||
embeds: [
|
||||
{
|
||||
title: "Order details",
|
||||
description: "Payment received · awaiting delivery",
|
||||
fields: [{ name: "Status", value: "Pending" }],
|
||||
},
|
||||
],
|
||||
attachments: [],
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
function createTranscriptHTML(ticket, reason, templateInput) {
|
||||
const template = templateInput
|
||||
? normalizeTemplate(templateInput)
|
||||
: getTemplate();
|
||||
const header = template.Header;
|
||||
const meta = template.Meta;
|
||||
const messagesCfg = template.Messages;
|
||||
const closeReason = reason || meta.DefaultCloseReason;
|
||||
const ctx = {
|
||||
name: ticket.name,
|
||||
id: ticket.id,
|
||||
messageCount: ticket.messages.length,
|
||||
reason: closeReason,
|
||||
};
|
||||
|
||||
const { headLinks } = resolveTypography(template.Typography?.FontFamily);
|
||||
|
||||
const metaSection = header.ShowMetaCards
|
||||
? `
|
||||
<div class="meta-grid">
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">${escapeHtml(meta.ChannelLabel)}</div>
|
||||
<div class="meta-value">${escapeHtml(ticket.name)}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">${escapeHtml(meta.TicketIdLabel)}</div>
|
||||
<div class="meta-value">${escapeHtml(ticket.id)}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">${escapeHtml(meta.MessageCountLabel)}</div>
|
||||
<div class="meta-value">${ticket.messages.length}</div>
|
||||
</div>
|
||||
<div class="meta-card">
|
||||
<div class="meta-label">${escapeHtml(meta.CloseReasonLabel)}</div>
|
||||
<div class="meta-value">${escapeHtml(closeReason)}</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
: "";
|
||||
|
||||
return `<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Transcript - ${escapeHtml(ticket.name)}</title>
|
||||
${headLinks}
|
||||
<style>${buildStyles(template)}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<section class="header">
|
||||
<div class="header-top">
|
||||
<div class="title-wrap">
|
||||
<h1>${escapeHtml(header.Title)}</h1>
|
||||
<p>${formatHeaderText(header.Subtitle, ctx)}</p>
|
||||
</div>
|
||||
<div class="badge">${escapeHtml(header.Badge)}</div>
|
||||
</div>
|
||||
${metaSection}
|
||||
</section>
|
||||
|
||||
<section class="messages-wrap">
|
||||
<div class="messages-header">${escapeHtml(messagesCfg.SectionTitle)}</div>
|
||||
${
|
||||
ticket.messages.length
|
||||
? ticket.messages
|
||||
.map(
|
||||
(msg) => `
|
||||
<article class="message">
|
||||
<img src="${escapeHtml(msg.avatar || "")}" alt="Avatar" class="avatar">
|
||||
<div class="message-body">
|
||||
<div class="message-header">
|
||||
<span class="username">${escapeHtml(msg.username || "Unknown User")}</span>
|
||||
<span class="userid">${escapeHtml(msg.userId || "Unknown ID")}</span>
|
||||
<span class="timestamp">${formatDate(msg.timestamp)}</span>
|
||||
</div>
|
||||
<div class="content">${parseMarkdown(msg.content || "")}</div>
|
||||
${renderEmbeds(msg.embeds || [])}
|
||||
${(msg.attachments || []).map(renderAttachment).join("")}
|
||||
</div>
|
||||
</article>
|
||||
`,
|
||||
)
|
||||
.join("")
|
||||
: `<div class="empty-state">${escapeHtml(messagesCfg.EmptyState)}</div>`
|
||||
}
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
|
||||
function renderPreview(templateInput) {
|
||||
const sample = getSampleTicket();
|
||||
return createTranscriptHTML(
|
||||
sample,
|
||||
"Resolved — thank you for contacting support.",
|
||||
templateInput,
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
TEMPLATE_PATH,
|
||||
getDefaultTemplate,
|
||||
getTemplate,
|
||||
reloadTemplate,
|
||||
saveTemplate,
|
||||
normalizeTemplate,
|
||||
getSampleTicket,
|
||||
createTranscriptHTML,
|
||||
renderPreview,
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
/** Curated Google Fonts for transcript HTML (keep in sync with dashboard/src/lib/google-fonts.ts). */
|
||||
|
||||
const SYSTEM_FALLBACK =
|
||||
'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
|
||||
|
||||
const GOOGLE_FONTS = [
|
||||
{ id: "Inter", label: "Inter" },
|
||||
{ id: "Roboto", label: "Roboto" },
|
||||
{ id: "Open Sans", label: "Open Sans" },
|
||||
{ id: "Lato", label: "Lato" },
|
||||
{ id: "Montserrat", label: "Montserrat" },
|
||||
{ id: "Poppins", label: "Poppins" },
|
||||
{ id: "Nunito", label: "Nunito" },
|
||||
{ id: "Raleway", label: "Raleway" },
|
||||
{ id: "Work Sans", label: "Work Sans" },
|
||||
{ id: "Source Sans 3", label: "Source Sans 3" },
|
||||
{ id: "DM Sans", label: "DM Sans" },
|
||||
{ id: "Manrope", label: "Manrope" },
|
||||
{ id: "Outfit", label: "Outfit" },
|
||||
{ id: "Rubik", label: "Rubik" },
|
||||
{ id: "Ubuntu", label: "Ubuntu" },
|
||||
{ id: "Fira Sans", label: "Fira Sans" },
|
||||
{ id: "PT Sans", label: "PT Sans" },
|
||||
{ id: "Noto Sans", label: "Noto Sans" },
|
||||
{ id: "Oswald", label: "Oswald" },
|
||||
{ id: "Merriweather", label: "Merriweather" },
|
||||
{ id: "Playfair Display", label: "Playfair Display" },
|
||||
{ id: "Libre Baskerville", label: "Libre Baskerville" },
|
||||
{ id: "JetBrains Mono", label: "JetBrains Mono" },
|
||||
{ id: "Fira Code", label: "Fira Code" },
|
||||
];
|
||||
|
||||
const GOOGLE_FONT_IDS = new Set(GOOGLE_FONTS.map((f) => f.id));
|
||||
|
||||
function normalizeFontFamily(fontFamily) {
|
||||
if (!fontFamily || typeof fontFamily !== "string") return "Inter";
|
||||
const trimmed = fontFamily.trim();
|
||||
if (trimmed === "system") return "system";
|
||||
if (!trimmed.includes(",")) {
|
||||
return GOOGLE_FONT_IDS.has(trimmed) ? trimmed : "Inter";
|
||||
}
|
||||
const match = trimmed.match(/^["']?([^"',]+)["']?/);
|
||||
const first = match?.[1]?.trim();
|
||||
if (first && GOOGLE_FONT_IDS.has(first)) return first;
|
||||
return "Inter";
|
||||
}
|
||||
|
||||
function googleFontsCssUrl(familyIds) {
|
||||
const families = familyIds
|
||||
.map((id) => {
|
||||
const encoded = encodeURIComponent(id).replace(/%20/g, "+");
|
||||
return `family=${encoded}:wght@400;600;700;800`;
|
||||
})
|
||||
.join("&");
|
||||
return `https://fonts.googleapis.com/css2?${families}&display=swap`;
|
||||
}
|
||||
|
||||
function resolveTypography(fontFamily) {
|
||||
const id = normalizeFontFamily(fontFamily);
|
||||
|
||||
if (id === "system") {
|
||||
return {
|
||||
fontId: "system",
|
||||
fontFamilyCss: SYSTEM_FALLBACK,
|
||||
headLinks: "",
|
||||
};
|
||||
}
|
||||
|
||||
const url = googleFontsCssUrl([id]);
|
||||
return {
|
||||
fontId: id,
|
||||
fontFamilyCss: `"${id}", ${SYSTEM_FALLBACK}`,
|
||||
headLinks: `<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="${url}" rel="stylesheet">`,
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
GOOGLE_FONTS,
|
||||
GOOGLE_FONT_IDS,
|
||||
SYSTEM_FALLBACK,
|
||||
normalizeFontFamily,
|
||||
googleFontsCssUrl,
|
||||
resolveTypography,
|
||||
};
|
||||
@@ -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
|
||||
@@ -1,187 +0,0 @@
|
||||
function R3(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 d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function l(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function p0(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Vf={exports:{}},ss={};/**
|
||||
* @license React
|
||||
* react-jsx-runtime.production.js
|
||||
*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var Z1;function T3(){if(Z1)return ss;Z1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(l,s,c){var d=null;if(c!==void 0&&(d=""+c),s.key!==void 0&&(d=""+s.key),"key"in s){c={};for(var m in s)m!=="key"&&(c[m]=s[m])}else c=s;return s=c.ref,{$$typeof:t,type:l,key:d,ref:s!==void 0?s:null,props:c}}return ss.Fragment=r,ss.jsx=a,ss.jsxs=a,ss}var Q1;function A3(){return Q1||(Q1=1,Vf.exports=T3()),Vf.exports}var f=A3(),Gf={exports:{}},Ne={};/**
|
||||
* @license React
|
||||
* react.production.js
|
||||
*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var J1;function _3(){if(J1)return Ne;J1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function C(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,j={};function N(M,O,H){this.props=M,this.context=O,this.refs=j,this.updater=H||E}N.prototype.isReactComponent={},N.prototype.setState=function(M,O){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,O,"setState")},N.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function _(){}_.prototype=N.prototype;function A(M,O,H){this.props=M,this.context=O,this.refs=j,this.updater=H||E}var T=A.prototype=new _;T.constructor=A,w(T,N.prototype),T.isPureReactComponent=!0;var P=Array.isArray;function z(){}var $={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function X(M,O,H){var F=H.ref;return{$$typeof:t,type:M,key:O,ref:F!==void 0?F:null,props:H}}function le(M,O){return X(M.type,O,M.props)}function ue(M){return typeof M=="object"&&M!==null&&M.$$typeof===t}function de(M){var O={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(H){return O[H]})}var fe=/\/+/g;function me(M,O){return typeof M=="object"&&M!==null&&M.key!=null?de(""+M.key):O.toString(36)}function pe(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(z,z):(M.status="pending",M.then(function(O){M.status==="pending"&&(M.status="fulfilled",M.value=O)},function(O){M.status==="pending"&&(M.status="rejected",M.reason=O)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function D(M,O,H,F,Y){var re=typeof M;(re==="undefined"||re==="boolean")&&(M=null);var J=!1;if(M===null)J=!0;else switch(re){case"bigint":case"string":case"number":J=!0;break;case"object":switch(M.$$typeof){case t:case r:J=!0;break;case b:return J=M._init,D(J(M._payload),O,H,F,Y)}}if(J)return Y=Y(M),J=F===""?"."+me(M,0):F,P(Y)?(H="",J!=null&&(H=J.replace(fe,"$&/")+"/"),D(Y,O,H,"",function(Se){return Se})):Y!=null&&(ue(Y)&&(Y=le(Y,H+(Y.key==null||M&&M.key===Y.key?"":(""+Y.key).replace(fe,"$&/")+"/")+J)),O.push(Y)),1;J=0;var ie=F===""?".":F+":";if(P(M))for(var se=0;se<M.length;se++)F=M[se],re=ie+me(F,se),J+=D(F,O,H,re,Y);else if(se=C(M),typeof se=="function")for(M=se.call(M),se=0;!(F=M.next()).done;)F=F.value,re=ie+me(F,se++),J+=D(F,O,H,re,Y);else if(re==="object"){if(typeof M.then=="function")return D(pe(M),O,H,F,Y);throw O=String(M),Error("Objects are not valid as a React child (found: "+(O==="[object Object]"?"object with keys {"+Object.keys(M).join(", ")+"}":O)+"). If you meant to render a collection of children, use an array instead.")}return J}function W(M,O,H){if(M==null)return M;var F=[],Y=0;return D(M,F,"","",function(re){return O.call(H,re,Y++)}),F}function ee(M){if(M._status===-1){var O=M._result;O=O(),O.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=O)}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 O=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(O))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",M);return}console.error(M)},Z={map:W,forEach:function(M,O,H){W(M,function(){O.apply(this,arguments)},H)},count:function(M){var O=0;return W(M,function(){O++}),O},toArray:function(M){return W(M,function(O){return O})||[]},only:function(M){if(!ue(M))throw Error("React.Children.only expected to receive a single React element child.");return M}};return Ne.Activity=v,Ne.Children=Z,Ne.Component=N,Ne.Fragment=a,Ne.Profiler=s,Ne.PureComponent=A,Ne.StrictMode=l,Ne.Suspense=g,Ne.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=$,Ne.__COMPILER_RUNTIME={__proto__:null,c:function(M){return $.H.useMemoCache(M)}},Ne.cache=function(M){return function(){return M.apply(null,arguments)}},Ne.cacheSignal=function(){return null},Ne.cloneElement=function(M,O,H){if(M==null)throw Error("The argument must be a React elemeLine 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 ty;function M3(){return ty||(ty=1,(function(t){function r(D,W){var ee=D.length;D.push(W);e:for(;0<ee;){var ne=ee-1>>>1,Z=D[ne];if(0<s(Z,W))D[ne]=W,D[ee]=Z,ee=ne;else break e}}function a(D){return D.length===0?null:D[0]}function l(D){if(D.length===0)return null;var W=D[0],ee=D.pop();if(ee!==W){D[0]=ee;e:for(var ne=0,Z=D.length,M=Z>>>1;ne<M;){var O=2*(ne+1)-1,H=D[O],F=O+1,Y=D[F];if(0>s(H,ee))F<Z&&0>s(Y,H)?(D[ne]=Y,D[F]=ee,ne=F):(D[ne]=H,D[O]=ee,ne=O);else if(F<Z&&0>s(Y,ee))D[ne]=Y,D[F]=ee,ne=F;else break e}}return W}function s(D,W){var ee=D.sortIndex-W.sortIndex;return ee!==0?ee:D.id-W.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var g=[],h=[],b=1,v=null,x=3,C=!1,E=!1,w=!1,j=!1,N=typeof setTimeout=="function"?setTimeout:null,_=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function T(D){for(var W=a(h);W!==null;){if(W.callback===null)l(h);else if(W.startTime<=D)l(h),W.sortIndex=W.expirationTime,r(g,W);else break;W=a(h)}}function P(D){if(w=!1,T(D),!E)if(a(g)!==null)E=!0,z||(z=!0,de());else{var W=a(h);W!==null&&pe(P,W.startTime-D)}}var z=!1,$=-1,V=5,X=-1;function le(){return j?!0:!(t.unstable_now()-X<V)}function ue(){if(j=!1,z){var D=t.unstable_now();X=D;var W=!0;try{e:{E=!1,w&&(w=!1,_($),$=-1),C=!0;var ee=x;try{t:{for(T(D),v=a(g);v!==null&&!(v.expirationTime>D&&le());){var ne=v.callback;if(typeof ne=="function"){v.callback=null,x=v.priorityLevel;var Z=ne(v.expirationTime<=D);if(D=t.unstable_now(),typeof Z=="function"){v.callback=Z,T(D),W=!0;break t}v===a(g)&&l(g),T(D)}else l(g);v=a(g)}if(v!==null)W=!0;else{var M=a(h);M!==null&&pe(P,M.startTime-D),W=!1}}break e}finally{v=null,x=ee,C=!1}W=void 0}}finally{W?de():z=!1}}}var de;if(typeof A=="function")de=function(){A(ue)};else if(typeof MessageChannel<"u"){var fe=new MessageChannel,me=fe.port2;fe.port1.onmessage=ue,de=function(){me.postMessage(null)}}else de=function(){N(ue,0)};function pe(D,W){$=N(function(){D(t.unstable_now())},W)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(D){D.callback=null},t.unstable_forceFrameRate=function(D){0>D||125<D?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):V=0<D?Math.floor(1e3/D):5},t.unstable_getCurrentPriorityLevel=function(){return x},t.unstable_next=function(D){switch(x){case 1:case 2:case 3:var W=3;break;default:W=x}var ee=x;x=W;try{return D()}finally{x=ee}},t.unstable_requestPaint=function(){j=!0},t.unstable_runWithPriority=function(D,W){switch(D){case 1:case 2:case 3:case 4:case 5:break;default:D=3}var ee=x;x=D;try{return W()}finally{x=ee}},t.unstable_scheduleCallback=function(D,W,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,D){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=ee+Z,D={id:b++,callback:W,priorityLevel:D,startTime:ee,expirationTime:Z,sortIndex:-1},ee>ne?(D.sortIndex=ee,r(h,D),a(g)===null&&D===a(h)&&(w?(_($),$=-1):w=!0,pe(P,ee-ne))):(D.sortIndex=Z,r(g,D),E||C||(E=!0,z||(z=!0,de()))),D},t.unstable_shouldYield=le,t.unstable_wrapCallback=function(D){var W=x;return function(){var ee=x;x=W;try{return D.apply(this,arguments)}finally{x=ee}}}})(Wf)),Wf}var ny;function k3(){return ny||(ny=1,qf.exports=M3()),qf.exports}var Ff={exports:{}},Lt={};/**
|
||||
* @license React
|
||||
* react-dom.production.js
|
||||
*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var ry;function O3(){if(ry)return Lt;ry=1;var t=Yc();function r(g){var h="https://react.dev/errors/"+g;if(1<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 d=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 Lt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=l,Lt.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)},Lt.flushSync=function(g){var h=d.T,b=l.p;try{if(d.T=null,l.p=2,g)return g()}finally{d.T=h,l.p=b,l.d.f()}},Lt.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))},Lt.prefetchDNS=function(g){typeof g=="string"&&l.d.D(g)},Lt.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})}},Lt.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)},Lt.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})}},Lt.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)},Lt.requestFormReset=function(g){l.d.r(g)},Lt.unstable_batchedUpdates=function(g,h){return g(h)},Lt.useFormState=function(g,h,b){return d.H.useFormState(g,h,b)},Lt.useFormStatus=function(){return d.H.useHostTransitionStatus()},Lt.version="19.2.6",Lt}var ay;function h0(){if(ay)return Ff.exports;ay=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(),Ff.exports=O3(),Ff.exports}/**
|
||||
* @license React
|
||||
* react-dom-client.production.js
|
||||
*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var oy;function D3(){if(oy)return is;oy=1;var t=k3(),r=Yc(),a=h0();function l(e){var n="https://react.dev/errors/"+e;if(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 d(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"),P=Symbol.for("react.suspense"),z=Symbol.for("react.suspense_list"),$=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),X=Symbol.for("react.activity"),le=Symbol.for("react.memo_cache_sentinel"),ue=Symbol.iterator;function de(e){return e===null||typeof e!="object"?null:(e=ue&&e[ue]||e["@@iterator"],typeof e=="function"?e:null)}var fe=Symbol.for("react.client.reference");function me(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===fe?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 P:return"Suspense";case z:return"SuspenseList";case X: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 $:return n=e.displayName||null,n!==null?n:me(e.type)||"Memo";case V:n=e._payload,e=e._init;try{return me(e(n))}catch{}}return null}var pe=Array.isArray,D=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,W=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ee={pending:!1,data:null,method:null,action:null},ne=[],Z=-1;function M(e){return{current:e}}function O(e){0>Z||(e.current=ne[Z],ne[Z]=null,Z--)}function H(e,n){Z++,ne[Z]=e.current,e.current=n}var F=M(null),Y=M(null),re=M(null),J=M(null);function ie(e,n){switch(H(re,n),H(Y,e),H(F,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?x1(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)n=x1(n),e=S1(n,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}O(F),H(F,e)}function se(){O(F),O(Y),O(re)}function Se(e){e.memoizedState!==null&&H(J,e);var n=F.current,o=S1(n,e.type);n!==o&&(H(Y,e),H(F,o))}function je(e){Y.current===e&&(O(F),O(Y)),J.current===e&&(O(J),rs._currentValue=ee)}var Ee,nt;function We(e){if(Ee===void 0)try{throw Error()}catch(o){var n=o.stack.trim().match(/\n( *(at )?)/);Ee=n&&n[1]||"",nt=-1<o.stack.indexOf(`
|
||||
at`)?" (<anonymous>)":-1<o.stack.indexOf("@")?"@unknown:0:0":""}return`
|
||||
`+Ee+e+nt}var Ln=!1;function gn(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 te=function(){throw Error()};if(Object.defineProperty(te.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(te,[])}catch(q){var G=q}Reflect.construct(e,[],te)}else{try{te.call()}catch(q){G=q}e.call(te.prototype)}}else{try{throw Error()}catch(q){G=q}(te=e())&&typeof te.catch=="function"&&te.catch(function(){})}}catch(q){if(q&&G&&typeof q.stack=="string")return[q.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(`
|
||||
`),I=R.split(`
|
||||
`);for(p=i=0;i<k.length&&!k[i].includes("DetermineComponentFrameRoot");)i++;for(;p<I.length&&!I[p].includes("DetermineComponentFrameRoot");)p++;if(i===k.length||p===I.length)for(i=k.length-1,p=I.length-1;1<=i&&0<=p&&k[i]!==I[p];)p--;for(;1<=i&&0<=p;i--,p--)if(k[i]!==I[p]){if(i!==1||p!==1)do if(i--,p--,0>p||k[i]!==I[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 en(e,n){switch(e.tag){case 26:case 27:case 5:return We(e.type);case 16:return We("Lazy");case 13:return e.child!==n&&n!==null?We("Suspense Fallback"):We("Suspense");case 19:return We("SuspenseList");case 0:case 15:return gn(e.type,!1);case 11:return gn(e.type.render,!1);case 1:return gn(e.type,!0);case 31:return We("Activity");default:return""}}function ga(e){try{var n="",o=null;do n+=en(e,o),o=e,e=e.return;while(e);return n}catch(i){return`
|
||||
Error generating stack: `+i.message+`
|
||||
`+i.stack}}var ht=Object.prototype.hasOwnProperty,pl=t.unstable_scheduleCallback,hl=t.unstable_cancelCallback,Pt=t.unstable_shouldYield,kr=t.unstable_requestPaint,Bt=t.unstable_now,_u=t.unstable_getCurrentPriorityLevel,va=t.unstable_ImmediatePriority,Zs=t.unstable_UserBlockingPriority,ya=t.unstable_NormalPriority,gl=t.unstable_LowPriority,sr=t.unstable_IdlePriority,Qs=t.log,Or=t.unstable_setDisableYieldValue,ba=null,$t=null;function zn(e){if(typeof Qs=="function"&&Or(e),$t&&typeof $t.setStrictMode=="function")try{$t.setStrictMode(ba,e)}catch{}}var Ot=Math.clz32?Math.clz32:Fn,Mu=Math.log,vl=Math.LN2;function Fn(e){return e>>>=0,e===0?32:31-(Mu(e)/vl|0)|0}var Ja=256,eo=262144,xa=4194304;function Xn(e){var n=e&42;if(n!==0)return n;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function we(e,n,o){var i=e.pendingLanes;if(i===0)return 0;var p=0,y=e.suspendedLanes,S=e.pingedLanes;e=e.warmLanes;var R=i&134217727;return R!==0?(i=R&~y,i!==0?p=Xn(i):(S&=R,S!==0?p=Xn(S):o||(o=R&~e,o!==0&&(p=Xn(o))))):(R=i&~y,R!==0?p=Xn(R):S!==0?p=Xn(S):o||(o=i&~e,o!==0&&(p=Xn(o)))),p===0?0:n!==0&&n!==p&&(n&y)===0&&(y=p&-p,o=n&-n,y>=o||y===32&&(o&4194048)!==0)?n:p}function Qe(e,n){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)===0}function gt(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Dt(){var e=xa;return xa<<=1,(xa&62914560)===0&&(xa=4194304),e}function Dr(e){for(var n=[],o=0;31>o;o++)n.push(e);return n}function tt(e,n){e.pendingLanes|=n,n!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function It(e,n,o,i,p,y){var S=e.pendingLanes;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=o,e.entangledLanes&=o,e.errorRecoveryDisabledLanes&=o,e.shellSuspendCounter=0;var R=e.entanglements,k=e.expirationTimes,I=e.hiddenUpdates;for(o=S&~o;0<o;){var K=31-Ot(o),te=1<<K;R[K]=0,k[K]=-1;var G=I[K];if(G!==null)for(I[K]=null,K=0;K<G.length;K++){var q=G[K];q!==null&&(q.lane&=-536870913)}o&=~te}i!==0&&Sa(e,i,0),y!==0&&p===0&&e.tag!==0&&(e.suspendedLanes|=y&~(S&~n))}function Sa(e,n,o){e.pendingLanes|=n,e.suspendedLanes&=~n;var i=31-Ot(n);e.entangledLanes|=n,e.entanglements[i]=e.entanglements[i]|1073741824|o&261930}function Vt(e,n){var o=e.entangledLanes|=n;for(e=e.entanglements;o;){var i=31-Ot(o),p=1<<i;p&n|e[i]&n&&(e[i]|=n),o&=~p}}function Gt(e,n){var o=n&-n;return o=(o&42)!==0?1:to(o),(o&(e.suspendedLanes|n))!==0?0:o}function to(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 ku(){var e=W.p;return e!==0?e:(e=window.event,e===void 0?32:G1(e.type))}function lh(e,n){var o=W.p;try{return W.p=e,n()}finally{W.p=o}}var Lr=Math.random().toString(36).slice(2),Nt="__reactFiber$"+Lr,Yt="__reactProps$"+Lr,no="__reactContainer$"+Lr,Ou="__reactEvents$"+Lr,gw="__reactListeners$"+Lr,vw="__reactHandles$"+Lr,sh="__reactResources$"+Lr,yl="__reactMarker$"+Lr;function Du(e){delete e[Nt],delete e[Yt],delete e[Ou],delete e[gw],delete e[vw]}function ro(e){var n=e[Nt];if(n)return n;for(var o=e.parentNode;o;){if(n=o[no]||o[Nt]){if(o=n.alternate,n.child!==null||o!==null&&o.child!==null)for(e=T1(e);e!==null;){if(o=e[Nt])return o;e=T1(e)}return n}e=o,o=e.parentNode}return null}function ao(e){if(e=e[Nt]||e[no]){var n=e.tag;if(n===5||n===6||n===13||n===31||n===26||n===27||n===3)return e}return null}function bl(e){var n=e.tag;if(n===5||n===26||n===27||n===6)return e.stateNode;throw Error(l(33))}function oo(e){var n=e[sh];return n||(n=e[sh]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function vt(e){e[yl]=!0}var ih=new Set,ch={};function Ca(e,n){lo(e,n),lo(e+"Capture",n)}function lo(e,n){for(ch[e]=n,e=0;e<n.length;e++)ih.add(n[e])}var yw=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u
Line truncated
|
||||
`).replace(X5,"")}function y1(e,n){return n=v1(n),v1(e)===n}function Ge(e,n,o,i,p,y){switch(o){case"children":typeof i=="string"?n==="body"||n==="textarea"&&i===""||io(e,i):(typeof i=="number"||typeof i=="bigint")&&n!=="body"&&io(e,""+i);break;case"className":ei(e,"class",i);break;case"tabIndex":ei(e,"tabindex",i);break;case"dir":case"role":case"viewBox":case"width":case"height":ei(e,o,i);break;case"style":yh(e,i,y);break;case"data":if(n!=="object"){ei(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=ni(""+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"&&Ge(e,n,"name",p.name,p,null),Ge(e,n,"formEncType",p.formEncType,p,null),Ge(e,n,"formMethod",p.formMethod,p,null),Ge(e,n,"formTarget",p.formTarget,p,null)):(Ge(e,n,"encType",p.encType,p,null),Ge(e,n,"method",p.method,p,null),Ge(e,n,"target",p.target,p,null)));if(i==null||typeof i=="symbol"||typeof i=="boolean"){e.removeAttribute(o);break}i=ni(""+i),e.setAttribute(o,i);break;case"onClick":i!=null&&(e.onclick=cr);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=ni(""+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),Js(e,"popover",i);break;case"xlinkActuate":ir(e,"http://www.w3.org/1999/xlink","xlink:actuate",i);break;case"xlinkArcrole":ir(e,"http://www.w3.org/1999/xlink","xlink:arcrole",i);break;case"xlinkRole":ir(e,"http://www.w3.org/1999/xlink","xlink:role",i);break;case"xlinkShow":ir(e,"http://www.w3.org/1999/xlink","xlink:show",i);break;case"xlinkTitle":ir(e,"http://www.w3.org/1999/xlink","xlink:title",i);break;case"xlinkType":ir(e,"http://www.w3.org/1999/xlink","xlink:type",i);break;case"xmlBase":ir(e,"http://www.w3.org/XML/1998/namespace","xml:base",i);break;case"xmlLang":ir(e,"http://www.w3.org/XML/1998/namespace","xml:lang",i);break;case"xmlSpace":ir(e,"http://www.w3.org/XML/1998/namespace","xml:space",i);break;case"is":Js(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=ww.get(o)||o,Js(e,o,i))}}function Nf(e,n,o,i,p,y){switch(o){case"style":yh(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"?io(e,i):(typeof i=="number"||typeof i=="bigint")&&io(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=cr);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 sy="popstate";function iy(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function P3(t={}){function r(l,s){var h;let c=(h=s.state)==null?void 0:h.masked,{pathname:d,search:m,hash:g}=c||l.location;return vm("",{pathname:d,search:m,hash:g},s.state&&s.state.usr||null,s.state&&s.state.key||"default",c?{pathname:l.location.pathname,search:l.location.search,hash:l.location.hash}:void 0)}function a(l,s){return typeof s=="string"?s:xs(s)}return $3(r,a,null,t)}function et(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function _n(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function B3(){return Math.random().toString(36).substring(2,10)}function cy(t,r){return{usr:t.state,key:t.key,idx:r,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function vm(t,r,a=null,l,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?rl(r):r,state:a,key:r&&r.key||l||B3(),mask:s}}function xs({pathname:t="/",search:r="",hash:a=""}){return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function rl(t){let r={};if(t){let a=t.indexOf("#");a>=0&&(r.hash=t.substring(a),t=t.substring(0,a));let l=t.indexOf("?");l>=0&&(r.search=t.substring(l),t=t.substring(0,l)),t&&(r.pathname=t)}return r}function $3(t,r,a,l={}){let{window:s=document.defaultView,v5Compat:c=!1}=l,d=s.history,m="POP",g=null,h=b();h==null&&(h=0,d.replaceState({...d.state,idx:h},""));function b(){return(d.state||{idx:null}).idx}function v(){m="POP";let j=b(),N=j==null?null:j-h;h=j,g&&g({action:m,location:w.location,delta:N})}function x(j,N){m="PUSH";let _=iy(j)?j:vm(w.location,j,N);h=b()+1;let A=cy(_,h),T=w.createHref(_.mask||_);try{d.pushState(A,"",T)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;s.location.assign(T)}c&&g&&g({action:m,location:w.location,delta:1})}function C(j,N){m="REPLACE";let _=iy(j)?j:vm(w.location,j,N);h=b();let A=cy(_,h),T=w.createHref(_.mask||_);d.replaceState(A,"",T),c&&g&&g({action:m,location:w.location,delta:0})}function E(j){return H3(j)}let w={get action(){return m},get location(){return t(s,d)},listen(j){if(g)throw new Error("A history only accepts one active listener");return s.addEventListener(sy,v),g=j,()=>{s.removeEventListener(sy,v),g=null}},createHref(j){return r(s,j)},createURL:E,encodeLocation(j){let N=E(j);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:x,replace:C,go(j){return d.go(j)}};return w}function H3(t,r=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),et(a,"No window.location.(origin|href) available to create URL");let l=typeof t=="string"?t:xs(t);return l=l.replace(/ $/,"%20"),!r&&l.startsWith("//")&&(l=a+l),new URL(l,a)}function g0(t,r,a="/"){return U3(t,r,a,!1)}function U3(t,r,a,l,s){let c=typeof r=="string"?rl(r):r,d=Rr(c.pathname||"/",a);if(d==null)return null;let m=I3(t),g=null,h=eE(d);for(let b=0;g==null&&b<m.length;++b)g=Q3(m[b],h,l);return g}function I3(t){let r=v0(t);return V3(r),r}function v0(t,r=[],a=[],l="",s=!1){let c=(d,m,g=s,h)=>{let b={relativePath:h===void 0?d.path||"":h,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(l)&&g)return;et(b.relativePath.startsWith(l),`Absolute route path "${b.relativePath}" nested under path "${l}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(l.length)}let v=Vn([l,b.relativePath]),x=a.concat(b);d.children&&d.children.length>0&&(et(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),v0(d.children,r,x,v,g)),!(d.path==null&&!d.index)&&r.push({path:v,score:K3(v,d.index),routesMeta:x})};return t.forEach((d,m)=>{var g;if(d.path===""||!((g=d.path)!=null&&g.includes("?")))c(d,m);else for(let h of y0(d.path))c(d,m,!0,h)}),r}function y0(t){let r=t.split("/");if(r.length===0)return[];let[a,...l]=r,s=a.endsWith("?"),c=a.replace(/\?$/,"");if(l.length===0)return s?[c,""]:[c];let d=y0(l.join("/")),m=[];return m.push(...d.map(g=>g===""?c:[c,g].join("/"))),s&&m.push(...d),m.map(g=>t.startsWith("/")&&g===""?"/":g)}function V3(t){t.sort((r,a)=>r.score!==a.score?a.score-r.score:Z3(r.routesMeta.map(l=>l.childrenIndex),a.routesMeta.map(l=>l.childrenIndex)))}var G3=/^:[\w-]+$/,Y3=3,q3=2,W3=1,F3=10,X3=-2,uy=t=>t==="*";function K3(t,r){let a=t.split("/"),l=a.length;return a.some(uy)&&(l+=X3),r&&(l+=q3),a.filter(s=>!uy(s)).reduce((s,c)=>s+(G3.test(c)?Y3:c===""?W3:F3),l)}function Z3(t,r){return t.length===r.length&&t.slice(0,-1).every((l,s)=>l===r[s])?t[t.length-1]-r[r.length-1]:0}function Q3(t,r,a=!1){let{routesMeta:l}=t,s={},c="/",d=[];for(let m=0;m<l.length;++m){let g=l[m],h=m===l.length-1,b=c==="/"?r:r.slice(c.length)||"/",v=Tc({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"?rl(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})):g0(t,{pathname:C});_n(h||E!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),_n(E==null||E[E.length-1].route.element!==void 0||E[E.length-1].route.Component!==void 0||E[E.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let w=RE(E&&E.map(N=>Object.assign({},N,{params:Object.assign({},d,N.params),pathname:Vn([g,l.encodeLocation?l.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?g:Vn([g,l.encodeLocation?l.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),s,a);return r&&w?u.createElement(Os.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},w):w}function wE(){let t=kE(),r=iE(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,l="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:l},c={padding:"2px 4px",backgroundColor:l},d=null;return console.error("Error handled by React Router default ErrorBoundary:",t),d=u.createElement(u.Fragment,null,u.createElement("p",null,"💿 Hey developer 👋"),u.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",u.createElement("code",{style:c},"ErrorBoundary")," or"," ",u.createElement("code",{style:c},"errorElement")," prop on your route.")),u.createElement(u.Fragment,null,u.createElement("h2",null,"Unexpected Application Error!"),u.createElement("h3",{style:{fontStyle:"italic"}},r),a?u.createElement("pre",{style:s},a):null,d)}var EE=u.createElement(wE,null),A0=class extends u.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){this.props.onError?this.props.onError(t,r):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=vE(t.digest);a&&(t=a)}let r=t!==void 0?u.createElement(qn.Provider,{value:this.props.routeContext},u.createElement(ep.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?u.createElement(NE,{error:t},r):r}};A0.contextType=w0;var Kf=new WeakMap;function NE({children:t,error:r}){let{basename:a}=u.useContext(fn);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let l=gE(r.digest);if(l){let s=Kf.get(r);if(s)throw s;let c=S0(l.location,a);if(x0&&!Kf.get(r))if(c.isExternal||l.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:l.replace}));throw Kf.set(r,d),d}return u.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return t}function jE({routeContext:t,match:r,children:a}){let l=u.useContext(al);return l&&l.static&&l.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=r.route.id),u.createElement(qn.Provider,{value:t},a)}function RE(t,r=[],a){let l=a==null?void 0:a.state;if(t==null){if(!l)return null;if(l.errors)t=l.matches;else if(r.length===0&&!l.initialized&&l.matches.length>0)t=l.matches;else return null}let s=t,c=l==null?void 0:l.errors;if(c!=null){let b=s.findIndex(v=>v.route.id&&(c==null?void 0:c[v.route.id])!==void 0);et(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),s=s.slice(0,Math.min(s.length,b+1))}let d=!1,m=-1;if(a&&l){d=l.renderFallback;for(let b=0;b<s.length;b++){let v=s[b];if((v.route.HyLine truncated
|
||||
.`.concat(a9,` {
|
||||
overflow: hidden `).concat(l,`;
|
||||
padding-right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
body[`).concat(Ko,`] {
|
||||
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(d,`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(jc,` {
|
||||
right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(Rc,` {
|
||||
margin-right: `).concat(m,"px ").concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(jc," .").concat(jc,` {
|
||||
right: 0 `).concat(l,`;
|
||||
}
|
||||
|
||||
.`).concat(Rc," .").concat(Rc,` {
|
||||
margin-right: 0 `).concat(l,`;
|
||||
}
|
||||
|
||||
body[`).concat(Ko,`] {
|
||||
`).concat(o9,": ").concat(m,`px;
|
||||
}
|
||||
`)},Gy=function(){var t=parseInt(document.body.getAttribute(Ko)||"0",10);return isFinite(t)?t:0},E9=function(){u.useEffect(function(){return document.body.setAttribute(Ko,(Gy()+1).toString()),function(){var t=Gy()-1;t<=0?document.body.removeAttribute(Ko):document.body.setAttribute(Ko,t.toString())}},[])},N9=function(t){var r=t.noRelative,a=t.noImportant,l=t.gapMode,s=l===void 0?"margin":l;E9();var c=u.useMemo(function(){return S9(s)},[s]);return u.createElement(C9,{styles:w9(c,!r,s,a?"":"!important")})},Tm=!1;if(typeof window<"u")try{var yc=Object.defineProperty({},"passive",{get:function(){return Tm=!0,!0}});window.addEventListener("test",yc,yc),window.removeEventListener("test",yc,yc)}catch{Tm=!1}var Io=Tm?{passive:!1}:!1,j9=function(t){return t.tagName==="TEXTAREA"},tx=function(t,r){if(!(t instanceof Element))return!1;var a=window.getComputedStyle(t);return a[r]!=="hidden"&&!(a.overflowY===a.overflowX&&!j9(t)&&a[r]==="visible")},R9=function(t){return tx(t,"overflowY")},T9=function(t){return tx(t,"overflowX")},Yy=function(t,r){var a=r.ownerDocument,l=r;do{typeof ShadowRoot<"u"&&l instanceof ShadowRoot&&(l=l.host);var s=nx(t,l);if(s){var c=rx(t,l),d=c[1],m=c[2];if(d>m)return!0}l=l.parentNode}while(l&&l!==a.body);return!1},A9=function(t){var r=t.scrollTop,a=t.scrollHeight,l=t.clientHeight;return[r,a,l]},_9=function(t){var r=t.scrollLeft,a=t.scrollWidth,l=t.clientWidth;return[r,a,l]},nx=function(t,r){return t==="v"?R9(r):T9(r)},rx=function(t,r){return t==="v"?A9(r):_9(r)},M9=function(t,r){return t==="h"&&r==="rtl"?-1:1},k9=function(t,r,a,l,s){var c=M9(t,window.getComputedStyle(r).direction),d=c*l,m=a.target,g=r.contains(m),h=!1,b=d>0,v=0,x=0;do{if(!m)break;var C=rx(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 _=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},bc=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},qy=function(t){return[t.deltaX,t.deltaY]},Wy=function(t){return t&&"current"in t?t.current:t},O9=function(t,r){return t[0]===r[0]&&t[1]===r[1]},D9=function(t){return`
|
||||
.block-interactivity-`.concat(t,` {pointer-events: none;}
|
||||
.allow-interactivity-`).concat(t,` {pointer-events: all;}
|
||||
`)},L9=0,Vo=[];function z9(t){var r=u.useRef([]),a=u.useRef([0,0]),l=u.useRef(),s=u.useState(L9++)[0],c=u.useState(ex)[0],d=u.useRef(t);u.useEffect(function(){d.current=t},[t]),u.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(s));var w=r9([t.lockRef.current],(t.shards||[]).map(Wy),!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=u.useCallback(function(w,j){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!d.current.allowPinchZoom;var N=bc(w),_=a.current,A="deltaX"in w?w.deltaX:_[0]-N[0],T="deltaY"in w?w.deltaY:_[1]-N[1],P,z=w.target,$=Math.abs(A)>Math.abs(T)?"h":"v";if("touches"in w&&$==="h"&&z.type==="range")return!1;var V=window.getSelection(),X=V&&V.anchorNode,le=X?X===z||X.contains(z):!1;if(le)return!1;var ue=Yy($,z);if(!ue)return!0;if(ue?P=$:(P=$==="v"?"h":"v",ue=Yy($,z)),!ue)return!1;if(!l.current&&"changedTouches"in w&&(A||T)&&(l.current=P),!P)return!0;var de=l.current||P;return k9(de,j,w,de==="h"?A:T)},[]),g=u.useCallback(function(w){var j=w;if(!(!Vo.length||Vo[Vo.length-1]!==c)){var N="deltaY"in j?qy(j):bc(j),_=r.current.filter(function(P){return P.name===j.type&&(P.target===j.target||j.target===P.shadowParent)&&O9(P.delta,N)})[0];if(_&&_.should){j.cancelable&&j.preventDefault();return}if(!_){var A=(d.current.shards||[]).map(Wy).filter(Boolean).filter(function(P){return P.contains(j.target)}),T=A.length>0?m(j,A[0]):!d.current.noIsolation;T&&j.cancelable&&j.preventDefault()}}},[]),h=u.useCallback(function(w,j,N,_){var A={name:w,delta:j,target:N,should:_,shadowParent:P9(N)};r.current.push(A),setTimeout(function(){r.current=r.current.filter(function(T){return T!==A})},1)},[]),b=u.useCallback(function(w){a.current=bc(w),l.current=void 0},[]),v=u.useCallback(function(w){h(w.type,qy(w),w.target,m(w,t.lockRef.current))},[]),x=u.useCallback(function(w){h(w.type,bc(w),w.target,m(w,t.lockRef.current))},[]);u.useEffect(function(){return Vo.push(c),t.setCallbacks({onScrollCapture:v,onWheelCapture:v,onTouchMoveCapture:x}),document.addEventListener("wheel",g,Io),document.addEventListener("touchmove",g,Io),document.addEventListener("touchstart",b,Io),function(){Vo=Vo.filter(function(w){return w!==c}),document.removeEventListener("wheel",g,Io),document.removeEventListener("touchmove",g,Io),document.removeEventListener("touchstart",b,Io)}},[]);var C=t.removeScrollBar,E=t.inert;return u.createElement(u.Fragment,null,E?u.createElement(c,{styles:D9(s)}):null,C?u.createElement(N9,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function P9(t){for(var r=null;t!==null;)t instanceof ShadowRoot&&(r=t.host,t=t.host),t=t.parentNode;return r}const B9=f9(Jb,z9);var Us=u.forwardRef(function(t,r){return u.createElement(lu,nr({},t,{ref:r,sideCar:B9}))});Us.classNames=lu.classNames;var Am=["Enter"," "],$9=["ArrowDown","PageUp","Home"],ax=["ArrowUp","PageDown","End"],H9=[...$9,...ax],U9={ltr:[...Am,"ArrowRight"],rtl:[...Am,"ArrowLeft"]},I9={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Is="Menu",[Es,V9,G9]=Sp(Is),[Ka,ox]=o8(Is,[G9,da,au]),su=da(),lx=au(),[Y9,Za]=Ka(Is),[q9,Vs]=Ka(Is),sx=t=>{const{__scopeMenu:r,open:a=!1,children:l,dir:s,onOpenChange:c,modal:d=!0}=t,m=su(r),[g,h]=u.useState(null),b=u.useRef(!1),v=bt(c),x=Ls(s);return u.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})}},[]),f.jsx(tu,{...m,children:f.jsx(Y9,{scope:r,open:a,onOpenChange:v,content:g,onContentChange:h,children:f.jsx(q9,{scope:r,onClose:u.useCallback(()=>v(!1),[v]),isUsingKeyboardRef:b,dir:x,modal:d,children:l})})})};sx.displayName=Is;var W9="MenuAnchor",_p=u.forwardRef((t,r)=>{const{__scopeMenu:a,...l}=t,s=su(a);return f.jsx(Bs,{...s,...l,ref:r})});_p.displayName=W9;var Mp="MenuPortal",[F9,ix]=Ka(Mp,{forceMount:void 0}),cx=t=>{const{__scopeMenu:r,forceMount:a,children:l,container:s}=t,c=Za(Mp,r);return f.jsx(F9,{scope:r,forceMount:a,children:f.jsx(kt,{present:a||c.open,children:f.jsx(fl,{asChild:!0,container:s,children:l})})})};cx.displayName=Mp;var An="MenuContent",[X9,kp]=Ka(An),ux=u.forwardRef((t,r)=>{const a=ix(An,t.__scopeMenu),{forceMount:l=a.forceMount,...s}=t,c=Za(An,t.__scopeMenu),d=Vs(An,t.__scopeMenu);return f.jsx(Es.Provider,{scope:t.__scopeMenu,children:f.jsx(kt,{present:l||c.open,children:f.jsx(Es.Slot,{scope:t.__scopeMenu,children:d.modal?f.jsx(K9,{...s,ref:r}):f.jsx(Z9,{...s,ref:r})})})})}),K9=u.forwardRef((t,r)=>{const a=Za(An,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 Zx=(...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 FR=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 XR=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 Xy=t=>{const r=XR(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 um={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 KR=t=>{for(const r in t)if(r.startsWith("aria-")||r==="role"||r==="title")return!0;return!1},ZR=u.createContext({}),QR=()=>u.useContext(ZR),JR=u.forwardRef(({color:t,size:r,strokeWidth:a,absoluteStrokeWidth:l,className:s="",children:c,iconNode:d,...m},g)=>{const{size:h=24,strokeWidth:b=2,absoluteStrokeWidth:v=!1,color:x="currentColor",className:C=""}=QR()??{},E=l??v?Number(a??b)*24/Number(r??h):a??b;return u.createElement("svg",{ref:g,...um,width:r??h??um.width,height:r??h??um.height,stroke:t??x,strokeWidth:E,className:Zx("lucide",C,s),...!c&&!KR(m)&&{"aria-hidden":"true"},...m},[...d.map(([w,j])=>u.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 fa=(t,r)=>{const a=u.forwardRef(({className:l,...s},c)=>u.createElement(JR,{ref:c,iconNode:r,className:Zx(`lucide-${FR(Xy(t))}`,`lucide-${t}`,l),...s}));return a.displayName=Xy(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 e7=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Qx=fa("check",e7);/**
|
||||
* @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 t7=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Jx=fa("chevron-down",t7);/**
|
||||
* @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 n7=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],r7=fa("chevron-right",n7);/**
|
||||
* @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 a7=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],o7=fa("chevron-up",a7);/**
|
||||
* @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 l7=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],s7=fa("circle",l7);/**
|
||||
* @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 i7=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],c7=fa("panel-left",i7);/**
|
||||
* @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 u7=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],d7=fa("search",u7);/**
|
||||
* @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 f7=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],e2=fa("x",f7),Pp=YR,Bp=qR,m7=u.forwardRef(({className:t,inset:r,children:a,...l},s)=>f.jsxs(Xx,{ref:s,className:oe("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,f.jsx(r7,{className:"ml-auto"})]}));m7.displayName=Xx.displayName;const p7=u.forwardRef(({className:t,...r},a)=>f.jsx(Kx,{ref:a,className:oe("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}));p7.displayName=Kx.displayName;const uu=u.forwardRef(({className:t,sideOffset:r=4,...a},l)=>f.jsx(WR,{children:f.jsx(Ix,{ref:l,sideOffset:r,className:oe("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})}));uu.displayName=Ix.displayName;const js=u.forwardRef(({className:t,inset:r,...a},l)=>f.jsx(Gx,{ref:l,className:oe("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}));js.displayName=Gx.displayName;const h7=u.forwardRef(({className:t,children:r,checked:a,...l},s)=>f.jsxs(Yx,{ref:s,className:oe("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:[f.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:f.jsx(Wx,{children:f.jsx(Qx,{className:"h-4 w-4"})})}),r]}));h7.displayName=Yx.displayName;const g7=u.forwardRef(({className:t,children:r,...a},l)=>f.jsxs(qx,{ref:l,className:oe("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:[f.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:f.jsx(Wx,{children:f.jsx(s7,{className:"h-2 w-2 fill-current"})})}),r]}));g7.displayName=qx.displayName;const $p=u.forwardRef(({className:t,inset:r,...a},l)=>f.jsx(Vx,{ref:l,className:oe("px-2 py-1.5 text-sm font-semibold",r&&"pl-8",t),...a}));$p.displayName=Vx.displayName;const $c=u.forwardRef(({className:t,...r},a)=>f.jsx(Fx,{ref:a,className:oe("-mx-1 my-1 h-px bg-muted",t),...r}));$c.displayName=Fx.displayName;const dm=768;function v7(){const[t,r]=u.useState(void 0);return u.useEffect(()=>{const a=window.matchMedia(`(max-width: ${dm-1}px)`),l=()=>{r(window.innerWidth<dm)};return a.addEventListener("change",l),r(window.innerWidth<dm),()=>a.removeEventListener("change",l)},[]),!!t}const zt=u.forwardRef(({className:t,type:r,...a},l)=>f.jsx("input",{type:r,className:oe("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}));zt.displayName="Input";var y7=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],pn=y7.reduce((t,r)=>{const a=mb(`Primitive.${r}`),l=u.forwardRef((s,c)=>{const{asChild:d,...m}=s,g=d?a:r;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),f.jsx(g,{...m,ref:c})});return l.displayName=`Primitive.${r}`,{...t,[r]:l}},{}),b7="Separator",Ky="horizontal",x7=["horizontal","vertical"],t2=u.forwardRef((t,r)=>{const{decorative:a,orientation:l=Ky,...s}=t,c=S7(l)?l:Ky,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 u.useEffect(()=>{t&&(document.getElementById(t)||console.error(a))},[a,t]),null},$7="DialogDescriptionWarning",H7=({contentRef:t,descriptionId:r})=>{const l=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${b2($7).contentName}}.`;return u.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},Vp=l2,Gp=c2,Ys=u2,qs=d2,fu=m2,mu=h2,x2=v2;const U7=Vp,I7=Gp,S2=u.forwardRef(({className:t,...r},a)=>f.jsx(Ys,{className:oe("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}));S2.displayName=Ys.displayName;const V7=il("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"}}),C2=u.forwardRef(({side:t="right",className:r,children:a,...l},s)=>f.jsxs(I7,{children:[f.jsx(S2,{}),f.jsxs(qs,{ref:s,className:oe(V7({side:t}),r),...l,children:[f.jsxs(x2,{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:[f.jsx(e2,{className:"h-4 w-4"}),f.jsx("span",{className:"sr-only",children:"Close"})]}),a]})]}));C2.displayName=qs.displayName;const w2=({className:t,...r})=>f.jsx("div",{className:oe("flex flex-col space-y-2 text-center sm:text-left",t),...r});w2.displayName="SheetHeader";const E2=u.forwardRef(({className:t,...r},a)=>f.jsx(fu,{ref:a,className:oe("text-lg font-semibold text-foreground",t),...r}));E2.displayName=fu.displayName;const N2=u.forwardRef(({className:t,...r},a)=>f.jsx(mu,{ref:a,className:oe("text-sm text-muted-foreground",t),...r}));N2.displayName=mu.displayName;function dt({className:t,...r}){return f.jsx("div",{className:oe("animate-pulse rounded-md bg-primary/10",t),...r})}function G7(t,r=[]){let a=[];function l(c,d){const m=u.createContext(d),g=a.length;a=[...a,d];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=u.useMemo(()=>E,Object.values(E));return f.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=u.useContext(C);if(E)return E;if(d!==void 0)return d;throw new Error(`\`${v}\` must be used within \`${c}\``)}return[h,b]}const s=()=>{const c=a.map(d=>u.createContext(d));return function(m){const g=(m==null?void 0:m[t])||c;return u.useMemo(()=>({[`__scope${t}`]:{...m,[t]:g}}),[m,g])}};return s.scopeName=t,[l,Y7(s,...r)]}function Y7(...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 d=l.reduce((m,{useScope:g,scopeName:h})=>{const v=g(c)[`__scope${h}`];return{...m,...v}},{});return u.useMemo(()=>({[`__scope${r.scopeName}`]:d}),[d])}};return a.scopeName=r.scopeName,a}function q7(t){const r=W7(t),a=u.forwardRef((l,s)=>{const{children:c,...d}=l,m=u.Children.toArray(c),g=m.find(X7);if(g){const h=g.props.children,b=m.map(v=>v===g?u.Children.count(h)>1?u.Children.only(null):u.isValidElement(h)?h.props.children:null:v);return f.jsx(r,{...d,ref:s,children:u.isValidElement(h)?u.cloneElement(h,void 0,b):null})}return f.jsx(r,{...d,ref:s,children:c})});return a.displayName=`${t}.Slot`,a}function W7(t){const r=u.forwardRef((a,l)=>{const{children:s,...c}=a;if(u.isValidElement(s)){const d=Z7(s),m=K7(c,s.props);return s.type!==u.Fragment&&(m.ref=l?Xe(l,d):d),u.cloneElement(s,m)}return u.Children.count(s)>1?u.Children.only(null):null});return r.displayName=`${t}.SlotClone`,r}var j2=Symbol("radix.slottable");function F7(t){const r=({children:a})=>f.jsx(f.Fragment,{children:a});return r.displayName=`${t}.Slottable`,r.__radixId=j2,r}function X7(t){return u.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===j2}function K7(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 t0;function QA(){if(t0)return gm;t0=1;var t=Yc();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,d=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]),d(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 gm.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:b,gm}var n0;function JA(){return n0||(n0=1,hm.exports=QA()),hm.exports}var e_=JA();function t_(){return e_.useSyncExternalStore(n_,()=>!0,()=>!1)}function n_(){return()=>{}}var Fp="Avatar",[r_]=KA(Fp),[a_,pS]=r_(Fp),hS=u.forwardRef((t,r)=>{const{__scopeAvatar:a,...l}=t,[s,c]=u.useState("idle");return f.jsx(a_,{scope:a,imageLoadingStatus:s,onImageLoadingStatusChange:c,children:f.jsx(pn.span,{...l,ref:r})})});hS.displayName=Fp;var gS="AvatarImage",vS=u.forwardRef((t,r)=>{const{__scopeAvatar:a,src:l,onLoadingStatusChange:s=()=>{},...c}=t,d=pS(gS,a),m=o_(l,c),g=bt(h=>{s(h),d.onImageLoadingStatusChange(h)});return ft(()=>{m!=="idle"&&g(m)},[m,g]),m==="loaded"?f.jsx(pn.img,{...c,ref:r,src:l}):null});vS.displayName=gS;var yS="AvatarFallback",bS=u.forwardRef((t,r)=>{const{__scopeAvatar:a,delayMs:l,...s}=t,c=pS(yS,a),[d,m]=u.useState(l===void 0);return u.useEffect(()=>{if(l!==void 0){const g=window.setTimeout(()=>m(!0),l);return()=>window.clearTimeout(g)}},[l]),d&&c.imageLoadingStatus!=="loaded"?f.jsx(pn.span,{...s,ref:r}):null});bS.displayName=yS;function r0(t,r){return t?r?(t.src!==r&&(t.src=r),t.complete&&t.naturalWidth>0?"loaded":"loading"):"error":"idle"}function o_(t,{referrerPolicy:r,crossOrigin:a}){const l=t_(),s=u.useRef(null),c=l?(s.current||(s.current=new window.Image),s.current):null,[d,m]=u.useState(()=>r0(c,t));return ft(()=>{m(r0(c,t))},[c,t]),ft(()=>{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]),d}var xS=hS,SS=vS,CS=bS;const Ts=u.forwardRef(({className:t,...r},a)=>f.jsx(xS,{ref:a,className:oe("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",t),...r}));Ts.displayName=xS.displayName;const As=u.forwardRef(({className:t,...r},a)=>f.jsx(SS,{ref:a,className:oe("aspect-square h-full w-full",t),...r}));As.displayName=SS.displayName;const _s=u.forwardRef(({className:t,...r},a)=>f.jsx(CS,{ref:a,className:oe("flex h-full w-full items-center justify-center rounded-full bg-muted",t),...r}));_s.displayName=CS.displayName;const wS=u.createContext(null);function l_({children:t}){const[r,a]=u.useState([]),[l,s]=u.useState(0),[c,d]=u.useState(!0),m=u.useCallback(async()=>{try{const v=await qe.getNotifications();v.data&&(a(v.data.items),s(v.data.unreadCount))}catch{}finally{d(!1)}},[]),g=u.useCallback(async()=>{var v;try{const x=await qe.markNotificationsRead("all");a(C=>C.map(E=>({...E,read:!0}))),s(((v=x.data)==null?void 0:v.unreadCount)??0)}catch{}},[]),h=u.useCallback(async v=>{var x;try{const C=await qe.dismissNotification(v);a(E=>E.filter(w=>w.id!==v)),s(((x=C.data)==null?void 0:x.unreadCount)??0)}catch{}},[]);u.useEffect(()=>{m();const v=setInterval(m,3e4);return()=>clearInterval(v)},[m]);const b=u.useMemo(()=>({items:r,unreadCount:l,loading:c,refresh:m,markAllRead:g,dismiss:h}),[r,l,c,m,g,h]);return f.jsx(wS.Provider,{value:b,children:t})}function s_(){const t=u.useContext(wS);if(!t)throw new Error("useNotifications must be used within NotificationsProvider");return t}const i_=il("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 vs({className:t,variant:r,...a}){return f.jsx("div",{className:oe(i_({variant:r}),t),...a})}function c_(t){const r=u_(t),a=u.forwardRef((l,s)=>{const{children:c,...d}=l,m=u.Children.toArray(c),g=m.find(f_);if(g){const h=g.props.children,b=m.map(v=>v===g?u.Children.count(h)>1?u.Children.only(null):u.isValidElement(h)?h.props.children:null:v);return f.jsx(r,{...d,ref:s,children:u.isValidElement(h)?u.cloneElement(h,void 0,b):null})}return f.jsx(r,{...d,ref:s,children:c})});return a.displayName=`${t}.SLine truncated
|
||||
@@ -0,0 +1,187 @@
|
||||
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
|
||||
@@ -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-CkVwGOES.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-2nPMgH3H.css">
|
||||
<script type="module" crossorigin src="/assets/index-DPWGusls.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DxUg_xTw.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>␍
|
||||
|
||||
Reference in new issue
Block a user