@sugar-crash-studios/vibe-forge 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/clear-attention.md +63 -0
- package/.claude/commands/compact-context.md +52 -0
- package/.claude/commands/configure-vcs.md +102 -0
- package/.claude/commands/forge.md +171 -0
- package/.claude/commands/need-help.md +77 -0
- package/.claude/commands/update-status.md +64 -0
- package/.claude/commands/worker-loop.md +106 -0
- package/.claude/hooks/worker-loop.js +198 -0
- package/.claude/scripts/setup-worker-loop.sh +45 -0
- package/.claude/settings.local.json +46 -0
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/agents/aegis/personality.md +294 -0
- package/agents/anvil/personality.md +276 -0
- package/agents/architect/personality.md +258 -0
- package/agents/crucible/personality.md +360 -0
- package/agents/ember/personality.md +291 -0
- package/agents/forge-master/capabilities.md +144 -0
- package/agents/forge-master/context-template.md +128 -0
- package/agents/forge-master/personality.md +138 -0
- package/agents/furnace/personality.md +340 -0
- package/agents/herald/personality.md +247 -0
- package/agents/loki/personality.md +108 -0
- package/agents/oracle/personality.md +283 -0
- package/agents/pixel/personality.md +113 -0
- package/agents/planning-hub/personality.md +320 -0
- package/agents/scribe/personality.md +251 -0
- package/agents/temper/personality.md +218 -0
- package/bin/cli.js +375 -0
- package/bin/dashboard/api/agents.js +333 -0
- package/bin/dashboard/api/dispatch.js +483 -0
- package/bin/dashboard/api/tasks.js +416 -0
- package/bin/dashboard/frontend/index.html +13 -0
- package/bin/dashboard/frontend/package.json +16 -0
- package/bin/dashboard/frontend/src/App.svelte +222 -0
- package/bin/dashboard/frontend/src/app.css +1777 -0
- package/bin/dashboard/frontend/src/lib/components/AgentCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/AgentsPanel.svelte +57 -0
- package/bin/dashboard/frontend/src/lib/components/DispatchModal.svelte +180 -0
- package/bin/dashboard/frontend/src/lib/components/Footer.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/Header.svelte +84 -0
- package/bin/dashboard/frontend/src/lib/components/IssueCard.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/IssuesPanel.svelte +73 -0
- package/bin/dashboard/frontend/src/lib/components/KeyboardShortcutsModal.svelte +108 -0
- package/bin/dashboard/frontend/src/lib/components/MobileTabs.svelte +52 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationsPanel.svelte +44 -0
- package/bin/dashboard/frontend/src/lib/components/TaskCard.svelte +63 -0
- package/bin/dashboard/frontend/src/lib/components/TasksPanel.svelte +82 -0
- package/bin/dashboard/frontend/src/lib/components/Toast.svelte +45 -0
- package/bin/dashboard/frontend/src/lib/stores/agents.js +34 -0
- package/bin/dashboard/frontend/src/lib/stores/issues.js +54 -0
- package/bin/dashboard/frontend/src/lib/stores/notifications.js +48 -0
- package/bin/dashboard/frontend/src/lib/stores/tasks.js +63 -0
- package/bin/dashboard/frontend/src/lib/stores/theme.js +33 -0
- package/bin/dashboard/frontend/src/lib/stores/toast.js +35 -0
- package/bin/dashboard/frontend/src/lib/stores/ui.js +25 -0
- package/bin/dashboard/frontend/src/lib/stores/voice.js +275 -0
- package/bin/dashboard/frontend/src/lib/stores/websocket.js +295 -0
- package/bin/dashboard/frontend/src/lib/utils/api.js +101 -0
- package/bin/dashboard/frontend/src/lib/utils/formatters.js +54 -0
- package/bin/dashboard/frontend/src/main.js +9 -0
- package/bin/dashboard/frontend/svelte.config.js +5 -0
- package/bin/dashboard/frontend/vite.config.js +20 -0
- package/bin/dashboard/public/assets/index-DnfVj9Ce.css +1 -0
- package/bin/dashboard/public/assets/index-Ze5h0kXQ.js +2 -0
- package/bin/dashboard/public/index.html +14 -0
- package/bin/dashboard/server.js +566 -0
- package/bin/forge-daemon.sh +463 -0
- package/bin/forge-setup.sh +645 -0
- package/bin/forge-spawn.sh +164 -0
- package/bin/forge.cmd +83 -0
- package/bin/forge.sh +533 -0
- package/bin/lib/agents.sh +177 -0
- package/bin/lib/colors.sh +44 -0
- package/bin/lib/config.sh +347 -0
- package/bin/lib/constants.sh +241 -0
- package/bin/lib/daemon/display.sh +128 -0
- package/bin/lib/daemon/notifications.sh +263 -0
- package/bin/lib/daemon/routing.sh +77 -0
- package/bin/lib/daemon/state.sh +115 -0
- package/bin/lib/daemon/sync.sh +95 -0
- package/bin/lib/database.sh +310 -0
- package/bin/lib/heimdall-setup.js +113 -0
- package/bin/lib/heimdall.js +265 -0
- package/bin/lib/json.sh +264 -0
- package/bin/lib/terminal.js +451 -0
- package/bin/lib/util.sh +126 -0
- package/bin/lib/vcs.js +349 -0
- package/config/agent-manifest.yaml +203 -0
- package/config/agents.json +168 -0
- package/config/task-template.md +159 -0
- package/config/task-types.yaml +106 -0
- package/context/agent-status/aegis.json +7 -0
- package/context/agent-status/anvil.json +7 -0
- package/context/agent-status/architect.json +7 -0
- package/context/agent-status/crucible.json +7 -0
- package/context/agent-status/ember.json +7 -0
- package/context/agent-status/furnace.json +7 -0
- package/context/agent-status/loki.json +7 -0
- package/context/agent-status/oracle.json +7 -0
- package/context/agent-status/pixel.json +7 -0
- package/context/agent-status/planning-hub.json +7 -0
- package/context/agent-status/scribe.json +7 -0
- package/context/agent-status/temper.json +7 -0
- package/context/feature-brainstorm.md +426 -0
- package/context/forge-state.yaml +19 -0
- package/context/modern-conventions.md +129 -0
- package/context/project-context-template.md +122 -0
- package/context/project-context.md +122 -0
- package/docs/TODO.md +150 -0
- package/docs/agents.md +409 -0
- package/docs/architecture/decisions/ADR-001-daemon-modularization.md +122 -0
- package/docs/architecture/vibe-lab-integration.md +684 -0
- package/docs/architecture.md +194 -0
- package/docs/bmad-gap-analysis-2026-03-31.md +444 -0
- package/docs/cleanup-workflow.md +329 -0
- package/docs/commands.md +451 -0
- package/docs/dashboard-mockup.html +989 -0
- package/docs/getting-started.md +261 -0
- package/docs/integration/forge-ownership-policy.md +112 -0
- package/docs/npm-publishing.md +132 -0
- package/docs/roadmap-2026.md +519 -0
- package/docs/security.md +144 -0
- package/docs/wireframes/dashboard-mvp.md +1164 -0
- package/docs/workflows/README.md +32 -0
- package/docs/workflows/azure-devops.md +108 -0
- package/docs/workflows/bitbucket.md +104 -0
- package/docs/workflows/git-only.md +130 -0
- package/docs/workflows/gitea.md +168 -0
- package/docs/workflows/github.md +103 -0
- package/docs/workflows/gitlab.md +105 -0
- package/docs/workflows.md +454 -0
- package/package.json +73 -0
- package/tasks/completed/ARCH-001-duplicate-agent-config.md +121 -0
- package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +88 -0
- package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +77 -0
- package/tasks/completed/ARCH-009-test-organization.md +78 -0
- package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +94 -0
- package/tasks/completed/ARCH-012-tmp-files-in-root.md +71 -0
- package/tasks/completed/ARCH-013-exit-code-constants.md +65 -0
- package/tasks/completed/ARCH-014-sed-incompatibility.md +96 -0
- package/tasks/completed/ARCH-015-docs-todo-tracking.md +83 -0
- package/tasks/completed/BUG-dash-001-tasks-filter-error.md +31 -0
- package/tasks/completed/BUG-dash-002-agents-unknown.md +41 -0
- package/tasks/completed/CLEAN-001.md +38 -0
- package/tasks/completed/CLEAN-002.md +43 -0
- package/tasks/completed/CLEAN-003.md +47 -0
- package/tasks/completed/CLEAN-004.md +56 -0
- package/tasks/completed/CLEAN-005.md +75 -0
- package/tasks/completed/CLEAN-006.md +47 -0
- package/tasks/completed/CLEAN-007.md +34 -0
- package/tasks/completed/CLEAN-008.md +49 -0
- package/tasks/completed/CLEAN-012.md +58 -0
- package/tasks/completed/CLEAN-013.md +45 -0
- package/tasks/completed/FEATURE-001a-dashboard-wireframes.md +162 -0
- package/tasks/completed/IMPL-007a-daemon-notifications-module.md +82 -0
- package/tasks/completed/IMPL-007b-daemon-sync-module.md +71 -0
- package/tasks/completed/IMPL-007c-daemon-state-module.md +80 -0
- package/tasks/completed/IMPL-007d-daemon-routing-module.md +77 -0
- package/tasks/completed/IMPL-007e-daemon-display-module.md +77 -0
- package/tasks/completed/IMPL-007f-daemon-integration.md +124 -0
- package/tasks/completed/PLAT-1-heimdall.md +420 -0
- package/tasks/completed/SEC-001-sql-injection-fix.md +58 -0
- package/tasks/completed/SEC-002-notification-injection-fix.md +45 -0
- package/tasks/completed/SEC-003-eval-injection-fix.md +54 -0
- package/tasks/completed/SEC-004-pid-race-condition-fix.md +49 -0
- package/tasks/completed/SEC-005-worker-loop-path-fix.md +51 -0
- package/tasks/completed/SEC-006-eval-agent-names.md +55 -0
- package/tasks/completed/SEC-007-spawn-escaping.md +67 -0
- package/tasks/completed/TASK-DASH-001-server-infrastructure.md +185 -0
- package/tasks/completed/TASK-anvil-001-dashboard-frontend.md +133 -0
- package/tasks/completed/review-bmad-aegis.md +89 -0
- package/tasks/completed/review-bmad-anvil.md +80 -0
- package/tasks/completed/review-bmad-crucible.md +81 -0
- package/tasks/completed/review-bmad-ember.md +90 -0
- package/tasks/completed/review-bmad-furnace.md +79 -0
- package/tasks/completed/review-bmad-pixel.md +82 -0
- package/tasks/completed/review-bmad-scribe.md +92 -0
- package/tasks/completed/review-bmad-sentinel.md +83 -0
- package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +72 -0
- package/tasks/pending/ARCH-005-missing-src-directory.md +95 -0
- package/tasks/pending/ARCH-006-task-template-location.md +64 -0
- package/tasks/pending/ARCH-008-forge-master-vs-hub.md +81 -0
- package/tasks/pending/ARCH-010-missing-index-files.md +84 -0
- package/tasks/pending/CLEAN-009.md +31 -0
- package/tasks/pending/CLEAN-010.md +30 -0
- package/tasks/pending/CLEAN-011.md +30 -0
- package/tasks/pending/CLEAN-014.md +32 -0
- package/tasks/pending/DESIGN-dash-001-layout-review.md +45 -0
- package/tasks/pending/FEATURE-001-dashboard-mvp.md +268 -0
- package/tasks/review/ARCH-007-daemon-monolith.md +162 -0
- package/tasks/review/bmad-review-aegis.md +349 -0
- package/tasks/review/bmad-review-anvil.md +259 -0
- package/tasks/review/bmad-review-crucible.md +277 -0
- package/tasks/review/bmad-review-ember.md +307 -0
- package/tasks/review/bmad-review-furnace.md +285 -0
- package/tasks/review/bmad-review-pixel.md +329 -0
- package/tasks/review/bmad-review-scribe.md +361 -0
- package/tasks/review/bmad-review-sentinel.md +242 -0
- package/tasks/review/task-001.md +78 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a date string to a relative time string (e.g., "2 hours ago")
|
|
3
|
+
* @param {string} dateString - ISO date string
|
|
4
|
+
* @returns {string} Relative time string
|
|
5
|
+
*/
|
|
6
|
+
export function formatRelativeTime(dateString) {
|
|
7
|
+
if (!dateString) return '--';
|
|
8
|
+
|
|
9
|
+
const date = new Date(dateString);
|
|
10
|
+
const now = new Date();
|
|
11
|
+
const diffMs = now - date;
|
|
12
|
+
const diffSecs = Math.floor(diffMs / 1000);
|
|
13
|
+
const diffMins = Math.floor(diffSecs / 60);
|
|
14
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
15
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
16
|
+
|
|
17
|
+
if (diffSecs < 60) return 'just now';
|
|
18
|
+
if (diffMins < 60) return `${diffMins} min ago`;
|
|
19
|
+
if (diffHours < 24) return `${diffHours}h ago`;
|
|
20
|
+
if (diffDays === 1) return 'Yesterday';
|
|
21
|
+
if (diffDays < 7) return `${diffDays} days ago`;
|
|
22
|
+
return date.toLocaleDateString();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Truncate a string to a maximum length with ellipsis
|
|
27
|
+
* @param {string} str - String to truncate
|
|
28
|
+
* @param {number} length - Maximum length
|
|
29
|
+
* @returns {string} Truncated string
|
|
30
|
+
*/
|
|
31
|
+
export function truncate(str, length = 30) {
|
|
32
|
+
if (!str || str.length <= length) return str;
|
|
33
|
+
return str.slice(0, length) + '...';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Sanitize a string for use as a CSS class name
|
|
38
|
+
* @param {string} name - String to sanitize
|
|
39
|
+
* @returns {string} Sanitized class name
|
|
40
|
+
*/
|
|
41
|
+
export function sanitizeClassName(name) {
|
|
42
|
+
if (!name) return '';
|
|
43
|
+
return String(name).replace(/[^a-zA-Z0-9-_]/g, '');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Capitalize the first letter of a string
|
|
48
|
+
* @param {string} str - String to capitalize
|
|
49
|
+
* @returns {string} Capitalized string
|
|
50
|
+
*/
|
|
51
|
+
export function capitalize(str) {
|
|
52
|
+
if (!str) return '';
|
|
53
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
54
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
3
|
+
|
|
4
|
+
// https://vite.dev/config/
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [svelte()],
|
|
7
|
+
build: {
|
|
8
|
+
outDir: '../public',
|
|
9
|
+
emptyOutDir: true
|
|
10
|
+
},
|
|
11
|
+
server: {
|
|
12
|
+
proxy: {
|
|
13
|
+
'/api': 'http://localhost:3000',
|
|
14
|
+
'/ws': {
|
|
15
|
+
target: 'ws://localhost:3000',
|
|
16
|
+
ws: true
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg-primary: #0D1117;--bg-secondary: #161B22;--bg-tertiary: #21262D;--bg-hover: #30363D;--bg-active: #484F58;--border-default: #30363D;--border-muted: #21262D;--text-primary: #F0F6FC;--text-secondary: #8B949E;--text-muted: #6E7681;--text-link: #58A6FF;--accent-primary: #238636;--accent-secondary: #1F6FEB;--danger: #F85149;--warning: #D29922;--success: #3FB950;--info: #58A6FF;--agent-hub: #A371F7;--agent-anvil: #58A6FF;--agent-furnace: #F0883E;--agent-crucible: #3FB950;--agent-scribe: #56D4DD;--agent-sentinel: #D29922;--agent-ember: #F85149;--agent-architect: #DB61A2;--agent-aegis: #E3B341;--agent-pixel: #F778BA;--priority-critical: #F85149;--priority-high: #F0883E;--priority-medium: #D29922;--priority-low: #58A6FF;--issue-doc: #A371F7;--issue-test: #F85149;--issue-sec: #F85149;--issue-cov: #D29922;--issue-todo: #58A6FF;--issue-review: #F0883E;--transition-fast: .15s;--transition-normal: .2s;--transition-slow: .3s;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px rgba(0, 0, 0, .4);--shadow-lg: 0 10px 20px rgba(0, 0, 0, .5);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;--font-mono: "SF Mono", "Consolas", "Liberation Mono", Menlo, monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--header-height: 60px;--footer-height: 32px;--mobile-tab-height: 56px}[data-theme=light]{--bg-primary: #FFFFFF;--bg-secondary: #F6F8FA;--bg-tertiary: #FFFFFF;--bg-hover: #F3F4F6;--bg-active: #EAEEF2;--border-default: #D0D7DE;--border-muted: #D8DEE4;--text-primary: #1F2328;--text-secondary: #656D76;--text-muted: #8C959F;--text-link: #0969DA;--accent-primary: #1A7F37;--accent-secondary: #0969DA;--danger: #CF222E;--warning: #9A6700;--success: #1A7F37;--info: #0969DA;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 20px rgba(0, 0, 0, .15)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:var(--font-sans);font-size:var(--font-size-md);line-height:1.5;color:var(--text-primary);background-color:var(--bg-primary);min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}#app{display:flex;flex-direction:column;min-height:100vh}body,.panel,.header,.footer,.modal-content,.card,.btn{transition:background-color var(--transition-normal) ease,color var(--transition-normal) ease,border-color var(--transition-normal) ease}.skip-link{position:absolute;top:-100px;left:0;background:var(--accent-secondary);color:var(--text-primary);padding:var(--spacing-sm) var(--spacing-md);z-index:1000;text-decoration:none;border-radius:var(--radius-sm)}.skip-link:focus{top:var(--spacing-sm);left:var(--spacing-sm)}.connection-banner{position:fixed;top:0;left:0;right:0;background:var(--warning);color:#000;padding:var(--spacing-sm) var(--spacing-md);display:flex;align-items:center;justify-content:center;gap:var(--spacing-md);z-index:1000;font-weight:500}.banner-icon{width:24px;height:24px;background:#000;color:var(--warning);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700}.banner-retry{background:#0003;border:1px solid rgba(0,0,0,.3);color:#000;padding:var(--spacing-xs) var(--spacing-md);border-radius:var(--radius-sm);cursor:pointer;font-weight:500}.banner-retry:hover{background:#0000004d}.header{position:sticky;top:0;height:var(--header-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-default);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);z-index:100}.header-left{display:flex;align-items:center}.logo-btn{display:flex;align-items:center;gap:var(--spacing-sm);background:none;border:none;color:var(--text-primary);cursor:pointer;padding:var(--spacing-sm);border-radius:var(--radius-sm)}.logo-btn:hover{background:var(--bg-hover)}.logo-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.logo-icon{font-size:1.5rem}.logo-text{font-size:var(--font-size-lg);font-weight:600;letter-spacing:.5px}.header-right{display:flex;align-items:center;gap:var(--spacing-sm)}.header-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-sm)}.header-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.header-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.header-btn .icon{width:20px;height:20px}[data-theme=dark] .sun-icon{display:block}[data-theme=dark] .moon-icon,[data-theme=light] .sun-icon{display:none}[data-theme=light] .moon-icon{display:block}#theme-toggle{transition:transform var(--transition-normal) ease}#theme-toggle:active{transform:rotate(180deg)}#voice-toggle{transition:color var(--transition-normal) ease}#voice-toggle.active{color:var(--accent-secondary)}#voice-toggle.speaking{color:var(--accent-primary);animation:voice-pulse 1s ease-in-out infinite}@keyframes voice-pulse{0%,to{opacity:1}50%{opacity:.4}}.main{flex:1;padding:var(--spacing-lg);display:flex;flex-direction:column;gap:var(--spacing-lg);max-width:1800px;margin:0 auto;width:100%;min-height:calc(100vh - var(--header-height) - var(--footer-height))}.panels-top{display:grid;grid-template-columns:4fr 3fr 3fr;gap:var(--spacing-lg);flex:.6;min-height:0}.panel{background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;overflow:hidden}.panel:focus{outline:none}.panel:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md);border-bottom:1px solid var(--border-muted);flex-shrink:0}.panel-title{font-size:var(--font-size-sm);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-primary)}.panel-subtitle{font-weight:400;color:var(--text-muted);text-transform:none}.panel-actions{display:flex;align-items:center;gap:var(--spacing-xs)}.panel-refresh,.panel-collapse,.panel-clear{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-sm)}.panel-clear{width:auto;padding:0 var(--spacing-sm);font-size:var(--font-size-xs)}.panel-refresh:hover,.panel-collapse:hover,.panel-clear:hover{background:var(--bg-hover);color:var(--text-primary)}.panel-refresh:focus-visible,.panel-collapse:focus-visible,.panel-clear:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.panel-refresh .icon,.panel-collapse .icon{width:16px;height:16px}.panel-refresh.loading .icon{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.panel-content{flex:1;overflow-y:auto;padding:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-sm)}.issues-panel{flex:.4}.issues-panel.collapsed .panel-content,.issues-panel.collapsed .empty-state,.issues-panel.collapsed .loading-state,.issues-panel.collapsed .error-state{display:none}.issues-panel.collapsed{flex:0}.issues-panel .panel-collapse .icon{transition:transform var(--transition-normal) ease}.issues-panel.collapsed .panel-collapse .icon{transform:rotate(180deg)}.tasks-filters{display:flex;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--border-muted);flex-shrink:0;overflow-x:auto}.filter-tab{padding:var(--spacing-xs) var(--spacing-sm);background:none;border:none;color:var(--text-secondary);font-size:var(--font-size-sm);cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap;display:flex;align-items:center;gap:var(--spacing-xs)}.filter-tab:hover{background:var(--bg-hover);color:var(--text-primary)}.filter-tab:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.filter-tab.active{background:var(--bg-tertiary);color:var(--text-primary);font-weight:500}.filter-count{background:var(--bg-hover);padding:2px 6px;border-radius:10px;font-size:var(--font-size-xs);min-width:20px;text-align:center}.filter-tab.active .filter-count{background:var(--accent-secondary);color:#fff}.card{background:var(--bg-tertiary);border:1px solid var(--border-muted);border-radius:var(--radius-md);padding:var(--spacing-md);cursor:pointer;transition:background var(--transition-fast) ease,border-color var(--transition-fast) ease,transform var(--transition-fast) ease}.card:hover{background:var(--bg-hover);border-color:var(--border-default)}.card:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.card.selected{border-color:var(--accent-secondary);background:var(--bg-hover)}.task-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.task-card-header{display:flex;align-items:center;gap:var(--spacing-sm)}.priority-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.priority-dot.critical{background:var(--priority-critical)}.priority-dot.high{background:var(--priority-high)}.priority-dot.medium{background:var(--priority-medium)}.priority-dot.low{background:var(--priority-low)}.task-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted)}.task-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-meta{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);color:var(--text-muted)}.task-agent{display:flex;align-items:center;gap:var(--spacing-xs)}.agent-badge{padding:2px 6px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:500}.agent-badge.hub{background:#a371f733;color:var(--agent-hub)}.agent-badge.anvil{background:#58a6ff33;color:var(--agent-anvil)}.agent-badge.furnace{background:#f0883e33;color:var(--agent-furnace)}.agent-badge.crucible{background:#3fb95033;color:var(--agent-crucible)}.agent-badge.scribe{background:#56d4dd33;color:var(--agent-scribe)}.agent-badge.sentinel{background:#d2992233;color:var(--agent-sentinel)}.agent-badge.ember{background:#f8514933;color:var(--agent-ember)}.agent-badge.architect{background:#db61a233;color:var(--agent-architect)}.agent-badge.aegis{background:#e3b34133;color:var(--agent-aegis)}.agent-badge.pixel{background:#f778ba33;color:var(--agent-pixel)}.task-card.expanded{background:var(--bg-hover)}.task-expanded-content{margin-top:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:1px solid var(--border-muted);display:none}.task-card.expanded .task-expanded-content{display:block}.task-description{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.task-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.agent-card{display:flex;align-items:flex-start;gap:var(--spacing-md)}.agent-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:var(--font-size-md);flex-shrink:0}.agent-avatar.hub{background:#a371f733;color:var(--agent-hub)}.agent-avatar.anvil{background:#58a6ff33;color:var(--agent-anvil)}.agent-avatar.furnace{background:#f0883e33;color:var(--agent-furnace)}.agent-avatar.crucible{background:#3fb95033;color:var(--agent-crucible)}.agent-avatar.scribe{background:#56d4dd33;color:var(--agent-scribe)}.agent-avatar.sentinel{background:#d2992233;color:var(--agent-sentinel)}.agent-avatar.ember{background:#f8514933;color:var(--agent-ember)}.agent-avatar.architect{background:#db61a233;color:var(--agent-architect)}.agent-avatar.aegis{background:#e3b34133;color:var(--agent-aegis)}.agent-avatar.pixel{background:#f778ba33;color:var(--agent-pixel)}.agent-info{flex:1;min-width:0}.agent-name{font-weight:600;font-size:var(--font-size-sm);color:var(--text-primary)}.agent-status{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.status-indicator{width:8px;height:8px;border-radius:50%}.status-indicator.idle{background:var(--success)}.status-indicator.working{background:var(--info);animation:pulse 2s infinite}.status-indicator.blocked{background:var(--warning)}.status-indicator.error{background:var(--danger)}.status-indicator.offline{background:var(--text-muted)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.agent-task{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.agent-progress{margin-top:var(--spacing-xs);height:4px;background:var(--bg-primary);border-radius:2px;overflow:hidden}.agent-progress-bar{height:100%;background:var(--info);border-radius:2px;transition:width var(--transition-normal) ease}.notification-card{display:flex;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md)}.notification-icon{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);flex-shrink:0}.notification-icon.success{background:#3fb95033;color:var(--success)}.notification-icon.info{background:#58a6ff33;color:var(--info)}.notification-icon.warning{background:#d2992233;color:var(--warning)}.notification-icon.attention{background:#f0883e33;color:var(--agent-furnace)}.notification-icon.error{background:#f8514933;color:var(--danger)}.notification-content{flex:1;min-width:0}.notification-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.notification-desc{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.notification-time{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.notification-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.notification-dismiss{background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}.notification-dismiss:hover{background:var(--bg-hover);color:var(--text-secondary)}.notification-group-header{font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;padding:var(--spacing-xs) 0;margin-top:var(--spacing-sm)}.notification-group-header:first-child{margin-top:0}.issue-card{display:flex;align-items:flex-start;gap:var(--spacing-md);padding:var(--spacing-md)}.issue-category{width:40px;height:40px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:var(--font-size-md);flex-shrink:0}.issue-category.doc{background:#a371f733;color:var(--issue-doc)}.issue-category.test,.issue-category.sec{background:#f8514933;color:var(--issue-test)}.issue-category.cov{background:#d2992233;color:var(--issue-cov)}.issue-category.todo{background:#58a6ff33;color:var(--issue-todo)}.issue-category.review{background:#f0883e33;color:var(--issue-review)}.issue-content{flex:1;min-width:0}.issue-header{display:flex;align-items:center;gap:var(--spacing-sm)}.issue-badge{font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;padding:2px 6px;border-radius:var(--radius-sm)}.issue-badge.doc{background:#a371f733;color:var(--issue-doc)}.issue-badge.test{background:#f8514933;color:var(--issue-test)}.issue-badge.sec{background:#f8514933;color:var(--issue-sec)}.issue-badge.cov{background:#d2992233;color:var(--issue-cov)}.issue-badge.todo{background:#58a6ff33;color:var(--issue-todo)}.issue-badge.review{background:#f0883e33;color:var(--issue-review)}.issue-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary)}.issue-details{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:var(--spacing-xs)}.issue-meta{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:var(--spacing-xs)}.issue-dispatch{flex-shrink:0}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);font-weight:500;border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent;transition:background var(--transition-fast) ease,border-color var(--transition-fast) ease,color var(--transition-fast) ease}.btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent-primary);color:#fff;border-color:var(--accent-primary)}.btn-primary:hover:not(:disabled){background:#2ea043;border-color:#2ea043}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-default)}.btn-secondary:hover:not(:disabled){background:var(--bg-hover);border-color:var(--text-muted)}.btn-dispatch{background:transparent;color:var(--accent-secondary);border-color:var(--accent-secondary);padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.btn-dispatch:hover:not(:disabled){background:var(--accent-secondary);color:#fff}.btn-dispatch .btn-arrow{transition:transform var(--transition-fast) ease}.btn-dispatch:hover .btn-arrow{transform:translate(2px)}.btn-spinner{width:14px;height:14px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin .8s linear infinite}.btn.loading .btn-text{visibility:hidden}.btn.loading .btn-spinner{display:block;position:absolute}.empty-state,.loading-state,.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--spacing-xl);text-align:center}.empty-icon,.error-icon{font-size:2.5rem;margin-bottom:var(--spacing-md);opacity:.7}.error-icon{width:48px;height:48px;background:#f8514933;color:var(--danger);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700}.empty-title,.error-title{font-size:var(--font-size-md);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-xs)}.empty-subtitle{font-size:var(--font-size-sm);color:var(--text-secondary)}.error-message{font-size:var(--font-size-sm);color:var(--text-muted);margin-bottom:var(--spacing-md)}.empty-state.celebration .empty-icon{animation:bounce 1s ease infinite}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.skeleton-card,.skeleton-issue{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-hover) 50%,var(--bg-tertiary) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-md)}.skeleton-card{height:80px}.skeleton-issue{height:100px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.footer{height:var(--footer-height);background:var(--bg-secondary);border-top:1px solid var(--border-default);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);font-size:var(--font-size-xs);color:var(--text-muted)}.footer-left,.footer-right{display:flex;align-items:center;gap:var(--spacing-sm)}.connection-status{display:flex;align-items:center;gap:var(--spacing-xs)}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}.status-dot.connected{background:var(--success);animation:pulse 2s infinite}.status-dot.disconnected{background:var(--danger)}.separator{color:var(--border-default)}.keyboard-help-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border:1px solid var(--border-default);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--font-size-xs);font-weight:600}.keyboard-help-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.keyboard-help-btn:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:var(--spacing-lg)}.modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;animation:fadeIn var(--transition-normal) ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{position:relative;background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-lg);max-width:500px;width:100%;max-height:90vh;overflow:auto;animation:slideIn var(--transition-normal) ease;box-shadow:var(--shadow-lg)}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-muted)}.modal-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary)}.modal-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);font-size:1.5rem;cursor:pointer;border-radius:var(--radius-sm)}.modal-close:hover{background:var(--bg-hover);color:var(--text-primary)}.modal-close:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:2px}.modal-body{padding:var(--spacing-lg)}.modal-footer{display:flex;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-muted)}.modal-error{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-lg);background:#f851491a;color:var(--danger);font-size:var(--font-size-sm)}.modal-error .error-icon{width:20px;height:20px;font-size:var(--font-size-xs);margin-bottom:0}.dispatch-info{background:var(--bg-tertiary);border-radius:var(--radius-md);padding:var(--spacing-md);margin-bottom:var(--spacing-md)}.info-row{display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-xs)}.info-row:last-child{margin-bottom:0}.info-label{font-size:var(--font-size-sm);color:var(--text-muted);min-width:60px}.info-value{font-size:var(--font-size-sm);color:var(--text-primary)}.dispatch-preview{margin-top:var(--spacing-md)}.preview-label{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--spacing-sm)}.task-preview{background:var(--bg-tertiary);border:1px solid var(--border-default);border-radius:var(--radius-md);padding:var(--spacing-md)}.preview-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:var(--spacing-xs)}.preview-title{font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.preview-meta{display:flex;gap:var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-secondary)}.preview-meta strong{color:var(--text-primary)}.keyboard-help{max-width:550px}.shortcut-section{margin-bottom:var(--spacing-lg)}.shortcut-section:last-child{margin-bottom:0}.shortcut-section h4{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);margin-bottom:var(--spacing-sm);padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border-muted)}.shortcut-list{display:flex;flex-direction:column;gap:var(--spacing-sm)}.shortcut{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);color:var(--text-secondary)}.shortcut span{flex:1}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 var(--spacing-xs);background:var(--bg-tertiary);border:1px solid var(--border-default);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-primary);box-shadow:0 1px 0 var(--border-default)}.toast-container{position:fixed;bottom:calc(var(--footer-height) + var(--spacing-md));right:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-sm);z-index:1001;max-width:400px}.toast{background:var(--bg-secondary);border:1px solid var(--border-default);border-radius:var(--radius-md);padding:var(--spacing-md);display:flex;align-items:flex-start;gap:var(--spacing-sm);box-shadow:var(--shadow-lg);animation:slideInRight var(--transition-normal) ease}@keyframes slideInRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast.removing{animation:slideOutRight var(--transition-normal) ease forwards}@keyframes slideOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.toast-icon{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);flex-shrink:0}.toast.success .toast-icon{background:#3fb95033;color:var(--success)}.toast.error .toast-icon{background:#f8514933;color:var(--danger)}.toast.info .toast-icon{background:#58a6ff33;color:var(--info)}.toast.warning .toast-icon{background:#d2992233;color:var(--warning)}.toast-content{flex:1}.toast-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary)}.toast-message{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:2px}.toast-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-sm)}.toast-action{background:none;border:none;color:var(--text-link);font-size:var(--font-size-xs);cursor:pointer;padding:0}.toast-action:hover{text-decoration:underline}.toast-close{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);font-size:var(--font-size-md)}.toast-close:hover{background:var(--bg-hover);color:var(--text-primary)}.mobile-tabs{display:none;position:fixed;bottom:0;left:0;right:0;height:var(--mobile-tab-height);background:var(--bg-secondary);border-top:1px solid var(--border-default);z-index:100}.mobile-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:var(--spacing-xs)}.mobile-tab:hover{color:var(--text-secondary)}.mobile-tab.active{color:var(--accent-secondary)}.mobile-tab:focus-visible{outline:2px solid var(--accent-secondary);outline-offset:-2px}.tab-icon{width:20px;height:20px}@media (max-width: 1199px){.panels-top{grid-template-columns:1fr 1fr}.notifications-panel{grid-column:span 2}.logo-text{font-size:var(--font-size-md)}}@media (max-width: 767px){:root{--spacing-lg: 16px}.header{padding:0 var(--spacing-md)}.logo-text{display:none}.main{padding:var(--spacing-md);padding-bottom:calc(var(--mobile-tab-height) + var(--spacing-md))}.panels-top{display:flex;flex-direction:column}.panel{display:none}.panel.mobile-active{display:flex;flex:1}.issues-panel{display:flex;flex:none;max-height:300px}.issues-panel.mobile-active{flex:1;max-height:none}.mobile-tabs{display:flex}.footer{display:none}.toast-container{bottom:calc(var(--mobile-tab-height) + var(--spacing-md));left:var(--spacing-md);right:var(--spacing-md);max-width:none}.modal-content{margin:var(--spacing-md);max-height:calc(100vh - var(--spacing-xl) * 2)}.shortcut{flex-wrap:wrap}.shortcut kbd{margin-right:var(--spacing-xs)}}@media (max-width: 374px){.filter-tab{padding:var(--spacing-xs);font-size:var(--font-size-xs)}.filter-count{display:none}.filter-tab.active .filter-count{display:inline-block}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:focus:not(:focus-visible){outline:none}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}::selection{background:var(--accent-secondary);color:#fff}@media print{.header,.footer,.mobile-tabs,.modal,.toast-container{display:none!important}.main{padding:0}.panel{break-inside:avoid}}.hidden.svelte-p4t6ev{visibility:hidden}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var la=Object.defineProperty;var _r=e=>{throw TypeError(e)};var ca=(e,t,n)=>t in e?la(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Le=(e,t,n)=>ca(e,typeof t!="symbol"?t+"":t,n),us=(e,t,n)=>t.has(e)||_r("Cannot "+n);var p=(e,t,n)=>(us(e,t,"read from private field"),n?n.call(e):t.get(e)),U=(e,t,n)=>t.has(e)?_r("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),B=(e,t,n,s)=>(us(e,t,"write to private field"),s?s.call(e,n):t.set(e,n),n),re=(e,t,n)=>(us(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();const ua="5";var Nr;typeof window<"u"&&((Nr=window.__svelte??(window.__svelte={})).v??(Nr.v=new Set)).add(ua);let fn=!1,fa=!1;function da(){fn=!0}da();const va=1,pa=2,Lr=4,ha=8,_a=16,ga=2,ba=4,ma=8,ya=1,wa=2,ie=Symbol(),ka="http://www.w3.org/1999/xhtml",_s=!1;var Or=Array.isArray,Ea=Array.prototype.indexOf,ts=Array.from,Fr=Object.defineProperty,qt=Object.getOwnPropertyDescriptor,Rr=Object.getOwnPropertyDescriptors,xa=Object.prototype,Sa=Array.prototype,Us=Object.getPrototypeOf,gr=Object.isExtensible;const dt=()=>{};function Ta(e){return e()}function qn(e){for(var t=0;t<e.length;t++)e[t]()}function Pr(){var e,t,n=new Promise((s,i)=>{e=s,t=i});return{promise:n,resolve:e,reject:t}}const le=2,Gn=4,Sn=8,Br=1<<24,st=16,rt=32,Ot=64,js=128,De=512,oe=1024,pe=2048,ze=4096,Se=8192,tt=16384,Vs=32768,tn=65536,br=1<<17,Ur=1<<18,dn=1<<19,jr=1<<20,Qe=1<<25,Nt=32768,gs=1<<21,Hs=1<<22,vt=1<<23,$t=Symbol("$state"),Aa=Symbol("legacy props"),$a=Symbol(""),Ut=new class extends Error{constructor(){super(...arguments);Le(this,"name","StaleReactionError");Le(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function Vr(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Ia(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Ca(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Da(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ma(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Na(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function La(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Oa(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Fa(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ra(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function Pa(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Hr(e){return e===this.v}function qr(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Gr(e){return!qr(e,this.v)}let X=null;function nn(e){X=e}function ue(e,t=!1,n){X={p:X,i:!1,c:null,e:null,s:e,x:null,l:fn&&!t?{s:null,u:null,$:[]}:null}}function fe(e){var t=X,n=t.e;if(n!==null){t.e=null;for(var s of n)ui(s)}return t.i=!0,X=t.p,{}}function Tn(){return!fn||X!==null&&X.l===null}let jt=[];function Ba(){var e=jt;jt=[],qn(e)}function An(e){if(jt.length===0){var t=jt;queueMicrotask(()=>{t===jt&&Ba()})}jt.push(e)}function Kr(e){var t=H;if(t===null)return R.f|=vt,e;if(t.f&Vs)sn(e,t);else{if(!(t.f&js))throw e;t.b.error(e)}}function sn(e,t){for(;t!==null;){if(t.f&js)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const Ua=-7169;function te(e,t){e.f=e.f&Ua|t}function qs(e){e.f&De||e.deps===null?te(e,oe):te(e,ze)}function Wr(e){if(e!==null)for(const t of e)!(t.f&le)||!(t.f&Nt)||(t.f^=Nt,Wr(t.deps))}function Yr(e,t,n){e.f&pe?t.add(e):e.f&ze&&n.add(e),Wr(e.deps),te(e,oe)}const Mn=new Set;let Y=null,ae=null,He=[],Gs=null,bs=!1;var zt,Xt,kt,Et,kn,Jt,Zt,Me,ms,ys,zr,Xr;const Zn=class Zn{constructor(){U(this,Me);Le(this,"committed",!1);Le(this,"current",new Map);Le(this,"previous",new Map);U(this,zt,new Set);U(this,Xt,new Set);U(this,kt,0);U(this,Et,0);U(this,kn,null);U(this,Jt,new Set);U(this,Zt,new Set);Le(this,"skipped_effects",new Set);Le(this,"is_fork",!1)}is_deferred(){return this.is_fork||p(this,Et)>0}process(t){var i;He=[],this.apply();var n=[],s=[];for(const r of t)re(this,Me,ms).call(this,r,n,s);this.is_fork||re(this,Me,zr).call(this),this.is_deferred()?(re(this,Me,ys).call(this,s),re(this,Me,ys).call(this,n)):(Y=null,mr(s),mr(n),(i=p(this,kn))==null||i.resolve()),ae=null}capture(t,n){n!==ie&&!this.previous.has(t)&&this.previous.set(t,n),t.f&vt||(this.current.set(t,t.v),ae==null||ae.set(t,t.v))}activate(){Y=this,this.apply()}deactivate(){Y===this&&(Y=null,ae=null)}flush(){if(this.activate(),He.length>0){if(ja(),Y!==null&&Y!==this)return}else p(this,kt)===0&&this.process([]);this.deactivate()}discard(){for(const t of p(this,Xt))t(this);p(this,Xt).clear()}increment(t){B(this,kt,p(this,kt)+1),t&&B(this,Et,p(this,Et)+1)}decrement(t){B(this,kt,p(this,kt)-1),t&&B(this,Et,p(this,Et)-1),this.revive()}revive(){for(const t of p(this,Jt))p(this,Zt).delete(t),te(t,pe),nt(t);for(const t of p(this,Zt))te(t,ze),nt(t);this.flush()}oncommit(t){p(this,zt).add(t)}ondiscard(t){p(this,Xt).add(t)}settled(){return(p(this,kn)??B(this,kn,Pr())).promise}static ensure(){if(Y===null){const t=Y=new Zn;Mn.add(Y),Zn.enqueue(()=>{Y===t&&t.flush()})}return Y}static enqueue(t){An(t)}apply(){}};zt=new WeakMap,Xt=new WeakMap,kt=new WeakMap,Et=new WeakMap,kn=new WeakMap,Jt=new WeakMap,Zt=new WeakMap,Me=new WeakSet,ms=function(t,n,s){t.f^=oe;for(var i=t.first,r=null;i!==null;){var o=i.f,l=(o&(rt|Ot))!==0,a=l&&(o&oe)!==0,c=a||(o&Se)!==0||this.skipped_effects.has(i);if(!c&&i.fn!==null){l?i.f^=oe:r!==null&&o&(Gn|Sn|Br)?r.b.defer_effect(i):o&Gn?n.push(i):vn(i)&&(o&st&&p(this,Jt).add(i),on(i));var u=i.first;if(u!==null){i=u;continue}}var _=i.parent;for(i=i.next;i===null&&_!==null;)_===r&&(r=null),i=_.next,_=_.parent}},ys=function(t){for(var n=0;n<t.length;n+=1)Yr(t[n],p(this,Jt),p(this,Zt))},zr=function(){if(p(this,Et)===0){for(const t of p(this,zt))t();p(this,zt).clear()}p(this,kt)===0&&re(this,Me,Xr).call(this)},Xr=function(){var i;if(Mn.size>1){this.previous.clear();var t=ae,n=!0;for(const r of Mn){if(r===this){n=!1;continue}const o=[];for(const[a,c]of this.current){if(r.current.has(a))if(n&&c!==r.current.get(a))r.current.set(a,c);else continue;o.push(a)}if(o.length===0)continue;const l=[...r.current.keys()].filter(a=>!this.current.has(a));if(l.length>0){var s=He;He=[];const a=new Set,c=new Map;for(const u of o)Jr(u,l,a,c);if(He.length>0){Y=r,r.apply();for(const u of He)re(i=r,Me,ms).call(i,u,[],[]);r.deactivate()}He=s}}Y=null,ae=t}this.committed=!0,Mn.delete(this)};let et=Zn;function ja(){var e=Ct;bs=!0;var t=null;try{var n=0;for(Wn(!0);He.length>0;){var s=et.ensure();if(n++>1e3){var i,r;Va()}s.process(He),pt.clear()}}finally{bs=!1,Wn(e),Gs=null}}function Va(){try{Na()}catch(e){sn(e,Gs)}}let Oe=null;function mr(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var s=e[n++];if(!(s.f&(tt|Se))&&vn(s)&&(Oe=new Set,on(s),s.deps===null&&s.first===null&&s.nodes===null&&(s.teardown===null&&s.ac===null?vi(s):s.fn=null),(Oe==null?void 0:Oe.size)>0)){pt.clear();for(const i of Oe){if(i.f&(tt|Se))continue;const r=[i];let o=i.parent;for(;o!==null;)Oe.has(o)&&(Oe.delete(o),r.push(o)),o=o.parent;for(let l=r.length-1;l>=0;l--){const a=r[l];a.f&(tt|Se)||on(a)}}Oe.clear()}}Oe=null}}function Jr(e,t,n,s){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const i of e.reactions){const r=i.f;r&le?Jr(i,t,n,s):r&(Hs|st)&&!(r&pe)&&Zr(i,t,s)&&(te(i,pe),nt(i))}}function Zr(e,t,n){const s=n.get(e);if(s!==void 0)return s;if(e.deps!==null)for(const i of e.deps){if(t.includes(i))return!0;if(i.f&le&&Zr(i,t,n))return n.set(i,!0),!0}return n.set(e,!1),!1}function nt(e){for(var t=Gs=e;t.parent!==null;){t=t.parent;var n=t.f;if(bs&&t===H&&n&st&&!(n&Ur))return;if(n&(Ot|rt)){if(!(n&oe))return;t.f^=oe}}He.push(t)}function Ha(e){let t=0,n=Lt(0),s;return()=>{zs()&&(d(n),ns(()=>(t===0&&(s=C(()=>e(()=>gn(n)))),t+=1,()=>{An(()=>{t-=1,t===0&&(s==null||s(),s=void 0,gn(n))})})))}}var qa=tn|dn|js;function Ga(e,t,n){new Ka(e,t,n)}var $e,Bs,qe,xt,Ge,Ie,ge,Ke,Ze,ct,St,ut,Tt,Qt,en,ft,Qn,se,Wa,Ya,ws,On,Fn,ks;class Ka{constructor(t,n,s){U(this,se);Le(this,"parent");Le(this,"is_pending",!1);U(this,$e);U(this,Bs,null);U(this,qe);U(this,xt);U(this,Ge);U(this,Ie,null);U(this,ge,null);U(this,Ke,null);U(this,Ze,null);U(this,ct,null);U(this,St,0);U(this,ut,0);U(this,Tt,!1);U(this,Qt,new Set);U(this,en,new Set);U(this,ft,null);U(this,Qn,Ha(()=>(B(this,ft,Lt(p(this,St))),()=>{B(this,ft,null)})));B(this,$e,t),B(this,qe,n),B(this,xt,s),this.parent=H.b,this.is_pending=!!p(this,qe).pending,B(this,Ge,Xs(()=>{H.b=this;{var i=re(this,se,ws).call(this);try{B(this,Ie,Ce(()=>s(i)))}catch(r){this.error(r)}p(this,ut)>0?re(this,se,Fn).call(this):this.is_pending=!1}return()=>{var r;(r=p(this,ct))==null||r.remove()}},qa))}defer_effect(t){Yr(t,p(this,Qt),p(this,en))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!p(this,qe).pending}update_pending_count(t){re(this,se,ks).call(this,t),B(this,St,p(this,St)+t),p(this,ft)&&rn(p(this,ft),p(this,St))}get_effect_pending(){return p(this,Qn).call(this),d(p(this,ft))}error(t){var n=p(this,qe).onerror;let s=p(this,qe).failed;if(p(this,Tt)||!n&&!s)throw t;p(this,Ie)&&(we(p(this,Ie)),B(this,Ie,null)),p(this,ge)&&(we(p(this,ge)),B(this,ge,null)),p(this,Ke)&&(we(p(this,Ke)),B(this,Ke,null));var i=!1,r=!1;const o=()=>{if(i){Pa();return}i=!0,r&&Ra(),et.ensure(),B(this,St,0),p(this,Ke)!==null&&It(p(this,Ke),()=>{B(this,Ke,null)}),this.is_pending=this.has_pending_snippet(),B(this,Ie,re(this,se,On).call(this,()=>(B(this,Tt,!1),Ce(()=>p(this,xt).call(this,p(this,$e)))))),p(this,ut)>0?re(this,se,Fn).call(this):this.is_pending=!1};var l=R;try{me(null),r=!0,n==null||n(t,o),r=!1}catch(a){sn(a,p(this,Ge)&&p(this,Ge).parent)}finally{me(l)}s&&An(()=>{B(this,Ke,re(this,se,On).call(this,()=>{et.ensure(),B(this,Tt,!0);try{return Ce(()=>{s(p(this,$e),()=>t,()=>o)})}catch(a){return sn(a,p(this,Ge).parent),null}finally{B(this,Tt,!1)}}))})}}$e=new WeakMap,Bs=new WeakMap,qe=new WeakMap,xt=new WeakMap,Ge=new WeakMap,Ie=new WeakMap,ge=new WeakMap,Ke=new WeakMap,Ze=new WeakMap,ct=new WeakMap,St=new WeakMap,ut=new WeakMap,Tt=new WeakMap,Qt=new WeakMap,en=new WeakMap,ft=new WeakMap,Qn=new WeakMap,se=new WeakSet,Wa=function(){try{B(this,Ie,Ce(()=>p(this,xt).call(this,p(this,$e))))}catch(t){this.error(t)}},Ya=function(){const t=p(this,qe).pending;t&&(B(this,ge,Ce(()=>t(p(this,$e)))),et.enqueue(()=>{var n=re(this,se,ws).call(this);B(this,Ie,re(this,se,On).call(this,()=>(et.ensure(),Ce(()=>p(this,xt).call(this,n))))),p(this,ut)>0?re(this,se,Fn).call(this):(It(p(this,ge),()=>{B(this,ge,null)}),this.is_pending=!1)}))},ws=function(){var t=p(this,$e);return this.is_pending&&(B(this,ct,ht()),p(this,$e).before(p(this,ct)),t=p(this,ct)),t},On=function(t){var n=H,s=R,i=X;Ye(p(this,Ge)),me(p(this,Ge)),nn(p(this,Ge).ctx);try{return t()}catch(r){return Kr(r),null}finally{Ye(n),me(s),nn(i)}},Fn=function(){const t=p(this,qe).pending;p(this,Ie)!==null&&(B(this,Ze,document.createDocumentFragment()),p(this,Ze).append(p(this,ct)),_i(p(this,Ie),p(this,Ze))),p(this,ge)===null&&B(this,ge,Ce(()=>t(p(this,$e))))},ks=function(t){var n;if(!this.has_pending_snippet()){this.parent&&re(n=this.parent,se,ks).call(n,t);return}if(B(this,ut,p(this,ut)+t),p(this,ut)===0){this.is_pending=!1;for(const s of p(this,Qt))te(s,pe),nt(s);for(const s of p(this,en))te(s,ze),nt(s);p(this,Qt).clear(),p(this,en).clear(),p(this,ge)&&It(p(this,ge),()=>{B(this,ge,null)}),p(this,Ze)&&(p(this,$e).before(p(this,Ze)),B(this,Ze,null))}};function za(e,t,n,s){const i=Tn()?Ks:Ws;if(n.length===0&&e.length===0){s(t.map(i));return}var r=Y,o=H,l=Xa();function a(){Promise.all(n.map(c=>Ja(c))).then(c=>{l();try{s([...t.map(i),...c])}catch(u){o.f&tt||sn(u,o)}r==null||r.deactivate(),Kn()}).catch(c=>{sn(c,o)})}e.length>0?Promise.all(e).then(()=>{l();try{return a()}finally{r==null||r.deactivate(),Kn()}}):a()}function Xa(){var e=H,t=R,n=X,s=Y;return function(r=!0){Ye(e),me(t),nn(n),r&&(s==null||s.activate())}}function Kn(){Ye(null),me(null),nn(null)}function Ks(e){var t=le|pe,n=R!==null&&R.f&le?R:null;return H!==null&&(H.f|=dn),{ctx:X,deps:null,effects:null,equals:Hr,f:t,fn:e,reactions:null,rv:0,v:ie,wv:0,parent:n??H,ac:null}}function Ja(e,t,n){let s=H;s===null&&Ia();var i=s.b,r=void 0,o=Lt(ie),l=!R,a=new Map;return ao(()=>{var v;var c=Pr();r=c.promise;try{Promise.resolve(e()).then(c.resolve,c.reject).then(()=>{u===Y&&u.committed&&u.deactivate(),Kn()})}catch(k){c.reject(k),Kn()}var u=Y;if(l){var _=i.is_rendered();i.update_pending_count(1),u.increment(_),(v=a.get(u))==null||v.reject(Ut),a.delete(u),a.set(u,c)}const f=(k,S=void 0)=>{if(u.activate(),S)S!==Ut&&(o.f|=vt,rn(o,S));else{o.f&vt&&(o.f^=vt),rn(o,k);for(const[g,E]of a){if(a.delete(g),g===u)break;E.reject(Ut)}}l&&(i.update_pending_count(-1),u.decrement(_))};c.promise.then(f,k=>f(null,k||"unknown"))}),ci(()=>{for(const c of a.values())c.reject(Ut)}),new Promise(c=>{function u(_){function f(){_===r?c(o):u(r)}_.then(f,f)}u(r)})}function Ws(e){const t=Ks(e);return t.equals=Gr,t}function Qr(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)we(t[n])}}function Za(e){for(var t=e.parent;t!==null;){if(!(t.f&le))return t.f&tt?null:t;t=t.parent}return null}function Ys(e){var t,n=H;Ye(Za(e));try{e.f&=~Nt,Qr(e),t=yi(e)}finally{Ye(n)}return t}function ei(e){var t=Ys(e);if(!e.equals(t)&&(e.wv=bi(),(!(Y!=null&&Y.is_fork)||e.deps===null)&&(e.v=t,e.deps===null))){te(e,oe);return}gt||(ae!==null?(zs()||Y!=null&&Y.is_fork)&&ae.set(e,t):qs(e))}let Es=new Set;const pt=new Map;let ti=!1;function Lt(e,t){var n={f:0,v:e,reactions:null,equals:Hr,rv:0,wv:0};return n}function at(e,t){const n=Lt(e);return co(n),n}function K(e,t=!1,n=!0){var i;const s=Lt(e);return t||(s.equals=Gr),fn&&n&&X!==null&&X.l!==null&&((i=X.l).s??(i.s=[])).push(s),s}function P(e,t,n=!1){R!==null&&(!Pe||R.f&br)&&Tn()&&R.f&(le|st|Hs|br)&&!(ve!=null&&ve.includes(e))&&Fa();let s=n?Vt(t):t;return rn(e,s)}function rn(e,t){if(!e.equals(t)){var n=e.v;gt?pt.set(e,t):pt.set(e,n),e.v=t;var s=et.ensure();if(s.capture(e,n),e.f&le){const i=e;e.f&pe&&Ys(i),qs(i)}e.wv=bi(),ni(e,pe),Tn()&&H!==null&&H.f&oe&&!(H.f&(rt|Ot))&&(Ae===null?uo([e]):Ae.push(e)),!s.is_fork&&Es.size>0&&!ti&&Qa()}return t}function Qa(){ti=!1;var e=Ct;Wn(!0);const t=Array.from(Es);try{for(const n of t)n.f&oe&&te(n,ze),vn(n)&&on(n)}finally{Wn(e)}Es.clear()}function gn(e){P(e,e.v+1)}function ni(e,t){var n=e.reactions;if(n!==null)for(var s=Tn(),i=n.length,r=0;r<i;r++){var o=n[r],l=o.f;if(!(!s&&o===H)){var a=(l&pe)===0;if(a&&te(o,t),l&le){var c=o;ae==null||ae.delete(c),l&Nt||(l&De&&(o.f|=Nt),ni(c,ze))}else a&&(l&st&&Oe!==null&&Oe.add(o),nt(o))}}}function Vt(e){if(typeof e!="object"||e===null||$t in e)return e;const t=Us(e);if(t!==xa&&t!==Sa)return e;var n=new Map,s=Or(e),i=at(0),r=Dt,o=l=>{if(Dt===r)return l();var a=R,c=Dt;me(null),kr(r);var u=l();return me(a),kr(c),u};return s&&n.set("length",at(e.length)),new Proxy(e,{defineProperty(l,a,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&La();var u=n.get(a);return u===void 0?u=o(()=>{var _=at(c.value);return n.set(a,_),_}):P(u,c.value,!0),!0},deleteProperty(l,a){var c=n.get(a);if(c===void 0){if(a in l){const u=o(()=>at(ie));n.set(a,u),gn(i)}}else P(c,ie),gn(i);return!0},get(l,a,c){var v;if(a===$t)return e;var u=n.get(a),_=a in l;if(u===void 0&&(!_||(v=qt(l,a))!=null&&v.writable)&&(u=o(()=>{var k=Vt(_?l[a]:ie),S=at(k);return S}),n.set(a,u)),u!==void 0){var f=d(u);return f===ie?void 0:f}return Reflect.get(l,a,c)},getOwnPropertyDescriptor(l,a){var c=Reflect.getOwnPropertyDescriptor(l,a);if(c&&"value"in c){var u=n.get(a);u&&(c.value=d(u))}else if(c===void 0){var _=n.get(a),f=_==null?void 0:_.v;if(_!==void 0&&f!==ie)return{enumerable:!0,configurable:!0,value:f,writable:!0}}return c},has(l,a){var f;if(a===$t)return!0;var c=n.get(a),u=c!==void 0&&c.v!==ie||Reflect.has(l,a);if(c!==void 0||H!==null&&(!u||(f=qt(l,a))!=null&&f.writable)){c===void 0&&(c=o(()=>{var v=u?Vt(l[a]):ie,k=at(v);return k}),n.set(a,c));var _=d(c);if(_===ie)return!1}return u},set(l,a,c,u){var T;var _=n.get(a),f=a in l;if(s&&a==="length")for(var v=c;v<_.v;v+=1){var k=n.get(v+"");k!==void 0?P(k,ie):v in l&&(k=o(()=>at(ie)),n.set(v+"",k))}if(_===void 0)(!f||(T=qt(l,a))!=null&&T.writable)&&(_=o(()=>at(void 0)),P(_,Vt(c)),n.set(a,_));else{f=_.v!==ie;var S=o(()=>Vt(c));P(_,S)}var g=Reflect.getOwnPropertyDescriptor(l,a);if(g!=null&&g.set&&g.set.call(u,c),!f){if(s&&typeof a=="string"){var E=n.get("length"),I=Number(a);Number.isInteger(I)&&I>=E.v&&P(E,I+1)}gn(i)}return!0},ownKeys(l){d(i);var a=Reflect.ownKeys(l).filter(_=>{var f=n.get(_);return f===void 0||f.v!==ie});for(var[c,u]of n)u.v!==ie&&!(c in l)&&a.push(c);return a},setPrototypeOf(){Oa()}})}var yr,si,ri,ii;function eo(){if(yr===void 0){yr=window,si=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;ri=qt(t,"firstChild").get,ii=qt(t,"nextSibling").get,gr(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),gr(n)&&(n.__t=void 0)}}function ht(e=""){return document.createTextNode(e)}function an(e){return ri.call(e)}function $n(e){return ii.call(e)}function b(e,t){return an(e)}function ce(e,t=!1){{var n=an(e);return n instanceof Comment&&n.data===""?$n(n):n}}function w(e,t=1,n=!1){let s=e;for(;t--;)s=$n(s);return s}function to(e){e.textContent=""}function ai(){return!1}function oi(e){var t=R,n=H;me(null),Ye(null);try{return e()}finally{me(t),Ye(n)}}function li(e){H===null&&(R===null&&Ma(),Da()),gt&&Ca()}function no(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Xe(e,t,n){var s=H;s!==null&&s.f&Se&&(e|=Se);var i={ctx:X,deps:null,nodes:null,f:e|pe|De,first:null,fn:t,last:null,next:null,parent:s,b:s&&s.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{on(i),i.f|=Vs}catch(l){throw we(i),l}else t!==null&&nt(i);var r=i;if(n&&r.deps===null&&r.teardown===null&&r.nodes===null&&r.first===r.last&&!(r.f&dn)&&(r=r.first,e&st&&e&tn&&r!==null&&(r.f|=tn)),r!==null&&(r.parent=s,s!==null&&no(r,s),R!==null&&R.f&le&&!(e&Ot))){var o=R;(o.effects??(o.effects=[])).push(r)}return i}function zs(){return R!==null&&!Pe}function ci(e){const t=Xe(Sn,null,!1);return te(t,oe),t.teardown=e,t}function xs(e){li();var t=H.f,n=!R&&(t&rt)!==0&&(t&Vs)===0;if(n){var s=X;(s.e??(s.e=[])).push(e)}else return ui(e)}function ui(e){return Xe(Gn|jr,e,!1)}function so(e){return li(),Xe(Sn|jr,e,!0)}function ro(e){et.ensure();const t=Xe(Ot|dn,e,!0);return(n={})=>new Promise(s=>{n.outro?It(t,()=>{we(t),s(void 0)}):(we(t),s(void 0))})}function io(e){return Xe(Gn,e,!1)}function Q(e,t){var n=X,s={effect:null,ran:!1,deps:e};n.l.$.push(s),s.effect=ns(()=>{e(),!s.ran&&(s.ran=!0,C(t))})}function Ft(){var e=X;ns(()=>{for(var t of e.l.$){t.deps();var n=t.effect;n.f&oe&&n.deps!==null&&te(n,ze),vn(n)&&on(n),t.ran=!1}})}function ao(e){return Xe(Hs|dn,e,!0)}function ns(e,t=0){return Xe(Sn|t,e,!0)}function J(e,t=[],n=[],s=[]){za(s,t,n,i=>{Xe(Sn,()=>e(...i.map(d)),!0)})}function Xs(e,t=0){var n=Xe(st|t,e,!0);return n}function Ce(e){return Xe(rt|dn,e,!0)}function fi(e){var t=e.teardown;if(t!==null){const n=gt,s=R;wr(!0),me(null);try{t.call(null)}finally{wr(n),me(s)}}}function di(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const i=n.ac;i!==null&&oi(()=>{i.abort(Ut)});var s=n.next;n.f&Ot?n.parent=null:we(n,t),n=s}}function oo(e){for(var t=e.first;t!==null;){var n=t.next;t.f&rt||we(t),t=n}}function we(e,t=!0){var n=!1;(t||e.f&Ur)&&e.nodes!==null&&e.nodes.end!==null&&(lo(e.nodes.start,e.nodes.end),n=!0),di(e,t&&!n),Yn(e,0),te(e,tt);var s=e.nodes&&e.nodes.t;if(s!==null)for(const r of s)r.stop();fi(e);var i=e.parent;i!==null&&i.first!==null&&vi(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function lo(e,t){for(;e!==null;){var n=e===t?null:$n(e);e.remove(),e=n}}function vi(e){var t=e.parent,n=e.prev,s=e.next;n!==null&&(n.next=s),s!==null&&(s.prev=n),t!==null&&(t.first===e&&(t.first=s),t.last===e&&(t.last=n))}function It(e,t,n=!0){var s=[];pi(e,s,!0);var i=()=>{n&&we(e),t&&t()},r=s.length;if(r>0){var o=()=>--r||i();for(var l of s)l.out(o)}else i()}function pi(e,t,n){if(!(e.f&Se)){e.f^=Se;var s=e.nodes&&e.nodes.t;if(s!==null)for(const l of s)(l.is_global||n)&&t.push(l);for(var i=e.first;i!==null;){var r=i.next,o=(i.f&tn)!==0||(i.f&rt)!==0&&(e.f&st)!==0;pi(i,t,o?n:!1),i=r}}}function Js(e){hi(e,!0)}function hi(e,t){if(e.f&Se){e.f^=Se,e.f&oe||(te(e,pe),nt(e));for(var n=e.first;n!==null;){var s=n.next,i=(n.f&tn)!==0||(n.f&rt)!==0;hi(n,i?t:!1),n=s}var r=e.nodes&&e.nodes.t;if(r!==null)for(const o of r)(o.is_global||t)&&o.in()}}function _i(e,t){if(e.nodes)for(var n=e.nodes.start,s=e.nodes.end;n!==null;){var i=n===s?null:$n(n);t.append(n),n=i}}let Ct=!1;function Wn(e){Ct=e}let gt=!1;function wr(e){gt=e}let R=null,Pe=!1;function me(e){R=e}let H=null;function Ye(e){H=e}let ve=null;function co(e){R!==null&&(ve===null?ve=[e]:ve.push(e))}let de=null,Ee=0,Ae=null;function uo(e){Ae=e}let gi=1,yn=0,Dt=yn;function kr(e){Dt=e}function bi(){return++gi}function vn(e){var t=e.f;if(t&pe)return!0;if(t&le&&(e.f&=~Nt),t&ze){for(var n=e.deps,s=n.length,i=0;i<s;i++){var r=n[i];if(vn(r)&&ei(r),r.wv>e.wv)return!0}t&De&&ae===null&&te(e,oe)}return!1}function mi(e,t,n=!0){var s=e.reactions;if(s!==null&&!(ve!=null&&ve.includes(e)))for(var i=0;i<s.length;i++){var r=s[i];r.f&le?mi(r,t,!1):t===r&&(n?te(r,pe):r.f&oe&&te(r,ze),nt(r))}}function yi(e){var k;var t=de,n=Ee,s=Ae,i=R,r=ve,o=X,l=Pe,a=Dt,c=e.f;de=null,Ee=0,Ae=null,R=c&(rt|Ot)?null:e,ve=null,nn(e.ctx),Pe=!1,Dt=++yn,e.ac!==null&&(oi(()=>{e.ac.abort(Ut)}),e.ac=null);try{e.f|=gs;var u=e.fn,_=u(),f=e.deps;if(de!==null){var v;if(Yn(e,Ee),f!==null&&Ee>0)for(f.length=Ee+de.length,v=0;v<de.length;v++)f[Ee+v]=de[v];else e.deps=f=de;if(zs()&&e.f&De)for(v=Ee;v<f.length;v++)((k=f[v]).reactions??(k.reactions=[])).push(e)}else f!==null&&Ee<f.length&&(Yn(e,Ee),f.length=Ee);if(Tn()&&Ae!==null&&!Pe&&f!==null&&!(e.f&(le|ze|pe)))for(v=0;v<Ae.length;v++)mi(Ae[v],e);return i!==null&&i!==e&&(yn++,Ae!==null&&(s===null?s=Ae:s.push(...Ae))),e.f&vt&&(e.f^=vt),_}catch(S){return Kr(S)}finally{e.f^=gs,de=t,Ee=n,Ae=s,R=i,ve=r,nn(o),Pe=l,Dt=a}}function fo(e,t){let n=t.reactions;if(n!==null){var s=Ea.call(n,e);if(s!==-1){var i=n.length-1;i===0?n=t.reactions=null:(n[s]=n[i],n.pop())}}if(n===null&&t.f&le&&(de===null||!de.includes(t))){var r=t;r.f&De&&(r.f^=De,r.f&=~Nt),qs(r),Qr(r),Yn(r,0)}}function Yn(e,t){var n=e.deps;if(n!==null)for(var s=t;s<n.length;s++)fo(e,n[s])}function on(e){var t=e.f;if(!(t&tt)){te(e,oe);var n=H,s=Ct;H=e,Ct=!0;try{t&(st|Br)?oo(e):di(e),fi(e);var i=yi(e);e.teardown=typeof i=="function"?i:null,e.wv=gi;var r;_s&&fa&&e.f&pe&&e.deps}finally{Ct=s,H=n}}}function d(e){var t=e.f,n=(t&le)!==0;if(R!==null&&!Pe){var s=H!==null&&(H.f&tt)!==0;if(!s&&!(ve!=null&&ve.includes(e))){var i=R.deps;if(R.f&gs)e.rv<yn&&(e.rv=yn,de===null&&i!==null&&i[Ee]===e?Ee++:de===null?de=[e]:de.includes(e)||de.push(e));else{(R.deps??(R.deps=[])).push(e);var r=e.reactions;r===null?e.reactions=[R]:r.includes(R)||r.push(R)}}}if(gt&&pt.has(e))return pt.get(e);if(n){var o=e;if(gt){var l=o.v;return(!(o.f&oe)&&o.reactions!==null||ki(o))&&(l=Ys(o)),pt.set(o,l),l}var a=(o.f&De)===0&&!Pe&&R!==null&&(Ct||(R.f&De)!==0),c=o.deps===null;vn(o)&&(a&&(o.f|=De),ei(o)),a&&!c&&wi(o)}if(ae!=null&&ae.has(e))return ae.get(e);if(e.f&vt)throw e.v;return e.v}function wi(e){if(e.deps!==null){e.f|=De;for(const t of e.deps)(t.reactions??(t.reactions=[])).push(e),t.f&le&&!(t.f&De)&&wi(t)}}function ki(e){if(e.v===ie)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(pt.has(t)||t.f&le&&ki(t))return!0;return!1}function C(e){var t=Pe;try{return Pe=!0,e()}finally{Pe=t}}function O(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if($t in e)Ss(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n=="object"&&n&&$t in n&&Ss(n)}}}function Ss(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let s in e)try{Ss(e[s],t)}catch{}const n=Us(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=Rr(n);for(let i in s){const r=s[i].get;if(r)try{r.call(e)}catch{}}}}}const Ei=new Set,Ts=new Set;function ke(e){for(var t=0;t<e.length;t++)Ei.add(e[t]);for(var n of Ts)n(e)}let Er=null;function Nn(e){var g;var t=this,n=t.ownerDocument,s=e.type,i=((g=e.composedPath)==null?void 0:g.call(e))||[],r=i[0]||e.target;Er=e;var o=0,l=Er===e&&e.__root;if(l){var a=i.indexOf(l);if(a!==-1&&(t===document||t===window)){e.__root=t;return}var c=i.indexOf(t);if(c===-1)return;a<=c&&(o=a)}if(r=i[o]||e.target,r!==t){Fr(e,"currentTarget",{configurable:!0,get(){return r||n}});var u=R,_=H;me(null),Ye(null);try{for(var f,v=[];r!==null;){var k=r.assignedSlot||r.parentNode||r.host||null;try{var S=r["__"+s];S!=null&&(!r.disabled||e.target===r)&&S.call(r,e)}catch(E){f?v.push(E):f=E}if(e.cancelBubble||k===t||k===null)break;r=k}if(f){for(let E of v)queueMicrotask(()=>{throw E});throw f}}finally{e.__root=t,delete e.currentTarget,me(u),Ye(_)}}}function xi(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("<!>","<!---->"),t.content}function zn(e,t){var n=H;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function D(e,t){var n=(t&ya)!==0,s=(t&wa)!==0,i,r=!e.startsWith("<!>");return()=>{i===void 0&&(i=xi(r?e:"<!>"+e),n||(i=an(i)));var o=s||si?document.importNode(i,!0):i.cloneNode(!0);if(n){var l=an(o),a=o.lastChild;zn(l,a)}else zn(o,o);return o}}function vo(e,t,n="svg"){var s=!e.startsWith("<!>"),i=`<${n}>${s?e:"<!>"+e}</${n}>`,r;return()=>{if(!r){var o=xi(i),l=an(o);r=an(l)}var a=r.cloneNode(!0);return zn(a,a),a}}function pn(e,t){return vo(e,t,"svg")}function Be(){var e=document.createDocumentFragment(),t=document.createComment(""),n=ht();return e.append(t,n),zn(t,n),e}function $(e,t){e!==null&&e.before(t)}const po=["touchstart","touchmove"];function ho(e){return po.includes(e)}function L(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=n,e.nodeValue=n+"")}function _o(e,t){return go(e,t)}const Rt=new Map;function go(e,{target:t,anchor:n,props:s={},events:i,context:r,intro:o=!0}){eo();var l=new Set,a=_=>{for(var f=0;f<_.length;f++){var v=_[f];if(!l.has(v)){l.add(v);var k=ho(v);t.addEventListener(v,Nn,{passive:k});var S=Rt.get(v);S===void 0?(document.addEventListener(v,Nn,{passive:k}),Rt.set(v,1)):Rt.set(v,S+1)}}};a(ts(Ei)),Ts.add(a);var c=void 0,u=ro(()=>{var _=n??t.appendChild(ht());return Ga(_,{pending:()=>{}},f=>{if(r){ue({});var v=X;v.c=r}i&&(s.$$events=i),c=e(f,s)||{},r&&fe()}),()=>{var k;for(var f of l){t.removeEventListener(f,Nn);var v=Rt.get(f);--v===0?(document.removeEventListener(f,Nn),Rt.delete(f)):Rt.set(f,v)}Ts.delete(a),_!==n&&((k=_.parentNode)==null||k.removeChild(_))}});return bo.set(c,u),c}let bo=new WeakMap;var Fe,We,xe,At,En,xn,es;class mo{constructor(t,n=!0){Le(this,"anchor");U(this,Fe,new Map);U(this,We,new Map);U(this,xe,new Map);U(this,At,new Set);U(this,En,!0);U(this,xn,()=>{var t=Y;if(p(this,Fe).has(t)){var n=p(this,Fe).get(t),s=p(this,We).get(n);if(s)Js(s),p(this,At).delete(n);else{var i=p(this,xe).get(n);i&&(p(this,We).set(n,i.effect),p(this,xe).delete(n),i.fragment.lastChild.remove(),this.anchor.before(i.fragment),s=i.effect)}for(const[r,o]of p(this,Fe)){if(p(this,Fe).delete(r),r===t)break;const l=p(this,xe).get(o);l&&(we(l.effect),p(this,xe).delete(o))}for(const[r,o]of p(this,We)){if(r===n||p(this,At).has(r))continue;const l=()=>{if(Array.from(p(this,Fe).values()).includes(r)){var c=document.createDocumentFragment();_i(o,c),c.append(ht()),p(this,xe).set(r,{effect:o,fragment:c})}else we(o);p(this,At).delete(r),p(this,We).delete(r)};p(this,En)||!s?(p(this,At).add(r),It(o,l,!1)):l()}}});U(this,es,t=>{p(this,Fe).delete(t);const n=Array.from(p(this,Fe).values());for(const[s,i]of p(this,xe))n.includes(s)||(we(i.effect),p(this,xe).delete(s))});this.anchor=t,B(this,En,n)}ensure(t,n){var s=Y,i=ai();if(n&&!p(this,We).has(t)&&!p(this,xe).has(t))if(i){var r=document.createDocumentFragment(),o=ht();r.append(o),p(this,xe).set(t,{effect:Ce(()=>n(o)),fragment:r})}else p(this,We).set(t,Ce(()=>n(this.anchor)));if(p(this,Fe).set(s,t),i){for(const[l,a]of p(this,We))l===t?s.skipped_effects.delete(a):s.skipped_effects.add(a);for(const[l,a]of p(this,xe))l===t?s.skipped_effects.delete(a.effect):s.skipped_effects.add(a.effect);s.oncommit(p(this,xn)),s.ondiscard(p(this,es))}else p(this,xn).call(this)}}Fe=new WeakMap,We=new WeakMap,xe=new WeakMap,At=new WeakMap,En=new WeakMap,xn=new WeakMap,es=new WeakMap;function Zs(e){X===null&&Vr(),fn&&X.l!==null?yo(X).m.push(e):xs(()=>{const t=C(e);if(typeof t=="function")return t})}function Qs(e){X===null&&Vr(),Zs(()=>()=>C(e))}function yo(e){var t=e.l;return t.u??(t.u={a:[],b:[],m:[]})}function q(e,t,n=!1){var s=new mo(e),i=n?tn:0;function r(o,l){s.ensure(o,l)}Xs(()=>{var o=!1;t((l,a=!0)=>{o=!0,r(a,l)}),o||r(!1,null)},i)}function ss(e,t){return t}function wo(e,t,n){for(var s=[],i=t.length,r,o=t.length,l=0;l<i;l++){let _=t[l];It(_,()=>{if(r){if(r.pending.delete(_),r.done.add(_),r.pending.size===0){var f=e.outrogroups;As(ts(r.done)),f.delete(r),f.size===0&&(e.outrogroups=null)}}else o-=1},!1)}if(o===0){var a=s.length===0&&n!==null;if(a){var c=n,u=c.parentNode;to(u),u.append(c),e.items.clear()}As(t,!a)}else r={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(r)}function As(e,t=!0){for(var n=0;n<e.length;n++)we(e[n],t)}var xr;function Ue(e,t,n,s,i,r=null){var o=e,l=new Map,a=(t&Lr)!==0;if(a){var c=e;o=c.appendChild(ht())}var u=null,_=Ws(()=>{var E=n();return Or(E)?E:E==null?[]:ts(E)}),f,v=!0;function k(){g.fallback=u,ko(g,f,o,t,s),u!==null&&(f.length===0?u.f&Qe?(u.f^=Qe,hn(u,null,o)):Js(u):It(u,()=>{u=null}))}var S=Xs(()=>{f=d(_);for(var E=f.length,I=new Set,T=Y,x=ai(),y=0;y<E;y+=1){var h=f[y],m=s(h,y),A=v?null:l.get(m);A?(A.v&&rn(A.v,h),A.i&&rn(A.i,y),x&&T.skipped_effects.delete(A.e)):(A=Eo(l,v?o:xr??(xr=ht()),h,m,y,i,t,n),v||(A.e.f|=Qe),l.set(m,A)),I.add(m)}if(E===0&&r&&!u&&(v?u=Ce(()=>r(o)):(u=Ce(()=>r(xr??(xr=ht()))),u.f|=Qe)),!v)if(x){for(const[F,M]of l)I.has(F)||T.skipped_effects.add(M.e);T.oncommit(k),T.ondiscard(()=>{})}else k();d(_)}),g={effect:S,items:l,outrogroups:null,fallback:u};v=!1}function ko(e,t,n,s,i){var M,N,j,Z,V,W,ne,Te,Je;var r=(s&ha)!==0,o=t.length,l=e.items,a=e.effect.first,c,u=null,_,f=[],v=[],k,S,g,E;if(r)for(E=0;E<o;E+=1)k=t[E],S=i(k,E),g=l.get(S).e,g.f&Qe||((N=(M=g.nodes)==null?void 0:M.a)==null||N.measure(),(_??(_=new Set)).add(g));for(E=0;E<o;E+=1){if(k=t[E],S=i(k,E),g=l.get(S).e,e.outrogroups!==null)for(const Ne of e.outrogroups)Ne.pending.delete(g),Ne.done.delete(g);if(g.f&Qe)if(g.f^=Qe,g===a)hn(g,null,n);else{var I=u?u.next:a;g===e.effect.last&&(e.effect.last=g.prev),g.prev&&(g.prev.next=g.next),g.next&&(g.next.prev=g.prev),ot(e,u,g),ot(e,g,I),hn(g,I,n),u=g,f=[],v=[],a=u.next;continue}if(g.f&Se&&(Js(g),r&&((Z=(j=g.nodes)==null?void 0:j.a)==null||Z.unfix(),(_??(_=new Set)).delete(g))),g!==a){if(c!==void 0&&c.has(g)){if(f.length<v.length){var T=v[0],x;u=T.prev;var y=f[0],h=f[f.length-1];for(x=0;x<f.length;x+=1)hn(f[x],T,n);for(x=0;x<v.length;x+=1)c.delete(v[x]);ot(e,y.prev,h.next),ot(e,u,y),ot(e,h,T),a=T,u=h,E-=1,f=[],v=[]}else c.delete(g),hn(g,a,n),ot(e,g.prev,g.next),ot(e,g,u===null?e.effect.first:u.next),ot(e,u,g),u=g;continue}for(f=[],v=[];a!==null&&a!==g;)(c??(c=new Set)).add(a),v.push(a),a=a.next;if(a===null)continue}g.f&Qe||f.push(g),u=g,a=g.next}if(e.outrogroups!==null){for(const Ne of e.outrogroups)Ne.pending.size===0&&(As(ts(Ne.done)),(V=e.outrogroups)==null||V.delete(Ne));e.outrogroups.size===0&&(e.outrogroups=null)}if(a!==null||c!==void 0){var m=[];if(c!==void 0)for(g of c)g.f&Se||m.push(g);for(;a!==null;)!(a.f&Se)&&a!==e.fallback&&m.push(a),a=a.next;var A=m.length;if(A>0){var F=s&Lr&&o===0?n:null;if(r){for(E=0;E<A;E+=1)(ne=(W=m[E].nodes)==null?void 0:W.a)==null||ne.measure();for(E=0;E<A;E+=1)(Je=(Te=m[E].nodes)==null?void 0:Te.a)==null||Je.fix()}wo(e,m,F)}}r&&An(()=>{var Ne,Cn;if(_!==void 0)for(g of _)(Cn=(Ne=g.nodes)==null?void 0:Ne.a)==null||Cn.apply()})}function Eo(e,t,n,s,i,r,o,l){var a=o&va?o&_a?Lt(n):K(n,!1,!1):null,c=o&pa?Lt(i):null;return{v:a,i:c,e:Ce(()=>(r(t,a??n,c??i,l),()=>{e.delete(s)}))}}function hn(e,t,n){if(e.nodes)for(var s=e.nodes.start,i=e.nodes.end,r=t&&!(t.f&Qe)?t.nodes.start:n;s!==null;){var o=$n(s);if(r.before(s),s===i)return;s=o}}function ot(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}const Sr=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function xo(e,t,n){var s=e==null?"":""+e;if(t&&(s=s?s+" "+t:t),n){for(var i in n)if(n[i])s=s?s+" "+i:i;else if(s.length)for(var r=i.length,o=0;(o=s.indexOf(i,o))>=0;){var l=o+r;(o===0||Sr.includes(s[o-1]))&&(l===s.length||Sr.includes(s[l]))?s=(o===0?"":s.substring(0,o))+s.substring(l+1):o=l}}return s===""?null:s}function So(e,t){return e==null?null:String(e)}function ee(e,t,n,s,i,r){var o=e.__className;if(o!==n||o===void 0){var l=xo(n,s,r);l==null?e.removeAttribute("class"):e.className=l,e.__className=n}else if(r&&i!==r)for(var a in r){var c=!!r[a];(i==null||c!==!!i[a])&&e.classList.toggle(a,c)}return r}function To(e,t,n,s){var i=e.__style;if(i!==t){var r=So(t);r==null?e.removeAttribute("style"):e.style.cssText=r,e.__style=t}return s}const Ao=Symbol("is custom element"),$o=Symbol("is html");function ye(e,t,n,s){var i=Io(e);i[t]!==(i[t]=n)&&(t==="loading"&&(e[$a]=n),n==null?e.removeAttribute(t):typeof n!="string"&&Co(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Io(e){return e.__attributes??(e.__attributes={[Ao]:e.nodeName.includes("-"),[$o]:e.namespaceURI===ka})}var Tr=new Map;function Co(e){var t=e.getAttribute("is")||e.nodeName,n=Tr.get(t);if(n)return n;Tr.set(t,n=[]);for(var s,i=e,r=Element.prototype;r!==i;){s=Rr(i);for(var o in s)s[o].set&&n.push(o);i=Us(i)}return n}function Ar(e,t){return e===t||(e==null?void 0:e[$t])===t}function Si(e={},t,n,s){return io(()=>{var i,r;return ns(()=>{i=r,r=[],C(()=>{e!==n(...r)&&(t(e,...r),i&&Ar(n(...i),e)&&t(null,...i))})}),()=>{An(()=>{r&&Ar(n(...r),e)&&t(null,...r)})}}),e}function he(e=!1){const t=X,n=t.l.u;if(!n)return;let s=()=>O(t.s);if(e){let i=0,r={};const o=Ks(()=>{let l=!1;const a=t.s;for(const c in a)a[c]!==r[c]&&(r[c]=a[c],l=!0);return l&&i++,i});s=()=>d(o)}n.b.length&&so(()=>{$r(t,s),qn(n.b)}),xs(()=>{const i=C(()=>n.m.map(Ta));return()=>{for(const r of i)typeof r=="function"&&r()}}),n.a.length&&xs(()=>{$r(t,s),qn(n.a)})}function $r(e,t){if(e.l.s)for(const n of e.l.s)d(n);t()}function er(e,t,n){if(e==null)return t(void 0),n&&n(void 0),dt;const s=C(()=>e.subscribe(t,n));return s.unsubscribe?()=>s.unsubscribe():s}const Pt=[];function Do(e,t){return{subscribe:G(e,t).subscribe}}function G(e,t=dt){let n=null;const s=new Set;function i(l){if(qr(e,l)&&(e=l,n)){const a=!Pt.length;for(const c of s)c[1](),Pt.push(c,e);if(a){for(let c=0;c<Pt.length;c+=2)Pt[c][0](Pt[c+1]);Pt.length=0}}}function r(l){i(l(e))}function o(l,a=dt){const c=[l,a];return s.add(c),s.size===1&&(n=t(i,r)||dt),l(e),()=>{s.delete(c),s.size===0&&n&&(n(),n=null)}}return{set:i,update:r,subscribe:o}}function tr(e,t,n){const s=!Array.isArray(e),i=s?[e]:e;if(!i.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const r=t.length<2;return Do(n,(o,l)=>{let a=!1;const c=[];let u=0,_=dt;const f=()=>{if(u)return;_();const k=t(s?c[0]:c,o,l);r?o(k):_=typeof k=="function"?k:dt},v=i.map((k,S)=>er(k,g=>{c[S]=g,u&=~(1<<S),a&&f()},()=>{u|=1<<S}));return a=!0,f(),function(){qn(v),_(),a=!1}})}function Re(e){let t;return er(e,n=>t=n)(),t}let Ln=!1,$s=Symbol();function z(e,t,n){const s=n[t]??(n[t]={store:null,source:K(void 0),unsubscribe:dt});if(s.store!==e&&!($s in n))if(s.unsubscribe(),s.store=e??null,e==null)s.source.v=void 0,s.unsubscribe=dt;else{var i=!0;s.unsubscribe=er(e,r=>{i?s.source.v=r:P(s.source,r)}),i=!1}return e&&$s in n?Re(e):d(s.source)}function je(){const e={};function t(){ci(()=>{for(var n in e)e[n].unsubscribe();Fr(e,$s,{enumerable:!1,value:!0})})}return[e,t]}function Mo(e){var t=Ln;try{return Ln=!1,[e(),Ln]}finally{Ln=t}}function rs(e,t,n,s){var I;var i=!fn||(n&ga)!==0,r=(n&ma)!==0,o=s,l=!0,a=()=>(l&&(l=!1,o=s),o),c;{var u=$t in e||Aa in e;c=((I=qt(e,t))==null?void 0:I.set)??(u&&t in e?T=>e[t]=T:void 0)}var _,f=!1;[_,f]=Mo(()=>e[t]);var v;if(i?v=()=>{var T=e[t];return T===void 0?a():(l=!0,T)}:v=()=>{var T=e[t];return T!==void 0&&(o=void 0),T===void 0?o:T},i&&!(n&ba))return v;if(c){var k=e.$$legacy;return function(T,x){return arguments.length>0?((!i||!x||k||f)&&c(x?v():T),T):v()}}var S=!1,g=Ws(()=>(S=!1,v()));d(g);var E=H;return function(T,x){if(arguments.length>0){const y=x?d(g):i&&r?Vt(T):T;return P(g,y),S=!0,o!==void 0&&(o=y),T}return gt&&S||E.f&tt?g.v:d(g)}}const Ti="vibe-forge-theme";function Ai(){return typeof localStorage<"u"&&localStorage.getItem(Ti)||"dark"}const $i=G(Ai());function No(){const e=Ai();document.documentElement.setAttribute("data-theme",e),$i.set(e)}function Rn(){$i.update(e=>{const t=e==="dark"?"light":"dark";return document.documentElement.setAttribute("data-theme",t),typeof localStorage<"u"&&localStorage.setItem(Ti,t),t})}const Xn=G([]),Pn=G(!0),Is=G(null),nr=G("pending"),sr=G(null),Lo=tr([Xn,nr],([e,t])=>e.filter(n=>{const s=(n.status||"").toLowerCase().replace(/[_\s]/g,"-");return t==="pending"?s==="pending"||!s:t==="in-progress"?s==="in-progress"||s==="working":t==="review"?s==="review"||s==="in-review"||s==="needs-review":t==="done"?s==="done"||s==="completed":!0})),Oo=tr(Xn,e=>{const t={pending:0,"in-progress":0,review:0,done:0};return e.forEach(n=>{const s=(n.status||"").toLowerCase().replace(/[_\s]/g,"-");s==="pending"||!s?t.pending++:s==="in-progress"||s==="working"?t["in-progress"]++:s==="review"||s==="in-review"||s==="needs-review"?t.review++:(s==="done"||s==="completed")&&t.done++}),t});function Fo(e){nr.set(e)}function Cs(e){sr.update(t=>t===e?null:e)}function Ro(){sr.set(null)}const Ii=G([]),Bn=G(!0),Ds=G(null),Po={"planning-hub":{name:"Planning Hub",short:"Hub",icon:"H",color:"hub"},hub:{name:"Planning Hub",short:"Hub",icon:"H",color:"hub"},anvil:{name:"Anvil",short:"Anvil",icon:"A",color:"anvil"},furnace:{name:"Furnace",short:"Furnace",icon:"F",color:"furnace"},crucible:{name:"Crucible",short:"Crucible",icon:"C",color:"crucible"},scribe:{name:"Scribe",short:"Scribe",icon:"S",color:"scribe"},temper:{name:"Temper",short:"Temper",icon:"T",color:"temper"},ember:{name:"Ember",short:"Ember",icon:"E",color:"ember"},architect:{name:"Architect",short:"Arch",icon:"Ar",color:"architect"},aegis:{name:"Aegis",short:"Aegis",icon:"Ae",color:"aegis"},pixel:{name:"Pixel",short:"Pixel",icon:"P",color:"pixel"},oracle:{name:"Oracle",short:"Oracle",icon:"O",color:"oracle"},loki:{name:"Loki",short:"Loki",icon:"L",color:"loki"}};function Gt(e){return e?Po[e.toLowerCase()]||{name:e,short:e.charAt(0).toUpperCase(),icon:e.charAt(0).toUpperCase(),color:""}:null}const is=G([]),Un=G(!0),Ms=G(null),Ci=G(!1),as=G(null),jn=G(!1),bn=G(null),Ir={doc:{label:"DOC",icon:"D",agent:"scribe",priority:"medium"},test:{label:"TEST",icon:"T",agent:"crucible",priority:"high"},sec:{label:"SEC",icon:"S",agent:"aegis",priority:"critical"},cov:{label:"COV",icon:"C",agent:"crucible",priority:"medium"},todo:{label:"TODO",icon:"TD",agent:null,priority:"low"},review:{label:"REVIEW",icon:"R",agent:"sentinel",priority:"high"}};function Ns(e){return Ir[e]||Ir.todo}function Cr(){const e=Date.now().toString(36),t=Math.random().toString(36).slice(2,6);return`AUTO-${e}-${t}`}function Di(e){as.set(e),bn.set(null)}function Ve(){as.set(null),jn.set(!1),bn.set(null)}function fs(){Ci.update(e=>!e)}function Bo(e){is.update(t=>t.filter(n=>n.id!==e))}const In=G([]),Uo=tr(In,e=>{const t=new Date().toDateString(),n=new Date(Date.now()-864e5).toDateString(),s={today:[],yesterday:[],older:[]};return e.forEach(i=>{const r=new Date(i.timestamp||i.created_at).toDateString();r===t?s.today.push(i):r===n?s.yesterday.push(i):s.older.push(i)}),s});function ds(e){const t={id:`notif-${Date.now()}`,timestamp:new Date().toISOString(),...e};In.update(n=>[t,...n].slice(0,50))}function Dr(e){In.update(t=>t.filter(n=>n.id!==e))}function vs(){In.set([])}const jo=window.location.origin;async function os(e,t={}){const n=await fetch(`${jo}${e}`,{headers:{"Content-Type":"application/json",...t.headers},...t});if(!n.ok){const s=new Error(`HTTP ${n.status}`);s.status=n.status;try{s.data=await n.json()}catch{s.data=null}throw s}return n.json()}async function Vo(){return os("/api/tasks")}async function Ho(){return os("/api/agents")}async function qo(){try{return await os("/api/issues")}catch{return{issues:[{id:"issue-1",category:"doc",title:"Stale Docs: README.md",target:"README.md",details:"Last updated 45 days ago",meta:"Threshold: 30 days | Severity: Medium",agent:"scribe",priority:"medium"},{id:"issue-2",category:"test",title:"Failing Test: auth.test.js",target:"auth.test.js",details:"2 tests failing: testLogin, testLogout",meta:"First failed: yesterday 3:45 PM",agent:"crucible",priority:"high"},{id:"issue-3",category:"sec",title:"Security: lodash vulnerability",target:"package.json",details:"CVE-2021-23337 (high severity)",meta:"Affects: lodash < 4.17.21",agent:"aegis",priority:"critical"},{id:"issue-4",category:"cov",title:"Low Coverage: utils.js",target:"src/utils.js",details:"34% coverage (threshold: 80%)",meta:"Missing: 12 uncovered functions",agent:"crucible",priority:"medium"}]}}}async function Go(e){return os("/api/dispatch",{method:"POST",body:JSON.stringify({type:e.category,target:e.target,agent:e.agent,context:{title:e.title,details:e.details,priority:e.priority}})})}const Mi="vibe-forge-voice-enabled",Ni="vibe-forge-voice-overridden";function Li(){return typeof localStorage>"u"?!1:localStorage.getItem(Ni)==="true"?localStorage.getItem(Mi)==="true":null}const ln=G(Li()??!1),Jn=G(!1);ln.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(Mi,String(e))});typeof window<"u"&&Li()===null&&fetch("/api/config").then(e=>e.ok?e.json():null).catch(()=>null).then(e=>{(e==null?void 0:e.dashboard_voice)===!0&&ln.set(!0)});const Oi={"planning-hub":{gender:"male",pitch:.8,rate:.88},"forge-master":{gender:"male",pitch:.8,rate:.88},oracle:{gender:"female",pitch:1,rate:.92},architect:{gender:"male",pitch:.85,rate:.85},aegis:{gender:"female",pitch:1.1,rate:1.15},pixel:{gender:"female",pitch:1.18,rate:1.05},ember:{gender:"male",pitch:.92,rate:1.02},anvil:{gender:"male",pitch:1,rate:1.05},furnace:{gender:"male",pitch:.88,rate:1},crucible:{gender:"female",pitch:1.02,rate:.98},temper:{gender:"male",pitch:.95,rate:.9},scribe:{gender:"female",pitch:1.05,rate:.88},herald:{gender:"male",pitch:1,rate:1.12},loki:{gender:"male",pitch:1.12,rate:1.08},system:{gender:"female",pitch:1,rate:1}},Ko={gender:"male",pitch:1,rate:1};let mt=[],yt=[],Fi=!1;const Wo=/female|zira|samantha|victoria|fiona|kate|moira|veena|tessa|karen|susan|linda|heather|allison|ava|nicky|sandy|shelley/i,Yo=/\bmale\b|david|mark|alex|daniel|james|richard|george|thomas|reed|fred|ralph|bruce|lee/i;function Ls(){if(!("speechSynthesis"in window))return;const e=window.speechSynthesis.getVoices();if(e.length===0)return;const t=e.filter(s=>s.lang.startsWith("en")),n=t.length>0?t:e;yt=n.filter(s=>Wo.test(s.name)),mt=n.filter(s=>Yo.test(s.name)),yt.length===0&&mt.length===0?(mt=n.filter((s,i)=>i%2===0),yt=n.filter((s,i)=>i%2===1)):(yt.length===0&&(yt=mt),mt.length===0&&(mt=yt)),Fi=!0}function zo(e,t){const n=t==="female"?yt:mt;if(n.length===0)return null;let s=0;for(const i of e)s=s*31+i.charCodeAt(0)&4294967295;return n[Math.abs(s)%n.length]}let wt=null;async function Xo(){if(wt!==null)return wt;try{const e=await fetch("/api/tts?text=ok&agent=system");wt=e.ok,e.ok&&e.blob().catch(()=>{})}catch{wt=!1}return wt}let Mt=[],Vn=!1,Ht=null;function Os(){if(Vn||Mt.length===0)return;const e=Mt.shift();Vn=!0,Jn.set(!0);const t=()=>{Vn=!1,Ht=null,Jn.set(Mt.length>0),Os()};e.audio?(Ht=e.audio,e.audio.onended=t,e.audio.onerror=t,e.audio.play().catch(t)):(e.utt.onend=t,e.utt.onerror=t,window.speechSynthesis.speak(e.utt))}function Ri(){Mt=[],Ht&&(Ht.pause(),Ht.src="",Ht=null),"speechSynthesis"in window&&window.speechSynthesis.cancel(),Vn=!1,Jn.set(!1)}async function lt(e,t="system",n=!1){if(!Re(ln)||!e||!e.trim()||(n&&Ri(),Mt.length>=4))return;const s=t.toLowerCase();if(await Xo().catch(()=>!1))try{const a=new URLSearchParams({text:e.trim(),agent:s}),c=await fetch(`/api/tts?${a}`);if(c.ok){const u=await c.blob(),_=new Audio(URL.createObjectURL(u));Mt.push({audio:_}),Os();return}wt=!1}catch{wt=!1}if(!("speechSynthesis"in window))return;Fi||Ls();const r=Oi[s]||Ko,o=zo(s,r.gender),l=new SpeechSynthesisUtterance(e);l.pitch=r.pitch,l.rate=r.rate,l.volume=1,o&&(l.voice=o),Mt.push({utt:l}),Os()}function Jo(){Ri()}function Zo(){ln.update(e=>{e&&Jo();const t=!e;return typeof localStorage<"u"&&localStorage.setItem(Ni,"true"),t})}const Qo=Object.keys(Oi);function el(e){if(e!=null&&e.agent)return e.agent.toLowerCase();const t=`${(e==null?void 0:e.title)||""} ${(e==null?void 0:e.message)||""}`.toLowerCase();for(const n of Qo)if(t.includes(n))return n;return"system"}typeof window<"u"&&"speechSynthesis"in window&&(window.speechSynthesis.getVoices().length>0?Ls():window.speechSynthesis.addEventListener("voiceschanged",Ls,{once:!0}));const bt={RECONNECT_DELAY:3e3,RECONNECT_MAX_DELAY:3e4,MIN_LOADING_TIME:300},Kt=G(!1),Pi=G(null),rr=G(!1);let be=null,Wt=0,_t=null;function tl(){return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/ws`}function ir(){be&&be.readyState===WebSocket.OPEN||(be=new WebSocket(tl()),be.onopen=()=>{Kt.set(!0),Wt=0,rr.set(!1),Yt()},be.onmessage=e=>{try{const t=JSON.parse(e.data);sl(t)}catch(t){console.error("Failed to parse WebSocket message:",t)}},be.onclose=()=>{Kt.set(!1),nl()},be.onerror=e=>{console.error("WebSocket error:",e),Kt.set(!1)})}function nl(){_t&&clearTimeout(_t);const e=Math.min(bt.RECONNECT_DELAY*Math.pow(2,Wt),bt.RECONNECT_MAX_DELAY);Wt++,Wt>3&&rr.set(!0),_t=setTimeout(ir,e)}function sl(e){var t,n;switch(e.event||e.type){case"task-created":case"task-updated":case"task-status-changed":cn(),e.task&&(ds({type:"info",title:"Task Updated",message:`${e.task.id}: ${e.task.title||"Status changed"}`}),lt(`Task updated. ${e.task.title||e.task.id}`,"forge-master"));break;case"agent-status-changed":ls(),e.agent&&e.status&<(`${e.agent} is now ${e.status}.`,e.agent);break;case"issue-detected":wn(),ds({type:"warning",title:"New Issue Detected",message:((t=e.issue)==null?void 0:t.title)||"Check the Issues panel"}),lt(`Issue detected. ${((n=e.issue)==null?void 0:n.title)||"Check the issues panel."}`,"aegis");break;case"dispatch-success":cn(),wn(),lt("Task dispatched.","forge-master");break;case"notification":{const s=e.notification;ds(s);const i=el(s);lt((s==null?void 0:s.message)||(s==null?void 0:s.title)||"",i);break}case"heartbeat":Bi();break;case"connected":case"pong":case"subscribed":break;default:console.log("Unknown WebSocket message:",e)}}function Bi(){Pi.set(new Date().toISOString())}function ps(){Wt=0,_t&&clearTimeout(_t),ir()}async function cn(){const e=Date.now();Pn.set(!0),Is.set(null);try{const t=await Vo(),n=Date.now()-e;if(n<bt.MIN_LOADING_TIME&&await new Promise(s=>setTimeout(s,bt.MIN_LOADING_TIME-n)),t&&(t.pending||t["in-progress"]||t.review||t.completed)){const s=[...(t.pending||[]).map(i=>({...i,status:i.status==="unknown"?"pending":i.status})),...(t["in-progress"]||[]).map(i=>({...i,status:i.status==="unknown"?"in-progress":i.status})),...(t.review||[]).map(i=>({...i,status:i.status==="unknown"?"review":i.status})),...(t.completed||[]).map(i=>({...i,status:i.status==="unknown"?"completed":i.status}))];Xn.set(s)}else Xn.set(t.tasks||t||[]);Pn.set(!1)}catch(t){console.error("Failed to fetch tasks:",t),Is.set(t.message),Pn.set(!1)}}async function ls(){const e=Date.now();Bn.set(!0),Ds.set(null);try{const t=await Ho(),n=Date.now()-e;n<bt.MIN_LOADING_TIME&&await new Promise(s=>setTimeout(s,bt.MIN_LOADING_TIME-n)),Ii.set(t.agents||t||[]),Bn.set(!1)}catch(t){console.error("Failed to fetch agents:",t),Ds.set(t.message),Bn.set(!1)}}async function wn(){const e=Date.now();Un.set(!0),Ms.set(null);try{const t=await qo(),n=Date.now()-e;n<bt.MIN_LOADING_TIME&&await new Promise(s=>setTimeout(s,bt.MIN_LOADING_TIME-n)),is.set(t.issues||t||[]),Un.set(!1)}catch(t){console.error("Failed to fetch issues:",t),Ms.set(t.message),Un.set(!1)}}async function Yt(){await Promise.all([cn(),ls(),wn()]),Bi()}let mn=null;function rl(){mn||(mn=setInterval(()=>{Re(Kt)||Yt()},3e4))}function il(){mn&&(clearInterval(mn),mn=null)}function al(){_t&&(clearTimeout(_t),_t=null),il(),be&&(be.onclose=null,be.onerror=null,be.onmessage=null,be.onopen=null,be.close(),be=null),Kt.set(!1),Wt=0}const _n=G(null),Fs=G(-1),Ui=G("tasks"),cs=G(!1);function ol(e){_n.set(e),Fs.set(-1)}function ji(e){Ui.set(e)}function Hn(){cs.set(!0)}function Bt(){cs.set(!1)}var ll=pn('<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path><path d="M19.07 4.93a10 10 0 0 1 0 14.14"></path></svg>'),cl=pn('<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line></svg>'),ul=D('<header class="header" role="banner"><div class="header-left"><button class="logo-btn" aria-label="Refresh dashboard"><span class="logo-icon" aria-hidden="true">⚒</span> <span class="logo-text">VIBE FORGE DASHBOARD</span></button></div> <div class="header-right"><button id="voice-toggle"><!></button> <button id="theme-toggle" class="header-btn" aria-label="Toggle dark/light mode" title="Toggle theme (t)"><svg class="icon sun-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg> <svg class="icon moon-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></button></div></header>');function fl(e,t){ue(t,!1);const n=()=>z(ln,"$voiceEnabled",i),s=()=>z(Jn,"$voiceSpeaking",i),[i,r]=je();let o=!1;function l(){Re(ln)&&!o&&(o=!0,lt("Forge team online. Ready.","forge-master"))}Zs(()=>{const T=()=>{l(),document.removeEventListener("click",T,{capture:!0})};return document.addEventListener("click",T,{capture:!0}),()=>document.removeEventListener("click",T,{capture:!0})});function a(){Zo(),n()&&!o&&(o=!0,setTimeout(()=>lt("Forge team online. Ready.","forge-master"),50))}he();var c=ul(),u=b(c),_=b(u);_.__click=function(...T){Yt==null||Yt.apply(this,T)};var f=w(u,2),v=b(f);let k;v.__click=a;var S=b(v);{var g=T=>{var x=ll();$(T,x)},E=T=>{var x=cl();$(T,x)};q(S,T=>{n()?T(g):T(E,!1)})}var I=w(v,2);I.__click=function(...T){Rn==null||Rn.apply(this,T)},J(()=>{k=ee(v,1,"header-btn",null,k,{active:n(),speaking:s()}),ye(v,"aria-label",n()?"Disable agent voices":"Enable agent voices"),ye(v,"title",n()?"Agent voices on (click to mute)":"Enable agent voices")}),$(e,c),fe(),r()}ke(["click"]);function un(e){if(!e)return"--";const t=new Date(e),s=new Date-t,i=Math.floor(s/1e3),r=Math.floor(i/60),o=Math.floor(r/60),l=Math.floor(o/24);return i<60?"just now":r<60?`${r} min ago`:o<24?`${o}h ago`:l===1?"Yesterday":l<7?`${l} days ago`:t.toLocaleDateString()}function Mr(e,t=30){return!e||e.length<=t?e:e.slice(0,t)+"..."}function Vi(e){return e?String(e).replace(/[^a-zA-Z0-9-_]/g,""):""}function Rs(e){return e?e.charAt(0).toUpperCase()+e.slice(1):""}var dl=D('<div class="connection-banner" role="alert" aria-live="assertive"><span class="banner-icon">!</span> <span class="banner-text">Connection Lost - Dashboard cannot reach the forge server. Check if the daemon is running.</span> <button class="banner-retry">Retry</button></div>'),vl=D('<!> <footer class="footer" role="contentinfo"><div class="footer-left"><span class="connection-status"><span aria-hidden="true"></span> <span> </span></span> <span class="separator">|</span> <span> </span></div> <div class="footer-right"><span>Vibe Forge v0.1.0</span> <button class="keyboard-help-btn" aria-label="Keyboard shortcuts (?)">?</button></div></footer>',1);function pl(e,t){ue(t,!1);const n=()=>z(Kt,"$wsConnected",r),s=()=>z(Pi,"$lastUpdated",r),i=()=>z(rr,"$showConnectionBanner",r),[r,o]=je(),l=K(),a=K();Q(()=>n(),()=>{P(l,n()?"Connected":"Disconnected")}),Q(()=>(s(),un),()=>{P(a,s()?un(s()):"--")}),Ft(),he();var c=vl(),u=ce(c);{var _=m=>{var A=dl(),F=w(b(A),4);F.__click=function(...M){ps==null||ps.apply(this,M)},$(m,A)};q(u,m=>{i()&&m(_)})}var f=w(u,2),v=b(f),k=b(v),S=b(k);let g;var E=w(S,2),I=b(E),T=w(k,4),x=b(T),y=w(v,2),h=w(b(y),2);h.__click=function(...m){Hn==null||Hn.apply(this,m)},J(()=>{g=ee(S,1,"status-dot",null,g,{connected:n(),disconnected:!n()}),L(I,d(l)),L(x,`Last updated: ${d(a)??""}`)}),$(e,c),fe(),o()}ke(["click"]);const hl=5e3,ar=G([]);function Hi({type:e="info",title:t,message:n,actions:s=[],duration:i=hl}){const r=`toast-${Date.now()}`,o={id:r,type:e,title:t,message:n,actions:s};return ar.update(l=>[...l,o]),i>0&&setTimeout(()=>{Ps(r)},i),r}function Ps(e){ar.update(t=>t.filter(n=>n.id!==e))}var _l=D('<span class="task-agent"><span> </span></span>'),gl=D('<div tabindex="0" role="button"><div class="task-card-header"><span></span> <span class="task-id"> </span></div> <div class="task-title"> </div> <div class="task-meta"><!> <span class="task-time"> </span></div> <div class="task-expanded-content"><div class="task-description"> </div> <div class="task-actions"><button class="btn btn-secondary task-view-btn">View File</button></div></div></div>');function bl(e,t){ue(t,!1);const n=()=>z(sr,"$selectedTaskId",s),[s,i]=je(),r=K(),o=K(),l=K();let a=rs(t,"task",8);function c(){Cs(a().id)}function u(V){(V.key==="Enter"||V.key===" ")&&(V.preventDefault(),Cs(a().id))}function _(V){V.stopPropagation(),Hi({type:"info",title:"View Task",message:`Open tasks/pending/${a().id}.md in your editor`})}Q(()=>O(a()),()=>{P(r,Vi((a().priority||"medium").toLowerCase()))}),Q(()=>O(a()),()=>{P(o,Gt(a().assigned_to||a().assignee))}),Q(()=>(n(),O(a())),()=>{P(l,n()===a().id)}),Ft(),he();var f=gl();let v;f.__click=c,f.__keydown=u;var k=b(f),S=b(k),g=w(S,2),E=b(g),I=w(k,2),T=b(I),x=w(I,2),y=b(x);{var h=V=>{var W=_l(),ne=b(W),Te=b(ne);J(Je=>{ee(ne,1,`agent-badge ${d(o),C(()=>d(o).color)??""}`),L(Te,`@${Je??""}`)},[()=>(d(o),C(()=>d(o).short.toLowerCase()))]),$(V,W)};q(y,V=>{d(o)&&V(h)})}var m=w(y,2),A=b(m),F=w(x,2),M=b(F),N=b(M),j=w(M,2),Z=b(j);Z.__click=_,J((V,W)=>{v=ee(f,1,"card task-card",null,v,{expanded:d(l)}),ye(f,"data-task-id",(O(a()),C(()=>a().id))),ye(f,"aria-expanded",d(l)),ee(S,1,`priority-dot ${d(r)??""}`),ye(S,"title",`${O(a()),C(()=>a().priority||"medium")??""} priority`),L(E,(O(a()),C(()=>a().id))),ye(I,"title",(O(a()),C(()=>a().title))),L(T,V),L(A,W),L(N,(O(a()),C(()=>a().description||"No description provided.")))},[()=>(O(Mr),O(a()),C(()=>Mr(a().title,40))),()=>(O(un),O(a()),C(()=>un(a().updated_at||a().created_at)))]),$(e,f),fe(),i()}ke(["click","keydown"]);var ml=D('<button role="tab"> <span class="filter-count"> </span></button>'),yl=D('<div class="loading-state"><div class="skeleton-card"></div> <div class="skeleton-card"></div> <div class="skeleton-card"></div></div>'),wl=D('<div class="error-state"><div class="error-icon" aria-hidden="true">!</div> <p class="error-title">Failed to load tasks</p> <p class="error-message"> </p> <button class="btn btn-secondary">Retry</button></div>'),kl=D('<div class="empty-state"><div class="empty-icon" aria-hidden="true">✓</div> <p class="empty-title">All caught up!</p> <p class="empty-subtitle">No pending tasks</p></div>'),El=D('<div id="tasks-list" class="panel-content tasks-list" role="tabpanel" aria-busy="false"></div>'),xl=D('<section id="tasks-panel" class="panel tasks-panel" aria-labelledby="tasks-heading" tabindex="-1"><div class="panel-header"><h2 id="tasks-heading" class="panel-title">TASKS</h2> <button aria-label="Refresh tasks"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 4v6h-6M1 20v-6h6"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg></button></div> <div class="tasks-filters" role="tablist" aria-label="Task status filters"></div> <!></section>');function Sl(e,t){ue(t,!1);const n=()=>z(nr,"$currentTaskFilter",l),s=()=>z(Oo,"$taskCounts",l),i=()=>z(Pn,"$tasksLoading",l),r=()=>z(Is,"$tasksError",l),o=()=>z(Lo,"$filteredTasks",l),[l,a]=je();let c=K(!1);async function u(){P(c,!0),await cn(),P(c,!1)}function _(y){Fo(y)}const f=[{id:"pending",label:"Pending",countKey:"pending"},{id:"in-progress",label:"Progress",countKey:"in-progress"},{id:"review",label:"Review",countKey:"review"},{id:"done",label:"Done",countKey:"done"}];he();var v=xl(),k=b(v),S=w(b(k),2);let g;S.__click=u;var E=w(k,2);Ue(E,5,()=>f,ss,(y,h)=>{var m=ml();let A;m.__click=()=>_(d(h).id);var F=b(m),M=w(F),N=b(M);J(()=>{A=ee(m,1,"filter-tab",null,A,{active:n()===d(h).id}),ye(m,"aria-selected",n()===d(h).id),ye(m,"data-filter",d(h).id),L(F,`${d(h).label??""} `),L(N,s()[d(h).countKey])}),$(y,m)});var I=w(E,2);{var T=y=>{var h=yl();$(y,h)},x=y=>{var h=Be(),m=ce(h);{var A=M=>{var N=wl(),j=w(b(N),4),Z=b(j),V=w(j,2);V.__click=u,J(()=>L(Z,r())),$(M,N)},F=M=>{var N=Be(),j=ce(N);{var Z=W=>{var ne=kl();$(W,ne)},V=W=>{var ne=El();Ue(ne,5,o,Te=>Te.id,(Te,Je)=>{bl(Te,{get task(){return d(Je)}})}),$(W,ne)};q(j,W=>{o().length===0?W(Z):W(V,!1)},!0)}$(M,N)};q(m,M=>{r()?M(A):M(F,!1)},!0)}$(y,h)};q(I,y=>{i()?y(T):y(x,!1)})}J(()=>g=ee(S,1,"panel-refresh",null,g,{loading:d(c)})),$(e,v),fe(),a()}ke(["click"]);var Tl=D('<div class="agent-task"> </div>'),Al=D('<div class="agent-progress"><div class="agent-progress-bar"></div></div>'),$l=D('<div class="card agent-card" tabindex="0" role="button"><div> </div> <div class="agent-info"><div class="agent-name"> </div> <div class="agent-status"><span></span> <span> </span></div> <!> <!></div></div>');function Il(e,t){ue(t,!1);const n=K(),s=K(),i=K();let r=rs(t,"agent",8);const o={"planning-hub":"Planning Hub online. The forge council is assembled — what needs building today?",oracle:"Oracle here. Before we build anything, let's make sure we're solving the right problem.",architect:"Architect online. Systems designed, patterns ready — what are we building?",aegis:"Aegis is here. What needs securing?",pixel:"Pixel reporting in. Let's make something people actually enjoy using.",ember:"Ember online. Infrastructure's ready — what needs shipping?",anvil:"Anvil here. Give me a component and I'll build it.",furnace:"Furnace is online. Backend's fired up — what are we building?",crucible:"Crucible here. I'll find the bugs before your users do. What are we testing?",temper:"Temper here. Send the PR when it's ready — I'll review it.",scribe:"Scribe online. What needs documenting?",herald:"Herald here. Ready to cut a release — what are we shipping?","forge-master":"Forge Master online. All systems go — what's on the anvil?",loki:"Loki here. So... are you sure you're solving the right problem?"};function l(){const h=(r().agent||r().name||r().id||"").toLowerCase(),m=o[h]||`${r().displayName||h} online.`;lt(m,h,!0)}Q(()=>O(r()),()=>{P(n,Gt(r().agent||r().name||r().id))}),Q(()=>O(r()),()=>{P(s,(r().status||"offline").toLowerCase())}),Q(()=>d(s),()=>{P(i,Rs(d(s)))}),Ft(),he();var a=$l();a.__click=l,a.__keydown=h=>(h.key==="Enter"||h.key===" ")&&l();var c=b(a),u=b(c),_=w(c,2),f=b(_),v=b(f),k=w(f,2),S=b(k),g=w(S,2),E=b(g),I=w(k,2);{var T=h=>{var m=Tl(),A=b(m);J(()=>L(A,(O(r()),C(()=>r().task)))),$(h,m)};q(I,h=>{O(r()),C(()=>r().task)&&h(T)})}var x=w(I,2);{var y=h=>{var m=Al(),A=b(m);J(()=>To(A,`width: ${O(r()),C(()=>r().progress)??""}%`)),$(h,m)};q(x,h=>{O(r()),C(()=>r().progress!==void 0)&&h(y)})}J(()=>{ye(a,"aria-label",`Hear ${O(r()),C(()=>r().displayName||r().agent)??""} greeting`),ee(c,1,`agent-avatar ${d(n),C(()=>{var h;return((h=d(n))==null?void 0:h.color)||""})??""}`),L(u,(O(r()),d(n),C(()=>{var h;return r().icon||((h=d(n))==null?void 0:h.icon)||"?"}))),L(v,(O(r()),d(n),C(()=>{var h;return r().displayName||((h=d(n))==null?void 0:h.name)||r().name||r().id||"Unknown"}))),ee(S,1,`status-indicator ${d(s)??""}`),L(E,d(i))}),$(e,a),fe()}ke(["click","keydown"]);var Cl=D('<div class="loading-state"><div class="skeleton-card"></div> <div class="skeleton-card"></div> <div class="skeleton-card"></div></div>'),Dl=D('<div class="error-state"><div class="error-icon" aria-hidden="true">!</div> <p class="error-title">Failed to load agents</p> <p class="error-message"> </p> <button class="btn btn-secondary">Retry</button></div>'),Ml=D('<div class="empty-state"><div class="empty-icon" aria-hidden="true">☽</div> <p class="empty-title">All agents idle</p> <p class="empty-subtitle">Ready when you are</p></div>'),Nl=D('<div id="agents-list" class="panel-content agents-list" aria-busy="false"></div>'),Ll=D('<section id="agents-panel" class="panel agents-panel" aria-labelledby="agents-heading" tabindex="-1"><div class="panel-header"><h2 id="agents-heading" class="panel-title">AGENTS</h2> <button aria-label="Refresh agents"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 4v6h-6M1 20v-6h6"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg></button></div> <!></section>');function Ol(e,t){ue(t,!1);const n=()=>z(Bn,"$agentsLoading",r),s=()=>z(Ds,"$agentsError",r),i=()=>z(Ii,"$agents",r),[r,o]=je();let l=K(!1);async function a(){P(l,!0),await ls(),P(l,!1)}he();var c=Ll(),u=b(c),_=w(b(u),2);let f;_.__click=a;var v=w(u,2);{var k=g=>{var E=Cl();$(g,E)},S=g=>{var E=Be(),I=ce(E);{var T=y=>{var h=Dl(),m=w(b(h),4),A=b(m),F=w(m,2);F.__click=a,J(()=>L(A,s())),$(y,h)},x=y=>{var h=Be(),m=ce(h);{var A=M=>{var N=Ml();$(M,N)},F=M=>{var N=Nl();Ue(N,5,i,j=>j.id||j.name,(j,Z)=>{Il(j,{get agent(){return d(Z)}})}),$(M,N)};q(m,M=>{i().length===0?M(A):M(F,!1)},!0)}$(y,h)};q(I,y=>{s()?y(T):y(x,!1)},!0)}$(g,E)};q(v,g=>{n()?g(k):g(S,!1)})}J(()=>f=ee(_,1,"panel-refresh",null,f,{loading:d(l)})),$(e,c),fe(),o()}ke(["click"]);var Fl=D('<div class="notification-desc"> </div>'),Rl=D('<button class="btn btn-secondary"> </button>'),Pl=D('<div class="notification-actions"></div>'),Bl=D('<div class="card notification-card" tabindex="0"><div> </div> <div class="notification-content"><div class="notification-title"> </div> <!> <div class="notification-time"> </div> <!></div> <button class="notification-dismiss" aria-label="Dismiss notification">×</button></div>');function hs(e,t){ue(t,!1);const n=K(),s=K(),i=K();let r=rs(t,"notification",8);const o={success:"✓",info:"i",warning:"!",attention:"🔔",error:"✗"};function l(h){h.stopPropagation(),Dr(r().id)}function a(h,m,A){h.stopPropagation(),console.log("Notification action:",m,r().id),Dr(r().id)}Q(()=>O(r()),()=>{P(n,r().type||"info")}),Q(()=>d(n),()=>{P(s,Vi(d(n)))}),Q(()=>d(n),()=>{P(i,o[d(n)]||"i")}),Ft(),he();var c=Bl(),u=b(c),_=b(u),f=w(u,2),v=b(f),k=b(v),S=w(v,2);{var g=h=>{var m=Fl(),A=b(m);J(()=>L(A,(O(r()),C(()=>r().message)))),$(h,m)};q(S,h=>{O(r()),C(()=>r().message)&&h(g)})}var E=w(S,2),I=b(E),T=w(E,2);{var x=h=>{var m=Pl();Ue(m,5,()=>(O(r()),C(()=>r().actions)),ss,(A,F,M)=>{var N=Rl();N.__click=Z=>a(Z,d(F).action);var j=b(N);J(()=>L(j,(d(F),C(()=>d(F).label)))),$(A,N)}),$(h,m)};q(T,h=>{O(r()),C(()=>r().actions&&r().actions.length>0)&&h(x)})}var y=w(f,2);y.__click=l,J(h=>{ye(c,"data-notification-id",(O(r()),C(()=>r().id))),ee(u,1,`notification-icon ${d(s)??""}`),L(_,d(i)),L(k,(O(r()),C(()=>r().title))),L(I,h)},[()=>(O(un),O(r()),C(()=>un(r().timestamp||r().created_at)))]),$(e,c),fe()}ke(["click"]);var Ul=D('<div class="empty-state"><div class="empty-icon" aria-hidden="true">🔔</div> <p class="empty-title">Quiet day!</p> <p class="empty-subtitle">No notifications</p></div>'),jl=D('<div class="notification-group-header">Today</div> <!>',1),Vl=D('<div class="notification-group-header">Yesterday</div> <!>',1),Hl=D('<div class="notification-group-header">Earlier</div> <!>',1),ql=D('<div id="notifications-list" class="panel-content notifications-list" role="log" aria-live="polite" aria-busy="false"><!> <!> <!></div>'),Gl=D('<section id="notifications-panel" class="panel notifications-panel" aria-labelledby="notifications-heading" tabindex="-1"><div class="panel-header"><h2 id="notifications-heading" class="panel-title">NOTIFICATIONS</h2> <button class="panel-clear" aria-label="Clear all notifications">Clear</button></div> <!></section>');function Kl(e,t){ue(t,!1);const n=()=>z(In,"$notifications",i),s=()=>z(Uo,"$groupedNotifications",i),[i,r]=je();he();var o=Gl(),l=b(o),a=w(b(l),2);a.__click=function(...f){vs==null||vs.apply(this,f)};var c=w(l,2);{var u=f=>{var v=Ul();$(f,v)},_=f=>{var v=ql(),k=b(v);{var S=x=>{var y=jl(),h=w(ce(y),2);Ue(h,1,()=>s().today,m=>m.id,(m,A)=>{hs(m,{get notification(){return d(A)}})}),$(x,y)};q(k,x=>{s().today.length>0&&x(S)})}var g=w(k,2);{var E=x=>{var y=Vl(),h=w(ce(y),2);Ue(h,1,()=>s().yesterday,m=>m.id,(m,A)=>{hs(m,{get notification(){return d(A)}})}),$(x,y)};q(g,x=>{s().yesterday.length>0&&x(E)})}var I=w(g,2);{var T=x=>{var y=Hl(),h=w(ce(y),2);Ue(h,1,()=>s().older,m=>m.id,(m,A)=>{hs(m,{get notification(){return d(A)}})}),$(x,y)};q(I,x=>{s().older.length>0&&x(T)})}$(f,v)};q(c,f=>{n().length===0?f(u):f(_,!1)})}$(e,o),fe(),r()}ke(["click"]);var Wl=D('<div class="card issue-card" tabindex="0"><div> </div> <div class="issue-content"><div class="issue-header"><span> </span> <span class="issue-title"> </span></div> <div class="issue-details"> </div> <div class="issue-meta"> </div></div> <div class="issue-dispatch"><button class="btn btn-dispatch"><span class="btn-text"> </span> <span class="btn-arrow">»</span></button></div></div>');function Yl(e,t){ue(t,!1);const n=K(),s=K();let i=rs(t,"issue",8);function r(m){m.stopPropagation(),Di(i())}Q(()=>O(i()),()=>{P(n,Ns(i().category))}),Q(()=>O(i()),()=>{P(s,Gt(i().agent))}),Ft(),he();var o=Wl(),l=b(o),a=b(l),c=w(l,2),u=b(c),_=b(u),f=b(_),v=w(_,2),k=b(v),S=w(u,2),g=b(S),E=w(S,2),I=b(E),T=w(c,2),x=b(T);x.__click=r;var y=b(x),h=b(y);J(()=>{ye(o,"data-issue-id",(O(i()),C(()=>i().id))),ee(l,1,`issue-category ${O(i()),C(()=>i().category)??""}`),L(a,(d(n),C(()=>d(n).icon))),ee(_,1,`issue-badge ${O(i()),C(()=>i().category)??""}`),L(f,(d(n),C(()=>d(n).label))),L(k,(O(i()),C(()=>i().title))),L(g,(O(i()),C(()=>i().details))),L(I,(O(i()),C(()=>i().meta))),L(h,`Dispatch ${d(s),C(()=>d(s)?d(s).short:"Agent")??""}`)}),$(e,o),fe()}ke(["click"]);var zl=D('<div class="loading-state"><div class="skeleton-issue"></div> <div class="skeleton-issue"></div></div>'),Xl=D('<div class="error-state"><div class="error-icon" aria-hidden="true">!</div> <p class="error-title">Failed to load issues</p> <p class="error-message"> </p> <button class="btn btn-secondary">Retry</button></div>'),Jl=D('<div class="empty-state celebration"><div class="empty-icon" aria-hidden="true">🎉</div> <p class="empty-title">Everything looks great!</p> <p class="empty-subtitle">No stale docs, failing tests, or security issues</p></div>'),Zl=D('<div id="issues-list" class="panel-content issues-list" aria-busy="false"></div>'),Ql=D('<section id="issues-panel" aria-labelledby="issues-heading" tabindex="-1"><div class="panel-header"><h2 id="issues-heading" class="panel-title">ISSUES <span class="panel-subtitle">(Actionable)</span></h2> <div class="panel-actions"><button aria-label="Refresh issues"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M23 4v6h-6M1 20v-6h6"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg></button> <button class="panel-collapse" aria-label="Collapse issues panel"><svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="18 15 12 9 6 15"></polyline></svg></button></div></div> <!></section>');function ec(e,t){ue(t,!1);const n=()=>z(Ci,"$issuesCollapsed",o),s=()=>z(Un,"$issuesLoading",o),i=()=>z(Ms,"$issuesError",o),r=()=>z(is,"$issues",o),[o,l]=je();let a=K(!1);async function c(){P(a,!0),await wn(),P(a,!1)}he();var u=Ql();let _;var f=b(u),v=w(b(f),2),k=b(v);let S;k.__click=c;var g=w(k,2);g.__click=function(...x){fs==null||fs.apply(this,x)};var E=w(f,2);{var I=x=>{var y=zl();$(x,y)},T=x=>{var y=Be(),h=ce(y);{var m=F=>{var M=Xl(),N=w(b(M),4),j=b(N),Z=w(N,2);Z.__click=c,J(()=>L(j,i())),$(F,M)},A=F=>{var M=Be(),N=ce(M);{var j=V=>{var W=Jl();$(V,W)},Z=V=>{var W=Zl();Ue(W,5,r,ne=>ne.id,(ne,Te)=>{Yl(ne,{get issue(){return d(Te)}})}),$(V,W)};q(N,V=>{r().length===0?V(j):V(Z,!1)},!0)}$(F,M)};q(h,F=>{i()?F(m):F(A,!1)},!0)}$(x,y)};q(E,x=>{s()?x(I):x(T,!1)})}J(()=>{_=ee(u,1,"panel issues-panel",null,_,{collapsed:n()}),S=ee(k,1,"panel-refresh",null,S,{loading:d(a)})}),$(e,u),fe(),l()}ke(["click"]);var tc=D('<div class="modal-error"><span class="error-icon">!</span> <span class="error-text"> </span></div>'),nc=D('<div class="modal" role="dialog" aria-labelledby="dispatch-modal-title" aria-modal="true"><div class="modal-backdrop"></div> <div class="modal-content"><div class="modal-header"><h3 id="dispatch-modal-title" class="modal-title">Dispatch Task to <span> </span></h3> <button class="modal-close" aria-label="Close modal">×</button></div> <div class="modal-body"><div class="dispatch-info"><div class="info-row"><span class="info-label">Issue:</span> <span class="info-value"> </span></div> <div class="info-row"><span class="info-label">Target:</span> <span class="info-value"> </span></div> <div class="info-row"><span class="info-label">Reason:</span> <span class="info-value"> </span></div></div> <div class="dispatch-preview"><p class="preview-label">This will create a new task:</p> <div class="task-preview"><div class="preview-id"> </div> <div class="preview-title"> </div> <div class="preview-meta"><span>Assigned to: <strong> </strong></span> <span>Priority: <strong> </strong></span></div></div></div></div> <div class="modal-footer"><button class="btn btn-secondary">Cancel</button> <button><span>Confirm Dispatch</span> <span></span></button></div> <!></div></div>');function sc(e,t){ue(t,!1);const n=()=>z(as,"$pendingDispatch",r),s=()=>z(jn,"$dispatchLoading",r),i=()=>z(bn,"$dispatchError",r),[r,o]=je(),l=K(),a=K(),c=K(),u=K(),_=K();let f=K(),v=K(null);async function k(){var x;if(d(l)){jn.set(!0),bn.set(null);try{const y=await Go(d(l)),h=d(l).id,m=d(l).agent;Ve(),Bo(h),Hi({type:"success",title:"Task dispatched!",message:`${y.taskId||"Task"} assigned to ${((x=Gt(m))==null?void 0:x.name)||"agent"}`}),cn()}catch(y){jn.set(!1),bn.set("Failed to dispatch task. Please try again."),console.error("Dispatch error:",y)}}}function S(){Ve()}function g(x){if(x.key==="Escape"&&Ve(),x.key==="Tab"&&d(f)){const y=d(f).querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(y.length===0){x.preventDefault();return}const h=y[0],m=y[y.length-1];x.shiftKey?document.activeElement===h&&(x.preventDefault(),m.focus()):document.activeElement===m&&(x.preventDefault(),h.focus())}}Qs(()=>{d(v)&&d(v).focus()}),Q(()=>n(),()=>{P(l,n())}),Q(()=>(d(l),Gt),()=>{P(a,d(l)?Gt(d(l).agent):null)}),Q(()=>(d(l),Ns),()=>{P(c,d(l)?Ns(d(l).category):null)}),Q(()=>(d(l),Cr),()=>{P(u,d(l)?Cr():"")}),Q(()=>d(l),()=>{P(_,d(l)?`Fix: ${d(l).title}`:"")}),Q(()=>(d(l),d(f)),()=>{d(l)&&d(f)&&(P(v,document.activeElement),setTimeout(()=>{var y;const x=(y=d(f))==null?void 0:y.querySelector(".btn-secondary");x==null||x.focus()},100))}),Ft(),he();var E=Be(),I=ce(E);{var T=x=>{var y=nc();y.__keydown=g;var h=b(y);h.__click=S;var m=w(h,2),A=b(m),F=b(A),M=w(b(F)),N=b(M),j=w(F,2);j.__click=function(..._e){Ve==null||Ve.apply(this,_e)};var Z=w(A,2),V=b(Z),W=b(V),ne=w(b(W),2),Te=b(ne),Je=w(W,2),Ne=w(b(Je),2),Cn=b(Ne),qi=w(Je,2),Gi=w(b(qi),2),Ki=b(Gi),Wi=w(V,2),Yi=w(b(Wi),2),or=b(Yi),zi=b(or),lr=w(or,2),Xi=b(lr),Ji=w(lr,2),cr=b(Ji),Zi=w(b(cr)),Qi=b(Zi),ea=w(cr,2),ta=w(b(ea)),na=b(ta),ur=w(Z,2),fr=b(ur);fr.__click=function(..._e){Ve==null||Ve.apply(this,_e)};var Dn=w(fr,2);let dr;Dn.__click=k;var vr=b(Dn);let pr;var sa=w(vr,2);let hr;var ra=w(ur,2);{var ia=_e=>{var it=tc(),aa=w(b(it),2),oa=b(aa);J(()=>L(oa,i())),$(_e,it)};q(ra,_e=>{i()&&_e(ia)})}Si(y,_e=>P(f,_e),()=>d(f)),J(_e=>{L(N,(d(a),C(()=>{var it;return((it=d(a))==null?void 0:it.name)||"Agent"}))),L(Te,(d(l),C(()=>d(l).title))),L(Cn,(d(l),C(()=>d(l).target))),L(Ki,(d(l),C(()=>d(l).details))),L(zi,d(u)),L(Xi,d(_)),L(Qi,(d(a),C(()=>{var it;return((it=d(a))==null?void 0:it.name)||"Agent"}))),L(na,_e),dr=ee(Dn,1,"btn btn-primary",null,dr,{loading:s()}),Dn.disabled=s(),pr=ee(vr,1,"btn-text svelte-p4t6ev",null,pr,{hidden:s()}),hr=ee(sa,1,"btn-spinner svelte-p4t6ev",null,hr,{hidden:!s()})},[()=>(O(Rs),d(c),C(()=>{var _e;return Rs(((_e=d(c))==null?void 0:_e.priority)||"medium")}))]),$(x,y)};q(I,x=>{d(l)&&x(T)})}$(e,E),fe(),o()}ke(["keydown","click"]);var rc=D('<div class="modal" role="dialog" aria-labelledby="keyboard-modal-title" aria-modal="true"><div class="modal-backdrop"></div> <div class="modal-content keyboard-help"><div class="modal-header"><h3 id="keyboard-modal-title" class="modal-title">Keyboard Shortcuts</h3> <button class="modal-close" aria-label="Close modal">×</button></div> <div class="modal-body"><div class="shortcut-section"><h4>Navigation</h4> <div class="shortcut-list"><div class="shortcut"><kbd>1</kbd> <kbd>2</kbd> <kbd>3</kbd> <kbd>4</kbd> <span>Focus panels (Tasks, Agents, Notifications, Issues)</span></div> <div class="shortcut"><kbd>j</kbd> / <kbd>k</kbd> <span>Move down / up in list</span></div> <div class="shortcut"><kbd>Enter</kbd> <span>Expand / select item</span></div> <div class="shortcut"><kbd>Escape</kbd> <span>Close / deselect</span></div></div></div> <div class="shortcut-section"><h4>Actions</h4> <div class="shortcut-list"><div class="shortcut"><kbd>d</kbd> <span>Dispatch (on issue)</span></div> <div class="shortcut"><kbd>r</kbd> <span>Refresh current panel</span></div> <div class="shortcut"><kbd>t</kbd> <span>Toggle theme</span></div></div></div> <div class="shortcut-section"><h4>General</h4> <div class="shortcut-list"><div class="shortcut"><kbd>?</kbd> <span>Show this help</span></div> <div class="shortcut"><kbd>Tab</kbd> <span>Next element</span></div> <div class="shortcut"><kbd>Shift</kbd>+<kbd>Tab</kbd> <span>Previous element</span></div></div></div></div></div></div>');function ic(e,t){ue(t,!1);const n=()=>z(cs,"$showKeyboardHelp",s),[s,i]=je();let r=K(),o=K(null);function l(){Bt()}function a(f){if(f.key==="Escape"&&Bt(),f.key==="Tab"&&d(r)){const v=d(r).querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(v.length===0){f.preventDefault();return}const k=v[0],S=v[v.length-1];f.shiftKey?document.activeElement===k&&(f.preventDefault(),S.focus()):document.activeElement===S&&(f.preventDefault(),k.focus())}}Qs(()=>{d(o)&&d(o).focus()}),Q(()=>(n(),d(r)),()=>{n()&&d(r)&&(P(o,document.activeElement),setTimeout(()=>{var v;const f=(v=d(r))==null?void 0:v.querySelector(".modal-close");f==null||f.focus()},100))}),Ft(),he();var c=Be(),u=ce(c);{var _=f=>{var v=rc();v.__keydown=a;var k=b(v);k.__click=l;var S=w(k,2),g=b(S),E=w(b(g),2);E.__click=function(...I){Bt==null||Bt.apply(this,I)},Si(v,I=>P(r,I),()=>d(r)),$(f,v)};q(u,f=>{n()&&f(_)})}$(e,c),fe(),i()}ke(["keydown","click"]);var ac=D('<div class="toast-message"> </div>'),oc=D('<button class="toast-action"> </button>'),lc=D('<div class="toast-actions"></div>'),cc=D('<div><div class="toast-icon"> </div> <div class="toast-content"><div class="toast-title"> </div> <!> <!></div> <button class="toast-close" aria-label="Dismiss">×</button></div>'),uc=D('<div id="toast-container" class="toast-container" role="status" aria-live="polite" aria-atomic="true"></div>');function fc(e,t){ue(t,!1);const n=()=>z(ar,"$toasts",s),[s,i]=je(),r={success:"✓",error:"✗",info:"i",warning:"!"};function o(c,u,_){u.action&&u.action(),Ps(c.id)}function l(c){Ps(c)}he();var a=uc();Ue(a,5,n,c=>c.id,(c,u)=>{var _=cc(),f=b(_),v=b(f),k=w(f,2),S=b(k),g=b(S),E=w(S,2);{var I=h=>{var m=ac(),A=b(m);J(()=>L(A,d(u).message)),$(h,m)};q(E,h=>{d(u).message&&h(I)})}var T=w(E,2);{var x=h=>{var m=lc();Ue(m,5,()=>d(u).actions,ss,(A,F,M)=>{var N=oc();N.__click=()=>o(d(u),d(F));var j=b(N);J(()=>L(j,d(F).label)),$(A,N)}),$(h,m)};q(T,h=>{d(u).actions&&d(u).actions.length>0&&h(x)})}var y=w(k,2);y.__click=()=>l(d(u).id),J(()=>{ee(_,1,`toast ${d(u).type??""}`),ye(_,"id",d(u).id),L(v,r[d(u).type]||"i"),L(g,d(u).title)}),$(c,_)}),$(e,a),fe(),i()}ke(["click"]);var dc=pn('<svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 11l3 3L22 4"></path><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path></svg>'),vc=pn('<svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="8" r="5"></circle><path d="M20 21a8 8 0 0 0-16 0"></path></svg>'),pc=pn('<svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg>'),hc=pn('<svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>'),_c=D('<button role="tab"><!> <span> </span></button>'),gc=D('<nav class="mobile-tabs" role="tablist" aria-label="Panel navigation"></nav>');function bc(e,t){ue(t,!1);const n=()=>z(Ui,"$mobileActivePanel",s),[s,i]=je(),r=[{id:"tasks",label:"Tasks",icon:"M9 11l3 3L22 4M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"},{id:"agents",label:"Agents",icon:"M12 8a5 5 0 1 0 0-10 5 5 0 0 0 0 10zM20 21a8 8 0 0 0-16 0"},{id:"notifications",label:"Notif",icon:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 0 1-3.46 0"},{id:"issues",label:"Issues",icon:"M12 12a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM12 8v4M12 16h.01"}];function o(a){ji(a)}he();var l=gc();Ue(l,5,()=>r,ss,(a,c)=>{var u=_c();let _;u.__click=()=>o(d(c).id);var f=b(u);{var v=E=>{var I=dc();$(E,I)},k=E=>{var I=Be(),T=ce(I);{var x=h=>{var m=vc();$(h,m)},y=h=>{var m=Be(),A=ce(m);{var F=N=>{var j=pc();$(N,j)},M=N=>{var j=Be(),Z=ce(j);{var V=W=>{var ne=hc();$(W,ne)};q(Z,W=>{d(c).id==="issues"&&W(V)},!0)}$(N,j)};q(A,N=>{d(c).id==="notifications"?N(F):N(M,!1)},!0)}$(h,m)};q(T,h=>{d(c).id==="agents"?h(x):h(y,!1)},!0)}$(E,I)};q(f,E=>{d(c).id==="tasks"?E(v):E(k,!1)})}var S=w(f,2),g=b(S);J(()=>{_=ee(u,1,"mobile-tab",null,_,{active:n()===d(c).id}),ye(u,"aria-selected",n()===d(c).id),ye(u,"data-panel",d(c).id),L(g,d(c).label)}),$(a,u)}),$(e,l),fe(),i()}ke(["click"]);var mc=D('<a href="#main-content" class="skip-link">Skip to main content</a> <a href="#tasks-panel" class="skip-link">Skip to tasks</a> <a href="#issues-panel" class="skip-link">Skip to issues</a> <!> <main id="main-content" class="main" role="main"><div class="panels-top"><!> <!> <!></div> <!></main> <!> <!> <!> <!> <!>',1);function yc(e,t){ue(t,!1),Zs(()=>{No(),ir(),rl(),document.addEventListener("keydown",n)}),Qs(()=>{al(),document.removeEventListener("keydown",n)});function n(y){if(y.target.matches("input, textarea, select"))return;const h=Re(as)!==null,m=Re(cs),A=h||m;if(y.key==="Escape"){if(h){Ve();return}if(m){Bt();return}Ro();return}if(!A)switch(y.key){case"1":s("tasks");break;case"2":s("agents");break;case"3":s("notifications");break;case"4":s("issues");break;case"j":case"ArrowDown":i("down"),y.preventDefault();break;case"k":case"ArrowUp":i("up"),y.preventDefault();break;case"Enter":r();break;case"d":o();break;case"r":l();break;case"t":Rn();break;case"?":Hn(),y.preventDefault();break}}function s(y){ol(y),Fs.set(-1);const h=document.getElementById(`${y}-panel`);h==null||h.focus(),window.innerWidth<768&&ji(y)}function i(y){var F,M;const h=Re(_n);if(!h){s("tasks");return}const m=document.getElementById(`${h}-panel`),A=m==null?void 0:m.querySelectorAll(".card");!A||A.length===0||(y==="down"?currentFocusedItemIndex=Math.min(currentFocusedItemIndex+1,A.length-1):currentFocusedItemIndex=Math.max(currentFocusedItemIndex-1,0),Fs.set(currentFocusedItemIndex),A.forEach((N,j)=>{N.classList.toggle("selected",j===currentFocusedItemIndex)}),(F=A[currentFocusedItemIndex])==null||F.scrollIntoView({block:"nearest"}),(M=A[currentFocusedItemIndex])==null||M.focus())}function r(){const y=Re(_n);if(y==="tasks"&¤tFocusedItemIndex>=0){const m=document.querySelectorAll("#tasks-list .task-card")[currentFocusedItemIndex];if(m){const A=m.dataset.taskId;Cs(A)}}else y==="issues"&¤tFocusedItemIndex>=0&&o()}function o(){if(Re(_n)!=="issues")return;const m=document.querySelectorAll("#issues-list .issue-card")[currentFocusedItemIndex];if(m){const A=m.dataset.issueId,M=Re(is).find(N=>N.id===A);M&&Di(M)}}function l(){switch(Re(_n)){case"tasks":cn();break;case"agents":ls();break;case"issues":wn();break;default:Yt()}}he();var a=mc(),c=w(ce(a),6);fl(c,{});var u=w(c,2),_=b(u),f=b(_);Sl(f,{});var v=w(f,2);Ol(v,{});var k=w(v,2);Kl(k,{});var S=w(_,2);ec(S,{});var g=w(u,2);pl(g,{});var E=w(g,2);sc(E,{});var I=w(E,2);ic(I,{});var T=w(I,2);fc(T,{});var x=w(T,2);bc(x,{}),$(e,a),fe()}_o(yc,{target:document.getElementById("app")});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔥</text></svg>">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Vibe Forge Dashboard</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Ze5h0kXQ.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DnfVj9Ce.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|