@polderlabs/bizar 10.7.2 → 10.11.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/agents/_shared/AGENT_BASELINE.md +48 -243
- package/.claude/agents/_shared/CLAUDE_TOOLS.md +4 -2
- package/.claude/agents/_shared/SKILLS.md +18 -95
- package/.claude/agents/brand-designer.md +7 -5
- package/.claude/agents/debug-specialist.md +68 -0
- package/.claude/agents/exec-assistant.md +2 -1
- package/.claude/agents/help-desk.md +3 -3
- package/.claude/agents/it-lead.md +5 -5
- package/.claude/agents/knowledge-manager.md +2 -2
- package/.claude/agents/office-coordinator.md +3 -4
- package/.claude/agents/office-greeter.md +5 -5
- package/.claude/agents/office-manager.md +127 -42
- package/.claude/agents/planner.md +120 -0
- package/.claude/agents/principal-engineer.md +6 -5
- package/.claude/agents/qa-reviewer.md +4 -4
- package/.claude/agents/research-analyst.md +13 -43
- package/.claude/agents/senior-engineer.md +5 -4
- package/.claude/agents/support-tech.md +21 -73
- package/.claude/agents/ui-designer.md +89 -0
- package/.claude/commands/bizar.md +9 -16
- package/.claude/commands/cron.md +7 -3
- package/.claude/commands/learn.md +4 -2
- package/.claude/commands/plan.md +14 -28
- package/.claude/commands/plow-through.md +19 -38
- package/.claude/commands/pr-review.md +2 -3
- package/.claude/commands/setup-provider.md +15 -88
- package/.claude/commands/sprint.md +3 -3
- package/.claude/commands/tailscale-serve.md +9 -95
- package/.claude/commands/team.md +26 -122
- package/.claude/commands/test.md +3 -3
- package/.claude/commands/use-default.md +53 -0
- package/.claude/commands/use-premium.md +74 -0
- package/.claude/commands/validate.md +13 -61
- package/.claude/hooks/README.md +24 -108
- package/.claude/hooks/advisor-context.mjs +42 -0
- package/.claude/hooks/agent-grounding.mjs +41 -0
- package/.claude/hooks/content-style-guard.mjs +73 -0
- package/.claude/hooks/control-inbox.mjs +95 -0
- package/.claude/hooks/git-workflow-guard.mjs +104 -0
- package/.claude/hooks/learning-extract.mjs +0 -0
- package/.claude/hooks/path-ownership-guard.mjs +89 -0
- package/.claude/hooks/precompact-priorities.sh +11 -0
- package/.claude/hooks/pretooluse-bash.mjs +4 -11
- package/.claude/hooks/sessionend-recall.mjs +0 -0
- package/.claude/hooks/sessionstart-prime.mjs +10 -4
- package/.claude/hooks/simplify-guard.mjs +51 -0
- package/.claude/hooks/telemetry.mjs +69 -0
- package/.claude/hooks/thinking-route.mjs +7 -9
- package/.claude/hooks/worker-suggest.mjs +51 -15
- package/.claude/hooks/worktree-bootstrap.mjs +64 -0
- package/.claude/model-router.json +57 -0
- package/.claude/settings.json +90 -140
- package/AGENTS.md +95 -0
- package/README.md +76 -472
- package/cli/agent-browser-update.mjs +87 -274
- package/cli/atomic.mjs +1 -1
- package/cli/audit.mjs +31 -121
- package/cli/banner.mjs +3 -14
- package/cli/bin.mjs +83 -331
- package/cli/bootstrap.mjs +9 -12
- package/cli/commands/claude-cmd.mjs +45 -309
- package/cli/commands/control.mjs +102 -0
- package/cli/commands/install.mjs +9 -56
- package/cli/commands/rca.mjs +63 -165
- package/cli/commands/sandbox.mjs +89 -183
- package/cli/commands/setup-provider.mjs +65 -423
- package/cli/commands/task.mjs +249 -0
- package/cli/commands/util.mjs +37 -197
- package/cli/commands/validate.mjs +45 -75
- package/cli/control-store.mjs +312 -0
- package/{bizar-dash/src/server → cli/core}/backup-store.mjs +7 -17
- package/cli/doctor.mjs +8 -13
- package/cli/export.mjs +3 -7
- package/cli/init.mjs +1 -135
- package/cli/install/banner.mjs +4 -14
- package/cli/install/paths.mjs +3 -8
- package/cli/install.mjs +2 -7
- package/cli/migrate.mjs +24 -24
- package/{bizar-dash/src/server → cli}/progress-parser.mjs +7 -5
- package/cli/provision.mjs +140 -165
- package/cli/task-ledger.mjs +842 -0
- package/cli/update.mjs +2 -2
- package/cli/utils.mjs +1 -38
- package/config/AGENTS.md +14 -591
- package/config/rules/general.md +1 -1
- package/config/rules/uncertainty.md +2 -2
- package/config/skills/9router/SKILL.md +3 -3
- package/config/skills/9router-tts/SKILL.md +1 -1
- package/config/skills/agent-browser/SKILL.md +53 -0
- package/config/skills/bizar/README.md +3 -3
- package/config/skills/bizar/SKILL.md +31 -431
- package/config/skills/clean-gone-branches/SKILL.md +8 -0
- package/config/skills/commit-staged/SKILL.md +15 -0
- package/config/skills/cpp-coding-standards/README.md +3 -3
- package/config/skills/cpp-testing/README.md +2 -2
- package/config/skills/create-pr/SKILL.md +16 -0
- package/config/skills/cubesandbox/SKILL.md +33 -128
- package/config/skills/embedded-esp-idf/README.md +3 -3
- package/config/skills/harness-engineering/SKILL.md +37 -126
- package/config/skills/read-the-damn-docs/SKILL.md +2 -2
- package/config/skills/resolve-pr-comments/SKILL.md +14 -0
- package/config/skills/review-pr/SKILL.md +10 -0
- package/config/skills/self-improvement/SKILL.md +19 -54
- package/config/skills/simplify/SKILL.md +15 -0
- package/config/skills/update-pr-summary/SKILL.md +8 -0
- package/config/trigger-patterns.json +11 -25
- package/package.json +28 -102
- package/packages/sdk/dist/agent-registry.d.ts +2 -2
- package/packages/sdk/dist/agent-registry.js +2 -2
- package/packages/sdk/dist/consensus/index.d.ts +4 -4
- package/packages/sdk/dist/consensus/index.js +5 -5
- package/packages/sdk/dist/federation/envelope.d.ts +1 -1
- package/packages/sdk/dist/federation/envelope.js +2 -2
- package/packages/sdk/dist/index.d.ts +1 -4
- package/packages/sdk/dist/index.js +1 -4
- package/packages/sdk/dist/mcp/server.d.ts +8 -13
- package/packages/sdk/dist/mcp/server.js +15 -77
- package/packages/sdk/dist/router/index.d.ts +2 -2
- package/packages/sdk/dist/router/index.js +2 -2
- package/packages/sdk/dist/version.d.ts +2 -2
- package/packages/sdk/dist/version.js +2 -2
- package/packages/sdk/package.json +1 -2
- package/scripts/git-hooks/pre-commit +2 -2
- package/scripts/git-hooks/pre-push +3 -3
- package/scripts/install-hooks.sh +2 -2
- package/.claude/agents/vp-engineering.md +0 -54
- package/.claude/commands/goal.md +0 -99
- package/.claude/commands/visual-plan.md +0 -24
- package/.claude/hooks/__tests__/pretooluse-editwrite.test.mjs +0 -146
- package/.claude/hooks/__tests__/sessionend-recall.test.mjs +0 -256
- package/.claude/hooks/__tests__/sessionstart-prime.test.mjs +0 -325
- package/.claude/hooks/__tests__/thinking-route.test.mjs +0 -319
- package/.claude/hooks/post-merge-audit.sh +0 -93
- package/.claude/skills/9router/SKILL.md +0 -80
- package/.claude/skills/9router-chat/SKILL.md +0 -73
- package/.claude/skills/9router-embeddings/SKILL.md +0 -69
- package/.claude/skills/9router-image/SKILL.md +0 -86
- package/.claude/skills/9router-stt/SKILL.md +0 -79
- package/.claude/skills/9router-tts/SKILL.md +0 -80
- package/.claude/skills/9router-web-fetch/SKILL.md +0 -99
- package/.claude/skills/9router-web-search/SKILL.md +0 -91
- package/.claude/skills/agent-browser/SKILL.md +0 -64
- package/.claude/skills/bizar/README.md +0 -9
- package/.claude/skills/bizar/SKILL.md +0 -447
- package/.claude/skills/cpp-coding-standards/README.md +0 -28
- package/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
- package/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
- package/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
- package/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
- package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
- package/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
- package/.claude/skills/cpp-testing/README.md +0 -28
- package/.claude/skills/cpp-testing/SKILL.md +0 -304
- package/.claude/skills/cpp-testing/references/coverage.md +0 -370
- package/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
- package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
- package/.claude/skills/cpp-testing/references/mocking.md +0 -364
- package/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
- package/.claude/skills/cubesandbox/SKILL.md +0 -148
- package/.claude/skills/de-sloppify/cleanup.mjs +0 -253
- package/.claude/skills/de-sloppify/cleanup.test.mjs +0 -189
- package/.claude/skills/embedded-esp-idf/README.md +0 -41
- package/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
- package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
- package/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
- package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
- package/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
- package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
- package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
- package/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
- package/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
- package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
- package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
- package/.claude/skills/glyph/SKILL.md +0 -163
- package/.claude/skills/harness-engineering/SKILL.md +0 -142
- package/.claude/skills/lightrag/SKILL.md +0 -81
- package/.claude/skills/memory-protocol/SKILL.md +0 -105
- package/.claude/skills/obsidian/SKILL.md +0 -306
- package/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
- package/.claude/skills/self-improvement/SKILL.md +0 -64
- package/.claude/skills/skillopt/SKILL.md +0 -129
- package/.claude/skills/thinking-archetypes/SKILL.md +0 -90
- package/.claude/skills/thinking-bayesian/SKILL.md +0 -267
- package/.claude/skills/thinking-bounded-rationality/SKILL.md +0 -406
- package/.claude/skills/thinking-circle-of-competence/SKILL.md +0 -216
- package/.claude/skills/thinking-cynefin/SKILL.md +0 -70
- package/.claude/skills/thinking-debiasing/SKILL.md +0 -192
- package/.claude/skills/thinking-dual-process/SKILL.md +0 -282
- package/.claude/skills/thinking-effectuation/SKILL.md +0 -366
- package/.claude/skills/thinking-feedback-loops/SKILL.md +0 -464
- package/.claude/skills/thinking-fermi-estimation/SKILL.md +0 -263
- package/.claude/skills/thinking-first-principles/SKILL.md +0 -167
- package/.claude/skills/thinking-five-whys-plus/SKILL.md +0 -139
- package/.claude/skills/thinking-inversion/SKILL.md +0 -195
- package/.claude/skills/thinking-jobs-to-be-done/SKILL.md +0 -363
- package/.claude/skills/thinking-kepner-tregoe/SKILL.md +0 -154
- package/.claude/skills/thinking-leverage-points/SKILL.md +0 -390
- package/.claude/skills/thinking-lindy-effect/SKILL.md +0 -331
- package/.claude/skills/thinking-map-territory/SKILL.md +0 -111
- package/.claude/skills/thinking-margin-of-safety/SKILL.md +0 -330
- package/.claude/skills/thinking-model-combination/SKILL.md +0 -406
- package/.claude/skills/thinking-model-router/SKILL.md +0 -360
- package/.claude/skills/thinking-model-selection/SKILL.md +0 -341
- package/.claude/skills/thinking-occams-razor/SKILL.md +0 -129
- package/.claude/skills/thinking-ooda/SKILL.md +0 -127
- package/.claude/skills/thinking-opportunity-cost/SKILL.md +0 -360
- package/.claude/skills/thinking-pre-mortem/SKILL.md +0 -170
- package/.claude/skills/thinking-probabilistic/SKILL.md +0 -324
- package/.claude/skills/thinking-red-team/SKILL.md +0 -142
- package/.claude/skills/thinking-regret-minimization/SKILL.md +0 -335
- package/.claude/skills/thinking-reversibility/SKILL.md +0 -326
- package/.claude/skills/thinking-scientific-method/SKILL.md +0 -162
- package/.claude/skills/thinking-second-order/SKILL.md +0 -184
- package/.claude/skills/thinking-socratic/SKILL.md +0 -198
- package/.claude/skills/thinking-steel-manning/SKILL.md +0 -332
- package/.claude/skills/thinking-systems/SKILL.md +0 -238
- package/.claude/skills/thinking-theory-of-constraints/SKILL.md +0 -338
- package/.claude/skills/thinking-thought-experiment/SKILL.md +0 -354
- package/.claude/skills/thinking-triz/SKILL.md +0 -171
- package/.claude/skills/thinking-via-negativa/SKILL.md +0 -358
- package/bizar-dash/.bizar/graph/.graphify_analysis.json +0 -1540
- package/bizar-dash/.bizar/graph/.graphify_labels.json +0 -1
- package/bizar-dash/.bizar/graph/GRAPH_REPORT.md +0 -404
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/0661b816358db84dfdb7f10443db8a61152fd20b3fee950caf8fbf32920a1790.json +0 -1
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/16da06d774142a6e5d74829ad982531286a6193ef798de8f593db029e123ec32.json +0 -1
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/27e5697c01254c69c64c5a33896669073b40afb5ba88375102ae77fa5404136d.json +0 -1
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/532997898027254aa4c0932243dc71d2f55888181232b65974961934997dc85b.json +0 -1
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/84e3451a64c7f99f0cd6a88b0748d7426780486f53ab4935b7476b28c08f8293.json +0 -1
- package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/88e5ea5f3e78fa69353fe9e6a8d1a05391d54605e25600cb125531eb5a6432ff.json +0 -1
- package/bizar-dash/.bizar/graph/cache/stat-index.json +0 -1
- package/bizar-dash/.bizar/graph/graph.html +0 -307
- package/bizar-dash/.bizar/graph/graph.json +0 -40267
- package/bizar-dash/.bizar/graph/manifest.json +0 -762
- package/bizar-dash/.graphifyignore +0 -40
- package/bizar-dash/.obsidian/README.md +0 -14
- package/bizar-dash/.obsidian/daily/2026-06-25.md +0 -9
- package/bizar-dash/.obsidian/vault.json +0 -7
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +0 -103
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +0 -338
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +0 -81
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +0 -172
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +0 -44
- package/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +0 -247
- package/bizar-dash/ARCHITECTURE.md +0 -197
- package/bizar-dash/BROWSER_VERIFICATION.md +0 -190
- package/bizar-dash/CHANGELOG.md +0 -807
- package/bizar-dash/CONTROL_SURFACES.md +0 -156
- package/bizar-dash/DESIGN.md +0 -912
- package/bizar-dash/GLYPH.md +0 -418
- package/bizar-dash/PLAN.md +0 -1135
- package/bizar-dash/SETTINGS_AUDIT.md +0 -225
- package/bizar-dash/critique.json +0 -26
- package/bizar-dash/dist/assets/ActivityFeed-Bw4Cai7r.js +0 -11
- package/bizar-dash/dist/assets/ActivityFeed-Bw4Cai7r.js.map +0 -1
- package/bizar-dash/dist/assets/ActivityView-BC0QQ_j9.js +0 -2
- package/bizar-dash/dist/assets/ActivityView-BC0QQ_j9.js.map +0 -1
- package/bizar-dash/dist/assets/AdminView-CLTNKFL4.js +0 -11
- package/bizar-dash/dist/assets/AdminView-CLTNKFL4.js.map +0 -1
- package/bizar-dash/dist/assets/AgentActivity-DBWDByjk.js +0 -67
- package/bizar-dash/dist/assets/AgentActivity-DBWDByjk.js.map +0 -1
- package/bizar-dash/dist/assets/AgentsView-DD6bCIbA.js +0 -15
- package/bizar-dash/dist/assets/AgentsView-DD6bCIbA.js.map +0 -1
- package/bizar-dash/dist/assets/Alert-pzFISNtS.js +0 -6
- package/bizar-dash/dist/assets/Alert-pzFISNtS.js.map +0 -1
- package/bizar-dash/dist/assets/ArtifactsView-BVU5lfo7.js +0 -21
- package/bizar-dash/dist/assets/ArtifactsView-BVU5lfo7.js.map +0 -1
- package/bizar-dash/dist/assets/AuthView-BZ-bPIOM.js +0 -16
- package/bizar-dash/dist/assets/AuthView-BZ-bPIOM.js.map +0 -1
- package/bizar-dash/dist/assets/Avatar-CRW81ewE.js +0 -6
- package/bizar-dash/dist/assets/Avatar-CRW81ewE.js.map +0 -1
- package/bizar-dash/dist/assets/BackgroundJobsView-w8OZtXyI.js +0 -1
- package/bizar-dash/dist/assets/BackgroundJobsView-w8OZtXyI.js.map +0 -1
- package/bizar-dash/dist/assets/BackupView-u_O3j0TG.js +0 -1
- package/bizar-dash/dist/assets/BackupView-u_O3j0TG.js.map +0 -1
- package/bizar-dash/dist/assets/Banner-Du-3l05O.js +0 -1
- package/bizar-dash/dist/assets/Banner-Du-3l05O.js.map +0 -1
- package/bizar-dash/dist/assets/Card-Clkvh43Q.js +0 -1
- package/bizar-dash/dist/assets/Card-Clkvh43Q.js.map +0 -1
- package/bizar-dash/dist/assets/ChatView-BTjb3mIh.js +0 -9
- package/bizar-dash/dist/assets/ChatView-BTjb3mIh.js.map +0 -1
- package/bizar-dash/dist/assets/Chip-B7ovcm01.js +0 -1
- package/bizar-dash/dist/assets/Chip-B7ovcm01.js.map +0 -1
- package/bizar-dash/dist/assets/ClaudeSessionsView-BoZS5ldi.js +0 -1
- package/bizar-dash/dist/assets/ClaudeSessionsView-BoZS5ldi.js.map +0 -1
- package/bizar-dash/dist/assets/ClipboardView-Cb6XgYZI.js +0 -1
- package/bizar-dash/dist/assets/ClipboardView-Cb6XgYZI.js.map +0 -1
- package/bizar-dash/dist/assets/ConfigView-DfTJk1uL.js +0 -1
- package/bizar-dash/dist/assets/ConfigView-DfTJk1uL.js.map +0 -1
- package/bizar-dash/dist/assets/DiagnosticsView-D5Wy9xlJ.js +0 -2
- package/bizar-dash/dist/assets/DiagnosticsView-D5Wy9xlJ.js.map +0 -1
- package/bizar-dash/dist/assets/DialogsView-HVyfrXpq.js +0 -6
- package/bizar-dash/dist/assets/DialogsView-HVyfrXpq.js.map +0 -1
- package/bizar-dash/dist/assets/DoctorView-Dm94WI2z.js +0 -6
- package/bizar-dash/dist/assets/DoctorView-Dm94WI2z.js.map +0 -1
- package/bizar-dash/dist/assets/EmptyState-ccT__JZG.js +0 -1
- package/bizar-dash/dist/assets/EmptyState-ccT__JZG.js.map +0 -1
- package/bizar-dash/dist/assets/EnvVarsView-BhcIuJ6V.js +0 -8
- package/bizar-dash/dist/assets/EnvVarsView-BhcIuJ6V.js.map +0 -1
- package/bizar-dash/dist/assets/ErrorState-BSqf65ka.js +0 -1
- package/bizar-dash/dist/assets/ErrorState-BSqf65ka.js.map +0 -1
- package/bizar-dash/dist/assets/EvalView-2cbWVBUA.js +0 -1
- package/bizar-dash/dist/assets/EvalView-2cbWVBUA.js.map +0 -1
- package/bizar-dash/dist/assets/GoalsView-C3QG5p7T.js +0 -6
- package/bizar-dash/dist/assets/GoalsView-C3QG5p7T.js.map +0 -1
- package/bizar-dash/dist/assets/Grid-Bojq8Sg7.js +0 -1
- package/bizar-dash/dist/assets/Grid-Bojq8Sg7.js.map +0 -1
- package/bizar-dash/dist/assets/HistoryView-Bum2TMMw.js +0 -1
- package/bizar-dash/dist/assets/HistoryView-Bum2TMMw.js.map +0 -1
- package/bizar-dash/dist/assets/Input-DV-vdaV8.js +0 -1
- package/bizar-dash/dist/assets/Input-DV-vdaV8.js.map +0 -1
- package/bizar-dash/dist/assets/LibrariesView-DH2E2uNb.js +0 -6
- package/bizar-dash/dist/assets/LibrariesView-DH2E2uNb.js.map +0 -1
- package/bizar-dash/dist/assets/LightRAGView-BFCcj7Tl.js +0 -6
- package/bizar-dash/dist/assets/LightRAGView-BFCcj7Tl.js.map +0 -1
- package/bizar-dash/dist/assets/ListHeader-CCD_nIHb.js +0 -1
- package/bizar-dash/dist/assets/ListHeader-CCD_nIHb.js.map +0 -1
- package/bizar-dash/dist/assets/MemoryView-Cr-obIQY.js +0 -8
- package/bizar-dash/dist/assets/MemoryView-Cr-obIQY.js.map +0 -1
- package/bizar-dash/dist/assets/MessageBubble-CrCJ0SYG.js +0 -29
- package/bizar-dash/dist/assets/MessageBubble-CrCJ0SYG.js.map +0 -1
- package/bizar-dash/dist/assets/MiscView-CDUQpYuV.js +0 -1
- package/bizar-dash/dist/assets/MiscView-CDUQpYuV.js.map +0 -1
- package/bizar-dash/dist/assets/ModsView-B6OR-a4B.js +0 -6
- package/bizar-dash/dist/assets/ModsView-B6OR-a4B.js.map +0 -1
- package/bizar-dash/dist/assets/NotificationsView-CIqtY6D0.js +0 -6
- package/bizar-dash/dist/assets/NotificationsView-CIqtY6D0.js.map +0 -1
- package/bizar-dash/dist/assets/ObsidianView-Nahah8QC.js +0 -1
- package/bizar-dash/dist/assets/ObsidianView-Nahah8QC.js.map +0 -1
- package/bizar-dash/dist/assets/OverviewView-B6L_wa4M.js +0 -1
- package/bizar-dash/dist/assets/OverviewView-B6L_wa4M.js.map +0 -1
- package/bizar-dash/dist/assets/ProgressBar-KC4VXsl_.js +0 -1
- package/bizar-dash/dist/assets/ProgressBar-KC4VXsl_.js.map +0 -1
- package/bizar-dash/dist/assets/ProjectsView-DgxWiqHb.js +0 -11
- package/bizar-dash/dist/assets/ProjectsView-DgxWiqHb.js.map +0 -1
- package/bizar-dash/dist/assets/ProvidersView-BOqN9omv.js +0 -11
- package/bizar-dash/dist/assets/ProvidersView-BOqN9omv.js.map +0 -1
- package/bizar-dash/dist/assets/SchedulesView-yMaG3Dtd.js +0 -1
- package/bizar-dash/dist/assets/SchedulesView-yMaG3Dtd.js.map +0 -1
- package/bizar-dash/dist/assets/Select-Bf_P0S6H.js +0 -6
- package/bizar-dash/dist/assets/Select-Bf_P0S6H.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsRow-CJb-F94Y.js +0 -1
- package/bizar-dash/dist/assets/SettingsRow-CJb-F94Y.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsView-BvOGcgMS.js +0 -18
- package/bizar-dash/dist/assets/SettingsView-BvOGcgMS.js.map +0 -1
- package/bizar-dash/dist/assets/Sheet-BwMVGN-8.js +0 -1
- package/bizar-dash/dist/assets/Sheet-BwMVGN-8.js.map +0 -1
- package/bizar-dash/dist/assets/Slider-AjjzqI-5.js +0 -1
- package/bizar-dash/dist/assets/Slider-AjjzqI-5.js.map +0 -1
- package/bizar-dash/dist/assets/Sparkline-Z4y0YUZS.js +0 -1
- package/bizar-dash/dist/assets/Sparkline-Z4y0YUZS.js.map +0 -1
- package/bizar-dash/dist/assets/Switch-B79a2t-G.js +0 -10
- package/bizar-dash/dist/assets/Switch-B79a2t-G.js.map +0 -1
- package/bizar-dash/dist/assets/TasksView-G-s_pwwr.js +0 -6
- package/bizar-dash/dist/assets/TasksView-G-s_pwwr.js.map +0 -1
- package/bizar-dash/dist/assets/Textarea-BfXGMXQ7.js +0 -1
- package/bizar-dash/dist/assets/Textarea-BfXGMXQ7.js.map +0 -1
- package/bizar-dash/dist/assets/UpdateView-BKx3u9X8.js +0 -1
- package/bizar-dash/dist/assets/UpdateView-BKx3u9X8.js.map +0 -1
- package/bizar-dash/dist/assets/UsageView-M01G6bZQ.js +0 -1
- package/bizar-dash/dist/assets/UsageView-M01G6bZQ.js.map +0 -1
- package/bizar-dash/dist/assets/ViewHeader-BsnaspKw.js +0 -6
- package/bizar-dash/dist/assets/ViewHeader-BsnaspKw.js.map +0 -1
- package/bizar-dash/dist/assets/VoiceView-rWE8vziD.js +0 -1
- package/bizar-dash/dist/assets/VoiceView-rWE8vziD.js.map +0 -1
- package/bizar-dash/dist/assets/brain-D7k5s8vH.js +0 -6
- package/bizar-dash/dist/assets/brain-D7k5s8vH.js.map +0 -1
- package/bizar-dash/dist/assets/calendar-CAZoDd-l.js +0 -6
- package/bizar-dash/dist/assets/calendar-CAZoDd-l.js.map +0 -1
- package/bizar-dash/dist/assets/circle-D99cZJBr.js +0 -6
- package/bizar-dash/dist/assets/circle-D99cZJBr.js.map +0 -1
- package/bizar-dash/dist/assets/circle-alert-QQTU4Quz.js +0 -6
- package/bizar-dash/dist/assets/circle-alert-QQTU4Quz.js.map +0 -1
- package/bizar-dash/dist/assets/circle-check-BMbe7Kkr.js +0 -6
- package/bizar-dash/dist/assets/circle-check-BMbe7Kkr.js.map +0 -1
- package/bizar-dash/dist/assets/clock-OtT5mvF3.js +0 -6
- package/bizar-dash/dist/assets/clock-OtT5mvF3.js.map +0 -1
- package/bizar-dash/dist/assets/cmdk-C3F6LD6N.js +0 -80
- package/bizar-dash/dist/assets/cmdk-C3F6LD6N.js.map +0 -1
- package/bizar-dash/dist/assets/dnd-kit-BAOLODOI.js +0 -5
- package/bizar-dash/dist/assets/dnd-kit-BAOLODOI.js.map +0 -1
- package/bizar-dash/dist/assets/download-B-mPX5P_.js +0 -6
- package/bizar-dash/dist/assets/download-B-mPX5P_.js.map +0 -1
- package/bizar-dash/dist/assets/external-link-DPDQM1YO.js +0 -6
- package/bizar-dash/dist/assets/external-link-DPDQM1YO.js.map +0 -1
- package/bizar-dash/dist/assets/file-text-BsCrv5aP.js +0 -6
- package/bizar-dash/dist/assets/file-text-BsCrv5aP.js.map +0 -1
- package/bizar-dash/dist/assets/filter-Do63x17E.js +0 -6
- package/bizar-dash/dist/assets/filter-Do63x17E.js.map +0 -1
- package/bizar-dash/dist/assets/git-pull-request-CpRAmERC.js +0 -11
- package/bizar-dash/dist/assets/git-pull-request-CpRAmERC.js.map +0 -1
- package/bizar-dash/dist/assets/index-B1OIS316.js +0 -1
- package/bizar-dash/dist/assets/index-B1OIS316.js.map +0 -1
- package/bizar-dash/dist/assets/index-CR0TeJmc.js +0 -1
- package/bizar-dash/dist/assets/index-CR0TeJmc.js.map +0 -1
- package/bizar-dash/dist/assets/main-BRmJZcHt.js +0 -277
- package/bizar-dash/dist/assets/main-BRmJZcHt.js.map +0 -1
- package/bizar-dash/dist/assets/main-D0TY0myE.css +0 -1
- package/bizar-dash/dist/assets/network-DJnHwHX3.js +0 -6
- package/bizar-dash/dist/assets/network-DJnHwHX3.js.map +0 -1
- package/bizar-dash/dist/assets/pause-HitDUnk_.js +0 -6
- package/bizar-dash/dist/assets/pause-HitDUnk_.js.map +0 -1
- package/bizar-dash/dist/assets/pencil-Dkks7eIC.js +0 -6
- package/bizar-dash/dist/assets/pencil-Dkks7eIC.js.map +0 -1
- package/bizar-dash/dist/assets/play-blqh0msT.js +0 -6
- package/bizar-dash/dist/assets/play-blqh0msT.js.map +0 -1
- package/bizar-dash/dist/assets/plug-DVvSSe40.js +0 -6
- package/bizar-dash/dist/assets/plug-DVvSSe40.js.map +0 -1
- package/bizar-dash/dist/assets/plus-Cps-8lcG.js +0 -6
- package/bizar-dash/dist/assets/plus-Cps-8lcG.js.map +0 -1
- package/bizar-dash/dist/assets/power-DEX4_Xoa.js +0 -6
- package/bizar-dash/dist/assets/power-DEX4_Xoa.js.map +0 -1
- package/bizar-dash/dist/assets/power-off-upZ4xjaG.js +0 -6
- package/bizar-dash/dist/assets/power-off-upZ4xjaG.js.map +0 -1
- package/bizar-dash/dist/assets/refresh-ccw-DN_zCB1h.js +0 -6
- package/bizar-dash/dist/assets/refresh-ccw-DN_zCB1h.js.map +0 -1
- package/bizar-dash/dist/assets/refresh-cw-KGm5eQgv.js +0 -6
- package/bizar-dash/dist/assets/refresh-cw-KGm5eQgv.js.map +0 -1
- package/bizar-dash/dist/assets/rotate-ccw-D5fkDRgk.js +0 -6
- package/bizar-dash/dist/assets/rotate-ccw-D5fkDRgk.js.map +0 -1
- package/bizar-dash/dist/assets/rotate-cw-CClSVUaX.js +0 -6
- package/bizar-dash/dist/assets/rotate-cw-CClSVUaX.js.map +0 -1
- package/bizar-dash/dist/assets/save-BY4ViPku.js +0 -6
- package/bizar-dash/dist/assets/save-BY4ViPku.js.map +0 -1
- package/bizar-dash/dist/assets/send-CaOL1yQD.js +0 -6
- package/bizar-dash/dist/assets/send-CaOL1yQD.js.map +0 -1
- package/bizar-dash/dist/assets/shield-alert-DA9K6uZO.js +0 -6
- package/bizar-dash/dist/assets/shield-alert-DA9K6uZO.js.map +0 -1
- package/bizar-dash/dist/assets/trash-2-B_Y6HrfN.js +0 -6
- package/bizar-dash/dist/assets/trash-2-B_Y6HrfN.js.map +0 -1
- package/bizar-dash/dist/assets/trending-up-qKTUQKIT.js +0 -6
- package/bizar-dash/dist/assets/trending-up-qKTUQKIT.js.map +0 -1
- package/bizar-dash/dist/assets/triangle-alert-BeY8LAv6.js +0 -6
- package/bizar-dash/dist/assets/triangle-alert-BeY8LAv6.js.map +0 -1
- package/bizar-dash/dist/assets/upload-BZCtmqIh.js +0 -6
- package/bizar-dash/dist/assets/upload-BZCtmqIh.js.map +0 -1
- package/bizar-dash/dist/assets/zap-Bz1Z8y1Q.js +0 -6
- package/bizar-dash/dist/assets/zap-Bz1Z8y1Q.js.map +0 -1
- package/bizar-dash/dist/index.html +0 -19
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/bizar-dash/plans/debug-plan/comments.json +0 -1
- package/bizar-dash/plans/debug-plan/meta.json +0 -10
- package/bizar-dash/plans/debug-plan/plan.json +0 -174
- package/bizar-dash/scripts/smoke-bg-retry.mjs +0 -246
- package/bizar-dash/skills/agent-baseline/SKILL.md +0 -80
- package/bizar-dash/skills/agent-browser/SKILL.md +0 -181
- package/bizar-dash/skills/bizar/SKILL.md +0 -116
- package/bizar-dash/skills/chat/SKILL.md +0 -74
- package/bizar-dash/skills/eval/SKILL.md +0 -237
- package/bizar-dash/skills/lightrag/SKILL.md +0 -86
- package/bizar-dash/skills/minimax/SKILL.md +0 -80
- package/bizar-dash/skills/obsidian/SKILL.md +0 -68
- package/bizar-dash/skills/providers/SKILL.md +0 -75
- package/bizar-dash/skills/publishing/SKILL.md +0 -147
- package/bizar-dash/skills/sdk/SKILL.md +0 -138
- package/bizar-dash/skills/self-improvement/SKILL.md +0 -53
- package/bizar-dash/skills/skills-cli/SKILL.md +0 -94
- package/bizar-dash/skills/usage/SKILL.md +0 -62
- package/bizar-dash/src/cli/dashboard-ports.mjs +0 -488
- package/bizar-dash/src/cli.mjs +0 -537
- package/bizar-dash/src/server/activity-log.mjs +0 -174
- package/bizar-dash/src/server/agent-bus.mjs +0 -485
- package/bizar-dash/src/server/agents-store.mjs +0 -466
- package/bizar-dash/src/server/api.mjs +0 -246
- package/bizar-dash/src/server/artifact-mint.mjs +0 -69
- package/bizar-dash/src/server/artifact-template.html +0 -810
- package/bizar-dash/src/server/artifacts-store.mjs +0 -839
- package/bizar-dash/src/server/auth.mjs +0 -548
- package/bizar-dash/src/server/background-store.mjs +0 -446
- package/bizar-dash/src/server/bg-poller.mjs +0 -375
- package/bizar-dash/src/server/bg-poller.test.mjs +0 -28
- package/bizar-dash/src/server/bg-retry.mjs +0 -446
- package/bizar-dash/src/server/bg-spawner.mjs +0 -390
- package/bizar-dash/src/server/browser.mjs +0 -40
- package/bizar-dash/src/server/claude-artifacts.mjs +0 -281
- package/bizar-dash/src/server/claude-bg-spawner.mjs +0 -390
- package/bizar-dash/src/server/claude-info.mjs +0 -412
- package/bizar-dash/src/server/claude-runner.mjs +0 -289
- package/bizar-dash/src/server/claude-sdk.mjs +0 -191
- package/bizar-dash/src/server/diagnostics-store.mjs +0 -568
- package/bizar-dash/src/server/dialog-poller.mjs +0 -105
- package/bizar-dash/src/server/dialog-store.mjs +0 -259
- package/bizar-dash/src/server/digest-store.mjs +0 -558
- package/bizar-dash/src/server/eval-store.mjs +0 -281
- package/bizar-dash/src/server/eval.mjs +0 -500
- package/bizar-dash/src/server/glyphs/mdx-compiler.mjs +0 -596
- package/bizar-dash/src/server/lib/path-safe.mjs +0 -283
- package/bizar-dash/src/server/lib/rate-limit.mjs +0 -122
- package/bizar-dash/src/server/logger.mjs +0 -71
- package/bizar-dash/src/server/loop-runtime.mjs +0 -429
- package/bizar-dash/src/server/memory-consolidator.mjs +0 -225
- package/bizar-dash/src/server/memory-distillation.mjs +0 -296
- package/bizar-dash/src/server/memory-git.mjs +0 -473
- package/bizar-dash/src/server/memory-lightrag.mjs +0 -1483
- package/bizar-dash/src/server/memory-obsidian.mjs +0 -230
- package/bizar-dash/src/server/memory-schema.mjs +0 -145
- package/bizar-dash/src/server/memory-secrets.mjs +0 -84
- package/bizar-dash/src/server/memory-store.mjs +0 -1093
- package/bizar-dash/src/server/metrics.mjs +0 -268
- package/bizar-dash/src/server/minimax-usage-store.mjs +0 -372
- package/bizar-dash/src/server/minimax.mjs +0 -683
- package/bizar-dash/src/server/mod-security.mjs +0 -397
- package/bizar-dash/src/server/mods-loader.mjs +0 -1243
- package/bizar-dash/src/server/notifications-store.mjs +0 -243
- package/bizar-dash/src/server/obsidian-store.mjs +0 -318
- package/bizar-dash/src/server/ocr.mjs +0 -55
- package/bizar-dash/src/server/otel.mjs +0 -260
- package/bizar-dash/src/server/pair-store.mjs +0 -138
- package/bizar-dash/src/server/progress-parser.test.mjs +0 -129
- package/bizar-dash/src/server/projects-store.mjs +0 -364
- package/bizar-dash/src/server/providers-store.mjs +0 -1801
- package/bizar-dash/src/server/routes/_shared.mjs +0 -430
- package/bizar-dash/src/server/routes/activity.mjs +0 -215
- package/bizar-dash/src/server/routes/admin.mjs +0 -163
- package/bizar-dash/src/server/routes/agent-bus.mjs +0 -185
- package/bizar-dash/src/server/routes/agents-cc.mjs +0 -551
- package/bizar-dash/src/server/routes/agents-cc.test.mjs +0 -35
- package/bizar-dash/src/server/routes/agents.mjs +0 -149
- package/bizar-dash/src/server/routes/artifacts.mjs +0 -315
- package/bizar-dash/src/server/routes/audit.mjs +0 -79
- package/bizar-dash/src/server/routes/auth.mjs +0 -69
- package/bizar-dash/src/server/routes/background.mjs +0 -422
- package/bizar-dash/src/server/routes/backup.mjs +0 -112
- package/bizar-dash/src/server/routes/chat.mjs +0 -727
- package/bizar-dash/src/server/routes/claude-session-detail.mjs +0 -367
- package/bizar-dash/src/server/routes/claude-sessions.mjs +0 -259
- package/bizar-dash/src/server/routes/clipboard.mjs +0 -173
- package/bizar-dash/src/server/routes/config.mjs +0 -180
- package/bizar-dash/src/server/routes/decisions.mjs +0 -78
- package/bizar-dash/src/server/routes/diagnostics.mjs +0 -50
- package/bizar-dash/src/server/routes/dialogs.mjs +0 -134
- package/bizar-dash/src/server/routes/digests.mjs +0 -82
- package/bizar-dash/src/server/routes/distill.mjs +0 -129
- package/bizar-dash/src/server/routes/doctor.mjs +0 -71
- package/bizar-dash/src/server/routes/env-vars.mjs +0 -231
- package/bizar-dash/src/server/routes/eval.mjs +0 -187
- package/bizar-dash/src/server/routes/fs.mjs +0 -429
- package/bizar-dash/src/server/routes/goal-planner.mjs +0 -236
- package/bizar-dash/src/server/routes/goals.mjs +0 -428
- package/bizar-dash/src/server/routes/history.mjs +0 -78
- package/bizar-dash/src/server/routes/lightrag.mjs +0 -169
- package/bizar-dash/src/server/routes/loops.mjs +0 -138
- package/bizar-dash/src/server/routes/memory.mjs +0 -1524
- package/bizar-dash/src/server/routes/minimax.mjs +0 -133
- package/bizar-dash/src/server/routes/misc.mjs +0 -90
- package/bizar-dash/src/server/routes/model-router.mjs +0 -158
- package/bizar-dash/src/server/routes/model-router.test.mjs +0 -104
- package/bizar-dash/src/server/routes/mods.mjs +0 -359
- package/bizar-dash/src/server/routes/notifications.mjs +0 -54
- package/bizar-dash/src/server/routes/obsidian.mjs +0 -239
- package/bizar-dash/src/server/routes/ocr.mjs +0 -182
- package/bizar-dash/src/server/routes/overview.mjs +0 -219
- package/bizar-dash/src/server/routes/overview.test.mjs +0 -65
- package/bizar-dash/src/server/routes/pair.mjs +0 -67
- package/bizar-dash/src/server/routes/projects.mjs +0 -175
- package/bizar-dash/src/server/routes/providers.mjs +0 -361
- package/bizar-dash/src/server/routes/schedules.mjs +0 -159
- package/bizar-dash/src/server/routes/sessions.mjs +0 -80
- package/bizar-dash/src/server/routes/settings.mjs +0 -51
- package/bizar-dash/src/server/routes/skills.mjs +0 -70
- package/bizar-dash/src/server/routes/spawn.mjs +0 -59
- package/bizar-dash/src/server/routes/tailscale.mjs +0 -46
- package/bizar-dash/src/server/routes/tasks.mjs +0 -579
- package/bizar-dash/src/server/routes/themes.mjs +0 -51
- package/bizar-dash/src/server/routes/update.mjs +0 -367
- package/bizar-dash/src/server/routes/usage.mjs +0 -136
- package/bizar-dash/src/server/routes/users.mjs +0 -102
- package/bizar-dash/src/server/routes/voice.mjs +0 -167
- package/bizar-dash/src/server/routes/workspaces.mjs +0 -299
- package/bizar-dash/src/server/routes-v2/auth.mjs +0 -59
- package/bizar-dash/src/server/routes-v2/events.mjs +0 -121
- package/bizar-dash/src/server/routes-v2/health.mjs +0 -21
- package/bizar-dash/src/server/routes-v2/index.mjs +0 -90
- package/bizar-dash/src/server/routes-v2/sessions.mjs +0 -111
- package/bizar-dash/src/server/schedules-runner.mjs +0 -556
- package/bizar-dash/src/server/schedules-store.mjs +0 -268
- package/bizar-dash/src/server/search-store.mjs +0 -220
- package/bizar-dash/src/server/serve-info.mjs +0 -1110
- package/bizar-dash/src/server/server.mjs +0 -951
- package/bizar-dash/src/server/settings-store.mjs +0 -45
- package/bizar-dash/src/server/skills-store.mjs +0 -192
- package/bizar-dash/src/server/sprint.test.mjs +0 -163
- package/bizar-dash/src/server/state.mjs +0 -437
- package/bizar-dash/src/server/tailscale-store.mjs +0 -113
- package/bizar-dash/src/server/task-delegator.mjs +0 -969
- package/bizar-dash/src/server/task-splitter.mjs +0 -241
- package/bizar-dash/src/server/tasks-store.mjs +0 -556
- package/bizar-dash/src/server/tui.mjs +0 -923
- package/bizar-dash/src/server/update-store.mjs +0 -168
- package/bizar-dash/src/server/v2-auth-file.mjs +0 -99
- package/bizar-dash/src/server/v2-event-bus.mjs +0 -128
- package/bizar-dash/src/server/voice-store.mjs +0 -229
- package/bizar-dash/src/server/voice-transcribe.mjs +0 -72
- package/bizar-dash/src/server/watcher.mjs +0 -81
- package/bizar-dash/src/server/workers/transcription-worker.mjs +0 -213
- package/bizar-dash/src/server/workspaces.mjs +0 -626
- package/bizar-dash/src/server/yaml.mjs +0 -238
- package/bizar-dash/src/web/index.html +0 -17
- package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/bizar-dash/src/web/v8/App.tsx +0 -426
- package/bizar-dash/src/web/v8/__tests__/App.test.tsx +0 -102
- package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +0 -79
- package/bizar-dash/src/web/v8/__tests__/BackgroundJobsView.test.tsx +0 -172
- package/bizar-dash/src/web/v8/__tests__/MemoryView.test.tsx +0 -91
- package/bizar-dash/src/web/v8/__tests__/NotificationsPopover.test.tsx +0 -91
- package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +0 -12
- package/bizar-dash/src/web/v8/__tests__/SchedulesView.test.tsx +0 -157
- package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +0 -84
- package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +0 -95
- package/bizar-dash/src/web/v8/__tests__/Topbar.test.tsx +0 -86
- package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +0 -63
- package/bizar-dash/src/web/v8/__tests__/admin-view.test.tsx +0 -105
- package/bizar-dash/src/web/v8/__tests__/agent-card-metrics.test.tsx +0 -54
- package/bizar-dash/src/web/v8/__tests__/agent-detail-tasks.test.tsx +0 -68
- package/bizar-dash/src/web/v8/__tests__/agent-hierarchy.test.tsx +0 -79
- package/bizar-dash/src/web/v8/__tests__/agents-stuck-banner.test.tsx +0 -142
- package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +0 -90
- package/bizar-dash/src/web/v8/__tests__/artifacts-view.test.tsx +0 -102
- package/bizar-dash/src/web/v8/__tests__/audit-fixes.test.tsx +0 -139
- package/bizar-dash/src/web/v8/__tests__/auth-view.test.tsx +0 -94
- package/bizar-dash/src/web/v8/__tests__/changelog.test.tsx +0 -79
- package/bizar-dash/src/web/v8/__tests__/chat-types.test.ts +0 -55
- package/bizar-dash/src/web/v8/__tests__/chat-view.test.tsx +0 -142
- package/bizar-dash/src/web/v8/__tests__/claude-sessions-view.test.tsx +0 -159
- package/bizar-dash/src/web/v8/__tests__/clipboard-view.test.tsx +0 -90
- package/bizar-dash/src/web/v8/__tests__/config-view.test.tsx +0 -111
- package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +0 -104
- package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +0 -135
- package/bizar-dash/src/web/v8/__tests__/cx.test.ts +0 -25
- package/bizar-dash/src/web/v8/__tests__/data.test.tsx +0 -293
- package/bizar-dash/src/web/v8/__tests__/dialogs-view.test.tsx +0 -81
- package/bizar-dash/src/web/v8/__tests__/env-vars-view.test.tsx +0 -123
- package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +0 -213
- package/bizar-dash/src/web/v8/__tests__/goals-cc-roundtrip.test.tsx +0 -94
- package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +0 -105
- package/bizar-dash/src/web/v8/__tests__/history-view.test.tsx +0 -96
- package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +0 -176
- package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +0 -70
- package/bizar-dash/src/web/v8/__tests__/lightrag-view.test.tsx +0 -90
- package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +0 -60
- package/bizar-dash/src/web/v8/__tests__/misc-view.test.tsx +0 -79
- package/bizar-dash/src/web/v8/__tests__/mods-view.test.tsx +0 -123
- package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +0 -137
- package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +0 -160
- package/bizar-dash/src/web/v8/__tests__/obsidian-view.test.tsx +0 -82
- package/bizar-dash/src/web/v8/__tests__/overview-trends.test.tsx +0 -87
- package/bizar-dash/src/web/v8/__tests__/projects-view.test.tsx +0 -134
- package/bizar-dash/src/web/v8/__tests__/providers-view.test.tsx +0 -100
- package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +0 -104
- package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +0 -104
- package/bizar-dash/src/web/v8/__tests__/update-view.test.tsx +0 -89
- package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +0 -92
- package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +0 -87
- package/bizar-dash/src/web/v8/__tests__/views.test.tsx +0 -188
- package/bizar-dash/src/web/v8/__tests__/voice-view.test.tsx +0 -80
- package/bizar-dash/src/web/v8/data/fetcher.ts +0 -59
- package/bizar-dash/src/web/v8/data/types.ts +0 -239
- package/bizar-dash/src/web/v8/data/useFetch.ts +0 -62
- package/bizar-dash/src/web/v8/data/useViewNavigate.ts +0 -54
- package/bizar-dash/src/web/v8/data/useWebSocket.ts +0 -206
- package/bizar-dash/src/web/v8/main.tsx +0 -28
- package/bizar-dash/src/web/v8/shell/AppShell.tsx +0 -126
- package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +0 -29
- package/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -515
- package/bizar-dash/src/web/v8/shell/StatusBar.tsx +0 -63
- package/bizar-dash/src/web/v8/shell/Topbar.tsx +0 -330
- package/bizar-dash/src/web/v8/shell/index.ts +0 -15
- package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +0 -137
- package/bizar-dash/src/web/v8/ui/activity/ActivityLane.tsx +0 -315
- package/bizar-dash/src/web/v8/ui/activity/ActivityLanes.tsx +0 -51
- package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +0 -101
- package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +0 -239
- package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +0 -439
- package/bizar-dash/src/web/v8/ui/agents/AgentLiveOutput.tsx +0 -252
- package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +0 -371
- package/bizar-dash/src/web/v8/ui/chat/ChatDrawer.tsx +0 -208
- package/bizar-dash/src/web/v8/ui/chat/EventStream.tsx +0 -83
- package/bizar-dash/src/web/v8/ui/chat/MessageBubble.tsx +0 -174
- package/bizar-dash/src/web/v8/ui/controls/Button.tsx +0 -141
- package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +0 -32
- package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +0 -49
- package/bizar-dash/src/web/v8/ui/controls/Field.tsx +0 -78
- package/bizar-dash/src/web/v8/ui/controls/Form.tsx +0 -23
- package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +0 -112
- package/bizar-dash/src/web/v8/ui/controls/Input.tsx +0 -94
- package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +0 -74
- package/bizar-dash/src/web/v8/ui/controls/Select.tsx +0 -171
- package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +0 -68
- package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +0 -56
- package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +0 -64
- package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +0 -36
- package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +0 -85
- package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +0 -134
- package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +0 -175
- package/bizar-dash/src/web/v8/ui/data/Badge.tsx +0 -93
- package/bizar-dash/src/web/v8/ui/data/BarList.tsx +0 -101
- package/bizar-dash/src/web/v8/ui/data/Card.tsx +0 -140
- package/bizar-dash/src/web/v8/ui/data/Chip.tsx +0 -96
- package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +0 -42
- package/bizar-dash/src/web/v8/ui/data/ListHeader.tsx +0 -94
- package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +0 -93
- package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +0 -98
- package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +0 -150
- package/bizar-dash/src/web/v8/ui/data/Table.tsx +0 -170
- package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +0 -130
- package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +0 -122
- package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +0 -95
- package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +0 -39
- package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +0 -143
- package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +0 -149
- package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +0 -8
- package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +0 -231
- package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +0 -48
- package/bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx +0 -116
- package/bizar-dash/src/web/v8/ui/feedback/NotificationsPopover.tsx +0 -242
- package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +0 -56
- package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +0 -103
- package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +0 -67
- package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +0 -30
- package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +0 -66
- package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +0 -89
- package/bizar-dash/src/web/v8/ui/feedback/useFocusTrap.ts +0 -58
- package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +0 -176
- package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +0 -278
- package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +0 -115
- package/bizar-dash/src/web/v8/ui/index.ts +0 -369
- package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +0 -117
- package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +0 -391
- package/bizar-dash/src/web/v8/ui/kanban/KanbanCardBadges.tsx +0 -111
- package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +0 -181
- package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +0 -126
- package/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +0 -638
- package/bizar-dash/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +0 -43
- package/bizar-dash/src/web/v8/ui/kanban/KanbanProgress.tsx +0 -130
- package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +0 -141
- package/bizar-dash/src/web/v8/ui/kanban/KanbanToolbar.tsx +0 -291
- package/bizar-dash/src/web/v8/ui/kanban/useKanbanSelection.ts +0 -90
- package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +0 -30
- package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +0 -161
- package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +0 -144
- package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +0 -225
- package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +0 -81
- package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +0 -164
- package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +0 -128
- package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +0 -79
- package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +0 -144
- package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +0 -40
- package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +0 -67
- package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +0 -104
- package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +0 -77
- package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +0 -33
- package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +0 -62
- package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +0 -42
- package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +0 -73
- package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +0 -49
- package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +0 -91
- package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +0 -88
- package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +0 -109
- package/bizar-dash/src/web/v8/ui/styles/globals.css +0 -265
- package/bizar-dash/src/web/v8/ui/styles/reset.css +0 -57
- package/bizar-dash/src/web/v8/ui/styles/tokens.css +0 -238
- package/bizar-dash/src/web/v8/ui/tasks/TaskDetail.tsx +0 -313
- package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +0 -74
- package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +0 -66
- package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +0 -86
- package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +0 -94
- package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +0 -93
- package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +0 -15
- package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +0 -16
- package/bizar-dash/src/web/v8/ui/utils/cx.ts +0 -19
- package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +0 -457
- package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +0 -237
- package/bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx +0 -212
- package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +0 -511
- package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +0 -452
- package/bizar-dash/src/web/v8/views/Artifacts/ClaudeArtifactView.tsx +0 -179
- package/bizar-dash/src/web/v8/views/Auth/AuthView.tsx +0 -179
- package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +0 -467
- package/bizar-dash/src/web/v8/views/Backup/BackupView.tsx +0 -204
- package/bizar-dash/src/web/v8/views/Chat/ChatView.tsx +0 -368
- package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionDetail.tsx +0 -144
- package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionsView.tsx +0 -331
- package/bizar-dash/src/web/v8/views/ClaudeSessions/NewSessionModal.tsx +0 -136
- package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +0 -210
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +0 -142
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +0 -272
- package/bizar-dash/src/web/v8/views/Config/ConfigView.tsx +0 -364
- package/bizar-dash/src/web/v8/views/Diagnostics/DiagnosticsView.tsx +0 -203
- package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +0 -196
- package/bizar-dash/src/web/v8/views/Doctor/DoctorView.tsx +0 -181
- package/bizar-dash/src/web/v8/views/EnvVars/EnvVarsView.tsx +0 -365
- package/bizar-dash/src/web/v8/views/Eval/EvalView.tsx +0 -278
- package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +0 -351
- package/bizar-dash/src/web/v8/views/History/HistoryView.tsx +0 -227
- package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +0 -123
- package/bizar-dash/src/web/v8/views/LightRAG/LightRAGView.tsx +0 -204
- package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +0 -258
- package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +0 -159
- package/bizar-dash/src/web/v8/views/Mods/ModsView.tsx +0 -348
- package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +0 -247
- package/bizar-dash/src/web/v8/views/Obsidian/ObsidianView.tsx +0 -193
- package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +0 -274
- package/bizar-dash/src/web/v8/views/Projects/ProjectsView.tsx +0 -273
- package/bizar-dash/src/web/v8/views/Providers/ProvidersView.tsx +0 -371
- package/bizar-dash/src/web/v8/views/Router.tsx +0 -202
- package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +0 -462
- package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +0 -1039
- package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +0 -386
- package/bizar-dash/src/web/v8/views/Update/UpdateView.tsx +0 -270
- package/bizar-dash/src/web/v8/views/Usage/UsageView.tsx +0 -210
- package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +0 -192
- package/bizar-dash/src/web/v8/vite-env.d.ts +0 -15
- package/bizar-dash/templates/mod/FORMAT.md +0 -76
- package/bizar-dash/templates/mod/hello-mod/README.md +0 -19
- package/bizar-dash/templates/mod/hello-mod/agents/greeter.md +0 -8
- package/bizar-dash/templates/mod/hello-mod/commands/hello.md +0 -6
- package/bizar-dash/templates/mod/hello-mod/mod.json +0 -20
- package/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +0 -9
- package/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +0 -10
- package/bizar-dash/tests/_update-test-helpers.mjs +0 -13
- package/bizar-dash/tests/admin-labels.test.mjs +0 -42
- package/bizar-dash/tests/admin-run-grouping.test.mjs +0 -42
- package/bizar-dash/tests/agent-bus.test.mjs +0 -289
- package/bizar-dash/tests/agents-preview-truncate.test.mjs +0 -35
- package/bizar-dash/tests/agents-summary-sanitize.test.ts +0 -51
- package/bizar-dash/tests/auth-inputs-labels.test.mjs +0 -45
- package/bizar-dash/tests/background-jobs-action-labels.test.mjs +0 -41
- package/bizar-dash/tests/background-jobs-states.test.mjs +0 -80
- package/bizar-dash/tests/background-pause-resume.test.mjs +0 -46
- package/bizar-dash/tests/background-sdk-session.test.mjs +0 -94
- package/bizar-dash/tests/background-session-events.test.mjs +0 -74
- package/bizar-dash/tests/background-spawn-from-ui.test.mjs +0 -36
- package/bizar-dash/tests/background-steer-sdk.test.mjs +0 -71
- package/bizar-dash/tests/background-steer.test.mjs +0 -60
- package/bizar-dash/tests/backup-restore.test.mjs +0 -217
- package/bizar-dash/tests/backup-store.test.mjs +0 -300
- package/bizar-dash/tests/banner-tones.test.mjs +0 -50
- package/bizar-dash/tests/bundle-analysis.test.mjs +0 -74
- package/bizar-dash/tests/callout-tokens.test.mjs +0 -30
- package/bizar-dash/tests/chat-new-session.test.mjs +0 -63
- package/bizar-dash/tests/claude-session-detail-states.test.mjs +0 -67
- package/bizar-dash/tests/cli-bugfixes.test.mjs +0 -151
- package/bizar-dash/tests/cli-error-visibility.test.mjs +0 -153
- package/bizar-dash/tests/cli-refactor.test.mjs +0 -183
- package/bizar-dash/tests/cli-tailscale.test.mjs +0 -113
- package/bizar-dash/tests/clipboard.test.mjs +0 -147
- package/bizar-dash/tests/components/BackgroundJobsSkeleton.test.tsx +0 -38
- package/bizar-dash/tests/components/Button.test.tsx +0 -78
- package/bizar-dash/tests/components/Card.test.tsx +0 -59
- package/bizar-dash/tests/components/Dialog.test.tsx +0 -80
- package/bizar-dash/tests/components/Toast.test.tsx +0 -61
- package/bizar-dash/tests/dash-cli-load.test.mjs +0 -44
- package/bizar-dash/tests/dashboard-ports.test.mjs +0 -138
- package/bizar-dash/tests/density-tokens.test.mjs +0 -46
- package/bizar-dash/tests/deploy-templates.test.mjs +0 -100
- package/bizar-dash/tests/diagnostics-store.test.mjs +0 -205
- package/bizar-dash/tests/digest-generation.test.mjs +0 -191
- package/bizar-dash/tests/digest-store.test.mjs +0 -264
- package/bizar-dash/tests/docker-build.test.mjs +0 -96
- package/bizar-dash/tests/doctor-route-shape.test.mjs +0 -67
- package/bizar-dash/tests/empty-state-docs.test.mjs +0 -55
- package/bizar-dash/tests/env-vars-extended.test.mjs +0 -190
- package/bizar-dash/tests/env-vars-store.test.mjs +0 -216
- package/bizar-dash/tests/errorstate-retry.test.mjs +0 -42
- package/bizar-dash/tests/eval/fixtures-extra.test.mjs +0 -285
- package/bizar-dash/tests/eval/fixtures.test.mjs +0 -141
- package/bizar-dash/tests/eval/report.test.mjs +0 -284
- package/bizar-dash/tests/eval/runner.test.mjs +0 -471
- package/bizar-dash/tests/eval-csv.test.mjs +0 -67
- package/bizar-dash/tests/eval-scheduled.test.mjs +0 -84
- package/bizar-dash/tests/focus-visible.test.mjs +0 -30
- package/bizar-dash/tests/frontend-bugfixes.test.mjs +0 -151
- package/bizar-dash/tests/goals-decompose.test.mjs +0 -179
- package/bizar-dash/tests/kanban-empty-column.test.mjs +0 -56
- package/bizar-dash/tests/layout-spacing.test.mjs +0 -101
- package/bizar-dash/tests/library-dedupe.test.mjs +0 -62
- package/bizar-dash/tests/lightrag-defaults.node.test.mjs +0 -118
- package/bizar-dash/tests/lightrag-skeleton.test.mjs +0 -31
- package/bizar-dash/tests/lightrag-startup-hook.test.mjs +0 -238
- package/bizar-dash/tests/lightrag-states.test.mjs +0 -60
- package/bizar-dash/tests/logger.test.mjs +0 -207
- package/bizar-dash/tests/loop-runtime.test.mjs +0 -312
- package/bizar-dash/tests/loops-agent-bus-routes.test.mjs +0 -293
- package/bizar-dash/tests/memory-auto-reindex.test.mjs +0 -196
- package/bizar-dash/tests/memory-cli-readlistdelete.test.mjs +0 -405
- package/bizar-dash/tests/memory-cli-setup.test.mjs +0 -382
- package/bizar-dash/tests/memory-cli.test.mjs +0 -596
- package/bizar-dash/tests/memory-config.test.mjs +0 -422
- package/bizar-dash/tests/memory-conflicts.test.mjs +0 -229
- package/bizar-dash/tests/memory-default-vault.test.mjs +0 -185
- package/bizar-dash/tests/memory-git.test.mjs +0 -264
- package/bizar-dash/tests/memory-graph.test.mjs +0 -95
- package/bizar-dash/tests/memory-install-bootstrap.test.mjs +0 -129
- package/bizar-dash/tests/memory-lightrag-extended.test.mjs +0 -293
- package/bizar-dash/tests/memory-lightrag.test.mjs +0 -153
- package/bizar-dash/tests/memory-link.test.mjs +0 -134
- package/bizar-dash/tests/memory-namespace.test.mjs +0 -404
- package/bizar-dash/tests/memory-obsidian.test.mjs +0 -269
- package/bizar-dash/tests/memory-path-safety.test.mjs +0 -427
- package/bizar-dash/tests/memory-protocol-drift.test.mjs +0 -52
- package/bizar-dash/tests/memory-roundtrip.test.mjs +0 -219
- package/bizar-dash/tests/memory-schema.test.mjs +0 -198
- package/bizar-dash/tests/memory-secrets.test.mjs +0 -121
- package/bizar-dash/tests/memory-status-root.test.mjs +0 -144
- package/bizar-dash/tests/memory-store.test.mjs +0 -493
- package/bizar-dash/tests/memory-sync.test.mjs +0 -141
- package/bizar-dash/tests/memory-tab.test.mjs +0 -322
- package/bizar-dash/tests/memory-vault-config-endpoint.test.mjs +0 -173
- package/bizar-dash/tests/metrics.test.mjs +0 -183
- package/bizar-dash/tests/minimax-bar.test.tsx +0 -113
- package/bizar-dash/tests/minimax-chat-usage.test.mjs +0 -253
- package/bizar-dash/tests/minimax-models.test.mjs +0 -123
- package/bizar-dash/tests/minimax-usage-store.node.test.mjs +0 -293
- package/bizar-dash/tests/mod-instructions.node.test.mjs +0 -188
- package/bizar-dash/tests/mod-security.test.mjs +0 -273
- package/bizar-dash/tests/mod-upgrade.node.test.mjs +0 -357
- package/bizar-dash/tests/modal-focus-trap.test.mjs +0 -114
- package/bizar-dash/tests/no-browser-harness.node.test.mjs +0 -98
- package/bizar-dash/tests/notifications-dismiss-restore.test.mjs +0 -85
- package/bizar-dash/tests/obsidian-back-compat.test.mjs +0 -199
- package/bizar-dash/tests/ocr.test.mjs +0 -87
- package/bizar-dash/tests/orphan-tests-audit.test.mjs +0 -80
- package/bizar-dash/tests/otel-spans.test.mjs +0 -253
- package/bizar-dash/tests/otel.test.mjs +0 -188
- package/bizar-dash/tests/palette-keyboard-nav.test.mjs +0 -123
- package/bizar-dash/tests/palette-shortcut-hint.test.mjs +0 -58
- package/bizar-dash/tests/path-safe.test.mjs +0 -108
- package/bizar-dash/tests/projects-filter.test.mjs +0 -48
- package/bizar-dash/tests/providers-store-backup-keys.node.test.mjs +0 -809
- package/bizar-dash/tests/providers-store-search.node.test.mjs +0 -166
- package/bizar-dash/tests/rate-limit.test.mjs +0 -298
- package/bizar-dash/tests/routes-doctor.test.mjs +0 -159
- package/bizar-dash/tests/schedules-skeleton.test.mjs +0 -25
- package/bizar-dash/tests/schedules-states.test.mjs +0 -67
- package/bizar-dash/tests/schedules-templates.test.mjs +0 -144
- package/bizar-dash/tests/server-bugfixes.test.mjs +0 -318
- package/bizar-dash/tests/settings-labels.test.mjs +0 -80
- package/bizar-dash/tests/setup.ts +0 -84
- package/bizar-dash/tests/sidebar-collapse-animation.test.mjs +0 -37
- package/bizar-dash/tests/sidebar-distinct-icons.test.mjs +0 -28
- package/bizar-dash/tests/sidebar-responsive.test.tsx +0 -48
- package/bizar-dash/tests/sidebar-section-styles.test.mjs +0 -55
- package/bizar-dash/tests/sidebar-section-toggle.test.tsx +0 -63
- package/bizar-dash/tests/skeleton-height.test.mjs +0 -47
- package/bizar-dash/tests/skills-list.test.mjs +0 -232
- package/bizar-dash/tests/skills-search.test.mjs +0 -222
- package/bizar-dash/tests/smoke-v2.mjs +0 -212
- package/bizar-dash/tests/space-tokens.test.mjs +0 -36
- package/bizar-dash/tests/stattile-loading.test.mjs +0 -28
- package/bizar-dash/tests/strip-thinking.test.mjs +0 -175
- package/bizar-dash/tests/submit-feedback.test.mjs +0 -353
- package/bizar-dash/tests/task-splitter.test.mjs +0 -268
- package/bizar-dash/tests/tasks-create.test.mjs +0 -187
- package/bizar-dash/tests/tasks-patch-routes.test.mjs +0 -194
- package/bizar-dash/tests/theme-toggle-icon.test.mjs +0 -28
- package/bizar-dash/tests/tmux-wrap.test.mjs +0 -145
- package/bizar-dash/tests/topbar-design-system.test.mjs +0 -56
- package/bizar-dash/tests/topbar-popover-styles.test.mjs +0 -53
- package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +0 -42
- package/bizar-dash/tests/update-channels.test.mjs +0 -67
- package/bizar-dash/tests/update-check.test.mjs +0 -132
- package/bizar-dash/tests/update-packages.test.mjs +0 -154
- package/bizar-dash/tests/update-run.test.mjs +0 -203
- package/bizar-dash/tests/users.test.mjs +0 -108
- package/bizar-dash/tests/v7-archive/BackgroundAgents.test.tsx +0 -160
- package/bizar-dash/tests/v7-archive/a11y/forms.test.tsx +0 -191
- package/bizar-dash/tests/v7-archive/a11y.test.tsx +0 -206
- package/bizar-dash/tests/v7-archive/autosave.test.tsx +0 -276
- package/bizar-dash/tests/v7-archive/backup-restore.test.tsx +0 -141
- package/bizar-dash/tests/v7-archive/chat-composer.test.tsx +0 -140
- package/bizar-dash/tests/v7-archive/communication-log.test.tsx +0 -67
- package/bizar-dash/tests/v7-archive/components/Modal.test.tsx +0 -104
- package/bizar-dash/tests/v7-archive/components/Spinner.test.tsx +0 -32
- package/bizar-dash/tests/v7-archive/components/StatusBadge.test.tsx +0 -35
- package/bizar-dash/tests/v7-archive/components/doctor-panel.test.tsx +0 -105
- package/bizar-dash/tests/v7-archive/components/screenshot-ocr.test.tsx +0 -75
- package/bizar-dash/tests/v7-archive/components/settings-search.test.tsx +0 -180
- package/bizar-dash/tests/v7-archive/components/workspace-selector.test.tsx +0 -73
- package/bizar-dash/tests/v7-archive/controls/Button.test.tsx +0 -50
- package/bizar-dash/tests/v7-archive/controls/Checkbox.test.tsx +0 -44
- package/bizar-dash/tests/v7-archive/controls/IconButton.test.tsx +0 -37
- package/bizar-dash/tests/v7-archive/controls/Kbd.test.tsx +0 -39
- package/bizar-dash/tests/v7-archive/controls/NumberInput.test.tsx +0 -56
- package/bizar-dash/tests/v7-archive/controls/RadioGroup.test.tsx +0 -58
- package/bizar-dash/tests/v7-archive/controls/SearchInput.test.tsx +0 -52
- package/bizar-dash/tests/v7-archive/controls/Select.test.tsx +0 -66
- package/bizar-dash/tests/v7-archive/controls/Slider.test.tsx +0 -41
- package/bizar-dash/tests/v7-archive/controls/TextInput.test.tsx +0 -44
- package/bizar-dash/tests/v7-archive/controls/Textarea.test.tsx +0 -56
- package/bizar-dash/tests/v7-archive/controls/Toggle.test.tsx +0 -39
- package/bizar-dash/tests/v7-archive/data/BarChart.test.tsx +0 -55
- package/bizar-dash/tests/v7-archive/data/DataTable.test.tsx +0 -112
- package/bizar-dash/tests/v7-archive/data/EmptyState.test.tsx +0 -57
- package/bizar-dash/tests/v7-archive/data/ErrorState.test.tsx +0 -47
- package/bizar-dash/tests/v7-archive/data/KeyValueList.test.tsx +0 -59
- package/bizar-dash/tests/v7-archive/data/LoadingState.test.tsx +0 -37
- package/bizar-dash/tests/v7-archive/data/Sparkline.test.tsx +0 -56
- package/bizar-dash/tests/v7-archive/data/StatTile.test.tsx +0 -69
- package/bizar-dash/tests/v7-archive/dep-graph.test.tsx +0 -40
- package/bizar-dash/tests/v7-archive/eval-web-ui.test.tsx +0 -220
- package/bizar-dash/tests/v7-archive/event-log.test.tsx +0 -61
- package/bizar-dash/tests/v7-archive/feedback/Badge.test.tsx +0 -41
- package/bizar-dash/tests/v7-archive/feedback/Dialog.test.tsx +0 -99
- package/bizar-dash/tests/v7-archive/feedback/ProgressBar.test.tsx +0 -66
- package/bizar-dash/tests/v7-archive/feedback/StatusDot.test.tsx +0 -41
- package/bizar-dash/tests/v7-archive/feedback/Toast.test.tsx +0 -124
- package/bizar-dash/tests/v7-archive/feedback/Tooltip.test.tsx +0 -102
- package/bizar-dash/tests/v7-archive/goal-input.test.tsx +0 -72
- package/bizar-dash/tests/v7-archive/goap-planner.test.ts +0 -68
- package/bizar-dash/tests/v7-archive/hooks/useModal.test.tsx +0 -84
- package/bizar-dash/tests/v7-archive/hooks/useToast.test.tsx +0 -50
- package/bizar-dash/tests/v7-archive/layout/AppShell.test.tsx +0 -50
- package/bizar-dash/tests/v7-archive/layout/Breadcrumbs.test.tsx +0 -85
- package/bizar-dash/tests/v7-archive/layout/Panel.test.tsx +0 -52
- package/bizar-dash/tests/v7-archive/layout/PanelHeader.test.tsx +0 -32
- package/bizar-dash/tests/v7-archive/layout/Sidebar.test.tsx +0 -95
- package/bizar-dash/tests/v7-archive/layout/Tabs.test.tsx +0 -87
- package/bizar-dash/tests/v7-archive/layout/Topbar.test.tsx +0 -41
- package/bizar-dash/tests/v7-archive/layout/ViewHeader.test.tsx +0 -47
- package/bizar-dash/tests/v7-archive/lib/i18n.test.ts +0 -46
- package/bizar-dash/tests/v7-archive/lib/search-fuzzy.test.ts +0 -149
- package/bizar-dash/tests/v7-archive/lib/utils.test.ts +0 -194
- package/bizar-dash/tests/v7-archive/memory-graph-view.test.tsx +0 -69
- package/bizar-dash/tests/v7-archive/mobile-chat.test.tsx +0 -82
- package/bizar-dash/tests/v7-archive/mobile-layout.test.tsx +0 -332
- package/bizar-dash/tests/v7-archive/mobile-tasks.test.tsx +0 -162
- package/bizar-dash/tests/v7-archive/navigation/NavGroup.test.tsx +0 -55
- package/bizar-dash/tests/v7-archive/navigation/NavLink.test.tsx +0 -61
- package/bizar-dash/tests/v7-archive/quality-gates.test.tsx +0 -59
- package/bizar-dash/tests/v7-archive/settings-layout.test.tsx +0 -129
- package/bizar-dash/tests/v7-archive/settings-mode-wiring.test.tsx +0 -151
- package/bizar-dash/tests/v7-archive/ui/primitives/Box.test.tsx +0 -49
- package/bizar-dash/tests/v7-archive/ui/primitives/Grid.test.tsx +0 -37
- package/bizar-dash/tests/v7-archive/ui/primitives/Inline.test.tsx +0 -33
- package/bizar-dash/tests/v7-archive/ui/primitives/Separator.test.tsx +0 -34
- package/bizar-dash/tests/v7-archive/ui/primitives/Stack.test.tsx +0 -45
- package/bizar-dash/tests/v7-archive/views/Agents.test.tsx +0 -359
- package/bizar-dash/tests/v7-archive/views/Memory.test.tsx +0 -274
- package/bizar-dash/tests/v7-archive/views/Tasks.test.tsx +0 -250
- package/bizar-dash/tests/v7-archive/views/sidebar.test.tsx +0 -116
- package/bizar-dash/tests/v7-archive/views/topbar.test.tsx +0 -87
- package/bizar-dash/tests/v7-archive/voice-recorder.test.tsx +0 -95
- package/bizar-dash/tests/voice-store.test.mjs +0 -148
- package/bizar-dash/tests/voice-transcribe-worker.test.mjs +0 -343
- package/bizar-dash/tests/voice-transcribe.test.mjs +0 -87
- package/bizar-dash/tests/workspaces.test.mjs +0 -527
- package/bizar-dash/tests/yaml.test.mjs +0 -128
- package/bizar-dash/tsconfig.json +0 -23
- package/bizar-dash/vite.config.ts +0 -82
- package/bizar-dash/vitest.config.ts +0 -20
- package/cli/__tests__/cost-gate.test.mjs +0 -301
- package/cli/__tests__/esm-no-require.test.mjs +0 -97
- package/cli/__tests__/feature-list-bridge.test.mjs +0 -371
- package/cli/agent-browser-up.sh +0 -152
- package/cli/agent-browser-update.test.mjs +0 -86
- package/cli/artifact-cli.mjs +0 -605
- package/cli/artifact-render.mjs +0 -621
- package/cli/artifact-server.mjs +0 -847
- package/cli/artifact-templates.mjs +0 -523
- package/cli/artifact.mjs +0 -63
- package/cli/artifact.test.mjs +0 -2331
- package/cli/bg.mjs +0 -471
- package/cli/cli-commands-validation.test.mjs +0 -106
- package/cli/commands/artifact.mjs +0 -20
- package/cli/commands/clip.mjs +0 -163
- package/cli/commands/dash.mjs +0 -193
- package/cli/commands/deploy/cloudflare.mjs +0 -250
- package/cli/commands/deploy/docker.mjs +0 -219
- package/cli/commands/deploy/fly.mjs +0 -161
- package/cli/commands/deploy/vercel.mjs +0 -225
- package/cli/commands/deploy.mjs +0 -240
- package/cli/commands/eval.mjs +0 -396
- package/cli/commands/lightrag.mjs +0 -170
- package/cli/commands/marketplace.mjs +0 -64
- package/cli/commands/memory.mjs +0 -25
- package/cli/commands/minimax.mjs +0 -288
- package/cli/commands/mod.mjs +0 -185
- package/cli/commands/ocr.mjs +0 -182
- package/cli/commands/plugin.mjs +0 -358
- package/cli/commands/rca.test.mjs +0 -99
- package/cli/commands/service.mjs +0 -79
- package/cli/commands/setup-provider.test.mjs +0 -311
- package/cli/commands/tailscale.mjs +0 -256
- package/cli/commands/usage.mjs +0 -113
- package/cli/commands/voice.mjs +0 -211
- package/cli/commands/workspace.mjs +0 -247
- package/cli/copy.mjs +0 -540
- package/cli/dev-link.mjs +0 -191
- package/cli/dev-link.test.mjs +0 -310
- package/cli/digest.mjs +0 -149
- package/cli/install/banner.test.mjs +0 -39
- package/cli/install/index.test.mjs +0 -61
- package/cli/install/paths.test.mjs +0 -77
- package/cli/install/plugin.mjs +0 -161
- package/cli/install/postinstall.mjs +0 -137
- package/cli/install/postinstall.test.mjs +0 -98
- package/cli/install.test.mjs +0 -272
- package/cli/memory-constants.mjs +0 -76
- package/cli/memory.mjs +0 -1850
- package/cli/migrate.test.mjs +0 -85
- package/cli/plow-through.test.mjs +0 -56
- package/cli/plugin-runtime-deps.mjs +0 -250
- package/cli/plugin-runtime-deps.test.mjs +0 -378
- package/cli/post-install-smoke.mjs +0 -256
- package/cli/post-install-smoke.test.mjs +0 -72
- package/cli/prompts.mjs +0 -168
- package/cli/providers-detect.mjs +0 -233
- package/cli/provision.test.mjs +0 -324
- package/cli/service-controller.mjs +0 -735
- package/cli/service-controller.test.mjs +0 -191
- package/cli/service-env.mjs +0 -130
- package/cli/service.mjs +0 -492
- package/cli/tests/minimax-cli.test.mjs +0 -79
- package/cli/worker-dispatcher.test.mjs +0 -204
- package/config/skills/glyph/SKILL.md +0 -163
- package/config/skills/lightrag/SKILL.md +0 -81
- package/config/skills/memory-protocol/SKILL.md +0 -105
- package/config/skills/obsidian/SKILL.md +0 -306
- package/packages/sdk/${HOME}/.bizar_home/memory/projects/sdk/sessions/2026-07-16-e16c2f59.md +0 -14
- package/packages/sdk/.bizar/learning/instincts.jsonl +0 -5
- package/packages/sdk/LICENSE +0 -21
- package/packages/sdk/dist/memory/index.d.ts +0 -43
- package/packages/sdk/dist/memory/index.js +0 -159
- package/packages/sdk/dist/router/memory-distillation.d.ts +0 -58
- package/packages/sdk/dist/router/memory-distillation.js +0 -195
- package/packages/sdk/vitest.config.ts +0 -9
- package/plugins/bizar/LICENSE +0 -21
- package/plugins/bizar/dist/index.d.ts +0 -25
- package/plugins/bizar/dist/index.js +0 -32
- package/plugins/bizar/package.json +0 -18
- package/scripts/audit.mjs +0 -388
- package/scripts/audit.test.mjs +0 -149
- package/scripts/bh-full-e2e.mjs +0 -300
- package/scripts/check-agents.mjs +0 -76
- package/scripts/check-arch.sh +0 -80
- package/scripts/check-deps.mjs +0 -468
- package/scripts/clean-state-check.sh +0 -81
- package/scripts/eval-gate.mjs +0 -134
- package/scripts/eval-gate.test.mjs +0 -138
- package/scripts/feature-state-machine.mjs +0 -178
- package/scripts/feature-state-machine.test.mjs +0 -135
- package/scripts/git-hooks/__tests__/commit-msg.test.mjs +0 -61
- package/scripts/install-curl.sh +0 -17
- package/scripts/install-service.mjs +0 -190
- package/scripts/loop-log.txt +0 -29
- package/scripts/loop-tasks.md +0 -79
- package/scripts/mirror-claude-md.sh +0 -78
- package/scripts/overnight-loop.mjs +0 -60
- package/scripts/run-dev.mjs +0 -84
- package/scripts/session-trace.sh +0 -52
- package/scripts/spec-dedup.test.mjs +0 -124
- package/scripts/sprint.mjs +0 -213
- package/scripts/sync-skills-mirror.mjs +0 -113
- package/scripts/test-in-container.sh +0 -157
- package/scripts/verify-feature.sh +0 -102
- package/scripts/verify-thinking-skills.mjs +0 -135
- package/scripts/worktree-setup.sh +0 -79
- package/templates/clean-state-checklist.md +0 -55
- package/templates/deploy/cloudflare/README.md +0 -32
- package/templates/deploy/cloudflare/functions-index.template.js +0 -15
- package/templates/deploy/cloudflare/wrangler.toml.template +0 -9
- package/templates/deploy/docker/.env.template +0 -16
- package/templates/deploy/docker/README.md +0 -58
- package/templates/deploy/docker/docker-compose.template.yml +0 -23
- package/templates/deploy/fly/README.md +0 -35
- package/templates/deploy/fly/fly.toml.template +0 -28
- package/templates/deploy/vercel/README.md +0 -29
- package/templates/deploy/vercel/api-index.template.js +0 -18
- package/templates/deploy/vercel/vercel.json.template +0 -16
- package/templates/eval-fixtures/README.md +0 -58
- package/templates/eval-fixtures/citation.json +0 -16
- package/templates/eval-fixtures/code-review.json +0 -16
- package/templates/eval-fixtures/code-search-basic.json +0 -28
- package/templates/eval-fixtures/concise-output.json +0 -16
- package/templates/eval-fixtures/context-window.json +0 -16
- package/templates/eval-fixtures/error-recovery.json +0 -16
- package/templates/eval-fixtures/json-output.json +0 -20
- package/templates/eval-fixtures/latency-bounds.json +0 -16
- package/templates/eval-fixtures/multi-language.json +0 -16
- package/templates/eval-fixtures/regression-suite.json +0 -79
- package/templates/eval-fixtures/response-format.json +0 -30
- package/templates/eval-fixtures/safe-paths.json +0 -16
- package/templates/eval-fixtures/tool-call-correctness.json +0 -24
- package/templates/eval-fixtures/tool-call-multi-step.json +0 -18
- package/templates/eval-fixtures/unicode-handling.json +0 -16
- package/templates/evaluator-rubric.md +0 -50
- package/templates/plan/htmx.min.js +0 -1
- package/templates/plan/library/bug-investigation.mdx +0 -79
- package/templates/plan/library/decision-record.mdx +0 -71
- package/templates/plan/library/feature-design.mdx +0 -92
- package/templates/plan/meta.json.template +0 -8
- package/templates/plan/plan.mdx.template +0 -46
- package/templates/plugin-template/README.md +0 -121
- package/templates/plugin-template/index.js +0 -66
- package/templates/plugin-template/plugin.json +0 -42
- package/templates/plugin-template/tests/plugin.test.js +0 -83
- package/templates/schedules/daily-backup.json +0 -12
- package/templates/schedules/daily-cleanup.json +0 -12
- package/templates/schedules/hourly-health-check.json +0 -12
- package/templates/schedules/webhook-on-push.json +0 -13
- package/templates/schedules/weekly-digest.json +0 -13
- package/templates/sprint-contract.md +0 -47
- /package/{.claude → config}/skills/de-sloppify/SKILL.md +0 -0
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import{j as e,r as g}from"./cmdk-C3F6LD6N.js";import{d as H,g as ze,t as Pe,v as Re,u as M,k as E,w as re,x as de,y as ce,D as he,j as ue,z as pe,W as ge,A as me,E as xe,c as ye,G as fe,S as B,I as u,B as b,b as se,i as I,F as O,h as De}from"./main-BRmJZcHt.js";import{G as Me}from"./Grid-Bojq8Sg7.js";import{S as o}from"./Switch-B79a2t-G.js";import{S as F}from"./Slider-AjjzqI-5.js";import{I as S}from"./Input-DV-vdaV8.js";import{T as Fe}from"./Textarea-BfXGMXQ7.js";import{S as d,a as i}from"./SettingsRow-CJb-F94Y.js";import{P as ve}from"./plug-DVvSSe40.js";import{B as je}from"./brain-D7k5s8vH.js";import{R as oe}from"./rotate-cw-CClSVUaX.js";import{P as Be}from"./plus-Cps-8lcG.js";import{T as Ee}from"./trash-2-B_Y6HrfN.js";import"./index-B1OIS316.js";import"./index-CR0TeJmc.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 ke=H("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"}]]);/**
|
|
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 be=H("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"}]]);/**
|
|
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 Ce=H("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"}]]);function Ie(j){const{items:m,activeId:x,onSelect:y,className:a}=j;return e.jsxs("nav",{"aria-label":"Settings sections",className:ze("v8-settings-nav",a),children:[e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:m.map(p=>{const f=x===p.id;return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>y==null?void 0:y(p.id),"aria-current":f?"true":void 0,style:{display:"flex",alignItems:"center",gap:"var(--space-2)",width:"100%",padding:"var(--space-2) var(--space-3)",background:f?"var(--surface-2)":"transparent",border:0,borderRadius:"var(--radius-sm)",color:f?"var(--fg)":"var(--fg-muted)",font:"inherit",fontSize:"var(--fs-13)",fontWeight:f?500:400,cursor:"pointer",textAlign:"left"},children:[p.icon!==void 0&&e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",color:f?"var(--accent)":"var(--fg-subtle)",flexShrink:0},children:p.icon}),e.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:p.title})]})},p.id)})}),e.jsx("style",{children:`
|
|
17
|
-
.v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }
|
|
18
|
-
`})]})}const Oe=["UTC","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Sao_Paulo","Europe/London","Europe/Berlin","Europe/Amsterdam","Europe/Paris","Europe/Madrid","Europe/Stockholm","Europe/Istanbul","Asia/Dubai","Asia/Kolkata","Asia/Singapore","Asia/Tokyo","Asia/Seoul","Asia/Shanghai","Australia/Sydney","Pacific/Auckland"],ne=[{id:"general",title:"General",icon:E},{id:"theme",title:"Theme",icon:be},{id:"density",title:"Density",icon:Ce},{id:"density-rules",title:"Density rules",icon:re},{id:"palette",title:"Command palette",icon:de},{id:"keyboard",title:"Keyboard",icon:ke},{id:"notifications",title:"Notifications",icon:ce},{id:"storage",title:"Storage",icon:he},{id:"plugins",title:"Plugins",icon:ve},{id:"mcps",title:"MCP servers",icon:ue},{id:"skills",title:"Skills",icon:pe},{id:"hooks",title:"Hooks",icon:ge},{id:"activity",title:"Activity",icon:me},{id:"memory",title:"Memory",icon:je},{id:"task-defaults",title:"Task defaults",icon:xe},{id:"agent-defaults",title:"Agent defaults",icon:ye},{id:"privacy",title:"Privacy",icon:fe},{id:"advanced",title:"Advanced",icon:E}],le={workspaceName:"Bizar Harness",workspaceTimezone:typeof Intl<"u"?Intl.DateTimeFormat().resolvedOptions().timeZone:"UTC",defaultView:"overview",themeAccent:"#5b8def",densityBaseFont:13,tasksCompact:!1,memoryCompact:!0,activityCompact:!1,paletteHistory:!0,paletteFuzzy:!0,notifyAgentFinished:!0,notifyCiFailed:!0,notifyTokenBudget:!0,notifyDailyDigest:!1,notifyChannel:"toast",storagePath:"~/.bizar/store.db",cachePath:"~/.cache/bizar",sessionsPath:"~/.claude/sessions",cacheSizeMb:256,hookPreToolUse:!0,hookPostToolUse:!0,hookTaskStart:!0,hookTaskResume:!0,hookUserPromptSubmit:!0,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},Ue={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 v({value:j,defaultValue:m,onChange:x,children:y,id_attr:a}){return e.jsx("select",{id:a,value:j,defaultValue:m,onChange:p=>x==null?void 0:x(p.target.value),style:Ue,children:y})}function N({loading:j,value:m}){return j?e.jsx(De,{style:{width:32,height:16}}):e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:m??0})}function tt(){var _,J,K,Y,$,Z,Q,X,ee,te,ie;const[j,m]=g.useState("general"),x=Pe(),y=Re(),[a,p]=g.useState(le),[f,w]=g.useState(null),[U,c]=g.useState(null),[n,L]=g.useState(null),[W,G]=g.useState(null),T=async(t,l,r,k)=>{if(!(typeof window<"u"&&typeof window.confirm=="function"&&!window.confirm(k))){L(t),c(null);try{await I(r,{method:l}),G(`${t} @ ${new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`)}catch(C){c((C instanceof O,C.message))}finally{L(null)}}},Se=(t,l)=>{if(typeof window>"u")return;const r=document.createElement("a");r.href=t,r.download=l,r.rel="noopener",document.body.appendChild(r),r.click(),r.remove()},A=M("/api/skills?kind=skills"),z=M("/api/skills?kind=mcps"),q=M("/api/skills?kind=hooks"),P=M("/api/agents"),V=M("/api/settings");g.useEffect(()=>{V.data&&p(t=>({...t,...V.data}))},[V.data]);const s=(t,l)=>{p(r=>({...r,[t]:l})),h(t,l)},h=async(t,l)=>{try{const r={...a,[t]:l};await I("/api/settings",{method:"PUT",body:r}),w(Date.now()),c(null)}catch(r){c((r instanceof O,r.message))}},we=ne.map(t=>({id:t.id,title:t.title,icon:e.jsx(t.icon,{size:14,"aria-hidden":"true"})})),Te=t=>{m(t),requestAnimationFrame(()=>{var l;(l=document.getElementById(t))==null||l.scrollIntoView({behavior:"smooth",block:"start"})})},Ae=g.useRef(null);return g.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=ne.map(k=>document.getElementById(k.id)).filter(k=>k!==null);if(t.length===0)return;const l=new Map,r=new IntersectionObserver(k=>{for(const R of k){const D=R.target.id;R.isIntersecting?l.set(D,R.intersectionRatio):l.delete(D)}if(l.size===0)return;let C,ae=-1;for(const[R,D]of l)D>ae&&(ae=D,C=R);C&&m(C)},{rootMargin:"-30% 0px -50% 0px",threshold:[0,.25,.5,.75,1]});for(const k of t)r.observe(k);return()=>r.disconnect()},[]),e.jsx("div",{ref:Ae,"data-testid":"settings-view",children:e.jsxs(Me,{cols:3,gap:5,children:[e.jsx("aside",{style:{position:"sticky",top:0,alignSelf:"start"},children:e.jsx(Ie,{items:we,activeId:j,onSelect:Te})}),e.jsxs(B,{gap:5,style:{gridColumn:"span 2"},children:[U!==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:U}),f!==null&&e.jsxs(u,{align:"center",justify:"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(f).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]}),W!==null&&e.jsxs(u,{align:"center",justify:"end",gap:2,style:{fontSize:"var(--fs-12)",color:"var(--success)"},children:[e.jsx("span",{children:"Last action:"})," ",e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:W})]}),e.jsxs(d,{id:"general",title:"General",description:"Workspace identity + default landing page.",icon:e.jsx(E,{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(S,{value:a.workspaceName,onChange:t=>s("workspaceName",t.target.value),style:{width:240}})}),e.jsx(i,{id:"workspace-timezone",label:"Timezone",description:"Used for activity timestamps + digests.",control:e.jsx(v,{value:a.workspaceTimezone,onChange:t=>s("workspaceTimezone",t),id_attr:"workspace-timezone-select",children:Oe.map(t=>e.jsx("option",{value:t,children:t},t))})}),e.jsx(i,{id:"default-view",label:"Default view on launch",control:e.jsxs(v,{value:a.defaultView,onChange:t=>s("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(d,{id:"theme",title:"Theme",description:"Color mode + accent + typography.",icon:e.jsx(be,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"theme-mode",label:"Color mode",control:e.jsxs(v,{value:x.mode,onChange:t=>x.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(u,{align:"center",gap:2,children:[e.jsx("input",{type:"color",value:a.themeAccent,onChange:t=>s("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(v,{defaultValue:"inter",onChange:t=>void h("themeFont",t),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.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{defaultValue:[8],min:0,max:16,step:1,onValueChange:t=>void h("themeRadius",t[0]??8)}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.themeRadius??8,"px"]})]})})]}),e.jsxs(d,{id:"density",title:"Density",description:"Comfortable by default. Compact fits more on screen.",icon:e.jsx(Ce,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"density-mode",label:"Density",control:e.jsxs(v,{value:y.density,onChange:t=>y.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(u,{align:"center",gap:2,children:[e.jsx(F,{value:[a.densityBaseFont],onValueChange:t=>s("densityBaseFont",t[0]??13),min:11,max:16,step:1}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.densityBaseFont,"px"]})]})})]}),e.jsxs(d,{id:"density-rules",title:"Density rules",description:"Override density per surface.",icon:e.jsx(re,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"tasks-compact",label:"Tasks page — compact by default",control:e.jsx(o,{checked:a.tasksCompact,onCheckedChange:t=>s("tasksCompact",t)})}),e.jsx(i,{id:"memory-compact",label:"Memory page — compact by default",control:e.jsx(o,{checked:a.memoryCompact,onCheckedChange:t=>s("memoryCompact",t)})}),e.jsx(i,{id:"activity-compact",label:"Activity page — compact by default",control:e.jsx(o,{checked:a.activityCompact,onCheckedChange:t=>s("activityCompact",t)})})]}),e.jsxs(d,{id:"palette",title:"Command palette",description:"How the ⌘K palette behaves.",icon:e.jsx(de,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"palette-history",label:"Show recent commands",control:e.jsx(o,{checked:a.paletteHistory,onCheckedChange:t=>s("paletteHistory",t)})}),e.jsx(i,{id:"palette-fuzzy",label:"Fuzzy match",control:e.jsx(o,{checked:a.paletteFuzzy,onCheckedChange:t=>s("paletteFuzzy",t)})}),e.jsx(i,{id:"palette-navigate",label:"Show navigation group",control:e.jsx(o,{defaultChecked:!0,onCheckedChange:t=>h("paletteNavigate",t)})}),e.jsx(i,{id:"palette-spawn",label:"Show agent-spawn group",control:e.jsx(o,{defaultChecked:!0,onCheckedChange:t=>h("paletteSpawn",t)})}),e.jsx(i,{id:"palette-scope",label:"Default scope",description:"Where palette actions apply when no context.",control:e.jsxs(v,{defaultValue:"project",onChange:t=>void h("paletteScope",t),children:[e.jsx("option",{value:"project",children:"Active project"}),e.jsx("option",{value:"global",children:"Global"})]})})]}),e.jsxs(d,{id:"keyboard",title:"Keyboard",description:"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).",icon:e.jsx(ke,{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(d,{id:"notifications",title:"Notifications",description:"When the harness should ping you.",icon:e.jsx(ce,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"n-agent-finished",label:"Agent run finished",control:e.jsx(o,{checked:a.notifyAgentFinished,onCheckedChange:t=>s("notifyAgentFinished",t)})}),e.jsx(i,{id:"n-task-moved",label:"Task moved between columns",control:e.jsx(o,{defaultChecked:!0,onCheckedChange:t=>void h("notifyTaskMoved",t)})}),e.jsx(i,{id:"n-ci-failed",label:"CI failed",control:e.jsx(o,{checked:a.notifyCiFailed,onCheckedChange:t=>s("notifyCiFailed",t)})}),e.jsx(i,{id:"n-token-budget",label:"Token budget 80%",control:e.jsx(o,{checked:a.notifyTokenBudget,onCheckedChange:t=>s("notifyTokenBudget",t)})}),e.jsx(i,{id:"n-daily-digest",label:"Daily digest at 09:00",control:e.jsx(o,{checked:a.notifyDailyDigest,onCheckedChange:t=>s("notifyDailyDigest",t)})}),e.jsx(i,{id:"n-channel",label:"Channel",description:"Where notifications render.",control:e.jsxs(v,{value:a.notifyChannel,onChange:t=>s("notifyChannel",t),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(d,{id:"storage",title:"Storage",description:"Where local data lives.",icon:e.jsx(he,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"store-path",label:"Local store path",control:e.jsx(S,{value:a.storagePath,onChange:t=>s("storagePath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"cache-path",label:"Cache directory",control:e.jsx(S,{value:a.cachePath,onChange:t=>s("cachePath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"sessions-path",label:"Claude Code sessions",control:e.jsx(S,{value:a.sessionsPath,onChange:t=>s("sessionsPath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"cache-size",label:"Cache budget",description:"Soft cap (MB) before LRU eviction.",control:e.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{value:[a.cacheSizeMb],onValueChange:t=>s("cacheSizeMb",t[0]??256),min:64,max:4096,step:32}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.cacheSizeMb," MB"]})]})}),e.jsx(i,{id:"store-gc",label:"Garbage collect",description:"Prune empty sessions and orphaned tasks.",control:e.jsx(b,{variant:"secondary",disabled:n==="gc",onClick:()=>void T("gc","POST","/api/admin/gc","Run garbage collect?"),children:n==="gc"?"Running…":"Run GC"})}),e.jsx(i,{id:"store-clear",label:"Clear local cache",description:"Destructive. Wipes the activity log and snapshots.",control:e.jsx(b,{variant:"danger",disabled:n==="clear",onClick:()=>void T("cache/clear","POST","/api/admin/cache/clear","Clear dashboard cache? This is reversible but will log you out briefly."),children:n==="clear"?"Clearing…":"Clear…"})})]}),e.jsxs(d,{id:"plugins",title:"Plugins",description:"Plugin registrations under `.claude/`.",icon:e.jsx(ve,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"plugins-count",label:"Loaded plugins",control:e.jsx(N,{loading:P.loading,value:((J=(_=P.data)==null?void 0:_.agents)==null?void 0:J.length)??0})}),e.jsx(i,{id:"plugins-bizar",label:"Bizar",description:"Core plugin. Required — disable with care.",control:e.jsx(o,{defaultChecked:!0,disabled:!0})}),Array.isArray((K=P.data)==null?void 0:K.agents)&&P.data.agents.length>0&&e.jsx(i,{id:"plugins-list",label:"Active agents",control:e.jsx(B,{gap:1,style:{maxHeight:200,overflowY:"auto",width:360},children:P.data.agents.map(t=>e.jsxs(u,{align:"center",justify:"between",style:{padding:"var(--space-1) var(--space-2)",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(se,{tone:"success",children:"active"})]},t.name))})})]}),e.jsxs(d,{id:"mcps",title:"MCP servers",description:"Model Context Protocol servers.",icon:e.jsx(ue,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"mcps-count",label:"Registered MCPs",control:e.jsx(N,{loading:z.loading,value:(($=(Y=z.data)==null?void 0:Y.skills)==null?void 0:$.length)??0})}),Array.isArray((Z=z.data)==null?void 0:Z.skills)&&z.data.skills.length>0&&e.jsx(i,{id:"mcps-list",label:"Servers",control:e.jsx(B,{gap:1,style:{maxHeight:220,overflowY:"auto",width:360},children:z.data.skills.map(t=>e.jsxs(u,{align:"center",justify:"between",style:{padding:"var(--space-1) var(--space-2)",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(o,{defaultChecked:!0,onCheckedChange:l=>void h(`mcp:${t.name}`,l)})]},t.name))})})]}),e.jsxs(d,{id:"skills",title:"Skills",description:"Bizar skill packs.",icon:e.jsx(pe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"skills-count",label:"Loaded skills",control:e.jsx(N,{loading:A.loading,value:((X=(Q=A.data)==null?void 0:Q.skills)==null?void 0:X.length)??0})}),Array.isArray((ee=A.data)==null?void 0:ee.skills)&&A.data.skills.length>0&&e.jsx(i,{id:"skills-list",label:"Skill packs",control:e.jsx(B,{gap:1,style:{maxHeight:260,overflowY:"auto",width:360},children:A.data.skills.map(t=>e.jsxs(u,{align:"center",justify:"between",style:{padding:"var(--space-1) var(--space-2)",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsxs(u,{align:"center",gap:2,children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(se,{tone:"neutral",children:t.source})]}),e.jsx(o,{defaultChecked:!0,onCheckedChange:l=>void h(`skill:${t.name}`,l)})]},t.name))})})]}),e.jsxs(d,{id:"hooks",title:"Hooks",description:"Executable hook scripts.",icon:e.jsx(ge,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"hooks-count",label:"Registered hooks",control:e.jsx(N,{loading:q.loading,value:((ie=(te=q.data)==null?void 0:te.skills)==null?void 0:ie.length)??0})}),e.jsx(i,{id:"hooks-pretool",label:"PreToolUse",description:"Block writes to .env / secrets / node_modules.",control:e.jsx(o,{checked:a.hookPreToolUse,onCheckedChange:t=>s("hookPreToolUse",t)})}),e.jsx(i,{id:"hooks-posttool",label:"PostToolUse",description:"Log tool latency to ~/.config/bizar/hook-logs/.",control:e.jsx(o,{checked:a.hookPostToolUse,onCheckedChange:t=>s("hookPostToolUse",t)})}),e.jsx(i,{id:"hooks-taskstart",label:"TaskStart",description:"Prime AI with project context.",control:e.jsx(o,{checked:a.hookTaskStart,onCheckedChange:t=>s("hookTaskStart",t)})}),e.jsx(i,{id:"hooks-taskresume",label:"TaskResume",description:"Re-read state + check git log.",control:e.jsx(o,{checked:a.hookTaskResume,onCheckedChange:t=>s("hookTaskResume",t)})}),e.jsx(i,{id:"hooks-prompt",label:"UserPromptSubmit",description:"Tag prompts for routing.",control:e.jsx(o,{checked:a.hookUserPromptSubmit,onCheckedChange:t=>s("hookUserPromptSubmit",t)})})]}),e.jsxs(d,{id:"activity",title:"Activity",description:"Stream retention + export.",icon:e.jsx(me,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"activity-retention",label:"Retain last",control:e.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{value:[a.activityRetentionDays],onValueChange:t=>s("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(S,{placeholder:"heartbeat, ping, system",defaultValue:String(a.activityHide??""),onBlur:t=>void h("activityHide",t.target.value),style:{width:280}})}),e.jsx(i,{id:"activity-export",label:"Export",description:"Download the full activity log as NDJSON.",control:e.jsx(b,{variant:"secondary",onClick:()=>Se("/api/admin/activity/export","activity.ndjson"),children:"Export…"})})]}),e.jsxs(d,{id:"memory",title:"Memory",description:"Cross-session memo behavior.",icon:e.jsx(je,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"memory-auto-commit",label:"Auto-commit project memos",control:e.jsx(o,{checked:a.memoryAutoCommit,onCheckedChange:t=>s("memoryAutoCommit",t)})}),e.jsx(i,{id:"memory-scope",label:"Default scope filter",control:e.jsxs(v,{value:a.memoryScopeDefault,onChange:t=>s("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(b,{variant:"secondary",disabled:n==="reindex",onClick:()=>void T("memory/reindex","POST","/api/admin/memory/reindex","Rebuild the memory vault search index?"),children:n==="reindex"?"Re-indexing…":"Re-index"})})]}),e.jsxs(d,{id:"task-defaults",title:"Task defaults",description:"Defaults applied to new tasks.",icon:e.jsx(xe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"task-priority",label:"Default priority",control:e.jsxs(v,{value:a.defaultTaskPriority,onChange:t=>s("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(v,{value:a.defaultTaskColumn,onChange:t=>s("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(S,{placeholder:"odin",defaultValue:String(a.defaultTaskAssignee??""),onBlur:t=>void h("defaultTaskAssignee",t.target.value),style:{width:240}})})]}),e.jsxs(d,{id:"agent-defaults",title:"Agent defaults",description:"Defaults applied when spawning agents.",icon:e.jsx(ye,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"agent-model",label:"Default model",control:e.jsx(S,{value:a.defaultAgentModel,onChange:t=>s("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(u,{align:"center",gap:2,children:[e.jsx(F,{value:[a.defaultAgentMaxMistakes],onValueChange:t=>s("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(o,{defaultChecked:!!a.agentBackgroundDefault,onCheckedChange:t=>void h("agentBackgroundDefault",t)})}),e.jsx(i,{id:"agent-worktree",label:"Always create a worktree",control:e.jsx(o,{defaultChecked:!!(a.agentWorktree??!0),onCheckedChange:t=>void h("agentWorktree",t)})}),e.jsx(i,{id:"agent-system-prompt",label:"Extra system prompt",description:"Appended to every agent's system prompt.",control:e.jsx(Fe,{rows:3,placeholder:"You are a careful, methodical engineer…",defaultValue:String(a.agentSystemPrompt??""),onBlur:t=>void h("agentSystemPrompt",t.target.value)})})]}),e.jsxs(d,{id:"privacy",title:"Privacy",description:"What the harness sends and stores.",icon:e.jsx(fe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"privacy-analytics",label:"Anonymous analytics",control:e.jsx(o,{checked:a.analytics,onCheckedChange:t=>s("analytics",t)})}),e.jsx(i,{id:"privacy-crash",label:"Crash reports",control:e.jsx(o,{checked:a.crashReports,onCheckedChange:t=>s("crashReports",t)})}),e.jsx(i,{id:"privacy-pii",label:"PII handling",description:"How personal data is treated before persistence.",control:e.jsxs(v,{value:a.piiMode,onChange:t=>s("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(o,{defaultChecked:!!a.telemetryTokens,onCheckedChange:t=>void h("telemetryTokens",t)})})]}),e.jsxs(d,{id:"advanced",title:"Advanced",description:"Power-user toggles. Touch with care.",icon:e.jsx(E,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"advanced-reduced-motion",label:"Reduce motion",control:e.jsx(o,{checked:a.reducedMotion,onCheckedChange:t=>s("reducedMotion",t)})}),e.jsx(i,{id:"advanced-debug",label:"Debug overlay",description:"Show agent + tool call traces in the topbar.",control:e.jsx(o,{checked:a.debugOverlay,onCheckedChange:t=>s("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(u,{align:"center",gap:2,children:[e.jsxs(b,{variant:"danger",disabled:n==="restart",onClick:()=>void T("restart","POST","/api/admin/restart","Restart the dashboard backend? You may need to relaunch the CLI if it does not come back."),children:[e.jsx(oe,{size:12,"aria-hidden":!0})," ",n==="restart"?"Restarting…":"Restart…"]}),e.jsxs(b,{variant:"ghost",disabled:n==="rebuild",onClick:()=>void T("rebuild","POST","/api/admin/rebuild","Rebuild the dashboard package? This runs `npm run build`."),children:[e.jsx(Be,{size:12,"aria-hidden":!0})," ",n==="rebuild"?"Rebuilding…":"Rebuild"]})]})}),e.jsx(i,{id:"advanced-logs",label:"Open logs folder",control:e.jsxs(b,{variant:"secondary",disabled:n==="purge-logs",onClick:()=>void T("logs/purge","POST","/api/admin/logs/purge","Delete log files older than 14 days?"),children:[e.jsx(Ee,{size:12,"aria-hidden":!0})," ",n==="purge-logs"?"Purging…":"Purge logs"]})})]}),e.jsxs(d,{id:"configuration",title:"Configuration",description:"Reset to defaults, and edit the plugin-options sidecar.",icon:e.jsx(E,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"config-reset",label:"Reset settings to defaults",description:"Calls POST /api/settings/reset. Restores every key to its DEFAULT_SETTINGS value.",control:e.jsx(u,{align:"center",gap:2,children:e.jsxs(b,{variant:"danger",disabled:n==="settings-reset","data-testid":"settings-reset",onClick:()=>{typeof window<"u"&&typeof window.confirm=="function"&&!window.confirm("Reset every settings key to its default?")||(L("settings-reset"),c(null),(async()=>{try{const t=await I("/api/settings/reset",{method:"POST"});t!=null&&t.data&&p({...le,...t.data}),G(`reset @ ${new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`)}catch(t){c((t instanceof O,t.message))}finally{L(null)}})())},children:[e.jsx(oe,{size:12,"aria-hidden":!0})," ",n==="settings-reset"?"Resetting…":"Reset to defaults"]})})}),e.jsx(i,{id:"config-plugin-options",label:"Plugin options",description:"JSON sidecar at ~/.config/bizar/plugin-options.json. Persisted via PUT /api/settings/plugin-options.",control:e.jsx(Le,{})})]})]})]})})}function Le(){const[j,m]=g.useState("{}"),[x,y]=g.useState(!1),[a,p]=g.useState(null),[f,w]=g.useState(null);g.useEffect(()=>{let c=!1;return(async()=>{try{const n=await I("/api/settings/plugin-options");c||m(JSON.stringify(n??{},null,2))}catch(n){c||w((n instanceof O,n.message))}})(),()=>{c=!0}},[]);const U=async()=>{let c;try{c=JSON.parse(j)}catch(n){w(`Invalid JSON: ${n.message}`);return}y(!0),w(null);try{await I("/api/settings/plugin-options",{method:"PUT",body:c}),p(Date.now())}catch(n){w((n instanceof O,n.message))}finally{y(!1)}};return e.jsxs(B,{gap:2,style:{width:"100%"},children:[e.jsx("textarea",{"data-testid":"plugin-options-form",value:j,onChange:c=>m(c.target.value),rows:6,spellCheck:!1,style:{width:"100%",fontFamily:"var(--font-mono)",fontSize:12,padding:"8px",background:"var(--surface-1)",color:"var(--text-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-1)"}}),e.jsxs(u,{align:"center",gap:2,children:[e.jsx(b,{variant:"primary",disabled:x,onClick:()=>void U(),children:x?"Saving…":"Save plugin options"}),a!==null&&e.jsxs("span",{style:{fontSize:11,color:"var(--text-2)"},children:["saved ",new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})]}),f&&e.jsx("span",{style:{fontSize:11,color:"var(--danger)"},children:f})]})]})}export{tt as SettingsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsView-BvOGcgMS.js","sources":["../../../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/sliders-vertical.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 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 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","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 COMMON_TIMEZONES: readonly string[] = [\n 'UTC',\n 'America/Los_Angeles',\n 'America/Denver',\n 'America/Chicago',\n 'America/New_York',\n 'America/Sao_Paulo',\n 'Europe/London',\n 'Europe/Berlin',\n 'Europe/Amsterdam',\n 'Europe/Paris',\n 'Europe/Madrid',\n 'Europe/Stockholm',\n 'Europe/Istanbul',\n 'Asia/Dubai',\n 'Asia/Kolkata',\n 'Asia/Singapore',\n 'Asia/Tokyo',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Australia/Sydney',\n 'Pacific/Auckland',\n];\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 workspaceTimezone: string;\n defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';\n themeAccent: string;\n densityBaseFont: number;\n tasksCompact: boolean;\n memoryCompact: boolean;\n activityCompact: boolean;\n paletteHistory: boolean;\n paletteFuzzy: boolean;\n notifyAgentFinished: boolean;\n notifyCiFailed: boolean;\n notifyTokenBudget: boolean;\n notifyDailyDigest: boolean;\n notifyChannel: 'toast' | 'system' | 'both' | 'silent';\n storagePath: string;\n cachePath: string;\n sessionsPath: string;\n cacheSizeMb: number;\n hookPreToolUse: boolean;\n hookPostToolUse: boolean;\n hookTaskStart: boolean;\n hookTaskResume: boolean;\n hookUserPromptSubmit: 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 workspaceTimezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : 'UTC',\n defaultView: 'overview',\n themeAccent: '#5b8def',\n densityBaseFont: 13,\n tasksCompact: false,\n memoryCompact: true,\n activityCompact: false,\n paletteHistory: true,\n paletteFuzzy: true,\n notifyAgentFinished: true,\n notifyCiFailed: true,\n notifyTokenBudget: true,\n notifyDailyDigest: false,\n notifyChannel: 'toast',\n storagePath: '~/.bizar/store.db',\n cachePath: '~/.cache/bizar',\n sessionsPath: '~/.claude/sessions',\n cacheSizeMb: 256,\n hookPreToolUse: true,\n hookPostToolUse: true,\n hookTaskStart: true,\n hookTaskResume: true,\n hookUserPromptSubmit: true,\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 id_attr,\n}: {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: ReactNode;\n id_attr?: string;\n}): JSX.Element {\n return (\n <select\n id={id_attr}\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 const [busy, setBusy] = useState<string | null>(null);\n const [lastAction, setLastAction] = useState<string | null>(null);\n\n // Run an admin endpoint with confirm + busy state + error surface.\n const runAdmin = async (label: string, method: 'POST' | 'DELETE', path: string, confirmMsg: string): Promise<void> => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function' && !window.confirm(confirmMsg)) return;\n setBusy(label);\n setError(null);\n try {\n await fetchJson(path, { method });\n setLastAction(`${label} @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n };\n\n // GET that triggers a browser download (NDJSON for the activity log).\n const downloadFile = (path: string, filename: string): void => {\n if (typeof window === 'undefined') return;\n const a = document.createElement('a');\n a.href = path;\n a.download = filename;\n a.rel = 'noopener';\n document.body.appendChild(a);\n a.click();\n a.remove();\n };\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 // Hydrate from the server. The server returns the merged\n // (defaults + persisted overrides) shape, so we can spread it\n // directly over our DEFAULTS to pick up any keys we don't model.\n const settingsRes = useFetch<Partial<SettingsState>>('/api/settings');\n useEffect(() => {\n if (settingsRes.data) {\n setSettings((prev) => ({ ...prev, ...settingsRes.data }));\n }\n }, [settingsRes.data]);\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 // The settings endpoint accepts a partial body and merges with\n // existing values on the server side — so PUT /api/settings\n // with { [key]: value } is the canonical \"update one row\" path.\n // We re-PUT the full merged shape so the server has the latest\n // copy of every key we know about.\n const merged = { ...settings, [key]: value };\n await fetchJson('/api/settings', { method: 'PUT', body: merged });\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} data-testid=\"settings-view\">\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=\"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 {lastAction !== null && (\n <Inline align=\"center\" justify=\"end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--success)' }}>\n <span>Last action:</span> <code style={{ fontFamily: 'var(--font-mono)' }}>{lastAction}</code>\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=\"workspace-timezone\"\n label=\"Timezone\"\n description=\"Used for activity timestamps + digests.\"\n control={\n <NativeSelect value={settings.workspaceTimezone} onChange={(v) => update('workspaceTimezone', v)} id_attr=\"workspace-timezone-select\">\n {COMMON_TIMEZONES.map((tz) => (\n <option key={tz} value={tz}>{tz}</option>\n ))}\n </NativeSelect>\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\" onChange={(v) => void patch('themeFont', v)}>\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={\n <Inline align=\"center\" gap={2}>\n <Slider\n defaultValue={[8]}\n min={0}\n max={16}\n step={1}\n onValueChange={(v) => void patch('themeRadius', v[0] ?? 8)}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{(settings as unknown as Record<string, unknown>).themeRadius as number ?? 8}px</code>\n </Inline>\n }\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 checked={settings.activityCompact} onCheckedChange={(v) => update('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\" onChange={(v) => void patch('paletteScope', v)}>\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) => void 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 value={settings.notifyChannel} onChange={(v) => update('notifyChannel', v as SettingsState['notifyChannel'])}>\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\n id=\"store-path\"\n label=\"Local store path\"\n control={\n <Input\n value={settings.storagePath}\n onChange={(e) => update('storagePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-path\"\n label=\"Cache directory\"\n control={\n <Input\n value={settings.cachePath}\n onChange={(e) => update('cachePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"sessions-path\"\n label=\"Claude Code sessions\"\n control={\n <Input\n value={settings.sessionsPath}\n onChange={(e) => update('sessionsPath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-size\"\n label=\"Cache budget\"\n description=\"Soft cap (MB) before LRU eviction.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.cacheSizeMb]}\n onValueChange={(v) => update('cacheSizeMb', v[0] ?? 256)}\n min={64}\n max={4096}\n step={32}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.cacheSizeMb} MB</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"store-gc\"\n label=\"Garbage collect\"\n description=\"Prune empty sessions and orphaned tasks.\"\n control={<Button variant=\"secondary\" disabled={busy === 'gc'} onClick={() => void runAdmin('gc', 'POST', '/api/admin/gc', 'Run garbage collect?')}>{busy === 'gc' ? 'Running…' : '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\" disabled={busy === 'clear'} onClick={() => void runAdmin('cache/clear', 'POST', '/api/admin/cache/clear', 'Clear dashboard cache? This is reversible but will log you out briefly.')}>{busy === 'clear' ? 'Clearing…' : '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=\"between\" style={{ padding: 'var(--space-1) var(--space-2)', 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=\"between\" style={{ padding: 'var(--space-1) var(--space-2)', 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=\"between\" style={{ padding: 'var(--space-1) var(--space-2)', 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 checked={settings.hookPreToolUse} onCheckedChange={(v) => update('hookPreToolUse', v)} />} />\n <SettingsRow id=\"hooks-posttool\" label=\"PostToolUse\" description=\"Log tool latency to ~/.config/bizar/hook-logs/.\" control={<Switch checked={settings.hookPostToolUse} onCheckedChange={(v) => update('hookPostToolUse', v)} />} />\n <SettingsRow id=\"hooks-taskstart\" label=\"TaskStart\" description=\"Prime AI with project context.\" control={<Switch checked={settings.hookTaskStart} onCheckedChange={(v) => update('hookTaskStart', v)} />} />\n <SettingsRow id=\"hooks-taskresume\" label=\"TaskResume\" description=\"Re-read state + check git log.\" control={<Switch checked={settings.hookTaskResume} onCheckedChange={(v) => update('hookTaskResume', v)} />} />\n <SettingsRow id=\"hooks-prompt\" label=\"UserPromptSubmit\" description=\"Tag prompts for routing.\" control={<Switch checked={settings.hookUserPromptSubmit} onCheckedChange={(v) => update('hookUserPromptSubmit', v)} />} />\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\n placeholder=\"heartbeat, ping, system\"\n defaultValue={String((settings as unknown as Record<string, unknown>).activityHide ?? '')}\n onBlur={(e) => void patch('activityHide', e.target.value)}\n style={{ width: 280 }}\n />}\n />\n <SettingsRow\n id=\"activity-export\"\n label=\"Export\"\n description=\"Download the full activity log as NDJSON.\"\n control={<Button variant=\"secondary\" onClick={() => downloadFile('/api/admin/activity/export', 'activity.ndjson')}>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\" disabled={busy === 'reindex'} onClick={() => void runAdmin('memory/reindex', 'POST', '/api/admin/memory/reindex', 'Rebuild the memory vault search index?')}>{busy === 'reindex' ? 'Re-indexing…' : '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\" defaultValue={String((settings as unknown as Record<string, unknown>).defaultTaskAssignee ?? '')} onBlur={(e) => void patch('defaultTaskAssignee', e.target.value)} 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 defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentBackgroundDefault)} onCheckedChange={(v) => void patch('agentBackgroundDefault', v)} />} />\n <SettingsRow id=\"agent-worktree\" label=\"Always create a worktree\" control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentWorktree ?? true)} onCheckedChange={(v) => void 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\n rows={3}\n placeholder=\"You are a careful, methodical engineer…\"\n defaultValue={String((settings as unknown as Record<string, unknown>).agentSystemPrompt ?? '')}\n onBlur={(e) => void patch('agentSystemPrompt', e.target.value)}\n />}\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 defaultChecked={Boolean((settings as unknown as Record<string, unknown>).telemetryTokens)} onCheckedChange={(v) => void 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\" disabled={busy === 'restart'} onClick={() => void runAdmin('restart', 'POST', '/api/admin/restart', 'Restart the dashboard backend? You may need to relaunch the CLI if it does not come back.')}><RotateCw size={12} aria-hidden /> {busy === 'restart' ? 'Restarting…' : 'Restart…'}</Button>\n <Button variant=\"ghost\" disabled={busy === 'rebuild'} onClick={() => void runAdmin('rebuild', 'POST', '/api/admin/rebuild', 'Rebuild the dashboard package? This runs `npm run build`.')}><Plus size={12} aria-hidden /> {busy === 'rebuild' ? 'Rebuilding…' : 'Rebuild'}</Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"advanced-logs\"\n label=\"Open logs folder\"\n control={<Button variant=\"secondary\" disabled={busy === 'purge-logs'} onClick={() => void runAdmin('logs/purge', 'POST', '/api/admin/logs/purge', 'Delete log files older than 14 days?') }><Trash2 size={12} aria-hidden /> {busy === 'purge-logs' ? 'Purging…' : 'Purge logs'}</Button>}\n />\n </SettingsSection>\n\n {/* 19. Configuration — Reset + Plugin options (v10.0.4) */}\n <SettingsSection\n id=\"configuration\"\n title=\"Configuration\"\n description=\"Reset to defaults, and edit the plugin-options sidecar.\"\n icon={<SettingsIcon size={14} aria-hidden />}\n >\n <SettingsRow\n id=\"config-reset\"\n label=\"Reset settings to defaults\"\n description=\"Calls POST /api/settings/reset. Restores every key to its DEFAULT_SETTINGS value.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button\n variant=\"danger\"\n disabled={busy === 'settings-reset'}\n data-testid=\"settings-reset\"\n onClick={() => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function'\n && !window.confirm('Reset every settings key to its default?')) return;\n setBusy('settings-reset');\n setError(null);\n (async () => {\n try {\n const next = await fetchJson<{ data?: Partial<SettingsState> }>('/api/settings/reset', { method: 'POST' });\n if (next?.data) setSettings({ ...DEFAULTS, ...next.data });\n setLastAction(`reset @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n })();\n }}\n >\n <RotateCw size={12} aria-hidden /> {busy === 'settings-reset' ? 'Resetting…' : 'Reset to defaults'}\n </Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"config-plugin-options\"\n label=\"Plugin options\"\n description=\"JSON sidecar at ~/.config/bizar/plugin-options.json. Persisted via PUT /api/settings/plugin-options.\"\n control={\n <PluginOptionsEditor />\n }\n />\n </SettingsSection>\n </Stack>\n </Grid>\n </div>\n );\n}\n\n/**\n * PluginOptionsEditor — small JSON textarea bound to the\n * `~/.config/bizar/plugin-options.json` sidecar. Separate component\n * because the rest of SettingsView is one-shot-on-mount and we want\n * the editor to survive parent re-renders without clobbering the\n * in-flight edit buffer. v10.0.4 — adds UI wiring for the previously\n * unwired PUT /api/settings/plugin-options endpoint.\n */\nfunction PluginOptionsEditor(): JSX.Element {\n const [text, setText] = useState<string>('{}');\n const [busy, setBusy] = useState<boolean>(false);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const opts = await fetchJson<Record<string, unknown>>('/api/settings/plugin-options');\n if (!cancelled) setText(JSON.stringify(opts ?? {}, null, 2));\n } catch (err) {\n if (!cancelled) setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n const save = async (): Promise<void> => {\n let parsed: unknown;\n try { parsed = JSON.parse(text); } catch (err) {\n setError(`Invalid JSON: ${(err as Error).message}`);\n return;\n }\n setBusy(true);\n setError(null);\n try {\n await fetchJson('/api/settings/plugin-options', { method: 'PUT', body: parsed as Record<string, unknown> });\n setSavedAt(Date.now());\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Stack gap={2} style={{ width: '100%' }}>\n <textarea\n data-testid=\"plugin-options-form\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n rows={6}\n spellCheck={false}\n style={{\n width: '100%',\n fontFamily: 'var(--font-mono)',\n fontSize: 12,\n padding: '8px',\n background: 'var(--surface-1)',\n color: 'var(--text-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-1)',\n }}\n />\n <Inline align=\"center\" gap={2}>\n <Button variant=\"primary\" disabled={busy} onClick={() => void save()}>\n {busy ? 'Saving…' : 'Save plugin options'}\n </Button>\n {savedAt !== null && (\n <span style={{ fontSize: 11, color: 'var(--text-2)' }}>\n saved {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n )}\n {error && <span style={{ fontSize: 11, color: 'var(--danger)' }}>{error}</span>}\n </Inline>\n </Stack>\n );\n}"],"names":["Keyboard","createLucideIcon","Palette","SlidersVertical","SettingsNav","props","items","activeId","onSelect","className","jsxs","cx","jsx","item","isActive","COMMON_TIMEZONES","SECTIONS","SettingsIcon","Sliders","Sparkles","Terminal","Bell","Database","Plug","Cpu","LibraryIcon","Wrench","Activity","Brain","CheckSquare","Bot","ShieldCheck","DEFAULTS","SELECT_STYLE","NativeSelect","value","defaultValue","onChange","children","id_attr","e","Count","loading","Skeleton","SettingsView","setActiveId","useState","theme","useTheme","density","useDensity","settings","setSettings","savedAt","setSavedAt","error","setError","busy","setBusy","lastAction","setLastAction","runAdmin","label","method","path","confirmMsg","fetchJson","err","FetchError","downloadFile","filename","a","skillsRes","useFetch","mcpsRes","hooksRes","agentsRes","settingsRes","useEffect","prev","update","key","s","patch","merged","navItems","handleSelect","id","_a","rootRef","useRef","targets","el","visible","observer","entries","entry","bestId","bestRatio","ratio","t","Grid","Stack","Inline","SettingsSection","SettingsRow","Input","v","tz","Slider","Switch","Button","_b","_c","Badge","_e","_d","_f","m","_h","_g","_i","_k","_j","Textarea","RotateCw","Plus","Trash2","next","PluginOptionsEditor","text","setText","cancelled","opts","save","parsed"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{w as a,j as e,o as h,r as p,p as g,q as v,s as x,t as f,v as m}from"./cmdk-C3F6LD6N.js";import{X as b,g as u}from"./main-BRmJZcHt.js";const S=({children:t,...r})=>e.jsx(h,{...r,children:t}),D=a,j={top:{top:0,left:0,right:0,height:"60vh",borderBottom:"1px solid var(--border)",borderRadius:"0 0 var(--radius-lg) var(--radius-lg)"},right:{top:0,right:0,bottom:0,width:"min(560px, 100vw)",borderLeft:"1px solid var(--border)"},bottom:{bottom:0,left:0,right:0,height:"60vh",borderTop:"1px solid var(--border)",borderRadius:"var(--radius-lg) var(--radius-lg) 0 0"},left:{top:0,left:0,bottom:0,width:"min(560px, 100vw)",borderRight:"1px solid var(--border)"}},C=p.forwardRef(function(r,i){const{className:d,side:o="right",title:l,description:s,children:n,...c}=r;return e.jsxs(g,{children:[e.jsx(v,{style:{position:"fixed",inset:0,background:"oklch(0 0 0 / 0.4)",zIndex:"var(--z-modal)"}}),e.jsxs(x,{ref:i,"data-side":o,className:u("v8-sheet",d),style:{position:"fixed",background:"var(--surface-popover)",padding:"var(--space-6)",overflow:"auto",boxShadow:"var(--shadow-4)",zIndex:"calc(var(--z-modal) + 1)",...j[o]},...c,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{children:[e.jsx(f,{style:{fontSize:"var(--fs-18)",fontWeight:600},children:l}),s!==void 0&&e.jsx(m,{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",marginTop:"var(--space-1)"},children:s})]}),e.jsx(a,{"aria-label":"Close",style:{width:28,height:28,display:"inline-flex",alignItems:"center",justifyContent:"center",background:"transparent",border:0,borderRadius:"var(--radius-sm)",color:"var(--fg-muted)",cursor:"pointer"},children:e.jsx(b,{size:16,"aria-hidden":"true"})})]}),n]})]})});export{S,C as a,D as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sheet-BwMVGN-8.js","sources":["../../src/web/v8/ui/feedback/Sheet.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxDialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sheet — a side-anchored panel.\n *\n * Use for: task detail, agent detail, settings panels (mobile), kanban card\n * expanded. Use a Dialog when the content is best presented centered.\n */\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof RxDialog.Root>, 'children'> {\n children: ReactNode;\n}\n\nexport const Sheet = ({ children, ...rest }: SheetProps) => (\n <RxDialog.Root {...rest}>{children}</RxDialog.Root>\n);\n\nexport const SheetTrigger = RxDialog.Trigger;\nexport const SheetClose = RxDialog.Close;\n\nexport interface SheetContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {\n side?: SheetSide;\n title: string;\n description?: string;\n children: ReactNode;\n}\n\nconst SIDE_STYLE: Record<SheetSide, React.CSSProperties> = {\n top: { top: 0, left: 0, right: 0, height: '60vh', borderBottom: '1px solid var(--border)', borderRadius: '0 0 var(--radius-lg) var(--radius-lg)' },\n right: { top: 0, right: 0, bottom: 0, width: 'min(560px, 100vw)', borderLeft: '1px solid var(--border)' },\n bottom: { bottom: 0, left: 0, right: 0, height: '60vh', borderTop: '1px solid var(--border)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0' },\n left: { top: 0, left: 0, bottom: 0, width: 'min(560px, 100vw)', borderRight: '1px solid var(--border)' },\n};\n\nexport const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(function SheetContent(\n props,\n ref,\n) {\n const { className, side = 'right', title, description, children, ...rest } = props;\n return (\n <RxDialog.Portal>\n <RxDialog.Overlay\n style={{\n position: 'fixed',\n inset: 0,\n background: 'oklch(0 0 0 / 0.4)',\n zIndex: 'var(--z-modal)',\n }}\n />\n <RxDialog.Content\n ref={ref}\n data-side={side}\n className={cx('v8-sheet', className)}\n style={{\n position: 'fixed',\n background: 'var(--surface-popover)',\n padding: 'var(--space-6)',\n overflow: 'auto',\n boxShadow: 'var(--shadow-4)',\n zIndex: 'calc(var(--z-modal) + 1)',\n ...SIDE_STYLE[side],\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 'var(--space-4)' }}>\n <div>\n <RxDialog.Title style={{ fontSize: 'var(--fs-18)', fontWeight: 600 }}>{title}</RxDialog.Title>\n {description !== undefined && (\n <RxDialog.Description\n style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', marginTop: 'var(--space-1)' }}\n >\n {description}\n </RxDialog.Description>\n )}\n </div>\n <RxDialog.Close\n aria-label=\"Close\"\n style={{\n width: 28,\n height: 28,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n }}\n >\n <X size={16} aria-hidden=\"true\" />\n </RxDialog.Close>\n </div>\n {children}\n </RxDialog.Content>\n </RxDialog.Portal>\n );\n});"],"names":["Sheet","children","rest","jsx","RxDialog.Root","SheetClose","RxDialog.Close","SIDE_STYLE","SheetContent","forwardRef","props","ref","className","side","title","description","jsxs","RxDialog.Portal","RxDialog.Overlay","RxDialog.Content","cx","RxDialog.Title","RxDialog.Description","X"],"mappings":"6IAkBO,MAAMA,EAAQ,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,IACnCC,EAAAA,IAACC,EAAA,CAAe,GAAGF,EAAO,SAAAD,CAAA,CAAS,EAIxBI,EAAaC,EASpBC,EAAqD,CACzD,IAAK,CAAE,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,aAAc,0BAA2B,aAAc,uCAAA,EACzG,MAAO,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,MAAO,oBAAqB,WAAY,yBAAA,EAC9E,OAAQ,CAAE,OAAQ,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,UAAW,0BAA2B,aAAc,uCAAA,EAC5G,KAAM,CAAE,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,oBAAqB,YAAa,yBAAA,CAC/E,EAEaC,EAAeC,EAAAA,WAA8C,SACxEC,EACAC,EACA,CACA,KAAM,CAAE,UAAAC,EAAW,KAAAC,EAAO,QAAS,MAAAC,EAAO,YAAAC,EAAa,SAAAd,EAAU,GAAGC,CAAA,EAASQ,EAC7E,OACEM,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAd,EAAAA,IAACe,EAAA,CACC,MAAO,CACL,SAAU,QACV,MAAO,EACP,WAAY,qBACZ,OAAQ,gBAAA,CACV,CAAA,EAEFF,EAAAA,KAACG,EAAA,CACC,IAAAR,EACA,YAAWE,EACX,UAAWO,EAAG,WAAYR,CAAS,EACnC,MAAO,CACL,SAAU,QACV,WAAY,yBACZ,QAAS,iBACT,SAAU,OACV,UAAW,kBACX,OAAQ,2BACR,GAAGL,EAAWM,CAAI,CAAA,EAEnB,GAAGX,EAEJ,SAAA,CAAAc,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,gBAAA,EAClG,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAb,EAAAA,IAACkB,EAAA,CAAe,MAAO,CAAE,SAAU,eAAgB,WAAY,GAAA,EAAQ,SAAAP,CAAA,CAAM,EAC5EC,IAAgB,QACfZ,EAAAA,IAACmB,EAAA,CACC,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,UAAW,gBAAA,EAEvE,SAAAP,CAAA,CAAA,CACH,EAEJ,EACAZ,EAAAA,IAACG,EAAA,CACC,aAAW,QACX,MAAO,CACL,MAAO,GACP,OAAQ,GACR,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,WAAY,cACZ,OAAQ,EACR,aAAc,mBACd,MAAO,kBACP,OAAQ,SAAA,EAGV,SAAAH,EAAAA,IAACoB,EAAA,CAAE,KAAM,GAAI,cAAY,MAAA,CAAO,CAAA,CAAA,CAClC,EACF,EACCtB,CAAA,CAAA,CAAA,CACH,EACF,CAEJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as d,b as V,m as we,j as f,i as T,P as N,c as Re}from"./cmdk-C3F6LD6N.js";import{c as ye,u as Pe,a as q}from"./index-CR0TeJmc.js";import{u as Ee}from"./index-B1OIS316.js";import{m as _e,g as Ce}from"./main-BRmJZcHt.js";var J=["PageUp","PageDown"],Q=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Z={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},A="Slider",[z,De,Me]=ye(A),[U]=Re(A,[Me]),[Te,B]=U(A),ee=d.forwardRef((e,t)=>{const{name:n,min:r=0,max:s=100,step:o=1,orientation:c="horizontal",disabled:i=!1,minStepsBetweenThumbs:m=0,defaultValue:l=[r],value:p,onValueChange:a=()=>{},onValueCommit:u=()=>{},inverted:v=!1,form:b,...S}=e,x=d.useRef(new Set),g=d.useRef(0),y=d.useRef(!1),P=c==="horizontal"?Ve:Ae,[R,$]=d.useState(null),H=V(t,$),[_=[],F]=we({prop:p,defaultProp:l,onChange:h=>{var D;(D=[...x.current][g.current])==null||D.focus({preventScroll:!0,focusVisible:y.current}),y.current=!1,a(h)}}),G=d.useRef(_),ge=d.useRef(_);d.useEffect(()=>{const h=b?R==null?void 0:R.ownerDocument.getElementById(b):R==null?void 0:R.closest("form");if(h instanceof HTMLFormElement){const E=()=>F(ge.current);return h.addEventListener("reset",E),()=>h.removeEventListener("reset",E)}},[R,b,F]);function ve(h){const E=Be(_,h);j(h,E)}function xe(h){j(h,g.current)}function be(){const h=G.current[g.current];_[g.current]!==h&&u(_)}function j(h,E,{commit:D}={commit:!1}){const X=Se(o),L=k(Math.round((h-r)/o)*o+r,X),I=q(L,[r,s]);F((M=[])=>{const C=Ie(M,I,E);if(He(C,m*o)){g.current=C.indexOf(I);const W=String(C)!==String(M);return W&&D&&u(C),W?C:M}else return M})}return f.jsx(Te,{scope:e.__scopeSlider,name:n,disabled:i,min:r,max:s,valueIndexToChangeRef:g,thumbs:x.current,values:_,orientation:c,form:b,children:f.jsx(z.Provider,{scope:e.__scopeSlider,children:f.jsx(z.Slot,{scope:e.__scopeSlider,children:f.jsx(P,{"aria-disabled":i,"data-disabled":i?"":void 0,...S,ref:H,onPointerDown:T(S.onPointerDown,()=>{i||(G.current=_,y.current=!1)}),min:r,max:s,inverted:v,onSlideStart:i?void 0:ve,onSlideMove:i?void 0:xe,onSlideEnd:i?void 0:be,onHomeKeyDown:()=>{i||(y.current=!0,j(r,0,{commit:!0}))},onEndKeyDown:()=>{i||(y.current=!0,j(s,_.length-1,{commit:!0}))},onStepKeyDown:({event:h,direction:E})=>{if(!i){y.current=!0;const L=J.includes(h.key)||h.shiftKey&&Q.includes(h.key)?10:1,I=g.current,M=_[I],C=Fe(M,{min:r,step:o,direction:E,multiplier:L});j(C,I,{commit:!0})}}})})})})});ee.displayName=A;var[te,ne]=U(A,{startEdge:"left",endEdge:"right",size:"width",direction:1}),Ve=d.forwardRef((e,t)=>{const{min:n,max:r,dir:s,inverted:o,onSlideStart:c,onSlideMove:i,onSlideEnd:m,onStepKeyDown:l,...p}=e,[a,u]=d.useState(null),v=V(t,u),b=d.useRef(void 0),S=Pe(s),x=S==="ltr",g=x&&!o||!x&&o;function y(w){const P=b.current||a.getBoundingClientRect(),R=[0,P.width],H=Y(R,g?[n,r]:[r,n]);return b.current=P,H(w-P.left)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:g?"left":"right",endEdge:g?"right":"left",direction:g?1:-1,size:"width",children:f.jsx(re,{dir:S,"data-orientation":"horizontal",...p,ref:v,style:{...p.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:w=>{const P=y(w.clientX);c==null||c(P)},onSlideMove:w=>{const P=y(w.clientX);i==null||i(P)},onSlideEnd:()=>{b.current=void 0,m==null||m()},onStepKeyDown:w=>{const R=Z[g?"from-left":"from-right"].includes(w.key);l==null||l({event:w,direction:R?-1:1})}})})}),Ae=d.forwardRef((e,t)=>{const{min:n,max:r,inverted:s,onSlideStart:o,onSlideMove:c,onSlideEnd:i,onStepKeyDown:m,...l}=e,p=d.useRef(null),a=V(t,p),u=d.useRef(void 0),v=!s;function b(S){const x=u.current||p.current.getBoundingClientRect(),g=[0,x.height],w=Y(g,v?[r,n]:[n,r]);return u.current=x,w(S-x.top)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:v?"bottom":"top",endEdge:v?"top":"bottom",size:"height",direction:v?1:-1,children:f.jsx(re,{"data-orientation":"vertical",...l,ref:a,style:{...l.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:S=>{const x=b(S.clientY);o==null||o(x)},onSlideMove:S=>{const x=b(S.clientY);c==null||c(x)},onSlideEnd:()=>{u.current=void 0,i==null||i()},onStepKeyDown:S=>{const g=Z[v?"from-bottom":"from-top"].includes(S.key);m==null||m({event:S,direction:g?-1:1})}})})}),re=d.forwardRef((e,t)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:s,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:i,onStepKeyDown:m,...l}=e,p=B(A,n);return f.jsx(N.span,{...l,ref:t,onKeyDown:T(e.onKeyDown,a=>{a.key==="Home"?(c(a),a.preventDefault()):a.key==="End"?(i(a),a.preventDefault()):J.concat(Q).includes(a.key)&&(m(a),a.preventDefault())}),onPointerDown:T(e.onPointerDown,a=>{const u=a.target;u.setPointerCapture(a.pointerId),a.preventDefault(),p.thumbs.has(u)?u.focus({preventScroll:!0,focusVisible:!1}):r(a)}),onPointerMove:T(e.onPointerMove,a=>{a.target.hasPointerCapture(a.pointerId)&&s(a)}),onPointerUp:T(e.onPointerUp,a=>{const u=a.target;u.hasPointerCapture(a.pointerId)&&(u.releasePointerCapture(a.pointerId),o(a))})})}),oe="SliderTrack",se=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(oe,n);return f.jsx(N.span,{"data-disabled":s.disabled?"":void 0,"data-orientation":s.orientation,...r,ref:t})});se.displayName=oe;var O="SliderRange",ie=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(O,n),o=ne(O,n),c=d.useRef(null),i=V(t,c),m=s.values.length,l=s.values.map(u=>pe(u,s.min,s.max)),p=m>1?Math.min(...l):0,a=100-Math.max(...l);return f.jsx(N.span,{"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,...r,ref:i,style:{...e.style,[o.startEdge]:p+"%",[o.endEdge]:a+"%"}})});ie.displayName=O;var ae="SliderThumb",[je,ce]=U(ae),le="SliderThumbProvider";function ue(e){const{__scopeSlider:t,name:n,children:r,internal_do_not_use_render:s}=e,o=B(le,t),c=De(t),[i,m]=d.useState(null),l=d.useMemo(()=>i?c().findIndex(x=>x.ref.current===i):-1,[c,i]),p=_e(i),a=i?!!o.form||!!i.closest("form"):!0,u=o.values[l],v=n??(o.name?o.name+(o.values.length>1?"[]":""):void 0),b=u===void 0?0:pe(u,o.min,o.max);d.useEffect(()=>{if(i)return o.thumbs.add(i),()=>{o.thumbs.delete(i)}},[i,o.thumbs]);const S={value:u,name:v,form:o.form,isFormControl:a,index:l,thumb:i,onThumbChange:m,percent:b,size:p};return f.jsx(je,{scope:t,...S,children:Le(s)?s(S):r})}ue.displayName=le;var K="SliderThumbTrigger",de=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(K,n),o=ne(K,n),{index:c,value:i,percent:m,size:l,onThumbChange:p}=ce(K,n),a=V(t,p),u=Ne(c,s.values.length),v=l==null?void 0:l[o.size],b=v?Ke(v,m,o.direction):0;return f.jsx("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[o.startEdge]:`calc(${m}% + ${b}px)`},children:f.jsx(z.ItemSlot,{scope:n,children:f.jsx(N.span,{role:"slider","aria-label":e["aria-label"]||u,"aria-valuemin":s.min,"aria-valuenow":i,"aria-valuemax":s.max,"aria-orientation":s.orientation,"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,tabIndex:s.disabled?void 0:0,...r,ref:a,style:i===void 0?{display:"none"}:e.style,onFocus:T(e.onFocus,()=>{s.valueIndexToChangeRef.current=c})})})})});de.displayName=K;var fe=d.forwardRef((e,t)=>{const{__scopeSlider:n,name:r,...s}=e;return f.jsx(ue,{__scopeSlider:n,name:r,internal_do_not_use_render:({index:o,isFormControl:c})=>f.jsxs(f.Fragment,{children:[f.jsx(de,{...s,ref:t,__scopeSlider:n}),c?f.jsx(he,{__scopeSlider:n},o):null]})})});fe.displayName=ae;var me="SliderBubbleInput",he=d.forwardRef(({__scopeSlider:e,...t},n)=>{const{value:r,name:s,form:o}=ce(me,e),c=d.useRef(null),i=V(c,n),m=Ee(r);return d.useEffect(()=>{const l=c.current;if(!l)return;const p=window.HTMLInputElement.prototype,u=Object.getOwnPropertyDescriptor(p,"value").set;if(m!==r&&u){const v=new Event("input",{bubbles:!0});u.call(l,r),l.dispatchEvent(v)}},[m,r]),f.jsx(N.input,{style:{display:"none"},name:s,form:o,...t,ref:i,defaultValue:r})});he.displayName=me;function Ie(e=[],t,n){const r=[...e];return r[n]=t,r.sort((s,o)=>s-o)}function pe(e,t,n){const o=100/(n-t)*(e-t);return q(o,[0,100])}function Ne(e,t){return t>2?`Value ${e+1} of ${t}`:t===2?["Minimum","Maximum"][e]:void 0}function Be(e,t){if(e.length===1)return 0;const n=e.map(s=>Math.abs(s-t)),r=Math.min(...n);return n.indexOf(r)}function Ke(e,t,n){const r=e/2,o=Y([0,50],[0,r]);return(r-o(t)*n)*n}function ke(e){return e.slice(0,-1).map((t,n)=>e[n+1]-t)}function He(e,t){if(t>0){const n=ke(e);return Math.min(...n)>=t}return!0}function Y(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Se(e){if(!Number.isFinite(e))return 0;const t=e.toString();if(t.includes("e")){const[r,s]=t.split("e"),o=r.split(".")[1]||"",c=Number(s);return Math.max(0,o.length-c)}const n=t.split(".")[1];return n?n.length:0}function k(e,t){const n=Math.pow(10,t);return Math.round(e*n)/n}function Fe(e,{min:t,step:n,direction:r,multiplier:s}){const o=Se(n),c=(e-t)/n,i=Math.round(c),m=k(i*n+t,o)===k(e,o);let l;return m?l=i+s*r:r>0?l=Math.ceil(c):l=Math.floor(c),k(l*n+t,o)}function Le(e){return typeof e=="function"}const $e=d.forwardRef(function(t,n){const{className:r,...s}=t;return f.jsxs(ee,{ref:n,className:Ce("v8-slider",r),style:{position:"relative",display:"flex",alignItems:"center",userSelect:"none",touchAction:"none",width:"100%",height:20},...s,children:[f.jsx(se,{style:{background:"var(--surface-2)",position:"relative",flexGrow:1,borderRadius:"var(--radius-pill)",height:4},children:f.jsx(ie,{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)=>f.jsx(fe,{"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))]})});export{$e as S};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Slider-AjjzqI-5.js","sources":["../../../node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/web/v8/ui/controls/Slider.tsx"],"sourcesContent":["\"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});"],"names":["PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","createContextScope","SliderProvider","useSliderContext","Slider","React.forwardRef","props","forwardedRef","name","min","max","step","orientation","disabled","minStepsBetweenThumbs","defaultValue","value","onValueChange","onValueCommit","inverted","form","sliderProps","thumbRefs","React.useRef","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","control","setControl","React.useState","composedRefs","useComposedRefs","values","setValues","useControllableState","value2","_a","valuesBeforeSlideStartRef","initialValuesRef","React.useEffect","associatedForm","reset","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","clamp","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","jsx","composeEventHandlers","event","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","input","linearScale","SliderImpl","isBackKey","sliderRef","ref","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","context","Primitive","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","THUMB_NAME","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","children","internal_do_not_use_render","getItems","thumb","setThumb","index","React.useMemo","item","size","useSize","isFormControl","resolvedName","percent","thumbContext","isFunction","THUMB_TRIGGER_NAME","SliderThumbTrigger","thumbProps","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","jsxs","Fragment","SliderBubbleInput","BUBBLE_INPUT_NAME","usePrevious","inputProto","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","forwardRef","className","rest","RxSlider.Root","cx","RxSlider.Track","RxSlider.Range","_","i","RxSlider.Thumb"],"mappings":"oOAeA,IAAIA,EAAY,CAAC,SAAU,UAAU,EACjCC,EAAa,CAAC,UAAW,YAAa,YAAa,YAAY,EAC/DC,EAAY,CACd,YAAa,CAAC,OAAQ,WAAY,YAAa,WAAW,EAC1D,aAAc,CAAC,OAAQ,WAAY,YAAa,YAAY,EAC5D,cAAe,CAAC,OAAQ,WAAY,YAAa,WAAW,EAC5D,WAAY,CAAC,OAAQ,WAAY,UAAW,WAAW,CACzD,EACIC,EAAc,SACd,CAACC,EAAYC,GAAeC,EAAqB,EAAIC,GAAiBJ,CAAW,EACjF,CAACK,CAAsC,EAAIC,GAAmBN,EAAa,CAC7EG,EACF,CAAC,EACG,CAACI,GAAgBC,CAAgB,EAAIH,EAAoBL,CAAW,EACpES,GAASC,EAAAA,WACX,CAACC,EAAOC,IAAiB,CACvB,KAAM,CACJ,KAAAC,EACA,IAAAC,EAAM,EACN,IAAAC,EAAM,IACN,KAAAC,EAAO,EACP,YAAAC,EAAc,aACd,SAAAC,EAAW,GACX,sBAAAC,EAAwB,EACxB,aAAAC,EAAe,CAACN,CAAG,EACnB,MAAAO,EACA,cAAAC,EAAgB,IAAM,CACtB,EACA,cAAAC,EAAgB,IAAM,CACtB,EACA,SAAAC,EAAW,GACX,KAAAC,EACA,GAAGC,CACT,EAAQf,EACEgB,EAAYC,EAAAA,OAA6B,IAAI,GAAK,EAClDC,EAAwBD,EAAAA,OAAa,CAAC,EACtCE,EAA2BF,EAAAA,OAAa,EAAK,EAE7CG,EADed,IAAgB,aACIe,GAAmBC,GACtD,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAe,IAAI,EAC3CC,EAAeC,EAAgB1B,EAAcuB,CAAU,EACvD,CAACI,EAAS,CAAA,EAAIC,CAAS,EAAIC,GAAqB,CACpD,KAAMpB,EACN,YAAaD,EACb,SAAWsB,GAAW,QAEpBC,EADe,CAAC,GAAGhB,EAAU,OAAO,EAC7BE,EAAsB,OAAO,IAApC,MAAAc,EAAuC,MAAM,CAC3C,cAAe,GACf,aAAcb,EAAyB,OACjD,GACQA,EAAyB,QAAU,GACnCR,EAAcoB,CAAM,CACtB,CACN,CAAK,EACKE,EAA4BhB,EAAAA,OAAaW,CAAM,EAC/CM,GAAmBjB,EAAAA,OAAaW,CAAM,EAC5CO,EAAAA,UAAgB,IAAM,CACpB,MAAMC,EAAiBtB,EAAOS,GAAA,YAAAA,EAAS,cAAc,eAAeT,GAAQS,GAAA,YAAAA,EAAS,QAAQ,QAC7F,GAAIa,aAA0B,gBAAiB,CAC7C,MAAMC,EAAQ,IAAMR,EAAUK,GAAiB,OAAO,EACtD,OAAAE,EAAe,iBAAiB,QAASC,CAAK,EACvC,IAAMD,EAAe,oBAAoB,QAASC,CAAK,CAChE,CACF,EAAG,CAACd,EAAST,EAAMe,CAAS,CAAC,EAC7B,SAASS,GAAiBP,EAAQ,CAChC,MAAMQ,EAAeC,GAAqBZ,EAAQG,CAAM,EACxDU,EAAaV,EAAQQ,CAAY,CACnC,CACA,SAASG,GAAgBX,EAAQ,CAC/BU,EAAaV,EAAQb,EAAsB,OAAO,CACpD,CACA,SAASyB,IAAiB,CACxB,MAAMC,EAAYX,EAA0B,QAAQf,EAAsB,OAAO,EAC/DU,EAAOV,EAAsB,OAAO,IACrB0B,GACjBhC,EAAcgB,CAAM,CACtC,CACA,SAASa,EAAaV,EAAQc,EAAS,CAAE,OAAAC,CAAM,EAAK,CAAE,OAAQ,IAAS,CACrE,MAAMC,EAAeC,GAAgB3C,CAAI,EACnC4C,EAAaC,EAAW,KAAK,OAAOnB,EAAS5B,GAAOE,CAAI,EAAIA,EAAOF,EAAK4C,CAAY,EACpFI,EAAYC,EAAMH,EAAY,CAAC9C,EAAKC,CAAG,CAAC,EAC9CyB,EAAU,CAACwB,EAAa,KAAO,CAC7B,MAAMC,EAAaC,GAAoBF,EAAYF,EAAWN,CAAO,EACrE,GAAIW,GAAyBF,EAAY9C,EAAwBH,CAAI,EAAG,CACtEa,EAAsB,QAAUoC,EAAW,QAAQH,CAAS,EAC5D,MAAMM,EAAa,OAAOH,CAAU,IAAM,OAAOD,CAAU,EAC3D,OAAII,GAAcX,GAAQlC,EAAc0C,CAAU,EAC3CG,EAAaH,EAAaD,CACnC,KACE,QAAOA,CAEX,CAAC,CACH,CACA,OAAuBK,EAAAA,IACrB9D,GACA,CACE,MAAOI,EAAM,cACb,KAAAE,EACA,SAAAK,EACA,IAAAJ,EACA,IAAAC,EACA,sBAAAc,EACA,OAAQF,EAAU,QAClB,OAAAY,EACA,YAAAtB,EACA,KAAAQ,EACA,SAA0B4C,EAAAA,IAAIpE,EAAW,SAAU,CAAE,MAAOU,EAAM,cAAe,SAA0B0D,EAAAA,IAAIpE,EAAW,KAAM,CAAE,MAAOU,EAAM,cAAe,SAA0B0D,EAAAA,IACtLtC,EACA,CACE,gBAAiBb,EACjB,gBAAiBA,EAAW,GAAK,OACjC,GAAGQ,EACH,IAAKW,EACL,cAAeiC,EAAqB5C,EAAY,cAAe,IAAM,CAC9DR,IACH0B,EAA0B,QAAUL,EACpCT,EAAyB,QAAU,GAEvC,CAAC,EACD,IAAAhB,EACA,IAAAC,EACA,SAAAS,EACA,aAAcN,EAAW,OAAS+B,GAClC,YAAa/B,EAAW,OAASmC,GACjC,WAAYnC,EAAW,OAASoC,GAChC,cAAe,IAAM,CACdpC,IACHY,EAAyB,QAAU,GACnCsB,EAAatC,EAAK,EAAG,CAAE,OAAQ,EAAI,CAAE,EAEzC,EACA,aAAc,IAAM,CACbI,IACHY,EAAyB,QAAU,GACnCsB,EAAarC,EAAKwB,EAAO,OAAS,EAAG,CAAE,OAAQ,GAAM,EAEzD,EACA,cAAe,CAAC,CAAE,MAAAgC,EAAO,UAAWC,CAAa,IAAO,CACtD,GAAI,CAACtD,EAAU,CACbY,EAAyB,QAAU,GAGnC,MAAM2C,EAFY5E,EAAU,SAAS0E,EAAM,GAAG,GACfA,EAAM,UAAYzE,EAAW,SAASyE,EAAM,GAAG,EAC/C,GAAK,EAC9Bf,EAAU3B,EAAsB,QAChCa,EAASH,EAAOiB,CAAO,EACvBM,EAAYY,GAAiBhC,EAAQ,CACzC,IAAA5B,EACA,KAAAE,EACA,UAAWwD,EACX,WAAAC,CAClB,CAAiB,EACDrB,EAAaU,EAAWN,EAAS,CAAE,OAAQ,EAAI,CAAE,CACnD,CACF,CACZ,CACA,CAAS,CAAE,CAAC,CAAE,CACd,CACA,CACE,CACF,EACA/C,GAAO,YAAcT,EACrB,GAAI,CAAC2E,GAA2BC,EAA2B,EAAIvE,EAAoBL,EAAa,CAC9F,UAAW,OACX,QAAS,QACT,KAAM,QACN,UAAW,CACb,CAAC,EACGgC,GAAmBtB,EAAAA,WACrB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CACJ,IAAAE,EACA,IAAAC,EACA,IAAA8D,EACA,SAAArD,EACA,aAAAsD,EACA,YAAAC,EACA,WAAAC,EACA,cAAAC,EACA,GAAGvD,CACT,EAAQf,EACE,CAACuE,EAAQC,CAAS,EAAI/C,EAAAA,SAAe,IAAI,EACzCC,EAAeC,EAAgB1B,EAAcuE,CAAS,EACtDC,EAAUxD,EAAAA,OAAa,MAAM,EAC7ByD,EAAYC,GAAaT,CAAG,EAC5BU,EAAiBF,IAAc,MAC/BG,EAAoBD,GAAkB,CAAC/D,GAAY,CAAC+D,GAAkB/D,EAC5E,SAASiE,EAAoBC,EAAiB,CAC5C,MAAMC,EAAOP,EAAQ,SAAWF,EAAO,sBAAqB,EACtDU,EAAQ,CAAC,EAAGD,EAAK,KAAK,EAEtBtE,EAAQwE,EAAYD,EADXJ,EAAoB,CAAC1E,EAAKC,CAAG,EAAI,CAACA,EAAKD,CAAG,CAClB,EACvC,OAAAsE,EAAQ,QAAUO,EACXtE,EAAMqE,EAAkBC,EAAK,IAAI,CAC1C,CACA,OAAuBtB,EAAAA,IACrBM,GACA,CACE,MAAOhE,EAAM,cACb,UAAW6E,EAAoB,OAAS,QACxC,QAASA,EAAoB,QAAU,OACvC,UAAWA,EAAoB,EAAI,GACnC,KAAM,QACN,SAA0BnB,EAAAA,IACxByB,GACA,CACE,IAAKT,EACL,mBAAoB,aACpB,GAAG3D,EACH,IAAKW,EACL,MAAO,CACL,GAAGX,EAAY,MACf,iCAAkC,kBAChD,EACY,aAAe6C,GAAU,CACvB,MAAMlD,EAAQoE,EAAoBlB,EAAM,OAAO,EAC/CO,GAAA,MAAAA,EAAezD,EACjB,EACA,YAAckD,GAAU,CACtB,MAAMlD,EAAQoE,EAAoBlB,EAAM,OAAO,EAC/CQ,GAAA,MAAAA,EAAc1D,EAChB,EACA,WAAY,IAAM,CAChB+D,EAAQ,QAAU,OAClBJ,GAAA,MAAAA,GACF,EACA,cAAgBT,GAAU,CAExB,MAAMwB,EAAYhG,EADKyF,EAAoB,YAAc,YACf,EAAE,SAASjB,EAAM,GAAG,EAC9DU,GAAA,MAAAA,EAAgB,CAAE,MAAAV,EAAO,UAAWwB,EAAY,GAAK,GACvD,CACZ,CACA,CACA,CACA,CACE,CACF,EACI9D,GAAiBvB,EAAAA,WACnB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CACJ,IAAAE,EACA,IAAAC,EACA,SAAAS,EACA,aAAAsD,EACA,YAAAC,EACA,WAAAC,EACA,cAAAC,EACA,GAAGvD,CACT,EAAQf,EACEqF,EAAYpE,EAAAA,OAAa,IAAI,EAC7BqE,EAAM3D,EAAgB1B,EAAcoF,CAAS,EAC7CZ,EAAUxD,EAAAA,OAAa,MAAM,EAC7BsE,EAAsB,CAAC1E,EAC7B,SAASiE,EAAoBC,EAAiB,CAC5C,MAAMC,EAAOP,EAAQ,SAAWY,EAAU,QAAQ,sBAAqB,EACjEJ,EAAQ,CAAC,EAAGD,EAAK,MAAM,EAEvBtE,EAAQwE,EAAYD,EADXM,EAAsB,CAACnF,EAAKD,CAAG,EAAI,CAACA,EAAKC,CAAG,CACpB,EACvC,OAAAqE,EAAQ,QAAUO,EACXtE,EAAMqE,EAAkBC,EAAK,GAAG,CACzC,CACA,OAAuBtB,EAAAA,IACrBM,GACA,CACE,MAAOhE,EAAM,cACb,UAAWuF,EAAsB,SAAW,MAC5C,QAASA,EAAsB,MAAQ,SACvC,KAAM,SACN,UAAWA,EAAsB,EAAI,GACrC,SAA0B7B,EAAAA,IACxByB,GACA,CACE,mBAAoB,WACpB,GAAGpE,EACH,IAAAuE,EACA,MAAO,CACL,GAAGvE,EAAY,MACf,iCAAkC,iBAChD,EACY,aAAe6C,GAAU,CACvB,MAAMlD,EAAQoE,EAAoBlB,EAAM,OAAO,EAC/CO,GAAA,MAAAA,EAAezD,EACjB,EACA,YAAckD,GAAU,CACtB,MAAMlD,EAAQoE,EAAoBlB,EAAM,OAAO,EAC/CQ,GAAA,MAAAA,EAAc1D,EAChB,EACA,WAAY,IAAM,CAChB+D,EAAQ,QAAU,OAClBJ,GAAA,MAAAA,GACF,EACA,cAAgBT,GAAU,CAExB,MAAMwB,EAAYhG,EADKmG,EAAsB,cAAgB,UACnB,EAAE,SAAS3B,EAAM,GAAG,EAC9DU,GAAA,MAAAA,EAAgB,CAAE,MAAAV,EAAO,UAAWwB,EAAY,GAAK,GACvD,CACZ,CACA,CACA,CACA,CACE,CACF,EACID,GAAapF,EAAAA,WACf,CAACC,EAAOC,IAAiB,CACvB,KAAM,CACJ,cAAAuF,EACA,aAAArB,EACA,YAAAC,EACA,WAAAC,EACA,cAAAoB,EACA,aAAAC,EACA,cAAApB,EACA,GAAGvD,CACT,EAAQf,EACE2F,EAAU9F,EAAiBR,EAAamG,CAAa,EAC3D,OAAuB9B,EAAAA,IACrBkC,EAAU,KACV,CACE,GAAG7E,EACH,IAAKd,EACL,UAAW0D,EAAqB3D,EAAM,UAAY4D,GAAU,CACtDA,EAAM,MAAQ,QAChB6B,EAAc7B,CAAK,EACnBA,EAAM,eAAc,GACXA,EAAM,MAAQ,OACvB8B,EAAa9B,CAAK,EAClBA,EAAM,eAAc,GACX1E,EAAU,OAAOC,CAAU,EAAE,SAASyE,EAAM,GAAG,IACxDU,EAAcV,CAAK,EACnBA,EAAM,eAAc,EAExB,CAAC,EACD,cAAeD,EAAqB3D,EAAM,cAAgB4D,GAAU,CAClE,MAAMiC,EAASjC,EAAM,OACrBiC,EAAO,kBAAkBjC,EAAM,SAAS,EACxCA,EAAM,eAAc,EAChB+B,EAAQ,OAAO,IAAIE,CAAM,EAC3BA,EAAO,MAAM,CAAE,cAAe,GAAM,aAAc,GAAO,EAEzD1B,EAAaP,CAAK,CAEtB,CAAC,EACD,cAAeD,EAAqB3D,EAAM,cAAgB4D,GAAU,CACnDA,EAAM,OACV,kBAAkBA,EAAM,SAAS,GAAGQ,EAAYR,CAAK,CAClE,CAAC,EACD,YAAaD,EAAqB3D,EAAM,YAAc4D,GAAU,CAC9D,MAAMiC,EAASjC,EAAM,OACjBiC,EAAO,kBAAkBjC,EAAM,SAAS,IAC1CiC,EAAO,sBAAsBjC,EAAM,SAAS,EAC5CS,EAAWT,CAAK,EAEpB,CAAC,CACT,CACA,CACE,CACF,EACIkC,GAAa,cACbC,GAAchG,EAAAA,WAChB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAuF,EAAe,GAAGQ,CAAU,EAAKhG,EACnC2F,EAAU9F,EAAiBiG,GAAYN,CAAa,EAC1D,OAAuB9B,EAAAA,IACrBkC,EAAU,KACV,CACE,gBAAiBD,EAAQ,SAAW,GAAK,OACzC,mBAAoBA,EAAQ,YAC5B,GAAGK,EACH,IAAK/F,CACb,CACA,CACE,CACF,EACA8F,GAAY,YAAcD,GAC1B,IAAIG,EAAa,cACbC,GAAcnG,EAAAA,WAChB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAuF,EAAe,GAAGW,CAAU,EAAKnG,EACnC2F,EAAU9F,EAAiBoG,EAAYT,CAAa,EACpDlF,EAAc2D,GAA4BgC,EAAYT,CAAa,EACnEF,EAAMrE,EAAAA,OAAa,IAAI,EACvBS,EAAeC,EAAgB1B,EAAcqF,CAAG,EAChDc,EAAcT,EAAQ,OAAO,OAC7BU,EAAcV,EAAQ,OAAO,IAChCjF,GAAU4F,GAAyB5F,EAAOiF,EAAQ,IAAKA,EAAQ,GAAG,CACzE,EACUY,EAAcH,EAAc,EAAI,KAAK,IAAI,GAAGC,CAAW,EAAI,EAC3DG,EAAY,IAAM,KAAK,IAAI,GAAGH,CAAW,EAC/C,OAAuB3C,EAAAA,IACrBkC,EAAU,KACV,CACE,mBAAoBD,EAAQ,YAC5B,gBAAiBA,EAAQ,SAAW,GAAK,OACzC,GAAGQ,EACH,IAAKzE,EACL,MAAO,CACL,GAAG1B,EAAM,MACT,CAACM,EAAY,SAAS,EAAGiG,EAAc,IACvC,CAACjG,EAAY,OAAO,EAAGkG,EAAY,GAC7C,CACA,CACA,CACE,CACF,EACAN,GAAY,YAAcD,EAC1B,IAAIQ,GAAa,cACb,CAACC,GAA4BC,EAAqB,EAAIjH,EAAoB+G,EAAU,EACpFG,GAAsB,sBAC1B,SAASC,GAAoB7G,EAAO,CAClC,KAAM,CACJ,cAAAwF,EACA,KAAAtF,EACA,SAAA4G,EAEA,2BAAAC,CACJ,EAAM/G,EACE2F,EAAU9F,EAAiB+G,GAAqBpB,CAAa,EAC7DwB,EAAWzH,GAAciG,CAAa,EACtC,CAACyB,EAAOC,CAAQ,EAAIzF,EAAAA,SAAe,IAAI,EACvC0F,EAAQC,EAAAA,QACZ,IAAMH,EAAQD,IAAW,UAAWK,GAASA,EAAK,IAAI,UAAYJ,CAAK,EAAI,GAC3E,CAACD,EAAUC,CAAK,CACpB,EACQK,EAAOC,GAAQN,CAAK,EACpBO,EAAgBP,EAAQ,CAAC,CAACtB,EAAQ,MAAQ,CAAC,CAACsB,EAAM,QAAQ,MAAM,EAAI,GACpEvG,EAAQiF,EAAQ,OAAOwB,CAAK,EAC5BM,EAAevH,IAASyF,EAAQ,KAAOA,EAAQ,MAAQA,EAAQ,OAAO,OAAS,EAAI,KAAO,IAAM,QAChG+B,EAAUhH,IAAU,OAAS,EAAI4F,GAAyB5F,EAAOiF,EAAQ,IAAKA,EAAQ,GAAG,EAC/FxD,EAAAA,UAAgB,IAAM,CACpB,GAAI8E,EACF,OAAAtB,EAAQ,OAAO,IAAIsB,CAAK,EACjB,IAAM,CACXtB,EAAQ,OAAO,OAAOsB,CAAK,CAC7B,CAEJ,EAAG,CAACA,EAAOtB,EAAQ,MAAM,CAAC,EAC1B,MAAMgC,EAAe,CACnB,MAAAjH,EACA,KAAM+G,EACN,KAAM9B,EAAQ,KACd,cAAA6B,EACA,MAAAL,EACA,MAAAF,EACA,cAAeC,EACf,QAAAQ,EACA,KAAAJ,CACJ,EACE,OAAuB5D,EAAAA,IAAIgD,GAA4B,CAAE,MAAOlB,EAAe,GAAGmC,EAAc,SAAUC,GAAWb,CAA0B,EAAIA,EAA2BY,CAAY,EAAIb,CAAQ,CAAE,CAC1M,CACAD,GAAoB,YAAcD,GAClC,IAAIiB,EAAqB,qBACrBC,GAAqB/H,EAAAA,WACvB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAuF,EAAe,GAAGuC,CAAU,EAAK/H,EACnC2F,EAAU9F,EAAiBgI,EAAoBrC,CAAa,EAC5DlF,EAAc2D,GAA4B4D,EAAoBrC,CAAa,EAC3E,CAAE,MAAA2B,EAAO,MAAAzG,EAAO,QAAAgH,EAAS,KAAAJ,EAAM,cAAAU,CAAa,EAAKrB,GACrDkB,EACArC,CACN,EACU9D,EAAeC,EAAgB1B,EAAc+H,CAAa,EAC1DC,EAAQC,GAASf,EAAOxB,EAAQ,OAAO,MAAM,EAC7CwC,EAAkBb,GAAA,YAAAA,EAAOhH,EAAY,MACrC8H,EAAsBD,EAAkBE,GAAuBF,EAAiBT,EAASpH,EAAY,SAAS,EAAI,EACxH,OAAuBoD,EAAAA,IACrB,OACA,CACE,MAAO,CACL,UAAW,sCACX,SAAU,WACV,CAACpD,EAAY,SAAS,EAAG,QAAQoH,CAAO,OAAOU,CAAmB,KAC5E,EACQ,SAA0B1E,EAAAA,IAAIpE,EAAW,SAAU,CAAE,MAAOkG,EAAe,SAA0B9B,EAAAA,IACnGkC,EAAU,KACV,CACE,KAAM,SACN,aAAc5F,EAAM,YAAY,GAAKiI,EACrC,gBAAiBtC,EAAQ,IACzB,gBAAiBjF,EACjB,gBAAiBiF,EAAQ,IACzB,mBAAoBA,EAAQ,YAC5B,mBAAoBA,EAAQ,YAC5B,gBAAiBA,EAAQ,SAAW,GAAK,OACzC,SAAUA,EAAQ,SAAW,OAAS,EACtC,GAAGoC,EACH,IAAKrG,EACL,MAAOhB,IAAU,OAAS,CAAE,QAAS,MAAM,EAAKV,EAAM,MACtD,QAAS2D,EAAqB3D,EAAM,QAAS,IAAM,CACjD2F,EAAQ,sBAAsB,QAAUwB,CAC1C,CAAC,CACb,CACA,CAAS,CAAE,CACX,CACA,CACE,CACF,EACAW,GAAmB,YAAcD,EACjC,IAAIS,GAAcvI,EAAAA,WAChB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAuF,EAAe,KAAAtF,EAAM,GAAG6H,CAAU,EAAK/H,EAC/C,OAAuB0D,EAAAA,IACrBmD,GACA,CACE,cAAArB,EACA,KAAAtF,EACA,2BAA4B,CAAC,CAAE,MAAAiH,EAAO,cAAAK,CAAa,IAAuBe,OAAKC,EAAAA,SAAU,CAAE,SAAU,CACnF9E,EAAAA,IACdoE,GACA,CACE,GAAGC,EACH,IAAK9H,EACL,cAAAuF,CACd,CACA,EACUgC,EAAgC9D,EAAAA,IAC9B+E,GACA,CACE,cAAAjD,CACd,EACY2B,CACZ,EAAc,IACd,CAAS,CAAE,CACX,CACA,CACE,CACF,EACAmB,GAAY,YAAc7B,GAC1B,IAAIiC,GAAoB,oBACpBD,GAAoB1I,EAAAA,WACtB,CAAC,CAAE,cAAAyF,EAAe,GAAGxF,CAAK,EAAIC,IAAiB,CAC7C,KAAM,CAAE,MAAAS,EAAO,KAAAR,EAAM,KAAAY,CAAI,EAAK6F,GAAsB+B,GAAmBlD,CAAa,EAC9EF,EAAMrE,EAAAA,OAAa,IAAI,EACvBS,EAAeC,EAAgB2D,EAAKrF,CAAY,EAChD2C,EAAY+F,GAAYjI,CAAK,EACnCyB,OAAAA,EAAAA,UAAgB,IAAM,CACpB,MAAM8C,EAAQK,EAAI,QAClB,GAAI,CAACL,EAAO,OACZ,MAAM2D,EAAa,OAAO,iBAAiB,UAErCC,EADa,OAAO,yBAAyBD,EAAY,OAAO,EAC1C,IAC5B,GAAIhG,IAAclC,GAASmI,EAAU,CACnC,MAAMjF,EAAQ,IAAI,MAAM,QAAS,CAAE,QAAS,GAAM,EAClDiF,EAAS,KAAK5D,EAAOvE,CAAK,EAC1BuE,EAAM,cAAcrB,CAAK,CAC3B,CACF,EAAG,CAAChB,EAAWlC,CAAK,CAAC,EACEgD,EAAAA,IACrBkC,EAAU,MACV,CACE,MAAO,CAAE,QAAS,MAAM,EACxB,KAAA1F,EACA,KAAAY,EACA,GAAGd,EACH,IAAK0B,EACL,aAAchB,CACtB,CACA,CACE,CACF,EACA+H,GAAkB,YAAcC,GAChC,SAASnF,GAAoBF,EAAa,GAAIF,EAAWN,EAAS,CAChE,MAAMS,EAAa,CAAC,GAAGD,CAAU,EACjC,OAAAC,EAAWT,CAAO,EAAIM,EACfG,EAAW,KAAK,CAACwF,EAAGC,IAAMD,EAAIC,CAAC,CACxC,CACA,SAASzC,GAAyB5F,EAAOP,EAAKC,EAAK,CAGjD,MAAM4I,EADiB,KADN5I,EAAMD,IAEcO,EAAQP,GAC7C,OAAOiD,EAAM4F,EAAY,CAAC,EAAG,GAAG,CAAC,CACnC,CACA,SAASd,GAASf,EAAO8B,EAAa,CACpC,OAAIA,EAAc,EACT,SAAS9B,EAAQ,CAAC,OAAO8B,CAAW,GAClCA,IAAgB,EAClB,CAAC,UAAW,SAAS,EAAE9B,CAAK,EAEnC,MAEJ,CACA,SAAS3E,GAAqBZ,EAAQuB,EAAW,CAC/C,GAAIvB,EAAO,SAAW,EAAG,MAAO,GAChC,MAAMsH,EAAYtH,EAAO,IAAKlB,GAAU,KAAK,IAAIA,EAAQyC,CAAS,CAAC,EAC7DgG,EAAkB,KAAK,IAAI,GAAGD,CAAS,EAC7C,OAAOA,EAAU,QAAQC,CAAe,CAC1C,CACA,SAASd,GAAuBe,EAAOC,EAAM3E,EAAW,CACtD,MAAM4E,EAAYF,EAAQ,EAEpBG,EAASrE,EAAY,CAAC,EADR,EACsB,EAAG,CAAC,EAAGoE,CAAS,CAAC,EAC3D,OAAQA,EAAYC,EAAOF,CAAI,EAAI3E,GAAaA,CAClD,CACA,SAAS8E,GAAsB5H,EAAQ,CACrC,OAAOA,EAAO,MAAM,EAAG,EAAE,EAAE,IAAI,CAAClB,EAAOyG,IAAUvF,EAAOuF,EAAQ,CAAC,EAAIzG,CAAK,CAC5E,CACA,SAAS8C,GAAyB5B,EAAQ6H,EAAuB,CAC/D,GAAIA,EAAwB,EAAG,CAC7B,MAAMC,EAAqBF,GAAsB5H,CAAM,EAEvD,OADoC,KAAK,IAAI,GAAG8H,CAAkB,GAC5BD,CACxC,CACA,MAAO,EACT,CACA,SAASvE,EAAYD,EAAO0E,EAAQ,CAClC,OAAQjJ,GAAU,CAChB,GAAIuE,EAAM,CAAC,IAAMA,EAAM,CAAC,GAAK0E,EAAO,CAAC,IAAMA,EAAO,CAAC,EAAG,OAAOA,EAAO,CAAC,EACrE,MAAMC,GAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAAM1E,EAAM,CAAC,EAAIA,EAAM,CAAC,GAC3D,OAAO0E,EAAO,CAAC,EAAIC,GAASlJ,EAAQuE,EAAM,CAAC,EAC7C,CACF,CACA,SAASjC,GAAgBtC,EAAO,CAC9B,GAAI,CAAC,OAAO,SAASA,CAAK,EAAG,MAAO,GACpC,MAAMmJ,EAAMnJ,EAAM,SAAQ,EAC1B,GAAImJ,EAAI,SAAS,GAAG,EAAG,CACrB,KAAM,CAACC,EAAaC,CAAQ,EAAIF,EAAI,MAAM,GAAG,EACvCG,EAAeF,EAAY,MAAM,GAAG,EAAE,CAAC,GAAK,GAC5CG,EAAc,OAAOF,CAAQ,EACnC,OAAO,KAAK,IAAI,EAAGC,EAAa,OAASC,CAAW,CACtD,CACA,MAAMC,EAAcL,EAAI,MAAM,GAAG,EAAE,CAAC,EACpC,OAAOK,EAAcA,EAAY,OAAS,CAC5C,CACA,SAAShH,EAAWxC,EAAOqC,EAAc,CACvC,MAAMoH,EAAU,KAAK,IAAI,GAAIpH,CAAY,EACzC,OAAO,KAAK,MAAMrC,EAAQyJ,CAAO,EAAIA,CACvC,CACA,SAASpG,GAAiBrD,EAAO,CAC/B,IAAAP,EACA,KAAAE,EACA,UAAAqE,EACA,WAAAZ,CACF,EAAG,CACD,MAAMf,EAAeC,GAAgB3C,CAAI,EACnC+J,GAAgB1J,EAAQP,GAAOE,EAC/BgK,EAAe,KAAK,MAAMD,CAAY,EACtCE,EAAYpH,EAAWmH,EAAehK,EAAOF,EAAK4C,CAAY,IAAMG,EAAWxC,EAAOqC,CAAY,EACxG,IAAIwH,EACJ,OAAID,EACFC,EAAYF,EAAevG,EAAaY,EAC/BA,EAAY,EACrB6F,EAAY,KAAK,KAAKH,CAAY,EAElCG,EAAY,KAAK,MAAMH,CAAY,EAE9BlH,EAAWqH,EAAYlK,EAAOF,EAAK4C,CAAY,CACxD,CACA,SAAS6E,GAAWlH,EAAO,CACzB,OAAO,OAAOA,GAAU,UAC1B,CC3oBO,MAAMZ,GAAS0K,EAAAA,WAAyC,SAAgBxK,EAAOsF,EAAK,CACzF,KAAM,CAAE,UAAAmF,EAAW,GAAGC,CAAA,EAAS1K,EAC/B,OACEuI,EAAAA,KAACoC,GAAA,CACC,IAAArF,EACA,UAAWsF,GAAG,YAAaH,CAAS,EACpC,MAAO,CACL,SAAU,WACV,QAAS,OACT,WAAY,SACZ,WAAY,OACZ,YAAa,OACb,MAAO,OACP,OAAQ,EAAA,EAET,GAAGC,EAEJ,SAAA,CAAAhH,EAAAA,IAACmH,GAAA,CACC,MAAO,CACL,WAAY,mBACZ,SAAU,WACV,SAAU,EACV,aAAc,qBACd,OAAQ,CAAA,EAGV,SAAAnH,EAAAA,IAACoH,GAAA,CACC,MAAO,CACL,SAAU,WACV,WAAY,gBACZ,aAAc,qBACd,OAAQ,MAAA,CACV,CAAA,CACF,CAAA,GAEA,MAAM,QAAQ9K,EAAM,OAASA,EAAM,YAAY,EAC5CA,EAAM,OAASA,EAAM,cAAgB,CAAA,EACtC,CAACA,EAAM,OAASA,EAAM,cAAgB,CAAC,GACzC,IAAI,CAAC+K,EAAGC,IACRtH,EAAAA,IAACuH,GAAA,CAEC,aAAYjL,EAAM,YAAY,GAAK,SAASgL,EAAI,CAAC,GACjD,MAAO,CACL,QAAS,QACT,MAAO,GACP,OAAQ,GACR,WAAY,YACZ,OAAQ,0BACR,aAAc,qBACd,OAAQ,OACR,UAAW,iBAAA,CACb,EAXKA,CAAA,CAaR,CAAA,CAAA,CAAA,CAGP,CAAC","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as S,j as a}from"./cmdk-C3F6LD6N.js";import{g as j}from"./main-BRmJZcHt.js";const W=S.forwardRef(function(v,d){var f,g;const{data:s,width:o=120,height:e=32,stroke:h="var(--accent)",fill:y,area:p=!0,goal:x,className:m,style:k,...$}=v;if(s.length<2)return a.jsx("svg",{ref:d,width:o,height:e,viewBox:`0 0 ${o} ${e}`,className:j("v8-sparkline",m),style:k,"aria-hidden":"true",...$});const n=Math.min(...s),l=Math.max(...s)-n||1,t=2,F=(o-t*2)/(s.length-1),r=s.map((i,c)=>{const M=t+F*c,N=t+(e-t*2)*(1-(i-n)/l);return{x:M,y:N}}),u=r.map((i,c)=>`${c===0?"M":"L"}${i.x.toFixed(1)},${i.y.toFixed(1)}`).join(" "),L=p?`${u} L${((f=r[r.length-1])==null?void 0:f.x.toFixed(1))??"0"},${(e-t).toFixed(1)} L${((g=r[0])==null?void 0:g.x.toFixed(1))??"0"},${(e-t).toFixed(1)} Z`:"",w=y??`color-mix(in oklch, ${h} 14%, transparent)`;return a.jsxs("svg",{ref:d,width:o,height:e,viewBox:`0 0 ${o} ${e}`,className:j("v8-sparkline",m),style:k,"aria-hidden":"true",...$,children:[p===!0&&a.jsx("path",{d:L,fill:w,stroke:"none"}),a.jsx("path",{d:u,fill:"none",stroke:h,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}),x!==void 0&&a.jsx("line",{x1:t,x2:o-t,y1:t+(e-t*2)*(1-(x-n)/l),y2:t+(e-t*2)*(1-(x-n)/l),stroke:"var(--fg-subtle)",strokeWidth:1,strokeDasharray:"2 2"})]})});export{W as S};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline-Z4y0YUZS.js","sources":["../../src/web/v8/ui/data/Sparkline.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sparkline — tiny inline line chart.\n *\n * Pure SVG so it composes inside StatTile, Table cells, Card headers\n * without bringing in a chart library dependency.\n */\nexport interface SparklineProps extends Omit<HTMLAttributes<SVGSVGElement>, 'children'> {\n data: readonly number[];\n width?: number;\n height?: number;\n /** Stroke color (defaults to --accent). */\n stroke?: string;\n /** Optional fill color (defaults to a 14% mix of stroke). */\n fill?: string;\n /** Show the area under the line. */\n area?: boolean;\n /** Goal/expected value rendered as a dashed horizontal line. */\n goal?: number;\n}\n\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(props, ref) {\n const {\n data,\n width = 120,\n height = 32,\n stroke = 'var(--accent)',\n fill,\n area = true,\n goal,\n className,\n style,\n ...rest\n } = props;\n\n if (data.length < 2) {\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('v8-sparkline', className)}\n style={style}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const pad = 2;\n const stepX = (width - pad * 2) / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = pad + stepX * i;\n const y = pad + (height - pad * 2) * (1 - (v - min) / range);\n return { x, y };\n });\n\n const linePath = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(' ');\n const areaPath = area\n ? `${linePath} L${points[points.length - 1]?.x.toFixed(1) ?? '0'},${(height - pad).toFixed(1)} L${points[0]?.x.toFixed(1) ?? '0'},${(height - pad).toFixed(1)} Z`\n : '';\n\n const fillColor = fill ?? `color-mix(in oklch, ${stroke} 14%, transparent)`;\n\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('v8-sparkline', className)}\n style={style}\n aria-hidden=\"true\"\n {...rest}\n >\n {area === true && <path d={areaPath} fill={fillColor} stroke=\"none\" />}\n <path d={linePath} fill=\"none\" stroke={stroke} strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n {goal !== undefined && (\n <line\n x1={pad}\n x2={width - pad}\n y1={pad + (height - pad * 2) * (1 - (goal - min) / range)}\n y2={pad + (height - pad * 2) * (1 - (goal - min) / range)}\n stroke=\"var(--fg-subtle)\"\n strokeWidth={1}\n strokeDasharray=\"2 2\"\n />\n )}\n </svg>\n );\n});"],"names":["Sparkline","forwardRef","props","ref","data","width","height","stroke","fill","area","goal","className","style","rest","jsx","cx","min","range","pad","stepX","points","v","i","x","y","linePath","p","areaPath","_a","_b","fillColor","jsxs"],"mappings":"qFAuBO,MAAMA,EAAYC,EAAAA,WAA0C,SAAmBC,EAAOC,EAAK,SAChG,KAAM,CACJ,KAAAC,EACA,MAAAC,EAAQ,IACR,OAAAC,EAAS,GACT,OAAAC,EAAS,gBACT,KAAAC,EACA,KAAAC,EAAO,GACP,KAAAC,EACA,UAAAC,EACA,MAAAC,EACA,GAAGC,CAAA,EACDX,EAEJ,GAAIE,EAAK,OAAS,EAChB,OACEU,EAAAA,IAAC,MAAA,CACC,IAAAX,EACA,MAAAE,EACA,OAAAC,EACA,QAAS,OAAOD,CAAK,IAAIC,CAAM,GAC/B,UAAWS,EAAG,eAAgBJ,CAAS,EACvC,MAAAC,EACA,cAAY,OACX,GAAGC,CAAA,CAAA,EAKV,MAAMG,EAAM,KAAK,IAAI,GAAGZ,CAAI,EAEtBa,EADM,KAAK,IAAI,GAAGb,CAAI,EACRY,GAAO,EACrBE,EAAM,EACNC,GAASd,EAAQa,EAAM,IAAMd,EAAK,OAAS,GAE3CgB,EAAShB,EAAK,IAAI,CAACiB,EAAGC,IAAM,CAChC,MAAMC,EAAIL,EAAMC,EAAQG,EAClBE,EAAIN,GAAOZ,EAASY,EAAM,IAAM,GAAKG,EAAIL,GAAOC,GACtD,MAAO,CAAE,EAAAM,EAAG,EAAAC,CAAA,CACd,CAAC,EAEKC,EAAWL,EAAO,IAAI,CAACM,EAAGJ,IAAM,GAAGA,IAAM,EAAI,IAAM,GAAG,GAAGI,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAIA,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,EACrGC,EAAWlB,EACb,GAAGgB,CAAQ,OAAKG,EAAAR,EAAOA,EAAO,OAAS,CAAC,IAAxB,YAAAQ,EAA2B,EAAE,QAAQ,KAAM,GAAG,KAAKtB,EAASY,GAAK,QAAQ,CAAC,CAAC,OAAKW,EAAAT,EAAO,CAAC,IAAR,YAAAS,EAAW,EAAE,QAAQ,KAAM,GAAG,KAAKvB,EAASY,GAAK,QAAQ,CAAC,CAAC,KAC3J,GAEEY,EAAYtB,GAAQ,uBAAuBD,CAAM,qBAEvD,OACEwB,EAAAA,KAAC,MAAA,CACC,IAAA5B,EACA,MAAAE,EACA,OAAAC,EACA,QAAS,OAAOD,CAAK,IAAIC,CAAM,GAC/B,UAAWS,EAAG,eAAgBJ,CAAS,EACvC,MAAAC,EACA,cAAY,OACX,GAAGC,EAEH,SAAA,CAAAJ,IAAS,UAAS,OAAA,CAAK,EAAGkB,EAAU,KAAMG,EAAW,OAAO,MAAA,CAAO,EACpEhB,EAAAA,IAAC,OAAA,CAAK,EAAGW,EAAU,KAAK,OAAO,OAAAlB,EAAgB,YAAa,IAAK,cAAc,QAAQ,eAAe,OAAA,CAAQ,EAC7GG,IAAS,QACRI,EAAAA,IAAC,OAAA,CACC,GAAII,EACJ,GAAIb,EAAQa,EACZ,GAAIA,GAAOZ,EAASY,EAAM,IAAM,GAAKR,EAAOM,GAAOC,GACnD,GAAIC,GAAOZ,EAASY,EAAM,IAAM,GAAKR,EAAOM,GAAOC,GACnD,OAAO,mBACP,YAAa,EACb,gBAAgB,KAAA,CAAA,CAClB,CAAA,CAAA,CAIR,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{r as n,j as a,P as R,m as L,b as y,i as A,c as U}from"./cmdk-C3F6LD6N.js";import{u as X}from"./index-B1OIS316.js";import{m as z,g as D}from"./main-BRmJZcHt.js";var C="Switch",[G]=U(C),[O,E]=G(C);function W(t){const{__scopeSwitch:s,checked:r,children:c,defaultChecked:e,disabled:o,form:h,name:f,onCheckedChange:l,required:m,value:b="on",internal_do_not_use_render:i}=t,[p,w]=L({prop:r,defaultProp:e??!1,onChange:l,caller:C}),[v,k]=n.useState(null),[S,d]=n.useState(null),u=n.useRef(!1),g=v?!!h||!!v.closest("form"):!0,x={checked:p,setChecked:w,disabled:o,control:v,setControl:k,name:f,form:h,value:b,hasConsumerStoppedPropagationRef:u,required:m,defaultChecked:e,isFormControl:g,bubbleInput:S,setBubbleInput:d};return a.jsx(O,{scope:s,...x,children:$(i)?i(x):c})}var P="SwitchTrigger",j=n.forwardRef(({__scopeSwitch:t,onClick:s,...r},c)=>{const{control:e,form:o,value:h,disabled:f,checked:l,required:m,setControl:b,setChecked:i,hasConsumerStoppedPropagationRef:p,isFormControl:w,bubbleInput:v}=E(P,t),k=y(c,b),S=n.useRef(l);return n.useEffect(()=>{const d=o?e==null?void 0:e.ownerDocument.getElementById(o):e==null?void 0:e.form;if(d instanceof HTMLFormElement){const u=()=>i(S.current);return d.addEventListener("reset",u),()=>d.removeEventListener("reset",u)}},[e,o,i]),a.jsx(R.button,{type:"button",role:"switch","aria-checked":l,"aria-required":m,"data-state":F(l),"data-disabled":f?"":void 0,disabled:f,value:h,...r,ref:k,onClick:A(s,d=>{i(u=>!u),v&&w&&(p.current=d.isPropagationStopped(),p.current||d.stopPropagation())})})});j.displayName=P;var I=n.forwardRef((t,s)=>{const{__scopeSwitch:r,name:c,checked:e,defaultChecked:o,required:h,disabled:f,value:l,onCheckedChange:m,form:b,...i}=t;return a.jsx(W,{__scopeSwitch:r,checked:e,defaultChecked:o,disabled:f,required:h,onCheckedChange:m,name:c,form:b,value:l,internal_do_not_use_render:({isFormControl:p})=>a.jsxs(a.Fragment,{children:[a.jsx(j,{...i,ref:s,__scopeSwitch:r}),p&&a.jsx(M,{__scopeSwitch:r})]})})});I.displayName=C;var N="SwitchThumb",T=n.forwardRef((t,s)=>{const{__scopeSwitch:r,...c}=t,e=E(N,r);return a.jsx(R.span,{"data-state":F(e.checked),"data-disabled":e.disabled?"":void 0,...c,ref:s})});T.displayName=N;var B="SwitchBubbleInput",M=n.forwardRef(({__scopeSwitch:t,...s},r)=>{const{control:c,hasConsumerStoppedPropagationRef:e,checked:o,defaultChecked:h,required:f,disabled:l,name:m,value:b,form:i,bubbleInput:p,setBubbleInput:w}=E(B,t),v=y(r,w),k=X(o),S=z(c);n.useEffect(()=>{const u=p;if(!u)return;const g=window.HTMLInputElement.prototype,_=Object.getOwnPropertyDescriptor(g,"checked").set,q=!e.current;if(k!==o&&_){const H=new Event("click",{bubbles:q});_.call(u,o),u.dispatchEvent(H)}},[p,k,o,e]);const d=n.useRef(o);return a.jsx(R.input,{type:"checkbox","aria-hidden":!0,defaultChecked:h??d.current,required:f,disabled:l,name:m,value:b,form:i,...s,tabIndex:-1,ref:v,style:{...s.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});M.displayName=B;function $(t){return typeof t=="function"}function F(t){return t?"checked":"unchecked"}const V=n.forwardRef(function(s,r){const{className:c,...e}=s;return a.jsxs(I,{ref:r,className:D("v8-switch",c),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)"},...e,children:[a.jsx(T,{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"}}),a.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
|
-
`})]})});export{V as S};
|