@polderlabs/bizar 8.0.0 → 8.1.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/agent-browser.md +1 -1
- package/.claude/agents/baldr.md +1 -1
- package/.claude/agents/forseti.md +1 -1
- package/.claude/agents/frigg.md +1 -1
- package/.claude/agents/heimdall.md +1 -1
- package/.claude/agents/hermod.md +1 -1
- package/.claude/agents/mimir.md +1 -1
- package/.claude/agents/odin.md +1 -1
- package/.claude/agents/quick.md +1 -1
- package/.claude/agents/semble-search.md +1 -1
- package/.claude/agents/thor.md +1 -1
- package/.claude/agents/tyr.md +1 -1
- package/.claude/agents/vidarr.md +1 -1
- package/.claude/agents/vor.md +1 -1
- package/.claude/commands/goal.md +98 -0
- package/.claude/settings.local.json +1 -2
- package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +6 -0
- package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +1 -0
- package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +1 -0
- package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +1 -0
- package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +28 -0
- package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +1 -0
- package/bizar-dash/dist/assets/{Badge-Cd61wsBa.js → Badge-BH4C3aUF.js} +1 -1
- package/bizar-dash/dist/assets/{Badge-Cd61wsBa.js.map → Badge-BH4C3aUF.js.map} +1 -1
- package/bizar-dash/dist/assets/Button-RmN1RKhE.js +6 -0
- package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +1 -0
- package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js → Card-BzJeYR2D.js} +1 -1
- package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js.map → Card-BzJeYR2D.js.map} +1 -1
- package/bizar-dash/dist/assets/Chip-CN2bvm7a.js +1 -0
- package/bizar-dash/dist/assets/Chip-CN2bvm7a.js.map +1 -0
- package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js → EmptyState-DEiBv4-r.js} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js.map → EmptyState-DEiBv4-r.js.map} +1 -1
- package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +6 -0
- package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +1 -0
- package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js +21 -0
- package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +1 -0
- package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +67 -0
- package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +1 -0
- package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +13 -0
- package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +1 -0
- package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +1 -0
- package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +1 -0
- package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +16 -0
- package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +10 -0
- package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +43 -0
- package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +1 -0
- package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +1 -0
- package/bizar-dash/dist/assets/Sheet-C_sIEw35.js.map +1 -0
- package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +1 -0
- package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +1 -0
- package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +16 -0
- package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +1 -0
- package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +1 -0
- package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +1 -0
- package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js +1 -0
- package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js.map +1 -0
- package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js → ViewHeader-dPd4zAyj.js} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js.map → ViewHeader-dPd4zAyj.js.map} +1 -1
- package/bizar-dash/dist/assets/{brain-DeoXNDE2.js → brain-BajPVibR.js} +1 -1
- package/bizar-dash/dist/assets/{brain-DeoXNDE2.js.map → brain-BajPVibR.js.map} +1 -1
- package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js → calendar-CaP_Bbgc.js} +2 -2
- package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js.map → calendar-CaP_Bbgc.js.map} +1 -1
- package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js → cmdk-BLWIhKrV.js} +1 -1
- package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js.map → cmdk-BLWIhKrV.js.map} +1 -1
- package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js +5 -0
- package/bizar-dash/dist/assets/{dnd-kit-DR2Qzzxk.js.map → dnd-kit-DU8GZk7s.js.map} +1 -1
- package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js +11 -0
- package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js.map +1 -0
- package/bizar-dash/dist/assets/index-AL3OLUfz.js +1 -0
- package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +1 -0
- package/bizar-dash/dist/assets/{main-COdgjqbZ.css → main-CcQfRfIJ.css} +1 -1
- package/bizar-dash/dist/assets/main-LxX9zTRk.js +109 -0
- package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +1 -0
- package/bizar-dash/dist/assets/{minus-CrStJTZ7.js → plus-CVH1JB04.js} +2 -2
- package/bizar-dash/dist/assets/plus-CVH1JB04.js.map +1 -0
- package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +11 -0
- package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +1 -0
- package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js +6 -0
- package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js.map +1 -0
- package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js +6 -0
- package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js.map +1 -0
- package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +1 -0
- package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +1 -0
- package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +1 -0
- package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +1 -0
- package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js → wrench-B7go551L.js} +1 -1
- package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js.map → wrench-B7go551L.js.map} +1 -1
- package/bizar-dash/dist/v8.html +3 -3
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/api.mjs +10 -0
- package/bizar-dash/src/server/bg-poller.mjs +81 -1
- package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
- package/bizar-dash/src/server/progress-parser.mjs +221 -0
- package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
- package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
- package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
- package/bizar-dash/src/server/routes/goals.mjs +307 -0
- package/bizar-dash/src/server/routes/tasks.mjs +11 -0
- package/bizar-dash/src/web/v8/__tests__/App.test.tsx +2 -2
- package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
- package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
- package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
- package/bizar-dash/src/web/v8/__tests__/views.test.tsx +110 -40
- package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
- package/bizar-dash/src/web/v8/data/types.ts +154 -0
- package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
- package/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
- package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +252 -0
- package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
- package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +6 -3
- package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +3 -3
- package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +10 -5
- package/bizar-dash/src/web/v8/ui/styles/globals.css +5 -0
- package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +53 -15
- package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +151 -87
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +1 -1
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +133 -30
- package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +176 -67
- package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +78 -11
- package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +58 -42
- package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +112 -52
- package/bizar-dash/src/web/v8/views/Router.tsx +13 -37
- package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +635 -210
- package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +140 -49
- package/bizar-dash/tests/components/Button.test.tsx +51 -14
- package/bizar-dash/tests/components/Card.test.tsx +37 -20
- package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
- package/bizar-dash/tests/components/Toast.test.tsx +48 -95
- package/bizar-dash/tests/goals-decompose.test.mjs +177 -0
- package/bizar-dash/tests/setup.ts +21 -0
- package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
- package/bizar-dash/vite.config.ts +15 -0
- package/bizar-dash/vitest.config.ts +4 -1
- package/cli/bin.mjs +32 -0
- package/cli/install.mjs +26 -1
- package/cli/provision-claude.mjs +86 -0
- package/package.json +1 -1
- package/scripts/run-dev.mjs +84 -0
- package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +0 -6
- package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +0 -1
- package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +0 -1
- package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +0 -1
- package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +0 -1
- package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +0 -1
- package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +0 -8
- package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +0 -1
- package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +0 -11
- package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +0 -1
- package/bizar-dash/dist/assets/Grid-C62gCPqt.js +0 -1
- package/bizar-dash/dist/assets/Grid-C62gCPqt.js.map +0 -1
- package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +0 -21
- package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +0 -1
- package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +0 -67
- package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +0 -1
- package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +0 -13
- package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +0 -1
- package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +0 -1
- package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +0 -1
- package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +0 -1
- package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +0 -30
- package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +0 -1
- package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +0 -48
- package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +0 -1
- package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +0 -11
- package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +0 -1
- package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +0 -1
- package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +0 -1
- package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js +0 -6
- package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js.map +0 -1
- package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +0 -5
- package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +0 -6
- package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +0 -1
- package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +0 -6
- package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +0 -1
- package/bizar-dash/dist/assets/main-Cw6gybzS.js +0 -109
- package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +0 -1
- package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +0 -6
- package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +0 -1
- package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +0 -1
- package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
- /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
- /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
- /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
- /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
- /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
- /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
- /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
- /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
- /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
- /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
- /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
- /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
- /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
- /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
- /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
- /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
- /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
- /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
- /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
- /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
- /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
- /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
- /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
- /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
- /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
- /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
- /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
- /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
- /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
- /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
- /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{j as e,r as n}from"./cmdk-BLWIhKrV.js";import{b as d,c,S as p,I as m,a as u}from"./main-LxX9zTRk.js";import{V as h}from"./ViewHeader-dPd4zAyj.js";import{B as x}from"./Badge-BH4C3aUF.js";import{E as v}from"./EmptyState-DEiBv4-r.js";import{C as y}from"./Chip-CN2bvm7a.js";import{u as g}from"./useFetch-CoVWwbml.js";import{B as f}from"./brain-BajPVibR.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 j=d("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/**
|
|
7
|
+
* @license lucide-react v0.460.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const b=d("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]),k={project:"Project",global:"Global"},S={project:"accent",global:"info"};function w(t){const{entries:o,onOpen:s,empty:i,className:r}=t;return o.length===0&&i!==void 0?e.jsx(e.Fragment,{children:i}):e.jsxs("div",{className:c("v8-memory-vault",r),children:[o.map(a=>e.jsxs("button",{type:"button",onClick:()=>s==null?void 0:s(a),className:c("v8-memory-vault__item",`v8-memory-vault__item--${a.scope}`),style:{display:"block",width:"100%",padding:"var(--space-3) var(--space-4)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius)",textAlign:"left",cursor:s!==void 0?"pointer":"default",font:"inherit",color:"inherit",marginBottom:"var(--space-2)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-2)",marginBottom:6},children:[e.jsx(x,{tone:S[a.scope],size:"sm",children:k[a.scope]}),e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:"var(--fs-12)",color:"var(--fg-subtle)",fontVariantNumeric:"tabular-nums"},children:[e.jsx(j,{size:12,"aria-hidden":"true"}),a.updatedAt]})]}),e.jsx("div",{style:{fontSize:"var(--fs-13)",color:"var(--fg)",lineHeight:"var(--lh-snug)",display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.content}),a.tags!==void 0&&a.tags.length>0&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:"var(--space-2)",flexWrap:"wrap"},children:[e.jsx(b,{size:11,"aria-hidden":"true",style:{color:"var(--fg-subtle)"}}),a.tags.map(l=>e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:l},l))]})]},a.id)),e.jsx("style",{children:`
|
|
12
|
+
.v8-memory-vault__item:hover { border-color: var(--accent); }
|
|
13
|
+
`})]})}function M(t){return{id:t.id||"",content:t.content||"",tags:t.tags||[],scope:t.scope||"project",updatedAt:typeof t.updatedAt=="number"?new Date(t.updatedAt).toLocaleString():t.updatedAt||""}}function N(){const t=g("/api/memory"),[o,s]=n.useState("all"),i=n.useMemo(()=>{var a;const r=(((a=t.data)==null?void 0:a.entries)||[]).map(M);return o==="all"?r:r.filter(l=>l.scope===o)},[t.data,o]);return e.jsxs(p,{gap:5,children:[e.jsx(h,{title:"Memory",description:"Cross-session notes. Project memos live in the repo; global memos live on the user."}),e.jsx(m,{gap:2,children:["all","project","global"].map(r=>e.jsx(y,{selected:o===r,onClick:()=>s(r),children:r==="all"?"All":r==="project"?"Project":"Global"},r))}),t.loading?e.jsx(u,{style:{height:240}}):i.length===0?e.jsx(v,{icon:e.jsx(f,{size:32,"aria-hidden":!0}),title:"No memory entries",description:"Memos land here once they are written via the memory tools."}):e.jsx(w,{entries:i})]})}export{N as MemoryView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryView-Bbez5pMN.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/lucide-react/dist/esm/icons/hash.js","../../src/web/v8/ui/memory/MemoryVault.tsx","../../src/web/v8/views/Memory/MemoryView.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 FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.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 Hash = createLucideIcon(\"Hash\", [\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"9\", y2: \"9\", key: \"4lhtct\" }],\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"15\", y2: \"15\", key: \"vyu0kd\" }],\n [\"line\", { x1: \"10\", x2: \"8\", y1: \"3\", y2: \"21\", key: \"1ggp8o\" }],\n [\"line\", { x1: \"16\", x2: \"14\", y1: \"3\", y2: \"21\", key: \"weycgp\" }]\n]);\n\nexport { Hash as default };\n//# sourceMappingURL=hash.js.map\n","import { type ReactNode } from 'react';\nimport { FileText, Hash } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\nimport { Badge } from '../data/Badge.js';\n\n/**\n * MemoryVault — list of memory entries (memos) grouped by scope.\n *\n * PLAN.md: memos are the durable cross-session notes the harness writes\n * down. Scopes: `project` (committed to repo) vs `global` (user-wide).\n * Each entry: content (truncated to 3 lines), tags, last-updated time,\n * scope badge.\n */\n\nexport type MemoryScope = 'project' | 'global';\n\nexport interface MemoryEntry {\n id: string;\n content: string;\n tags?: readonly string[];\n scope: MemoryScope;\n /** Relative time label (\"3 days ago\", \"Just now\"). */\n updatedAt: string;\n}\n\nexport interface MemoryVaultProps {\n entries: readonly MemoryEntry[];\n /** Optional click handler — opens memo detail. */\n onOpen?: (entry: MemoryEntry) => void;\n /** Optional empty state. */\n empty?: ReactNode;\n className?: string;\n}\n\nconst SCOPE_LABEL: Record<MemoryScope, string> = {\n project: 'Project',\n global: 'Global',\n};\n\nconst SCOPE_TONE: Record<MemoryScope, 'accent' | 'info'> = {\n project: 'accent',\n global: 'info',\n};\n\nexport function MemoryVault(props: MemoryVaultProps) {\n const { entries, onOpen, empty, className } = props;\n\n if (entries.length === 0 && empty !== undefined) {\n return <>{empty}</>;\n }\n\n return (\n <div className={cx('v8-memory-vault', className)}>\n {entries.map((entry) => (\n <button\n type=\"button\"\n key={entry.id}\n onClick={() => onOpen?.(entry)}\n className={cx('v8-memory-vault__item', `v8-memory-vault__item--${entry.scope}`)}\n style={{\n display: 'block',\n width: '100%',\n padding: 'var(--space-3) var(--space-4)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n textAlign: 'left',\n cursor: onOpen !== undefined ? 'pointer' : 'default',\n font: 'inherit',\n color: 'inherit',\n marginBottom: 'var(--space-2)',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 'var(--space-2)',\n marginBottom: 6,\n }}\n >\n <Badge tone={SCOPE_TONE[entry.scope]} size=\"sm\">\n {SCOPE_LABEL[entry.scope]}\n </Badge>\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-subtle)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n <FileText size={12} aria-hidden=\"true\" />\n {entry.updatedAt}\n </span>\n </div>\n <div\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n lineHeight: 'var(--lh-snug)',\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {entry.content}\n </div>\n {entry.tags !== undefined && entry.tags.length > 0 && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n marginTop: 'var(--space-2)',\n flexWrap: 'wrap',\n }}\n >\n <Hash size={11} aria-hidden=\"true\" style={{ color: 'var(--fg-subtle)' }} />\n {entry.tags.map((tag) => (\n <span\n key={tag}\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n }}\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </button>\n ))}\n <style>{`\n .v8-memory-vault__item:hover { border-color: var(--accent); }\n `}</style>\n </div>\n );\n}","import { useMemo, useState } from 'react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { MemoryVault, type MemoryEntry, type MemoryScope } from '../../ui/memory/MemoryVault.js';\nimport { EmptyState } from '../../ui/feedback/EmptyState.js';\nimport { Brain } from 'lucide-react';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { Chip } from '../../ui/data/Chip.js';\nimport { useFetch } from '../../data/useFetch.js';\n\n/**\n * MemoryView — Sprint S10. Pulls `/api/memory` (Bizar memory entries).\n * Click a chip to scope the view (Project / Global / All).\n */\n\ninterface MemoryResponse {\n entries?: Array<{\n id?: string;\n content?: string;\n tags?: string[];\n scope?: 'project' | 'global';\n updatedAt?: string | number;\n }>;\n count?: number;\n}\n\nfunction toEntry(e: NonNullable<MemoryResponse['entries']>[number]): MemoryEntry {\n return {\n id: e.id || '',\n content: e.content || '',\n tags: e.tags || [],\n scope: (e.scope || 'project') as MemoryScope,\n updatedAt:\n typeof e.updatedAt === 'number'\n ? new Date(e.updatedAt).toLocaleString()\n : e.updatedAt || '',\n };\n}\n\nexport function MemoryView(): JSX.Element {\n const mem = useFetch<MemoryResponse>('/api/memory');\n const [scope, setScope] = useState<MemoryScope | 'all'>('all');\n\n const entries = useMemo<MemoryEntry[]>(() => {\n const list = (mem.data?.entries || []).map(toEntry);\n if (scope === 'all') return list;\n return list.filter((e) => e.scope === scope);\n }, [mem.data, scope]);\n\n return (\n <Stack gap={5}>\n <ViewHeader\n title=\"Memory\"\n description=\"Cross-session notes. Project memos live in the repo; global memos live on the user.\"\n />\n <Inline gap={2}>\n {(['all', 'project', 'global'] as const).map((s) => (\n <Chip key={s} selected={scope === s} onClick={() => setScope(s)}>\n {s === 'all' ? 'All' : s === 'project' ? 'Project' : 'Global'}\n </Chip>\n ))}\n </Inline>\n {mem.loading ? (\n <Skeleton style={{ height: 240 }} />\n ) : entries.length === 0 ? (\n <EmptyState\n icon={<Brain size={32} aria-hidden />}\n title=\"No memory entries\"\n description=\"Memos land here once they are written via the memory tools.\"\n />\n ) : (\n <MemoryVault entries={entries} />\n )}\n </Stack>\n );\n}"],"names":["FileText","createLucideIcon","Hash","SCOPE_LABEL","SCOPE_TONE","MemoryVault","props","entries","onOpen","empty","className","cx","entry","jsxs","jsx","Badge","tag","toEntry","e","MemoryView","mem","useFetch","scope","setScope","useState","useMemo","list","_a","Stack","ViewHeader","Inline","s","Chip","Skeleton","EmptyState","Brain"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as v,j as t}from"./cmdk-BLWIhKrV.js";import{S as h,A as y,B as w}from"./main-LxX9zTRk.js";import{S as C,a as l}from"./StatTile-BRsUIA6P.js";import{C as f,a as x,b as j}from"./Card-BzJeYR2D.js";import{B as S}from"./Badge-BH4C3aUF.js";import{A as T,C as B}from"./ActivityFeed-CqF6iSDQ.js";import{V as E}from"./ViewHeader-dPd4zAyj.js";import{u as k}from"./useFetch-CoVWwbml.js";import{u as G}from"./useWebSocket-CVIQB8yG.js";import{W as M}from"./wrench-B7go551L.js";import{T as R}from"./triangle-alert-Nzbrm0I2.js";import{G as b,a as q}from"./git-pull-request-CFRRwdxp.js";const F={"git.merge":b,"git.pull-request":q,"git.merge.pr":b,"task.completed":B,"task.failed":R,"agent.run":w,"agent.tool":M,"agent.message":y};function L(e){const n=F[e||""]||y;return t.jsx(n,{size:14,"aria-hidden":"true"})}function O(e,n){const a=typeof e.ts=="number"?e.ts:Date.now(),m=e.meta||(a?new Date(a).toLocaleString():"");return{id:e.id||`${a}-${n}`,icon:L(e.iconKey||e.kind),title:e.title||e.description||e.kind||"event",description:e.description,meta:m,tone:e.tone}}function U(){var p;const e=k("/api/snapshot"),n=k("/api/activity?limit=10"),[a,m]=v.useState([]),$=v.useCallback(o=>{const s=o.event;s&&m(A=>[...A.slice(-19),s])},[]);G("activity:new",$);const g=v.useMemo(()=>{var s;return[...a.slice(-10).reverse(),...(((s=n.data)==null?void 0:s.events)||[]).slice(0,10)].map(O)},[n.data,a]),i=((p=e.data)==null?void 0:p.overview)||{},r=i.tasks||{},d=i.goals||{},c=i.agents||{},u=i.tokens||{};return t.jsxs(h,{gap:5,children:[t.jsx(E,{title:"Overview",description:"What's moving in the harness right now.",actions:t.jsx(S,{tone:e.error?"danger":"success",dot:!0,children:e.loading?"Loading":e.error?"Offline":"Live"})}),t.jsxs(C,{cols:4,children:[t.jsx(l,{label:"Active tasks",value:String((r.queued||0)+(r.active||0)),trend:(r.active||0)>(r.queued||0)?"up":"flat",delta:`${r.done||0} done · ${r.blocked||0} blocked`}),t.jsx(l,{label:"Goals at risk",value:`${d.atRisk||0} / ${d.total||0}`,trend:(d.atRisk||0)>0?"down":"flat",delta:`${d.done||0} done`}),t.jsx(l,{label:"Agents running",value:`${c.running||0} / ${c.total||0}`,trend:(c.running||0)>0?"up":"flat",delta:`${c.idle||0} idle · ${c.error||0} error`}),t.jsx(l,{label:"Tokens (24h)",value:u.last24h?`${(u.last24h/1e6).toFixed(1)}M`:"—",trend:u.trend||"flat",delta:"last 24h"})]}),t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"var(--space-4)"},children:[t.jsxs(f,{children:[t.jsx(x,{title:"Recent activity"}),t.jsx(j,{children:t.jsx(T,{items:g.length?g:[]})})]}),t.jsxs(f,{children:[t.jsx(x,{title:"Needs attention"}),t.jsx(j,{children:t.jsxs(h,{gap:3,children:[(i.needsAttention||[]).length===0&&t.jsx(l,{label:"All clear",value:"Nothing needs attention",hint:"The harness is running smoothly."}),(i.needsAttention||[]).map((o,s)=>t.jsx(l,{label:o.label,value:o.value,hint:o.hint},s))]})})]})]})]})}export{U as OverviewView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewView-BDegBWgg.js","sources":["../../src/web/v8/views/Overview/OverviewView.tsx"],"sourcesContent":["import { useMemo, useState, useCallback } from 'react';\nimport {\n GitMerge,\n GitPullRequest,\n AlertTriangle,\n CheckCircle2,\n Bot,\n Wrench,\n Activity as ActivityIcon,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { StatTile, StatGrid } from '../../ui/data/StatTile.js';\nimport { Card, CardBody, CardHeader } from '../../ui/data/Card.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { ActivityFeed, type ActivityItem } from '../../ui/activity/ActivityFeed.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport type { ActivityEvent, Snapshot } from '../../data/types.js';\n\n/**\n * OverviewView — the home/dashboard landing page.\n *\n * S10 — pulls `/api/snapshot` for the headline counts and `/api/activity`\n * for the recent feed. Live-tails via `useWsMessage('activity:new', …)`\n * so a new event lands in the feed without a re-fetch.\n */\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n 'git.merge': GitMerge,\n 'git.pull-request': GitPullRequest,\n 'git.merge.pr': GitMerge,\n 'task.completed': CheckCircle2,\n 'task.failed': AlertTriangle,\n 'agent.run': Bot,\n 'agent.tool': Wrench,\n 'agent.message': ActivityIcon,\n};\n\nfunction iconFor(key: string | undefined): JSX.Element {\n const Icon = ICON_MAP[key || ''] || ActivityIcon;\n return <Icon size={14} aria-hidden=\"true\" />;\n}\n\nfunction eventToItem(e: ActivityEvent, idx: number): ActivityItem {\n const ts = typeof e.ts === 'number' ? e.ts : Date.now();\n const meta = e.meta || (ts ? new Date(ts).toLocaleString() : '');\n return {\n id: e.id || `${ts}-${idx}`,\n icon: iconFor(e.iconKey || e.kind),\n title: e.title || e.description || e.kind || 'event',\n description: e.description,\n meta,\n tone: e.tone,\n };\n}\n\nexport function OverviewView(): JSX.Element {\n const snapshot = useFetch<Snapshot>('/api/snapshot');\n const activity = useFetch<{ events?: ActivityEvent[] }>('/api/activity?limit=10');\n\n // Live-tail new events. Keep them in a small in-memory ring buffer.\n const [liveEvents, setLiveEvents] = useState<ActivityEvent[]>([]);\n const onEvent = useCallback((msg: { event?: ActivityEvent } & Record<string, unknown>) => {\n const ev = msg.event;\n if (!ev) return;\n setLiveEvents((prev) => [...prev.slice(-19), ev]);\n }, []);\n useWsMessage('activity:new', onEvent);\n\n const items = useMemo<ActivityItem[]>(() => {\n const list = [\n ...liveEvents.slice(-10).reverse(),\n ...((activity.data?.events || []).slice(0, 10)),\n ];\n return list.map(eventToItem);\n }, [activity.data, liveEvents]);\n\n const ov = snapshot.data?.overview || {};\n const tasks = ov.tasks || {};\n const goals = ov.goals || {};\n const agents = ov.agents || {};\n const tokens = ov.tokens || {};\n\n return (\n <Stack gap={5}>\n <ViewHeader\n title=\"Overview\"\n description=\"What's moving in the harness right now.\"\n actions={\n <Badge tone={snapshot.error ? 'danger' : 'success'} dot>\n {snapshot.loading ? 'Loading' : snapshot.error ? 'Offline' : 'Live'}\n </Badge>\n }\n />\n\n <StatGrid cols={4}>\n <StatTile\n label=\"Active tasks\"\n value={String((tasks.queued || 0) + (tasks.active || 0))}\n trend={(tasks.active || 0) > (tasks.queued || 0) ? 'up' : 'flat'}\n delta={`${tasks.done || 0} done · ${tasks.blocked || 0} blocked`}\n />\n <StatTile\n label=\"Goals at risk\"\n value={`${goals.atRisk || 0} / ${goals.total || 0}`}\n trend={(goals.atRisk || 0) > 0 ? 'down' : 'flat'}\n delta={`${goals.done || 0} done`}\n />\n <StatTile\n label=\"Agents running\"\n value={`${agents.running || 0} / ${agents.total || 0}`}\n trend={(agents.running || 0) > 0 ? 'up' : 'flat'}\n delta={`${agents.idle || 0} idle · ${agents.error || 0} error`}\n />\n <StatTile\n label=\"Tokens (24h)\"\n value={tokens.last24h ? `${(tokens.last24h / 1_000_000).toFixed(1)}M` : '—'}\n trend={tokens.trend || 'flat'}\n delta=\"last 24h\"\n />\n </StatGrid>\n\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 'var(--space-4)' }}>\n <Card>\n <CardHeader title=\"Recent activity\" />\n <CardBody>\n <ActivityFeed items={items.length ? items : []} />\n </CardBody>\n </Card>\n <Card>\n <CardHeader title=\"Needs attention\" />\n <CardBody>\n <Stack gap={3}>\n {(ov.needsAttention || []).length === 0 && (\n <StatTile\n label=\"All clear\"\n value=\"Nothing needs attention\"\n hint=\"The harness is running smoothly.\"\n />\n )}\n {(ov.needsAttention || []).map((n, i) => (\n <StatTile key={i} label={n.label} value={n.value} hint={n.hint} />\n ))}\n </Stack>\n </CardBody>\n </Card>\n </div>\n </Stack>\n );\n}"],"names":["ICON_MAP","GitMerge","GitPullRequest","CheckCircle2","AlertTriangle","Bot","Wrench","ActivityIcon","iconFor","key","Icon","jsx","eventToItem","idx","ts","meta","OverviewView","snapshot","useFetch","activity","liveEvents","setLiveEvents","useState","onEvent","useCallback","msg","ev","prev","useWsMessage","items","useMemo","_a","ov","tasks","goals","agents","tokens","jsxs","Stack","ViewHeader","Badge","StatGrid","StatTile","Card","CardHeader","CardBody","ActivityFeed","n","i"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import{r as d,j as w,a as it,h as K,i as q,l as Nt,o as ee,p as Fe,k as U,q as Dn,P as jn,n as ct,u as yt,v as kn,y as Hn,w as Vn,F as Fn,s as Bn,x as Wn}from"./cmdk-BLWIhKrV.js";import{b as lt,c as Be}from"./main-LxX9zTRk.js";import{a as $n,b as zn,u as Un,c as Kn,d as St}from"./index-AL3OLUfz.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 Yn=lt("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
|
|
7
|
+
* @license lucide-react v0.460.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const Mt=lt("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
|
|
12
|
+
* @license lucide-react v0.460.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const Xn=lt("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),Gn={accent:"var(--accent)",info:"var(--info)",success:"var(--success)",warning:"var(--warning)",danger:"var(--danger)"},$r=d.forwardRef(function(t,n){const{value:o,max:r=1,tone:i="accent",showLabel:s,height:c=6,className:l,style:a,...u}=t,p=Math.min(100,Math.max(0,o/r*100));return w.jsxs("div",{ref:n,className:Be("v8-progress",l),style:{position:"relative",display:"flex",alignItems:"center",gap:"var(--space-2)",...a},...u,children:[w.jsx("div",{style:{flex:1,height:c,background:"var(--surface-2)",borderRadius:"var(--radius-pill)",overflow:"hidden"},children:w.jsx("div",{style:{width:`${p}%`,height:"100%",background:Gn[i],borderRadius:"var(--radius-pill)",transition:"width var(--motion-base) var(--ease-out)"}})}),s===!0&&w.jsxs("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",fontVariantNumeric:"tabular-nums",minWidth:32,textAlign:"right"},children:[Math.round(p),"%"]})]})}),qn=["top","right","bottom","left"],fe=Math.min,ie=Math.max,De=Math.round,Me=Math.floor,ce=e=>({x:e,y:e}),Zn={left:"right",right:"left",bottom:"top",top:"bottom"};function Lt(e,t,n){return ie(e,fe(t,n))}function le(e,t){return typeof e=="function"?e(t):e}function de(e){return e.split("-")[0]}function Pe(e){return e.split("-")[1]}function at(e){return e==="x"?"y":"x"}function ft(e){return e==="y"?"height":"width"}function oe(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function dt(e){return at(oe(e))}function Jn(e,t,n){n===void 0&&(n=!1);const o=Pe(e),r=dt(e),i=ft(r);let s=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(s=je(s)),[s,je(s)]}function Qn(e){const t=je(e);return[et(e),t,et(t)]}function et(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const Ct=["left","right"],bt=["right","left"],eo=["top","bottom"],to=["bottom","top"];function no(e,t,n){switch(e){case"top":case"bottom":return n?t?bt:Ct:t?Ct:bt;case"left":case"right":return t?eo:to;default:return[]}}function oo(e,t,n,o){const r=Pe(e);let i=no(de(e),n==="start",o);return r&&(i=i.map(s=>s+"-"+r),t&&(i=i.concat(i.map(et)))),i}function je(e){const t=de(e);return Zn[t]+e.slice(t.length)}function ro(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function Dt(e){return typeof e!="number"?ro(e):{top:e,right:e,bottom:e,left:e}}function ke(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function Rt(e,t,n){let{reference:o,floating:r}=e;const i=oe(t),s=dt(t),c=ft(s),l=de(t),a=i==="y",u=o.x+o.width/2-r.width/2,p=o.y+o.height/2-r.height/2,g=o[c]/2-r[c]/2;let h;switch(l){case"top":h={x:u,y:o.y-r.height};break;case"bottom":h={x:u,y:o.y+o.height};break;case"right":h={x:o.x+o.width,y:p};break;case"left":h={x:o.x-r.width,y:p};break;default:h={x:o.x,y:o.y}}const m=Pe(t);return m&&(h[s]+=g*(m==="end"?1:-1)*(n&&a?-1:1)),h}async function so(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:i,rects:s,elements:c,strategy:l}=e,{boundary:a="clippingAncestors",rootBoundary:u="viewport",elementContext:p="floating",altBoundary:g=!1,padding:h=0}=le(t,e),m=Dt(h),S=c[g?p==="floating"?"reference":"floating":p],v=ke(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(S)))==null||n?S:S.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(c.floating)),boundary:a,rootBoundary:u,strategy:l})),y=p==="floating"?{x:o,y:r,width:s.floating.width,height:s.floating.height}:s.reference,x=await(i.getOffsetParent==null?void 0:i.getOffsetParent(c.floating)),C=await(i.isElement==null?void 0:i.isElement(x))&&await(i.getScale==null?void 0:i.getScale(x))||{x:1,y:1},R=ke(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:y,offsetParent:x,strategy:l}):y);return{top:(v.top-R.top+m.top)/C.y,bottom:(R.bottom-v.bottom+m.bottom)/C.y,left:(v.left-R.left+m.left)/C.x,right:(R.right-v.right+m.right)/C.x}}const io=50,co=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:i=[],platform:s}=n,c=s.detectOverflow?s:{...s,detectOverflow:so},l=await(s.isRTL==null?void 0:s.isRTL(t));let a=await s.getElementRects({reference:e,floating:t,strategy:r}),{x:u,y:p}=Rt(a,o,l),g=o,h=0;const m={};for(let f=0;f<i.length;f++){const S=i[f];if(!S)continue;const{name:v,fn:y}=S,{x,y:C,data:R,reset:b}=await y({x:u,y:p,initialPlacement:o,placement:g,strategy:r,middlewareData:m,rects:a,platform:c,elements:{reference:e,floating:t}});u=x??u,p=C??p,m[v]={...m[v],...R},b&&h<io&&(h++,typeof b=="object"&&(b.placement&&(g=b.placement),b.rects&&(a=b.rects===!0?await s.getElementRects({reference:e,floating:t,strategy:r}):b.rects),{x:u,y:p}=Rt(a,g,l)),f=-1)}return{x:u,y:p,placement:g,strategy:r,middlewareData:m}},lo=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:i,platform:s,elements:c,middlewareData:l}=t,{element:a,padding:u=0}=le(e,t)||{};if(a==null)return{};const p=Dt(u),g={x:n,y:o},h=dt(r),m=ft(h),f=await s.getDimensions(a),S=h==="y",v=S?"top":"left",y=S?"bottom":"right",x=S?"clientHeight":"clientWidth",C=i.reference[m]+i.reference[h]-g[h]-i.floating[m],R=g[h]-i.reference[h],b=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a));let A=b?b[x]:0;(!A||!await(s.isElement==null?void 0:s.isElement(b)))&&(A=c.floating[x]||i.floating[m]);const T=C/2-R/2,B=A/2-f[m]/2-1,I=fe(p[v],B),H=fe(p[y],B),W=A-f[m]-H,N=A/2-f[m]/2+T,D=Lt(I,N,W),V=!l.arrow&&Pe(r)!=null&&N!==D&&i.reference[m]/2-(N<I?I:H)-f[m]/2<0,O=V?N<I?N-I:N-W:0;return{[h]:g[h]+O,data:{[h]:D,centerOffset:N-D-O,...V&&{alignmentOffset:O}},reset:V}}}),ao=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,o;const{placement:r,middlewareData:i,rects:s,initialPlacement:c,platform:l,elements:a}=t,{mainAxis:u=!0,crossAxis:p=!0,fallbackPlacements:g,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:f=!0,...S}=le(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};const v=de(r),y=oe(c),x=de(c)===c,C=await(l.isRTL==null?void 0:l.isRTL(a.floating)),R=g||(x||!f?[je(c)]:Qn(c)),b=m!=="none";!g&&b&&R.push(...oo(c,f,m,C));const A=[c,...R],T=await l.detectOverflow(t,S),B=[];let I=((o=i.flip)==null?void 0:o.overflows)||[];if(u&&B.push(T[v]),p){const D=Jn(r,s,C);B.push(T[D[0]],T[D[1]])}if(I=[...I,{placement:r,overflows:B}],!B.every(D=>D<=0)){var H,W;const D=(((H=i.flip)==null?void 0:H.index)||0)+1,V=A[D];if(V&&(!(p==="alignment"?y!==oe(V):!1)||I.every(P=>oe(P.placement)===y?P.overflows[0]>0:!0)))return{data:{index:D,overflows:I},reset:{placement:V}};let O=(W=I.filter(F=>F.overflows[0]<=0).sort((F,P)=>F.overflows[1]-P.overflows[1])[0])==null?void 0:W.placement;if(!O)switch(h){case"bestFit":{var N;const F=(N=I.filter(P=>{if(b){const M=oe(P.placement);return M===y||M==="y"}return!0}).map(P=>[P.placement,P.overflows.filter(M=>M>0).reduce((M,z)=>M+z,0)]).sort((P,M)=>P[1]-M[1])[0])==null?void 0:N[0];F&&(O=F);break}case"initialPlacement":O=c;break}if(r!==O)return{reset:{placement:O}}}return{}}}};function Pt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function At(e){return qn.some(t=>e[t]>=0)}const fo=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...i}=le(e,t);switch(r){case"referenceHidden":{const s=await o.detectOverflow(t,{...i,elementContext:"reference"}),c=Pt(s,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:At(c)}}}case"escaped":{const s=await o.detectOverflow(t,{...i,altBoundary:!0}),c=Pt(s,n.floating);return{data:{escapedOffsets:c,escaped:At(c)}}}default:return{}}}}},jt=new Set(["left","top"]);async function uo(e,t){const{placement:n,platform:o,elements:r}=e,i=await(o.isRTL==null?void 0:o.isRTL(r.floating)),s=de(n),c=Pe(n),l=oe(n)==="y",a=jt.has(s)?-1:1,u=i&&l?-1:1,p=le(t,e);let{mainAxis:g,crossAxis:h,alignmentAxis:m}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return c&&typeof m=="number"&&(h=c==="end"?m*-1:m),l?{x:h*u,y:g*a}:{x:g*a,y:h*u}}const po=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:i,placement:s,middlewareData:c}=t,l=await uo(t,e);return s===((n=c.offset)==null?void 0:n.placement)&&(o=c.arrow)!=null&&o.alignmentOffset?{}:{x:r+l.x,y:i+l.y,data:{...l,placement:s}}}}},ho=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:i}=t,{mainAxis:s=!0,crossAxis:c=!1,limiter:l={fn:y=>{let{x,y:C}=y;return{x,y:C}}},...a}=le(e,t),u={x:n,y:o},p=await i.detectOverflow(t,a),g=oe(r),h=at(g);let m=u[h],f=u[g];const S=(y,x)=>Lt(x+p[y==="y"?"top":"left"],x,x-p[y==="y"?"bottom":"right"]);s&&(m=S(h,m)),c&&(f=S(g,f));const v=l.fn({...t,[h]:m,[g]:f});return{...v,data:{x:v.x-n,y:v.y-o,enabled:{[h]:s,[g]:c}}}}}},mo=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:i,placement:s,rects:c,middlewareData:l}=t,{offset:a=0,mainAxis:u=!0,crossAxis:p=!0}=le(e,t),g={x:r,y:i},h=oe(s),m=at(h);let f=g[m],S=g[h];const v=le(a,t),y=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:(n=v.mainAxis)!=null?n:0,crossAxis:(o=v.crossAxis)!=null?o:0};if(u){const R=m==="y"?"height":"width",b=c.reference[m]-c.floating[R]+y.mainAxis,A=c.reference[m]+c.reference[R]-y.mainAxis;f<b?f=b:f>A&&(f=A)}if(p){var x,C;const R=m==="y"?"width":"height",b=jt.has(de(s)),A=c.reference[h]-c.floating[R]+(b&&((x=l.offset)==null?void 0:x[h])||0)+(b?0:y.crossAxis),T=c.reference[h]+c.reference[R]+(b?0:((C=l.offset)==null?void 0:C[h])||0)-(b?y.crossAxis:0);S<A?S=A:S>T&&(S=T)}return{[m]:f,[h]:S}}}},go=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:i}=t,{apply:s=()=>{},...c}=le(e,t),l=await r.detectOverflow(t,c),a=de(n),u=Pe(n),p=oe(n)==="y",{width:g,height:h}=o.floating;let m,f;a==="top"||a==="bottom"?(m=a,f=u===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(f=a,m=u==="end"?"top":"bottom");const S=h-l.top-l.bottom,v=g-l.left-l.right,y=fe(h-l[m],S),x=fe(g-l[f],v),C=t.middlewareData.shift,R=!C;let b=y,A=x;C!=null&&C.enabled.x&&(A=v),C!=null&&C.enabled.y&&(b=S),R&&!u&&(p?A=g-2*ie(l.left,l.right):b=h-2*ie(l.top,l.bottom)),await s({...t,availableWidth:A,availableHeight:b});const T=await r.getDimensions(i.floating);return g!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function We(){return typeof window<"u"}function Ae(e){return kt(e)?(e.nodeName||"").toLowerCase():"#document"}function X(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function ae(e){var t;return(t=(kt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function kt(e){return We()?e instanceof Node||e instanceof X(e).Node:!1}function re(e){return We()?e instanceof Element||e instanceof X(e).Element:!1}function pe(e){return We()?e instanceof HTMLElement||e instanceof X(e).HTMLElement:!1}function Et(e){return!We()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof X(e).ShadowRoot}function $e(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=se(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function vo(e){return/^(table|td|th)$/.test(Ae(e))}function ze(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const xo=/transform|translate|scale|rotate|perspective|filter/,wo=/paint|layout|strict|content/,ve=e=>!!e&&e!=="none";let Ze;function ut(e){const t=re(e)?se(e):e;return ve(t.transform)||ve(t.translate)||ve(t.scale)||ve(t.rotate)||ve(t.perspective)||!pt()&&(ve(t.backdropFilter)||ve(t.filter))||xo.test(t.willChange||"")||wo.test(t.contain||"")}function yo(e){let t=xe(e);for(;pe(t)&&!_e(t);){if(ut(t))return t;if(ze(t))return null;t=xe(t)}return null}function pt(){return Ze==null&&(Ze=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ze}function _e(e){return/^(html|body|#document)$/.test(Ae(e))}function se(e){return X(e).getComputedStyle(e)}function Ue(e){return re(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function xe(e){if(Ae(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Et(e)&&e.host||ae(e);return Et(t)?t.host:t}function Ht(e){const t=xe(e);return _e(t)?(e.ownerDocument||e).body:pe(t)&&$e(t)?t:Ht(t)}function Ie(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=Ht(e),i=r===((o=e.ownerDocument)==null?void 0:o.body),s=X(r);if(i){const c=tt(s);return t.concat(s,s.visualViewport||[],$e(r)?r:[],c&&n?Ie(c):[])}else return t.concat(r,Ie(r,[],n))}function tt(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Vt(e){const t=se(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=pe(e),i=r?e.offsetWidth:n,s=r?e.offsetHeight:o,c=De(n)!==i||De(o)!==s;return c&&(n=i,o=s),{width:n,height:o,$:c}}function ht(e){return re(e)?e:e.contextElement}function Re(e){const t=ht(e);if(!pe(t))return ce(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:i}=Vt(t);let s=(i?De(n.width):n.width)/o,c=(i?De(n.height):n.height)/r;return(!s||!Number.isFinite(s))&&(s=1),(!c||!Number.isFinite(c))&&(c=1),{x:s,y:c}}const So=ce(0);function Ft(e){const t=X(e);return!pt()||!t.visualViewport?So:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Co(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===X(e)}function we(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),i=ht(e);let s=ce(1);t&&(o?re(o)&&(s=Re(o)):s=Re(e));const c=Co(i,n,o)?Ft(i):ce(0);let l=(r.left+c.x)/s.x,a=(r.top+c.y)/s.y,u=r.width/s.x,p=r.height/s.y;if(i&&o){const g=X(i),h=re(o)?X(o):o;let m=g,f=tt(m);for(;f&&h!==m;){const S=Re(f),v=f.getBoundingClientRect(),y=se(f),x=v.left+(f.clientLeft+parseFloat(y.paddingLeft))*S.x,C=v.top+(f.clientTop+parseFloat(y.paddingTop))*S.y;l*=S.x,a*=S.y,u*=S.x,p*=S.y,l+=x,a+=C,m=X(f),f=tt(m)}}return ke({width:u,height:p,x:l,y:a})}function Ke(e,t){const n=Ue(e).scrollLeft;return t?t.left+n:we(ae(e)).left+n}function Bt(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-Ke(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function bo(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const i=r==="fixed",s=ae(o),c=t?ze(t.floating):!1;if(o===s||c&&i)return n;let l={scrollLeft:0,scrollTop:0},a=ce(1);const u=ce(0),p=pe(o);if((p||!i)&&((Ae(o)!=="body"||$e(s))&&(l=Ue(o)),p)){const h=we(o);a=Re(o),u.x=h.x+o.clientLeft,u.y=h.y+o.clientTop}const g=s&&!p&&!i?Bt(s,l):ce(0);return{width:n.width*a.x,height:n.height*a.y,x:n.x*a.x-l.scrollLeft*a.x+u.x+g.x,y:n.y*a.y-l.scrollTop*a.y+u.y+g.y}}function Ro(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function Po(e){const t=Ue(e),n=e.ownerDocument.body,o=ie(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=ie(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let i=-t.scrollLeft+Ke(e);const s=-t.scrollTop;return se(n).direction==="rtl"&&(i+=ie(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:i,y:s}}const Ao=25;function Eo(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=X(e),i=ae(e),s=r.visualViewport;let c=i.clientWidth,l=i.clientHeight,a=0,u=0;if(s){const g=!pt()||t==="fixed";o?g||(a=-s.offsetLeft,u=-s.offsetTop):(c=s.width,l=s.height,g&&(a=s.offsetLeft,u=s.offsetTop))}if(Ke(i)<=0){const g=i.ownerDocument,h=g.body,m=getComputedStyle(h),f=g.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,S=Math.abs(i.clientWidth-h.clientWidth-f),v=getComputedStyle(i).scrollbarGutter==="stable both-edges"?S/2:S;v<=Ao&&(c-=v)}return{width:c,height:l,x:a,y:u}}function To(e,t){const n=we(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,i=Re(e),s=e.clientWidth*i.x,c=e.clientHeight*i.y,l=r*i.x,a=o*i.y;return{width:s,height:c,x:l,y:a}}function Tt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=Eo(e,n,t);else if(t==="document")o=Po(ae(e));else if(re(t))o=To(t,n);else{const r=Ft(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return ke(o)}function Oo(e,t){const n=t.get(e);if(n)return n;let o=Ie(e,[],!1).filter(c=>re(c)&&Ae(c)!=="body"),r=null;const i=se(e).position==="fixed";let s=i?xe(e):e;for(;re(s)&&!_e(s);){const c=se(s),l=ut(s),a=r?r.position:i?"fixed":"";!l&&(a==="fixed"||a==="absolute"&&c.position==="static")?o=o.filter(p=>p!==s):r=c,s=xe(s)}return t.set(e,o),o}function _o(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const s=[...n==="clippingAncestors"?ze(t)?[]:Oo(t,this._c):[].concat(n),o],c=Tt(t,s[0],r);let l=c.top,a=c.right,u=c.bottom,p=c.left;for(let g=1;g<s.length;g++){const h=Tt(t,s[g],r);l=ie(h.top,l),a=fe(h.right,a),u=fe(h.bottom,u),p=ie(h.left,p)}return{width:a-p,height:u-l,x:p,y:l}}function Io(e){const{width:t,height:n}=Vt(e);return{width:t,height:n}}function No(e,t,n){const o=pe(t),r=ae(t),i=n==="fixed",s=we(e,!0,i,t);let c={scrollLeft:0,scrollTop:0};const l=ce(0);if((o||!i)&&((Ae(t)!=="body"||$e(r))&&(c=Ue(t)),o)){const g=we(t,!0,i,t);l.x=g.x+t.clientLeft,l.y=g.y+t.clientTop}!o&&r&&(l.x=Ke(r));const a=r&&!o&&!i?Bt(r,c):ce(0),u=s.left+c.scrollLeft-l.x-a.x,p=s.top+c.scrollTop-l.y-a.y;return{x:u,y:p,width:s.width,height:s.height}}function Je(e){return se(e).position==="static"}function Ot(e,t){if(!pe(e)||se(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return ae(e)===n&&(n=n.ownerDocument.body),n}function Wt(e,t){const n=X(e);if(ze(e))return n;if(!pe(e)){let r=xe(e);for(;r&&!_e(r);){if(re(r)&&!Je(r))return r;r=xe(r)}return n}let o=Ot(e,t);for(;o&&vo(o)&&Je(o);)o=Ot(o,t);return o&&_e(o)&&Je(o)&&!ut(o)?n:o||yo(e)||n}const Mo=async function(e){const t=this.getOffsetParent||Wt,n=this.getDimensions,o=await n(e.floating);return{reference:No(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Lo(e){return se(e).direction==="rtl"}const Do={convertOffsetParentRelativeRectToViewportRelativeRect:bo,getDocumentElement:ae,getClippingRect:_o,getOffsetParent:Wt,getElementRects:Mo,getClientRects:Ro,getDimensions:Io,getScale:Re,isElement:re,isRTL:Lo};function $t(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function jo(e,t,n){let o=null,r;const i=ae(e);function s(){var u;clearTimeout(r),(u=o)==null||u.disconnect(),o=null}function c(u,p){u===void 0&&(u=!1),p===void 0&&(p=1),s();const g=e.getBoundingClientRect(),{left:h,top:m,width:f,height:S}=g;if(u||t(),!f||!S)return;const v=Me(m),y=Me(i.clientWidth-(h+f)),x=Me(i.clientHeight-(m+S)),C=Me(h),b={rootMargin:-v+"px "+-y+"px "+-x+"px "+-C+"px",threshold:ie(0,fe(1,p))||1};let A=!0;function T(B){const I=B[0].intersectionRatio;if(!$t(g,e.getBoundingClientRect()))return c();if(I!==p){if(!A)return c();I?c(!1,I):r=setTimeout(()=>{c(!1,1e-7)},1e3)}A=!1}try{o=new IntersectionObserver(T,{...b,root:i.ownerDocument})}catch{o=new IntersectionObserver(T,b)}o.observe(e)}const l=X(e),a=()=>c(n);return l.addEventListener("resize",a),c(!0),()=>{l.removeEventListener("resize",a),s()}}function ko(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:i=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=o,a=ht(e),u=r||i?[...a?Ie(a):[],...t?Ie(t):[]]:[];u.forEach(v=>{r&&v.addEventListener("scroll",n),i&&v.addEventListener("resize",n)});const p=a&&c?jo(a,n,i):null;let g=-1,h=null;s&&(h=new ResizeObserver(v=>{let[y]=v;y&&y.target===a&&h&&t&&(h.unobserve(t),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var x;(x=h)==null||x.observe(t)})),n()}),a&&!l&&h.observe(a),t&&h.observe(t));let m,f=l?we(e):null;l&&S();function S(){const v=we(e);f&&!$t(f,v)&&n(),f=v,m=requestAnimationFrame(S)}return n(),()=>{var v;u.forEach(y=>{r&&y.removeEventListener("scroll",n),i&&y.removeEventListener("resize",n)}),p==null||p(),(v=h)==null||v.disconnect(),h=null,l&&cancelAnimationFrame(m)}}const Ho=po,Vo=ho,Fo=ao,Bo=go,Wo=fo,_t=lo,$o=mo,zo=(e,t,n)=>{const o=new Map,r=n??{},i={...Do,...r.platform,_c:o};return co(e,t,{...r,platform:i})};var Uo=typeof document<"u",Ko=function(){},Le=Uo?d.useLayoutEffect:Ko;function He(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,o,r;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(o=n;o--!==0;)if(!He(e[o],t[o]))return!1;return!0}if(r=Object.keys(e),n=r.length,n!==Object.keys(t).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(t,r[o]))return!1;for(o=n;o--!==0;){const i=r[o];if(!(i==="_owner"&&e.$$typeof)&&!He(e[i],t[i]))return!1}return!0}return e!==e&&t!==t}function zt(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function It(e,t){const n=zt(e);return Math.round(t*n)/n}function Qe(e){const t=d.useRef(e);return Le(()=>{t.current=e}),t}function Yo(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:r,elements:{reference:i,floating:s}={},transform:c=!0,whileElementsMounted:l,open:a}=e,[u,p]=d.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[g,h]=d.useState(o);He(g,o)||h(o);const[m,f]=d.useState(null),[S,v]=d.useState(null),y=d.useCallback(P=>{P!==b.current&&(b.current=P,f(P))},[]),x=d.useCallback(P=>{P!==A.current&&(A.current=P,v(P))},[]),C=i||m,R=s||S,b=d.useRef(null),A=d.useRef(null),T=d.useRef(u),B=l!=null,I=Qe(l),H=Qe(r),W=Qe(a),N=d.useCallback(()=>{if(!b.current||!A.current)return;const P={placement:t,strategy:n,middleware:g};H.current&&(P.platform=H.current),zo(b.current,A.current,P).then(M=>{const z={...M,isPositioned:W.current!==!1};D.current&&!He(T.current,z)&&(T.current=z,it.flushSync(()=>{p(z)}))})},[g,t,n,H,W]);Le(()=>{a===!1&&T.current.isPositioned&&(T.current.isPositioned=!1,p(P=>({...P,isPositioned:!1})))},[a]);const D=d.useRef(!1);Le(()=>(D.current=!0,()=>{D.current=!1}),[]),Le(()=>{if(C&&(b.current=C),R&&(A.current=R),C&&R){if(I.current)return I.current(C,R,N);N()}},[C,R,N,I,B]);const V=d.useMemo(()=>({reference:b,floating:A,setReference:y,setFloating:x}),[y,x]),O=d.useMemo(()=>({reference:C,floating:R}),[C,R]),F=d.useMemo(()=>{const P={position:n,left:0,top:0};if(!O.floating)return P;const M=It(O.floating,u.x),z=It(O.floating,u.y);return c?{...P,transform:"translate("+M+"px, "+z+"px)",...zt(O.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:M,top:z}},[n,c,O.floating,u.x,u.y]);return d.useMemo(()=>({...u,update:N,refs:V,elements:O,floatingStyles:F}),[u,N,V,O,F])}const Xo=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:o,padding:r}=typeof e=="function"?e(n):e;return o&&t(o)?o.current!=null?_t({element:o.current,padding:r}).fn(n):{}:o?_t({element:o,padding:r}).fn(n):{}}}},Go=(e,t)=>{const n=Ho(e);return{name:n.name,fn:n.fn,options:[e,t]}},qo=(e,t)=>{const n=Vo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Zo=(e,t)=>({fn:$o(e).fn,options:[e,t]}),Jo=(e,t)=>{const n=Fo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Qo=(e,t)=>{const n=Bo(e);return{name:n.name,fn:n.fn,options:[e,t]}},er=(e,t)=>{const n=Wo(e);return{name:n.name,fn:n.fn,options:[e,t]}},tr=(e,t)=>{const n=Xo(e);return{name:n.name,fn:n.fn,options:[e,t]}};var nr="Arrow",Ut=d.forwardRef((e,t)=>{const{children:n,width:o=10,height:r=5,...i}=e;return w.jsx(K.svg,{...i,ref:t,width:o,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:w.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ut.displayName=nr;var or=Ut,mt="Popper",[Kt,Yt]=Nt(mt),[rr,Xt]=Kt(mt),Gt=e=>{const{__scopePopper:t,children:n}=e,[o,r]=d.useState(null),[i,s]=d.useState(void 0);return w.jsx(rr,{scope:t,anchor:o,onAnchorChange:r,placementState:i,setPlacementState:s,children:n})};Gt.displayName=mt;var qt="PopperAnchor",Zt=d.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:o,...r}=e,i=Xt(qt,n),s=d.useRef(null),c=i.onAnchorChange,l=d.useCallback(m=>{s.current=m,m&&c(m)},[c]),a=q(t,l),u=d.useRef(null);d.useEffect(()=>{if(!o)return;const m=u.current;u.current=o.current,m!==u.current&&c(u.current)});const p=i.placementState&&vt(i.placementState),g=p==null?void 0:p[0],h=p==null?void 0:p[1];return o?null:w.jsx(K.div,{"data-radix-popper-side":g,"data-radix-popper-align":h,...r,ref:a})});Zt.displayName=qt;var gt="PopperContent",[sr,ir]=Kt(gt),Jt=d.forwardRef((e,t)=>{var k,Y,j,_,L,ne;const{__scopePopper:n,side:o="bottom",sideOffset:r=0,align:i="center",alignOffset:s=0,arrowPadding:c=0,avoidCollisions:l=!0,collisionBoundary:a=[],collisionPadding:u=0,sticky:p="partial",hideWhenDetached:g=!1,updatePositionStrategy:h="optimized",onPlaced:m,...f}=e,S=Xt(gt,n),[v,y]=d.useState(null),x=q(t,y),[C,R]=d.useState(null),b=$n(C),A=(b==null?void 0:b.width)??0,T=(b==null?void 0:b.height)??0,B=o+(i!=="center"?"-"+i:""),I=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},H=Array.isArray(a)?a:[a],W=H.length>0,N={padding:I,boundary:H.filter(lr),altBoundary:W},{refs:D,floatingStyles:V,placement:O,isPositioned:F,middlewareData:P}=Yo({strategy:"fixed",placement:B,whileElementsMounted:(...J)=>ko(...J,{animationFrame:h==="always"}),elements:{reference:S.anchor},middleware:[Go({mainAxis:r+T,alignmentAxis:s}),l&&qo({mainAxis:!0,crossAxis:!1,limiter:p==="partial"?Zo():void 0,...N}),l&&Jo({...N}),Qo({...N,apply:({elements:J,rects:be,availableWidth:Ee,availableHeight:Te})=>{const{width:Mn,height:Ln}=be.reference,Ne=J.floating.style;Ne.setProperty("--radix-popper-available-width",`${Ee}px`),Ne.setProperty("--radix-popper-available-height",`${Te}px`),Ne.setProperty("--radix-popper-anchor-width",`${Mn}px`),Ne.setProperty("--radix-popper-anchor-height",`${Ln}px`)}}),C&&tr({element:C,padding:c}),ar({arrowWidth:A,arrowHeight:T}),g&&er({strategy:"referenceHidden",...N,boundary:W?N.boundary:void 0})]}),M=S.setPlacementState;ee(()=>(M(O),()=>{M(void 0)}),[O,M]);const[z,te]=vt(O),$=Fe(m);ee(()=>{F&&($==null||$())},[F,$]);const G=(k=P.arrow)==null?void 0:k.x,Z=(Y=P.arrow)==null?void 0:Y.y,Ce=((j=P.arrow)==null?void 0:j.centerOffset)!==0,[ge,E]=d.useState();return ee(()=>{v&&E(window.getComputedStyle(v).zIndex)},[v]),w.jsx("div",{ref:D.setFloating,"data-radix-popper-content-wrapper":"",style:{...V,transform:F?V.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ge,"--radix-popper-transform-origin":[(_=P.transformOrigin)==null?void 0:_.x,(L=P.transformOrigin)==null?void 0:L.y].join(" "),...((ne=P.hide)==null?void 0:ne.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:w.jsx(sr,{scope:n,placedSide:z,placedAlign:te,onArrowChange:R,arrowX:G,arrowY:Z,shouldHideArrow:Ce,children:w.jsx(K.div,{"data-side":z,"data-align":te,...f,ref:x,style:{...f.style,animation:F?void 0:"none"}})})})});Jt.displayName=gt;var Qt="PopperArrow",cr={top:"bottom",right:"left",bottom:"top",left:"right"},en=d.forwardRef(function(t,n){const{__scopePopper:o,...r}=t,i=ir(Qt,o),s=cr[i.placedSide];return w.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:w.jsx(or,{...r,ref:n,style:{...r.style,display:"block"}})})});en.displayName=Qt;function lr(e){return e!==null}var ar=e=>({name:"transformOrigin",options:e,fn(t){var S,v,y;const{placement:n,rects:o,middlewareData:r}=t,s=((S=r.arrow)==null?void 0:S.centerOffset)!==0,c=s?0:e.arrowWidth,l=s?0:e.arrowHeight,[a,u]=vt(n),p={start:"0%",center:"50%",end:"100%"}[u],g=(((v=r.arrow)==null?void 0:v.x)??0)+c/2,h=(((y=r.arrow)==null?void 0:y.y)??0)+l/2;let m="",f="";return a==="bottom"?(m=s?p:`${g}px`,f=`${-l}px`):a==="top"?(m=s?p:`${g}px`,f=`${o.floating.height+l}px`):a==="right"?(m=`${-l}px`,f=s?p:`${h}px`):a==="left"&&(m=`${o.floating.width+l}px`,f=s?p:`${h}px`),{data:{x:m,y:f}}}});function vt(e){const[t,n="center"]=e.split("-");return[t,n]}var fr=Gt,dr=Zt,ur=Jt,pr=en,tn=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"}),hr="VisuallyHidden",nn=d.forwardRef((e,t)=>w.jsx(K.span,{...e,ref:t,style:{...tn,...e.style}}));nn.displayName=hr;var zr=nn,mr=[" ","Enter","ArrowUp","ArrowDown"],gr=[" ","Enter"],ye="Select",[Ye,Xe,vr]=Kn(ye),[Se]=Nt(ye,[vr,Yt]),Ge=Yt(),[xr,he]=Se(ye),[wr,yr]=Se(ye),Sr="SelectProvider";function on(e){const{__scopeSelect:t,children:n,open:o,defaultOpen:r,onOpenChange:i,value:s,defaultValue:c,onValueChange:l,dir:a,name:u,autoComplete:p,disabled:g,required:h,form:m,internal_do_not_use_render:f}=e,S=Ge(t),[v,y]=d.useState(null),[x,C]=d.useState(null),[R,b]=d.useState(!1),A=zn(a),[T,B]=yt({prop:o,defaultProp:r??!1,onChange:i,caller:ye}),[I,H]=yt({prop:s,defaultProp:c,onChange:l,caller:ye}),W=d.useRef(null),N=d.useRef(I);d.useEffect(()=>{const $=m?v==null?void 0:v.ownerDocument.getElementById(m):v==null?void 0:v.form;if($ instanceof HTMLFormElement){const G=()=>H(N.current);return $.addEventListener("reset",G),()=>$.removeEventListener("reset",G)}},[m,v,H]);const D=v?!!m||!!v.closest("form"):!0,[V,O]=d.useState(new Set),F=ct(),P=Array.from(V).map($=>$.props.value).join(";"),M=d.useCallback($=>{O(G=>new Set(G).add($))},[]),z=d.useCallback($=>{O(G=>{const Z=new Set(G);return Z.delete($),Z})},[]),te={required:h,trigger:v,onTriggerChange:y,valueNode:x,onValueNodeChange:C,valueNodeHasChildren:R,onValueNodeHasChildrenChange:b,contentId:F,value:I,onValueChange:H,open:T,onOpenChange:B,dir:A,triggerPointerDownPosRef:W,disabled:g,name:u,autoComplete:p,form:m,nativeOptions:V,nativeSelectKey:P,isFormControl:D};return w.jsx(fr,{...S,children:w.jsx(xr,{scope:t,...te,children:w.jsx(Ye.Provider,{scope:t,children:w.jsx(wr,{scope:t,onNativeOptionAdd:M,onNativeOptionRemove:z,children:Hr(f)?f(te):n})})})})}on.displayName=Sr;var rn=e=>{const{__scopeSelect:t,children:n,...o}=e;return w.jsx(on,{__scopeSelect:t,...o,internal_do_not_use_render:({isFormControl:r})=>w.jsxs(w.Fragment,{children:[n,r?w.jsx(_n,{__scopeSelect:t}):null]})})};rn.displayName=ye;var sn="SelectTrigger",xt=d.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:o=!1,...r}=e,i=Ge(n),s=he(sn,n),c=s.disabled||o,l=q(t,s.onTriggerChange),a=Xe(n),u=d.useRef("touch"),[p,g,h]=In(f=>{const S=a().filter(x=>!x.disabled),v=S.find(x=>x.value===s.value),y=Nn(S,f,v);y!==void 0&&s.onValueChange(y.value)}),m=f=>{c||(s.onOpenChange(!0),h()),f&&(s.triggerPointerDownPosRef.current={x:Math.round(f.pageX),y:Math.round(f.pageY)})};return w.jsx(dr,{asChild:!0,...i,children:w.jsx(K.button,{type:"button",role:"combobox","aria-controls":s.open?s.contentId:void 0,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":qe(s.value)?"":void 0,...r,ref:l,onClick:U(r.onClick,f=>{f.currentTarget.focus(),u.current!=="mouse"&&m(f)}),onPointerDown:U(r.onPointerDown,f=>{u.current=f.pointerType;const S=f.target;S.hasPointerCapture(f.pointerId)&&S.releasePointerCapture(f.pointerId),f.button===0&&f.ctrlKey===!1&&f.pointerType==="mouse"&&(m(f),f.preventDefault())}),onKeyDown:U(r.onKeyDown,f=>{const S=p.current!=="";!(f.ctrlKey||f.altKey||f.metaKey)&&f.key.length===1&&g(f.key),!(S&&f.key===" ")&&mr.includes(f.key)&&(m(),f.preventDefault())})})})});xt.displayName=sn;var cn="SelectValue",ln=d.forwardRef((e,t)=>{const{__scopeSelect:n,className:o,style:r,children:i,placeholder:s="",...c}=e,l=he(cn,n),{onValueNodeHasChildrenChange:a}=l,u=i!==void 0,p=q(t,l.onValueNodeChange);ee(()=>{a(u)},[a,u]);const g=qe(l.value);return w.jsx(K.span,{...c,asChild:g?!1:c.asChild,ref:p,style:{pointerEvents:"none"},children:w.jsx(d.Fragment,{children:g?s:i},g?"placeholder":"value")})});ln.displayName=cn;var Cr="SelectIcon",an=d.forwardRef((e,t)=>{const{__scopeSelect:n,children:o,...r}=e;return w.jsx(K.span,{"aria-hidden":!0,...r,ref:t,children:o||"▼"})});an.displayName=Cr;var fn="SelectPortal",[br,Rr]=Se(fn,{forceMount:void 0}),dn=e=>{const{__scopeSelect:t,forceMount:n,...o}=e;return w.jsx(br,{scope:e.__scopeSelect,forceMount:n,children:w.jsx(Dn,{asChild:!0,...o})})};dn.displayName=fn;var ue="SelectContent",un=d.forwardRef((e,t)=>{const n=Rr(ue,e.__scopeSelect),{forceMount:o=n.forceMount,...r}=e,i=he(ue,e.__scopeSelect),[s,c]=d.useState();return ee(()=>{c(new DocumentFragment)},[]),w.jsx(jn,{present:o||i.open,children:({present:l})=>l?w.jsx(mn,{...r,ref:t}):w.jsx(pn,{...r,fragment:s})})});un.displayName=ue;var pn=d.forwardRef((e,t)=>{const{__scopeSelect:n,children:o,fragment:r}=e;return r?it.createPortal(w.jsx(hn,{scope:n,children:w.jsx(Ye.Slot,{scope:n,children:w.jsx("div",{ref:t,children:o})})}),r):null});pn.displayName="SelectContentFragment";var Q=10,[hn,me]=Se(ue),Pr="SelectContentImpl",Ar=Wn("SelectContent.RemoveScroll"),mn=d.forwardRef((e,t)=>{const{__scopeSelect:n}=e,{position:o="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:i,onPointerDownOutside:s,side:c,sideOffset:l,align:a,alignOffset:u,arrowPadding:p,collisionBoundary:g,collisionPadding:h,sticky:m,hideWhenDetached:f,avoidCollisions:S,...v}=e,y=he(ue,n),[x,C]=d.useState(null),[R,b]=d.useState(null),A=q(t,C),[T,B]=d.useState(null),[I,H]=d.useState(null),W=Xe(n),[N,D]=d.useState(!1),V=d.useRef(!1);d.useEffect(()=>{if(x)return kn(x)},[x]),Hn();const O=d.useCallback(E=>{const[k,...Y]=W().map(L=>L.ref.current),[j]=Y.slice(-1),_=document.activeElement;for(const L of E)if(L===_||(L==null||L.scrollIntoView({block:"nearest"}),L===k&&R&&(R.scrollTop=0),L===j&&R&&(R.scrollTop=R.scrollHeight),L==null||L.focus(),document.activeElement!==_))return},[W,R]),F=d.useCallback(()=>O([T,x]),[O,T,x]);d.useEffect(()=>{N&&F()},[N,F]);const{onOpenChange:P,triggerPointerDownPosRef:M}=y;d.useEffect(()=>{if(x){let E={x:0,y:0};const k=j=>{var _,L;E={x:Math.abs(Math.round(j.pageX)-(((_=M.current)==null?void 0:_.x)??0)),y:Math.abs(Math.round(j.pageY)-(((L=M.current)==null?void 0:L.y)??0))}},Y=j=>{E.x<=10&&E.y<=10?j.preventDefault():j.composedPath().includes(x)||P(!1),document.removeEventListener("pointermove",k),M.current=null};return M.current!==null&&(document.addEventListener("pointermove",k),document.addEventListener("pointerup",Y,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",k),document.removeEventListener("pointerup",Y,{capture:!0})}}},[x,P,M]),d.useEffect(()=>{const E=()=>P(!1);return window.addEventListener("blur",E),window.addEventListener("resize",E),()=>{window.removeEventListener("blur",E),window.removeEventListener("resize",E)}},[P]);const[z,te]=In(E=>{const k=W().filter(_=>!_.disabled),Y=k.find(_=>_.ref.current===document.activeElement),j=Nn(k,E,Y);j&&setTimeout(()=>{var _;return(_=j.ref.current)==null?void 0:_.focus()})}),$=d.useCallback((E,k,Y)=>{const j=!V.current&&!Y;(y.value!==void 0&&y.value===k||j)&&(B(E),j&&(V.current=!0))},[y.value]),G=d.useCallback(()=>x==null?void 0:x.focus(),[x]),Z=d.useCallback((E,k,Y)=>{const j=!V.current&&!Y;(y.value!==void 0&&y.value===k||j)&&H(E)},[y.value]),Ce=o==="popper"?nt:gn,ge=Ce===nt?{side:c,sideOffset:l,align:a,alignOffset:u,arrowPadding:p,collisionBoundary:g,collisionPadding:h,sticky:m,hideWhenDetached:f,avoidCollisions:S}:{};return w.jsx(hn,{scope:n,content:x,viewport:R,onViewportChange:b,itemRefCallback:$,selectedItem:T,onItemLeave:G,itemTextRefCallback:Z,focusSelectedItem:F,selectedItemText:I,position:o,isPositioned:N,searchRef:z,children:w.jsx(Vn,{as:Ar,allowPinchZoom:!0,children:w.jsx(Fn,{asChild:!0,trapped:y.open,onMountAutoFocus:E=>{E.preventDefault()},onUnmountAutoFocus:U(r,E=>{var k;(k=y.trigger)==null||k.focus({preventScroll:!0}),E.preventDefault()}),children:w.jsx(Bn,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:s,onFocusOutside:E=>E.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:w.jsx(Ce,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:E=>E.preventDefault(),...v,...ge,onPlaced:()=>D(!0),ref:A,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:U(v.onKeyDown,E=>{const k=E.ctrlKey||E.altKey||E.metaKey;if(E.key==="Tab"&&E.preventDefault(),!k&&E.key.length===1&&te(E.key),["ArrowUp","ArrowDown","Home","End"].includes(E.key)){let j=W().filter(_=>!_.disabled).map(_=>_.ref.current);if(["ArrowUp","End"].includes(E.key)&&(j=j.slice().reverse()),["ArrowUp","ArrowDown"].includes(E.key)){const _=E.target,L=j.indexOf(_);j=j.slice(L+1)}setTimeout(()=>O(j)),E.preventDefault()}})})})})})})});mn.displayName=Pr;var Er="SelectItemAlignedPosition",gn=d.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:o,...r}=e,i=he(ue,n),s=me(ue,n),[c,l]=d.useState(null),[a,u]=d.useState(null),p=q(t,u),g=Xe(n),h=d.useRef(!1),m=d.useRef(!0),{viewport:f,selectedItem:S,selectedItemText:v,focusSelectedItem:y}=s,x=d.useCallback(()=>{if(i.trigger&&i.valueNode&&c&&a&&f&&S&&v){const A=i.trigger.getBoundingClientRect(),T=a.getBoundingClientRect(),B=i.valueNode.getBoundingClientRect(),I=v.getBoundingClientRect();if(i.dir!=="rtl"){const _=I.left-T.left,L=B.left-_,ne=A.left-L,J=A.width+ne,be=Math.max(J,T.width),Ee=window.innerWidth-Q,Te=St(L,[Q,Math.max(Q,Ee-be)]);c.style.minWidth=J+"px",c.style.left=Te+"px"}else{const _=T.right-I.right,L=window.innerWidth-B.right-_,ne=window.innerWidth-A.right-L,J=A.width+ne,be=Math.max(J,T.width),Ee=window.innerWidth-Q,Te=St(L,[Q,Math.max(Q,Ee-be)]);c.style.minWidth=J+"px",c.style.right=Te+"px"}const H=g(),W=window.innerHeight-Q*2,N=f.scrollHeight,D=window.getComputedStyle(a),V=parseInt(D.borderTopWidth,10),O=parseInt(D.paddingTop,10),F=parseInt(D.borderBottomWidth,10),P=parseInt(D.paddingBottom,10),M=V+O+N+P+F,z=Math.min(S.offsetHeight*5,M),te=window.getComputedStyle(f),$=parseInt(te.paddingTop,10),G=parseInt(te.paddingBottom,10),Z=A.top+A.height/2-Q,Ce=W-Z,ge=S.offsetHeight/2,E=S.offsetTop+ge,k=V+O+E,Y=M-k;if(k<=Z){const _=H.length>0&&S===H[H.length-1].ref.current;c.style.bottom="0px";const L=a.clientHeight-f.offsetTop-f.offsetHeight,ne=Math.max(Ce,ge+(_?G:0)+L+F),J=k+ne;c.style.height=J+"px"}else{const _=H.length>0&&S===H[0].ref.current;c.style.top="0px";const ne=Math.max(Z,V+f.offsetTop+(_?$:0)+ge)+Y;c.style.height=ne+"px",f.scrollTop=k-Z+f.offsetTop}c.style.margin=`${Q}px 0`,c.style.minHeight=z+"px",c.style.maxHeight=W+"px",o==null||o(),requestAnimationFrame(()=>h.current=!0)}},[g,i.trigger,i.valueNode,c,a,f,S,v,i.dir,o]);ee(()=>x(),[x]);const[C,R]=d.useState();ee(()=>{a&&R(window.getComputedStyle(a).zIndex)},[a]);const b=d.useCallback(A=>{A&&m.current===!0&&(x(),y==null||y(),m.current=!1)},[x,y]);return w.jsx(Or,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:h,onScrollButtonChange:b,children:w.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:C},children:w.jsx(K.div,{...r,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});gn.displayName=Er;var Tr="SelectPopperPosition",nt=d.forwardRef((e,t)=>{const{__scopeSelect:n,align:o="start",collisionPadding:r=Q,...i}=e,s=Ge(n);return w.jsx(ur,{...s,...i,ref:t,align:o,collisionPadding:r,style:{boxSizing:"border-box",...i.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)"}})});nt.displayName=Tr;var[Or,wt]=Se(ue,{}),ot="SelectViewport",vn=d.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:o,...r}=e,i=me(ot,n),s=wt(ot,n),c=q(t,i.onViewportChange),l=d.useRef(0);return w.jsxs(w.Fragment,{children:[w.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:o}),w.jsx(Ye.Slot,{scope:n,children:w.jsx(K.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:U(r.onScroll,a=>{const u=a.currentTarget,{contentWrapper:p,shouldExpandOnScrollRef:g}=s;if(g!=null&&g.current&&p){const h=Math.abs(l.current-u.scrollTop);if(h>0){const m=window.innerHeight-Q*2,f=parseFloat(p.style.minHeight),S=parseFloat(p.style.height),v=Math.max(f,S);if(v<m){const y=v+h,x=Math.min(m,y),C=y-x;p.style.height=x+"px",p.style.bottom==="0px"&&(u.scrollTop=C>0?C:0,p.style.justifyContent="flex-end")}}}l.current=u.scrollTop})})})]})});vn.displayName=ot;var xn="SelectGroup",[_r,Ir]=Se(xn),Nr=d.forwardRef((e,t)=>{const{__scopeSelect:n,...o}=e,r=ct();return w.jsx(_r,{scope:n,id:r,children:w.jsx(K.div,{role:"group","aria-labelledby":r,...o,ref:t})})});Nr.displayName=xn;var wn="SelectLabel",Mr=d.forwardRef((e,t)=>{const{__scopeSelect:n,...o}=e,r=Ir(wn,n);return w.jsx(K.div,{id:r.id,...o,ref:t})});Mr.displayName=wn;var Ve="SelectItem",[Lr,yn]=Se(Ve),Sn=d.forwardRef((e,t)=>{const{__scopeSelect:n,value:o,disabled:r=!1,textValue:i,...s}=e,c=he(Ve,n),l=me(Ve,n),a=c.value===o,[u,p]=d.useState(i??""),[g,h]=d.useState(!1),m=Fe(x=>{var C;return(C=l.itemRefCallback)==null?void 0:C.call(l,x,o,r)}),f=q(t,m),S=ct(),v=d.useRef("touch"),y=()=>{r||(c.onValueChange(o),c.onOpenChange(!1))};return w.jsx(Lr,{scope:n,value:o,disabled:r,textId:S,isSelected:a,onItemTextChange:d.useCallback(x=>{p(C=>C||((x==null?void 0:x.textContent)??"").trim())},[]),children:w.jsx(Ye.ItemSlot,{scope:n,value:o,disabled:r,textValue:u,children:w.jsx(K.div,{role:"option","aria-labelledby":S,"data-highlighted":g?"":void 0,"aria-selected":a&&g,"data-state":a?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...s,ref:f,onFocus:U(s.onFocus,()=>h(!0)),onBlur:U(s.onBlur,()=>h(!1)),onClick:U(s.onClick,()=>{v.current!=="mouse"&&y()}),onPointerUp:U(s.onPointerUp,()=>{v.current==="mouse"&&y()}),onPointerDown:U(s.onPointerDown,x=>{v.current=x.pointerType}),onPointerMove:U(s.onPointerMove,x=>{var C;v.current=x.pointerType,r?(C=l.onItemLeave)==null||C.call(l):v.current==="mouse"&&x.currentTarget.focus({preventScroll:!0})}),onPointerLeave:U(s.onPointerLeave,x=>{var C;x.currentTarget===document.activeElement&&((C=l.onItemLeave)==null||C.call(l))}),onKeyDown:U(s.onKeyDown,x=>{var R;r||x.target!==x.currentTarget||((R=l.searchRef)==null?void 0:R.current)!==""&&x.key===" "||(gr.includes(x.key)&&y(),x.key===" "&&x.preventDefault())})})})})});Sn.displayName=Ve;var Oe="SelectItemText",Cn=d.forwardRef((e,t)=>{const{__scopeSelect:n,className:o,style:r,...i}=e,s=he(Oe,n),c=me(Oe,n),l=yn(Oe,n),a=yr(Oe,n),[u,p]=d.useState(null),g=Fe(y=>{var x;return(x=c.itemTextRefCallback)==null?void 0:x.call(c,y,l.value,l.disabled)}),h=q(t,p,l.onItemTextChange,g),m=u==null?void 0:u.textContent,f=d.useMemo(()=>w.jsx("option",{value:l.value,disabled:l.disabled,children:m},l.value),[l.disabled,l.value,m]),{onNativeOptionAdd:S,onNativeOptionRemove:v}=a;return ee(()=>(S(f),()=>v(f)),[S,v,f]),w.jsxs(w.Fragment,{children:[w.jsx(K.span,{id:l.textId,...i,ref:h}),l.isSelected&&s.valueNode&&!s.valueNodeHasChildren&&!qe(s.value)?it.createPortal(i.children,s.valueNode):null]})});Cn.displayName=Oe;var bn="SelectItemIndicator",Rn=d.forwardRef((e,t)=>{const{__scopeSelect:n,...o}=e;return yn(bn,n).isSelected?w.jsx(K.span,{"aria-hidden":!0,...o,ref:t}):null});Rn.displayName=bn;var rt="SelectScrollUpButton",Pn=d.forwardRef((e,t)=>{const n=me(rt,e.__scopeSelect),o=wt(rt,e.__scopeSelect),[r,i]=d.useState(!1),s=q(t,o.onScrollButtonChange);return ee(()=>{if(n.viewport&&n.isPositioned){let c=function(){const a=l.scrollTop>0;i(a)};const l=n.viewport;return c(),l.addEventListener("scroll",c),()=>l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),r?w.jsx(En,{...e,ref:s,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop-l.offsetHeight)}}):null});Pn.displayName=rt;var st="SelectScrollDownButton",An=d.forwardRef((e,t)=>{const n=me(st,e.__scopeSelect),o=wt(st,e.__scopeSelect),[r,i]=d.useState(!1),s=q(t,o.onScrollButtonChange);return ee(()=>{if(n.viewport&&n.isPositioned){let c=function(){const a=l.scrollHeight-l.clientHeight,u=Math.ceil(l.scrollTop)<a;i(u)};const l=n.viewport;return c(),l.addEventListener("scroll",c),()=>l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),r?w.jsx(En,{...e,ref:s,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop+l.offsetHeight)}}):null});An.displayName=st;var En=d.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:o,...r}=e,i=me("SelectScrollButton",n),s=d.useRef(null),c=Xe(n),l=d.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return d.useEffect(()=>()=>l(),[l]),ee(()=>{var u;const a=c().find(p=>p.ref.current===document.activeElement);(u=a==null?void 0:a.ref.current)==null||u.scrollIntoView({block:"nearest"})},[c]),w.jsx(K.div,{"aria-hidden":!0,...r,ref:t,style:{flexShrink:0,...r.style},onPointerDown:U(r.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(o,50))}),onPointerMove:U(r.onPointerMove,()=>{var a;(a=i.onItemLeave)==null||a.call(i),s.current===null&&(s.current=window.setInterval(o,50))}),onPointerLeave:U(r.onPointerLeave,()=>{l()})})}),Dr="SelectSeparator",jr=d.forwardRef((e,t)=>{const{__scopeSelect:n,...o}=e;return w.jsx(K.div,{"aria-hidden":!0,...o,ref:t})});jr.displayName=Dr;var Tn="SelectArrow",kr=d.forwardRef((e,t)=>{const{__scopeSelect:n,...o}=e,r=Ge(n);return me(Tn,n).position==="popper"?w.jsx(pr,{...r,...o,ref:t}):null});kr.displayName=Tn;var On="SelectBubbleInput",_n=d.forwardRef(({__scopeSelect:e,...t},n)=>{const o=he(On,e),{value:r,onValueChange:i,required:s,disabled:c,name:l,autoComplete:a,form:u}=o,{nativeOptions:p,nativeSelectKey:g}=o,h=d.useRef(null),m=q(n,h),f=r??"",S=Un(f),v=Array.from(p).some(y=>(y.props.value??"")==="");return d.useEffect(()=>{const y=h.current;if(!y)return;const x=window.HTMLSelectElement.prototype,R=Object.getOwnPropertyDescriptor(x,"value").set;if(S!==f&&R){const b=new Event("change",{bubbles:!0});R.call(y,f),y.dispatchEvent(b)}},[S,f]),w.jsxs(K.select,{"aria-hidden":!0,required:s,tabIndex:-1,name:l,autoComplete:a,disabled:c,form:u,onChange:y=>i(y.target.value),...t,style:{...tn,...t.style},ref:m,defaultValue:f,children:[qe(r)&&!v?w.jsx("option",{value:""}):null,Array.from(p)]},g)});_n.displayName=On;function Hr(e){return typeof e=="function"}function qe(e){return e===""||e===void 0}function In(e){const t=Fe(e),n=d.useRef(""),o=d.useRef(0),r=d.useCallback(s=>{const c=n.current+s;t(c),function l(a){n.current=a,window.clearTimeout(o.current),a!==""&&(o.current=window.setTimeout(()=>l(""),1e3))}(c)},[t]),i=d.useCallback(()=>{n.current="",window.clearTimeout(o.current)},[]);return d.useEffect(()=>()=>window.clearTimeout(o.current),[]),[n,r,i]}function Nn(e,t,n){const r=t.length>1&&Array.from(t).every(a=>a===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let s=Vr(e,Math.max(i,0));r.length===1&&(s=s.filter(a=>a!==n));const l=s.find(a=>a.textValue.toLowerCase().startsWith(r.toLowerCase()));return l!==n?l:void 0}function Vr(e,t){return e.map((n,o)=>e[(t+o)%e.length])}const Ur=d.forwardRef(function(t,n){const{children:o,...r}=t;return w.jsxs(rn,{...r,children:[o,w.jsx("span",{hidden:!0,children:w.jsx(xt,{ref:n})})]})}),Kr=d.forwardRef(function(t,n){const{className:o,placeholder:r,size:i="md",children:s,...c}=t;return w.jsxs(xt,{ref:n,className:Be("v8-select__trigger",o),style:{display:"inline-flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-2)",minWidth:120,height:i==="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"},...c,children:[w.jsx(ln,{placeholder:r}),w.jsx(an,{children:w.jsx(Mt,{size:14,"aria-hidden":"true",style:{color:"var(--fg-muted)"}})}),s]})}),Yr=d.forwardRef(function(t,n){const{className:o,children:r,position:i="popper",...s}=t;return w.jsx(dn,{children:w.jsxs(un,{ref:n,position:i,sideOffset:4,className:Be("v8-select__content",o),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)"},...s,children:[w.jsx(Pn,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:w.jsx(Xn,{size:14,"aria-hidden":"true"})}),w.jsx(vn,{children:r}),w.jsx(An,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:w.jsx(Mt,{size:14,"aria-hidden":"true"})})]})})}),Xr=d.forwardRef(function(t,n){const{className:o,children:r,...i}=t;return w.jsxs(Sn,{ref:n,className:Be("v8-select__item",o),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"},...i,children:[w.jsx(Rn,{style:{position:"absolute",left:6,display:"inline-flex",alignItems:"center",color:"var(--accent)"},children:w.jsx(Yn,{size:14,"aria-hidden":"true"})}),w.jsx(Cn,{children:r})]})});export{dr as A,Yn as C,$r as P,fr as R,Ur as S,Kr as a,Yr as b,Xr as c,pr as d,Yt as e,ur as f,zr as g,Mt as h};
|