@polderlabs/bizar 7.0.4 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +8 -0
- package/bizar-dash/DESIGN.md +729 -969
- package/bizar-dash/GLYPH.md +418 -0
- package/bizar-dash/PLAN.md +1135 -0
- package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +6 -0
- package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +1 -0
- package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +1 -0
- package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +1 -0
- package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +1 -0
- package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +1 -0
- package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +8 -0
- package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +1 -0
- package/bizar-dash/dist/assets/Badge-Cd61wsBa.js +1 -0
- package/bizar-dash/dist/assets/Badge-Cd61wsBa.js.map +1 -0
- package/bizar-dash/dist/assets/Card-C_bvqXdQ.js +1 -0
- package/bizar-dash/dist/assets/Card-C_bvqXdQ.js.map +1 -0
- package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js +1 -0
- package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js.map +1 -0
- package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +11 -0
- package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +1 -0
- package/bizar-dash/dist/assets/Grid-C62gCPqt.js +1 -0
- package/bizar-dash/dist/assets/Grid-C62gCPqt.js.map +1 -0
- package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +21 -0
- package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +1 -0
- package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +67 -0
- package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +1 -0
- package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +13 -0
- package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +1 -0
- package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +1 -0
- package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +1 -0
- package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +1 -0
- package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +30 -0
- package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +1 -0
- package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +48 -0
- package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +1 -0
- package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +11 -0
- package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +1 -0
- package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +1 -0
- package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +1 -0
- package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js +6 -0
- package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js.map +1 -0
- package/bizar-dash/dist/assets/brain-DeoXNDE2.js +6 -0
- package/bizar-dash/dist/assets/brain-DeoXNDE2.js.map +1 -0
- package/bizar-dash/dist/assets/calendar-DRlQkGJc.js +6 -0
- package/bizar-dash/dist/assets/calendar-DRlQkGJc.js.map +1 -0
- package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js +6 -0
- package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js.map +1 -0
- package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js +80 -0
- package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js.map +1 -0
- package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +5 -0
- package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js.map +1 -0
- package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +6 -0
- package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +1 -0
- package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +6 -0
- package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +1 -0
- package/bizar-dash/dist/assets/main-COdgjqbZ.css +1 -0
- package/bizar-dash/dist/assets/main-Cw6gybzS.js +109 -0
- package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +1 -0
- package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +6 -0
- package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +1 -0
- package/bizar-dash/dist/assets/minus-CrStJTZ7.js +6 -0
- package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +1 -0
- package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js +6 -0
- package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js.map +1 -0
- package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/server.mjs +1 -57
- package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/bizar-dash/src/web/v8/App.tsx +188 -0
- package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
- package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
- package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
- package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
- package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
- package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
- package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
- package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
- package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
- package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
- package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
- package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
- package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
- package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
- package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
- package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
- package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
- package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
- package/bizar-dash/src/web/v8/__tests__/views.test.tsx +112 -0
- package/bizar-dash/src/web/v8/main.tsx +28 -0
- package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
- package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
- package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
- package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
- package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
- package/bizar-dash/src/web/v8/shell/index.ts +15 -0
- package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
- package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
- package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
- package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
- package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
- package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
- package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
- package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
- package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
- package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
- package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
- package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
- package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
- package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
- package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
- package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
- package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
- package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
- package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
- package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
- package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
- package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
- package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
- package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
- package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
- package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
- package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
- package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
- package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
- package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
- package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
- package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
- package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
- package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
- package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
- package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
- package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
- package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
- package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
- package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
- package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
- package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
- package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
- package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
- package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
- package/bizar-dash/src/web/v8/ui/index.ts +322 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +80 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +181 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
- package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
- package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
- package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
- package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
- package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
- package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
- package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
- package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
- package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
- package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
- package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
- package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
- package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
- package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
- package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
- package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
- package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
- package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
- package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
- package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
- package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
- package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
- package/bizar-dash/src/web/v8/ui/styles/globals.css +220 -0
- package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
- package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
- package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
- package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
- package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
- package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
- package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
- package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
- package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
- package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
- package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +33 -0
- package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +108 -0
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
- package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +144 -0
- package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +84 -0
- package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +41 -0
- package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +61 -0
- package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +92 -0
- package/bizar-dash/src/web/v8/views/Router.tsx +96 -0
- package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +305 -0
- package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
- package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
- package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +74 -0
- package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
- package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
- package/bizar-dash/tests/setup.ts +26 -0
- package/bizar-dash/vite.config.ts +26 -2
- package/bizar-dash/vitest.config.ts +5 -3
- package/package.json +36 -3
- package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
- package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
- package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
- package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
- package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
- package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
- package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
- package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
- package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
- package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
- package/bizar-dash/dist/assets/main-CJAtrosO.css +0 -1
- package/bizar-dash/dist/assets/main-DKKj9dsq.js +0 -430
- package/bizar-dash/dist/assets/main-DKKj9dsq.js.map +0 -1
- package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
- package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
- package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
- package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
- package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
- package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
- package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
- package/bizar-dash/dist/index.html +0 -43
- package/bizar-dash/src/web/App.tsx +0 -915
- package/bizar-dash/src/web/MobileApp.tsx +0 -414
- package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
- package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
- package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
- package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
- package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
- package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
- package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
- package/bizar-dash/src/web/components/Button.tsx +0 -56
- package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
- package/bizar-dash/src/web/components/Card.tsx +0 -40
- package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
- package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
- package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
- package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
- package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
- package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
- package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
- package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
- package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
- package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
- package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
- package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
- package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
- package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
- package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
- package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
- package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
- package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
- package/bizar-dash/src/web/components/Modal.tsx +0 -215
- package/bizar-dash/src/web/components/Notifications.tsx +0 -242
- package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
- package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
- package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
- package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
- package/bizar-dash/src/web/components/SettingsNav.tsx +0 -117
- package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
- package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
- package/bizar-dash/src/web/components/Spinner.tsx +0 -19
- package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
- package/bizar-dash/src/web/components/Tag.tsx +0 -41
- package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
- package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
- package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
- package/bizar-dash/src/web/components/Toast.tsx +0 -150
- package/bizar-dash/src/web/components/Toggle.tsx +0 -31
- package/bizar-dash/src/web/components/Topbar.tsx +0 -455
- package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
- package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
- package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
- package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
- package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
- package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
- package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
- package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
- package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
- package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
- package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
- package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
- package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
- package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
- package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
- package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
- package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
- package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
- package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
- package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
- package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
- package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
- package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
- package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
- package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
- package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
- package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
- package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
- package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
- package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
- package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
- package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
- package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
- package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
- package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
- package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
- package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
- package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
- package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
- package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
- package/bizar-dash/src/web/components/chat/index.ts +0 -31
- package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
- package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
- package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
- package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
- package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
- package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
- package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
- package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
- package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
- package/bizar-dash/src/web/index.html +0 -37
- package/bizar-dash/src/web/lib/api.ts +0 -237
- package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
- package/bizar-dash/src/web/lib/i18n.ts +0 -25
- package/bizar-dash/src/web/lib/logger.ts +0 -30
- package/bizar-dash/src/web/lib/markdown.tsx +0 -59
- package/bizar-dash/src/web/lib/search.ts +0 -115
- package/bizar-dash/src/web/lib/types.ts +0 -894
- package/bizar-dash/src/web/lib/utils.ts +0 -114
- package/bizar-dash/src/web/lib/ws.ts +0 -177
- package/bizar-dash/src/web/locales/en.json +0 -52
- package/bizar-dash/src/web/main.tsx +0 -43
- package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
- package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
- package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
- package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
- package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
- package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
- package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
- package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
- package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
- package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
- package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
- package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
- package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
- package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
- package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
- package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
- package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
- package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
- package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
- package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
- package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
- package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
- package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
- package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
- package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
- package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
- package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
- package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
- package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
- package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
- package/bizar-dash/src/web/mobile.tsx +0 -14
- package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
- package/bizar-dash/src/web/styles/chat.css +0 -1740
- package/bizar-dash/src/web/styles/glyphs.css +0 -960
- package/bizar-dash/src/web/styles/main.css +0 -10389
- package/bizar-dash/src/web/styles/memory.css +0 -1177
- package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
- package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
- package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
- package/bizar-dash/src/web/styles/mobile.css +0 -2181
- package/bizar-dash/src/web/styles/settings.css +0 -775
- package/bizar-dash/src/web/styles/skills.css +0 -302
- package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
- package/bizar-dash/src/web/styles/tasks.css +0 -605
- package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
- package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
- package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
- package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
- package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
- package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
- package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
- package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
- package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
- package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
- package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
- package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
- package/bizar-dash/src/web/ui/controls/controls.css +0 -476
- package/bizar-dash/src/web/ui/controls/index.ts +0 -35
- package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
- package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
- package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
- package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
- package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
- package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
- package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
- package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
- package/bizar-dash/src/web/ui/data/data.css +0 -540
- package/bizar-dash/src/web/ui/data/index.ts +0 -31
- package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
- package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
- package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
- package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
- package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
- package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
- package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
- package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
- package/bizar-dash/src/web/ui/index.ts +0 -57
- package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
- package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
- package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
- package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
- package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
- package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
- package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
- package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
- package/bizar-dash/src/web/ui/layout/index.ts +0 -34
- package/bizar-dash/src/web/ui/layout/layout.css +0 -464
- package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
- package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
- package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
- package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
- package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
- package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
- package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
- package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
- package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
- package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
- package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
- package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
- package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
- package/bizar-dash/src/web/ui/styles/globals.css +0 -86
- package/bizar-dash/src/web/ui/styles/reset.css +0 -125
- package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
- package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
- package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
- package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
- package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
- package/bizar-dash/src/web/views/Activity.tsx +0 -1221
- package/bizar-dash/src/web/views/Agents.tsx +0 -964
- package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
- package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
- package/bizar-dash/src/web/views/Chat.tsx +0 -532
- package/bizar-dash/src/web/views/Config.tsx +0 -3
- package/bizar-dash/src/web/views/Doctor.tsx +0 -317
- package/bizar-dash/src/web/views/Eval.tsx +0 -372
- package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
- package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
- package/bizar-dash/src/web/views/Harness.tsx +0 -306
- package/bizar-dash/src/web/views/History.tsx +0 -353
- package/bizar-dash/src/web/views/Memory.tsx +0 -193
- package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
- package/bizar-dash/src/web/views/ModView.tsx +0 -207
- package/bizar-dash/src/web/views/Mods.tsx +0 -706
- package/bizar-dash/src/web/views/Overview.tsx +0 -1343
- package/bizar-dash/src/web/views/Providers.tsx +0 -302
- package/bizar-dash/src/web/views/Schedules.tsx +0 -902
- package/bizar-dash/src/web/views/Settings.tsx +0 -308
- package/bizar-dash/src/web/views/Skills.tsx +0 -383
- package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
- package/bizar-dash/src/web/views/Tasks.tsx +0 -789
- package/bizar-dash/src/web/views/Workspace.tsx +0 -294
- package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
- package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
- package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
- package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
- package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
- package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
- package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
- package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
- package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
- package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
- package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
- package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
- package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
- package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
- package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
- package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
- package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
- package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
- package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
- package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
- package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
- package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
- package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
- package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
- package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
- package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
- package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
- package/packages/sdk/.harness/agents.json +0 -17
- package/packages/sdk/.harness/topology.json +0 -4
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Checkbox.tsx — tri-state checkbox (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Three visual states: unchecked, checked, indeterminate (set the
|
|
5
|
-
* `indeterminate` boolean when partial selection applies — e.g. a
|
|
6
|
-
* parent whose children are partially selected). Built as a label +
|
|
7
|
-
* visually-hidden input pattern so the entire row is clickable and
|
|
8
|
-
* keyboard activatable (space).
|
|
9
|
-
*
|
|
10
|
-
* Wrapper-level props (data-testid, id, aria-*, className) flow to the
|
|
11
|
-
* <label>; the inner <input> only takes its own concerns.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
forwardRef,
|
|
16
|
-
useEffect,
|
|
17
|
-
useRef,
|
|
18
|
-
type HTMLAttributes,
|
|
19
|
-
type ReactNode,
|
|
20
|
-
} from 'react';
|
|
21
|
-
import { Check, Minus } from 'lucide-react';
|
|
22
|
-
import { cx } from '../utils/cx';
|
|
23
|
-
|
|
24
|
-
export type CheckboxProps = Omit<
|
|
25
|
-
HTMLAttributes<HTMLLabelElement>,
|
|
26
|
-
'onChange' | 'children'
|
|
27
|
-
> & {
|
|
28
|
-
checked: boolean;
|
|
29
|
-
onChange: (next: boolean) => void;
|
|
30
|
-
label?: ReactNode;
|
|
31
|
-
indeterminate?: boolean;
|
|
32
|
-
disabled?: boolean;
|
|
33
|
-
name?: string;
|
|
34
|
-
autoFocus?: boolean;
|
|
35
|
-
required?: boolean;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(
|
|
39
|
-
function Checkbox(
|
|
40
|
-
{
|
|
41
|
-
checked,
|
|
42
|
-
onChange,
|
|
43
|
-
label,
|
|
44
|
-
indeterminate = false,
|
|
45
|
-
disabled,
|
|
46
|
-
name,
|
|
47
|
-
autoFocus,
|
|
48
|
-
required,
|
|
49
|
-
className,
|
|
50
|
-
...labelProps
|
|
51
|
-
},
|
|
52
|
-
ref,
|
|
53
|
-
) {
|
|
54
|
-
const innerRef = useRef<HTMLInputElement | null>(null);
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
if (innerRef.current) innerRef.current.indeterminate = indeterminate;
|
|
57
|
-
}, [indeterminate]);
|
|
58
|
-
const setRef = (el: HTMLInputElement | null) => {
|
|
59
|
-
innerRef.current = el;
|
|
60
|
-
if (typeof ref === 'function') ref(el);
|
|
61
|
-
else if (ref) ref.current = el;
|
|
62
|
-
};
|
|
63
|
-
return (
|
|
64
|
-
<label
|
|
65
|
-
{...labelProps}
|
|
66
|
-
className={cx(
|
|
67
|
-
'checkbox',
|
|
68
|
-
checked && 'checkbox-checked',
|
|
69
|
-
indeterminate && 'checkbox-indeterminate',
|
|
70
|
-
className,
|
|
71
|
-
)}
|
|
72
|
-
>
|
|
73
|
-
<input
|
|
74
|
-
ref={setRef}
|
|
75
|
-
type="checkbox"
|
|
76
|
-
name={name}
|
|
77
|
-
checked={checked}
|
|
78
|
-
disabled={disabled}
|
|
79
|
-
required={required}
|
|
80
|
-
autoFocus={autoFocus}
|
|
81
|
-
onChange={(e) => onChange(e.target.checked)}
|
|
82
|
-
className="checkbox-input"
|
|
83
|
-
/>
|
|
84
|
-
<span className="checkbox-box" aria-hidden>
|
|
85
|
-
{indeterminate ? (
|
|
86
|
-
<Minus strokeWidth={3} />
|
|
87
|
-
) : checked ? (
|
|
88
|
-
<Check strokeWidth={3} />
|
|
89
|
-
) : null}
|
|
90
|
-
</span>
|
|
91
|
-
{label !== undefined && <span className="checkbox-label">{label}</span>}
|
|
92
|
-
</label>
|
|
93
|
-
);
|
|
94
|
-
},
|
|
95
|
-
);
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* IconButton.tsx — square icon-only button (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Use for toolbar actions, dialog close buttons, and other in-line controls
|
|
5
|
-
* that need only a glyph. Always pair with `aria-label` (or `aria-labelledby`)
|
|
6
|
-
* — the rendered children are the icon, so sighted-only labels are absent.
|
|
7
|
-
* Mirrors Button's variant taxonomy (primary/secondary/ghost/danger/subtle)
|
|
8
|
-
* with sizes sm/md/lg (24/32/40 px squares).
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
forwardRef,
|
|
13
|
-
type ButtonHTMLAttributes,
|
|
14
|
-
type ReactNode,
|
|
15
|
-
} from 'react';
|
|
16
|
-
import { cx } from '../utils/cx';
|
|
17
|
-
|
|
18
|
-
export type IconButtonVariant =
|
|
19
|
-
| 'primary'
|
|
20
|
-
| 'secondary'
|
|
21
|
-
| 'ghost'
|
|
22
|
-
| 'danger'
|
|
23
|
-
| 'subtle';
|
|
24
|
-
export type IconButtonSize = 'sm' | 'md' | 'lg';
|
|
25
|
-
|
|
26
|
-
export type IconButtonProps = Omit<
|
|
27
|
-
ButtonHTMLAttributes<HTMLButtonElement>,
|
|
28
|
-
'children'
|
|
29
|
-
> & {
|
|
30
|
-
variant?: IconButtonVariant;
|
|
31
|
-
size?: IconButtonSize;
|
|
32
|
-
icon: ReactNode;
|
|
33
|
-
'aria-label': string;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
|
37
|
-
function IconButton(
|
|
38
|
-
{
|
|
39
|
-
variant = 'secondary',
|
|
40
|
-
size = 'md',
|
|
41
|
-
icon,
|
|
42
|
-
disabled,
|
|
43
|
-
className,
|
|
44
|
-
type = 'button',
|
|
45
|
-
...rest
|
|
46
|
-
},
|
|
47
|
-
ref,
|
|
48
|
-
) {
|
|
49
|
-
return (
|
|
50
|
-
<button
|
|
51
|
-
ref={ref}
|
|
52
|
-
type={type}
|
|
53
|
-
disabled={disabled}
|
|
54
|
-
className={cx(
|
|
55
|
-
'icon-btn',
|
|
56
|
-
`icon-btn-${variant}`,
|
|
57
|
-
`icon-btn-size-${size}`,
|
|
58
|
-
className,
|
|
59
|
-
)}
|
|
60
|
-
{...rest}
|
|
61
|
-
>
|
|
62
|
-
{icon}
|
|
63
|
-
</button>
|
|
64
|
-
);
|
|
65
|
-
},
|
|
66
|
-
);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Kbd.tsx — keyboard-shortcut affordance (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Renders a single key glyph (or short label) inside a <kbd> element
|
|
5
|
-
* styled with a hairline border + monospace font. Use for inline
|
|
6
|
-
* shortcut hints next to menu items, command palette entries, or any
|
|
7
|
-
* place a user needs to see "this is a keyboard shortcut". Stacking
|
|
8
|
-
* multiple Kbds inline renders a "⌘ K" / "Ctrl K" style hint.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
12
|
-
import { cx } from '../utils/cx';
|
|
13
|
-
|
|
14
|
-
export type KbdProps = HTMLAttributes<HTMLElement> & {
|
|
15
|
-
children?: ReactNode;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export function Kbd({ children, className, ...rest }: KbdProps): React.JSX.Element {
|
|
19
|
-
return (
|
|
20
|
-
<kbd className={cx('kbd', className)} {...rest}>
|
|
21
|
-
{children}
|
|
22
|
-
</kbd>
|
|
23
|
-
);
|
|
24
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* NumberInput.tsx — numeric input (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Wraps <input type="number"> and accepts string | number for `value`
|
|
5
|
-
* (the native input gives back a string from typing but consumers
|
|
6
|
-
* typically want to work with numbers). `onChange` normalises: if the
|
|
7
|
-
* field is empty, emit ''; otherwise coerce to Number. When the parsed
|
|
8
|
-
* number is NaN we emit the raw string so the consumer can decide.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { forwardRef, type InputHTMLAttributes } from 'react';
|
|
12
|
-
import { cx } from '../utils/cx';
|
|
13
|
-
|
|
14
|
-
export type NumberInputSize = 'sm' | 'md' | 'lg';
|
|
15
|
-
|
|
16
|
-
export type NumberInputProps = Omit<
|
|
17
|
-
InputHTMLAttributes<HTMLInputElement>,
|
|
18
|
-
'type' | 'value' | 'onChange' | 'size' | 'children'
|
|
19
|
-
> & {
|
|
20
|
-
inputSize?: NumberInputSize;
|
|
21
|
-
error?: string | null;
|
|
22
|
-
value: string | number;
|
|
23
|
-
onChange: (next: string | number) => void;
|
|
24
|
-
min?: number;
|
|
25
|
-
max?: number;
|
|
26
|
-
step?: number;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
|
|
30
|
-
function NumberInput(
|
|
31
|
-
{
|
|
32
|
-
inputSize = 'md',
|
|
33
|
-
error,
|
|
34
|
-
value,
|
|
35
|
-
onChange,
|
|
36
|
-
min,
|
|
37
|
-
max,
|
|
38
|
-
step,
|
|
39
|
-
disabled,
|
|
40
|
-
className,
|
|
41
|
-
...rest
|
|
42
|
-
},
|
|
43
|
-
ref,
|
|
44
|
-
) {
|
|
45
|
-
return (
|
|
46
|
-
<span
|
|
47
|
-
className={cx(
|
|
48
|
-
'field',
|
|
49
|
-
`field-size-${inputSize}`,
|
|
50
|
-
className,
|
|
51
|
-
)}
|
|
52
|
-
>
|
|
53
|
-
<input
|
|
54
|
-
ref={ref}
|
|
55
|
-
type="number"
|
|
56
|
-
disabled={disabled}
|
|
57
|
-
value={value}
|
|
58
|
-
min={min}
|
|
59
|
-
max={max}
|
|
60
|
-
step={step}
|
|
61
|
-
aria-invalid={error ? true : undefined}
|
|
62
|
-
className={cx('field-input', error && 'field-error')}
|
|
63
|
-
onChange={(e) => {
|
|
64
|
-
const raw = e.target.value;
|
|
65
|
-
if (raw === '') {
|
|
66
|
-
onChange('');
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const n = Number(raw);
|
|
70
|
-
onChange(Number.isFinite(n) ? n : raw);
|
|
71
|
-
}}
|
|
72
|
-
{...rest}
|
|
73
|
-
/>
|
|
74
|
-
</span>
|
|
75
|
-
);
|
|
76
|
-
},
|
|
77
|
-
);
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* RadioGroup.tsx — single-select radio group (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Renders a radiogroup shell and lays out one label-wrapping-input per
|
|
5
|
-
* option. Keyboard navigation (arrow keys) is inherited from native
|
|
6
|
-
* <input type="radio"> inside a single name group. `orientation`
|
|
7
|
-
* controls horizontal vs vertical layout; CSS handles the actual flex
|
|
8
|
-
* direction. Wrapper-level props (data-testid, id, aria-*, className)
|
|
9
|
-
* land on the radiogroup container, not on each input.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
forwardRef,
|
|
14
|
-
type HTMLAttributes,
|
|
15
|
-
type ReactNode,
|
|
16
|
-
} from 'react';
|
|
17
|
-
import { cx } from '../utils/cx';
|
|
18
|
-
|
|
19
|
-
export type RadioOption = {
|
|
20
|
-
value: string;
|
|
21
|
-
label: ReactNode;
|
|
22
|
-
description?: ReactNode;
|
|
23
|
-
disabled?: boolean;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export type RadioOrientation = 'horizontal' | 'vertical';
|
|
27
|
-
|
|
28
|
-
export type RadioGroupProps = Omit<
|
|
29
|
-
HTMLAttributes<HTMLDivElement>,
|
|
30
|
-
'onChange' | 'children'
|
|
31
|
-
> & {
|
|
32
|
-
name: string;
|
|
33
|
-
value: string;
|
|
34
|
-
onChange: (next: string) => void;
|
|
35
|
-
options: RadioOption[];
|
|
36
|
-
orientation?: RadioOrientation;
|
|
37
|
-
legend?: ReactNode;
|
|
38
|
-
disabled?: boolean;
|
|
39
|
-
required?: boolean;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(
|
|
43
|
-
function RadioGroup(
|
|
44
|
-
{
|
|
45
|
-
name,
|
|
46
|
-
value,
|
|
47
|
-
onChange,
|
|
48
|
-
options,
|
|
49
|
-
orientation = 'vertical',
|
|
50
|
-
legend,
|
|
51
|
-
disabled: groupDisabled,
|
|
52
|
-
required,
|
|
53
|
-
className,
|
|
54
|
-
...wrapperProps
|
|
55
|
-
},
|
|
56
|
-
ref,
|
|
57
|
-
) {
|
|
58
|
-
return (
|
|
59
|
-
<div
|
|
60
|
-
ref={ref}
|
|
61
|
-
role="radiogroup"
|
|
62
|
-
{...wrapperProps}
|
|
63
|
-
className={cx(
|
|
64
|
-
'radio-group',
|
|
65
|
-
orientation === 'horizontal' && 'radio-group-horizontal',
|
|
66
|
-
className,
|
|
67
|
-
)}
|
|
68
|
-
>
|
|
69
|
-
{legend !== undefined && (
|
|
70
|
-
<p className="radio-option-label" style={{ marginBottom: 4 }}>
|
|
71
|
-
{legend}
|
|
72
|
-
</p>
|
|
73
|
-
)}
|
|
74
|
-
{options.map((opt) => {
|
|
75
|
-
const isChecked = opt.value === value;
|
|
76
|
-
return (
|
|
77
|
-
<label
|
|
78
|
-
key={opt.value}
|
|
79
|
-
className={cx(
|
|
80
|
-
'radio-option',
|
|
81
|
-
isChecked && 'radio-option-checked',
|
|
82
|
-
)}
|
|
83
|
-
>
|
|
84
|
-
<input
|
|
85
|
-
type="radio"
|
|
86
|
-
name={name}
|
|
87
|
-
value={opt.value}
|
|
88
|
-
checked={isChecked}
|
|
89
|
-
disabled={groupDisabled || opt.disabled}
|
|
90
|
-
required={required}
|
|
91
|
-
onChange={() => onChange(opt.value)}
|
|
92
|
-
className="radio-option-input"
|
|
93
|
-
/>
|
|
94
|
-
<span className="radio-option-box" aria-hidden>
|
|
95
|
-
<span className="radio-option-dot" />
|
|
96
|
-
</span>
|
|
97
|
-
<span className="radio-option-content">
|
|
98
|
-
<span className="radio-option-label">{opt.label}</span>
|
|
99
|
-
{opt.description !== undefined && (
|
|
100
|
-
<span className="radio-option-desc">{opt.description}</span>
|
|
101
|
-
)}
|
|
102
|
-
</span>
|
|
103
|
-
</label>
|
|
104
|
-
);
|
|
105
|
-
})}
|
|
106
|
-
</div>
|
|
107
|
-
);
|
|
108
|
-
},
|
|
109
|
-
);
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* SearchInput.tsx — text field with search affordances (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Composes TextInput: bakes in a left Search icon and a conditional
|
|
5
|
-
* Clear button on the right when `value` is non-empty. `onClear` fires
|
|
6
|
-
* only when the user activates the explicit Clear button — not on
|
|
7
|
-
* backspace keystrokes, which are reported through the regular
|
|
8
|
-
* `onChange` callback. `aria-label` should be supplied by the caller
|
|
9
|
-
* (visual label is optional).
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
forwardRef,
|
|
14
|
-
useCallback,
|
|
15
|
-
type ChangeEvent,
|
|
16
|
-
} from 'react';
|
|
17
|
-
import { Search, X } from 'lucide-react';
|
|
18
|
-
import { cx } from '../utils/cx';
|
|
19
|
-
import { TextInput } from './TextInput';
|
|
20
|
-
|
|
21
|
-
export type SearchInputSize = 'sm' | 'md' | 'lg';
|
|
22
|
-
|
|
23
|
-
export type SearchInputProps = Omit<
|
|
24
|
-
React.InputHTMLAttributes<HTMLInputElement>,
|
|
25
|
-
'size' | 'children' | 'type'
|
|
26
|
-
> & {
|
|
27
|
-
inputSize?: SearchInputSize;
|
|
28
|
-
value: string;
|
|
29
|
-
onChange: (next: string) => void;
|
|
30
|
-
onClear?: () => void;
|
|
31
|
-
placeholder?: string;
|
|
32
|
-
disabled?: boolean;
|
|
33
|
-
'aria-label'?: string;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(
|
|
37
|
-
function SearchInput(
|
|
38
|
-
{
|
|
39
|
-
inputSize = 'md',
|
|
40
|
-
value,
|
|
41
|
-
onChange,
|
|
42
|
-
onClear,
|
|
43
|
-
placeholder = 'Search…',
|
|
44
|
-
disabled,
|
|
45
|
-
className,
|
|
46
|
-
...rest
|
|
47
|
-
},
|
|
48
|
-
ref,
|
|
49
|
-
) {
|
|
50
|
-
const handleClear = useCallback(() => {
|
|
51
|
-
onChange('');
|
|
52
|
-
onClear?.();
|
|
53
|
-
}, [onChange, onClear]);
|
|
54
|
-
const handleChange = useCallback(
|
|
55
|
-
(e: ChangeEvent<HTMLInputElement>) => {
|
|
56
|
-
onChange(e.target.value);
|
|
57
|
-
},
|
|
58
|
-
[onChange],
|
|
59
|
-
);
|
|
60
|
-
return (
|
|
61
|
-
<span className={cx('field', className)}>
|
|
62
|
-
<Search
|
|
63
|
-
size={14}
|
|
64
|
-
className="field-icon-left"
|
|
65
|
-
aria-hidden
|
|
66
|
-
/>
|
|
67
|
-
<input
|
|
68
|
-
ref={ref}
|
|
69
|
-
type="search"
|
|
70
|
-
value={value}
|
|
71
|
-
onChange={handleChange}
|
|
72
|
-
placeholder={placeholder}
|
|
73
|
-
disabled={disabled}
|
|
74
|
-
className="field-input field-has-left"
|
|
75
|
-
{...rest}
|
|
76
|
-
/>
|
|
77
|
-
{value !== '' && !disabled && (
|
|
78
|
-
<button
|
|
79
|
-
type="button"
|
|
80
|
-
onClick={handleClear}
|
|
81
|
-
className="field-clear"
|
|
82
|
-
aria-label="Clear search"
|
|
83
|
-
tabIndex={-1}
|
|
84
|
-
>
|
|
85
|
-
<X size={12} aria-hidden />
|
|
86
|
-
</button>
|
|
87
|
-
)}
|
|
88
|
-
</span>
|
|
89
|
-
);
|
|
90
|
-
},
|
|
91
|
-
);
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Select.tsx — native select dropdown (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Built on the native <select> for keyboard nav, mobile picker, and
|
|
5
|
-
* free accessibility. The native control is wrapped in a span that
|
|
6
|
-
* owns sizing + caret positioning. CSS paints a chevron via the
|
|
7
|
-
* `select-caret` sibling. Wrapper-level props (data-testid, id, className)
|
|
8
|
-
* land on the outer span; form-related props (name, form, required) go
|
|
9
|
-
* to the inner <select>.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
forwardRef,
|
|
14
|
-
type HTMLAttributes,
|
|
15
|
-
} from 'react';
|
|
16
|
-
import { ChevronDown } from 'lucide-react';
|
|
17
|
-
import { cx } from '../utils/cx';
|
|
18
|
-
|
|
19
|
-
export type SelectOption = {
|
|
20
|
-
value: string;
|
|
21
|
-
label: string;
|
|
22
|
-
disabled?: boolean;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export type SelectSize = 'sm' | 'md' | 'lg';
|
|
26
|
-
|
|
27
|
-
export type SelectProps = Omit<
|
|
28
|
-
HTMLAttributes<HTMLSpanElement>,
|
|
29
|
-
'children'
|
|
30
|
-
> & {
|
|
31
|
-
inputSize?: SelectSize;
|
|
32
|
-
options: SelectOption[];
|
|
33
|
-
placeholder?: string;
|
|
34
|
-
error?: string | null;
|
|
35
|
-
value?: string;
|
|
36
|
-
defaultValue?: string;
|
|
37
|
-
disabled?: boolean;
|
|
38
|
-
name?: string;
|
|
39
|
-
required?: boolean;
|
|
40
|
-
onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export const Select = forwardRef<HTMLSelectElement, SelectProps>(
|
|
44
|
-
function Select(
|
|
45
|
-
{
|
|
46
|
-
inputSize = 'md',
|
|
47
|
-
options,
|
|
48
|
-
placeholder,
|
|
49
|
-
error,
|
|
50
|
-
value,
|
|
51
|
-
defaultValue,
|
|
52
|
-
disabled,
|
|
53
|
-
name,
|
|
54
|
-
required,
|
|
55
|
-
onChange,
|
|
56
|
-
className,
|
|
57
|
-
...wrapperProps
|
|
58
|
-
},
|
|
59
|
-
ref,
|
|
60
|
-
) {
|
|
61
|
-
return (
|
|
62
|
-
<span
|
|
63
|
-
{...wrapperProps}
|
|
64
|
-
className={cx('select', `select-size-${inputSize}`, className)}
|
|
65
|
-
>
|
|
66
|
-
<select
|
|
67
|
-
ref={ref}
|
|
68
|
-
disabled={disabled}
|
|
69
|
-
name={name}
|
|
70
|
-
required={required}
|
|
71
|
-
value={value}
|
|
72
|
-
defaultValue={defaultValue ?? (placeholder !== undefined ? '' : undefined)}
|
|
73
|
-
onChange={onChange}
|
|
74
|
-
aria-invalid={error ? true : undefined}
|
|
75
|
-
className={cx('select-native', error && 'select-error')}
|
|
76
|
-
>
|
|
77
|
-
{placeholder !== undefined && (
|
|
78
|
-
<option value="" disabled>
|
|
79
|
-
{placeholder}
|
|
80
|
-
</option>
|
|
81
|
-
)}
|
|
82
|
-
{options.map((opt) => (
|
|
83
|
-
<option key={opt.value} value={opt.value} disabled={opt.disabled}>
|
|
84
|
-
{opt.label}
|
|
85
|
-
</option>
|
|
86
|
-
))}
|
|
87
|
-
</select>
|
|
88
|
-
<ChevronDown className="select-caret" size={14} aria-hidden />
|
|
89
|
-
</span>
|
|
90
|
-
);
|
|
91
|
-
},
|
|
92
|
-
);
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Slider.tsx — range input (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Thin wrapper around <input type="range"> that adds a labelled header
|
|
5
|
-
* row and an optional value badge. The native range control delivers
|
|
6
|
-
* keyboard arrow-keys / page-up / home / end for free. `showValue` adds
|
|
7
|
-
* a tabular-numeric readout to the right of the label.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { forwardRef, type InputHTMLAttributes } from 'react';
|
|
11
|
-
import { cx } from '../utils/cx';
|
|
12
|
-
|
|
13
|
-
export type SliderProps = Omit<
|
|
14
|
-
InputHTMLAttributes<HTMLInputElement>,
|
|
15
|
-
'type' | 'value' | 'onChange' | 'children'
|
|
16
|
-
> & {
|
|
17
|
-
value: number;
|
|
18
|
-
onChange: (next: number) => void;
|
|
19
|
-
min?: number;
|
|
20
|
-
max?: number;
|
|
21
|
-
step?: number;
|
|
22
|
-
label?: string;
|
|
23
|
-
showValue?: boolean;
|
|
24
|
-
disabled?: boolean;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export const Slider = forwardRef<HTMLInputElement, SliderProps>(
|
|
28
|
-
function Slider(
|
|
29
|
-
{
|
|
30
|
-
value,
|
|
31
|
-
onChange,
|
|
32
|
-
min = 0,
|
|
33
|
-
max = 100,
|
|
34
|
-
step = 1,
|
|
35
|
-
label,
|
|
36
|
-
showValue = false,
|
|
37
|
-
disabled,
|
|
38
|
-
className,
|
|
39
|
-
...rest
|
|
40
|
-
},
|
|
41
|
-
ref,
|
|
42
|
-
) {
|
|
43
|
-
return (
|
|
44
|
-
<div className={cx('slider', className)}>
|
|
45
|
-
{(label !== undefined || showValue) && (
|
|
46
|
-
<div className="slider-header">
|
|
47
|
-
{label !== undefined && (
|
|
48
|
-
<span className="slider-label">{label}</span>
|
|
49
|
-
)}
|
|
50
|
-
{showValue && (
|
|
51
|
-
<span className="slider-value">{String(value)}</span>
|
|
52
|
-
)}
|
|
53
|
-
</div>
|
|
54
|
-
)}
|
|
55
|
-
<input
|
|
56
|
-
ref={ref}
|
|
57
|
-
type="range"
|
|
58
|
-
min={min}
|
|
59
|
-
max={max}
|
|
60
|
-
step={step}
|
|
61
|
-
value={value}
|
|
62
|
-
disabled={disabled}
|
|
63
|
-
onChange={(e) => onChange(Number(e.target.value))}
|
|
64
|
-
className="slider-input"
|
|
65
|
-
{...rest}
|
|
66
|
-
/>
|
|
67
|
-
</div>
|
|
68
|
-
);
|
|
69
|
-
},
|
|
70
|
-
);
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* TextInput.tsx — single-line text field (Wave 2A).
|
|
3
|
-
*
|
|
4
|
-
* Wraps the native <input type="text"> to keep autofocus / selection /
|
|
5
|
-
* spellcheck / mobile keyboard behavior free of customization. Sizes sm/md/lg
|
|
6
|
-
* match the rest of the controls' vertical rhythm. `error` paints the border
|
|
7
|
-
* danger and shifts the focus ring to the danger-subtle tone. `leftIcon` and
|
|
8
|
-
* `rightIcon` are ReactNode (typically a lucide-react icon) absolutely
|
|
9
|
-
* positioned inside the field padding well.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
forwardRef,
|
|
14
|
-
type InputHTMLAttributes,
|
|
15
|
-
type ReactNode,
|
|
16
|
-
} from 'react';
|
|
17
|
-
import { cx } from '../utils/cx';
|
|
18
|
-
|
|
19
|
-
export type TextInputSize = 'sm' | 'md' | 'lg';
|
|
20
|
-
|
|
21
|
-
export type TextInputProps = Omit<
|
|
22
|
-
InputHTMLAttributes<HTMLInputElement>,
|
|
23
|
-
'size' | 'children'
|
|
24
|
-
> & {
|
|
25
|
-
inputSize?: TextInputSize;
|
|
26
|
-
error?: string | null;
|
|
27
|
-
leftIcon?: ReactNode;
|
|
28
|
-
rightIcon?: ReactNode;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const TextInput = forwardRef<HTMLInputElement, TextInputProps>(
|
|
32
|
-
function TextInput(
|
|
33
|
-
{
|
|
34
|
-
inputSize = 'md',
|
|
35
|
-
error,
|
|
36
|
-
leftIcon,
|
|
37
|
-
rightIcon,
|
|
38
|
-
disabled,
|
|
39
|
-
className,
|
|
40
|
-
...rest
|
|
41
|
-
},
|
|
42
|
-
ref,
|
|
43
|
-
) {
|
|
44
|
-
return (
|
|
45
|
-
<span
|
|
46
|
-
className={cx(
|
|
47
|
-
'field',
|
|
48
|
-
`field-size-${inputSize}`,
|
|
49
|
-
leftIcon && 'field-has-left',
|
|
50
|
-
rightIcon && 'field-has-right',
|
|
51
|
-
className,
|
|
52
|
-
)}
|
|
53
|
-
>
|
|
54
|
-
{leftIcon && <span className="field-icon-left">{leftIcon}</span>}
|
|
55
|
-
<input
|
|
56
|
-
ref={ref}
|
|
57
|
-
type="text"
|
|
58
|
-
disabled={disabled}
|
|
59
|
-
aria-invalid={error ? true : undefined}
|
|
60
|
-
className={cx('field-input', error && 'field-error')}
|
|
61
|
-
{...rest}
|
|
62
|
-
/>
|
|
63
|
-
{rightIcon && <span className="field-icon-right">{rightIcon}</span>}
|
|
64
|
-
</span>
|
|
65
|
-
);
|
|
66
|
-
},
|
|
67
|
-
);
|