@polderlabs/bizar 8.1.0 → 9.0.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/worktrees/kanban-overhaul/.claude/CLAUDE.md +15 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/SKILLS.md +109 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/agent-browser.md +80 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/baldr.md +49 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/forseti.md +51 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/frigg.md +42 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/heimdall.md +33 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/hermod.md +53 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/mimir.md +49 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/odin.md +287 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/quick.md +34 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/semble-search.md +50 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/thor.md +53 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/tyr.md +56 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/vidarr.md +54 -0
- package/.claude/worktrees/kanban-overhaul/.claude/agents/vor.md +53 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/audit.md +25 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/bizar.md +22 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/explain.md +17 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/init.md +29 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/learn.md +44 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/plan.md +35 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/plow-through.md +50 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/pr-review.md +49 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/setup-provider.md +96 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/tailscale-serve.md +100 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/team.md +132 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/test.md +62 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/validate.md +68 -0
- package/.claude/worktrees/kanban-overhaul/.claude/commands/visual-plan.md +24 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/README.md +92 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/posttooluse-editwrite.mjs +91 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-bash.mjs +81 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-editwrite.mjs +139 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionend-recall.mjs +74 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionstart-prime.mjs +80 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
- package/.claude/worktrees/kanban-overhaul/.claude/hooks/worker-suggest.mjs +110 -0
- package/.claude/worktrees/kanban-overhaul/.claude/settings.json +125 -0
- package/.claude/worktrees/kanban-overhaul/.claude/settings.local.json +8 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-chat/SKILL.md +73 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-embeddings/SKILL.md +69 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-image/SKILL.md +86 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-stt/SKILL.md +79 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-tts/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-fetch/SKILL.md +99 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-search/SKILL.md +91 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/README.md +9 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/SKILL.md +450 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/README.md +28 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/README.md +28 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/SKILL.md +304 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/coverage.md +370 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/mocking.md +364 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/cubesandbox/SKILL.md +148 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/README.md +41 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/glyph/SKILL.md +163 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/harness-engineering/SKILL.md +143 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/lightrag/SKILL.md +81 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/memory-protocol/SKILL.md +105 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/obsidian/SKILL.md +306 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
- package/.claude/worktrees/kanban-overhaul/.claude/skills/self-improvement/SKILL.md +64 -0
- package/.claude/worktrees/kanban-overhaul/.dockerignore +31 -0
- package/.claude/worktrees/kanban-overhaul/.gitattributes +27 -0
- package/.claude/worktrees/kanban-overhaul/.harness/agents.json +17 -0
- package/.claude/worktrees/kanban-overhaul/.harness/arch-rules.json +69 -0
- package/.claude/worktrees/kanban-overhaul/.harness/topology.json +4 -0
- package/.claude/worktrees/kanban-overhaul/.nvmrc +1 -0
- package/.claude/worktrees/kanban-overhaul/.serena/project.yml +159 -0
- package/.claude/worktrees/kanban-overhaul/AGENTS.md +250 -0
- package/.claude/worktrees/kanban-overhaul/CHANGELOG.md +5410 -0
- package/.claude/worktrees/kanban-overhaul/CLAUDE.md +260 -0
- package/.claude/worktrees/kanban-overhaul/CURRENT_ISSUES_ AND_NEW_FEATURES.md +18 -0
- package/.claude/worktrees/kanban-overhaul/DECISIONS.md +66 -0
- package/.claude/worktrees/kanban-overhaul/Dockerfile +48 -0
- package/.claude/worktrees/kanban-overhaul/FINAL_GOAL.md +397 -0
- package/.claude/worktrees/kanban-overhaul/IMPLEMENTATION_PLAN.md +250 -0
- package/.claude/worktrees/kanban-overhaul/LICENSE +21 -0
- package/.claude/worktrees/kanban-overhaul/MILESTONES.md +257 -0
- package/.claude/worktrees/kanban-overhaul/Makefile +93 -0
- package/.claude/worktrees/kanban-overhaul/PROGRESS.md +1406 -0
- package/.claude/worktrees/kanban-overhaul/README.md +483 -0
- package/.claude/worktrees/kanban-overhaul/ROADMAP.md +609 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.graphifyignore +40 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/README.md +14 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/daily/2026-06-25.md +9 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/vault.json +7 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +103 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +338 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +81 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +172 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +44 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +247 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/ARCHITECTURE.md +197 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/CHANGELOG.md +235 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/DESIGN.md +912 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/GLYPH.md +418 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/PLAN.md +1135 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/critique.json +26 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/comments.json +1 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/meta.json +10 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/plan.json +174 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/scripts/smoke-bg-retry.mjs +246 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-baseline/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-browser/SKILL.md +181 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/bizar/SKILL.md +116 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/chat/SKILL.md +74 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/eval/SKILL.md +237 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/headroom/SKILL.md +94 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/lightrag/SKILL.md +86 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/minimax/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/obsidian/SKILL.md +68 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/providers/SKILL.md +75 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/publishing/SKILL.md +146 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/sdk/SKILL.md +138 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/self-improvement/SKILL.md +53 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/skills-cli/SKILL.md +94 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/usage/SKILL.md +62 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli/dashboard-ports.mjs +488 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli.mjs +537 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/activity-log.mjs +174 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/agents-store.mjs +465 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/api.mjs +223 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifact-template.html +810 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifacts-store.mjs +733 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/auth.mjs +548 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/background-store.mjs +446 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/backup-store.mjs +530 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-poller.mjs +375 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-retry.mjs +446 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-spawner.mjs +390 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/browser.mjs +40 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-info.mjs +412 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-runner.mjs +284 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-sdk.mjs +191 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/diagnostics-store.mjs +598 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-poller.mjs +105 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-store.mjs +177 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/digest-store.mjs +558 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval-store.mjs +281 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval.mjs +500 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/glyphs/mdx-compiler.mjs +596 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/headroom.mjs +649 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/path-safe.mjs +283 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/rate-limit.mjs +122 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/logger.mjs +71 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-consolidator.mjs +225 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-distillation.mjs +296 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-git.mjs +473 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-lightrag.mjs +1478 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-obsidian.mjs +230 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-schema.mjs +145 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-secrets.mjs +84 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-store.mjs +1093 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/metrics.mjs +268 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax-usage-store.mjs +372 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax.mjs +683 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mod-security.mjs +398 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mods-loader.mjs +1243 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/notifications-store.mjs +243 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/obsidian-store.mjs +318 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/ocr.mjs +55 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/otel.mjs +260 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/pair-store.mjs +138 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/progress-parser.mjs +221 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/projects-store.mjs +364 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/providers-store.mjs +1801 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/_shared.mjs +447 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/activity.mjs +195 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents-cc.mjs +194 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents.mjs +134 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/artifacts.mjs +279 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/auth.mjs +69 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/background.mjs +422 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/backup.mjs +112 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/chat.mjs +727 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/clipboard.mjs +173 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/config.mjs +180 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/diagnostics.mjs +50 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/dialogs.mjs +86 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/digests.mjs +82 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/distill.mjs +129 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/doctor.mjs +71 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/env-vars.mjs +231 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/eval.mjs +187 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/fs.mjs +429 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goal-planner.mjs +236 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goals.mjs +212 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/headroom.mjs +126 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/history.mjs +78 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/lightrag.mjs +169 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/memory.mjs +1524 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/minimax.mjs +133 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/misc.mjs +90 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/mods.mjs +359 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/notifications.mjs +54 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/obsidian.mjs +239 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/ocr.mjs +182 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/overview.mjs +92 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/pair.mjs +67 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/projects.mjs +175 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/providers.mjs +308 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/schedules.mjs +159 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/settings.mjs +51 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/skills.mjs +65 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tailscale.mjs +46 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tasks.mjs +518 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/themes.mjs +51 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/update.mjs +340 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/usage.mjs +136 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/users.mjs +102 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/voice.mjs +167 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/workspaces.mjs +299 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/auth.mjs +59 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/events.mjs +121 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/health.mjs +21 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/index.mjs +90 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/sessions.mjs +111 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-runner.mjs +556 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-store.mjs +268 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/search-store.mjs +220 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/serve-info.mjs +1110 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/server.mjs +966 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/settings-store.mjs +45 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/skills-store.mjs +190 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/state.mjs +437 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tailscale-store.mjs +113 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/task-delegator.mjs +969 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tasks-store.mjs +556 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tui.mjs +923 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/update-store.mjs +168 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-auth-file.mjs +99 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-event-bus.mjs +128 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-store.mjs +229 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-transcribe.mjs +72 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/watcher.mjs +81 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workers/transcription-worker.mjs +213 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workspaces.mjs +626 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/yaml.mjs +238 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/App.tsx +200 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/types.ts +168 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/main.tsx +28 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/index.ts +15 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +232 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/index.ts +349 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +115 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +391 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCardBadges.tsx +111 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +181 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +126 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +638 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +43 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanProgress.tsx +130 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanToolbar.tsx +291 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/useKanbanSelection.ts +90 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/globals.css +220 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +71 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +172 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +247 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +137 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +108 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +77 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +152 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Router.tsx +72 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +330 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +792 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8.html +17 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/FORMAT.md +76 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/README.md +19 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/agents/greeter.md +8 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/commands/hello.md +6 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/mod.json +20 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +9 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +10 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/setup.ts +63 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/smoke-v2.mjs +212 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/tsconfig.json +23 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/vite.config.ts +66 -0
- package/.claude/worktrees/kanban-overhaul/bizar-dash/vitest.config.ts +20 -0
- package/.claude/worktrees/kanban-overhaul/bizar-plugins/registry.json +62 -0
- package/.claude/worktrees/kanban-overhaul/bookmarklet/bizar-clipper.js +48 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/README.md +43 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/background.js +95 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/content.js +170 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-128.png +0 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-16.png +0 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-48.png +0 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon.svg +4 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/manifest.json +32 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.html +66 -0
- package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.js +110 -0
- package/.claude/worktrees/kanban-overhaul/bun.lock +1558 -0
- package/.claude/worktrees/kanban-overhaul/cli/agent-browser-up.sh +152 -0
- package/.claude/worktrees/kanban-overhaul/cli/agent-browser-update.mjs +322 -0
- package/.claude/worktrees/kanban-overhaul/cli/artifact-cli.mjs +605 -0
- package/.claude/worktrees/kanban-overhaul/cli/artifact-render.mjs +621 -0
- package/.claude/worktrees/kanban-overhaul/cli/artifact-server.mjs +847 -0
- package/.claude/worktrees/kanban-overhaul/cli/artifact-templates.mjs +523 -0
- package/.claude/worktrees/kanban-overhaul/cli/artifact.mjs +63 -0
- package/.claude/worktrees/kanban-overhaul/cli/atomic.mjs +73 -0
- package/.claude/worktrees/kanban-overhaul/cli/audit.mjs +141 -0
- package/.claude/worktrees/kanban-overhaul/cli/banner.mjs +41 -0
- package/.claude/worktrees/kanban-overhaul/cli/bg.mjs +471 -0
- package/.claude/worktrees/kanban-overhaul/cli/bin.mjs +698 -0
- package/.claude/worktrees/kanban-overhaul/cli/bootstrap.mjs +77 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/artifact.mjs +20 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/claim.mjs +282 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/claude-cmd.mjs +348 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/clip.mjs +163 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/cost.mjs +279 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/dash.mjs +193 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/cloudflare.mjs +250 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/docker.mjs +222 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/fly.mjs +161 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/vercel.mjs +225 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/deploy.mjs +240 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/eval.mjs +396 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/headroom.mjs +204 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/install.mjs +170 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/lightrag.mjs +170 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/marketplace.mjs +64 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/memory.mjs +25 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/minimax.mjs +288 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/mod.mjs +185 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/ocr.mjs +182 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/plugin.mjs +358 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/rca.mjs +198 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/sandbox.mjs +220 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/service.mjs +79 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/setup-provider.mjs +466 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/tailscale.mjs +258 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/usage.mjs +113 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/util.mjs +577 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/validate.mjs +541 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/voice.mjs +211 -0
- package/.claude/worktrees/kanban-overhaul/cli/commands/workspace.mjs +247 -0
- package/.claude/worktrees/kanban-overhaul/cli/copy.mjs +586 -0
- package/.claude/worktrees/kanban-overhaul/cli/cost-gate.mjs +501 -0
- package/.claude/worktrees/kanban-overhaul/cli/dev-link.mjs +191 -0
- package/.claude/worktrees/kanban-overhaul/cli/digest.mjs +149 -0
- package/.claude/worktrees/kanban-overhaul/cli/doctor.mjs +217 -0
- package/.claude/worktrees/kanban-overhaul/cli/export.mjs +95 -0
- package/.claude/worktrees/kanban-overhaul/cli/feature-list-bridge.mjs +400 -0
- package/.claude/worktrees/kanban-overhaul/cli/heads-up.mjs +295 -0
- package/.claude/worktrees/kanban-overhaul/cli/init.mjs +368 -0
- package/.claude/worktrees/kanban-overhaul/cli/install.mjs +640 -0
- package/.claude/worktrees/kanban-overhaul/cli/memory-constants.mjs +76 -0
- package/.claude/worktrees/kanban-overhaul/cli/memory.mjs +1850 -0
- package/.claude/worktrees/kanban-overhaul/cli/plugin-runtime-deps.mjs +250 -0
- package/.claude/worktrees/kanban-overhaul/cli/post-install-smoke.mjs +256 -0
- package/.claude/worktrees/kanban-overhaul/cli/prompts.mjs +168 -0
- package/.claude/worktrees/kanban-overhaul/cli/providers-detect.mjs +233 -0
- package/.claude/worktrees/kanban-overhaul/cli/provision-claude.mjs +1176 -0
- package/.claude/worktrees/kanban-overhaul/cli/provision.mjs +2233 -0
- package/.claude/worktrees/kanban-overhaul/cli/repair.mjs +209 -0
- package/.claude/worktrees/kanban-overhaul/cli/service-controller.mjs +927 -0
- package/.claude/worktrees/kanban-overhaul/cli/service-env.mjs +139 -0
- package/.claude/worktrees/kanban-overhaul/cli/service.mjs +492 -0
- package/.claude/worktrees/kanban-overhaul/cli/update.mjs +29 -0
- package/.claude/worktrees/kanban-overhaul/cli/utils.mjs +221 -0
- package/.claude/worktrees/kanban-overhaul/cli/worker-dispatcher.mjs +259 -0
- package/.claude/worktrees/kanban-overhaul/config/AGENTS.md +595 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/_shared/AGENT_BASELINE.md +155 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/_shared/CLINE_TOOLS.md +398 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/_shared/SKILLS.md +109 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/agent-browser.md +90 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/baldr.md +60 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/forseti.md +60 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/frigg.md +52 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/heimdall.md +44 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/hermod.md +64 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/mimir.md +60 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/odin.md +310 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/quick.md +47 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/semble-search.md +59 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/thor.md +64 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/tyr.md +67 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/vidarr.md +65 -0
- package/.claude/worktrees/kanban-overhaul/config/agents/vor.md +62 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/audit.md +5 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/bizar.md +22 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/explain.md +5 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/init.md +26 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/learn.md +5 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/plan.md +30 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/plow-through.md +47 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/pr-review.md +5 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/setup-provider.md +95 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/tailscale-serve.md +97 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/team.md +124 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/test.md +60 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/validate.md +66 -0
- package/.claude/worktrees/kanban-overhaul/config/commands/visual-plan.md +19 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/PostToolUse +66 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/PreToolUse +82 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/README.md +68 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/TaskResume +48 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/TaskStart +47 -0
- package/.claude/worktrees/kanban-overhaul/config/hooks/UserPromptSubmit +55 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/general.md +9 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/git.md +11 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/javascript.md +10 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/python.md +10 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/testing.md +10 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/thinking.md +56 -0
- package/.claude/worktrees/kanban-overhaul/config/rules/uncertainty.md +70 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-chat/SKILL.md +73 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-embeddings/SKILL.md +69 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-image/SKILL.md +86 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-stt/SKILL.md +79 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-tts/SKILL.md +80 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-fetch/SKILL.md +99 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-search/SKILL.md +91 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/bizar/README.md +9 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/bizar/SKILL.md +447 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/README.md +28 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/SKILL.md +634 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/agents/openai.yaml +4 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/concurrency.md +320 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/error-handling.md +229 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/memory-safety.md +216 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/review-checklist.md +96 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/README.md +28 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/SKILL.md +304 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/agents/openai.yaml +4 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/coverage.md +370 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/framework-compare.md +175 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/mocking.md +364 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/tdd-workflow.md +308 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/cubesandbox/SKILL.md +148 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/README.md +41 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/SKILL.md +439 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/agents/openai.yaml +4 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/host-tests.md +164 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/kconfig.md +159 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/nvs.md +121 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/packed-structs.md +192 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/glyph/SKILL.md +163 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/harness-engineering/SKILL.md +142 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/lightrag/SKILL.md +81 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/memory-protocol/SKILL.md +105 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/obsidian/SKILL.md +306 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/read-the-damn-docs/SKILL.md +113 -0
- package/.claude/worktrees/kanban-overhaul/config/skills/self-improvement/SKILL.md +64 -0
- package/.claude/worktrees/kanban-overhaul/config/trigger-patterns.json +186 -0
- package/.claude/worktrees/kanban-overhaul/docker-compose.yml +50 -0
- package/.claude/worktrees/kanban-overhaul/docs/A11Y.md +81 -0
- package/.claude/worktrees/kanban-overhaul/docs/DEPLOY.md +360 -0
- package/.claude/worktrees/kanban-overhaul/docs/DOCKER.md +250 -0
- package/.claude/worktrees/kanban-overhaul/docs/INDEX.md +223 -0
- package/.claude/worktrees/kanban-overhaul/docs/PLUGIN_REGISTRY.md +107 -0
- package/.claude/worktrees/kanban-overhaul/docs/RELEASING.md +693 -0
- package/.claude/worktrees/kanban-overhaul/docs/architecture.md +317 -0
- package/.claude/worktrees/kanban-overhaul/docs/code-review.md +242 -0
- package/.claude/worktrees/kanban-overhaul/docs/curator.md +144 -0
- package/.claude/worktrees/kanban-overhaul/docs/dashboard-ui-migration.md +807 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-001-cline-rewrite.md +114 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-002-in-process-clinecore.md +139 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-003-in-process-memory-vault.md +101 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-004-cline-agent-teams.md +112 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-005-bg-agents-via-dashboard.md +77 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-006-kanban-board.md +69 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-007-tool-approval-gate.md +147 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-008-skill-curator.md +100 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-009-pre-compaction-flush.md +106 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-010-knowledge-graph-tools.md +95 -0
- package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-011-claude-code-migration.md +172 -0
- package/.claude/worktrees/kanban-overhaul/docs/graph-tools.md +130 -0
- package/.claude/worktrees/kanban-overhaul/docs/migration-guide.md +471 -0
- package/.claude/worktrees/kanban-overhaul/docs/migrations/cline-replacement.md +118 -0
- package/.claude/worktrees/kanban-overhaul/docs/postmortems/2026-06-18-plugin-state-deadlock.md +250 -0
- package/.claude/worktrees/kanban-overhaul/docs/quality-document.md +74 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.2.md +66 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.4.md +85 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v2.3.0.md +96 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v3.24.0.md +155 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v4.0.0.md +123 -0
- package/.claude/worktrees/kanban-overhaul/docs/releases/v7.0.0.md +173 -0
- package/.claude/worktrees/kanban-overhaul/docs/safety.md +216 -0
- package/.claude/worktrees/kanban-overhaul/feature_list.json +1297 -0
- package/.claude/worktrees/kanban-overhaul/init.sh +211 -0
- package/.claude/worktrees/kanban-overhaul/install.sh +498 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/INSTRUCTIONS.md +82 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/mod.json +37 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/route.mjs +136 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/web/index.html +180 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/INSTRUCTIONS.md +81 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/mod.json +61 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/route.mjs +461 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/web/index.html +263 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/INSTRUCTIONS.md +87 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/agents/thor.md +64 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/mod.json +36 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/route.mjs +98 -0
- package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/web/index.html +126 -0
- package/.claude/worktrees/kanban-overhaul/package.json +154 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/ARCHITECTURE.md +70 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/LICENSE +21 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/README.md +80 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/package.json +30 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/agent-registry.ts +304 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/byzantine.ts +587 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/index.ts +147 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/queen.ts +173 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/types.ts +199 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/dangerous-patterns.ts +127 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/audit.ts +156 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/budget.ts +269 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/envelope.ts +144 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/hmac.ts +160 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/index.ts +443 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/pii.ts +241 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/policy.ts +112 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/trust.ts +146 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/fingerprint.ts +0 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/index.ts +114 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/bin.ts +51 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/server.ts +848 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/memory/index.ts +160 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/codemod-intent.ts +125 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/index.ts +247 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation.ts +249 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/model-router.ts +235 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/q-learning-router.ts +304 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/swarm-topology.ts +279 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/src/version.ts +4 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/tsconfig.json +25 -0
- package/.claude/worktrees/kanban-overhaul/packages/sdk/vitest.config.ts +9 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/ARCHITECTURE.md +72 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/CONSTRAINTS.md +62 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/LICENSE +21 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/README.md +46 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/index.ts +50 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/package.json +18 -0
- package/.claude/worktrees/kanban-overhaul/plugins/bizar/tsconfig.json +29 -0
- package/.claude/worktrees/kanban-overhaul/scripts/bh-full-e2e.mjs +298 -0
- package/.claude/worktrees/kanban-overhaul/scripts/check-agents.mjs +73 -0
- package/.claude/worktrees/kanban-overhaul/scripts/check-arch.sh +80 -0
- package/.claude/worktrees/kanban-overhaul/scripts/check-deps.mjs +492 -0
- package/.claude/worktrees/kanban-overhaul/scripts/clean-state-check.sh +81 -0
- package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-commit +59 -0
- package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-push +54 -0
- package/.claude/worktrees/kanban-overhaul/scripts/install-hooks.sh +29 -0
- package/.claude/worktrees/kanban-overhaul/scripts/install-service.mjs +190 -0
- package/.claude/worktrees/kanban-overhaul/scripts/mirror-claude-md.sh +78 -0
- package/.claude/worktrees/kanban-overhaul/scripts/session-trace.sh +52 -0
- package/.claude/worktrees/kanban-overhaul/scripts/test-in-container.sh +157 -0
- package/.claude/worktrees/kanban-overhaul/scripts/verify-feature.sh +102 -0
- package/.claude/worktrees/kanban-overhaul/skills-lock.json +11 -0
- package/.claude/worktrees/kanban-overhaul/templates/clean-state-checklist.md +55 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/README.md +32 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/functions-index.template.js +15 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/wrangler.toml.template +9 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/.env.template +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/README.md +58 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/docker-compose.template.yml +23 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/README.md +35 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/fly.toml.template +28 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/README.md +29 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/api-index.template.js +18 -0
- package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/vercel.json.template +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/README.md +58 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/citation.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-review.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-search-basic.json +28 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/concise-output.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/context-window.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/error-recovery.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/json-output.json +20 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/latency-bounds.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/multi-language.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/regression-suite.json +79 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/response-format.json +30 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/safe-paths.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-correctness.json +24 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-multi-step.json +18 -0
- package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/unicode-handling.json +16 -0
- package/.claude/worktrees/kanban-overhaul/templates/evaluator-rubric.md +50 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/htmx.min.js +1 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/library/bug-investigation.mdx +79 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/library/decision-record.mdx +71 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/library/feature-design.mdx +92 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/meta.json.template +8 -0
- package/.claude/worktrees/kanban-overhaul/templates/plan/plan.mdx.template +46 -0
- package/.claude/worktrees/kanban-overhaul/templates/plugin-template/README.md +121 -0
- package/.claude/worktrees/kanban-overhaul/templates/plugin-template/index.js +66 -0
- package/.claude/worktrees/kanban-overhaul/templates/plugin-template/plugin.json +42 -0
- package/.claude/worktrees/kanban-overhaul/templates/plugin-template/tests/plugin.test.js +83 -0
- package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-backup.json +12 -0
- package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-cleanup.json +12 -0
- package/.claude/worktrees/kanban-overhaul/templates/schedules/hourly-health-check.json +12 -0
- package/.claude/worktrees/kanban-overhaul/templates/schedules/webhook-on-push.json +13 -0
- package/.claude/worktrees/kanban-overhaul/templates/schedules/weekly-digest.json +13 -0
- package/.claude/worktrees/kanban-overhaul/templates/sprint-contract.md +47 -0
- package/.claude/worktrees/kanban-overhaul/tsconfig.json +44 -0
- package/.claude/worktrees/kanban-overhaul/vite.config.ts +51 -0
- package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js +16 -0
- package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js.map +1 -0
- package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js +12 -0
- package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js.map +1 -0
- package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js +23 -0
- package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js.map +1 -0
- package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js +6 -0
- package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js.map +1 -0
- package/bizar-dash/dist/assets/{Card-BzJeYR2D.js → Card-CeZsWlcP.js} +1 -1
- package/bizar-dash/dist/assets/{Card-BzJeYR2D.js.map → Card-CeZsWlcP.js.map} +1 -1
- package/bizar-dash/dist/assets/{Chip-CN2bvm7a.js → Chip-OPjSKl2I.js} +1 -1
- package/bizar-dash/dist/assets/{Chip-CN2bvm7a.js.map → Chip-OPjSKl2I.js.map} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-DEiBv4-r.js → EmptyState-BrLA8mbE.js} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-DEiBv4-r.js.map → EmptyState-BrLA8mbE.js.map} +1 -1
- package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js +11 -0
- package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js.map +1 -0
- package/bizar-dash/dist/assets/Grid-B7NgNtff.js +1 -0
- package/bizar-dash/dist/assets/Grid-B7NgNtff.js.map +1 -0
- package/bizar-dash/dist/assets/Input-BW_5Sl6N.js +1 -0
- package/bizar-dash/dist/assets/Input-BW_5Sl6N.js.map +1 -0
- package/bizar-dash/dist/assets/{KanbanCard-DZEaAiEr.js → KanbanCard-B-NOSfMN.js} +1 -1
- package/bizar-dash/dist/assets/{KanbanCard-DZEaAiEr.js.map → KanbanCard-B-NOSfMN.js.map} +1 -1
- package/bizar-dash/dist/assets/{LibrariesView-CPgKGPpM.js → LibrariesView-D6eB7B2A.js} +6 -6
- package/bizar-dash/dist/assets/{LibrariesView-CPgKGPpM.js.map → LibrariesView-D6eB7B2A.js.map} +1 -1
- package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js +13 -0
- package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js.map +1 -0
- package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js +1 -0
- package/bizar-dash/dist/assets/{OverviewView-BDegBWgg.js.map → OverviewView-CHavfYBa.js.map} +1 -1
- package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js +1 -0
- package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js.map +1 -0
- package/bizar-dash/dist/assets/{Select-xwxbK8Ed.js → Select-B6Ho36Tq.js} +3 -8
- package/bizar-dash/dist/assets/Select-B6Ho36Tq.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js +1 -0
- package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js +38 -0
- package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js.map +1 -0
- package/bizar-dash/dist/assets/{Sheet-C_sIEw35.js → Sheet-Cmu_4Zea.js} +1 -1
- package/bizar-dash/dist/assets/{Sheet-C_sIEw35.js.map → Sheet-Cmu_4Zea.js.map} +1 -1
- package/bizar-dash/dist/assets/Slider-B_jPr-SR.js +1 -0
- package/bizar-dash/dist/assets/Slider-B_jPr-SR.js.map +1 -0
- package/bizar-dash/dist/assets/{Sparkline-D664vGWW.js → Sparkline-Cmqw0N39.js} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-D664vGWW.js.map → Sparkline-Cmqw0N39.js.map} +1 -1
- package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js +10 -0
- package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js.map +1 -0
- package/bizar-dash/dist/assets/TasksView-BXADmjgb.js +1 -0
- package/bizar-dash/dist/assets/TasksView-BXADmjgb.js.map +1 -0
- package/bizar-dash/dist/assets/{Textarea-Dk97nmjO.js → Textarea-KIN98DVH.js} +1 -1
- package/bizar-dash/dist/assets/{Textarea-Dk97nmjO.js.map → Textarea-KIN98DVH.js.map} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-dPd4zAyj.js → ViewHeader-CPbqI-w8.js} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-dPd4zAyj.js.map → ViewHeader-CPbqI-w8.js.map} +1 -1
- package/bizar-dash/dist/assets/{brain-BajPVibR.js → brain-jN_ldx3U.js} +1 -1
- package/bizar-dash/dist/assets/{brain-BajPVibR.js.map → brain-jN_ldx3U.js.map} +1 -1
- package/bizar-dash/dist/assets/{calendar-CaP_Bbgc.js → calendar-DZGgPP2_.js} +1 -1
- package/bizar-dash/dist/assets/{calendar-CaP_Bbgc.js.map → calendar-DZGgPP2_.js.map} +1 -1
- package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js +6 -0
- package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js.map +1 -0
- package/bizar-dash/dist/assets/clock-BXBnSbox.js +6 -0
- package/bizar-dash/dist/assets/clock-BXBnSbox.js.map +1 -0
- package/bizar-dash/dist/assets/{cmdk-BLWIhKrV.js → cmdk-D15rXxc5.js} +2 -2
- package/bizar-dash/dist/assets/{cmdk-BLWIhKrV.js.map → cmdk-D15rXxc5.js.map} +1 -1
- package/bizar-dash/dist/assets/{dnd-kit-DU8GZk7s.js → dnd-kit-Bormfg7j.js} +1 -1
- package/bizar-dash/dist/assets/{dnd-kit-DU8GZk7s.js.map → dnd-kit-Bormfg7j.js.map} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-CFRRwdxp.js → git-pull-request-BCt0CEjc.js} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-CFRRwdxp.js.map → git-pull-request-BCt0CEjc.js.map} +1 -1
- package/bizar-dash/dist/assets/index-C0JBGB5M.js +1 -0
- package/bizar-dash/dist/assets/index-C0JBGB5M.js.map +1 -0
- package/bizar-dash/dist/assets/index-CrWI7sQR.js +1 -0
- package/bizar-dash/dist/assets/index-CrWI7sQR.js.map +1 -0
- package/bizar-dash/dist/assets/main-CCimEcWH.js +134 -0
- package/bizar-dash/dist/assets/main-CCimEcWH.js.map +1 -0
- package/bizar-dash/dist/assets/play-B0rTjpSg.js +6 -0
- package/bizar-dash/dist/assets/play-B0rTjpSg.js.map +1 -0
- package/bizar-dash/dist/assets/{plus-CVH1JB04.js → plus-BaTQsS9G.js} +1 -1
- package/bizar-dash/dist/assets/{plus-CVH1JB04.js.map → plus-BaTQsS9G.js.map} +1 -1
- package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js +6 -0
- package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js.map +1 -0
- package/bizar-dash/dist/assets/{terminal-B2sSd5t7.js → terminal-k-1HFHcN.js} +1 -1
- package/bizar-dash/dist/assets/{terminal-B2sSd5t7.js.map → terminal-k-1HFHcN.js.map} +1 -1
- package/bizar-dash/dist/assets/{trash-2-JtYRQ79q.js → trash-2-DtpKnAn2.js} +1 -1
- package/bizar-dash/dist/assets/{trash-2-JtYRQ79q.js.map → trash-2-DtpKnAn2.js.map} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-Nzbrm0I2.js → triangle-alert-FHSs_e5b.js} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-Nzbrm0I2.js.map → triangle-alert-FHSs_e5b.js.map} +1 -1
- package/bizar-dash/dist/assets/{wrench-B7go551L.js → wrench-CbBE0oQ0.js} +2 -2
- package/bizar-dash/dist/assets/{wrench-B7go551L.js.map → wrench-CbBE0oQ0.js.map} +1 -1
- package/bizar-dash/dist/v8.html +2 -2
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/api.mjs +5 -0
- package/bizar-dash/src/server/progress-parser.mjs +20 -4
- package/bizar-dash/src/server/routes/goals.mjs +10 -10
- package/bizar-dash/src/server/routes/spawn.mjs +59 -0
- package/bizar-dash/src/server/server.mjs +1 -1
- package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/bizar-dash/src/web/v8/App.tsx +56 -7
- package/bizar-dash/src/web/v8/__tests__/BackgroundJobsView.test.tsx +172 -0
- package/bizar-dash/src/web/v8/__tests__/MemoryView.test.tsx +91 -0
- package/bizar-dash/src/web/v8/__tests__/NotificationsPopover.test.tsx +91 -0
- package/bizar-dash/src/web/v8/__tests__/SchedulesView.test.tsx +157 -0
- package/bizar-dash/src/web/v8/__tests__/Topbar.test.tsx +86 -0
- package/bizar-dash/src/web/v8/__tests__/changelog.test.tsx +79 -0
- package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +10 -4
- package/bizar-dash/src/web/v8/__tests__/views.test.tsx +6 -0
- package/bizar-dash/src/web/v8/data/types.ts +2 -0
- package/bizar-dash/src/web/v8/data/useWebSocket.ts +9 -1
- package/bizar-dash/src/web/v8/shell/Sidebar.tsx +46 -12
- package/bizar-dash/src/web/v8/shell/Topbar.tsx +30 -4
- package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +34 -3
- package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +1 -1
- package/bizar-dash/src/web/v8/ui/feedback/NotificationsPopover.tsx +239 -0
- package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +7 -1
- package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +393 -32
- package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +442 -0
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +22 -7
- package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +1 -1
- package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +174 -20
- package/bizar-dash/src/web/v8/views/Router.tsx +10 -0
- package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +395 -0
- package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +21 -5
- package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +9 -7
- package/bizar-dash/tests/goals-decompose.test.mjs +5 -3
- package/package.json +1 -1
- package/packages/sdk/.harness/agents.json +17 -0
- package/packages/sdk/.harness/topology.json +4 -0
- package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +0 -6
- package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +0 -1
- package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +0 -1
- package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +0 -1
- package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +0 -28
- package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +0 -1
- package/bizar-dash/dist/assets/Badge-BH4C3aUF.js +0 -1
- package/bizar-dash/dist/assets/Badge-BH4C3aUF.js.map +0 -1
- package/bizar-dash/dist/assets/Button-RmN1RKhE.js +0 -6
- package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +0 -1
- package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +0 -6
- package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +0 -1
- package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +0 -13
- package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +0 -1
- package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +0 -1
- package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +0 -10
- package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +0 -43
- package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +0 -1
- package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +0 -16
- package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +0 -1
- package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +0 -1
- package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +0 -1
- package/bizar-dash/dist/assets/index-AL3OLUfz.js +0 -1
- package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +0 -1
- package/bizar-dash/dist/assets/main-LxX9zTRk.js +0 -109
- package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +0 -1
- package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +0 -1
- package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +0 -1
- package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +0 -1
- package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +0 -1
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{r as u,j as i,h as k,u as Z,i as E,k as I,l as ee}from"./cmdk-BLWIhKrV.js";import{u as te,a as re,c as Ae,b as Ve,d as ne}from"./index-AL3OLUfz.js";import{c as L}from"./main-LxX9zTRk.js";var z="Switch",[He]=ee(z),[Ke,G]=He(z);function Fe(e){const{__scopeSwitch:t,checked:r,children:s,defaultChecked:n,disabled:o,form:c,name:a,onCheckedChange:f,required:d,value:m="on",internal_do_not_use_render:l}=e,[h,b]=Z({prop:r,defaultProp:n??!1,onChange:f,caller:z}),[g,v]=u.useState(null),[S,p]=u.useState(null),x=u.useRef(!1),y=g?!!c||!!g.closest("form"):!0,R={checked:h,setChecked:b,disabled:o,control:g,setControl:v,name:a,form:c,value:m,hasConsumerStoppedPropagationRef:x,required:d,defaultChecked:n,isFormControl:y,bubbleInput:S,setBubbleInput:p};return i.jsx(Ke,{scope:t,...R,children:Le(l)?l(R):s})}var oe="SwitchTrigger",se=u.forwardRef(({__scopeSwitch:e,onClick:t,...r},s)=>{const{control:n,form:o,value:c,disabled:a,checked:f,required:d,setControl:m,setChecked:l,hasConsumerStoppedPropagationRef:h,isFormControl:b,bubbleInput:g}=G(oe,e),v=E(s,m),S=u.useRef(f);return u.useEffect(()=>{const p=o?n==null?void 0:n.ownerDocument.getElementById(o):n==null?void 0:n.form;if(p instanceof HTMLFormElement){const x=()=>l(S.current);return p.addEventListener("reset",x),()=>p.removeEventListener("reset",x)}},[n,o,l]),i.jsx(k.button,{type:"button",role:"switch","aria-checked":f,"aria-required":d,"data-state":ue(f),"data-disabled":a?"":void 0,disabled:a,value:c,...r,ref:v,onClick:I(t,p=>{l(x=>!x),g&&b&&(h.current=p.isPropagationStopped(),h.current||p.stopPropagation())})})});se.displayName=oe;var ae=u.forwardRef((e,t)=>{const{__scopeSwitch:r,name:s,checked:n,defaultChecked:o,required:c,disabled:a,value:f,onCheckedChange:d,form:m,...l}=e;return i.jsx(Fe,{__scopeSwitch:r,checked:n,defaultChecked:o,disabled:a,required:c,onCheckedChange:d,name:s,form:m,value:f,internal_do_not_use_render:({isFormControl:h})=>i.jsxs(i.Fragment,{children:[i.jsx(se,{...l,ref:t,__scopeSwitch:r}),h&&i.jsx(de,{__scopeSwitch:r})]})})});ae.displayName=z;var ie="SwitchThumb",ce=u.forwardRef((e,t)=>{const{__scopeSwitch:r,...s}=e,n=G(ie,r);return i.jsx(k.span,{"data-state":ue(n.checked),"data-disabled":n.disabled?"":void 0,...s,ref:t})});ce.displayName=ie;var le="SwitchBubbleInput",de=u.forwardRef(({__scopeSwitch:e,...t},r)=>{const{control:s,hasConsumerStoppedPropagationRef:n,checked:o,defaultChecked:c,required:a,disabled:f,name:d,value:m,form:l,bubbleInput:h,setBubbleInput:b}=G(le,e),g=E(r,b),v=te(o),S=re(s);u.useEffect(()=>{const x=h;if(!x)return;const y=window.HTMLInputElement.prototype,C=Object.getOwnPropertyDescriptor(y,"checked").set,H=!n.current;if(v!==o&&C){const D=new Event("click",{bubbles:H});C.call(x,o),x.dispatchEvent(D)}},[h,v,o,n]);const p=u.useRef(o);return i.jsx(k.input,{type:"checkbox","aria-hidden":!0,defaultChecked:c??p.current,required:a,disabled:f,name:d,value:m,form:l,...t,tabIndex:-1,ref:g,style:{...t.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});de.displayName=le;function Le(e){return typeof e=="function"}function ue(e){return e?"checked":"unchecked"}const st=u.forwardRef(function(t,r){const{className:s,...n}=t;return i.jsxs(ae,{ref:r,className:L("v8-switch",s),style:{width:32,height:18,background:"var(--surface-2)",borderRadius:"var(--radius-pill)",position:"relative",border:"1px solid var(--border)",cursor:"pointer",transition:"background var(--motion-fast) var(--ease-out)"},...n,children:[i.jsx(ce,{style:{display:"block",width:12,height:12,background:"var(--fg)",borderRadius:"var(--radius-pill)",transform:"translateX(2px)",transition:"transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)",willChange:"transform"}}),i.jsx("style",{children:`
|
|
2
|
-
.v8-switch[data-state='checked'] {
|
|
3
|
-
background: var(--accent);
|
|
4
|
-
border-color: var(--accent);
|
|
5
|
-
}
|
|
6
|
-
.v8-switch[data-state='checked'] > span {
|
|
7
|
-
transform: translateX(16px);
|
|
8
|
-
background: var(--fg-on-accent);
|
|
9
|
-
}
|
|
10
|
-
`})]})});var fe=["PageUp","PageDown"],he=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],me={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},N="Slider",[$,ze,Oe]=Ae(N),[X]=ee(N,[Oe]),[Ue,V]=X(N),pe=u.forwardRef((e,t)=>{const{name:r,min:s=0,max:n=100,step:o=1,orientation:c="horizontal",disabled:a=!1,minStepsBetweenThumbs:f=0,defaultValue:d=[s],value:m,onValueChange:l=()=>{},onValueCommit:h=()=>{},inverted:b=!1,form:g,...v}=e,S=u.useRef(new Set),p=u.useRef(0),x=u.useRef(!1),R=c==="horizontal"?$e:We,[C,H]=u.useState(null),D=E(t,H),[_=[],O]=Z({prop:m,defaultProp:d,onChange:w=>{var M;(M=[...S.current][p.current])==null||M.focus({preventScroll:!0,focusVisible:x.current}),x.current=!1,l(w)}}),q=u.useRef(_),Te=u.useRef(_);u.useEffect(()=>{const w=g?C==null?void 0:C.ownerDocument.getElementById(g):C==null?void 0:C.closest("form");if(w instanceof HTMLFormElement){const P=()=>O(Te.current);return w.addEventListener("reset",P),()=>w.removeEventListener("reset",P)}},[C,g,O]);function Ne(w){const P=qe(_,w);B(w,P)}function De(w){B(w,p.current)}function Be(){const w=q.current[p.current];_[p.current]!==w&&h(_)}function B(w,P,{commit:M}={commit:!1}){const J=Me(o),U=F(Math.round((w-s)/o)*o+s,J),A=ne(U,[s,n]);O((T=[])=>{const j=Xe(T,A,P);if(Ze(j,f*o)){p.current=j.indexOf(A);const Q=String(j)!==String(T);return Q&&M&&h(j),Q?j:T}else return T})}return i.jsx(Ue,{scope:e.__scopeSlider,name:r,disabled:a,min:s,max:n,valueIndexToChangeRef:p,thumbs:S.current,values:_,orientation:c,form:g,children:i.jsx($.Provider,{scope:e.__scopeSlider,children:i.jsx($.Slot,{scope:e.__scopeSlider,children:i.jsx(R,{"aria-disabled":a,"data-disabled":a?"":void 0,...v,ref:D,onPointerDown:I(v.onPointerDown,()=>{a||(q.current=_,x.current=!1)}),min:s,max:n,inverted:b,onSlideStart:a?void 0:Ne,onSlideMove:a?void 0:De,onSlideEnd:a?void 0:Be,onHomeKeyDown:()=>{a||(x.current=!0,B(s,0,{commit:!0}))},onEndKeyDown:()=>{a||(x.current=!0,B(n,_.length-1,{commit:!0}))},onStepKeyDown:({event:w,direction:P})=>{if(!a){x.current=!0;const U=fe.includes(w.key)||w.shiftKey&&he.includes(w.key)?10:1,A=p.current,T=_[A],j=et(T,{min:s,step:o,direction:P,multiplier:U});B(j,A,{commit:!0})}}})})})})});pe.displayName=N;var[ve,ge]=X(N,{startEdge:"left",endEdge:"right",size:"width",direction:1}),$e=u.forwardRef((e,t)=>{const{min:r,max:s,dir:n,inverted:o,onSlideStart:c,onSlideMove:a,onSlideEnd:f,onStepKeyDown:d,...m}=e,[l,h]=u.useState(null),b=E(t,h),g=u.useRef(void 0),v=Ve(n),S=v==="ltr",p=S&&!o||!S&&o;function x(y){const R=g.current||l.getBoundingClientRect(),C=[0,R.width],D=Y(C,p?[r,s]:[s,r]);return g.current=R,D(y-R.left)}return i.jsx(ve,{scope:e.__scopeSlider,startEdge:p?"left":"right",endEdge:p?"right":"left",direction:p?1:-1,size:"width",children:i.jsx(be,{dir:v,"data-orientation":"horizontal",...m,ref:b,style:{...m.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:y=>{const R=x(y.clientX);c==null||c(R)},onSlideMove:y=>{const R=x(y.clientX);a==null||a(R)},onSlideEnd:()=>{g.current=void 0,f==null||f()},onStepKeyDown:y=>{const C=me[p?"from-left":"from-right"].includes(y.key);d==null||d({event:y,direction:C?-1:1})}})})}),We=u.forwardRef((e,t)=>{const{min:r,max:s,inverted:n,onSlideStart:o,onSlideMove:c,onSlideEnd:a,onStepKeyDown:f,...d}=e,m=u.useRef(null),l=E(t,m),h=u.useRef(void 0),b=!n;function g(v){const S=h.current||m.current.getBoundingClientRect(),p=[0,S.height],y=Y(p,b?[s,r]:[r,s]);return h.current=S,y(v-S.top)}return i.jsx(ve,{scope:e.__scopeSlider,startEdge:b?"bottom":"top",endEdge:b?"top":"bottom",size:"height",direction:b?1:-1,children:i.jsx(be,{"data-orientation":"vertical",...d,ref:l,style:{...d.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:v=>{const S=g(v.clientY);o==null||o(S)},onSlideMove:v=>{const S=g(v.clientY);c==null||c(S)},onSlideEnd:()=>{h.current=void 0,a==null||a()},onStepKeyDown:v=>{const p=me[b?"from-bottom":"from-top"].includes(v.key);f==null||f({event:v,direction:p?-1:1})}})})}),be=u.forwardRef((e,t)=>{const{__scopeSlider:r,onSlideStart:s,onSlideMove:n,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:a,onStepKeyDown:f,...d}=e,m=V(N,r);return i.jsx(k.span,{...d,ref:t,onKeyDown:I(e.onKeyDown,l=>{l.key==="Home"?(c(l),l.preventDefault()):l.key==="End"?(a(l),l.preventDefault()):fe.concat(he).includes(l.key)&&(f(l),l.preventDefault())}),onPointerDown:I(e.onPointerDown,l=>{const h=l.target;h.setPointerCapture(l.pointerId),l.preventDefault(),m.thumbs.has(h)?h.focus({preventScroll:!0,focusVisible:!1}):s(l)}),onPointerMove:I(e.onPointerMove,l=>{l.target.hasPointerCapture(l.pointerId)&&n(l)}),onPointerUp:I(e.onPointerUp,l=>{const h=l.target;h.hasPointerCapture(l.pointerId)&&(h.releasePointerCapture(l.pointerId),o(l))})})}),Se="SliderTrack",xe=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(Se,r);return i.jsx(k.span,{"data-disabled":n.disabled?"":void 0,"data-orientation":n.orientation,...s,ref:t})});xe.displayName=Se;var W="SliderRange",we=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(W,r),o=ge(W,r),c=u.useRef(null),a=E(t,c),f=n.values.length,d=n.values.map(h=>Ie(h,n.min,n.max)),m=f>1?Math.min(...d):0,l=100-Math.max(...d);return i.jsx(k.span,{"data-orientation":n.orientation,"data-disabled":n.disabled?"":void 0,...s,ref:a,style:{...e.style,[o.startEdge]:m+"%",[o.endEdge]:l+"%"}})});we.displayName=W;var ye="SliderThumb",[Ge,Re]=X(ye),Ce="SliderThumbProvider";function Pe(e){const{__scopeSlider:t,name:r,children:s,internal_do_not_use_render:n}=e,o=V(Ce,t),c=ze(t),[a,f]=u.useState(null),d=u.useMemo(()=>a?c().findIndex(S=>S.ref.current===a):-1,[c,a]),m=re(a),l=a?!!o.form||!!a.closest("form"):!0,h=o.values[d],b=r??(o.name?o.name+(o.values.length>1?"[]":""):void 0),g=h===void 0?0:Ie(h,o.min,o.max);u.useEffect(()=>{if(a)return o.thumbs.add(a),()=>{o.thumbs.delete(a)}},[a,o.thumbs]);const v={value:h,name:b,form:o.form,isFormControl:l,index:d,thumb:a,onThumbChange:f,percent:g,size:m};return i.jsx(Ge,{scope:t,...v,children:tt(n)?n(v):s})}Pe.displayName=Ce;var K="SliderThumbTrigger",_e=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(K,r),o=ge(K,r),{index:c,value:a,percent:f,size:d,onThumbChange:m}=Re(K,r),l=E(t,m),h=Ye(c,n.values.length),b=d==null?void 0:d[o.size],g=b?Je(b,f,o.direction):0;return i.jsx("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[o.startEdge]:`calc(${f}% + ${g}px)`},children:i.jsx($.ItemSlot,{scope:r,children:i.jsx(k.span,{role:"slider","aria-label":e["aria-label"]||h,"aria-valuemin":n.min,"aria-valuenow":a,"aria-valuemax":n.max,"aria-orientation":n.orientation,"data-orientation":n.orientation,"data-disabled":n.disabled?"":void 0,tabIndex:n.disabled?void 0:0,...s,ref:l,style:a===void 0?{display:"none"}:e.style,onFocus:I(e.onFocus,()=>{n.valueIndexToChangeRef.current=c})})})})});_e.displayName=K;var ke=u.forwardRef((e,t)=>{const{__scopeSlider:r,name:s,...n}=e;return i.jsx(Pe,{__scopeSlider:r,name:s,internal_do_not_use_render:({index:o,isFormControl:c})=>i.jsxs(i.Fragment,{children:[i.jsx(_e,{...n,ref:t,__scopeSlider:r}),c?i.jsx(je,{__scopeSlider:r},o):null]})})});ke.displayName=ye;var Ee="SliderBubbleInput",je=u.forwardRef(({__scopeSlider:e,...t},r)=>{const{value:s,name:n,form:o}=Re(Ee,e),c=u.useRef(null),a=E(c,r),f=te(s);return u.useEffect(()=>{const d=c.current;if(!d)return;const m=window.HTMLInputElement.prototype,h=Object.getOwnPropertyDescriptor(m,"value").set;if(f!==s&&h){const b=new Event("input",{bubbles:!0});h.call(d,s),d.dispatchEvent(b)}},[f,s]),i.jsx(k.input,{style:{display:"none"},name:n,form:o,...t,ref:a,defaultValue:s})});je.displayName=Ee;function Xe(e=[],t,r){const s=[...e];return s[r]=t,s.sort((n,o)=>n-o)}function Ie(e,t,r){const o=100/(r-t)*(e-t);return ne(o,[0,100])}function Ye(e,t){return t>2?`Value ${e+1} of ${t}`:t===2?["Minimum","Maximum"][e]:void 0}function qe(e,t){if(e.length===1)return 0;const r=e.map(n=>Math.abs(n-t)),s=Math.min(...r);return r.indexOf(s)}function Je(e,t,r){const s=e/2,o=Y([0,50],[0,s]);return(s-o(t)*r)*r}function Qe(e){return e.slice(0,-1).map((t,r)=>e[r+1]-t)}function Ze(e,t){if(t>0){const r=Qe(e);return Math.min(...r)>=t}return!0}function Y(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const s=(t[1]-t[0])/(e[1]-e[0]);return t[0]+s*(r-e[0])}}function Me(e){if(!Number.isFinite(e))return 0;const t=e.toString();if(t.includes("e")){const[s,n]=t.split("e"),o=s.split(".")[1]||"",c=Number(n);return Math.max(0,o.length-c)}const r=t.split(".")[1];return r?r.length:0}function F(e,t){const r=Math.pow(10,t);return Math.round(e*r)/r}function et(e,{min:t,step:r,direction:s,multiplier:n}){const o=Me(r),c=(e-t)/r,a=Math.round(c),f=F(a*r+t,o)===F(e,o);let d;return f?d=a+n*s:s>0?d=Math.ceil(c):d=Math.floor(c),F(d*r+t,o)}function tt(e){return typeof e=="function"}const at=u.forwardRef(function(t,r){const{className:s,...n}=t;return i.jsxs(pe,{ref:r,className:L("v8-slider",s),style:{position:"relative",display:"flex",alignItems:"center",userSelect:"none",touchAction:"none",width:"100%",height:20},...n,children:[i.jsx(xe,{style:{background:"var(--surface-2)",position:"relative",flexGrow:1,borderRadius:"var(--radius-pill)",height:4},children:i.jsx(we,{style:{position:"absolute",background:"var(--accent)",borderRadius:"var(--radius-pill)",height:"100%"}})}),(Array.isArray(t.value??t.defaultValue)?t.value??t.defaultValue??[]:[t.value??t.defaultValue??0]).map((o,c)=>i.jsx(ke,{"aria-label":t["aria-label"]??`Thumb ${c+1}`,style:{display:"block",width:14,height:14,background:"var(--fg)",border:"2px solid var(--accent)",borderRadius:"var(--radius-pill)",cursor:"grab",boxShadow:"var(--shadow-1)"}},c))]})}),it=u.forwardRef(function(t,r){const{id:s,title:n,description:o,icon:c,children:a,headerActions:f,className:d,...m}=t;return i.jsxs("section",{ref:r,id:s,"aria-labelledby":`${s}-title`,className:L("v8-settings-section",d),style:{padding:"var(--space-5) var(--space-6)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)"},...m,children:[i.jsxs("header",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-3)",marginBottom:"var(--space-4)"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"var(--space-3)",minWidth:0},children:[c!==void 0&&i.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",background:"color-mix(in oklch, var(--accent) 14%, transparent)",color:"var(--accent)",flexShrink:0},children:c}),i.jsxs("div",{style:{minWidth:0},children:[i.jsx("h2",{id:`${s}-title`,style:{fontSize:"var(--fs-15)",fontWeight:600,color:"var(--fg)",lineHeight:"var(--lh-snug)",margin:0},children:n}),o!==void 0&&i.jsx("p",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:o})]})]}),f!==void 0&&i.jsx("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0},children:f})]}),i.jsx("div",{className:"v8-settings-section__body",children:a})]})}),ct=u.forwardRef(function(t,r){const{id:s,label:n,description:o,control:c,disabled:a=!1,className:f,...d}=t,m=`${s}-label`;return i.jsxs("div",{ref:r,"data-disabled":a||void 0,"aria-disabled":a||void 0,className:L("v8-settings-row",f),style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",padding:"var(--space-3) 0",borderBottom:"1px solid var(--border)",opacity:a?.5:1},...d,children:[i.jsxs("div",{id:m,style:{flex:1,minWidth:0},children:[i.jsx("span",{style:{display:"block",fontSize:"var(--fs-13)",fontWeight:500,color:"var(--fg)",cursor:a?"not-allowed":"default",lineHeight:"var(--lh-snug)"},children:n}),o!==void 0&&i.jsx("p",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:o})]}),i.jsx("div",{role:"group","aria-labelledby":m,style:{flexShrink:0,alignSelf:"center"},children:c})]})});export{it as S,ct as a,at as b,st as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsRow-CppSgkT_.js","sources":["../../../node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/web/v8/ui/controls/Switch.tsx","../../../node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/web/v8/ui/controls/Slider.tsx","../../src/web/v8/ui/settings/SettingsSection.tsx","../../src/web/v8/ui/settings/SettingsRow.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSwitch from '@radix-ui/react-switch';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Switch — boolean toggle (vs Checkbox which selects).\n *\n * Use for: enable/disable settings, on/off toggles.\n * Built on Radix Switch for a11y.\n */\n\nexport type SwitchProps = ComponentPropsWithoutRef<typeof RxSwitch.Root>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSwitch.Root\n ref={ref}\n className={cx('v8-switch', className)}\n style={{\n width: 32,\n height: 18,\n background: 'var(--surface-2)',\n borderRadius: 'var(--radius-pill)',\n position: 'relative',\n border: '1px solid var(--border)',\n cursor: 'pointer',\n transition: 'background var(--motion-fast) var(--ease-out)',\n }}\n {...rest}\n >\n <RxSwitch.Thumb\n style={{\n display: 'block',\n width: 12,\n height: 12,\n background: 'var(--fg)',\n borderRadius: 'var(--radius-pill)',\n transform: 'translateX(2px)',\n transition: 'transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)',\n willChange: 'transform',\n }}\n />\n <style>{`\n .v8-switch[data-state='checked'] {\n background: var(--accent);\n border-color: var(--accent);\n }\n .v8-switch[data-state='checked'] > span {\n transform: translateX(16px);\n background: var(--fg-on-accent);\n }\n `}</style>\n </RxSwitch.Root>\n );\n});","\"use client\";\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = React.forwardRef(\n (props, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {\n },\n onValueCommit = () => {\n },\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === \"horizontal\";\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValues(initialValuesRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }\n);\nSlider.displayName = SLIDER_NAME;\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderVertical = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }\n);\nSliderTrack.displayName = TRACK_NAME;\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }\n);\nSliderRange.displayName = RANGE_NAME;\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\nSliderThumbProvider.displayName = THUMB_PROVIDER_NAME;\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }\n);\nSliderThumbTrigger.displayName = THUMB_TRIGGER_NAME;\nvar SliderThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }\n);\nSliderThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = React.forwardRef(\n ({ __scopeSlider, ...props }, forwardedRef) => {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSliderBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSlider from '@radix-ui/react-slider';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Slider — single or range numeric input.\n *\n * Built on Radix Slider for keyboard arrow + home/end handling.\n */\nexport type SliderProps = ComponentPropsWithoutRef<typeof RxSlider.Root>;\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSlider.Root\n ref={ref}\n className={cx('v8-slider', className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n width: '100%',\n height: 20,\n }}\n {...rest}\n >\n <RxSlider.Track\n style={{\n background: 'var(--surface-2)',\n position: 'relative',\n flexGrow: 1,\n borderRadius: 'var(--radius-pill)',\n height: 4,\n }}\n >\n <RxSlider.Range\n style={{\n position: 'absolute',\n background: 'var(--accent)',\n borderRadius: 'var(--radius-pill)',\n height: '100%',\n }}\n />\n </RxSlider.Track>\n {(Array.isArray(props.value ?? props.defaultValue)\n ? (props.value ?? props.defaultValue ?? [])\n : [props.value ?? props.defaultValue ?? 0]\n ).map((_, i) => (\n <RxSlider.Thumb\n key={i}\n aria-label={props['aria-label'] ?? `Thumb ${i + 1}`}\n style={{\n display: 'block',\n width: 14,\n height: 14,\n background: 'var(--fg)',\n border: '2px solid var(--accent)',\n borderRadius: 'var(--radius-pill)',\n cursor: 'grab',\n boxShadow: 'var(--shadow-1)',\n }}\n />\n ))}\n </RxSlider.Root>\n );\n});","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsSection — a titled, optionally-described section of the Settings\n * page.\n *\n * PLAN.md §Settings declares 16 sections; SettingsSection is the shell\n * they all use. The body is a free slot so each section composes its own\n * option rows (SettingsRow) and sub-sections.\n */\n\nexport interface SettingsSectionProps extends HTMLAttributes<HTMLElement> {\n id: string;\n title: string;\n /** One-sentence summary of what this section controls. */\n description?: string;\n /** Optional icon (lucide). */\n icon?: ReactNode;\n /** Section body — SettingsRow, sub-sections, etc. */\n children?: ReactNode;\n /** Right-aligned header slot (e.g. \"Restore defaults\" button). */\n headerActions?: ReactNode;\n}\n\nexport const SettingsSection = forwardRef<HTMLElement, SettingsSectionProps>(function SettingsSection(\n props,\n ref,\n) {\n const { id, title, description, icon, children, headerActions, className, ...rest } = props;\n return (\n <section\n ref={ref}\n id={id}\n aria-labelledby={`${id}-title`}\n className={cx('v8-settings-section', className)}\n style={{\n padding: 'var(--space-5) var(--space-6)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n }}\n {...rest}\n >\n <header\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-3)',\n marginBottom: 'var(--space-4)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 'var(--space-3)', minWidth: 0 }}>\n {icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n background: 'color-mix(in oklch, var(--accent) 14%, transparent)',\n color: 'var(--accent)',\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n <h2\n id={`${id}-title`}\n style={{\n fontSize: 'var(--fs-15)',\n fontWeight: 600,\n color: 'var(--fg)',\n lineHeight: 'var(--lh-snug)',\n margin: 0,\n }}\n >\n {title}\n </h2>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n {headerActions !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-2)', flexShrink: 0 }}>\n {headerActions}\n </div>\n )}\n </header>\n <div className=\"v8-settings-section__body\">{children}</div>\n </section>\n );\n});","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsRow — one labelled option inside a SettingsSection.\n *\n * Three-column layout:\n * ┌─ label + description ──────────── control ─┐\n * The label column is required; the control slot\n * hosts the actual interactive (Switch, Select, Slider, custom button, etc.).\n */\n\nexport interface SettingsRowProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n /** The control label (left column). */\n label: ReactNode;\n /** Optional one-line description (left column, below label). */\n description?: ReactNode;\n /** Right column — the interactive control. */\n control: ReactNode;\n /** Mark the row as disabled (visual + aria). */\n disabled?: boolean;\n}\n\nexport const SettingsRow = forwardRef<HTMLDivElement, SettingsRowProps>(function SettingsRow(\n props,\n ref,\n) {\n const { id, label, description, control, disabled = false, className, ...rest } = props;\n // The label is announced via `aria-labelledby` rather than `<label\n // htmlFor>` because the control is generic — its DOM id is set by the\n // consumer (Switch, Select, custom input), and we'd otherwise need to\n // thread it through the props chain. `aria-labelledby` is the WAI-ARIA\n // sanctioned way to label a region without owning a native `<label>`.\n const labelId = `${id}-label`;\n return (\n <div\n ref={ref}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n className={cx('v8-settings-row', className)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-4)',\n padding: 'var(--space-3) 0',\n borderBottom: '1px solid var(--border)',\n opacity: disabled ? 0.5 : 1,\n }}\n {...rest}\n >\n <div id={labelId} style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n display: 'block',\n fontSize: 'var(--fs-13)',\n fontWeight: 500,\n color: 'var(--fg)',\n cursor: disabled ? 'not-allowed' : 'default',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {label}\n </span>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n <div\n role=\"group\"\n aria-labelledby={labelId}\n style={{ flexShrink: 0, alignSelf: 'center' }}\n >\n {control}\n </div>\n </div>\n );\n});"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","checked","setChecked","useControllableState","control","setControl","React.useState","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","React.useRef","isFormControl","context","jsx","isFunction","TRIGGER_NAME","SwitchTrigger","React.forwardRef","onClick","switchProps","forwardedRef","composedRefs","useComposedRefs","initialCheckedStateRef","React.useEffect","associatedForm","reset","Primitive","getState","composeEventHandlers","event","prevChecked","Switch","jsxs","Fragment","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","usePrevious","controlSize","useSize","input","inputProto","bubbles","defaultCheckedRef","forwardRef","ref","className","rest","RxSwitch.Root","cx","RxSwitch.Thumb","PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","SliderProvider","useSliderContext","Slider","min","max","step","orientation","minStepsBetweenThumbs","defaultValue","onValueChange","onValueCommit","inverted","sliderProps","thumbRefs","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","values","setValues","value2","_a","valuesBeforeSlideStartRef","initialValuesRef","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","clamp","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","linearScale","SliderImpl","isBackKey","sliderRef","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","getItems","thumb","setThumb","index","React.useMemo","item","size","resolvedName","percent","thumbContext","THUMB_TRIGGER_NAME","SliderThumbTrigger","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","SliderBubbleInput","setValue","a","b","percentage","totalValues","distances","closestDistance","width","left","halfWidth","offset","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","ratio","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","RxSlider.Root","RxSlider.Track","RxSlider.Range","_","i","RxSlider.Thumb","SettingsSection","id","title","description","icon","headerActions","SettingsRow","labelId"],"mappings":"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","x_google_ignoreList":[0,2]}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import{j as e,r as k}from"./cmdk-BLWIhKrV.js";import{b as m,c as me,u as je,h as fe,i as F,C as Z,L as Q,A as X,j as ee,B as te,S as M,I as d,f as ve,F as ke,a as be}from"./main-LxX9zTRk.js";import{G as Ce,B as v}from"./Button-RmN1RKhE.js";import{S as n,a as i,b as D,c as s}from"./SettingsRow-CppSgkT_.js";import{I as R}from"./index-AL3OLUfz.js";import{T as we}from"./Textarea-Dk97nmjO.js";import{B as _}from"./Badge-BH4C3aUF.js";import{u as T}from"./useFetch-CoVWwbml.js";import{T as ie,R as Se}from"./terminal-B2sSd5t7.js";import{W as ae}from"./wrench-B7go551L.js";import{B as se}from"./brain-BajPVibR.js";import{P as ze}from"./plus-CVH1JB04.js";import{T as Ae}from"./trash-2-JtYRQ79q.js";/**
|
|
2
|
-
* @license lucide-react v0.460.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const oe=m("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/**
|
|
7
|
-
* @license lucide-react v0.460.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const ne=m("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/**
|
|
12
|
-
* @license lucide-react v0.460.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const le=m("Keyboard",[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]]);/**
|
|
17
|
-
* @license lucide-react v0.460.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const re=m("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/**
|
|
22
|
-
* @license lucide-react v0.460.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const de=m("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/**
|
|
27
|
-
* @license lucide-react v0.460.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const ce=m("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
|
|
32
|
-
* @license lucide-react v0.460.0 - ISC
|
|
33
|
-
*
|
|
34
|
-
* This source code is licensed under the ISC license.
|
|
35
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
-
*/const he=m("SlidersVertical",[["line",{x1:"4",x2:"4",y1:"21",y2:"14",key:"1p332r"}],["line",{x1:"4",x2:"4",y1:"10",y2:"3",key:"gb41h5"}],["line",{x1:"12",x2:"12",y1:"21",y2:"12",key:"hf2csr"}],["line",{x1:"12",x2:"12",y1:"8",y2:"3",key:"1kfi7u"}],["line",{x1:"20",x2:"20",y1:"21",y2:"16",key:"1lhrwl"}],["line",{x1:"20",x2:"20",y1:"12",y2:"3",key:"16vvfq"}],["line",{x1:"2",x2:"6",y1:"14",y2:"14",key:"1uebub"}],["line",{x1:"10",x2:"14",y1:"8",y2:"8",key:"1yglbp"}],["line",{x1:"18",x2:"22",y1:"16",y2:"16",key:"1jxqpz"}]]);/**
|
|
37
|
-
* @license lucide-react v0.460.0 - ISC
|
|
38
|
-
*
|
|
39
|
-
* This source code is licensed under the ISC license.
|
|
40
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
41
|
-
*/const ue=m("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);function Me(j){const{items:h,activeId:u,onSelect:p,className:a}=j;return e.jsxs("nav",{"aria-label":"Settings sections",className:me("v8-settings-nav",a),children:[e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:h.map(x=>{const y=u===x.id;return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>p==null?void 0:p(x.id),"aria-current":y?"true":void 0,style:{display:"flex",alignItems:"center",gap:"var(--space-2)",width:"100%",padding:"var(--space-2) var(--space-3)",background:y?"var(--surface-2)":"transparent",border:0,borderRadius:"var(--radius-sm)",color:y?"var(--fg)":"var(--fg-muted)",font:"inherit",fontSize:"var(--fs-13)",fontWeight:y?500:400,cursor:"pointer",textAlign:"left"},children:[x.icon!==void 0&&e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",color:y?"var(--accent)":"var(--fg-subtle)",flexShrink:0},children:x.icon}),e.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:x.title})]})},x.id)})}),e.jsx("style",{children:`
|
|
42
|
-
.v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }
|
|
43
|
-
`})]})}const $=[{id:"general",title:"General",icon:F},{id:"theme",title:"Theme",icon:re},{id:"density",title:"Density",icon:he},{id:"density-rules",title:"Density rules",icon:ue},{id:"palette",title:"Command palette",icon:ie},{id:"keyboard",title:"Keyboard",icon:le},{id:"notifications",title:"Notifications",icon:oe},{id:"storage",title:"Storage",icon:ne},{id:"plugins",title:"Plugins",icon:de},{id:"mcps",title:"MCP servers",icon:Z},{id:"skills",title:"Skills",icon:Q},{id:"hooks",title:"Hooks",icon:ae},{id:"activity",title:"Activity",icon:X},{id:"memory",title:"Memory",icon:se},{id:"task-defaults",title:"Task defaults",icon:ee},{id:"agent-defaults",title:"Agent defaults",icon:te},{id:"privacy",title:"Privacy",icon:ce},{id:"advanced",title:"Advanced",icon:F}],De={workspaceName:"Bizar Harness",defaultView:"overview",themeAccent:"#5b8def",densityBaseFont:13,tasksCompact:!1,memoryCompact:!0,paletteHistory:!0,paletteFuzzy:!0,notifyAgentFinished:!0,notifyCiFailed:!0,notifyTokenBudget:!0,notifyDailyDigest:!1,activityRetentionDays:30,memoryAutoCommit:!0,memoryScopeDefault:"all",defaultTaskPriority:"medium",defaultTaskColumn:"queued",defaultAgentModel:"claude-sonnet-4-5",defaultAgentMaxMistakes:10,analytics:!0,crashReports:!0,piiMode:"redact",reducedMotion:!1,debugOverlay:!1},Re={height:28,padding:"0 var(--space-2)",borderRadius:"var(--radius-sm)",border:"1px solid var(--border)",background:"var(--surface-0)",color:"var(--fg)",fontFamily:"var(--font-sans)",fontSize:"var(--fs-12)",cursor:"pointer",outline:"none"};function c({value:j,defaultValue:h,onChange:u,children:p}){return e.jsx("select",{value:j,defaultValue:h,onChange:a=>u==null?void 0:u(a.target.value),style:Re,children:p})}function A({loading:j,value:h}){return j?e.jsx(be,{style:{width:32,height:16}}):e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:h??0})}function Ge(){var H,E,L,N,O,W,q,G,U,K,Y;const[j,h]=k.useState("general"),u=je(),p=fe(),[a,x]=k.useState(De),[y,pe]=k.useState(null),[P,I]=k.useState(null),b=T("/api/skills?kind=skills"),C=T("/api/skills?kind=mcps"),V=T("/api/skills?kind=hooks"),w=T("/api/agents"),o=(t,l)=>{x(g=>({...g,[t]:l})),r(t,l)},r=async(t,l)=>{try{await ve("/api/settings",{method:"PATCH",body:{[t]:l}}),pe(Date.now()),I(null)}catch(g){I((g instanceof ke,g.message))}},xe=$.map(t=>({id:t.id,title:t.title,icon:e.jsx(t.icon,{size:14,"aria-hidden":"true"})})),ye=t=>{h(t),requestAnimationFrame(()=>{var l;(l=document.getElementById(t))==null||l.scrollIntoView({behavior:"smooth",block:"start"})})},ge=k.useRef(null);return k.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=$.map(f=>document.getElementById(f.id)).filter(f=>f!==null);if(t.length===0)return;const l=new Map,g=new IntersectionObserver(f=>{for(const S of f){const z=S.target.id;S.isIntersecting?l.set(z,S.intersectionRatio):l.delete(z)}if(l.size===0)return;let B,J=-1;for(const[S,z]of l)z>J&&(J=z,B=S);B&&h(B)},{rootMargin:"-30% 0px -50% 0px",threshold:[0,.25,.5,.75,1]});for(const f of t)g.observe(f);return()=>g.disconnect()},[]),e.jsx("div",{ref:ge,children:e.jsxs(Ce,{cols:3,gap:5,children:[e.jsx("aside",{style:{position:"sticky",top:0,alignSelf:"start"},children:e.jsx(Me,{items:xe,activeId:j,onSelect:ye})}),e.jsxs(M,{gap:5,style:{gridColumn:"span 2"},children:[P!==null&&e.jsx("div",{role:"alert",style:{padding:"var(--space-3)",background:"color-mix(in oklch, var(--danger) 12%, var(--surface-0))",border:"1px solid var(--danger)",borderRadius:"var(--radius-md)",fontSize:"var(--fs-12)"},children:P}),y!==null&&e.jsxs(d,{align:"center",justify:"flex-end",gap:2,style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:[e.jsx("span",{children:"Settings saved"}),e.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:new Date(y).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]}),e.jsxs(n,{id:"general",title:"General",description:"Workspace identity + default landing page.",icon:e.jsx(F,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"workspace-name",label:"Workspace name",description:"Shown in the topbar and command palette.",control:e.jsx(R,{value:a.workspaceName,onChange:t=>o("workspaceName",t.target.value),style:{width:240}})}),e.jsx(i,{id:"default-view",label:"Default view on launch",control:e.jsxs(c,{value:a.defaultView,onChange:t=>o("defaultView",t),children:[e.jsx("option",{value:"overview",children:"Overview"}),e.jsx("option",{value:"tasks",children:"Tasks"}),e.jsx("option",{value:"goals",children:"Goals"}),e.jsx("option",{value:"agents",children:"Agents"}),e.jsx("option",{value:"activity",children:"Activity"}),e.jsx("option",{value:"settings",children:"Settings"})]})})]}),e.jsxs(n,{id:"theme",title:"Theme",description:"Color mode + accent + typography.",icon:e.jsx(re,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"theme-mode",label:"Color mode",control:e.jsxs(c,{value:u.mode,onChange:t=>u.setMode(t),children:[e.jsx("option",{value:"system",children:"System"}),e.jsx("option",{value:"light",children:"Light"}),e.jsx("option",{value:"dark",children:"Dark"})]})}),e.jsx(i,{id:"theme-accent",label:"Accent color",description:"Personalize the leading-edge accent stripe.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx("input",{type:"color",value:a.themeAccent,onChange:t=>o("themeAccent",t.target.value),style:{width:40,height:28,border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",background:"transparent",cursor:"pointer"}}),e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:a.themeAccent})]})}),e.jsx(i,{id:"theme-font",label:"Font family",description:"Body type. System fonts reduce render time.",control:e.jsxs(c,{defaultValue:"inter",children:[e.jsx("option",{value:"inter",children:"Inter"}),e.jsx("option",{value:"system",children:"System UI"}),e.jsx("option",{value:"jetbrains",children:"JetBrains Mono"})]})}),e.jsx(i,{id:"theme-radius",label:"Border radius",description:"0 = sharp; 16 = rounded.",control:e.jsx(D,{defaultValue:[8],min:0,max:16,step:1})})]}),e.jsxs(n,{id:"density",title:"Density",description:"Comfortable by default. Compact fits more on screen.",icon:e.jsx(he,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"density-mode",label:"Density",control:e.jsxs(c,{value:p.density,onChange:t=>p.setDensity(t),children:[e.jsx("option",{value:"comfortable",children:"Comfortable"}),e.jsx("option",{value:"compact",children:"Compact"})]})}),e.jsx(i,{id:"density-base-font",label:"Base font size",description:"Adjusts the `--fs-13` token globally.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.densityBaseFont],onValueChange:t=>o("densityBaseFont",t[0]??13),min:11,max:16,step:1}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.densityBaseFont,"px"]})]})})]}),e.jsxs(n,{id:"density-rules",title:"Density rules",description:"Override density per surface.",icon:e.jsx(ue,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"tasks-compact",label:"Tasks page — compact by default",control:e.jsx(s,{checked:a.tasksCompact,onCheckedChange:t=>o("tasksCompact",t)})}),e.jsx(i,{id:"memory-compact",label:"Memory page — compact by default",control:e.jsx(s,{checked:a.memoryCompact,onCheckedChange:t=>o("memoryCompact",t)})}),e.jsx(i,{id:"activity-compact",label:"Activity page — compact by default",control:e.jsx(s,{onCheckedChange:t=>r("activityCompact",t)})})]}),e.jsxs(n,{id:"palette",title:"Command palette",description:"How the ⌘K palette behaves.",icon:e.jsx(ie,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"palette-history",label:"Show recent commands",control:e.jsx(s,{checked:a.paletteHistory,onCheckedChange:t=>o("paletteHistory",t)})}),e.jsx(i,{id:"palette-fuzzy",label:"Fuzzy match",control:e.jsx(s,{checked:a.paletteFuzzy,onCheckedChange:t=>o("paletteFuzzy",t)})}),e.jsx(i,{id:"palette-navigate",label:"Show navigation group",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("paletteNavigate",t)})}),e.jsx(i,{id:"palette-spawn",label:"Show agent-spawn group",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("paletteSpawn",t)})}),e.jsx(i,{id:"palette-scope",label:"Default scope",description:"Where palette actions apply when no context.",control:e.jsxs(c,{defaultValue:"project",children:[e.jsx("option",{value:"project",children:"Active project"}),e.jsx("option",{value:"global",children:"Global"})]})})]}),e.jsxs(n,{id:"keyboard",title:"Keyboard",description:"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).",icon:e.jsx(le,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"kb-palette",label:"Open command palette",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘K"})}),e.jsx(i,{id:"kb-search",label:"Search tasks",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘/"})}),e.jsx(i,{id:"kb-newtask",label:"New task",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘N"})}),e.jsx(i,{id:"kb-toggle-theme",label:"Toggle theme",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘⇧L"})}),e.jsx(i,{id:"kb-toggle-density",label:"Toggle density",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘⇧D"})}),e.jsx(i,{id:"kb-reload",label:"Reload window",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘R"})})]}),e.jsxs(n,{id:"notifications",title:"Notifications",description:"When the harness should ping you.",icon:e.jsx(oe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"n-agent-finished",label:"Agent run finished",control:e.jsx(s,{checked:a.notifyAgentFinished,onCheckedChange:t=>o("notifyAgentFinished",t)})}),e.jsx(i,{id:"n-task-moved",label:"Task moved between columns",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("notifyTaskMoved",t)})}),e.jsx(i,{id:"n-ci-failed",label:"CI failed",control:e.jsx(s,{checked:a.notifyCiFailed,onCheckedChange:t=>o("notifyCiFailed",t)})}),e.jsx(i,{id:"n-token-budget",label:"Token budget 80%",control:e.jsx(s,{checked:a.notifyTokenBudget,onCheckedChange:t=>o("notifyTokenBudget",t)})}),e.jsx(i,{id:"n-daily-digest",label:"Daily digest at 09:00",control:e.jsx(s,{checked:a.notifyDailyDigest,onCheckedChange:t=>o("notifyDailyDigest",t)})}),e.jsx(i,{id:"n-channel",label:"Channel",description:"Where notifications render.",control:e.jsxs(c,{defaultValue:"toast",children:[e.jsx("option",{value:"toast",children:"In-app toast"}),e.jsx("option",{value:"system",children:"OS notification"}),e.jsx("option",{value:"both",children:"Both"}),e.jsx("option",{value:"silent",children:"Silent"})]})})]}),e.jsxs(n,{id:"storage",title:"Storage",description:"Where local data lives.",icon:e.jsx(ne,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"store-path",label:"Local store path",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.bizar/store.db"})}),e.jsx(i,{id:"cache-path",label:"Cache directory",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.cache/bizar"})}),e.jsx(i,{id:"sessions-path",label:"Claude Code sessions",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.claude/sessions"})}),e.jsx(i,{id:"cache-size",label:"Cache size",control:e.jsx(A,{loading:!1,value:42})}),e.jsx(i,{id:"store-gc",label:"Garbage collect",description:"Prune empty sessions and orphaned tasks.",control:e.jsx(v,{variant:"secondary",children:"Run GC"})}),e.jsx(i,{id:"store-clear",label:"Clear local cache",description:"Destructive. Wipes the activity log and snapshots.",control:e.jsx(v,{variant:"danger",children:"Clear…"})})]}),e.jsxs(n,{id:"plugins",title:"Plugins",description:"Plugin registrations under `.claude/`.",icon:e.jsx(de,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"plugins-count",label:"Loaded plugins",control:e.jsx(A,{loading:w.loading,value:((E=(H=w.data)==null?void 0:H.agents)==null?void 0:E.length)??0})}),e.jsx(i,{id:"plugins-bizar",label:"Bizar",description:"Core plugin. Required — disable with care.",control:e.jsx(s,{defaultChecked:!0,disabled:!0})}),Array.isArray((L=w.data)==null?void 0:L.agents)&&w.data.agents.length>0&&e.jsx(i,{id:"plugins-list",label:"Active agents",control:e.jsx(M,{gap:1,style:{maxHeight:200,overflowY:"auto",width:360},children:w.data.agents.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(_,{tone:"success",children:"active"})]},t.name))})})]}),e.jsxs(n,{id:"mcps",title:"MCP servers",description:"Model Context Protocol servers.",icon:e.jsx(Z,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"mcps-count",label:"Registered MCPs",control:e.jsx(A,{loading:C.loading,value:((O=(N=C.data)==null?void 0:N.skills)==null?void 0:O.length)??0})}),Array.isArray((W=C.data)==null?void 0:W.skills)&&C.data.skills.length>0&&e.jsx(i,{id:"mcps-list",label:"Servers",control:e.jsx(M,{gap:1,style:{maxHeight:220,overflowY:"auto",width:360},children:C.data.skills.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(s,{defaultChecked:!0,onCheckedChange:l=>void r(`mcp:${t.name}`,l)})]},t.name))})})]}),e.jsxs(n,{id:"skills",title:"Skills",description:"Bizar skill packs.",icon:e.jsx(Q,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"skills-count",label:"Loaded skills",control:e.jsx(A,{loading:b.loading,value:((G=(q=b.data)==null?void 0:q.skills)==null?void 0:G.length)??0})}),Array.isArray((U=b.data)==null?void 0:U.skills)&&b.data.skills.length>0&&e.jsx(i,{id:"skills-list",label:"Skill packs",control:e.jsx(M,{gap:1,style:{maxHeight:260,overflowY:"auto",width:360},children:b.data.skills.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsxs(d,{align:"center",gap:2,children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(_,{tone:"neutral",children:t.source})]}),e.jsx(s,{defaultChecked:!0,onCheckedChange:l=>void r(`skill:${t.name}`,l)})]},t.name))})})]}),e.jsxs(n,{id:"hooks",title:"Hooks",description:"Executable hook scripts.",icon:e.jsx(ae,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"hooks-count",label:"Registered hooks",control:e.jsx(A,{loading:V.loading,value:((Y=(K=V.data)==null?void 0:K.skills)==null?void 0:Y.length)??0})}),e.jsx(i,{id:"hooks-pretool",label:"PreToolUse",description:"Block writes to .env / secrets / node_modules.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-posttool",label:"PostToolUse",description:"Log tool latency to ~/.config/bizar/hook-logs/.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-taskstart",label:"TaskStart",description:"Prime AI with project context.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-taskresume",label:"TaskResume",description:"Re-read state + check git log.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-prompt",label:"UserPromptSubmit",description:"Tag prompts for routing.",control:e.jsx(s,{defaultChecked:!0})})]}),e.jsxs(n,{id:"activity",title:"Activity",description:"Stream retention + export.",icon:e.jsx(X,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"activity-retention",label:"Retain last",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.activityRetentionDays],onValueChange:t=>o("activityRetentionDays",t[0]??30),min:7,max:365,step:1}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.activityRetentionDays," days"]})]})}),e.jsx(i,{id:"activity-hide",label:"Hide noisy event types",description:"Comma-separated kinds. E.g. 'heartbeat,ping'.",control:e.jsx(R,{placeholder:"heartbeat, ping, system",style:{width:280}})}),e.jsx(i,{id:"activity-export",label:"Export",description:"Download the full activity log as NDJSON.",control:e.jsx(v,{variant:"secondary",children:"Export…"})})]}),e.jsxs(n,{id:"memory",title:"Memory",description:"Cross-session memo behavior.",icon:e.jsx(se,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"memory-auto-commit",label:"Auto-commit project memos",control:e.jsx(s,{checked:a.memoryAutoCommit,onCheckedChange:t=>o("memoryAutoCommit",t)})}),e.jsx(i,{id:"memory-scope",label:"Default scope filter",control:e.jsxs(c,{value:a.memoryScopeDefault,onChange:t=>o("memoryScopeDefault",t),children:[e.jsx("option",{value:"project",children:"Project"}),e.jsx("option",{value:"global",children:"Global"}),e.jsx("option",{value:"all",children:"All"})]})}),e.jsx(i,{id:"memory-index",label:"Re-index vault",description:"Rebuild search index. May take a moment.",control:e.jsx(v,{variant:"secondary",children:"Re-index"})})]}),e.jsxs(n,{id:"task-defaults",title:"Task defaults",description:"Defaults applied to new tasks.",icon:e.jsx(ee,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"task-priority",label:"Default priority",control:e.jsxs(c,{value:a.defaultTaskPriority,onChange:t=>o("defaultTaskPriority",t),children:[e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"medium",children:"Medium"}),e.jsx("option",{value:"high",children:"High"}),e.jsx("option",{value:"urgent",children:"Urgent"})]})}),e.jsx(i,{id:"task-column",label:"Default column",control:e.jsxs(c,{value:a.defaultTaskColumn,onChange:t=>o("defaultTaskColumn",t),children:[e.jsx("option",{value:"queued",children:"Backlog"}),e.jsx("option",{value:"doing",children:"In progress"}),e.jsx("option",{value:"blocked",children:"In review"}),e.jsx("option",{value:"done",children:"Done"})]})}),e.jsx(i,{id:"task-assignee",label:"Default assignee",description:"Auto-assigns new tasks to this agent (empty = unassigned).",control:e.jsx(R,{placeholder:"odin",style:{width:240}})})]}),e.jsxs(n,{id:"agent-defaults",title:"Agent defaults",description:"Defaults applied when spawning agents.",icon:e.jsx(te,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"agent-model",label:"Default model",control:e.jsx(R,{value:a.defaultAgentModel,onChange:t=>o("defaultAgentModel",t.target.value),style:{width:240}})}),e.jsx(i,{id:"agent-mistakes",label:"Max consecutive mistakes",description:"Higher = more forgiving. Default 10.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.defaultAgentMaxMistakes],onValueChange:t=>o("defaultAgentMaxMistakes",t[0]??10),min:3,max:20,step:1}),e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:a.defaultAgentMaxMistakes})]})}),e.jsx(i,{id:"agent-bg",label:"Spawn as background by default",control:e.jsx(s,{onCheckedChange:t=>r("agentBackgroundDefault",t)})}),e.jsx(i,{id:"agent-worktree",label:"Always create a worktree",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("agentWorktree",t)})}),e.jsx(i,{id:"agent-system-prompt",label:"Extra system prompt",description:"Appended to every agent's system prompt.",control:e.jsx(we,{rows:3,placeholder:"You are a careful, methodical engineer…"})})]}),e.jsxs(n,{id:"privacy",title:"Privacy",description:"What the harness sends and stores.",icon:e.jsx(ce,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"privacy-analytics",label:"Anonymous analytics",control:e.jsx(s,{checked:a.analytics,onCheckedChange:t=>o("analytics",t)})}),e.jsx(i,{id:"privacy-crash",label:"Crash reports",control:e.jsx(s,{checked:a.crashReports,onCheckedChange:t=>o("crashReports",t)})}),e.jsx(i,{id:"privacy-pii",label:"PII handling",description:"How personal data is treated before persistence.",control:e.jsxs(c,{value:a.piiMode,onChange:t=>o("piiMode",t),children:[e.jsx("option",{value:"off",children:"Off"}),e.jsx("option",{value:"redact",children:"Redact"}),e.jsx("option",{value:"pseudonymize",children:"Pseudonymize"}),e.jsx("option",{value:"block",children:"Block"})]})}),e.jsx(i,{id:"privacy-telemetry",label:"Send token usage telemetry",control:e.jsx(s,{onCheckedChange:t=>r("telemetryTokens",t)})})]}),e.jsxs(n,{id:"advanced",title:"Advanced",description:"Power-user toggles. Touch with care.",icon:e.jsx(F,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"advanced-reduced-motion",label:"Reduce motion",control:e.jsx(s,{checked:a.reducedMotion,onCheckedChange:t=>o("reducedMotion",t)})}),e.jsx(i,{id:"advanced-debug",label:"Debug overlay",description:"Show agent + tool call traces in the topbar.",control:e.jsx(s,{checked:a.debugOverlay,onCheckedChange:t=>o("debugOverlay",t)})}),e.jsx(i,{id:"advanced-restart",label:"Restart dashboard backend",description:"Stop and relaunch the local server. Unsaved tasks are safe on disk.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsxs(v,{variant:"danger",children:[e.jsx(Se,{size:12,"aria-hidden":!0})," Restart…"]}),e.jsxs(v,{variant:"ghost",children:[e.jsx(ze,{size:12,"aria-hidden":!0})," Rebuild"]})]})}),e.jsx(i,{id:"advanced-logs",label:"Open logs folder",control:e.jsxs(v,{variant:"secondary",children:[e.jsx(Ae,{size:12,"aria-hidden":!0})," Purge logs"]})})]})]})]})})}export{Ge as SettingsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsView-DUc2meHV.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/bell.js","../../../node_modules/lucide-react/dist/esm/icons/database.js","../../../node_modules/lucide-react/dist/esm/icons/keyboard.js","../../../node_modules/lucide-react/dist/esm/icons/palette.js","../../../node_modules/lucide-react/dist/esm/icons/plug.js","../../../node_modules/lucide-react/dist/esm/icons/shield-check.js","../../../node_modules/lucide-react/dist/esm/icons/sliders-vertical.js","../../../node_modules/lucide-react/dist/esm/icons/sparkles.js","../../src/web/v8/ui/settings/SettingsNav.tsx","../../src/web/v8/views/Settings/SettingsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Bell = createLucideIcon(\"Bell\", [\n [\"path\", { d: \"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\", key: \"1qo2s2\" }],\n [\"path\", { d: \"M10.3 21a1.94 1.94 0 0 0 3.4 0\", key: \"qgo35s\" }]\n]);\n\nexport { Bell as default };\n//# sourceMappingURL=bell.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Database = createLucideIcon(\"Database\", [\n [\"ellipse\", { cx: \"12\", cy: \"5\", rx: \"9\", ry: \"3\", key: \"msslwz\" }],\n [\"path\", { d: \"M3 5V19A9 3 0 0 0 21 19V5\", key: \"1wlel7\" }],\n [\"path\", { d: \"M3 12A9 3 0 0 0 21 12\", key: \"mv7ke4\" }]\n]);\n\nexport { Database as default };\n//# sourceMappingURL=database.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Keyboard = createLucideIcon(\"Keyboard\", [\n [\"path\", { d: \"M10 8h.01\", key: \"1r9ogq\" }],\n [\"path\", { d: \"M12 12h.01\", key: \"1mp3jc\" }],\n [\"path\", { d: \"M14 8h.01\", key: \"1primd\" }],\n [\"path\", { d: \"M16 12h.01\", key: \"1l6xoz\" }],\n [\"path\", { d: \"M18 8h.01\", key: \"emo2bl\" }],\n [\"path\", { d: \"M6 8h.01\", key: \"x9i8wu\" }],\n [\"path\", { d: \"M7 16h10\", key: \"wp8him\" }],\n [\"path\", { d: \"M8 12h.01\", key: \"czm47f\" }],\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }]\n]);\n\nexport { Keyboard as default };\n//# sourceMappingURL=keyboard.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Palette = createLucideIcon(\"Palette\", [\n [\"circle\", { cx: \"13.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"1okk4w\" }],\n [\"circle\", { cx: \"17.5\", cy: \"10.5\", r: \".5\", fill: \"currentColor\", key: \"f64h9f\" }],\n [\"circle\", { cx: \"8.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"fotxhn\" }],\n [\"circle\", { cx: \"6.5\", cy: \"12.5\", r: \".5\", fill: \"currentColor\", key: \"qy21gx\" }],\n [\n \"path\",\n {\n d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\",\n key: \"12rzf8\"\n }\n ]\n]);\n\nexport { Palette as default };\n//# sourceMappingURL=palette.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plug = createLucideIcon(\"Plug\", [\n [\"path\", { d: \"M12 22v-5\", key: \"1ega77\" }],\n [\"path\", { d: \"M9 8V2\", key: \"14iosj\" }],\n [\"path\", { d: \"M15 8V2\", key: \"18g5xt\" }],\n [\"path\", { d: \"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\", key: \"osxo6l\" }]\n]);\n\nexport { Plug as default };\n//# sourceMappingURL=plug.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SlidersVertical = createLucideIcon(\"SlidersVertical\", [\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"21\", y2: \"14\", key: \"1p332r\" }],\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"10\", y2: \"3\", key: \"gb41h5\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"21\", y2: \"12\", key: \"hf2csr\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"3\", key: \"1kfi7u\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"21\", y2: \"16\", key: \"1lhrwl\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"12\", y2: \"3\", key: \"16vvfq\" }],\n [\"line\", { x1: \"2\", x2: \"6\", y1: \"14\", y2: \"14\", key: \"1uebub\" }],\n [\"line\", { x1: \"10\", x2: \"14\", y1: \"8\", y2: \"8\", key: \"1yglbp\" }],\n [\"line\", { x1: \"18\", x2: \"22\", y1: \"16\", y2: \"16\", key: \"1jxqpz\" }]\n]);\n\nexport { SlidersVertical as default };\n//# sourceMappingURL=sliders-vertical.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sparkles = createLucideIcon(\"Sparkles\", [\n [\n \"path\",\n {\n d: \"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\",\n key: \"4pj2yx\"\n }\n ],\n [\"path\", { d: \"M20 3v4\", key: \"1olli1\" }],\n [\"path\", { d: \"M22 5h-4\", key: \"1gvqau\" }],\n [\"path\", { d: \"M4 17v2\", key: \"vumght\" }],\n [\"path\", { d: \"M5 18H3\", key: \"zchphs\" }]\n]);\n\nexport { Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","import { type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsNav — left rail inside the Settings page.\n *\n * Lists each section so the user can jump (or scroll) to it. The active\n * section is highlighted. The nav is a vertical list with section ids\n * as the anchor target; no JS router needed.\n */\n\nexport interface SettingsNavItem {\n id: string;\n title: string;\n icon?: ReactNode;\n}\n\nexport interface SettingsNavProps {\n items: readonly SettingsNavItem[];\n /** The id of the currently-visible section. */\n activeId?: string;\n /** Click handler — usually `() => document.getElementById(id)?.scrollIntoView()`. */\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nexport function SettingsNav(props: SettingsNavProps) {\n const { items, activeId, onSelect, className } = props;\n return (\n <nav aria-label=\"Settings sections\" className={cx('v8-settings-nav', className)}>\n <ul\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }}\n >\n {items.map((item) => {\n const isActive = activeId === item.id;\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect?.(item.id)}\n aria-current={isActive ? 'true' : undefined}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n width: '100%',\n padding: 'var(--space-2) var(--space-3)',\n background: isActive ? 'var(--surface-2)' : 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: isActive ? 'var(--fg)' : 'var(--fg-muted)',\n font: 'inherit',\n fontSize: 'var(--fs-13)',\n fontWeight: isActive ? 500 : 400,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n {item.icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n color: isActive ? 'var(--accent)' : 'var(--fg-subtle)',\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n )}\n <span style={{ minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {item.title}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <style>{`\n .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }\n `}</style>\n </nav>\n );\n}","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport {\n Palette,\n Keyboard,\n Bell,\n Database,\n Plug,\n Library as LibraryIcon,\n Wrench,\n Activity,\n Brain,\n ShieldCheck,\n Sliders,\n Sparkles,\n Terminal,\n Settings as SettingsIcon,\n Cpu,\n Bot,\n CheckSquare,\n Plus,\n Trash2,\n RotateCw,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Slider } from '../../ui/controls/Slider.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { SettingsSection } from '../../ui/settings/SettingsSection.js';\nimport { SettingsRow } from '../../ui/settings/SettingsRow.js';\nimport { SettingsNav, type SettingsNavItem } from '../../ui/settings/SettingsNav.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useTheme } from '../../ui/theme/useTheme.js';\nimport { useDensity } from '../../ui/theme/useDensity.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\n/**\n * SettingsView — Sprint S15 expansion. 19 sections (up from 16) with\n * real controls throughout. Every Switch / Select / Slider / Input is\n * either:\n * - live-bound to a Provider (Theme / Density),\n * - persisted via PATCH /api/settings (everything else), or\n * - backed by a small per-section sub-endpoint when present.\n *\n * Sections:\n * 1. General workspace identity + default view\n * 2. Theme color mode + accent + font + radius\n * 3. Density comfortable/compact + base font\n * 4. Density rules per-surface overrides\n * 5. Command palette behaviour + history + fuzzy match + nav\n * 6. Keyboard hotkeys (read-only display + rebinds via /kb)\n * 7. Notifications agent / task / CI / budget / daily digest\n * 8. Storage paths + cache sizes + GC button\n * 9. Plugins mods list with enable toggles\n * 10. MCP servers list + status + click for detail\n * 11. Skills list with enable toggles\n * 12. Hooks list with enable toggles\n * 13. Activity retention + hide list + export\n * 14. Memory scope + auto-commit + search defaults\n * 15. Task defaults default priority / column / assignee\n * 16. Agent defaults default model + spawn flags + max mistakes\n * 17. Privacy telemetry + PII + crash reports\n * 18. Advanced debug overlay + restart server + max mistakes\n */\n\ntype Section = { id: string; title: string; icon: LucideIcon };\n\nconst SECTIONS: Section[] = [\n { id: 'general', title: 'General', icon: SettingsIcon },\n { id: 'theme', title: 'Theme', icon: Palette },\n { id: 'density', title: 'Density', icon: Sliders },\n { id: 'density-rules', title: 'Density rules', icon: Sparkles },\n { id: 'palette', title: 'Command palette', icon: Terminal },\n { id: 'keyboard', title: 'Keyboard', icon: Keyboard },\n { id: 'notifications', title: 'Notifications', icon: Bell },\n { id: 'storage', title: 'Storage', icon: Database },\n { id: 'plugins', title: 'Plugins', icon: Plug },\n { id: 'mcps', title: 'MCP servers', icon: Cpu },\n { id: 'skills', title: 'Skills', icon: LibraryIcon },\n { id: 'hooks', title: 'Hooks', icon: Wrench },\n { id: 'activity', title: 'Activity', icon: Activity },\n { id: 'memory', title: 'Memory', icon: Brain },\n { id: 'task-defaults', title: 'Task defaults', icon: CheckSquare },\n { id: 'agent-defaults', title: 'Agent defaults', icon: Bot },\n { id: 'privacy', title: 'Privacy', icon: ShieldCheck },\n { id: 'advanced', title: 'Advanced', icon: SettingsIcon },\n];\n\ninterface SettingsState {\n workspaceName: string;\n defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';\n themeAccent: string;\n densityBaseFont: number;\n tasksCompact: boolean;\n memoryCompact: boolean;\n paletteHistory: boolean;\n paletteFuzzy: boolean;\n notifyAgentFinished: boolean;\n notifyCiFailed: boolean;\n notifyTokenBudget: boolean;\n notifyDailyDigest: boolean;\n activityRetentionDays: number;\n memoryAutoCommit: boolean;\n memoryScopeDefault: 'project' | 'global' | 'all';\n defaultTaskPriority: 'low' | 'medium' | 'high' | 'urgent';\n defaultTaskColumn: 'queued' | 'doing' | 'blocked' | 'done';\n defaultAgentModel: string;\n defaultAgentMaxMistakes: number;\n analytics: boolean;\n crashReports: boolean;\n piiMode: 'off' | 'redact' | 'pseudonymize' | 'block';\n reducedMotion: boolean;\n debugOverlay: boolean;\n}\n\nconst DEFAULTS: SettingsState = {\n workspaceName: 'Bizar Harness',\n defaultView: 'overview',\n themeAccent: '#5b8def',\n densityBaseFont: 13,\n tasksCompact: false,\n memoryCompact: true,\n paletteHistory: true,\n paletteFuzzy: true,\n notifyAgentFinished: true,\n notifyCiFailed: true,\n notifyTokenBudget: true,\n notifyDailyDigest: false,\n activityRetentionDays: 30,\n memoryAutoCommit: true,\n memoryScopeDefault: 'all',\n defaultTaskPriority: 'medium',\n defaultTaskColumn: 'queued',\n defaultAgentModel: 'claude-sonnet-4-5',\n defaultAgentMaxMistakes: 10,\n analytics: true,\n crashReports: true,\n piiMode: 'redact',\n reducedMotion: false,\n debugOverlay: false,\n};\n\nconst SELECT_STYLE: CSSProperties = {\n height: 28,\n padding: '0 var(--space-2)',\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg)',\n fontFamily: 'var(--font-sans)',\n fontSize: 'var(--fs-12)',\n cursor: 'pointer',\n outline: 'none',\n};\n\nfunction NativeSelect({\n value,\n defaultValue,\n onChange,\n children,\n}: {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: ReactNode;\n}): JSX.Element {\n return (\n <select\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value)}\n style={SELECT_STYLE}\n >\n {children}\n </select>\n );\n}\n\nfunction Count({ loading, value }: { loading: boolean; value: number | undefined }): JSX.Element {\n if (loading) return <Skeleton style={{ width: 32, height: 16 }} />;\n return <code style={{ fontFamily: 'var(--font-mono)' }}>{value ?? 0}</code>;\n}\n\nexport function SettingsView(): JSX.Element {\n const [activeId, setActiveId] = useState<string>('general');\n const theme = useTheme();\n const density = useDensity();\n const [settings, setSettings] = useState<SettingsState>(DEFAULTS);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const skillsRes = useFetch<{ skills?: { name: string; source: string }[] }>('/api/skills?kind=skills');\n const mcpsRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=mcps');\n const hooksRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=hooks');\n const agentsRes = useFetch<{ agents?: { name: string }[] }>('/api/agents');\n\n const update = <K extends keyof SettingsState>(key: K, value: SettingsState[K]): void => {\n setSettings((s) => ({ ...s, [key]: value }));\n void patch(key, value);\n };\n\n const patch = async (key: string, value: unknown): Promise<void> => {\n try {\n await fetchJson('/api/settings', { method: 'PATCH', body: { [key]: value } });\n setSavedAt(Date.now());\n setError(null);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const navItems: SettingsNavItem[] = SECTIONS.map((s) => ({\n id: s.id,\n title: s.title,\n icon: <s.icon size={14} aria-hidden=\"true\" />,\n }));\n\n const handleSelect = (id: string): void => {\n setActiveId(id);\n requestAnimationFrame(() => {\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n };\n\n const rootRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined') return;\n const targets = SECTIONS\n .map((s) => document.getElementById(s.id))\n .filter((el): el is HTMLElement => el !== null);\n if (targets.length === 0) return;\n const visible = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = entry.target.id;\n if (entry.isIntersecting) visible.set(id, entry.intersectionRatio);\n else visible.delete(id);\n }\n if (visible.size === 0) return;\n let bestId: string | undefined;\n let bestRatio = -1;\n for (const [id, ratio] of visible) {\n if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }\n }\n if (bestId) setActiveId(bestId);\n },\n { rootMargin: '-30% 0px -50% 0px', threshold: [0, 0.25, 0.5, 0.75, 1] },\n );\n for (const t of targets) observer.observe(t);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div ref={rootRef}>\n <Grid cols={3} gap={5}>\n <aside style={{ position: 'sticky', top: 0, alignSelf: 'start' }}>\n <SettingsNav items={navItems} activeId={activeId} onSelect={handleSelect} />\n </aside>\n <Stack gap={5} style={{ gridColumn: 'span 2' }}>\n {error !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-3)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-md)', fontSize: 'var(--fs-12)' }}>\n {error}\n </div>\n )}\n {savedAt !== null && (\n <Inline align=\"center\" justify=\"flex-end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n <span>Settings saved</span>\n <span style={{ fontFamily: 'var(--font-mono)' }}>\n {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n </Inline>\n )}\n\n {/* 1. General */}\n <SettingsSection id=\"general\" title=\"General\" description=\"Workspace identity + default landing page.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"workspace-name\"\n label=\"Workspace name\"\n description=\"Shown in the topbar and command palette.\"\n control={\n <Input\n value={settings.workspaceName}\n onChange={(e) => update('workspaceName', e.target.value)}\n style={{ width: 240 }}\n />\n }\n />\n <SettingsRow\n id=\"default-view\"\n label=\"Default view on launch\"\n control={\n <NativeSelect value={settings.defaultView} onChange={(v) => update('defaultView', v as SettingsState['defaultView'])}>\n <option value=\"overview\">Overview</option>\n <option value=\"tasks\">Tasks</option>\n <option value=\"goals\">Goals</option>\n <option value=\"agents\">Agents</option>\n <option value=\"activity\">Activity</option>\n <option value=\"settings\">Settings</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 2. Theme */}\n <SettingsSection id=\"theme\" title=\"Theme\" description=\"Color mode + accent + typography.\" icon={<Palette size={14} aria-hidden />}>\n <SettingsRow\n id=\"theme-mode\"\n label=\"Color mode\"\n control={\n <NativeSelect value={theme.mode} onChange={(v) => theme.setMode(v as 'light' | 'dark' | 'system')}>\n <option value=\"system\">System</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-accent\"\n label=\"Accent color\"\n description=\"Personalize the leading-edge accent stripe.\"\n control={\n <Inline align=\"center\" gap={2}>\n <input\n type=\"color\"\n value={settings.themeAccent}\n onChange={(e) => update('themeAccent', e.target.value)}\n style={{ width: 40, height: 28, border: '1px solid var(--border)', borderRadius: 'var(--radius-sm)', background: 'transparent', cursor: 'pointer' }}\n />\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{settings.themeAccent}</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"theme-font\"\n label=\"Font family\"\n description=\"Body type. System fonts reduce render time.\"\n control={\n <NativeSelect defaultValue=\"inter\">\n <option value=\"inter\">Inter</option>\n <option value=\"system\">System UI</option>\n <option value=\"jetbrains\">JetBrains Mono</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-radius\"\n label=\"Border radius\"\n description=\"0 = sharp; 16 = rounded.\"\n control={<Slider defaultValue={[8]} min={0} max={16} step={1} />}\n />\n </SettingsSection>\n\n {/* 3. Density */}\n <SettingsSection id=\"density\" title=\"Density\" description=\"Comfortable by default. Compact fits more on screen.\" icon={<Sliders size={14} aria-hidden />}>\n <SettingsRow\n id=\"density-mode\"\n label=\"Density\"\n control={\n <NativeSelect value={density.density} onChange={(v) => density.setDensity(v as 'comfortable' | 'compact')}>\n <option value=\"comfortable\">Comfortable</option>\n <option value=\"compact\">Compact</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"density-base-font\"\n label=\"Base font size\"\n description=\"Adjusts the `--fs-13` token globally.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.densityBaseFont]}\n onValueChange={(v) => update('densityBaseFont', v[0] ?? 13)}\n min={11} max={16} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.densityBaseFont}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 4. Density rules */}\n <SettingsSection id=\"density-rules\" title=\"Density rules\" description=\"Override density per surface.\" icon={<Sparkles size={14} aria-hidden />}>\n <SettingsRow id=\"tasks-compact\" label=\"Tasks page — compact by default\" control={<Switch checked={settings.tasksCompact} onCheckedChange={(v) => update('tasksCompact', v)} />} />\n <SettingsRow id=\"memory-compact\" label=\"Memory page — compact by default\" control={<Switch checked={settings.memoryCompact} onCheckedChange={(v) => update('memoryCompact', v)} />} />\n <SettingsRow id=\"activity-compact\" label=\"Activity page — compact by default\" control={<Switch onCheckedChange={(v) => patch('activityCompact', v)} />} />\n </SettingsSection>\n\n {/* 5. Command palette */}\n <SettingsSection id=\"palette\" title=\"Command palette\" description=\"How the ⌘K palette behaves.\" icon={<Terminal size={14} aria-hidden />}>\n <SettingsRow id=\"palette-history\" label=\"Show recent commands\" control={<Switch checked={settings.paletteHistory} onCheckedChange={(v) => update('paletteHistory', v)} />} />\n <SettingsRow id=\"palette-fuzzy\" label=\"Fuzzy match\" control={<Switch checked={settings.paletteFuzzy} onCheckedChange={(v) => update('paletteFuzzy', v)} />} />\n <SettingsRow id=\"palette-navigate\" label=\"Show navigation group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteNavigate', v)} />} />\n <SettingsRow id=\"palette-spawn\" label=\"Show agent-spawn group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteSpawn', v)} />} />\n <SettingsRow\n id=\"palette-scope\"\n label=\"Default scope\"\n description=\"Where palette actions apply when no context.\"\n control={\n <NativeSelect defaultValue=\"project\">\n <option value=\"project\">Active project</option>\n <option value=\"global\">Global</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 6. Keyboard */}\n <SettingsSection id=\"keyboard\" title=\"Keyboard\" description=\"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).\" icon={<Keyboard size={14} aria-hidden />}>\n <SettingsRow id=\"kb-palette\" label=\"Open command palette\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘K</code>} />\n <SettingsRow id=\"kb-search\" label=\"Search tasks\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘/</code>} />\n <SettingsRow id=\"kb-newtask\" label=\"New task\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘N</code>} />\n <SettingsRow id=\"kb-toggle-theme\" label=\"Toggle theme\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧L</code>} />\n <SettingsRow id=\"kb-toggle-density\" label=\"Toggle density\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧D</code>} />\n <SettingsRow id=\"kb-reload\" label=\"Reload window\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘R</code>} />\n </SettingsSection>\n\n {/* 7. Notifications */}\n <SettingsSection id=\"notifications\" title=\"Notifications\" description=\"When the harness should ping you.\" icon={<Bell size={14} aria-hidden />}>\n <SettingsRow id=\"n-agent-finished\" label=\"Agent run finished\" control={<Switch checked={settings.notifyAgentFinished} onCheckedChange={(v) => update('notifyAgentFinished', v)} />} />\n <SettingsRow id=\"n-task-moved\" label=\"Task moved between columns\" control={<Switch defaultChecked onCheckedChange={(v) => patch('notifyTaskMoved', v)} />} />\n <SettingsRow id=\"n-ci-failed\" label=\"CI failed\" control={<Switch checked={settings.notifyCiFailed} onCheckedChange={(v) => update('notifyCiFailed', v)} />} />\n <SettingsRow id=\"n-token-budget\" label=\"Token budget 80%\" control={<Switch checked={settings.notifyTokenBudget} onCheckedChange={(v) => update('notifyTokenBudget', v)} />} />\n <SettingsRow id=\"n-daily-digest\" label=\"Daily digest at 09:00\" control={<Switch checked={settings.notifyDailyDigest} onCheckedChange={(v) => update('notifyDailyDigest', v)} />} />\n <SettingsRow\n id=\"n-channel\"\n label=\"Channel\"\n description=\"Where notifications render.\"\n control={\n <NativeSelect defaultValue=\"toast\">\n <option value=\"toast\">In-app toast</option>\n <option value=\"system\">OS notification</option>\n <option value=\"both\">Both</option>\n <option value=\"silent\">Silent</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 8. Storage */}\n <SettingsSection id=\"storage\" title=\"Storage\" description=\"Where local data lives.\" icon={<Database size={14} aria-hidden />}>\n <SettingsRow id=\"store-path\" label=\"Local store path\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.bizar/store.db</code>} />\n <SettingsRow id=\"cache-path\" label=\"Cache directory\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.cache/bizar</code>} />\n <SettingsRow id=\"sessions-path\" label=\"Claude Code sessions\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.claude/sessions</code>} />\n <SettingsRow id=\"cache-size\" label=\"Cache size\" control={<Count loading={false} value={42} />} />\n <SettingsRow\n id=\"store-gc\"\n label=\"Garbage collect\"\n description=\"Prune empty sessions and orphaned tasks.\"\n control={<Button variant=\"secondary\">Run GC</Button>}\n />\n <SettingsRow\n id=\"store-clear\"\n label=\"Clear local cache\"\n description=\"Destructive. Wipes the activity log and snapshots.\"\n control={<Button variant=\"danger\">Clear…</Button>}\n />\n </SettingsSection>\n\n {/* 9. Plugins */}\n <SettingsSection id=\"plugins\" title=\"Plugins\" description=\"Plugin registrations under `.claude/`.\" icon={<Plug size={14} aria-hidden />}>\n <SettingsRow\n id=\"plugins-count\"\n label=\"Loaded plugins\"\n control={<Count loading={agentsRes.loading} value={agentsRes.data?.agents?.length ?? 0} />}\n />\n <SettingsRow\n id=\"plugins-bizar\"\n label=\"Bizar\"\n description=\"Core plugin. Required — disable with care.\"\n control={<Switch defaultChecked disabled />}\n />\n {Array.isArray(agentsRes.data?.agents) && agentsRes.data.agents.length > 0 && (\n <SettingsRow\n id=\"plugins-list\"\n label=\"Active agents\"\n control={\n <Stack gap={1} style={{ maxHeight: 200, overflowY: 'auto', width: 360 }}>\n {agentsRes.data.agents.map((a) => (\n <Inline key={a.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{a.name}</code>\n <Badge tone=\"success\">active</Badge>\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 10. MCPs */}\n <SettingsSection id=\"mcps\" title=\"MCP servers\" description=\"Model Context Protocol servers.\" icon={<Cpu size={14} aria-hidden />}>\n <SettingsRow id=\"mcps-count\" label=\"Registered MCPs\" control={<Count loading={mcpsRes.loading} value={mcpsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(mcpsRes.data?.skills) && mcpsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"mcps-list\"\n label=\"Servers\"\n control={\n <Stack gap={1} style={{ maxHeight: 220, overflowY: 'auto', width: 360 }}>\n {mcpsRes.data.skills.map((m) => (\n <Inline key={m.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{m.name}</code>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`mcp:${m.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 11. Skills */}\n <SettingsSection id=\"skills\" title=\"Skills\" description=\"Bizar skill packs.\" icon={<LibraryIcon size={14} aria-hidden />}>\n <SettingsRow id=\"skills-count\" label=\"Loaded skills\" control={<Count loading={skillsRes.loading} value={skillsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(skillsRes.data?.skills) && skillsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"skills-list\"\n label=\"Skill packs\"\n control={\n <Stack gap={1} style={{ maxHeight: 260, overflowY: 'auto', width: 360 }}>\n {skillsRes.data.skills.map((s) => (\n <Inline key={s.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <Inline align=\"center\" gap={2}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone=\"neutral\">{s.source}</Badge>\n </Inline>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`skill:${s.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 12. Hooks */}\n <SettingsSection id=\"hooks\" title=\"Hooks\" description=\"Executable hook scripts.\" icon={<Wrench size={14} aria-hidden />}>\n <SettingsRow id=\"hooks-count\" label=\"Registered hooks\" control={<Count loading={hooksRes.loading} value={hooksRes.data?.skills?.length ?? 0} />} />\n <SettingsRow id=\"hooks-pretool\" label=\"PreToolUse\" description=\"Block writes to .env / secrets / node_modules.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-posttool\" label=\"PostToolUse\" description=\"Log tool latency to ~/.config/bizar/hook-logs/.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-taskstart\" label=\"TaskStart\" description=\"Prime AI with project context.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-taskresume\" label=\"TaskResume\" description=\"Re-read state + check git log.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-prompt\" label=\"UserPromptSubmit\" description=\"Tag prompts for routing.\" control={<Switch defaultChecked />} />\n </SettingsSection>\n\n {/* 13. Activity */}\n <SettingsSection id=\"activity\" title=\"Activity\" description=\"Stream retention + export.\" icon={<Activity size={14} aria-hidden />}>\n <SettingsRow\n id=\"activity-retention\"\n label=\"Retain last\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider value={[settings.activityRetentionDays]} onValueChange={(v) => update('activityRetentionDays', v[0] ?? 30)} min={7} max={365} step={1} />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.activityRetentionDays} days</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"activity-hide\"\n label=\"Hide noisy event types\"\n description=\"Comma-separated kinds. E.g. 'heartbeat,ping'.\"\n control={<Input placeholder=\"heartbeat, ping, system\" style={{ width: 280 }} />}\n />\n <SettingsRow\n id=\"activity-export\"\n label=\"Export\"\n description=\"Download the full activity log as NDJSON.\"\n control={<Button variant=\"secondary\">Export…</Button>}\n />\n </SettingsSection>\n\n {/* 14. Memory */}\n <SettingsSection id=\"memory\" title=\"Memory\" description=\"Cross-session memo behavior.\" icon={<Brain size={14} aria-hidden />}>\n <SettingsRow id=\"memory-auto-commit\" label=\"Auto-commit project memos\" control={<Switch checked={settings.memoryAutoCommit} onCheckedChange={(v) => update('memoryAutoCommit', v)} />} />\n <SettingsRow\n id=\"memory-scope\"\n label=\"Default scope filter\"\n control={\n <NativeSelect value={settings.memoryScopeDefault} onChange={(v) => update('memoryScopeDefault', v as SettingsState['memoryScopeDefault'])}>\n <option value=\"project\">Project</option>\n <option value=\"global\">Global</option>\n <option value=\"all\">All</option>\n </NativeSelect>\n }\n />\n <SettingsRow id=\"memory-index\" label=\"Re-index vault\" description=\"Rebuild search index. May take a moment.\" control={<Button variant=\"secondary\">Re-index</Button>} />\n </SettingsSection>\n\n {/* 15. Task defaults */}\n <SettingsSection id=\"task-defaults\" title=\"Task defaults\" description=\"Defaults applied to new tasks.\" icon={<CheckSquare size={14} aria-hidden />}>\n <SettingsRow\n id=\"task-priority\"\n label=\"Default priority\"\n control={\n <NativeSelect value={settings.defaultTaskPriority} onChange={(v) => update('defaultTaskPriority', v as SettingsState['defaultTaskPriority'])}>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-column\"\n label=\"Default column\"\n control={\n <NativeSelect value={settings.defaultTaskColumn} onChange={(v) => update('defaultTaskColumn', v as SettingsState['defaultTaskColumn'])}>\n <option value=\"queued\">Backlog</option>\n <option value=\"doing\">In progress</option>\n <option value=\"blocked\">In review</option>\n <option value=\"done\">Done</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-assignee\"\n label=\"Default assignee\"\n description=\"Auto-assigns new tasks to this agent (empty = unassigned).\"\n control={<Input placeholder=\"odin\" style={{ width: 240 }} />}\n />\n </SettingsSection>\n\n {/* 16. Agent defaults */}\n <SettingsSection id=\"agent-defaults\" title=\"Agent defaults\" description=\"Defaults applied when spawning agents.\" icon={<Bot size={14} aria-hidden />}>\n <SettingsRow\n id=\"agent-model\"\n label=\"Default model\"\n control={\n <Input value={settings.defaultAgentModel} onChange={(e) => update('defaultAgentModel', e.target.value)} style={{ width: 240 }} />\n }\n />\n <SettingsRow\n id=\"agent-mistakes\"\n label=\"Max consecutive mistakes\"\n description=\"Higher = more forgiving. Default 10.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.defaultAgentMaxMistakes]}\n onValueChange={(v) => update('defaultAgentMaxMistakes', v[0] ?? 10)}\n min={3} max={20} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.defaultAgentMaxMistakes}</code>\n </Inline>\n }\n />\n <SettingsRow id=\"agent-bg\" label=\"Spawn as background by default\" control={<Switch onCheckedChange={(v) => patch('agentBackgroundDefault', v)} />} />\n <SettingsRow id=\"agent-worktree\" label=\"Always create a worktree\" control={<Switch defaultChecked onCheckedChange={(v) => patch('agentWorktree', v)} />} />\n <SettingsRow\n id=\"agent-system-prompt\"\n label=\"Extra system prompt\"\n description=\"Appended to every agent's system prompt.\"\n control={<Textarea rows={3} placeholder=\"You are a careful, methodical engineer…\" />}\n />\n </SettingsSection>\n\n {/* 17. Privacy */}\n <SettingsSection id=\"privacy\" title=\"Privacy\" description=\"What the harness sends and stores.\" icon={<ShieldCheck size={14} aria-hidden />}>\n <SettingsRow\n id=\"privacy-analytics\"\n label=\"Anonymous analytics\"\n control={<Switch checked={settings.analytics} onCheckedChange={(v) => update('analytics', v)} />}\n />\n <SettingsRow\n id=\"privacy-crash\"\n label=\"Crash reports\"\n control={<Switch checked={settings.crashReports} onCheckedChange={(v) => update('crashReports', v)} />}\n />\n <SettingsRow\n id=\"privacy-pii\"\n label=\"PII handling\"\n description=\"How personal data is treated before persistence.\"\n control={\n <NativeSelect value={settings.piiMode} onChange={(v) => update('piiMode', v as SettingsState['piiMode'])}>\n <option value=\"off\">Off</option>\n <option value=\"redact\">Redact</option>\n <option value=\"pseudonymize\">Pseudonymize</option>\n <option value=\"block\">Block</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"privacy-telemetry\"\n label=\"Send token usage telemetry\"\n control={<Switch onCheckedChange={(v) => patch('telemetryTokens', v)} />}\n />\n </SettingsSection>\n\n {/* 18. Advanced */}\n <SettingsSection id=\"advanced\" title=\"Advanced\" description=\"Power-user toggles. Touch with care.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"advanced-reduced-motion\"\n label=\"Reduce motion\"\n control={<Switch checked={settings.reducedMotion} onCheckedChange={(v) => update('reducedMotion', v)} />}\n />\n <SettingsRow\n id=\"advanced-debug\"\n label=\"Debug overlay\"\n description=\"Show agent + tool call traces in the topbar.\"\n control={<Switch checked={settings.debugOverlay} onCheckedChange={(v) => update('debugOverlay', v)} />}\n />\n <SettingsRow\n id=\"advanced-restart\"\n label=\"Restart dashboard backend\"\n description=\"Stop and relaunch the local server. Unsaved tasks are safe on disk.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button variant=\"danger\"><RotateCw size={12} aria-hidden /> Restart…</Button>\n <Button variant=\"ghost\"><Plus size={12} aria-hidden /> Rebuild</Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"advanced-logs\"\n label=\"Open logs folder\"\n control={<Button variant=\"secondary\"><Trash2 size={12} aria-hidden /> Purge logs</Button>}\n />\n </SettingsSection>\n </Stack>\n </Grid>\n </div>\n );\n}"],"names":["Bell","createLucideIcon","Database","Keyboard","Palette","Plug","ShieldCheck","SlidersVertical","Sparkles","SettingsNav","props","items","activeId","onSelect","className","jsxs","cx","jsx","item","isActive","SECTIONS","SettingsIcon","Sliders","Terminal","Cpu","LibraryIcon","Wrench","Activity","Brain","CheckSquare","Bot","DEFAULTS","SELECT_STYLE","NativeSelect","value","defaultValue","onChange","children","e","Count","loading","Skeleton","SettingsView","setActiveId","useState","theme","useTheme","density","useDensity","settings","setSettings","savedAt","setSavedAt","error","setError","skillsRes","useFetch","mcpsRes","hooksRes","agentsRes","update","key","s","patch","fetchJson","err","FetchError","navItems","handleSelect","id","_a","rootRef","useRef","useEffect","targets","el","visible","observer","entries","entry","bestId","bestRatio","ratio","t","Grid","Stack","Inline","SettingsSection","SettingsRow","Input","v","Slider","Switch","Button","_b","_c","a","Badge","_e","_d","_f","m","_h","_g","_i","_k","_j","Textarea","RotateCw","Plus","Trash2"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import{r as v,j as e}from"./cmdk-BLWIhKrV.js";import{b as p,c as f}from"./main-LxX9zTRk.js";/**
|
|
2
|
-
* @license lucide-react v0.460.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const h=p("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/**
|
|
7
|
-
* @license lucide-react v0.460.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const j=p("TrendingDown",[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7",key:"1r2t7k"}],["polyline",{points:"16 17 22 17 22 11",key:"11uiuu"}]]);/**
|
|
12
|
-
* @license lucide-react v0.460.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const b=p("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]),T={up:"var(--success)",down:"var(--danger)",flat:"var(--fg-muted)"},k={up:b,down:j,flat:h},S=v.forwardRef(function(l,o){const{label:d,value:a,delta:t,trend:s,hint:i,icon:n,sparkline:r,loading:g,className:m,style:y,...x}=l,c=s!==void 0?k[s]:null;return e.jsxs("div",{ref:o,className:f("v8-stat-tile",m),style:{display:"flex",flexDirection:"column",gap:"var(--space-2)",padding:"var(--space-5)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)",...y},...x,children:[e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-2)"},children:[e.jsx("div",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",fontWeight:500},children:d}),n!==void 0&&e.jsx("span",{style:{color:"var(--fg-subtle)",display:"inline-flex"},children:n})]}),e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"var(--space-2)"},children:[e.jsx("div",{style:{fontSize:"var(--fs-24)",fontWeight:600,color:"var(--fg)",fontVariantNumeric:"tabular-nums",lineHeight:"var(--lh-tight)"},children:g===!0?"—":a}),(t!==void 0||c!==null)&&e.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:2,fontSize:"var(--fs-12)",fontWeight:500,color:s!==void 0?T[s]:"var(--fg-muted)",fontVariantNumeric:"tabular-nums"},children:[c!==null&&e.jsx(c,{size:12,"aria-hidden":"true"}),t]})]}),i!==void 0&&e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-subtle)"},children:i}),r!==void 0&&e.jsx("div",{style:{marginTop:"var(--space-1)"},children:r})]})}),I=v.forwardRef(function(l,o){const{children:d,cols:a,minWidth:t=200,className:s,style:i,...n}=l,r=a!==void 0?`repeat(${a}, minmax(0, 1fr))`:`repeat(auto-fit, minmax(${t}px, 1fr))`;return e.jsx("div",{ref:o,className:f("v8-stat-grid",s),style:{display:"grid",gridTemplateColumns:r,gap:"var(--space-3)",...i},...n,children:d})});export{h as M,I as S,S as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatTile-BRsUIA6P.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/minus.js","../../../node_modules/lucide-react/dist/esm/icons/trending-down.js","../../../node_modules/lucide-react/dist/esm/icons/trending-up.js","../../src/web/v8/ui/data/StatTile.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minus = createLucideIcon(\"Minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TrendingDown = createLucideIcon(\"TrendingDown\", [\n [\"polyline\", { points: \"22 17 13.5 8.5 8.5 13.5 2 7\", key: \"1r2t7k\" }],\n [\"polyline\", { points: \"16 17 22 17 22 11\", key: \"11uiuu\" }]\n]);\n\nexport { TrendingDown as default };\n//# sourceMappingURL=trending-down.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TrendingUp = createLucideIcon(\"TrendingUp\", [\n [\"polyline\", { points: \"22 7 13.5 15.5 8.5 10.5 2 17\", key: \"126l90\" }],\n [\"polyline\", { points: \"16 7 22 7 22 13\", key: \"kwv8wd\" }]\n]);\n\nexport { TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { TrendingDown, TrendingUp, Minus } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * StatTile — a single KPI tile for the overview.\n *\n * Pattern: `[label] [trend-icon delta]`\n * `[BIG value]`\n * `[sparkline?]`\n *\n * Use cases: Overview dashboard, agent detail, goal detail.\n */\nexport type StatTrend = 'up' | 'down' | 'flat';\n\nexport interface StatTileProps extends HTMLAttributes<HTMLDivElement> {\n label: ReactNode;\n value: ReactNode;\n /** Optional delta with trend direction (e.g. \"+12%\" vs last week). */\n delta?: ReactNode;\n trend?: StatTrend;\n /** Optional helper text under the value. */\n hint?: ReactNode;\n /** Optional icon for the top-right corner. */\n icon?: ReactNode;\n /** Inline sparkline rendered beneath the value (use the Sparkline component). */\n sparkline?: ReactNode;\n /** Loading state — replaces value with skeleton. */\n loading?: boolean;\n}\n\nconst TREND_FG: Record<StatTrend, string> = {\n up: 'var(--success)',\n down: 'var(--danger)',\n flat: 'var(--fg-muted)',\n};\n\nconst TREND_ICON: Record<StatTrend, typeof TrendingUp> = {\n up: TrendingUp,\n down: TrendingDown,\n flat: Minus,\n};\n\nexport const StatTile = forwardRef<HTMLDivElement, StatTileProps>(function StatTile(props, ref) {\n const {\n label,\n value,\n delta,\n trend,\n hint,\n icon,\n sparkline,\n loading,\n className,\n style,\n ...rest\n } = props;\n const TrendIcon = trend !== undefined ? TREND_ICON[trend] : null;\n return (\n <div\n ref={ref}\n className={cx('v8-stat-tile', className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-2)',\n padding: 'var(--space-5)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n ...style,\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: 'var(--space-2)' }}>\n <div style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', fontWeight: 500 }}>\n {label}\n </div>\n {icon !== undefined && (\n <span style={{ color: 'var(--fg-subtle)', display: 'inline-flex' }}>{icon}</span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: 'var(--space-2)' }}>\n <div\n style={{\n fontSize: 'var(--fs-24)',\n fontWeight: 600,\n color: 'var(--fg)',\n fontVariantNumeric: 'tabular-nums',\n lineHeight: 'var(--lh-tight)',\n }}\n >\n {loading === true ? '—' : value}\n </div>\n {(delta !== undefined || TrendIcon !== null) && (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 2,\n fontSize: 'var(--fs-12)',\n fontWeight: 500,\n color: trend !== undefined ? TREND_FG[trend] : 'var(--fg-muted)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {TrendIcon !== null && <TrendIcon size={12} aria-hidden=\"true\" />}\n {delta}\n </div>\n )}\n </div>\n {hint !== undefined && (\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-subtle)' }}>{hint}</div>\n )}\n {sparkline !== undefined && <div style={{ marginTop: 'var(--space-1)' }}>{sparkline}</div>}\n </div>\n );\n});\n\n/**\n * StatGrid — responsive grid for StatTiles. Auto-fits 1..4 columns.\n */\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Min tile width (default 200px). */\n minWidth?: number;\n cols?: 2 | 3 | 4;\n}\n\nexport const StatGrid = forwardRef<HTMLDivElement, StatGridProps>(function StatGrid(props, ref) {\n const { children, cols, minWidth = 200, className, style, ...rest } = props;\n const gridTemplate = cols !== undefined\n ? `repeat(${cols}, minmax(0, 1fr))`\n : `repeat(auto-fit, minmax(${minWidth}px, 1fr))`;\n return (\n <div\n ref={ref}\n className={cx('v8-stat-grid', className)}\n style={{\n display: 'grid',\n gridTemplateColumns: gridTemplate,\n gap: 'var(--space-3)',\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n});"],"names":["Minus","createLucideIcon","TrendingDown","TrendingUp","TREND_FG","TREND_ICON","StatTile","forwardRef","props","ref","label","value","delta","trend","hint","icon","sparkline","loading","className","style","rest","TrendIcon","jsxs","cx","jsx","StatGrid","children","cols","minWidth","gridTemplate"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|