@polderlabs/bizar 7.0.4 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. package/.claude/agents/agent-browser.md +1 -1
  2. package/.claude/agents/baldr.md +1 -1
  3. package/.claude/agents/forseti.md +1 -1
  4. package/.claude/agents/frigg.md +1 -1
  5. package/.claude/agents/heimdall.md +1 -1
  6. package/.claude/agents/hermod.md +1 -1
  7. package/.claude/agents/mimir.md +1 -1
  8. package/.claude/agents/odin.md +1 -1
  9. package/.claude/agents/quick.md +1 -1
  10. package/.claude/agents/semble-search.md +1 -1
  11. package/.claude/agents/thor.md +1 -1
  12. package/.claude/agents/tyr.md +1 -1
  13. package/.claude/agents/vidarr.md +1 -1
  14. package/.claude/agents/vor.md +1 -1
  15. package/.claude/commands/goal.md +98 -0
  16. package/.claude/settings.local.json +7 -0
  17. package/bizar-dash/DESIGN.md +729 -969
  18. package/bizar-dash/GLYPH.md +418 -0
  19. package/bizar-dash/PLAN.md +1135 -0
  20. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +6 -0
  21. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +1 -0
  22. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +1 -0
  23. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +1 -0
  24. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +28 -0
  25. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +1 -0
  26. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js +1 -0
  27. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js.map +1 -0
  28. package/bizar-dash/dist/assets/Button-RmN1RKhE.js +6 -0
  29. package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +1 -0
  30. package/bizar-dash/dist/assets/Card-BzJeYR2D.js +1 -0
  31. package/bizar-dash/dist/assets/Card-BzJeYR2D.js.map +1 -0
  32. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js +1 -0
  33. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js.map +1 -0
  34. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js +1 -0
  35. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js.map +1 -0
  36. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +6 -0
  37. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +1 -0
  38. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js +21 -0
  39. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +1 -0
  40. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +67 -0
  41. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +1 -0
  42. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +13 -0
  43. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +1 -0
  44. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +1 -0
  45. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +1 -0
  46. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +16 -0
  47. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +1 -0
  48. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +10 -0
  49. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +1 -0
  50. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +43 -0
  51. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +1 -0
  52. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +1 -0
  53. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js.map +1 -0
  54. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +1 -0
  55. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +1 -0
  56. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +16 -0
  57. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +1 -0
  58. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +1 -0
  59. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +1 -0
  60. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js +1 -0
  61. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js.map +1 -0
  62. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js +6 -0
  63. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js.map +1 -0
  64. package/bizar-dash/dist/assets/brain-BajPVibR.js +6 -0
  65. package/bizar-dash/dist/assets/brain-BajPVibR.js.map +1 -0
  66. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js +6 -0
  67. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js.map +1 -0
  68. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js +80 -0
  69. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js.map +1 -0
  70. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js +5 -0
  71. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js.map +1 -0
  72. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js +11 -0
  73. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js.map +1 -0
  74. package/bizar-dash/dist/assets/index-AL3OLUfz.js +1 -0
  75. package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +1 -0
  76. package/bizar-dash/dist/assets/main-CcQfRfIJ.css +1 -0
  77. package/bizar-dash/dist/assets/main-LxX9zTRk.js +109 -0
  78. package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +1 -0
  79. package/bizar-dash/dist/assets/plus-CVH1JB04.js +6 -0
  80. package/bizar-dash/dist/assets/plus-CVH1JB04.js.map +1 -0
  81. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +11 -0
  82. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +1 -0
  83. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js +6 -0
  84. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js.map +1 -0
  85. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js +6 -0
  86. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js.map +1 -0
  87. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +1 -0
  88. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +1 -0
  89. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +1 -0
  90. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +1 -0
  91. package/bizar-dash/dist/assets/wrench-B7go551L.js +6 -0
  92. package/bizar-dash/dist/assets/wrench-B7go551L.js.map +1 -0
  93. package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
  94. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  95. package/bizar-dash/src/server/api.mjs +10 -0
  96. package/bizar-dash/src/server/bg-poller.mjs +81 -1
  97. package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
  98. package/bizar-dash/src/server/progress-parser.mjs +221 -0
  99. package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
  100. package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
  101. package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
  102. package/bizar-dash/src/server/routes/goals.mjs +307 -0
  103. package/bizar-dash/src/server/routes/tasks.mjs +11 -0
  104. package/bizar-dash/src/server/server.mjs +1 -57
  105. package/bizar-dash/src/web/v8/App.tsx +188 -0
  106. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
  107. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
  108. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
  109. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
  110. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
  111. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
  112. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
  113. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
  114. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
  115. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
  116. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
  117. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
  118. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
  119. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
  120. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
  121. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
  122. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
  123. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
  124. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
  125. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
  126. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
  127. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +182 -0
  128. package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  129. package/bizar-dash/src/web/v8/data/types.ts +154 -0
  130. package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  131. package/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
  132. package/bizar-dash/src/web/v8/main.tsx +28 -0
  133. package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  134. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  135. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  136. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  137. package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  138. package/bizar-dash/src/web/v8/shell/index.ts +15 -0
  139. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  140. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  141. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  142. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +252 -0
  143. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
  144. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  145. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  146. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  147. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  148. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  149. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  150. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  151. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  152. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  153. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  154. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  155. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  156. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  157. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  158. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  159. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  160. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  161. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  162. package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  163. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  164. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  165. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  166. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  167. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  168. package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  169. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  170. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  171. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  172. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  173. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  174. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  175. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  176. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  177. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  178. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  179. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  180. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  181. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  182. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  183. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  184. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  185. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
  186. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  187. package/bizar-dash/src/web/v8/ui/index.ts +322 -0
  188. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +83 -0
  189. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
  190. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +186 -0
  191. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
  192. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  193. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  194. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  195. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  196. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  197. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  198. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  199. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  200. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
  201. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  202. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  203. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  204. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  205. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  206. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  207. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  208. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  209. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  210. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  211. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  212. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  213. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  214. package/bizar-dash/src/web/v8/ui/styles/globals.css +225 -0
  215. package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  216. package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  217. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
  218. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  219. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
  220. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  221. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  222. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  223. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  224. package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  225. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +71 -0
  226. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +172 -0
  227. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
  228. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +247 -0
  229. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +193 -0
  230. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +108 -0
  231. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +77 -0
  232. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +152 -0
  233. package/bizar-dash/src/web/v8/views/Router.tsx +72 -0
  234. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +730 -0
  235. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  236. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
  237. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +165 -0
  238. package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  239. package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
  240. package/bizar-dash/tests/components/Button.test.tsx +51 -14
  241. package/bizar-dash/tests/components/Card.test.tsx +37 -20
  242. package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
  243. package/bizar-dash/tests/components/Toast.test.tsx +48 -95
  244. package/bizar-dash/tests/goals-decompose.test.mjs +177 -0
  245. package/bizar-dash/tests/setup.ts +47 -0
  246. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
  247. package/bizar-dash/vite.config.ts +41 -2
  248. package/bizar-dash/vitest.config.ts +9 -4
  249. package/cli/bin.mjs +32 -0
  250. package/cli/install.mjs +26 -1
  251. package/cli/provision-claude.mjs +86 -0
  252. package/package.json +36 -3
  253. package/scripts/run-dev.mjs +84 -0
  254. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
  255. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
  256. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
  257. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
  258. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
  259. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
  260. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
  261. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
  262. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  263. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
  264. package/bizar-dash/dist/assets/main-CJAtrosO.css +0 -1
  265. package/bizar-dash/dist/assets/main-DKKj9dsq.js +0 -430
  266. package/bizar-dash/dist/assets/main-DKKj9dsq.js.map +0 -1
  267. package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
  268. package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
  269. package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
  270. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
  271. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
  272. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
  273. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
  274. package/bizar-dash/dist/index.html +0 -43
  275. package/bizar-dash/src/web/App.tsx +0 -915
  276. package/bizar-dash/src/web/MobileApp.tsx +0 -414
  277. package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
  278. package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
  279. package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
  280. package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
  281. package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
  282. package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
  283. package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
  284. package/bizar-dash/src/web/components/Button.tsx +0 -56
  285. package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
  286. package/bizar-dash/src/web/components/Card.tsx +0 -40
  287. package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
  288. package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
  289. package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
  290. package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
  291. package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
  292. package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
  293. package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
  294. package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
  295. package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
  296. package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
  297. package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
  298. package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
  299. package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
  300. package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
  301. package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
  302. package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
  303. package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
  304. package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
  305. package/bizar-dash/src/web/components/Modal.tsx +0 -215
  306. package/bizar-dash/src/web/components/Notifications.tsx +0 -242
  307. package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
  308. package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
  309. package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
  310. package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
  311. package/bizar-dash/src/web/components/SettingsNav.tsx +0 -117
  312. package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
  313. package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
  314. package/bizar-dash/src/web/components/Spinner.tsx +0 -19
  315. package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
  316. package/bizar-dash/src/web/components/Tag.tsx +0 -41
  317. package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
  318. package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
  319. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
  320. package/bizar-dash/src/web/components/Toast.tsx +0 -150
  321. package/bizar-dash/src/web/components/Toggle.tsx +0 -31
  322. package/bizar-dash/src/web/components/Topbar.tsx +0 -455
  323. package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
  324. package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
  325. package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
  326. package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
  327. package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
  328. package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
  329. package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
  330. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
  331. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
  332. package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
  333. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
  334. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
  335. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
  336. package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
  337. package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
  338. package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
  339. package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
  340. package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
  341. package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
  342. package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
  343. package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
  344. package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
  345. package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
  346. package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
  347. package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
  348. package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
  349. package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
  350. package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
  351. package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
  352. package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
  353. package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
  354. package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
  355. package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
  356. package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
  357. package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
  358. package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
  359. package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
  360. package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
  361. package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
  362. package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
  363. package/bizar-dash/src/web/components/chat/index.ts +0 -31
  364. package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
  365. package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
  366. package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
  367. package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
  368. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
  369. package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
  370. package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
  371. package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
  372. package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
  373. package/bizar-dash/src/web/index.html +0 -37
  374. package/bizar-dash/src/web/lib/api.ts +0 -237
  375. package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
  376. package/bizar-dash/src/web/lib/i18n.ts +0 -25
  377. package/bizar-dash/src/web/lib/logger.ts +0 -30
  378. package/bizar-dash/src/web/lib/markdown.tsx +0 -59
  379. package/bizar-dash/src/web/lib/search.ts +0 -115
  380. package/bizar-dash/src/web/lib/types.ts +0 -894
  381. package/bizar-dash/src/web/lib/utils.ts +0 -114
  382. package/bizar-dash/src/web/lib/ws.ts +0 -177
  383. package/bizar-dash/src/web/locales/en.json +0 -52
  384. package/bizar-dash/src/web/main.tsx +0 -43
  385. package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
  386. package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
  387. package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
  388. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
  389. package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
  390. package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
  391. package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
  392. package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
  393. package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
  394. package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
  395. package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
  396. package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
  397. package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
  398. package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
  399. package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
  400. package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
  401. package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
  402. package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
  403. package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
  404. package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
  405. package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
  406. package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
  407. package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
  408. package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
  409. package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
  410. package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
  411. package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
  412. package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
  413. package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
  414. package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
  415. package/bizar-dash/src/web/mobile.tsx +0 -14
  416. package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
  417. package/bizar-dash/src/web/styles/chat.css +0 -1740
  418. package/bizar-dash/src/web/styles/glyphs.css +0 -960
  419. package/bizar-dash/src/web/styles/main.css +0 -10389
  420. package/bizar-dash/src/web/styles/memory.css +0 -1177
  421. package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
  422. package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
  423. package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
  424. package/bizar-dash/src/web/styles/mobile.css +0 -2181
  425. package/bizar-dash/src/web/styles/settings.css +0 -775
  426. package/bizar-dash/src/web/styles/skills.css +0 -302
  427. package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
  428. package/bizar-dash/src/web/styles/tasks.css +0 -605
  429. package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
  430. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
  431. package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
  432. package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
  433. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
  434. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
  435. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
  436. package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
  437. package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
  438. package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
  439. package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
  440. package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
  441. package/bizar-dash/src/web/ui/controls/controls.css +0 -476
  442. package/bizar-dash/src/web/ui/controls/index.ts +0 -35
  443. package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
  444. package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
  445. package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
  446. package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
  447. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
  448. package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
  449. package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
  450. package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
  451. package/bizar-dash/src/web/ui/data/data.css +0 -540
  452. package/bizar-dash/src/web/ui/data/index.ts +0 -31
  453. package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
  454. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
  455. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
  456. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
  457. package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
  458. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
  459. package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
  460. package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
  461. package/bizar-dash/src/web/ui/index.ts +0 -57
  462. package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
  463. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
  464. package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
  465. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
  466. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
  467. package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
  468. package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
  469. package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
  470. package/bizar-dash/src/web/ui/layout/index.ts +0 -34
  471. package/bizar-dash/src/web/ui/layout/layout.css +0 -464
  472. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
  473. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
  474. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
  475. package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
  476. package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
  477. package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
  478. package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
  479. package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
  480. package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
  481. package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
  482. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
  483. package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
  484. package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
  485. package/bizar-dash/src/web/ui/styles/globals.css +0 -86
  486. package/bizar-dash/src/web/ui/styles/reset.css +0 -125
  487. package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
  488. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
  489. package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
  490. package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
  491. package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
  492. package/bizar-dash/src/web/views/Activity.tsx +0 -1221
  493. package/bizar-dash/src/web/views/Agents.tsx +0 -964
  494. package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
  495. package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
  496. package/bizar-dash/src/web/views/Chat.tsx +0 -532
  497. package/bizar-dash/src/web/views/Config.tsx +0 -3
  498. package/bizar-dash/src/web/views/Doctor.tsx +0 -317
  499. package/bizar-dash/src/web/views/Eval.tsx +0 -372
  500. package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
  501. package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
  502. package/bizar-dash/src/web/views/Harness.tsx +0 -306
  503. package/bizar-dash/src/web/views/History.tsx +0 -353
  504. package/bizar-dash/src/web/views/Memory.tsx +0 -193
  505. package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
  506. package/bizar-dash/src/web/views/ModView.tsx +0 -207
  507. package/bizar-dash/src/web/views/Mods.tsx +0 -706
  508. package/bizar-dash/src/web/views/Overview.tsx +0 -1343
  509. package/bizar-dash/src/web/views/Providers.tsx +0 -302
  510. package/bizar-dash/src/web/views/Schedules.tsx +0 -902
  511. package/bizar-dash/src/web/views/Settings.tsx +0 -308
  512. package/bizar-dash/src/web/views/Skills.tsx +0 -383
  513. package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
  514. package/bizar-dash/src/web/views/Tasks.tsx +0 -789
  515. package/bizar-dash/src/web/views/Workspace.tsx +0 -294
  516. package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
  517. package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
  518. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
  519. package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
  520. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
  521. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
  522. package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
  523. package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
  524. package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
  525. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
  526. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
  527. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
  528. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
  529. package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
  530. package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
  531. package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
  532. package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
  533. package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
  534. package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
  535. package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
  536. package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
  537. package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
  538. package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
  539. package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
  540. package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
  541. package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
  542. package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
  543. package/packages/sdk/.harness/agents.json +0 -17
  544. package/packages/sdk/.harness/topology.json +0 -4
  545. /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
  546. /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
  547. /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
  548. /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
  549. /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
  550. /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
  551. /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
  552. /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
  553. /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
  554. /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
  555. /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
  556. /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
  557. /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
  558. /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
  559. /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
  560. /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
  561. /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
  562. /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
  563. /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
  564. /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
  565. /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
  566. /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
  567. /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
  568. /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
  569. /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
  570. /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
  571. /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
  572. /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
  573. /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
  574. /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
  575. /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
  576. /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
  577. /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
  578. /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
  579. /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
  580. /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
  581. /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
  582. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
  583. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
  584. /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
  585. /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
  586. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
  587. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
  588. /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
  589. /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
  590. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
  591. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
  592. /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
  593. /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
  594. /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
  595. /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
  596. /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
  597. /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
  598. /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
  599. /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
  600. /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
  601. /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
  602. /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
  603. /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
  604. /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
  605. /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
  606. /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
  607. /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
  608. /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
  609. /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
  610. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
  611. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
  612. /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
  613. /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
  614. /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
  615. /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
  616. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
  617. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
  618. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
  619. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
  620. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
  621. /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
  622. /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
  623. /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
  624. /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
  625. /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
  626. /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
  627. /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
@@ -0,0 +1,149 @@
1
+ import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import * as RxDialog from '@radix-ui/react-dialog';
3
+ import { X } from 'lucide-react';
4
+ import { cx } from '../utils/cx.js';
5
+
6
+ /**
7
+ * Dialog — modal panel.
8
+ *
9
+ * Built on Radix Dialog for focus trap + escape handling.
10
+ *
11
+ * Sizing:
12
+ * - sm : 360px (confirmations)
13
+ * - md : 560px (forms, kanban detail)
14
+ * - lg : 800px (rich content)
15
+ * - full: 100% (rare; long-running tasks)
16
+ *
17
+ * No nested modals per DESIGN.md §10 (banned trope).
18
+ */
19
+
20
+ export type DialogSize = 'sm' | 'md' | 'lg' | 'full';
21
+
22
+ export interface DialogProps extends ComponentPropsWithoutRef<typeof RxDialog.Root> {
23
+ children: ReactNode;
24
+ }
25
+
26
+ export const Dialog = ({ children, ...rest }: DialogProps) => (
27
+ <RxDialog.Root {...rest}>{children}</RxDialog.Root>
28
+ );
29
+
30
+ export const DialogTrigger = RxDialog.Trigger;
31
+ export const DialogClose = RxDialog.Close;
32
+ export const DialogPortal = RxDialog.Portal;
33
+
34
+ export interface DialogContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {
35
+ size?: DialogSize;
36
+ /** Title used for the screen-reader announcement. Prefer visible title via `title` prop. */
37
+ title: string;
38
+ /** Optional description; paired with title for a11y. */
39
+ description?: string;
40
+ /** Hide the explicit close button. Useful for AlertDialog (only OK/Cancel). */
41
+ hideClose?: boolean;
42
+ }
43
+
44
+ const WIDTH: Record<DialogSize, string> = {
45
+ sm: '420px',
46
+ md: '560px',
47
+ lg: '800px',
48
+ full: '100%',
49
+ };
50
+
51
+ export const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(function DialogContent(
52
+ props,
53
+ ref,
54
+ ) {
55
+ const { className, size = 'md', title, description, hideClose, children, ...rest } = props;
56
+ return (
57
+ <RxDialog.Portal>
58
+ <RxDialog.Overlay
59
+ className="v8-dialog-overlay"
60
+ style={{
61
+ position: 'fixed',
62
+ inset: 0,
63
+ background: 'oklch(0 0 0 / 0.4)',
64
+ backdropFilter: 'none',
65
+ zIndex: 'var(--z-modal)',
66
+ animation: 'v8-dialog-overlay-in var(--motion-base) var(--ease-out)',
67
+ }}
68
+ />
69
+ <RxDialog.Content
70
+ ref={ref}
71
+ className={cx('v8-dialog-content', className)}
72
+ style={{
73
+ position: 'fixed',
74
+ top: '50%',
75
+ left: '50%',
76
+ transform: 'translate(-50%, -50%)',
77
+ width: WIDTH[size],
78
+ maxWidth: 'calc(100vw - 32px)',
79
+ maxHeight: 'calc(100vh - 64px)',
80
+ background: 'var(--surface-popover)',
81
+ border: '1px solid var(--border)',
82
+ borderRadius: 'var(--radius-lg)',
83
+ boxShadow: 'var(--shadow-4)',
84
+ padding: 'var(--space-6)',
85
+ overflow: 'auto',
86
+ zIndex: 'calc(var(--z-modal) + 1)',
87
+ animation: 'v8-dialog-content-in var(--motion-base) var(--ease-out)',
88
+ }}
89
+ {...rest}
90
+ >
91
+ <RxDialog.Title
92
+ style={{
93
+ fontSize: 'var(--fs-18)',
94
+ fontWeight: 600,
95
+ marginBottom: description !== undefined ? 'var(--space-1)' : 'var(--space-4)',
96
+ }}
97
+ >
98
+ {title}
99
+ </RxDialog.Title>
100
+ {description !== undefined && (
101
+ <RxDialog.Description
102
+ style={{
103
+ fontSize: 'var(--fs-13)',
104
+ color: 'var(--fg-muted)',
105
+ marginBottom: 'var(--space-4)',
106
+ }}
107
+ >
108
+ {description}
109
+ </RxDialog.Description>
110
+ )}
111
+ {children}
112
+ {hideClose !== true && (
113
+ <RxDialog.Close
114
+ aria-label="Close"
115
+ style={{
116
+ position: 'absolute',
117
+ top: 12,
118
+ right: 12,
119
+ width: 28,
120
+ height: 28,
121
+ display: 'inline-flex',
122
+ alignItems: 'center',
123
+ justifyContent: 'center',
124
+ background: 'transparent',
125
+ border: 0,
126
+ borderRadius: 'var(--radius-sm)',
127
+ color: 'var(--fg-muted)',
128
+ cursor: 'pointer',
129
+ }}
130
+ >
131
+ <X size={16} aria-hidden="true" />
132
+ </RxDialog.Close>
133
+ )}
134
+ </RxDialog.Content>
135
+ </RxDialog.Portal>
136
+ );
137
+ });
138
+
139
+ /**
140
+ * AlertDialog — a confirmation dialog (always has at least one Cancel-style action).
141
+ *
142
+ * Built on top of Dialog. The semantic difference matters for screen readers:
143
+ * <AlertDialog> announces "alert" while <Dialog> doesn't.
144
+ */
145
+ export const AlertDialog = RxDialog.Root;
146
+ export const AlertDialogTrigger = RxDialog.Trigger;
147
+ export const AlertDialogAction = RxDialog.Close;
148
+ export const AlertDialogCancel = RxDialog.Close;
149
+ export const AlertDialogContent = DialogContent;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Drawer — alias for the right-side Sheet. The semantic distinction exists
3
+ * because in v8 a Drawer is task / agent detail (right side, fixed width)
4
+ * while a Sheet is more general (4 sides).
5
+ *
6
+ * Use this component name when you want a detail panel.
7
+ */
8
+ export { Sheet as Drawer, SheetContent as DrawerContent, SheetTrigger as DrawerTrigger, SheetClose as DrawerClose } from './Sheet.js';
@@ -0,0 +1,231 @@
1
+ import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import * as RxMenu from '@radix-ui/react-dropdown-menu';
3
+ import { Check, ChevronRight } from 'lucide-react';
4
+ import { cx } from '../utils/cx.js';
5
+
6
+ /**
7
+ * DropdownMenu — a menu attached to a trigger (button click).
8
+ *
9
+ * For right-click menus use ContextMenu. For menus inside a Card
10
+ * (without a trigger) use Menu directly.
11
+ */
12
+
13
+ export type DropdownMenuProps = ComponentPropsWithoutRef<typeof RxMenu.Root>;
14
+
15
+ export const DropdownMenu = ({ children, ...rest }: DropdownMenuProps) => (
16
+ <RxMenu.Root {...rest}>{children}</RxMenu.Root>
17
+ );
18
+
19
+ export const DropdownMenuTrigger = RxMenu.Trigger;
20
+ export const DropdownMenuGroup = RxMenu.Group;
21
+ export const DropdownMenuPortal = RxMenu.Portal;
22
+ export const DropdownMenuSub = RxMenu.Sub;
23
+ export const DropdownMenuRadioGroup = RxMenu.RadioGroup;
24
+
25
+ export interface DropdownMenuContentProps extends ComponentPropsWithoutRef<typeof RxMenu.Content> {
26
+ children: ReactNode;
27
+ }
28
+
29
+ export const DropdownMenuContent = forwardRef<HTMLDivElement, DropdownMenuContentProps>(
30
+ function DropdownMenuContent(props, ref) {
31
+ const { className, children, sideOffset = 4, ...rest } = props;
32
+ return (
33
+ <RxMenu.Portal>
34
+ <RxMenu.Content
35
+ ref={ref}
36
+ sideOffset={sideOffset}
37
+ className={cx('v8-dropdown-menu', className)}
38
+ style={{
39
+ minWidth: 180,
40
+ background: 'var(--surface-popover)',
41
+ border: '1px solid var(--border)',
42
+ borderRadius: 'var(--radius)',
43
+ boxShadow: 'var(--shadow-3)',
44
+ padding: 'var(--space-1)',
45
+ zIndex: 'var(--z-popover)',
46
+ }}
47
+ {...rest}
48
+ >
49
+ {children}
50
+ </RxMenu.Content>
51
+ </RxMenu.Portal>
52
+ );
53
+ },
54
+ );
55
+
56
+ export interface DropdownMenuItemProps extends ComponentPropsWithoutRef<typeof RxMenu.Item> {
57
+ /** Shortcut shown on the right (e.g. "⌘ K"). */
58
+ shortcut?: string;
59
+ /** When true, render a left-aligned danger color (used for delete actions). */
60
+ danger?: boolean;
61
+ leftIcon?: ReactNode;
62
+ }
63
+
64
+ export const DropdownMenuItem = forwardRef<HTMLDivElement, DropdownMenuItemProps>(
65
+ function DropdownMenuItem(props, ref) {
66
+ const { className, children, shortcut, danger, leftIcon, disabled, ...rest } = props;
67
+ return (
68
+ <RxMenu.Item
69
+ ref={ref}
70
+ disabled={disabled}
71
+ className={cx('v8-dropdown-menu__item', danger && 'is-danger', className)}
72
+ style={{
73
+ display: 'flex',
74
+ alignItems: 'center',
75
+ gap: 'var(--space-2)',
76
+ height: 28,
77
+ padding: '0 var(--space-2) 0 var(--space-3)',
78
+ borderRadius: 'var(--radius-sm)',
79
+ fontSize: 'var(--fs-13)',
80
+ color: danger === true ? 'var(--danger)' : 'var(--fg)',
81
+ cursor: disabled === true ? 'not-allowed' : 'pointer',
82
+ outline: 0,
83
+ userSelect: 'none',
84
+ }}
85
+ {...rest}
86
+ >
87
+ {leftIcon !== undefined && (
88
+ <span style={{ width: 14, display: 'inline-flex', color: 'var(--fg-muted)' }}>{leftIcon}</span>
89
+ )}
90
+ <span style={{ flex: 1, minWidth: 0 }}>{children}</span>
91
+ {shortcut !== undefined && (
92
+ <span
93
+ style={{
94
+ fontFamily: 'var(--font-mono)',
95
+ fontSize: 'var(--fs-12)',
96
+ color: 'var(--fg-muted)',
97
+ marginLeft: 'var(--space-2)',
98
+ }}
99
+ >
100
+ {shortcut}
101
+ </span>
102
+ )}
103
+ </RxMenu.Item>
104
+ );
105
+ },
106
+ );
107
+
108
+ export const DropdownMenuCheckboxItem = forwardRef<
109
+ HTMLDivElement,
110
+ ComponentPropsWithoutRef<typeof RxMenu.CheckboxItem> & { children: ReactNode }
111
+ >(function DropdownMenuCheckboxItem(props, ref) {
112
+ const { className, children, ...rest } = props;
113
+ return (
114
+ <RxMenu.CheckboxItem
115
+ ref={ref}
116
+ className={cx('v8-dropdown-menu__checkbox', className)}
117
+ style={{
118
+ display: 'flex',
119
+ alignItems: 'center',
120
+ gap: 'var(--space-2)',
121
+ height: 28,
122
+ padding: '0 var(--space-3)',
123
+ borderRadius: 'var(--radius-sm)',
124
+ fontSize: 'var(--fs-13)',
125
+ cursor: 'pointer',
126
+ outline: 0,
127
+ }}
128
+ {...rest}
129
+ >
130
+ <RxMenu.ItemIndicator style={{ display: 'inline-flex', color: 'var(--accent)' }}>
131
+ <Check size={14} aria-hidden="true" />
132
+ </RxMenu.ItemIndicator>
133
+ <span>{children}</span>
134
+ </RxMenu.CheckboxItem>
135
+ );
136
+ });
137
+
138
+ export const DropdownMenuLabel = forwardRef<
139
+ HTMLDivElement,
140
+ ComponentPropsWithoutRef<typeof RxMenu.Label>
141
+ >(function DropdownMenuLabel(props, ref) {
142
+ return (
143
+ <RxMenu.Label
144
+ ref={ref}
145
+ style={{
146
+ padding: 'var(--space-2) var(--space-3) var(--space-1)',
147
+ fontSize: 'var(--fs-12)',
148
+ fontWeight: 600,
149
+ color: 'var(--fg-subtle)',
150
+ textTransform: 'uppercase',
151
+ letterSpacing: 'var(--tracking-wide)',
152
+ }}
153
+ {...props}
154
+ />
155
+ );
156
+ });
157
+
158
+ export const DropdownMenuSeparator = forwardRef<
159
+ HTMLDivElement,
160
+ ComponentPropsWithoutRef<typeof RxMenu.Separator>
161
+ >(function DropdownMenuSeparator(props, ref) {
162
+ return (
163
+ <RxMenu.Separator
164
+ ref={ref}
165
+ style={{
166
+ height: 1,
167
+ margin: 'var(--space-1) 0',
168
+ background: 'var(--border)',
169
+ }}
170
+ {...props}
171
+ />
172
+ );
173
+ });
174
+
175
+ export interface DropdownMenuSubTriggerProps
176
+ extends ComponentPropsWithoutRef<typeof RxMenu.SubTrigger> {
177
+ children: ReactNode;
178
+ }
179
+
180
+ export const DropdownMenuSubTrigger = forwardRef<HTMLDivElement, DropdownMenuSubTriggerProps>(
181
+ function DropdownMenuSubTrigger(props, ref) {
182
+ const { className, children, ...rest } = props;
183
+ return (
184
+ <RxMenu.SubTrigger
185
+ ref={ref}
186
+ className={cx('v8-dropdown-menu__sub-trigger', className)}
187
+ style={{
188
+ display: 'flex',
189
+ alignItems: 'center',
190
+ gap: 'var(--space-2)',
191
+ height: 28,
192
+ padding: '0 var(--space-2) 0 var(--space-3)',
193
+ borderRadius: 'var(--radius-sm)',
194
+ fontSize: 'var(--fs-13)',
195
+ cursor: 'pointer',
196
+ outline: 0,
197
+ }}
198
+ {...rest}
199
+ >
200
+ <span style={{ flex: 1 }}>{children}</span>
201
+ <ChevronRight size={14} aria-hidden="true" style={{ color: 'var(--fg-muted)' }} />
202
+ </RxMenu.SubTrigger>
203
+ );
204
+ },
205
+ );
206
+
207
+ export const DropdownMenuSubContent = forwardRef<
208
+ HTMLDivElement,
209
+ ComponentPropsWithoutRef<typeof RxMenu.SubContent>
210
+ >(function DropdownMenuSubContent(props, ref) {
211
+ const { className, ...rest } = props;
212
+ return (
213
+ <RxMenu.Portal>
214
+ <RxMenu.SubContent
215
+ ref={ref}
216
+ sideOffset={2}
217
+ className={cx('v8-dropdown-menu__sub-content', className)}
218
+ style={{
219
+ minWidth: 180,
220
+ background: 'var(--surface-popover)',
221
+ border: '1px solid var(--border)',
222
+ borderRadius: 'var(--radius)',
223
+ boxShadow: 'var(--shadow-3)',
224
+ padding: 'var(--space-1)',
225
+ zIndex: 'var(--z-popover)',
226
+ }}
227
+ {...rest}
228
+ />
229
+ </RxMenu.Portal>
230
+ );
231
+ });
@@ -0,0 +1,48 @@
1
+ import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
2
+ import { cx } from '../utils/cx.js';
3
+
4
+ /**
5
+ * EmptyState — placeholder for empty lists / zero-data views.
6
+ *
7
+ * Use when a view has no rows. Never use a spinner; the data is
8
+ * genuinely empty.
9
+ */
10
+ export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
11
+ icon?: ReactNode;
12
+ title: ReactNode;
13
+ description?: ReactNode;
14
+ action?: ReactNode;
15
+ }
16
+
17
+ export const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(
18
+ props,
19
+ ref,
20
+ ) {
21
+ const { icon, title, description, action, className, ...rest } = props;
22
+ return (
23
+ <div
24
+ ref={ref}
25
+ className={cx('v8-empty-state', className)}
26
+ style={{
27
+ display: 'flex',
28
+ flexDirection: 'column',
29
+ alignItems: 'center',
30
+ justifyContent: 'center',
31
+ gap: 'var(--space-3)',
32
+ padding: 'var(--space-12) var(--space-6)',
33
+ textAlign: 'center',
34
+ color: 'var(--fg-muted)',
35
+ }}
36
+ {...rest}
37
+ >
38
+ {icon !== undefined && (
39
+ <div style={{ color: 'var(--fg-subtle)', display: 'inline-flex' }}>{icon}</div>
40
+ )}
41
+ <div style={{ fontSize: 'var(--fs-16)', fontWeight: 600, color: 'var(--fg)' }}>{title}</div>
42
+ {description !== undefined && (
43
+ <div style={{ fontSize: 'var(--fs-13)', maxWidth: 480 }}>{description}</div>
44
+ )}
45
+ {action !== undefined && <div style={{ marginTop: 'var(--space-2)' }}>{action}</div>}
46
+ </div>
47
+ );
48
+ });
@@ -0,0 +1,56 @@
1
+ import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import * as RxPopover from '@radix-ui/react-popover';
3
+ import { cx } from '../utils/cx.js';
4
+
5
+ /**
6
+ * Popover — a small floating panel anchored to a trigger.
7
+ *
8
+ * Use for: kanban filter dropdowns, date pickers, color pickers, info panels.
9
+ * For menus (a list of actions) use DropdownMenu. For right-click use ContextMenu.
10
+ */
11
+
12
+ export interface PopoverProps extends Omit<ComponentPropsWithoutRef<typeof RxPopover.Root>, 'children'> {
13
+ children: ReactNode;
14
+ }
15
+
16
+ export const Popover = ({ children, ...rest }: PopoverProps) => (
17
+ <RxPopover.Root {...rest}>{children}</RxPopover.Root>
18
+ );
19
+
20
+ export const PopoverTrigger = RxPopover.Trigger;
21
+ export const PopoverAnchor = RxPopover.Anchor;
22
+ export const PopoverClose = RxPopover.Close;
23
+
24
+ export interface PopoverContentProps extends ComponentPropsWithoutRef<typeof RxPopover.Content> {
25
+ children: ReactNode;
26
+ }
27
+
28
+ export const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(function PopoverContent(
29
+ props,
30
+ ref,
31
+ ) {
32
+ const { className, children, sideOffset = 6, ...rest } = props;
33
+ return (
34
+ <RxPopover.Portal>
35
+ <RxPopover.Content
36
+ ref={ref}
37
+ sideOffset={sideOffset}
38
+ className={cx('v8-popover', className)}
39
+ style={{
40
+ background: 'var(--surface-popover)',
41
+ border: '1px solid var(--border)',
42
+ borderRadius: 'var(--radius)',
43
+ boxShadow: 'var(--shadow-3)',
44
+ padding: 'var(--space-3)',
45
+ minWidth: 200,
46
+ maxWidth: 360,
47
+ zIndex: 'var(--z-popover)',
48
+ }}
49
+ {...rest}
50
+ >
51
+ {children}
52
+ <RxPopover.Arrow style={{ fill: 'var(--surface-popover)' }} />
53
+ </RxPopover.Content>
54
+ </RxPopover.Portal>
55
+ );
56
+ });
@@ -0,0 +1,103 @@
1
+ import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import * as RxDialog from '@radix-ui/react-dialog';
3
+ import { X } from 'lucide-react';
4
+ import { cx } from '../utils/cx.js';
5
+
6
+ /**
7
+ * Sheet — a side-anchored panel.
8
+ *
9
+ * Use for: task detail, agent detail, settings panels (mobile), kanban card
10
+ * expanded. Use a Dialog when the content is best presented centered.
11
+ */
12
+
13
+ export type SheetSide = 'top' | 'right' | 'bottom' | 'left';
14
+
15
+ export interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof RxDialog.Root>, 'children'> {
16
+ children: ReactNode;
17
+ }
18
+
19
+ export const Sheet = ({ children, ...rest }: SheetProps) => (
20
+ <RxDialog.Root {...rest}>{children}</RxDialog.Root>
21
+ );
22
+
23
+ export const SheetTrigger = RxDialog.Trigger;
24
+ export const SheetClose = RxDialog.Close;
25
+
26
+ export interface SheetContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {
27
+ side?: SheetSide;
28
+ title: string;
29
+ description?: string;
30
+ children: ReactNode;
31
+ }
32
+
33
+ const SIDE_STYLE: Record<SheetSide, React.CSSProperties> = {
34
+ top: { top: 0, left: 0, right: 0, height: '60vh', borderBottom: '1px solid var(--border)', borderRadius: '0 0 var(--radius-lg) var(--radius-lg)' },
35
+ right: { top: 0, right: 0, bottom: 0, width: 'min(560px, 100vw)', borderLeft: '1px solid var(--border)' },
36
+ bottom: { bottom: 0, left: 0, right: 0, height: '60vh', borderTop: '1px solid var(--border)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0' },
37
+ left: { top: 0, left: 0, bottom: 0, width: 'min(560px, 100vw)', borderRight: '1px solid var(--border)' },
38
+ };
39
+
40
+ export const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(function SheetContent(
41
+ props,
42
+ ref,
43
+ ) {
44
+ const { className, side = 'right', title, description, children, ...rest } = props;
45
+ return (
46
+ <RxDialog.Portal>
47
+ <RxDialog.Overlay
48
+ style={{
49
+ position: 'fixed',
50
+ inset: 0,
51
+ background: 'oklch(0 0 0 / 0.4)',
52
+ zIndex: 'var(--z-modal)',
53
+ }}
54
+ />
55
+ <RxDialog.Content
56
+ ref={ref}
57
+ data-side={side}
58
+ className={cx('v8-sheet', className)}
59
+ style={{
60
+ position: 'fixed',
61
+ background: 'var(--surface-popover)',
62
+ padding: 'var(--space-6)',
63
+ overflow: 'auto',
64
+ boxShadow: 'var(--shadow-4)',
65
+ zIndex: 'calc(var(--z-modal) + 1)',
66
+ ...SIDE_STYLE[side],
67
+ }}
68
+ {...rest}
69
+ >
70
+ <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 'var(--space-4)' }}>
71
+ <div>
72
+ <RxDialog.Title style={{ fontSize: 'var(--fs-18)', fontWeight: 600 }}>{title}</RxDialog.Title>
73
+ {description !== undefined && (
74
+ <RxDialog.Description
75
+ style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', marginTop: 'var(--space-1)' }}
76
+ >
77
+ {description}
78
+ </RxDialog.Description>
79
+ )}
80
+ </div>
81
+ <RxDialog.Close
82
+ aria-label="Close"
83
+ style={{
84
+ width: 28,
85
+ height: 28,
86
+ display: 'inline-flex',
87
+ alignItems: 'center',
88
+ justifyContent: 'center',
89
+ background: 'transparent',
90
+ border: 0,
91
+ borderRadius: 'var(--radius-sm)',
92
+ color: 'var(--fg-muted)',
93
+ cursor: 'pointer',
94
+ }}
95
+ >
96
+ <X size={16} aria-hidden="true" />
97
+ </RxDialog.Close>
98
+ </div>
99
+ {children}
100
+ </RxDialog.Content>
101
+ </RxDialog.Portal>
102
+ );
103
+ });
@@ -0,0 +1,67 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ import { cx } from '../utils/cx.js';
3
+
4
+ /**
5
+ * Skeleton — a placeholder that pulses while content loads.
6
+ *
7
+ * Per DESIGN.md §10: NEVER use a spinner labelled "Loading…". Use
8
+ * skeleton shapes that mirror the final content (text widths, card
9
+ * outlines, chart frames).
10
+ */
11
+ export interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {
12
+ width?: number | string;
13
+ height?: number | string;
14
+ radius?: 'sm' | 'md' | 'pill';
15
+ }
16
+
17
+ export function Skeleton({
18
+ width = '100%',
19
+ height = 16,
20
+ radius = 'sm',
21
+ className,
22
+ style,
23
+ ...rest
24
+ }: SkeletonProps): JSX.Element {
25
+ const radiusValue = radius === 'sm' ? 'var(--radius-sm)' : radius === 'pill' ? 'var(--radius-pill)' : 'var(--radius)';
26
+ return (
27
+ <div
28
+ className={cx('v8-skeleton', className)}
29
+ style={{
30
+ display: 'inline-block',
31
+ width: typeof width === 'number' ? `${width}px` : width,
32
+ height: typeof height === 'number' ? `${height}px` : height,
33
+ background:
34
+ 'linear-gradient(90deg, var(--surface-1) 0%, var(--surface-2) 50%, var(--surface-1) 100%)',
35
+ backgroundSize: '200% 100%',
36
+ borderRadius: radiusValue,
37
+ animation: 'v8-skeleton-pulse 1.4s ease-in-out infinite',
38
+ ...style,
39
+ }}
40
+ aria-hidden="true"
41
+ {...rest}
42
+ />
43
+ );
44
+ }
45
+
46
+ /**
47
+ * SkeletonText — multi-line text placeholder.
48
+ */
49
+ export interface SkeletonTextProps {
50
+ lines?: number;
51
+ /** Width of the last line (defaults to 60%). */
52
+ lastLineWidth?: string;
53
+ }
54
+
55
+ export function SkeletonText({ lines = 3, lastLineWidth = '60%' }: SkeletonTextProps): JSX.Element {
56
+ return (
57
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--space-2)' }} aria-hidden="true">
58
+ {Array.from({ length: lines }, (_, i) => (
59
+ <Skeleton
60
+ key={i}
61
+ width={i === lines - 1 ? lastLineWidth : '100%'}
62
+ height={12}
63
+ />
64
+ ))}
65
+ </div>
66
+ );
67
+ }
@@ -0,0 +1,30 @@
1
+ import { Loader2 } from 'lucide-react';
2
+ import { cx } from '../utils/cx.js';
3
+
4
+ /**
5
+ * Spinner — animated loading indicator.
6
+ *
7
+ * Per DESIGN.md §10 the v8 dashboard discourages standalone spinners —
8
+ * prefer <Skeleton> shapes. Use Spinner only inside small controls
9
+ * (Button loading state) or as an inline status indicator.
10
+ */
11
+ export interface SpinnerProps {
12
+ size?: number;
13
+ className?: string;
14
+ label?: string;
15
+ }
16
+
17
+ export function Spinner({ size = 16, className, label }: SpinnerProps): JSX.Element {
18
+ return (
19
+ <Loader2
20
+ size={size}
21
+ aria-label={label ?? 'Loading'}
22
+ role="status"
23
+ className={cx('v8-spinner', className)}
24
+ style={{
25
+ color: 'var(--fg-muted)',
26
+ animation: 'v8-spin 0.8s linear infinite',
27
+ }}
28
+ />
29
+ );
30
+ }