@polderlabs/bizar 10.7.2 → 10.10.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 +48 -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 +21 -13
- package/.claude/hooks/worktree-bootstrap.mjs +64 -0
- package/.claude/model-router.json +57 -0
- package/.claude/settings.json +92 -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProvidersView-BOqN9omv.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/key-round.js","../../../node_modules/lucide-react/dist/esm/icons/star.js","../../src/web/v8/views/Providers/ProvidersView.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 KeyRound = createLucideIcon(\"KeyRound\", [\n [\n \"path\",\n {\n d: \"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\",\n key: \"1s6t7t\"\n }\n ],\n [\"circle\", { cx: \"16.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"w0ekpg\" }]\n]);\n\nexport { KeyRound as default };\n//# sourceMappingURL=key-round.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 Star = createLucideIcon(\"Star\", [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n]);\n\nexport { Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * v8/views/Providers/ProvidersView.tsx — Sprint S42, v9.3.0.\n *\n * Provider list pulled from /api/providers (aggregated). Per-row:\n * - active-key card (GET /api/providers/:id/active-key) with masked\n * key preview + label + status\n * - rotate button (POST /api/providers/:id/rotate) with inline confirm\n *\n * Header actions:\n * - Active default card (GET /api/providers/active)\n * - Auto-detect (GET /api/providers/auto-detect)\n *\n * Inline confirm row pattern; no window.confirm.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { KeyRound, Pencil, Plus, Power, PowerOff, RotateCw, Sparkles, Star, Trash2, RefreshCcw, Cpu } from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { ListHeader } from '../../ui/data/ListHeader.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { EmptyState } from '../../ui/feedback/EmptyState.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\ninterface Provider {\n id: string;\n name?: string;\n source?: string;\n baseURL?: string;\n models?: string[];\n keys?: ProviderKey[];\n active?: boolean;\n enabled?: boolean;\n}\n\ninterface ProviderKey {\n envVar?: string;\n label?: string;\n status?: string;\n}\n\ninterface ActiveKey {\n envVar: string;\n label?: string;\n status?: string;\n keyPreview: string;\n keySet: boolean;\n}\n\ninterface ActiveDefault {\n providerId: string | null;\n modelId: string | null;\n source?: string | null;\n}\n\nexport function ProvidersView(): JSX.Element {\n const payload = useFetch<{ providers: Provider[]; count: number }>('/api/providers');\n const activePayload = useFetch<ActiveDefault>('/api/providers/active');\n const [confirmRotate, setConfirmRotate] = useState<string | null>(null);\n const [activeKeys, setActiveKeys] = useState<Record<string, ActiveKey | null>>({});\n const [error, setError] = useState<string | null>(null);\n const [autoDetect, setAutoDetect] = useState<{ providers: Provider[] } | null>(null);\n const [probing, setProbing] = useState<boolean>(false);\n\n const providers = useMemo<Provider[]>(() => payload.data?.providers ?? [], [payload.data]);\n const refresh = useCallback(() => { void payload.refetch(); void activePayload.refetch(); }, [payload, activePayload]);\n\n // Fetch the active key for each provider (lazy, in parallel).\n useEffect(() => {\n if (!providers.length) return;\n let cancelled = false;\n (async () => {\n const results = await Promise.all(\n providers.map(async (p) => {\n try {\n const r = await fetchJson<{ ok: boolean; active: ActiveKey } | { ok: false; error: string }>(`/api/providers/${p.id}/active-key`);\n return [p.id, ('active' in r ? r.active : null)] as const;\n } catch {\n return [p.id, null] as const;\n }\n }),\n );\n if (!cancelled) {\n const map: Record<string, ActiveKey | null> = {};\n for (const [id, ak] of results) map[id] = ak;\n setActiveKeys(map);\n }\n })();\n return () => { cancelled = true; };\n }, [providers]);\n\n const rotate = async (id: string): Promise<void> => {\n setError(null);\n try {\n await fetchJson(`/api/providers/${id}/rotate`, { method: 'POST' });\n setConfirmRotate(null);\n refresh();\n // Re-fetch the new active key for this row.\n try {\n const r = await fetchJson<{ ok: boolean; active: ActiveKey }>(`/api/providers/${id}/active-key`);\n setActiveKeys((m) => ({ ...m, [id]: r.active }));\n } catch { /* ignore */ }\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const addKey = async (id: string): Promise<void> => {\n const envVar = window.prompt(`Env var name to add to ${id} (e.g. ${id.toUpperCase()}_KEY_2)`);\n if (!envVar?.trim()) return;\n const label = window.prompt('Label (optional)') || undefined;\n setError(null);\n try {\n await fetchJson(`/api/providers/${id}/keys`, { method: 'POST', body: { envVar, label } });\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const runAutoDetect = async (): Promise<void> => {\n setProbing(true);\n setError(null);\n try {\n const r = await fetchJson<{ providers: Provider[] }>('/api/providers/auto-detect');\n setAutoDetect({ providers: r.providers });\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setProbing(false);\n }\n };\n\n const createProvider = async (): Promise<void> => {\n const id = window.prompt('Provider id (lowercase, e.g. openai)');\n if (!id?.trim()) return;\n const name = window.prompt('Display name') || id;\n const baseURL = window.prompt('Base URL (optional)') || '';\n const apiKey = window.prompt('API key or env:VAR marker') || '';\n setError(null);\n try {\n await fetchJson('/api/providers', { method: 'POST', body: { id, name, baseURL, apiKey } });\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const editProvider = async (p: Provider): Promise<void> => {\n const name = window.prompt(`Rename ${p.id}`, p.name || p.id);\n if (!name?.trim()) return;\n const baseURL = window.prompt('Base URL', p.baseURL || '');\n setError(null);\n try {\n await fetchJson(`/api/providers/${encodeURIComponent(p.id)}`, {\n method: 'PUT',\n body: { name, baseURL: baseURL ?? '' },\n });\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const deleteProvider = async (id: string): Promise<void> => {\n setError(null);\n try {\n await fetchJson(`/api/providers/${encodeURIComponent(id)}`, { method: 'DELETE' });\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const toggleEnabled = async (id: string, currentlyEnabled: boolean): Promise<void> => {\n setError(null);\n try {\n await fetchJson(`/api/providers/${encodeURIComponent(id)}/${currentlyEnabled ? 'disable' : 'enable'}`, { method: 'POST' });\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n return (\n <Stack gap={4} data-testid=\"providers-view\">\n <ViewHeader\n title=\"Providers\"\n description=\"Configured LLM providers + active key rotation.\"\n actions={\n <Inline align=\"center\" gap={2}>\n {error !== null && (\n <span role=\"alert\" data-testid=\"providers-error\" style={{ color: 'var(--danger)', fontSize: 'var(--fs-12)' }}>\n {error}\n </span>\n )}\n <Button variant=\"ghost\" onClick={() => void refresh()} data-testid=\"providers-refresh\">\n <RefreshCcw size={14} aria-hidden /> Refresh\n </Button>\n <Button variant=\"primary\" onClick={() => void runAutoDetect()} disabled={probing} data-testid=\"providers-auto-detect\">\n <Sparkles size={14} aria-hidden /> {probing ? 'Probing…' : 'Auto-detect'}\n </Button>\n <Button variant=\"primary\" onClick={() => void createProvider()} data-testid=\"providers-create\">\n <Plus size={14} aria-hidden /> New provider\n </Button>\n </Inline>\n }\n />\n <ListHeader\n title=\"Configured\"\n count={providers.length}\n description={activePayload.data?.providerId ? `active: ${activePayload.data.providerId}` : undefined}\n testid=\"providers-list-header\"\n />\n\n {activePayload.data && (activePayload.data.providerId !== null || activePayload.data.modelId !== null) && (\n <Card variant=\"default\">\n <CardBody>\n <Inline align=\"center\" justify=\"between\" gap={2}>\n <Inline align=\"center\" gap={2}>\n <Star size={14} aria-hidden style={{ color: 'var(--accent)' }} />\n <strong>Active default:</strong>\n <code data-testid=\"providers-active-provider\">{activePayload.data.providerId ?? '—'}</code>\n <span style={{ color: 'var(--fg-muted)' }}>·</span>\n <code data-testid=\"providers-active-model\">{activePayload.data.modelId ?? '—'}</code>\n {activePayload.data.source && (\n <span style={{ color: 'var(--fg-subtle)', fontSize: 'var(--fs-12)' }}>({activePayload.data.source})</span>\n )}\n </Inline>\n </Inline>\n </CardBody>\n </Card>\n )}\n\n {autoDetect !== null && (\n <Card variant=\"default\">\n <CardBody>\n <Stack gap={1}>\n <strong style={{ fontSize: 'var(--fs-13)' }}>Auto-detect result</strong>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {autoDetect.providers.length} candidate{autoDetect.providers.length === 1 ? '' : 's'} from env + config.\n </span>\n </Stack>\n </CardBody>\n </Card>\n )}\n\n <Card variant=\"default\">\n <CardBody>\n {payload.loading && providers.length === 0 ? (\n <Stack gap={1}>\n <Skeleton style={{ height: 56 }} />\n <Skeleton style={{ height: 56 }} />\n </Stack>\n ) : providers.length === 0 ? (\n <EmptyState icon={<Cpu size={28} aria-hidden />} title=\"No providers\" description=\"Run Auto-detect or add via Config → Providers.\" />\n ) : (\n <Stack gap={1}>\n {providers.map((p) => {\n const isConfirming = confirmRotate === p.id;\n const ak = activeKeys[p.id];\n return (\n <div\n key={p.id}\n data-testid={`provider-row-${p.id}`}\n style={{\n padding: 'var(--space-3)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n background: 'var(--surface-0)',\n }}\n >\n <Inline align=\"center\" justify=\"between\" gap={2}>\n <Stack gap={0}>\n <Inline align=\"center\" gap={2}>\n <strong>{p.name || p.id}</strong>\n <code style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-subtle)' }}>{p.id}</code>\n {p.source && <span style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-muted)' }}>· {p.source}</span>}\n {p.active && (\n <span data-testid={`provider-active-${p.id}`} style={{ fontSize: 'var(--fs-11)', color: 'var(--success)', fontWeight: 600 }}>ACTIVE</span>\n )}\n </Inline>\n {p.baseURL && <code style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-subtle)' }}>{p.baseURL}</code>}\n </Stack>\n <Inline gap={1}>\n <Button\n variant=\"ghost\"\n onClick={() => setConfirmRotate((cur) => (cur === p.id ? null : p.id))}\n data-testid={`provider-rotate-${p.id}`}\n aria-label={`Rotate ${p.id}`}\n disabled={!p.keys || p.keys.length < 2}\n title={!p.keys || p.keys.length < 2 ? 'Need ≥2 keys to rotate' : 'Rotate active key'}\n >\n <RotateCw size={14} aria-hidden /> Rotate\n </Button>\n <Button\n variant=\"primary\"\n onClick={() => void addKey(p.id)}\n data-testid={`provider-add-key-${p.id}`}\n aria-label={`Add key to ${p.id}`}\n >\n <KeyRound size={14} aria-hidden /> Add key\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => void editProvider(p)}\n data-testid={`provider-edit-${p.id}`}\n aria-label={`Edit ${p.id}`}\n >\n <Pencil size={14} aria-hidden />\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => void toggleEnabled(p.id, p.enabled ?? true)}\n data-testid={`provider-toggle-${p.id}`}\n aria-label={(p.enabled ?? true) ? `Disable ${p.id}` : `Enable ${p.id}`}\n >\n {(p.enabled ?? true) ? <PowerOff size={14} aria-hidden /> : <Power size={14} aria-hidden />}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => void deleteProvider(p.id)}\n data-testid={`provider-delete-${p.id}`}\n aria-label={`Delete ${p.id}`}\n >\n <Trash2 size={14} aria-hidden />\n </Button>\n </Inline>\n </Inline>\n\n {/* Active-key sub-row */}\n <div data-testid={`provider-active-key-${p.id}`} style={{ marginTop: 'var(--space-2)', padding: 'var(--space-2)', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <Inline align=\"center\" gap={2}>\n <KeyRound size={12} aria-hidden style={{ color: 'var(--fg-muted)' }} />\n {ak === undefined ? (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-subtle)' }}>Probing active key…</span>\n ) : ak === null ? (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-subtle)' }}>No active key</span>\n ) : (\n <Inline align=\"center\" gap={2} data-testid={`provider-active-key-detail-${p.id}`}>\n <code style={{ fontSize: 'var(--fs-12)' }}>{ak.envVar}</code>\n {ak.label && <span style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-muted)' }}>· {ak.label}</span>}\n {ak.status && <span style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-muted)' }}>· {ak.status}</span>}\n <code style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-subtle)' }}>{ak.keyPreview}</code>\n </Inline>\n )}\n </Inline>\n </div>\n\n {isConfirming && (\n <Inline gap={1} style={{ marginTop: 'var(--space-1)' }}>\n <Button variant=\"primary\" onClick={() => void rotate(p.id)} data-testid={`provider-confirm-rotate-${p.id}`}>\n Confirm rotate\n </Button>\n <Button variant=\"ghost\" onClick={() => setConfirmRotate(null)}>Cancel</Button>\n </Inline>\n )}\n </div>\n );\n })}\n </Stack>\n )}\n </CardBody>\n </Card>\n </Stack>\n );\n}"],"names":["KeyRound","createLucideIcon","Star","ProvidersView","payload","useFetch","activePayload","confirmRotate","setConfirmRotate","useState","activeKeys","setActiveKeys","error","setError","autoDetect","setAutoDetect","probing","setProbing","providers","useMemo","_a","refresh","useCallback","useEffect","cancelled","results","p","r","fetchJson","map","id","ak","rotate","m","err","FetchError","addKey","envVar","label","runAutoDetect","createProvider","name","baseURL","apiKey","editProvider","deleteProvider","toggleEnabled","currentlyEnabled","jsxs","Stack","jsx","ViewHeader","Inline","Button","RefreshCcw","Sparkles","Plus","ListHeader","Card","CardBody","Skeleton","EmptyState","Cpu","isConfirming","cur","RotateCw","Pencil","PowerOff","Power","Trash2"],"mappings":"inBAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAWC,EAAiB,WAAY,CAC5C,CACE,OACA,CACE,EAAG,6KACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,OAAQ,GAAI,MAAO,EAAG,KAAM,KAAM,eAAgB,IAAK,QAAQ,CAAE,CACpF,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMC,EAAOD,EAAiB,OAAQ,CACpC,CACE,OACA,CACE,EAAG,+WACH,IAAK,QACX,CACA,CACA,CAAC,EC0CM,SAASE,IAA6B,OAC3C,MAAMC,EAAUC,EAAmD,gBAAgB,EAC7EC,EAAgBD,EAAwB,uBAAuB,EAC/D,CAACE,EAAeC,CAAgB,EAAIC,EAAAA,SAAwB,IAAI,EAChE,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAA2C,CAAA,CAAE,EAC3E,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAwB,IAAI,EAChD,CAACK,EAAYC,CAAa,EAAIN,EAAAA,SAA2C,IAAI,EAC7E,CAACO,EAASC,CAAU,EAAIR,EAAAA,SAAkB,EAAK,EAE/CS,EAAYC,UAAoB,IAAA,OAAM,QAAAC,EAAAhB,EAAQ,OAAR,YAAAgB,EAAc,YAAa,IAAI,CAAChB,EAAQ,IAAI,CAAC,EACnFiB,EAAUC,EAAAA,YAAY,IAAM,CAAOlB,EAAQ,QAAA,EAAgBE,EAAc,QAAA,CAAW,EAAG,CAACF,EAASE,CAAa,CAAC,EAGrHiB,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,EAAU,OAAQ,OACvB,IAAIM,EAAY,GAChB,OAAC,SAAY,CACX,MAAMC,EAAU,MAAM,QAAQ,IAC5BP,EAAU,IAAI,MAAOQ,GAAM,CACzB,GAAI,CACF,MAAMC,EAAI,MAAMC,EAA6E,kBAAkBF,EAAE,EAAE,aAAa,EAChI,MAAO,CAACA,EAAE,GAAK,WAAYC,EAAIA,EAAE,OAAS,IAAK,CACjD,MAAQ,CACN,MAAO,CAACD,EAAE,GAAI,IAAI,CACpB,CACF,CAAC,CAAA,EAEH,GAAI,CAACF,EAAW,CACd,MAAMK,EAAwC,CAAA,EAC9C,SAAW,CAACC,EAAIC,CAAE,IAAKN,EAASI,EAAIC,CAAE,EAAIC,EAC1CpB,EAAckB,CAAG,CACnB,CACF,GAAA,EACO,IAAM,CAAEL,EAAY,EAAM,CACnC,EAAG,CAACN,CAAS,CAAC,EAEd,MAAMc,EAAS,MAAOF,GAA8B,CAClDjB,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,kBAAkBE,CAAE,UAAW,CAAE,OAAQ,OAAQ,EACjEtB,EAAiB,IAAI,EACrBa,EAAA,EAEA,GAAI,CACF,MAAMM,EAAI,MAAMC,EAA8C,kBAAkBE,CAAE,aAAa,EAC/FnB,EAAesB,IAAO,CAAE,GAAGA,EAAG,CAACH,CAAE,EAAGH,EAAE,MAAA,EAAS,CACjD,MAAQ,CAAe,CACzB,OAASO,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEME,EAAS,MAAON,GAA8B,CAClD,MAAMO,EAAS,OAAO,OAAO,0BAA0BP,CAAE,UAAUA,EAAG,YAAA,CAAa,SAAS,EAC5F,GAAI,EAACO,GAAA,MAAAA,EAAQ,QAAQ,OACrB,MAAMC,EAAQ,OAAO,OAAO,kBAAkB,GAAK,OACnDzB,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,kBAAkBE,CAAE,QAAS,CAAE,OAAQ,OAAQ,KAAM,CAAE,OAAAO,EAAQ,MAAAC,CAAA,CAAM,CAAG,EACxFjB,EAAA,CACF,OAASa,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEMK,EAAgB,SAA2B,CAC/CtB,EAAW,EAAI,EACfJ,EAAS,IAAI,EACb,GAAI,CACF,MAAMc,EAAI,MAAMC,EAAqC,4BAA4B,EACjFb,EAAc,CAAE,UAAWY,EAAE,SAAA,CAAW,CAC1C,OAASO,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,QAAA,CACEjB,EAAW,EAAK,CAClB,CACF,EAEMuB,EAAiB,SAA2B,CAChD,MAAMV,EAAK,OAAO,OAAO,sCAAsC,EAC/D,GAAI,EAACA,GAAA,MAAAA,EAAI,QAAQ,OACjB,MAAMW,EAAO,OAAO,OAAO,cAAc,GAAKX,EACxCY,EAAU,OAAO,OAAO,qBAAqB,GAAK,GAClDC,EAAS,OAAO,OAAO,2BAA2B,GAAK,GAC7D9B,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,iBAAkB,CAAE,OAAQ,OAAQ,KAAM,CAAE,GAAAE,EAAI,KAAAW,EAAM,QAAAC,EAAS,OAAAC,CAAA,CAAO,CAAG,EACzFtB,EAAA,CACF,OAASa,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEMU,EAAe,MAAOlB,GAA+B,CACzD,MAAMe,EAAO,OAAO,OAAO,UAAUf,EAAE,EAAE,GAAIA,EAAE,MAAQA,EAAE,EAAE,EAC3D,GAAI,EAACe,GAAA,MAAAA,EAAM,QAAQ,OACnB,MAAMC,EAAU,OAAO,OAAO,WAAYhB,EAAE,SAAW,EAAE,EACzDb,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,kBAAkB,mBAAmBF,EAAE,EAAE,CAAC,GAAI,CAC5D,OAAQ,MACR,KAAM,CAAE,KAAAe,EAAM,QAASC,GAAW,EAAA,CAAG,CACtC,EACDrB,EAAA,CACF,OAASa,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEMW,EAAiB,MAAOf,GAA8B,CAC1DjB,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,kBAAkB,mBAAmBE,CAAE,CAAC,GAAI,CAAE,OAAQ,SAAU,EAChFT,EAAA,CACF,OAASa,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEMY,EAAgB,MAAOhB,EAAYiB,IAA6C,CACpFlC,EAAS,IAAI,EACb,GAAI,CACF,MAAMe,EAAU,kBAAkB,mBAAmBE,CAAE,CAAC,IAAIiB,EAAmB,UAAY,QAAQ,GAAI,CAAE,OAAQ,OAAQ,EACzH1B,EAAA,CACF,OAASa,EAAK,CACZrB,GAASqB,aAAeC,EAAaD,EAAI,QAAgC,CAC3E,CACF,EAEA,OACEc,EAAAA,KAACC,EAAA,CAAM,IAAK,EAAG,cAAY,iBACzB,SAAA,CAAAC,EAAAA,IAACC,EAAA,CACC,MAAM,YACN,YAAY,kDACZ,QACEH,EAAAA,KAACI,EAAA,CAAO,MAAM,SAAS,IAAK,EACzB,SAAA,CAAAxC,IAAU,MACTsC,MAAC,OAAA,CAAK,KAAK,QAAQ,cAAY,kBAAkB,MAAO,CAAE,MAAO,gBAAiB,SAAU,gBACzF,SAAAtC,EACH,EAEFoC,EAAAA,KAACK,EAAA,CAAO,QAAQ,QAAQ,QAAS,IAAM,KAAKhC,EAAA,EAAW,cAAY,oBACjE,SAAA,CAAA6B,EAAAA,IAACI,EAAA,CAAW,KAAM,GAAI,cAAW,GAAC,EAAE,UAAA,EACtC,EACAN,EAAAA,KAACK,EAAA,CAAO,QAAQ,UAAU,QAAS,IAAM,KAAKd,EAAA,EAAiB,SAAUvB,EAAS,cAAY,wBAC5F,SAAA,CAAAkC,EAAAA,IAACK,EAAA,CAAS,KAAM,GAAI,cAAW,GAAC,EAAE,IAAEvC,EAAU,WAAa,aAAA,EAC7D,EACAgC,EAAAA,KAACK,EAAA,CAAO,QAAQ,UAAU,QAAS,IAAM,KAAKb,EAAA,EAAkB,cAAY,mBAC1E,SAAA,CAAAU,EAAAA,IAACM,EAAA,CAAK,KAAM,GAAI,cAAW,GAAC,EAAE,eAAA,CAAA,CAChC,CAAA,CAAA,CACF,CAAA,CAAA,EAGJN,EAAAA,IAACO,EAAA,CACC,MAAM,aACN,MAAOvC,EAAU,OACjB,aAAaE,EAAAd,EAAc,OAAd,MAAAc,EAAoB,WAAa,WAAWd,EAAc,KAAK,UAAU,GAAK,OAC3F,OAAO,uBAAA,CAAA,EAGRA,EAAc,OAASA,EAAc,KAAK,aAAe,MAAQA,EAAc,KAAK,UAAY,OAC/F4C,EAAAA,IAACQ,EAAA,CAAK,QAAQ,UACZ,SAAAR,EAAAA,IAACS,EAAA,CACC,SAAAT,EAAAA,IAACE,EAAA,CAAO,MAAM,SAAS,QAAQ,UAAU,IAAK,EAC5C,SAAAJ,EAAAA,KAACI,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAAF,EAAAA,IAAChD,EAAA,CAAK,KAAM,GAAI,cAAW,GAAC,MAAO,CAAE,MAAO,eAAA,CAAgB,CAAG,EAC/DgD,EAAAA,IAAC,UAAO,SAAA,iBAAA,CAAe,QACtB,OAAA,CAAK,cAAY,4BAA6B,SAAA5C,EAAc,KAAK,YAAc,IAAI,QACnF,OAAA,CAAK,MAAO,CAAE,MAAO,iBAAA,EAAqB,SAAA,IAAC,QAC3C,OAAA,CAAK,cAAY,yBAA0B,SAAAA,EAAc,KAAK,SAAW,IAAI,EAC7EA,EAAc,KAAK,QAClB0C,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,MAAO,mBAAoB,SAAU,cAAA,EAAkB,SAAA,CAAA,IAAE1C,EAAc,KAAK,OAAO,GAAA,CAAA,CAAC,CAAA,EAEvG,CAAA,CACF,EACF,EACF,EAGDQ,IAAe,MACdoC,MAACQ,EAAA,CAAK,QAAQ,UACZ,SAAAR,EAAAA,IAACS,EAAA,CACC,SAAAX,OAACC,EAAA,CAAM,IAAK,EACV,SAAA,CAAAC,MAAC,UAAO,MAAO,CAAE,SAAU,cAAA,EAAkB,SAAA,qBAAkB,EAC/DF,OAAC,QAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,mBAC7C,SAAA,CAAAlC,EAAW,UAAU,OAAO,aAAWA,EAAW,UAAU,SAAW,EAAI,GAAK,IAAI,qBAAA,CAAA,CACvF,CAAA,CAAA,CACF,EACF,EACF,EAGFoC,MAACQ,EAAA,CAAK,QAAQ,UACZ,eAACC,EAAA,CACE,SAAAvD,EAAQ,SAAWc,EAAU,SAAW,EACvC8B,EAAAA,KAACC,EAAA,CAAM,IAAK,EACV,SAAA,CAAAC,EAAAA,IAACU,EAAA,CAAS,MAAO,CAAE,OAAQ,IAAM,QAChCA,EAAA,CAAS,MAAO,CAAE,OAAQ,GAAG,CAAG,CAAA,CAAA,CACnC,EACE1C,EAAU,SAAW,EACvBgC,EAAAA,IAACW,EAAA,CAAW,KAAMX,EAAAA,IAACY,EAAA,CAAI,KAAM,GAAI,cAAW,EAAA,CAAC,EAAI,MAAM,eAAe,YAAY,gDAAA,CAAiD,EAEnIZ,EAAAA,IAACD,EAAA,CAAM,IAAK,EACT,SAAA/B,EAAU,IAAKQ,GAAM,CACpB,MAAMqC,EAAexD,IAAkBmB,EAAE,GACnCK,EAAKrB,EAAWgB,EAAE,EAAE,EAC1B,OACEsB,EAAAA,KAAC,MAAA,CAEC,cAAa,gBAAgBtB,EAAE,EAAE,GACjC,MAAO,CACL,QAAS,iBACT,OAAQ,0BACR,aAAc,mBACd,WAAY,kBAAA,EAGd,SAAA,CAAAsB,OAACI,GAAO,MAAM,SAAS,QAAQ,UAAU,IAAK,EAC5C,SAAA,CAAAJ,EAAAA,KAACC,EAAA,CAAM,IAAK,EACV,SAAA,CAAAD,EAAAA,KAACI,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAAF,EAAAA,IAAC,SAAA,CAAQ,SAAAxB,EAAE,MAAQA,EAAE,GAAG,EACxBwB,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAA,EAAuB,SAAAxB,EAAE,EAAA,CAAG,EAC3EA,EAAE,QAAUsB,OAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAqB,SAAA,CAAA,KAAGtB,EAAE,MAAA,EAAO,EAC7FA,EAAE,QACDwB,EAAAA,IAAC,QAAK,cAAa,mBAAmBxB,EAAE,EAAE,GAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAkB,WAAY,GAAA,EAAO,SAAA,QAAA,CAAM,CAAA,EAEvI,EACCA,EAAE,SAAWwB,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAA,EAAuB,SAAAxB,EAAE,OAAA,CAAQ,CAAA,EACjG,EACAsB,EAAAA,KAACI,EAAA,CAAO,IAAK,EACX,SAAA,CAAAJ,EAAAA,KAACK,EAAA,CACC,QAAQ,QACR,QAAS,IAAM7C,EAAkBwD,GAASA,IAAQtC,EAAE,GAAK,KAAOA,EAAE,EAAG,EACrE,cAAa,mBAAmBA,EAAE,EAAE,GACpC,aAAY,UAAUA,EAAE,EAAE,GAC1B,SAAU,CAACA,EAAE,MAAQA,EAAE,KAAK,OAAS,EACrC,MAAO,CAACA,EAAE,MAAQA,EAAE,KAAK,OAAS,EAAI,yBAA2B,oBAEjE,SAAA,CAAAwB,EAAAA,IAACe,EAAA,CAAS,KAAM,GAAI,cAAW,GAAC,EAAE,SAAA,CAAA,CAAA,EAEpCjB,EAAAA,KAACK,EAAA,CACC,QAAQ,UACR,QAAS,IAAM,KAAKjB,EAAOV,EAAE,EAAE,EAC/B,cAAa,oBAAoBA,EAAE,EAAE,GACrC,aAAY,cAAcA,EAAE,EAAE,GAE9B,SAAA,CAAAwB,EAAAA,IAAClD,EAAA,CAAS,KAAM,GAAI,cAAW,GAAC,EAAE,UAAA,CAAA,CAAA,EAEpCkD,EAAAA,IAACG,EAAA,CACC,QAAQ,QACR,QAAS,IAAM,KAAKT,EAAalB,CAAC,EAClC,cAAa,iBAAiBA,EAAE,EAAE,GAClC,aAAY,QAAQA,EAAE,EAAE,GAExB,SAAAwB,EAAAA,IAACgB,EAAA,CAAO,KAAM,GAAI,cAAW,EAAA,CAAC,CAAA,CAAA,EAEhChB,EAAAA,IAACG,EAAA,CACC,QAAQ,QACR,QAAS,IAAM,KAAKP,EAAcpB,EAAE,GAAIA,EAAE,SAAW,EAAI,EACzD,cAAa,mBAAmBA,EAAE,EAAE,GACpC,aAAaA,EAAE,SAAW,GAAQ,WAAWA,EAAE,EAAE,GAAK,UAAUA,EAAE,EAAE,GAElE,SAAAA,EAAE,SAAW,GAAQwB,EAAAA,IAACiB,GAAS,KAAM,GAAI,cAAW,EAAA,CAAC,EAAKjB,EAAAA,IAACkB,EAAA,CAAM,KAAM,GAAI,cAAW,EAAA,CAAC,CAAA,CAAA,EAE3FlB,EAAAA,IAACG,EAAA,CACC,QAAQ,QACR,QAAS,IAAM,KAAKR,EAAenB,EAAE,EAAE,EACvC,cAAa,mBAAmBA,EAAE,EAAE,GACpC,aAAY,UAAUA,EAAE,EAAE,GAE1B,SAAAwB,EAAAA,IAACmB,EAAA,CAAO,KAAM,GAAI,cAAW,EAAA,CAAC,CAAA,CAAA,CAChC,CAAA,CACF,CAAA,EACF,EAGAnB,EAAAA,IAAC,OAAI,cAAa,uBAAuBxB,EAAE,EAAE,GAAI,MAAO,CAAE,UAAW,iBAAkB,QAAS,iBAAkB,WAAY,mBAAoB,aAAc,kBAAA,EAC9J,gBAAC0B,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAAF,EAAAA,IAAClD,EAAA,CAAS,KAAM,GAAI,cAAW,GAAC,MAAO,CAAE,MAAO,iBAAA,CAAkB,CAAG,EACpE+B,IAAO,OACNmB,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAA,EAAsB,SAAA,qBAAA,CAAmB,EACvFnB,IAAO,WACR,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,oBAAsB,SAAA,gBAAa,EAEnFiB,OAACI,EAAA,CAAO,MAAM,SAAS,IAAK,EAAG,cAAa,8BAA8B1B,EAAE,EAAE,GAC5E,SAAA,CAAAwB,MAAC,QAAK,MAAO,CAAE,SAAU,cAAA,EAAmB,WAAG,OAAO,EACrDnB,EAAG,OAASiB,OAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAqB,SAAA,CAAA,KAAGjB,EAAG,KAAA,EAAM,EAC7FA,EAAG,QAAUiB,OAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAqB,SAAA,CAAA,KAAGjB,EAAG,MAAA,EAAO,EAChGmB,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAA,EAAuB,SAAAnB,EAAG,UAAA,CAAW,CAAA,CAAA,CACvF,CAAA,CAAA,CAEJ,CAAA,CACF,EAECgC,UACEX,EAAA,CAAO,IAAK,EAAG,MAAO,CAAE,UAAW,gBAAA,EAClC,SAAA,CAAAF,EAAAA,IAACG,EAAA,CAAO,QAAQ,UAAU,QAAS,IAAM,KAAKrB,EAAON,EAAE,EAAE,EAAG,cAAa,2BAA2BA,EAAE,EAAE,GAAI,SAAA,iBAE5G,EACAwB,EAAAA,IAACG,GAAO,QAAQ,QAAQ,QAAS,IAAM7C,EAAiB,IAAI,EAAG,SAAA,QAAA,CAAM,CAAA,CAAA,CACvE,CAAA,CAAA,EA5FGkB,EAAE,EAAA,CAgGb,CAAC,CAAA,CACH,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as h,j as e}from"./cmdk-C3F6LD6N.js";import{u as $,a as A,S as a,B as o,I as d,h as l,b as x,i as g,F as y}from"./main-BRmJZcHt.js";import{G as T}from"./Grid-Bojq8Sg7.js";import{V as B}from"./ViewHeader-BsnaspKw.js";import{C as w,b as E}from"./Card-Clkvh43Q.js";import{E as D}from"./EmptyState-ccT__JZG.js";import{E as L}from"./ErrorState-BSqf65ka.js";import{S as N}from"./Switch-B79a2t-G.js";import{T as O}from"./Textarea-BfXGMXQ7.js";import{S as H,a as V}from"./Sheet-BwMVGN-8.js";import{I as j}from"./Input-DV-vdaV8.js";import{P as _}from"./plus-Cps-8lcG.js";import{C as v}from"./clock-OtT5mvF3.js";import{P as R}from"./play-blqh0msT.js";import{R as G}from"./refresh-cw-KGm5eQgv.js";import{T as M}from"./trash-2-B_Y6HrfN.js";import"./Alert-pzFISNtS.js";import"./circle-alert-QQTU4Quz.js";import"./triangle-alert-BeY8LAv6.js";import"./circle-check-BMbe7Kkr.js";import"./refresh-ccw-DN_zCB1h.js";import"./index-B1OIS316.js";const k={interval:"Interval",cron:"Cron",once:"One-time"},Y={interval:G,cron:v,once:R};function J({sched:s}){return s.enabled?s.lastError?e.jsx(x,{tone:"danger",children:"error"}):s.lastRun===null?e.jsx(x,{tone:"info",children:"never run"}):e.jsx(x,{tone:"success",children:"active"}):e.jsx(x,{tone:"neutral",children:"disabled"})}function ye(){const s=$("/api/schedules"),[S,W]=h.useState([]),[r,i]=h.useState(null),[c,m]=h.useState(!1),[C,z]=h.useState(null),[b,p]=h.useState(null);A("schedules:change",h.useCallback(()=>{s.refetch()},[s]));const f=h.useMemo(()=>[...S,...s.data||[]],[S,s.data]),u=()=>{s.refetch()},I=async t=>{p(null);try{await g(`/api/schedules/${encodeURIComponent(t.id)}`,{method:"PATCH",body:{enabled:!t.enabled}}),u()}catch(n){p(n instanceof y?n.message:String(n))}},F=async t=>{p(null),m(!0);try{await g(`/api/schedules/${encodeURIComponent(t.id)}/run`,{method:"POST"}),u()}catch(n){p(n instanceof y?n.message:String(n))}finally{m(!1)}},P=async t=>{p(null),m(!0);try{await g(`/api/schedules/${encodeURIComponent(t)}`,{method:"DELETE"}),u()}catch(n){p(n instanceof y?n.message:String(n))}finally{m(!1)}},U=async()=>{if(!(!r||!r.name.trim()||!r.schedule.trim())){m(!0),z(null);try{const t={type:r.actionType};r.actionType==="agent"&&(t.prompt=r.prompt),r.actionType==="command"&&(t.command=r.prompt),r.id?await g(`/api/schedules/${encodeURIComponent(r.id)}`,{method:"PATCH",body:{name:r.name,type:r.type,schedule:r.schedule,timezone:r.timezone||"UTC",action:t}}):await g("/api/schedules",{method:"POST",body:{name:r.name,type:r.type,schedule:r.schedule,timezone:r.timezone||"UTC",action:t,enabled:!0}}),i(null),u()}catch(t){z(t instanceof y?t.message:String(t))}finally{m(!1)}}};return e.jsxs(a,{gap:5,"data-testid":"schedules-view",children:[e.jsx(B,{title:"Schedules",description:"Recurring and one-time jobs. Toggle enabled, run on demand, or create new.",actions:e.jsxs(o,{variant:"primary",size:"sm",onClick:()=>i({name:"",type:"interval",schedule:"1h",timezone:"UTC",actionType:"agent",prompt:""}),"data-testid":"schedules-new",children:[e.jsx(_,{size:14,"aria-hidden":!0})," New schedule"]})}),b!==null&&e.jsx("div",{role:"alert",style:{padding:"var(--space-2) 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)",color:"var(--danger)"},children:b}),s.error!=null?e.jsx(L,{error:s.error,onRetry:u,description:"Failed to load schedules."}):s.loading&&f.length===0?e.jsx(a,{gap:3,"data-testid":"schedules-skeleton",children:Array.from({length:4},(t,n)=>e.jsx(w,{children:e.jsx(E,{children:e.jsxs(T,{cols:4,gap:3,style:{alignItems:"center"},children:[e.jsxs(a,{gap:1,children:[e.jsx(d,{align:"center",gap:2,children:e.jsx(l,{style:{width:80,height:14}})}),e.jsxs(d,{gap:2,children:[e.jsx(l,{style:{width:56,height:18}}),e.jsx(l,{style:{width:56,height:18}})]})]}),e.jsxs(a,{gap:1,children:[e.jsx(l,{style:{width:60,height:10}}),e.jsx(l,{style:{width:48,height:12}}),e.jsx(l,{style:{width:40,height:10}})]}),e.jsxs(a,{gap:1,children:[e.jsx(l,{style:{width:100,height:12}}),e.jsx(l,{style:{width:80,height:10}})]}),e.jsxs(d,{align:"center",gap:2,justify:"end",children:[e.jsx(l,{style:{width:32,height:24}}),e.jsx(l,{style:{width:24,height:24}}),e.jsx(l,{style:{width:36,height:24}}),e.jsx(l,{style:{width:24,height:24}})]})]})})},n))}):f.length===0?e.jsx(D,{icon:e.jsx(v,{size:28,"aria-hidden":!0}),title:"No schedules yet",description:"Create one with the button above."}):e.jsx(a,{gap:3,children:f.map(t=>{const n=Y[t.type]??v;return e.jsx(w,{"data-testid":`schedule-${t.id}`,children:e.jsx(E,{children:e.jsxs(T,{cols:4,gap:3,style:{alignItems:"center"},children:[e.jsxs(a,{gap:1,children:[e.jsxs(d,{align:"center",gap:2,children:[e.jsx(n,{size:12,"aria-hidden":!0,style:{color:"var(--fg-muted)"}}),e.jsx("strong",{style:{fontSize:"var(--fs-14)"},children:t.name})]}),e.jsxs(d,{gap:2,children:[e.jsx(x,{tone:"neutral",children:k[t.type]}),e.jsx(J,{sched:t})]})]}),e.jsxs(a,{gap:1,children:[e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Schedule"}),e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.schedule}),e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:t.timezone})]}),e.jsxs(a,{gap:1,children:[e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Next run"}),t.nextRun?e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:new Date(t.nextRun).toLocaleString()}):e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"—"}),t.lastRun&&e.jsxs("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:["Last: ",new Date(t.lastRun).toLocaleDateString()]})]}),e.jsxs(d,{align:"center",gap:2,justify:"end",children:[e.jsx(o,{variant:"ghost",size:"sm",onClick:()=>i({id:t.id,name:t.name,type:t.type,schedule:t.schedule,timezone:t.timezone||"UTC",actionType:"agent",prompt:t.action&&t.action.prompt||""}),"data-testid":`schedule-edit-${t.id}`,title:"Edit",children:"Edit"}),e.jsx(o,{variant:"secondary",size:"sm",onClick:()=>{F(t)},disabled:c,"data-testid":`schedule-run-${t.id}`,title:"Run now",children:e.jsx(R,{size:12,"aria-hidden":!0})}),e.jsx(N,{checked:t.enabled,onCheckedChange:()=>{I(t)},"aria-label":`Toggle ${t.name} enabled`}),e.jsx(o,{variant:"danger",size:"sm",onClick:()=>{P(t.id)},disabled:c,"data-testid":`schedule-delete-${t.id}`,title:"Delete",children:e.jsx(M,{size:12,"aria-hidden":!0})})]})]})})},t.id)})}),e.jsx(H,{open:r!==null,onOpenChange:t=>{t||i(null)},children:e.jsx(V,{side:"right",title:r!=null&&r.id?"Edit schedule":"New schedule",children:r!==null&&e.jsxs(a,{gap:4,style:{padding:"var(--space-4)"},children:[e.jsxs(a,{gap:2,children:[e.jsx("label",{htmlFor:"sched-name",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Name"}),e.jsx(j,{id:"sched-name",value:r.name,onChange:t=>i({...r,name:t.target.value}),placeholder:"Daily digest",disabled:c})]}),e.jsxs(a,{gap:2,children:[e.jsx("label",{htmlFor:"sched-type",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Type"}),e.jsx(d,{gap:2,children:["interval","cron","once"].map(t=>e.jsx(o,{variant:r.type===t?"primary":"ghost",size:"sm",onClick:()=>i({...r,type:t}),children:k[t]},t))})]}),e.jsxs(a,{gap:2,children:[e.jsx("label",{htmlFor:"sched-expr",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:r.type==="interval"?"Interval (e.g. 1h, 30m)":r.type==="cron"?"Cron expr":"ISO timestamp"}),e.jsx(j,{id:"sched-expr",value:r.schedule,onChange:t=>i({...r,schedule:t.target.value}),placeholder:r.type==="interval"?"1h":r.type==="cron"?"0 9 * * *":"2026-07-14T09:00:00Z",disabled:c,"data-testid":"sched-expr"})]}),e.jsxs(a,{gap:2,children:[e.jsx("label",{htmlFor:"sched-tz",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Timezone"}),e.jsx(j,{id:"sched-tz",value:r.timezone,onChange:t=>i({...r,timezone:t.target.value}),placeholder:"UTC",disabled:c})]}),e.jsxs(a,{gap:2,children:[e.jsx("label",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Action type"}),e.jsxs(d,{gap:2,children:[e.jsx(o,{variant:r.actionType==="agent"?"primary":"ghost",size:"sm",onClick:()=>i({...r,actionType:"agent"}),children:"Agent prompt"}),e.jsx(o,{variant:r.actionType==="command"?"primary":"ghost",size:"sm",onClick:()=>i({...r,actionType:"command"}),children:"Shell command"})]})]}),e.jsxs(a,{gap:2,children:[e.jsx("label",{htmlFor:"sched-prompt",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:r.actionType==="agent"?"Agent prompt":"Command"}),e.jsx(O,{id:"sched-prompt",value:r.prompt,onChange:t=>i({...r,prompt:t.target.value}),placeholder:r.actionType==="agent"?"Run the daily digest report…":'echo "hello from cron"',rows:4,disabled:c})]}),C!==null&&e.jsx("div",{role:"alert",style:{padding:"var(--space-2)",background:"color-mix(in oklch, var(--danger) 12%, var(--surface-0))",border:"1px solid var(--danger)",borderRadius:"var(--radius-sm)",fontSize:"var(--fs-12)",color:"var(--danger)"},children:C}),e.jsxs(d,{gap:2,children:[e.jsx(o,{variant:"primary",onClick:()=>{U()},disabled:c||!r.name.trim()||!r.schedule.trim(),children:r!=null&&r.id?"Save":"Create"}),e.jsx(o,{variant:"ghost",onClick:()=>i(null),disabled:c,children:"Cancel"})]})]})})})]})}export{ye as SchedulesView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchedulesView-yMaG3Dtd.js","sources":["../../src/web/v8/views/Schedules/SchedulesView.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Plus, Play, Power, Trash2, RefreshCw, Clock, type LucideIcon } 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 { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { EmptyState } from '../../ui/feedback/EmptyState.js';\nimport { ErrorState } from '../../ui/feedback/ErrorState.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Sheet, SheetContent } from '../../ui/feedback/Sheet.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\n\n/**\n * SchedulesView — recurring / one-time job management.\n *\n * Renders `/api/schedules` (list), lets users toggle enabled, run on\n * demand, create new schedules (interval / cron / once), and delete.\n */\n\ntype ScheduleType = 'interval' | 'cron' | 'once';\n\ninterface ScheduleAction {\n type: string;\n prompt?: string;\n agent?: string;\n command?: string;\n [key: string]: unknown;\n}\n\ninterface Schedule {\n id: string;\n name: string;\n type: ScheduleType;\n schedule: string;\n timezone: string;\n enabled: boolean;\n createdAt: string;\n updatedAt: string;\n lastRun: string | null;\n lastResult: unknown;\n lastError: unknown;\n nextRun: string | null;\n action: ScheduleAction;\n budgetCheck?: { maxConcurrent: number; skipIfBudgetLow: boolean };\n}\n\ninterface SchedulesResponse extends Array<Schedule> {}\n\ninterface CreateDraft {\n id?: string;\n name: string;\n type: ScheduleType;\n schedule: string;\n timezone: string;\n actionType: string;\n prompt: string;\n}\n\nconst TYPE_LABEL: Record<ScheduleType, string> = {\n interval: 'Interval',\n cron: 'Cron',\n once: 'One-time',\n};\n\nconst TYPE_ICON: Record<ScheduleType, LucideIcon> = {\n interval: RefreshCw,\n cron: Clock,\n once: Play,\n};\n\nfunction StatusBadge({ sched }: { sched: Schedule }): JSX.Element {\n if (!sched.enabled) return <Badge tone=\"neutral\">disabled</Badge>;\n if (sched.lastError) return <Badge tone=\"danger\">error</Badge>;\n if (sched.lastRun === null) return <Badge tone=\"info\">never run</Badge>;\n return <Badge tone=\"success\">active</Badge>;\n}\n\nfunction Box(props: { children?: React.ReactNode; style?: React.CSSProperties }): JSX.Element {\n return <div style={props.style}>{props.children}</div>;\n}\n\nexport function SchedulesView(): JSX.Element {\n const res = useFetch<SchedulesResponse>('/api/schedules');\n const [live, setLive] = useState<Schedule[]>([]);\n const [draft, setDraft] = useState<CreateDraft | null>(null);\n const [busy, setBusy] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n useWsMessage('schedules:change', useCallback(() => { void res.refetch(); }, [res]));\n\n const schedules = useMemo<Schedule[]>(() => [...live, ...(res.data || [])], [live, res.data]);\n\n const refresh = (): void => { void res.refetch(); };\n\n const toggleEnabled = async (s: Schedule): Promise<void> => {\n setActionError(null);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(s.id)}`, {\n method: 'PATCH',\n body: { enabled: !s.enabled },\n });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n }\n };\n\n const runNow = async (s: Schedule): Promise<void> => {\n setActionError(null);\n setBusy(true);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(s.id)}/run`, { method: 'POST' });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n const deleteSchedule = async (id: string): Promise<void> => {\n setActionError(null);\n setBusy(true);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(id)}`, { method: 'DELETE' });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n const createSchedule = async (): Promise<void> => {\n if (!draft || !draft.name.trim() || !draft.schedule.trim()) return;\n setBusy(true);\n setError(null);\n try {\n const action: ScheduleAction = { type: draft.actionType };\n if (draft.actionType === 'agent') action.prompt = draft.prompt;\n if (draft.actionType === 'command') action.command = draft.prompt;\n if (draft.id) {\n // Edit path — PATCH the existing schedule.\n await fetchJson(`/api/schedules/${encodeURIComponent(draft.id)}`, {\n method: 'PATCH',\n body: {\n name: draft.name,\n type: draft.type,\n schedule: draft.schedule,\n timezone: draft.timezone || 'UTC',\n action,\n },\n });\n } else {\n await fetchJson('/api/schedules', {\n method: 'POST',\n body: {\n name: draft.name,\n type: draft.type,\n schedule: draft.schedule,\n timezone: draft.timezone || 'UTC',\n action,\n enabled: true,\n },\n });\n }\n setDraft(null);\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Stack gap={5} data-testid=\"schedules-view\">\n <ViewHeader\n title=\"Schedules\"\n description=\"Recurring and one-time jobs. Toggle enabled, run on demand, or create new.\"\n actions={\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={() => setDraft({ name: '', type: 'interval', schedule: '1h', timezone: 'UTC', actionType: 'agent', prompt: '' })}\n data-testid=\"schedules-new\"\n >\n <Plus size={14} aria-hidden /> New schedule\n </Button>\n }\n />\n\n {actionError !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-2) 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)', color: 'var(--danger)' }}>\n {actionError}\n </div>\n )}\n\n {res.error != null ? (\n <ErrorState\n error={res.error}\n onRetry={refresh}\n description=\"Failed to load schedules.\"\n />\n ) : res.loading && schedules.length === 0 ? (\n <Stack gap={3} data-testid=\"schedules-skeleton\">\n {Array.from({ length: 4 }, (_, i) => (\n <Card key={i}>\n <CardBody>\n <Grid cols={4} gap={3} style={{ alignItems: 'center' }}>\n <Stack gap={1}>\n <Inline align=\"center\" gap={2}>\n <Skeleton style={{ width: 80, height: 14 }} />\n </Inline>\n <Inline gap={2}>\n <Skeleton style={{ width: 56, height: 18 }} />\n <Skeleton style={{ width: 56, height: 18 }} />\n </Inline>\n </Stack>\n <Stack gap={1}>\n <Skeleton style={{ width: 60, height: 10 }} />\n <Skeleton style={{ width: 48, height: 12 }} />\n <Skeleton style={{ width: 40, height: 10 }} />\n </Stack>\n <Stack gap={1}>\n <Skeleton style={{ width: 100, height: 12 }} />\n <Skeleton style={{ width: 80, height: 10 }} />\n </Stack>\n <Inline align=\"center\" gap={2} justify=\"end\">\n <Skeleton style={{ width: 32, height: 24 }} />\n <Skeleton style={{ width: 24, height: 24 }} />\n <Skeleton style={{ width: 36, height: 24 }} />\n <Skeleton style={{ width: 24, height: 24 }} />\n </Inline>\n </Grid>\n </CardBody>\n </Card>\n ))}\n </Stack>\n ) : schedules.length === 0 ? (\n <EmptyState\n icon={<Clock size={28} aria-hidden />}\n title=\"No schedules yet\"\n description=\"Create one with the button above.\"\n />\n ) : (\n <Stack gap={3}>\n {schedules.map((s) => {\n const TypeIcon = TYPE_ICON[s.type] ?? Clock;\n return (\n <Card key={s.id} data-testid={`schedule-${s.id}`}>\n <CardBody>\n <Grid cols={4} gap={3} style={{ alignItems: 'center' }}>\n <Stack gap={1}>\n <Inline align=\"center\" gap={2}>\n <TypeIcon size={12} aria-hidden style={{ color: 'var(--fg-muted)' }} />\n <strong style={{ fontSize: 'var(--fs-14)' }}>{s.name}</strong>\n </Inline>\n <Inline gap={2}>\n <Badge tone=\"neutral\">{TYPE_LABEL[s.type]}</Badge>\n <StatusBadge sched={s} />\n </Inline>\n </Stack>\n\n <Stack gap={1}>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Schedule</span>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.schedule}</code>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>{s.timezone}</span>\n </Stack>\n\n <Stack gap={1}>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Next run</span>\n {s.nextRun ? (\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>\n {new Date(s.nextRun).toLocaleString()}\n </code>\n ) : (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>—</span>\n )}\n {s.lastRun && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n Last: {new Date(s.lastRun).toLocaleDateString()}\n </span>\n )}\n </Stack>\n\n <Inline align=\"center\" gap={2} justify=\"end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setDraft({\n id: s.id,\n name: s.name,\n type: s.type,\n schedule: s.schedule,\n timezone: s.timezone || 'UTC',\n actionType: 'agent',\n prompt: (s.action && (s.action as { prompt?: string }).prompt) || '',\n })}\n data-testid={`schedule-edit-${s.id}`}\n title=\"Edit\"\n >\n Edit\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { void runNow(s); }}\n disabled={busy}\n data-testid={`schedule-run-${s.id}`}\n title=\"Run now\"\n >\n <Play size={12} aria-hidden />\n </Button>\n <Switch\n checked={s.enabled}\n onCheckedChange={() => { void toggleEnabled(s); }}\n aria-label={`Toggle ${s.name} enabled`}\n />\n <Button\n variant=\"danger\"\n size=\"sm\"\n onClick={() => { void deleteSchedule(s.id); }}\n disabled={busy}\n data-testid={`schedule-delete-${s.id}`}\n title=\"Delete\"\n >\n <Trash2 size={12} aria-hidden />\n </Button>\n </Inline>\n </Grid>\n </CardBody>\n </Card>\n );\n })}\n </Stack>\n )}\n\n <Sheet open={draft !== null} onOpenChange={(o) => { if (!o) setDraft(null); }}>\n <SheetContent side=\"right\" title={draft?.id ? 'Edit schedule' : 'New schedule'}>\n {draft !== null && (\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Stack gap={2}>\n <label htmlFor=\"sched-name\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Name</label>\n <Input\n id=\"sched-name\"\n value={draft.name}\n onChange={(e) => setDraft({ ...draft, name: e.target.value })}\n placeholder=\"Daily digest\"\n disabled={busy}\n />\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-type\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Type</label>\n <Inline gap={2}>\n {(['interval', 'cron', 'once'] as const).map((t) => (\n <Button\n key={t}\n variant={draft.type === t ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, type: t })}\n >\n {TYPE_LABEL[t]}\n </Button>\n ))}\n </Inline>\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-expr\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {draft.type === 'interval' ? 'Interval (e.g. 1h, 30m)' : draft.type === 'cron' ? 'Cron expr' : 'ISO timestamp'}\n </label>\n <Input\n id=\"sched-expr\"\n value={draft.schedule}\n onChange={(e) => setDraft({ ...draft, schedule: e.target.value })}\n placeholder={draft.type === 'interval' ? '1h' : draft.type === 'cron' ? '0 9 * * *' : '2026-07-14T09:00:00Z'}\n disabled={busy}\n data-testid=\"sched-expr\"\n />\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-tz\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Timezone</label>\n <Input\n id=\"sched-tz\"\n value={draft.timezone}\n onChange={(e) => setDraft({ ...draft, timezone: e.target.value })}\n placeholder=\"UTC\"\n disabled={busy}\n />\n </Stack>\n\n <Stack gap={2}>\n <label style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Action type</label>\n <Inline gap={2}>\n <Button\n variant={draft.actionType === 'agent' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, actionType: 'agent' })}\n >\n Agent prompt\n </Button>\n <Button\n variant={draft.actionType === 'command' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, actionType: 'command' })}\n >\n Shell command\n </Button>\n </Inline>\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-prompt\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {draft.actionType === 'agent' ? 'Agent prompt' : 'Command'}\n </label>\n <Textarea\n id=\"sched-prompt\"\n value={draft.prompt}\n onChange={(e) => setDraft({ ...draft, prompt: e.target.value })}\n placeholder={draft.actionType === 'agent' ? 'Run the daily digest report…' : 'echo \"hello from cron\"'}\n rows={4}\n disabled={busy}\n />\n </Stack>\n\n {error !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-2)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-sm)', fontSize: 'var(--fs-12)', color: 'var(--danger)' }}>\n {error}\n </div>\n )}\n\n <Inline gap={2}>\n <Button\n variant=\"primary\"\n onClick={() => { void createSchedule(); }}\n disabled={busy || !draft.name.trim() || !draft.schedule.trim()}\n >\n {draft?.id ? 'Save' : 'Create'}\n </Button>\n <Button variant=\"ghost\" onClick={() => setDraft(null)} disabled={busy}>\n Cancel\n </Button>\n </Inline>\n </Stack>\n )}\n </SheetContent>\n </Sheet>\n </Stack>\n );\n}\n"],"names":["TYPE_LABEL","TYPE_ICON","RefreshCw","Clock","Play","StatusBadge","sched","Badge","jsx","SchedulesView","res","useFetch","live","setLive","useState","draft","setDraft","busy","setBusy","error","setError","actionError","setActionError","useWsMessage","useCallback","schedules","useMemo","refresh","toggleEnabled","s","fetchJson","err","FetchError","runNow","deleteSchedule","id","createSchedule","action","jsxs","Stack","ViewHeader","Button","Plus","ErrorState","_","i","Card","CardBody","Grid","Inline","Skeleton","EmptyState","TypeIcon","Switch","Trash2","Sheet","o","SheetContent","Input","e","Textarea"],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{r as t,j as r,P as N,b as B,i as E,u as Y,f as it,e as dt,d as Ce,n as Ie,a as Ee,m as be,h as ut,l as pt,g as ft,F as ht,D as mt,c as vt,k as gt}from"./cmdk-C3F6LD6N.js";import{u as St,c as xt,a as _e}from"./index-CR0TeJmc.js";import{d as wt,n as yt,R as Ct,p as Ne,q as It,o as Tt,C as je,g as Te,l as Pt}from"./main-BRmJZcHt.js";import{u as Rt}from"./index-B1OIS316.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 bt=wt("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);var Me=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),_t="VisuallyHidden",Oe=t.forwardRef((o,s)=>r.jsx(N.span,{...o,ref:s,style:{...Me,...o.style}}));Oe.displayName=_t;var ro=Oe,Et=[" ","Enter","ArrowUp","ArrowDown"],Nt=[" ","Enter"],ne="Select",[ue,pe,jt]=xt(ne),[re]=vt(ne,[jt,Ne]),fe=Ne(),[Mt,$]=re(ne),[Ot,At]=re(ne),Dt="SelectProvider";function Ae(o){const{__scopeSelect:s,children:e,open:l,defaultOpen:n,onOpenChange:p,value:a,defaultValue:i,onValueChange:c,dir:f,name:S,autoComplete:w,disabled:I,required:b,form:C,internal_do_not_use_render:d}=o,g=fe(s),[v,h]=t.useState(null),[u,R]=t.useState(null),[_,Z]=t.useState(!1),O=St(f),[L,se]=be({prop:l,defaultProp:n??!1,onChange:p,caller:ne}),[J,A]=be({prop:a,defaultProp:i,onChange:c,caller:ne}),F=t.useRef(null),Q=t.useRef(J);t.useEffect(()=>{const j=C?v==null?void 0:v.ownerDocument.getElementById(C):v==null?void 0:v.form;if(j instanceof HTMLFormElement){const H=()=>A(Q.current);return j.addEventListener("reset",H),()=>j.removeEventListener("reset",H)}},[C,v,A]);const K=v?!!C||!!v.closest("form"):!0,[k,W]=t.useState(new Set),z=Ie(),G=Array.from(k).map(j=>j.props.value).join(";"),V=t.useCallback(j=>{W(H=>new Set(H).add(j))},[]),le=t.useCallback(j=>{W(H=>{const U=new Set(H);return U.delete(j),U})},[]),ee={required:b,trigger:v,onTriggerChange:h,valueNode:u,onValueNodeChange:R,valueNodeHasChildren:_,onValueNodeHasChildrenChange:Z,contentId:z,value:J,onValueChange:A,open:L,onOpenChange:se,dir:O,triggerPointerDownPosRef:F,disabled:I,name:S,autoComplete:w,form:C,nativeOptions:k,nativeSelectKey:G,isFormControl:K};return r.jsx(Ct,{...g,children:r.jsx(Mt,{scope:s,...ee,children:r.jsx(ue.Provider,{scope:s,children:r.jsx(Ot,{scope:s,onNativeOptionAdd:V,onNativeOptionRemove:le,children:Jt(d)?d(ee):e})})})})}Ae.displayName=Dt;var De=o=>{const{__scopeSelect:s,children:e,...l}=o;return r.jsx(Ae,{__scopeSelect:s,...l,internal_do_not_use_render:({isFormControl:n})=>r.jsxs(r.Fragment,{children:[e,n?r.jsx(lt,{__scopeSelect:s}):null]})})};De.displayName=ne;var Le="SelectTrigger",Pe=t.forwardRef((o,s)=>{const{__scopeSelect:e,disabled:l=!1,...n}=o,p=fe(e),a=$(Le,e),i=a.disabled||l,c=B(s,a.onTriggerChange),f=pe(e),S=t.useRef("touch"),[w,I,b]=at(d=>{const g=f().filter(u=>!u.disabled),v=g.find(u=>u.value===a.value),h=ct(g,d,v);h!==void 0&&a.onValueChange(h.value)}),C=d=>{i||(a.onOpenChange(!0),b()),d&&(a.triggerPointerDownPosRef.current={x:Math.round(d.pageX),y:Math.round(d.pageY)})};return r.jsx(yt,{asChild:!0,...p,children:r.jsx(N.button,{type:"button",role:"combobox","aria-controls":a.open?a.contentId:void 0,"aria-expanded":a.open,"aria-required":a.required,"aria-autocomplete":"none",dir:a.dir,"data-state":a.open?"open":"closed",disabled:i,"data-disabled":i?"":void 0,"data-placeholder":he(a.value)?"":void 0,...n,ref:c,onClick:E(n.onClick,d=>{d.currentTarget.focus(),S.current!=="mouse"&&C(d)}),onPointerDown:E(n.onPointerDown,d=>{S.current=d.pointerType;const g=d.target;g.hasPointerCapture(d.pointerId)&&g.releasePointerCapture(d.pointerId),d.button===0&&d.ctrlKey===!1&&d.pointerType==="mouse"&&(C(d),d.preventDefault())}),onKeyDown:E(n.onKeyDown,d=>{const g=w.current!=="";!(d.ctrlKey||d.altKey||d.metaKey)&&d.key.length===1&&I(d.key),!(g&&d.key===" ")&&Et.includes(d.key)&&(C(),d.preventDefault())})})})});Pe.displayName=Le;var ke="SelectValue",Ve=t.forwardRef((o,s)=>{const{__scopeSelect:e,className:l,style:n,children:p,placeholder:a="",...i}=o,c=$(ke,e),{onValueNodeHasChildrenChange:f}=c,S=p!==void 0,w=B(s,c.onValueNodeChange);Y(()=>{f(S)},[f,S]);const I=he(c.value);return r.jsx(N.span,{...i,asChild:I?!1:i.asChild,ref:w,style:{pointerEvents:"none"},children:r.jsx(t.Fragment,{children:I?a:p},I?"placeholder":"value")})});Ve.displayName=ke;var Lt="SelectIcon",He=t.forwardRef((o,s)=>{const{__scopeSelect:e,children:l,...n}=o;return r.jsx(N.span,{"aria-hidden":!0,...n,ref:s,children:l||"▼"})});He.displayName=Lt;var Be="SelectPortal",[kt,Vt]=re(Be,{forceMount:void 0}),Fe=o=>{const{__scopeSelect:s,forceMount:e,...l}=o;return r.jsx(kt,{scope:o.__scopeSelect,forceMount:e,children:r.jsx(it,{asChild:!0,...l})})};Fe.displayName=Be;var q="SelectContent",We=t.forwardRef((o,s)=>{const e=Vt(q,o.__scopeSelect),{forceMount:l=e.forceMount,...n}=o,p=$(q,o.__scopeSelect),[a,i]=t.useState();return Y(()=>{i(new DocumentFragment)},[]),r.jsx(dt,{present:l||p.open,children:({present:c})=>c?r.jsx(ze,{...n,ref:s}):r.jsx(Ue,{...n,fragment:a})})});We.displayName=q;var Ue=t.forwardRef((o,s)=>{const{__scopeSelect:e,children:l,fragment:n}=o;return n?Ee.createPortal(r.jsx(Ke,{scope:e,children:r.jsx(ue.Slot,{scope:e,children:r.jsx("div",{ref:s,children:l})})}),n):null});Ue.displayName="SelectContentFragment";var D=10,[Ke,X]=re(q),Ht="SelectContentImpl",Bt=gt("SelectContent.RemoveScroll"),ze=t.forwardRef((o,s)=>{const{__scopeSelect:e}=o,{position:l="item-aligned",onCloseAutoFocus:n,onEscapeKeyDown:p,onPointerDownOutside:a,side:i,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:I,collisionPadding:b,sticky:C,hideWhenDetached:d,avoidCollisions:g,...v}=o,h=$(q,e),[u,R]=t.useState(null),[_,Z]=t.useState(null),O=B(s,R),[L,se]=t.useState(null),[J,A]=t.useState(null),F=pe(e),[Q,K]=t.useState(!1),k=t.useRef(!1);t.useEffect(()=>{if(u)return ut(u)},[u]),pt();const W=t.useCallback(m=>{const[P,...M]=F().map(y=>y.ref.current),[T]=M.slice(-1),x=document.activeElement;for(const y of m)if(y===x||(y==null||y.scrollIntoView({block:"nearest"}),y===P&&_&&(_.scrollTop=0),y===T&&_&&(_.scrollTop=_.scrollHeight),y==null||y.focus(),document.activeElement!==x))return},[F,_]),z=t.useCallback(()=>W([L,u]),[W,L,u]);t.useEffect(()=>{Q&&z()},[Q,z]);const{onOpenChange:G,triggerPointerDownPosRef:V}=h;t.useEffect(()=>{if(u){let m={x:0,y:0};const P=T=>{var x,y;m={x:Math.abs(Math.round(T.pageX)-(((x=V.current)==null?void 0:x.x)??0)),y:Math.abs(Math.round(T.pageY)-(((y=V.current)==null?void 0:y.y)??0))}},M=T=>{m.x<=10&&m.y<=10?T.preventDefault():T.composedPath().includes(u)||G(!1),document.removeEventListener("pointermove",P),V.current=null};return V.current!==null&&(document.addEventListener("pointermove",P),document.addEventListener("pointerup",M,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",P),document.removeEventListener("pointerup",M,{capture:!0})}}},[u,G,V]),t.useEffect(()=>{const m=()=>G(!1);return window.addEventListener("blur",m),window.addEventListener("resize",m),()=>{window.removeEventListener("blur",m),window.removeEventListener("resize",m)}},[G]);const[le,ee]=at(m=>{const P=F().filter(x=>!x.disabled),M=P.find(x=>x.ref.current===document.activeElement),T=ct(P,m,M);T&&setTimeout(()=>{var x;return(x=T.ref.current)==null?void 0:x.focus()})}),j=t.useCallback((m,P,M)=>{const T=!k.current&&!M;(h.value!==void 0&&h.value===P||T)&&(se(m),T&&(k.current=!0))},[h.value]),H=t.useCallback(()=>u==null?void 0:u.focus(),[u]),U=t.useCallback((m,P,M)=>{const T=!k.current&&!M;(h.value!==void 0&&h.value===P||T)&&A(m)},[h.value]),ie=l==="popper"?Se:Ge,ae=ie===Se?{side:i,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:I,collisionPadding:b,sticky:C,hideWhenDetached:d,avoidCollisions:g}:{};return r.jsx(Ke,{scope:e,content:u,viewport:_,onViewportChange:Z,itemRefCallback:j,selectedItem:L,onItemLeave:H,itemTextRefCallback:U,focusSelectedItem:z,selectedItemText:J,position:l,isPositioned:Q,searchRef:le,children:r.jsx(ft,{as:Bt,allowPinchZoom:!0,children:r.jsx(ht,{asChild:!0,trapped:h.open,onMountAutoFocus:m=>{m.preventDefault()},onUnmountAutoFocus:E(n,m=>{var P;(P=h.trigger)==null||P.focus({preventScroll:!0}),m.preventDefault()}),children:r.jsx(mt,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:p,onPointerDownOutside:a,onFocusOutside:m=>m.preventDefault(),onDismiss:()=>h.onOpenChange(!1),children:r.jsx(ie,{role:"listbox",id:h.contentId,"data-state":h.open?"open":"closed",dir:h.dir,onContextMenu:m=>m.preventDefault(),...v,...ae,onPlaced:()=>K(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:E(v.onKeyDown,m=>{const P=m.ctrlKey||m.altKey||m.metaKey;if(m.key==="Tab"&&m.preventDefault(),!P&&m.key.length===1&&ee(m.key),["ArrowUp","ArrowDown","Home","End"].includes(m.key)){let T=F().filter(x=>!x.disabled).map(x=>x.ref.current);if(["ArrowUp","End"].includes(m.key)&&(T=T.slice().reverse()),["ArrowUp","ArrowDown"].includes(m.key)){const x=m.target,y=T.indexOf(x);T=T.slice(y+1)}setTimeout(()=>W(T)),m.preventDefault()}})})})})})})});ze.displayName=Ht;var Ft="SelectItemAlignedPosition",Ge=t.forwardRef((o,s)=>{const{__scopeSelect:e,onPlaced:l,...n}=o,p=$(q,e),a=X(q,e),[i,c]=t.useState(null),[f,S]=t.useState(null),w=B(s,S),I=pe(e),b=t.useRef(!1),C=t.useRef(!0),{viewport:d,selectedItem:g,selectedItemText:v,focusSelectedItem:h}=a,u=t.useCallback(()=>{if(p.trigger&&p.valueNode&&i&&f&&d&&g&&v){const O=p.trigger.getBoundingClientRect(),L=f.getBoundingClientRect(),se=p.valueNode.getBoundingClientRect(),J=v.getBoundingClientRect();if(p.dir!=="rtl"){const x=J.left-L.left,y=se.left-x,te=O.left-y,oe=O.width+te,me=Math.max(oe,L.width),ve=window.innerWidth-D,ge=_e(y,[D,Math.max(D,ve-me)]);i.style.minWidth=oe+"px",i.style.left=ge+"px"}else{const x=L.right-J.right,y=window.innerWidth-se.right-x,te=window.innerWidth-O.right-y,oe=O.width+te,me=Math.max(oe,L.width),ve=window.innerWidth-D,ge=_e(y,[D,Math.max(D,ve-me)]);i.style.minWidth=oe+"px",i.style.right=ge+"px"}const A=I(),F=window.innerHeight-D*2,Q=d.scrollHeight,K=window.getComputedStyle(f),k=parseInt(K.borderTopWidth,10),W=parseInt(K.paddingTop,10),z=parseInt(K.borderBottomWidth,10),G=parseInt(K.paddingBottom,10),V=k+W+Q+G+z,le=Math.min(g.offsetHeight*5,V),ee=window.getComputedStyle(d),j=parseInt(ee.paddingTop,10),H=parseInt(ee.paddingBottom,10),U=O.top+O.height/2-D,ie=F-U,ae=g.offsetHeight/2,m=g.offsetTop+ae,P=k+W+m,M=V-P;if(P<=U){const x=A.length>0&&g===A[A.length-1].ref.current;i.style.bottom="0px";const y=f.clientHeight-d.offsetTop-d.offsetHeight,te=Math.max(ie,ae+(x?H:0)+y+z),oe=P+te;i.style.height=oe+"px"}else{const x=A.length>0&&g===A[0].ref.current;i.style.top="0px";const te=Math.max(U,k+d.offsetTop+(x?j:0)+ae)+M;i.style.height=te+"px",d.scrollTop=P-U+d.offsetTop}i.style.margin=`${D}px 0`,i.style.minHeight=le+"px",i.style.maxHeight=F+"px",l==null||l(),requestAnimationFrame(()=>b.current=!0)}},[I,p.trigger,p.valueNode,i,f,d,g,v,p.dir,l]);Y(()=>u(),[u]);const[R,_]=t.useState();Y(()=>{f&&_(window.getComputedStyle(f).zIndex)},[f]);const Z=t.useCallback(O=>{O&&C.current===!0&&(u(),h==null||h(),C.current=!1)},[u,h]);return r.jsx(Ut,{scope:e,contentWrapper:i,shouldExpandOnScrollRef:b,onScrollButtonChange:Z,children:r.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:R},children:r.jsx(N.div,{...n,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...n.style}})})})});Ge.displayName=Ft;var Wt="SelectPopperPosition",Se=t.forwardRef((o,s)=>{const{__scopeSelect:e,align:l="start",collisionPadding:n=D,...p}=o,a=fe(e);return r.jsx(It,{...a,...p,ref:s,align:l,collisionPadding:n,style:{boxSizing:"border-box",...p.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Se.displayName=Wt;var[Ut,Re]=re(q,{}),xe="SelectViewport",Ye=t.forwardRef((o,s)=>{const{__scopeSelect:e,nonce:l,...n}=o,p=X(xe,e),a=Re(xe,e),i=B(s,p.onViewportChange),c=t.useRef(0);return r.jsxs(r.Fragment,{children:[r.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:l}),r.jsx(ue.Slot,{scope:e,children:r.jsx(N.div,{"data-radix-select-viewport":"",role:"presentation",...n,ref:i,style:{position:"relative",flex:1,overflow:"hidden auto",...n.style},onScroll:E(n.onScroll,f=>{const S=f.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:I}=a;if(I!=null&&I.current&&w){const b=Math.abs(c.current-S.scrollTop);if(b>0){const C=window.innerHeight-D*2,d=parseFloat(w.style.minHeight),g=parseFloat(w.style.height),v=Math.max(d,g);if(v<C){const h=v+b,u=Math.min(C,h),R=h-u;w.style.height=u+"px",w.style.bottom==="0px"&&(S.scrollTop=R>0?R:0,w.style.justifyContent="flex-end")}}}c.current=S.scrollTop})})})]})});Ye.displayName=xe;var qe="SelectGroup",[Kt,zt]=re(qe),Gt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=Ie();return r.jsx(Kt,{scope:e,id:n,children:r.jsx(N.div,{role:"group","aria-labelledby":n,...l,ref:s})})});Gt.displayName=qe;var $e="SelectLabel",Yt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=zt($e,e);return r.jsx(N.div,{id:n.id,...l,ref:s})});Yt.displayName=$e;var de="SelectItem",[qt,Xe]=re(de),Ze=t.forwardRef((o,s)=>{const{__scopeSelect:e,value:l,disabled:n=!1,textValue:p,...a}=o,i=$(de,e),c=X(de,e),f=i.value===l,[S,w]=t.useState(p??""),[I,b]=t.useState(!1),C=Ce(u=>{var R;return(R=c.itemRefCallback)==null?void 0:R.call(c,u,l,n)}),d=B(s,C),g=Ie(),v=t.useRef("touch"),h=()=>{n||(i.onValueChange(l),i.onOpenChange(!1))};return r.jsx(qt,{scope:e,value:l,disabled:n,textId:g,isSelected:f,onItemTextChange:t.useCallback(u=>{w(R=>R||((u==null?void 0:u.textContent)??"").trim())},[]),children:r.jsx(ue.ItemSlot,{scope:e,value:l,disabled:n,textValue:S,children:r.jsx(N.div,{role:"option","aria-labelledby":g,"data-highlighted":I?"":void 0,"aria-selected":f&&I,"data-state":f?"checked":"unchecked","aria-disabled":n||void 0,"data-disabled":n?"":void 0,tabIndex:n?void 0:-1,...a,ref:d,onFocus:E(a.onFocus,()=>b(!0)),onBlur:E(a.onBlur,()=>b(!1)),onClick:E(a.onClick,()=>{v.current!=="mouse"&&h()}),onPointerUp:E(a.onPointerUp,()=>{v.current==="mouse"&&h()}),onPointerDown:E(a.onPointerDown,u=>{v.current=u.pointerType}),onPointerMove:E(a.onPointerMove,u=>{var R;v.current=u.pointerType,n?(R=c.onItemLeave)==null||R.call(c):v.current==="mouse"&&u.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E(a.onPointerLeave,u=>{var R;u.currentTarget===document.activeElement&&((R=c.onItemLeave)==null||R.call(c))}),onKeyDown:E(a.onKeyDown,u=>{var _;n||u.target!==u.currentTarget||((_=c.searchRef)==null?void 0:_.current)!==""&&u.key===" "||(Nt.includes(u.key)&&h(),u.key===" "&&u.preventDefault())})})})})});Ze.displayName=de;var ce="SelectItemText",Je=t.forwardRef((o,s)=>{const{__scopeSelect:e,className:l,style:n,...p}=o,a=$(ce,e),i=X(ce,e),c=Xe(ce,e),f=At(ce,e),[S,w]=t.useState(null),I=Ce(h=>{var u;return(u=i.itemTextRefCallback)==null?void 0:u.call(i,h,c.value,c.disabled)}),b=B(s,w,c.onItemTextChange,I),C=S==null?void 0:S.textContent,d=t.useMemo(()=>r.jsx("option",{value:c.value,disabled:c.disabled,children:C},c.value),[c.disabled,c.value,C]),{onNativeOptionAdd:g,onNativeOptionRemove:v}=f;return Y(()=>(g(d),()=>v(d)),[g,v,d]),r.jsxs(r.Fragment,{children:[r.jsx(N.span,{id:c.textId,...p,ref:b}),c.isSelected&&a.valueNode&&!a.valueNodeHasChildren&&!he(a.value)?Ee.createPortal(p.children,a.valueNode):null]})});Je.displayName=ce;var Qe="SelectItemIndicator",et=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o;return Xe(Qe,e).isSelected?r.jsx(N.span,{"aria-hidden":!0,...l,ref:s}):null});et.displayName=Qe;var we="SelectScrollUpButton",tt=t.forwardRef((o,s)=>{const e=X(we,o.__scopeSelect),l=Re(we,o.__scopeSelect),[n,p]=t.useState(!1),a=B(s,l.onScrollButtonChange);return Y(()=>{if(e.viewport&&e.isPositioned){let i=function(){const f=c.scrollTop>0;p(f)};const c=e.viewport;return i(),c.addEventListener("scroll",i),()=>c.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),n?r.jsx(nt,{...o,ref:a,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=e;i&&c&&(i.scrollTop=i.scrollTop-c.offsetHeight)}}):null});tt.displayName=we;var ye="SelectScrollDownButton",ot=t.forwardRef((o,s)=>{const e=X(ye,o.__scopeSelect),l=Re(ye,o.__scopeSelect),[n,p]=t.useState(!1),a=B(s,l.onScrollButtonChange);return Y(()=>{if(e.viewport&&e.isPositioned){let i=function(){const f=c.scrollHeight-c.clientHeight,S=Math.ceil(c.scrollTop)<f;p(S)};const c=e.viewport;return i(),c.addEventListener("scroll",i),()=>c.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),n?r.jsx(nt,{...o,ref:a,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=e;i&&c&&(i.scrollTop=i.scrollTop+c.offsetHeight)}}):null});ot.displayName=ye;var nt=t.forwardRef((o,s)=>{const{__scopeSelect:e,onAutoScroll:l,...n}=o,p=X("SelectScrollButton",e),a=t.useRef(null),i=pe(e),c=t.useCallback(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]);return t.useEffect(()=>()=>c(),[c]),Y(()=>{var S;const f=i().find(w=>w.ref.current===document.activeElement);(S=f==null?void 0:f.ref.current)==null||S.scrollIntoView({block:"nearest"})},[i]),r.jsx(N.div,{"aria-hidden":!0,...n,ref:s,style:{flexShrink:0,...n.style},onPointerDown:E(n.onPointerDown,()=>{a.current===null&&(a.current=window.setInterval(l,50))}),onPointerMove:E(n.onPointerMove,()=>{var f;(f=p.onItemLeave)==null||f.call(p),a.current===null&&(a.current=window.setInterval(l,50))}),onPointerLeave:E(n.onPointerLeave,()=>{c()})})}),$t="SelectSeparator",Xt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o;return r.jsx(N.div,{"aria-hidden":!0,...l,ref:s})});Xt.displayName=$t;var rt="SelectArrow",Zt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=fe(e);return X(rt,e).position==="popper"?r.jsx(Tt,{...n,...l,ref:s}):null});Zt.displayName=rt;var st="SelectBubbleInput",lt=t.forwardRef(({__scopeSelect:o,...s},e)=>{const l=$(st,o),{value:n,onValueChange:p,required:a,disabled:i,name:c,autoComplete:f,form:S}=l,{nativeOptions:w,nativeSelectKey:I}=l,b=t.useRef(null),C=B(e,b),d=n??"",g=Rt(d),v=Array.from(w).some(h=>(h.props.value??"")==="");return t.useEffect(()=>{const h=b.current;if(!h)return;const u=window.HTMLSelectElement.prototype,_=Object.getOwnPropertyDescriptor(u,"value").set;if(g!==d&&_){const Z=new Event("change",{bubbles:!0});_.call(h,d),h.dispatchEvent(Z)}},[g,d]),r.jsxs(N.select,{"aria-hidden":!0,required:a,tabIndex:-1,name:c,autoComplete:f,disabled:i,form:S,onChange:h=>p(h.target.value),...s,style:{...Me,...s.style},ref:C,defaultValue:d,children:[he(n)&&!v?r.jsx("option",{value:""}):null,Array.from(w)]},I)});lt.displayName=st;function Jt(o){return typeof o=="function"}function he(o){return o===""||o===void 0}function at(o){const s=Ce(o),e=t.useRef(""),l=t.useRef(0),n=t.useCallback(a=>{const i=e.current+a;s(i),function c(f){e.current=f,window.clearTimeout(l.current),f!==""&&(l.current=window.setTimeout(()=>c(""),1e3))}(i)},[s]),p=t.useCallback(()=>{e.current="",window.clearTimeout(l.current)},[]);return t.useEffect(()=>()=>window.clearTimeout(l.current),[]),[e,n,p]}function ct(o,s,e){const n=s.length>1&&Array.from(s).every(f=>f===s[0])?s[0]:s,p=e?o.indexOf(e):-1;let a=Qt(o,Math.max(p,0));n.length===1&&(a=a.filter(f=>f!==e));const c=a.find(f=>f.textValue.toLowerCase().startsWith(n.toLowerCase()));return c!==e?c:void 0}function Qt(o,s){return o.map((e,l)=>o[(s+l)%o.length])}const so=t.forwardRef(function(s,e){const{children:l,...n}=s;return r.jsxs(De,{...n,children:[l,r.jsx("span",{hidden:!0,children:r.jsx(Pe,{ref:e})})]})}),lo=t.forwardRef(function(s,e){const{className:l,placeholder:n,size:p="md",children:a,...i}=s;return r.jsxs(Pe,{ref:e,className:Te("v8-select__trigger",l),style:{display:"inline-flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-2)",minWidth:120,height:p==="sm"?28:32,padding:"0 var(--space-3)",background:"var(--input-bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",fontSize:"var(--fs-13)",color:"var(--fg)",cursor:"pointer"},...i,children:[r.jsx(Ve,{placeholder:n}),r.jsx(He,{children:r.jsx(je,{size:14,"aria-hidden":"true",style:{color:"var(--fg-muted)"}})}),a]})}),ao=t.forwardRef(function(s,e){const{className:l,children:n,position:p="popper",...a}=s;return r.jsx(Fe,{children:r.jsxs(We,{ref:e,position:p,sideOffset:4,className:Te("v8-select__content",l),style:{background:"var(--surface-popover)",border:"1px solid var(--border)",borderRadius:"var(--radius)",boxShadow:"var(--shadow-3)",padding:"var(--space-1)",minWidth:"var(--radix-select-trigger-width)",maxHeight:"var(--radix-select-content-available-height, 320px)",overflow:"hidden",zIndex:"var(--z-popover)"},...a,children:[r.jsx(tt,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:r.jsx(bt,{size:14,"aria-hidden":"true"})}),r.jsx(Ye,{children:n}),r.jsx(ot,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:r.jsx(je,{size:14,"aria-hidden":"true"})})]})})}),co=t.forwardRef(function(s,e){const{className:l,children:n,...p}=s;return r.jsxs(Ze,{ref:e,className:Te("v8-select__item",l),style:{display:"flex",alignItems:"center",gap:"var(--space-2)",height:28,padding:"0 var(--space-3) 0 var(--space-6)",borderRadius:"var(--radius-sm)",fontSize:"var(--fs-13)",color:"var(--fg)",cursor:"pointer",outline:0,userSelect:"none",position:"relative"},...p,children:[r.jsx(et,{style:{position:"absolute",left:6,display:"inline-flex",alignItems:"center",color:"var(--accent)"},children:r.jsx(Pt,{size:14,"aria-hidden":"true"})}),r.jsx(Je,{children:n})]})});export{ro as R,so as S,lo as a,ao as b,co as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Select-Bf_P0S6H.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/@radix-ui/react-select/dist/index.mjs","../../src/web/v8/ui/controls/Select.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 ChevronUp = createLucideIcon(\"ChevronUp\", [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment as Fragment2, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar PROVIDER_NAME = \"SelectProvider\";\nfunction SelectProvider(props) {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form,\n // @ts-expect-error internal render prop used by `Select` to compose its default parts\n internal_do_not_use_render\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const initialValueRef = React.useRef(value);\n React.useEffect(() => {\n const associatedForm = form ? trigger?.ownerDocument.getElementById(form) : trigger?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValue(initialValueRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [form, trigger, setValue]);\n const isFormControl = trigger ? !!form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const contentId = useId();\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n const handleNativeOptionAdd = React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []);\n const handleNativeOptionRemove = React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []);\n const context = {\n required,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId,\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n name,\n autoComplete,\n form,\n nativeOptions: nativeOptionsSet,\n nativeSelectKey,\n isFormControl\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: __scopeSelect,\n onNativeOptionAdd: handleNativeOptionAdd,\n onNativeOptionRemove: handleNativeOptionRemove,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n ) }) }) });\n}\nSelectProvider.displayName = PROVIDER_NAME;\nvar Select = (props) => {\n const { __scopeSelect, children, ...providerProps } = props;\n return /* @__PURE__ */ jsx(\n SelectProvider,\n {\n __scopeSelect,\n ...providerProps,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment2, { children: [\n children,\n isFormControl ? /* @__PURE__ */ jsx(\n SelectBubbleInput,\n {\n __scopeSelect\n }\n ) : null\n ] })\n }\n );\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n const showPlaceholder = shouldShowPlaceholder(context.value);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n asChild: showPlaceholder ? false : valueProps.asChild,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: /* @__PURE__ */ jsx(React.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? \"placeholder\" : \"value\")\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar SelectPortal = (props) => {\n const { __scopeSelect, forceMount, ...portalProps } = props;\n return /* @__PURE__ */ jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...portalProps }) });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(SelectContentFragment, { ...contentProps, fragment }) });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar SelectContentFragment = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, children, fragment } = props;\n if (!fragment) return null;\n return ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { ref: forwardedRef, children }) }) }),\n fragment\n );\n});\nSelectContentFragment.displayName = \"SelectContentFragment\";\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect } = props;\n const {\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setContent);\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!event.composedPath().includes(content)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current?.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setContent);\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const handleItemRefCallback = useCallbackRef(\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const composedRefs = useComposedRefs(forwardedRef, handleItemRefCallback);\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n if (disabled || event.target !== event.currentTarget) {\n return;\n }\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") {\n return;\n }\n if (SELECTION_KEYS.includes(event.key)) {\n handleSelect();\n }\n if (event.key === \" \") {\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const handleItemTextRefCallback = useCallbackRef(\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const composedRefs = useComposedRefs(\n forwardedRef,\n setItemTextNode,\n itemContext.onItemTextChange,\n handleItemTextRefCallback\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren && !shouldShowPlaceholder(context.value) ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, ...props }, forwardedRef) => {\n const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);\n const { value, onValueChange, required, disabled, name, autoComplete, form } = context;\n const { nativeOptions, nativeSelectKey } = context;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const selectValue = value ?? \"\";\n const prevValue = usePrevious(selectValue);\n const hasEmptyValueOption = Array.from(nativeOptions).some(\n (option) => (option.props.value ?? \"\") === \"\"\n );\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== selectValue && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, selectValue);\n select.dispatchEvent(event);\n }\n }, [prevValue, selectValue]);\n return /* @__PURE__ */ jsxs(\n Primitive.select,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n disabled,\n form,\n onChange: (event) => onValueChange(event.target.value),\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: selectValue,\n children: [\n shouldShowPlaceholder(value) && !hasEmptyValueOption ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptions)\n ]\n },\n nativeSelectKey\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nexport {\n SelectArrow as Arrow,\n SelectContent as Content,\n SelectGroup as Group,\n SelectIcon as Icon,\n SelectItem as Item,\n SelectItemIndicator as ItemIndicator,\n SelectItemText as ItemText,\n SelectLabel as Label,\n SelectPortal as Portal,\n Select as Root,\n SelectScrollDownButton as ScrollDownButton,\n SelectScrollUpButton as ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n SelectSeparator as Separator,\n SelectTrigger as Trigger,\n SelectValue as Value,\n SelectViewport as Viewport,\n createSelectScope,\n SelectBubbleInput as unstable_BubbleInput,\n SelectProvider as unstable_Provider,\n SelectBubbleInput as unstable_SelectBubbleInput,\n SelectProvider as unstable_SelectProvider\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxSelect from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Select — native-feeling dropdown.\n *\n * Built on Radix Select for a11y (keyboard navigation, type-ahead, ARIA).\n *\n * Use cases: settings pickers, kanban filter dropdowns, table column filters.\n * For autocomplete use Combobox (S3). For chips use MultiSelect (S3).\n */\n\nexport type SelectProps = ComponentPropsWithoutRef<typeof RxSelect.Root>;\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n const { children, ...rest } = props;\n return (\n <RxSelect.Root {...rest}>\n {children}\n {/* Trigger is rendered separately by the consumer via SelectTrigger. */}\n <span hidden>\n <RxSelect.Trigger ref={ref} />\n </span>\n </RxSelect.Root>\n );\n});\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<typeof RxSelect.Trigger> {\n placeholder?: string;\n size?: 'sm' | 'md';\n}\n\nexport const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(function SelectTrigger(\n props,\n ref,\n) {\n const { className, placeholder, size = 'md', children, ...rest } = props;\n return (\n <RxSelect.Trigger\n ref={ref}\n className={cx('v8-select__trigger', className)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 'var(--space-2)',\n minWidth: 120,\n height: size === 'sm' ? 28 : 32,\n padding: '0 var(--space-3)',\n background: 'var(--input-bg)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n cursor: 'pointer',\n }}\n {...rest}\n >\n <RxSelect.Value placeholder={placeholder} />\n <RxSelect.Icon>\n <ChevronDown size={14} aria-hidden=\"true\" style={{ color: 'var(--fg-muted)' }} />\n </RxSelect.Icon>\n {children}\n </RxSelect.Trigger>\n );\n});\n\nexport interface SelectContentProps extends ComponentPropsWithoutRef<typeof RxSelect.Content> {\n children: ReactNode;\n}\n\nexport const SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(function SelectContent(\n props,\n ref,\n) {\n const { className, children, position = 'popper', ...rest } = props;\n return (\n <RxSelect.Portal>\n <RxSelect.Content\n ref={ref}\n position={position}\n sideOffset={4}\n className={cx('v8-select__content', className)}\n style={{\n background: 'var(--surface-popover)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n boxShadow: 'var(--shadow-3)',\n padding: 'var(--space-1)',\n minWidth: 'var(--radix-select-trigger-width)',\n maxHeight: 'var(--radix-select-content-available-height, 320px)',\n overflow: 'hidden',\n zIndex: 'var(--z-popover)',\n }}\n {...rest}\n >\n <RxSelect.ScrollUpButton\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n color: 'var(--fg-muted)',\n }}\n >\n <ChevronUp size={14} aria-hidden=\"true\" />\n </RxSelect.ScrollUpButton>\n <RxSelect.Viewport>{children}</RxSelect.Viewport>\n <RxSelect.ScrollDownButton\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n color: 'var(--fg-muted)',\n }}\n >\n <ChevronDown size={14} aria-hidden=\"true\" />\n </RxSelect.ScrollDownButton>\n </RxSelect.Content>\n </RxSelect.Portal>\n );\n});\n\nexport interface SelectItemProps extends ComponentPropsWithoutRef<typeof RxSelect.Item> {\n children: ReactNode;\n}\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(function SelectItem(props, ref) {\n const { className, children, ...rest } = props;\n return (\n <RxSelect.Item\n ref={ref}\n className={cx('v8-select__item', className)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n height: 28,\n padding: '0 var(--space-3) 0 var(--space-6)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n cursor: 'pointer',\n outline: 0,\n userSelect: 'none',\n position: 'relative',\n }}\n {...rest}\n >\n <RxSelect.ItemIndicator\n style={{\n position: 'absolute',\n left: 6,\n display: 'inline-flex',\n alignItems: 'center',\n color: 'var(--accent)',\n }}\n >\n <Check size={14} aria-hidden=\"true\" />\n </RxSelect.ItemIndicator>\n <RxSelect.ItemText>{children}</RxSelect.ItemText>\n </RxSelect.Item>\n );\n});\n\nexport const SelectGroup = RxSelect.Group;\nexport const SelectLabel = RxSelect.Label;\nexport const SelectSeparator = RxSelect.Separator;"],"names":["ChevronUp","createLucideIcon","VISUALLY_HIDDEN_STYLES","NAME","VisuallyHidden","React.forwardRef","props","forwardedRef","jsx","Primitive","Root","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","useCollection","createCollectionScope","createCollection","createSelectContext","createContextScope","createPopperScope","usePopperScope","SelectProviderImpl","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","PROVIDER_NAME","SelectProvider","__scopeSelect","children","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","dir","name","autoComplete","disabled","required","form","internal_do_not_use_render","popperScope","trigger","setTrigger","React.useState","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","useDirection","open","setOpen","useControllableState","value","setValue","triggerPointerDownPosRef","React.useRef","initialValueRef","React.useEffect","associatedForm","reset","isFormControl","nativeOptionsSet","setNativeOptionsSet","contentId","useId","nativeSelectKey","option","handleNativeOptionAdd","React.useCallback","prev","handleNativeOptionRemove","optionsSet","context","PopperPrimitive.Root","isFunction","Select","providerProps","jsxs","Fragment2","SelectBubbleInput","TRIGGER_NAME","SelectTrigger","triggerProps","isDisabled","composedRefs","useComposedRefs","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","item","currentItem","nextItem","findNextItem","handleOpen","pointerEvent","PopperPrimitive.Anchor","shouldShowPlaceholder","composeEventHandlers","event","target","isTypingAhead","VALUE_NAME","SelectValue","className","style","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","useLayoutEffect","showPlaceholder","React.Fragment","ICON_NAME","SelectIcon","iconProps","PORTAL_NAME","PortalProvider","usePortalContext","SelectPortal","forceMount","portalProps","PortalPrimitive","CONTENT_NAME","SelectContent","portalContext","contentProps","fragment","setFragment","Presence","present","SelectContentImpl","SelectContentFragment","ReactDOM.createPortal","SelectContentProvider","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","Slot","createSlot","position","onCloseAutoFocus","onEscapeKeyDown","onPointerDownOutside","side","sideOffset","align","alignOffset","arrowPadding","collisionBoundary","collisionPadding","sticky","hideWhenDetached","avoidCollisions","content","setContent","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","isPositioned","setIsPositioned","firstValidItemFoundRef","hideOthers","useFocusGuards","focusFirst","candidates","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","candidate","focusSelectedItem","pointerMoveDelta","handlePointerMove","_a","_b","handlePointerUp","close","itemRefCallback","node","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","RemoveScroll","FocusScope","DismissableLayer","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","onPlaced","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","left","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","clamp","right","rightDelta","leftEdge","clampedRight","items","availableHeight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","height","isFirstItem","contentZIndex","setContentZIndex","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","nonce","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","isFocused","setIsFocused","handleItemRefCallback","useCallbackRef","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","handleItemTextRefCallback","textContent","nativeOption","React.useMemo","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","activeItem","SEPARATOR_NAME","SelectSeparator","separatorProps","ARROW_NAME","SelectArrow","arrowProps","PopperPrimitive.Arrow","BUBBLE_INPUT_NAME","nativeOptions","ref","selectValue","prevValue","usePrevious","hasEmptyValueOption","select","selectProto","onSearchChange","handleSearchChange","timerRef","key","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","wrapArray","v","array","startIndex","_","index","forwardRef","rest","RxSelect.Root","RxSelect.Trigger","size","cx","RxSelect.Value","RxSelect.Icon","ChevronDown","RxSelect.Portal","RxSelect.Content","RxSelect.ScrollUpButton","RxSelect.Viewport","RxSelect.ScrollDownButton","RxSelect.Item","RxSelect.ItemIndicator","Check","RxSelect.ItemText"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as g,j as e}from"./cmdk-C3F6LD6N.js";import{g as v}from"./main-BRmJZcHt.js";const x=g.forwardRef(function(n,d){const{id:i,title:o,description:a,icon:t,children:s,headerActions:r,className:c,...l}=n;return e.jsxs("section",{ref:d,id:i,"aria-labelledby":`${i}-title`,className:v("v8-settings-section",c),style:{padding:"var(--space-5) var(--space-6)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)"},...l,children:[e.jsxs("header",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-3)",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"var(--space-3)",minWidth:0},children:[t!==void 0&&e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",background:"color-mix(in oklch, var(--accent) 14%, transparent)",color:"var(--accent)",flexShrink:0},children:t}),e.jsxs("div",{style:{minWidth:0},children:[e.jsx("h2",{id:`${i}-title`,style:{fontSize:"var(--fs-15)",fontWeight:600,color:"var(--fg)",lineHeight:"var(--lh-snug)",margin:0},children:o}),a!==void 0&&e.jsx("p",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:a})]})]}),r!==void 0&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0},children:r})]}),e.jsx("div",{className:"v8-settings-section__body",children:s})]})}),m=g.forwardRef(function(n,d){const{id:i,label:o,description:a,control:t,disabled:s=!1,className:r,...c}=n,l=`${i}-label`;return e.jsxs("div",{ref:d,"data-disabled":s||void 0,"aria-disabled":s||void 0,className:v("v8-settings-row",r),style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",padding:"var(--space-3) 0",borderBottom:"1px solid var(--border)",opacity:s?.5:1},...c,children:[e.jsxs("div",{id:l,style:{flex:1,minWidth:0},children:[e.jsx("span",{style:{display:"block",fontSize:"var(--fs-13)",fontWeight:500,color:"var(--fg)",cursor:s?"not-allowed":"default",lineHeight:"var(--lh-snug)"},children:o}),a!==void 0&&e.jsx("p",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:a})]}),e.jsx("div",{role:"group","aria-labelledby":l,style:{flexShrink:0,alignSelf:"center"},children:t})]})});export{x as S,m as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsRow-CJb-F94Y.js","sources":["../../src/web/v8/ui/settings/SettingsSection.tsx","../../src/web/v8/ui/settings/SettingsRow.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsSection — a titled, optionally-described section of the Settings\n * page.\n *\n * PLAN.md §Settings declares 16 sections; SettingsSection is the shell\n * they all use. The body is a free slot so each section composes its own\n * option rows (SettingsRow) and sub-sections.\n */\n\nexport interface SettingsSectionProps extends HTMLAttributes<HTMLElement> {\n id: string;\n title: string;\n /** One-sentence summary of what this section controls. */\n description?: string;\n /** Optional icon (lucide). */\n icon?: ReactNode;\n /** Section body — SettingsRow, sub-sections, etc. */\n children?: ReactNode;\n /** Right-aligned header slot (e.g. \"Restore defaults\" button). */\n headerActions?: ReactNode;\n}\n\nexport const SettingsSection = forwardRef<HTMLElement, SettingsSectionProps>(function SettingsSection(\n props,\n ref,\n) {\n const { id, title, description, icon, children, headerActions, className, ...rest } = props;\n return (\n <section\n ref={ref}\n id={id}\n aria-labelledby={`${id}-title`}\n className={cx('v8-settings-section', className)}\n style={{\n padding: 'var(--space-5) var(--space-6)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n }}\n {...rest}\n >\n <header\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-3)',\n marginBottom: 'var(--space-4)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 'var(--space-3)', minWidth: 0 }}>\n {icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n background: 'color-mix(in oklch, var(--accent) 14%, transparent)',\n color: 'var(--accent)',\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n <h2\n id={`${id}-title`}\n style={{\n fontSize: 'var(--fs-15)',\n fontWeight: 600,\n color: 'var(--fg)',\n lineHeight: 'var(--lh-snug)',\n margin: 0,\n }}\n >\n {title}\n </h2>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n {headerActions !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-2)', flexShrink: 0 }}>\n {headerActions}\n </div>\n )}\n </header>\n <div className=\"v8-settings-section__body\">{children}</div>\n </section>\n );\n});","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsRow — one labelled option inside a SettingsSection.\n *\n * Three-column layout:\n * ┌─ label + description ──────────── control ─┐\n * The label column is required; the control slot\n * hosts the actual interactive (Switch, Select, Slider, custom button, etc.).\n */\n\nexport interface SettingsRowProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n /** The control label (left column). */\n label: ReactNode;\n /** Optional one-line description (left column, below label). */\n description?: ReactNode;\n /** Right column — the interactive control. */\n control: ReactNode;\n /** Mark the row as disabled (visual + aria). */\n disabled?: boolean;\n}\n\nexport const SettingsRow = forwardRef<HTMLDivElement, SettingsRowProps>(function SettingsRow(\n props,\n ref,\n) {\n const { id, label, description, control, disabled = false, className, ...rest } = props;\n // The label is announced via `aria-labelledby` rather than `<label\n // htmlFor>` because the control is generic — its DOM id is set by the\n // consumer (Switch, Select, custom input), and we'd otherwise need to\n // thread it through the props chain. `aria-labelledby` is the WAI-ARIA\n // sanctioned way to label a region without owning a native `<label>`.\n const labelId = `${id}-label`;\n return (\n <div\n ref={ref}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n className={cx('v8-settings-row', className)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-4)',\n padding: 'var(--space-3) 0',\n borderBottom: '1px solid var(--border)',\n opacity: disabled ? 0.5 : 1,\n }}\n {...rest}\n >\n <div id={labelId} style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n display: 'block',\n fontSize: 'var(--fs-13)',\n fontWeight: 500,\n color: 'var(--fg)',\n cursor: disabled ? 'not-allowed' : 'default',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {label}\n </span>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n <div\n role=\"group\"\n aria-labelledby={labelId}\n style={{ flexShrink: 0, alignSelf: 'center' }}\n >\n {control}\n </div>\n </div>\n );\n});"],"names":["SettingsSection","forwardRef","props","ref","id","title","description","icon","children","headerActions","className","rest","jsxs","cx","jsx","SettingsRow","label","control","disabled","labelId"],"mappings":"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"}
|