@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.
Files changed (489) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/bizar-dash/DESIGN.md +729 -969
  3. package/bizar-dash/GLYPH.md +418 -0
  4. package/bizar-dash/PLAN.md +1135 -0
  5. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +6 -0
  6. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +1 -0
  7. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +1 -0
  8. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +1 -0
  9. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +1 -0
  10. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +1 -0
  11. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +8 -0
  12. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +1 -0
  13. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js +1 -0
  14. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js.map +1 -0
  15. package/bizar-dash/dist/assets/Card-C_bvqXdQ.js +1 -0
  16. package/bizar-dash/dist/assets/Card-C_bvqXdQ.js.map +1 -0
  17. package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js +1 -0
  18. package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js.map +1 -0
  19. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +11 -0
  20. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +1 -0
  21. package/bizar-dash/dist/assets/Grid-C62gCPqt.js +1 -0
  22. package/bizar-dash/dist/assets/Grid-C62gCPqt.js.map +1 -0
  23. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +21 -0
  24. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +1 -0
  25. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +67 -0
  26. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +1 -0
  27. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +13 -0
  28. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +1 -0
  29. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +1 -0
  30. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +1 -0
  31. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +1 -0
  32. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +1 -0
  33. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +30 -0
  34. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +1 -0
  35. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +48 -0
  36. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +1 -0
  37. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +11 -0
  38. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +1 -0
  39. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +1 -0
  40. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +1 -0
  41. package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js +6 -0
  42. package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js.map +1 -0
  43. package/bizar-dash/dist/assets/brain-DeoXNDE2.js +6 -0
  44. package/bizar-dash/dist/assets/brain-DeoXNDE2.js.map +1 -0
  45. package/bizar-dash/dist/assets/calendar-DRlQkGJc.js +6 -0
  46. package/bizar-dash/dist/assets/calendar-DRlQkGJc.js.map +1 -0
  47. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js +6 -0
  48. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js.map +1 -0
  49. package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js +80 -0
  50. package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js.map +1 -0
  51. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +5 -0
  52. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js.map +1 -0
  53. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +6 -0
  54. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +1 -0
  55. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +6 -0
  56. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +1 -0
  57. package/bizar-dash/dist/assets/main-COdgjqbZ.css +1 -0
  58. package/bizar-dash/dist/assets/main-Cw6gybzS.js +109 -0
  59. package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +1 -0
  60. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +6 -0
  61. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +1 -0
  62. package/bizar-dash/dist/assets/minus-CrStJTZ7.js +6 -0
  63. package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +1 -0
  64. package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js +6 -0
  65. package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js.map +1 -0
  66. package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
  67. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  68. package/bizar-dash/src/server/server.mjs +1 -57
  69. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  70. package/bizar-dash/src/web/v8/App.tsx +188 -0
  71. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
  72. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
  73. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
  74. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
  75. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
  76. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
  77. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
  78. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
  79. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
  80. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
  81. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
  82. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
  83. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
  84. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
  85. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
  86. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
  87. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
  88. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
  89. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +112 -0
  90. package/bizar-dash/src/web/v8/main.tsx +28 -0
  91. package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  92. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  93. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  94. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  95. package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  96. package/bizar-dash/src/web/v8/shell/index.ts +15 -0
  97. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  98. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  99. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  100. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  101. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  102. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  103. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  104. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  105. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  106. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  107. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  108. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  109. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  110. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  111. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  112. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  113. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  114. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  115. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  116. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  117. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  118. package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  119. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  120. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  121. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  122. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  123. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  124. package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  125. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  126. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  127. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  128. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  129. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  130. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  131. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  132. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  133. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  134. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  135. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  136. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  137. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  138. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  139. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  140. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  141. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  142. package/bizar-dash/src/web/v8/ui/index.ts +322 -0
  143. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +80 -0
  144. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
  145. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +181 -0
  146. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
  147. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  148. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  149. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  150. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  151. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  152. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  153. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  154. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  155. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
  156. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  157. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  158. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  159. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  160. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  161. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  162. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  163. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  164. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  165. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  166. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  167. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  168. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  169. package/bizar-dash/src/web/v8/ui/styles/globals.css +220 -0
  170. package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  171. package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  172. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
  173. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  174. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
  175. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  176. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  177. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  178. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  179. package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  180. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +33 -0
  181. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +108 -0
  182. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
  183. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +144 -0
  184. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +84 -0
  185. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +41 -0
  186. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +61 -0
  187. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +92 -0
  188. package/bizar-dash/src/web/v8/views/Router.tsx +96 -0
  189. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +305 -0
  190. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  191. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
  192. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +74 -0
  193. package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  194. package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
  195. package/bizar-dash/tests/setup.ts +26 -0
  196. package/bizar-dash/vite.config.ts +26 -2
  197. package/bizar-dash/vitest.config.ts +5 -3
  198. package/package.json +36 -3
  199. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
  200. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
  201. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
  202. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
  203. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
  204. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
  205. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
  206. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
  207. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  208. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
  209. package/bizar-dash/dist/assets/main-CJAtrosO.css +0 -1
  210. package/bizar-dash/dist/assets/main-DKKj9dsq.js +0 -430
  211. package/bizar-dash/dist/assets/main-DKKj9dsq.js.map +0 -1
  212. package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
  213. package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
  214. package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
  215. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
  216. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
  217. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
  218. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
  219. package/bizar-dash/dist/index.html +0 -43
  220. package/bizar-dash/src/web/App.tsx +0 -915
  221. package/bizar-dash/src/web/MobileApp.tsx +0 -414
  222. package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
  223. package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
  224. package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
  225. package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
  226. package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
  227. package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
  228. package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
  229. package/bizar-dash/src/web/components/Button.tsx +0 -56
  230. package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
  231. package/bizar-dash/src/web/components/Card.tsx +0 -40
  232. package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
  233. package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
  234. package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
  235. package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
  236. package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
  237. package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
  238. package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
  239. package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
  240. package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
  241. package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
  242. package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
  243. package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
  244. package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
  245. package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
  246. package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
  247. package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
  248. package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
  249. package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
  250. package/bizar-dash/src/web/components/Modal.tsx +0 -215
  251. package/bizar-dash/src/web/components/Notifications.tsx +0 -242
  252. package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
  253. package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
  254. package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
  255. package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
  256. package/bizar-dash/src/web/components/SettingsNav.tsx +0 -117
  257. package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
  258. package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
  259. package/bizar-dash/src/web/components/Spinner.tsx +0 -19
  260. package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
  261. package/bizar-dash/src/web/components/Tag.tsx +0 -41
  262. package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
  263. package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
  264. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
  265. package/bizar-dash/src/web/components/Toast.tsx +0 -150
  266. package/bizar-dash/src/web/components/Toggle.tsx +0 -31
  267. package/bizar-dash/src/web/components/Topbar.tsx +0 -455
  268. package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
  269. package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
  270. package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
  271. package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
  272. package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
  273. package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
  274. package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
  275. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
  276. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
  277. package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
  278. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
  279. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
  280. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
  281. package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
  282. package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
  283. package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
  284. package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
  285. package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
  286. package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
  287. package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
  288. package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
  289. package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
  290. package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
  291. package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
  292. package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
  293. package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
  294. package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
  295. package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
  296. package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
  297. package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
  298. package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
  299. package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
  300. package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
  301. package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
  302. package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
  303. package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
  304. package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
  305. package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
  306. package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
  307. package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
  308. package/bizar-dash/src/web/components/chat/index.ts +0 -31
  309. package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
  310. package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
  311. package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
  312. package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
  313. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
  314. package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
  315. package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
  316. package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
  317. package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
  318. package/bizar-dash/src/web/index.html +0 -37
  319. package/bizar-dash/src/web/lib/api.ts +0 -237
  320. package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
  321. package/bizar-dash/src/web/lib/i18n.ts +0 -25
  322. package/bizar-dash/src/web/lib/logger.ts +0 -30
  323. package/bizar-dash/src/web/lib/markdown.tsx +0 -59
  324. package/bizar-dash/src/web/lib/search.ts +0 -115
  325. package/bizar-dash/src/web/lib/types.ts +0 -894
  326. package/bizar-dash/src/web/lib/utils.ts +0 -114
  327. package/bizar-dash/src/web/lib/ws.ts +0 -177
  328. package/bizar-dash/src/web/locales/en.json +0 -52
  329. package/bizar-dash/src/web/main.tsx +0 -43
  330. package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
  331. package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
  332. package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
  333. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
  334. package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
  335. package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
  336. package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
  337. package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
  338. package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
  339. package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
  340. package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
  341. package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
  342. package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
  343. package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
  344. package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
  345. package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
  346. package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
  347. package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
  348. package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
  349. package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
  350. package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
  351. package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
  352. package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
  353. package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
  354. package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
  355. package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
  356. package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
  357. package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
  358. package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
  359. package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
  360. package/bizar-dash/src/web/mobile.tsx +0 -14
  361. package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
  362. package/bizar-dash/src/web/styles/chat.css +0 -1740
  363. package/bizar-dash/src/web/styles/glyphs.css +0 -960
  364. package/bizar-dash/src/web/styles/main.css +0 -10389
  365. package/bizar-dash/src/web/styles/memory.css +0 -1177
  366. package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
  367. package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
  368. package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
  369. package/bizar-dash/src/web/styles/mobile.css +0 -2181
  370. package/bizar-dash/src/web/styles/settings.css +0 -775
  371. package/bizar-dash/src/web/styles/skills.css +0 -302
  372. package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
  373. package/bizar-dash/src/web/styles/tasks.css +0 -605
  374. package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
  375. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
  376. package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
  377. package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
  378. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
  379. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
  380. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
  381. package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
  382. package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
  383. package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
  384. package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
  385. package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
  386. package/bizar-dash/src/web/ui/controls/controls.css +0 -476
  387. package/bizar-dash/src/web/ui/controls/index.ts +0 -35
  388. package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
  389. package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
  390. package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
  391. package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
  392. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
  393. package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
  394. package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
  395. package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
  396. package/bizar-dash/src/web/ui/data/data.css +0 -540
  397. package/bizar-dash/src/web/ui/data/index.ts +0 -31
  398. package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
  399. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
  400. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
  401. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
  402. package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
  403. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
  404. package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
  405. package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
  406. package/bizar-dash/src/web/ui/index.ts +0 -57
  407. package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
  408. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
  409. package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
  410. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
  411. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
  412. package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
  413. package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
  414. package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
  415. package/bizar-dash/src/web/ui/layout/index.ts +0 -34
  416. package/bizar-dash/src/web/ui/layout/layout.css +0 -464
  417. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
  418. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
  419. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
  420. package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
  421. package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
  422. package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
  423. package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
  424. package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
  425. package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
  426. package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
  427. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
  428. package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
  429. package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
  430. package/bizar-dash/src/web/ui/styles/globals.css +0 -86
  431. package/bizar-dash/src/web/ui/styles/reset.css +0 -125
  432. package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
  433. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
  434. package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
  435. package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
  436. package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
  437. package/bizar-dash/src/web/views/Activity.tsx +0 -1221
  438. package/bizar-dash/src/web/views/Agents.tsx +0 -964
  439. package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
  440. package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
  441. package/bizar-dash/src/web/views/Chat.tsx +0 -532
  442. package/bizar-dash/src/web/views/Config.tsx +0 -3
  443. package/bizar-dash/src/web/views/Doctor.tsx +0 -317
  444. package/bizar-dash/src/web/views/Eval.tsx +0 -372
  445. package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
  446. package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
  447. package/bizar-dash/src/web/views/Harness.tsx +0 -306
  448. package/bizar-dash/src/web/views/History.tsx +0 -353
  449. package/bizar-dash/src/web/views/Memory.tsx +0 -193
  450. package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
  451. package/bizar-dash/src/web/views/ModView.tsx +0 -207
  452. package/bizar-dash/src/web/views/Mods.tsx +0 -706
  453. package/bizar-dash/src/web/views/Overview.tsx +0 -1343
  454. package/bizar-dash/src/web/views/Providers.tsx +0 -302
  455. package/bizar-dash/src/web/views/Schedules.tsx +0 -902
  456. package/bizar-dash/src/web/views/Settings.tsx +0 -308
  457. package/bizar-dash/src/web/views/Skills.tsx +0 -383
  458. package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
  459. package/bizar-dash/src/web/views/Tasks.tsx +0 -789
  460. package/bizar-dash/src/web/views/Workspace.tsx +0 -294
  461. package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
  462. package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
  463. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
  464. package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
  465. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
  466. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
  467. package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
  468. package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
  469. package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
  470. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
  471. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
  472. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
  473. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
  474. package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
  475. package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
  476. package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
  477. package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
  478. package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
  479. package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
  480. package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
  481. package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
  482. package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
  483. package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
  484. package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
  485. package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
  486. package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
  487. package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
  488. package/packages/sdk/.harness/agents.json +0 -17
  489. package/packages/sdk/.harness/topology.json +0 -4
@@ -1,56 +0,0 @@
1
- /*
2
- * Textarea.tsx — multi-line text field (F-041).
3
- *
4
- * Sibling of TextInput. Wraps a native <textarea> so vertical resize,
5
- * mobile keyboard avoidance, and selection behave natively. Same focus
6
- * ring, error state, and disabled treatment as TextInput via the shared
7
- * .field wrapper in controls.css. Use for any free-form multi-line input
8
- * (prompts, descriptions, system prompts).
9
- */
10
-
11
- import {
12
- forwardRef,
13
- type TextareaHTMLAttributes,
14
- type ReactNode,
15
- } from 'react';
16
- import { cx } from '../utils/cx';
17
-
18
- export type TextareaSize = 'sm' | 'md' | 'lg';
19
-
20
- export type TextareaProps = Omit<
21
- TextareaHTMLAttributes<HTMLTextAreaElement>,
22
- 'children'
23
- > & {
24
- inputSize?: TextareaSize;
25
- error?: string | null;
26
- hint?: ReactNode;
27
- };
28
-
29
- export const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
30
- function Textarea(
31
- {
32
- inputSize = 'md',
33
- error,
34
- hint,
35
- disabled,
36
- className,
37
- rows = 4,
38
- ...rest
39
- },
40
- ref,
41
- ) {
42
- return (
43
- <span className={cx('field', 'field-textarea', `field-size-${inputSize}`, className)}>
44
- <textarea
45
- ref={ref}
46
- rows={rows}
47
- disabled={disabled}
48
- aria-invalid={error ? true : undefined}
49
- className={cx('field-input', 'field-input-textarea', error && 'field-error')}
50
- {...rest}
51
- />
52
- {hint && <span className="field-hint">{hint}</span>}
53
- </span>
54
- );
55
- },
56
- );
@@ -1,79 +0,0 @@
1
- /*
2
- * Toggle.tsx — boolean switch (Wave 2A).
3
- *
4
- * Built as a label-wrapping-input pattern (visually hidden checkbox) so
5
- * screen readers announce role=switch without extra ARIA. The CSS track +
6
- * thumb are absolutely positioned inside the label; checked/disabled states
7
- * toggle classes on the wrapping label. `size` sm/md governs the track.
8
- *
9
- * Wrapper-level props (data-testid, id, aria-*, className) flow to the
10
- * <label>; the inner <input> only takes its own concerns (name, form,
11
- * autoFocus, etc).
12
- */
13
-
14
- import {
15
- forwardRef,
16
- type HTMLAttributes,
17
- type ReactNode,
18
- } from 'react';
19
- import { cx } from '../utils/cx';
20
-
21
- export type ToggleSize = 'sm' | 'md';
22
-
23
- export type ToggleProps = Omit<
24
- HTMLAttributes<HTMLLabelElement>,
25
- 'onChange' | 'children'
26
- > & {
27
- checked: boolean;
28
- onChange: (checked: boolean) => void;
29
- label?: ReactNode;
30
- size?: ToggleSize;
31
- name?: string;
32
- disabled?: boolean;
33
- autoFocus?: boolean;
34
- };
35
-
36
- export const Toggle = forwardRef<HTMLInputElement, ToggleProps>(
37
- function Toggle(
38
- {
39
- checked,
40
- onChange,
41
- label,
42
- disabled,
43
- size = 'md',
44
- name,
45
- autoFocus,
46
- className,
47
- ...labelProps
48
- },
49
- ref,
50
- ) {
51
- return (
52
- <label
53
- {...labelProps}
54
- className={cx(
55
- 'toggle',
56
- size === 'sm' && 'toggle-sm',
57
- checked && 'toggle-checked',
58
- className,
59
- )}
60
- >
61
- <input
62
- ref={ref}
63
- type="checkbox"
64
- role="switch"
65
- name={name}
66
- checked={checked}
67
- disabled={disabled}
68
- autoFocus={autoFocus}
69
- onChange={(e) => onChange(e.target.checked)}
70
- className="toggle-input"
71
- />
72
- <span className="toggle-track" aria-hidden>
73
- <span className="toggle-thumb" />
74
- </span>
75
- {label !== undefined && <span className="toggle-label">{label}</span>}
76
- </label>
77
- );
78
- },
79
- );
@@ -1,476 +0,0 @@
1
- /* controls.css — Visual styles for form controls (Wave 2A). */
2
-
3
- /* ===== Button ===== */
4
- .btn {
5
- display: inline-flex;
6
- align-items: center;
7
- justify-content: center;
8
- gap: var(--space-2);
9
- font-family: var(--font-sans);
10
- font-weight: var(--weight-medium);
11
- border-radius: var(--radius-md);
12
- border: 1px solid transparent;
13
- cursor: pointer;
14
- white-space: nowrap;
15
- transition:
16
- background-color var(--duration-fast) var(--ease-out),
17
- border-color var(--duration-fast) var(--ease-out),
18
- color var(--duration-fast) var(--ease-out);
19
- }
20
- .btn:focus-visible {
21
- outline: 2px solid var(--border-focus);
22
- outline-offset: 2px;
23
- }
24
- .btn:disabled,
25
- .btn[aria-disabled='true'] {
26
- opacity: 0.5;
27
- cursor: not-allowed;
28
- }
29
-
30
- /* sizes */
31
- .btn-size-xs { font-size: var(--text-xs); padding: var(--space-1) var(--space-2); height: 22px; }
32
- .btn-size-sm { font-size: var(--text-sm); padding: var(--space-2) var(--space-3); height: 28px; }
33
- .btn-size-md { font-size: var(--text-base); padding: var(--space-2) var(--space-4); height: 32px; }
34
- .btn-size-lg { font-size: var(--text-md); padding: var(--space-3) var(--space-5); height: 38px; }
35
-
36
- /* variants */
37
- .btn-primary { background-color: var(--accent); color: var(--accent-fg); }
38
- .btn-primary:hover:not(:disabled) { background-color: var(--accent-hover); }
39
- .btn-primary:active:not(:disabled) { background-color: var(--accent-active); }
40
- .btn-secondary { background-color: var(--surface-2); color: var(--text-primary); border-color: var(--border-default); }
41
- .btn-secondary:hover:not(:disabled) { background-color: var(--surface-3); }
42
- .btn-ghost { background-color: transparent; color: var(--text-primary); }
43
- .btn-ghost:hover:not(:disabled) { background-color: var(--surface-2); }
44
- .btn-subtle { background-color: var(--accent-subtle); color: var(--accent); }
45
- .btn-subtle:hover:not(:disabled) { background-color: var(--accent); color: var(--accent-fg); }
46
- .btn-danger { background-color: var(--danger); color: #ffffff; }
47
- .btn-danger:hover:not(:disabled) { filter: brightness(0.93); }
48
- .btn-full { width: 100%; }
49
-
50
- .btn-loading > :not(.btn-spinner) { opacity: 0.6; }
51
-
52
- .btn-spinner {
53
- display: inline-block;
54
- width: 12px;
55
- height: 12px;
56
- border: 2px solid currentColor;
57
- border-right-color: transparent;
58
- border-radius: 50%;
59
- animation: btn-spin 0.6s linear infinite;
60
- }
61
- @keyframes btn-spin { to { transform: rotate(360deg); } }
62
-
63
- /* ===== IconButton ===== */
64
- .icon-btn {
65
- display: inline-flex;
66
- align-items: center;
67
- justify-content: center;
68
- border-radius: var(--radius-md);
69
- border: 1px solid transparent;
70
- cursor: pointer;
71
- transition:
72
- background-color var(--duration-fast) var(--ease-out),
73
- border-color var(--duration-fast) var(--ease-out),
74
- color var(--duration-fast) var(--ease-out);
75
- }
76
- .icon-btn:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 2px; }
77
- .icon-btn:disabled { opacity: 0.5; cursor: not-allowed; }
78
- .icon-btn-size-sm { width: 24px; height: 24px; }
79
- .icon-btn-size-md { width: 32px; height: 32px; }
80
- .icon-btn-size-lg { width: 40px; height: 40px; }
81
- .icon-btn-size-sm > svg { width: 14px; height: 14px; }
82
- .icon-btn-size-md > svg { width: 16px; height: 16px; }
83
- .icon-btn-size-lg > svg { width: 20px; height: 20px; }
84
- .icon-btn-primary { background-color: var(--accent); color: var(--accent-fg); }
85
- .icon-btn-secondary { background-color: var(--surface-2); color: var(--text-primary); border-color: var(--border-default); }
86
- .icon-btn-ghost { background-color: transparent; color: var(--text-primary); }
87
- .icon-btn-ghost:hover { background-color: var(--surface-2); }
88
- .icon-btn-danger { background-color: var(--danger); color: #ffffff; }
89
- .icon-btn-subtle { background-color: var(--accent-subtle); color: var(--accent); }
90
-
91
- /* ===== Toggle (switch) ===== */
92
- .toggle {
93
- position: relative;
94
- display: inline-flex;
95
- align-items: center;
96
- cursor: pointer;
97
- user-select: none;
98
- vertical-align: middle;
99
- gap: var(--space-2);
100
- }
101
- .toggle-input {
102
- position: absolute;
103
- opacity: 0;
104
- inset: 0;
105
- width: 100%;
106
- height: 100%;
107
- cursor: pointer;
108
- margin: 0;
109
- }
110
- .toggle-input:focus-visible + .toggle-track {
111
- outline: 2px solid var(--border-focus);
112
- outline-offset: 2px;
113
- }
114
- .toggle-input:disabled {
115
- cursor: not-allowed;
116
- }
117
- .toggle-track {
118
- position: relative;
119
- width: 32px;
120
- height: 18px;
121
- background-color: var(--surface-3);
122
- border-radius: var(--radius-full);
123
- border: 1px solid var(--border-default);
124
- transition:
125
- background-color var(--duration-fast) var(--ease-out),
126
- border-color var(--duration-fast) var(--ease-out);
127
- }
128
- .toggle-sm .toggle-track { width: 26px; height: 14px; }
129
- .toggle-thumb {
130
- position: absolute;
131
- top: 1px;
132
- left: 1px;
133
- width: 14px;
134
- height: 14px;
135
- background-color: var(--surface-0);
136
- border-radius: 50%;
137
- box-shadow: 0 0 0 1px var(--border-default);
138
- transition: transform var(--duration-fast) var(--ease-out);
139
- }
140
- .toggle-sm .toggle-thumb { width: 10px; height: 10px; }
141
- .toggle-checked .toggle-track {
142
- background-color: var(--accent);
143
- border-color: var(--accent);
144
- }
145
- .toggle-checked .toggle-thumb {
146
- transform: translateX(14px);
147
- }
148
- .toggle-sm.toggle-checked .toggle-thumb {
149
- transform: translateX(12px);
150
- }
151
- .toggle:has(.toggle-input:disabled) { opacity: 0.5; cursor: not-allowed; }
152
- .toggle-label {
153
- color: var(--text-primary);
154
- font-size: var(--text-base);
155
- }
156
-
157
- /* ===== Text / Number / Search Input ===== */
158
- .field {
159
- position: relative;
160
- display: inline-flex;
161
- align-items: center;
162
- width: 100%;
163
- font-family: var(--font-sans);
164
- }
165
- .field-input {
166
- width: 100%;
167
- font-family: inherit;
168
- font-size: var(--text-base);
169
- color: var(--text-primary);
170
- background-color: var(--surface-1);
171
- border: 1px solid var(--border-default);
172
- border-radius: var(--radius-md);
173
- padding: var(--space-2) var(--space-3);
174
- line-height: var(--leading-normal);
175
- transition: border-color var(--duration-fast) var(--ease-out),
176
- box-shadow var(--duration-fast) var(--ease-out);
177
- }
178
- .field-input::placeholder {
179
- color: var(--text-tertiary);
180
- }
181
- .field-input:focus {
182
- outline: none;
183
- border-color: var(--border-focus);
184
- box-shadow: 0 0 0 2px var(--accent-subtle);
185
- }
186
- .field-input:disabled {
187
- opacity: 0.5;
188
- cursor: not-allowed;
189
- }
190
- .field-input.field-error {
191
- border-color: var(--danger);
192
- }
193
- .field-input.field-error:focus {
194
- box-shadow: 0 0 0 2px var(--danger-subtle);
195
- }
196
- /* sizes */
197
- .field-size-sm .field-input { font-size: var(--text-sm); padding: var(--space-1) var(--space-2); height: 28px; }
198
- .field-size-md .field-input { font-size: var(--text-base); padding: var(--space-2) var(--space-3); height: 32px; }
199
- .field-size-lg .field-input { font-size: var(--text-md); padding: var(--space-2) var(--space-4); height: 40px; }
200
-
201
- /* icons */
202
- .field-icon-left,
203
- .field-icon-right {
204
- position: absolute;
205
- display: inline-flex;
206
- align-items: center;
207
- justify-content: center;
208
- color: var(--text-tertiary);
209
- pointer-events: none;
210
- }
211
- .field-icon-left { left: var(--space-2); }
212
- .field-icon-right { right: var(--space-2); }
213
- .field-size-sm .field-icon-left,
214
- .field-size-sm .field-icon-right {
215
- width: 14px; height: 14px;
216
- }
217
- .field-size-md .field-icon-left,
218
- .field-size-md .field-icon-right {
219
- width: 16px; height: 16px;
220
- }
221
- .field-size-lg .field-icon-left,
222
- .field-size-lg .field-icon-right {
223
- width: 18px; height: 18px;
224
- }
225
- .field-has-left .field-input { padding-left: calc(var(--space-6) + var(--space-1)); }
226
- .field-has-right .field-input { padding-right: calc(var(--space-6) + var(--space-1)); }
227
- .field-size-sm.field-has-left .field-input { padding-left: calc(var(--space-5) + var(--space-1)); }
228
- .field-size-sm.field-has-right .field-input { padding-right: calc(var(--space-5) + var(--space-1)); }
229
-
230
- .field-clear {
231
- position: absolute;
232
- right: var(--space-2);
233
- display: inline-flex;
234
- align-items: center;
235
- justify-content: center;
236
- width: 16px;
237
- height: 16px;
238
- border-radius: var(--radius-sm);
239
- background-color: transparent;
240
- color: var(--text-tertiary);
241
- cursor: pointer;
242
- border: 0;
243
- }
244
- .field-clear:hover { color: var(--text-primary); background-color: var(--surface-3); }
245
-
246
- /* ===== Textarea (F-041) ===== */
247
- .field-textarea {
248
- display: flex;
249
- flex-direction: column;
250
- gap: var(--space-1);
251
- }
252
- .field-input-textarea {
253
- /* Resets the single-line .field-input height so the textarea can grow. */
254
- height: auto;
255
- min-height: 80px;
256
- resize: vertical;
257
- font-family: var(--font-sans);
258
- line-height: var(--leading-normal);
259
- }
260
- .field-size-sm .field-input-textarea { font-size: var(--text-sm); min-height: 60px; }
261
- .field-size-md .field-input-textarea { font-size: var(--text-base); min-height: 80px; }
262
- .field-size-lg .field-input-textarea { font-size: var(--text-md); min-height: 120px; }
263
- .field-hint {
264
- font-size: var(--text-xs);
265
- color: var(--text-tertiary);
266
- }
267
-
268
- /* ===== Select ===== */
269
- .select {
270
- display: inline-block;
271
- position: relative;
272
- width: 100%;
273
- }
274
- .select-native {
275
- width: 100%;
276
- font-family: inherit;
277
- font-size: var(--text-base);
278
- color: var(--text-primary);
279
- background-color: var(--surface-1);
280
- border: 1px solid var(--border-default);
281
- border-radius: var(--radius-md);
282
- padding: var(--space-2) calc(var(--space-6) + var(--space-2)) var(--space-2) var(--space-3);
283
- line-height: var(--leading-normal);
284
- appearance: none;
285
- cursor: pointer;
286
- transition: border-color var(--duration-fast) var(--ease-out),
287
- box-shadow var(--duration-fast) var(--ease-out);
288
- }
289
- .select-native:focus {
290
- outline: none;
291
- border-color: var(--border-focus);
292
- box-shadow: 0 0 0 2px var(--accent-subtle);
293
- }
294
- .select-native:disabled {
295
- opacity: 0.5;
296
- cursor: not-allowed;
297
- }
298
- .select-native.select-error {
299
- border-color: var(--danger);
300
- }
301
- .select-caret {
302
- position: absolute;
303
- right: var(--space-2);
304
- top: 50%;
305
- transform: translateY(-50%);
306
- pointer-events: none;
307
- color: var(--text-tertiary);
308
- }
309
- .select-size-sm .select-native { font-size: var(--text-sm); padding: var(--space-1) calc(var(--space-5) + var(--space-1)) var(--space-1) var(--space-2); height: 28px; }
310
- .select-size-md .select-native { height: 32px; }
311
- .select-size-lg .select-native { font-size: var(--text-md); padding: var(--space-3) calc(var(--space-7) + var(--space-1)) var(--space-3) var(--space-4); height: 40px; }
312
-
313
- /* ===== Checkbox ===== */
314
- .checkbox {
315
- display: inline-flex;
316
- align-items: center;
317
- gap: var(--space-2);
318
- cursor: pointer;
319
- user-select: none;
320
- }
321
- .checkbox-input {
322
- position: absolute;
323
- opacity: 0;
324
- width: 16px;
325
- height: 16px;
326
- margin: 0;
327
- cursor: pointer;
328
- }
329
- .checkbox-input:focus-visible + .checkbox-box {
330
- outline: 2px solid var(--border-focus);
331
- outline-offset: 2px;
332
- }
333
- .checkbox-input:disabled { cursor: not-allowed; }
334
- .checkbox:has(.checkbox-input:disabled) { opacity: 0.5; }
335
- .checkbox-box {
336
- display: inline-flex;
337
- align-items: center;
338
- justify-content: center;
339
- width: 16px;
340
- height: 16px;
341
- border: 1px solid var(--border-default);
342
- border-radius: var(--radius-sm);
343
- background-color: var(--surface-0);
344
- color: var(--accent-fg);
345
- transition: background-color var(--duration-fast) var(--ease-out),
346
- border-color var(--duration-fast) var(--ease-out);
347
- }
348
- .checkbox-checked .checkbox-box {
349
- background-color: var(--accent);
350
- border-color: var(--accent);
351
- }
352
- .checkbox-indeterminate .checkbox-box {
353
- background-color: var(--accent);
354
- border-color: var(--accent);
355
- }
356
- .checkbox-box svg { width: 12px; height: 12px; }
357
- .checkbox-label { color: var(--text-primary); font-size: var(--text-base); }
358
-
359
- /* ===== RadioGroup ===== */
360
- .radio-group {
361
- display: flex;
362
- flex-direction: column;
363
- gap: var(--space-2);
364
- }
365
- .radio-group-horizontal { flex-direction: row; gap: var(--space-5); }
366
- .radio-option {
367
- display: inline-flex;
368
- align-items: flex-start;
369
- gap: var(--space-2);
370
- cursor: pointer;
371
- user-select: none;
372
- }
373
- .radio-option-input {
374
- position: absolute;
375
- opacity: 0;
376
- width: 16px;
377
- height: 16px;
378
- margin: 0;
379
- cursor: pointer;
380
- }
381
- .radio-option-input:focus-visible + .radio-option-box {
382
- outline: 2px solid var(--border-focus);
383
- outline-offset: 2px;
384
- }
385
- .radio-option:has(.radio-option-input:disabled) { opacity: 0.5; cursor: not-allowed; }
386
- .radio-option-box {
387
- display: inline-flex;
388
- align-items: center;
389
- justify-content: center;
390
- width: 16px;
391
- height: 16px;
392
- border: 1px solid var(--border-default);
393
- border-radius: 50%;
394
- background-color: var(--surface-0);
395
- flex-shrink: 0;
396
- margin-top: 2px;
397
- }
398
- .radio-option-dot {
399
- width: 8px;
400
- height: 8px;
401
- border-radius: 50%;
402
- background-color: transparent;
403
- transition: background-color var(--duration-fast) var(--ease-out);
404
- }
405
- .radio-option-checked .radio-option-box {
406
- border-color: var(--accent);
407
- }
408
- .radio-option-checked .radio-option-dot {
409
- background-color: var(--accent);
410
- }
411
- .radio-option-content { display: inline-flex; flex-direction: column; gap: var(--space-1); }
412
- .radio-option-label { color: var(--text-primary); font-size: var(--text-base); }
413
- .radio-option-desc { color: var(--text-tertiary); font-size: var(--text-sm); }
414
-
415
- /* ===== Slider ===== */
416
- .slider {
417
- display: flex;
418
- flex-direction: column;
419
- gap: var(--space-2);
420
- width: 100%;
421
- }
422
- .slider-input {
423
- width: 100%;
424
- height: 4px;
425
- appearance: none;
426
- background-color: var(--surface-3);
427
- border-radius: var(--radius-full);
428
- outline: none;
429
- cursor: pointer;
430
- }
431
- .slider-input:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 2px; }
432
- .slider-input::-webkit-slider-thumb {
433
- appearance: none;
434
- width: 14px;
435
- height: 14px;
436
- border-radius: 50%;
437
- background-color: var(--accent);
438
- border: 2px solid var(--surface-0);
439
- box-shadow: 0 0 0 1px var(--accent);
440
- cursor: pointer;
441
- }
442
- .slider-input::-moz-range-thumb {
443
- width: 14px;
444
- height: 14px;
445
- border-radius: 50%;
446
- background-color: var(--accent);
447
- border: 2px solid var(--surface-0);
448
- box-shadow: 0 0 0 1px var(--accent);
449
- cursor: pointer;
450
- }
451
- .slider-input:disabled { opacity: 0.5; cursor: not-allowed; }
452
- .slider-header {
453
- display: flex;
454
- justify-content: space-between;
455
- align-items: center;
456
- }
457
- .slider-label { color: var(--text-primary); font-size: var(--text-base); }
458
- .slider-value { color: var(--text-secondary); font-size: var(--text-sm); font-variant-numeric: tabular-nums; }
459
-
460
- /* ===== Kbd ===== */
461
- .kbd {
462
- display: inline-flex;
463
- align-items: center;
464
- justify-content: center;
465
- min-width: 20px;
466
- height: 20px;
467
- padding: 0 var(--space-1);
468
- font-family: var(--font-mono);
469
- font-size: var(--text-xs);
470
- line-height: 1;
471
- color: var(--text-secondary);
472
- background-color: var(--surface-1);
473
- border: 1px solid var(--border-default);
474
- border-radius: var(--radius-sm);
475
- box-shadow: var(--shadow-hairline);
476
- }
@@ -1,35 +0,0 @@
1
- /*
2
- * index.ts — Barrel for form controls (Wave 2A).
3
- *
4
- * Side-effect import of controls.css ships the stylesheet to any
5
- * consumer that imports from this module graph. Wave 2's ui/index.ts
6
- * re-exports the exports below — leaving the CSS wiring here means
7
- * styles arrive without an additional integration step.
8
- */
9
-
10
- import './controls.css';
11
-
12
- export { Button } from './Button';
13
- export type { ButtonProps, ButtonVariant, ButtonSize } from './Button';
14
- export { IconButton } from './IconButton';
15
- export type { IconButtonProps, IconButtonVariant, IconButtonSize } from './IconButton';
16
- export { Toggle } from './Toggle';
17
- export type { ToggleProps, ToggleSize } from './Toggle';
18
- export { TextInput } from './TextInput';
19
- export type { TextInputProps, TextInputSize } from './TextInput';
20
- export { Textarea } from './Textarea';
21
- export type { TextareaProps, TextareaSize } from './Textarea';
22
- export { NumberInput } from './NumberInput';
23
- export type { NumberInputProps, NumberInputSize } from './NumberInput';
24
- export { Select } from './Select';
25
- export type { SelectProps, SelectOption, SelectSize } from './Select';
26
- export { Checkbox } from './Checkbox';
27
- export type { CheckboxProps } from './Checkbox';
28
- export { RadioGroup } from './RadioGroup';
29
- export type { RadioGroupProps, RadioOption, RadioOrientation } from './RadioGroup';
30
- export { Slider } from './Slider';
31
- export type { SliderProps } from './Slider';
32
- export { SearchInput } from './SearchInput';
33
- export type { SearchInputProps, SearchInputSize } from './SearchInput';
34
- export { Kbd } from './Kbd';
35
- export type { KbdProps } from './Kbd';
@@ -1,60 +0,0 @@
1
- /*
2
- * BarChart.tsx — Horizontal bar chart (Wave 2B).
3
- *
4
- * One row per data point: optional label + value header, then a thin
5
- * filled bar whose width is `value / maxValue * 100%`. Bar colour comes from
6
- * each datum (defaults to var(--chart-1)) so callers can colour by series
7
- * via e.g. colorTokens.chart2. No SVG, no chart library — CSS widths only.
8
- */
9
-
10
- import { cx } from '../utils/cx';
11
-
12
- export type BarChartDatum = {
13
- label: string;
14
- value: number;
15
- color?: string;
16
- };
17
-
18
- export type BarChartProps = {
19
- data: BarChartDatum[];
20
- maxValue?: number;
21
- showLabels?: boolean;
22
- className?: string;
23
- };
24
-
25
- export function BarChart({
26
- data,
27
- maxValue,
28
- showLabels = true,
29
- className,
30
- }: BarChartProps): React.JSX.Element {
31
- const computedMax =
32
- maxValue ?? Math.max(1, ...data.map((d) => d.value));
33
-
34
- return (
35
- <div className={cx('bd-bar-chart', className)} role="list">
36
- {data.map((d, i) => {
37
- const pct = Math.max(0, Math.min(100, (d.value / computedMax) * 100));
38
- return (
39
- <div key={`${d.label}-${i}`} role="listitem" className="bd-bar-chart__row">
40
- {showLabels && (
41
- <div className="bd-bar-chart__header">
42
- <span className="bd-bar-chart__label">{d.label}</span>
43
- <span className="bd-bar-chart__value">{d.value}</span>
44
- </div>
45
- )}
46
- <div className="bd-bar-chart__track" aria-hidden={!showLabels}>
47
- <div
48
- className="bd-bar-chart__bar"
49
- style={{
50
- width: `${pct}%`,
51
- background: d.color ?? 'var(--chart-1)',
52
- }}
53
- />
54
- </div>
55
- </div>
56
- );
57
- })}
58
- </div>
59
- );
60
- }