basalt-ui 1.41.0 → 2.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 (914) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +535 -518
  3. package/MIGRATING.md +945 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +14 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/doctor-upgrade.d.ts +31 -0
  175. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  176. package/dist/cli/doctor-upgrade.js +269 -0
  177. package/dist/cli/doctor.d.ts +13 -29
  178. package/dist/cli/doctor.d.ts.map +1 -1
  179. package/dist/cli/doctor.js +51 -9
  180. package/dist/cli/help.d.ts.map +1 -1
  181. package/dist/cli/help.js +2 -4
  182. package/dist/cli/index.d.ts +48 -172
  183. package/dist/cli/index.d.ts.map +1 -1
  184. package/dist/cli/index.js +39 -132
  185. package/dist/cli/init.d.ts.map +1 -1
  186. package/dist/cli/init.js +43 -37
  187. package/dist/cli/sync.d.ts +5 -21
  188. package/dist/cli/sync.d.ts.map +1 -1
  189. package/dist/cli/sync.js +4 -23
  190. package/dist/cli/tokens-css.d.ts +7 -28
  191. package/dist/cli/tokens-css.d.ts.map +1 -1
  192. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.js +4 -5
  194. package/dist/commands/define-commands.d.ts +15 -31
  195. package/dist/commands/define-commands.d.ts.map +1 -1
  196. package/dist/commands/define-commands.js +1 -11
  197. package/dist/commands/define-overlays.d.ts +5 -19
  198. package/dist/commands/define-overlays.d.ts.map +1 -1
  199. package/dist/commands/define-overlays.js +3 -11
  200. package/dist/commands/index.d.ts +10 -40
  201. package/dist/commands/index.d.ts.map +1 -1
  202. package/dist/commands/index.js +9 -46
  203. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  204. package/dist/commands/notifications/bell.d.ts.map +1 -0
  205. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  206. package/dist/commands/notifications/center.d.ts.map +1 -0
  207. package/dist/{notifications → commands/notifications}/center.js +2 -2
  208. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  209. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  210. package/dist/commands/notifications/notify.d.ts +44 -0
  211. package/dist/commands/notifications/notify.d.ts.map +1 -0
  212. package/dist/commands/notifications/notify.js +79 -0
  213. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  214. package/dist/commands/notifications/store.d.ts.map +1 -0
  215. package/dist/{notifications → commands/notifications}/store.js +4 -0
  216. package/dist/commands/projectors.d.ts +1 -131
  217. package/dist/commands/projectors.d.ts.map +1 -1
  218. package/dist/commands/projectors.js +2 -73
  219. package/dist/commands/shell-bridge.d.ts +3 -3
  220. package/dist/commands/shortcut-format.d.ts +5 -4
  221. package/dist/commands/shortcut-format.d.ts.map +1 -1
  222. package/dist/common/errors.d.ts +3 -3
  223. package/dist/common/use-measured-widths.d.ts.map +1 -1
  224. package/dist/common/use-measured-widths.js +5 -3
  225. package/dist/common/validate.d.ts +2 -2
  226. package/dist/content/article-layout.d.ts.map +1 -1
  227. package/dist/content/article-layout.js +3 -3
  228. package/dist/content/article-model.d.ts +1 -46
  229. package/dist/content/article-model.d.ts.map +1 -1
  230. package/dist/content/article-model.js +1 -29
  231. package/dist/content/index.d.ts +11 -41
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +3 -35
  234. package/dist/content/markdown.d.ts +1 -1
  235. package/dist/content/markdown.d.ts.map +1 -1
  236. package/dist/content/markdown.js +1 -1
  237. package/dist/content/mermaid.d.ts.map +1 -1
  238. package/dist/content/mermaid.js +7 -7
  239. package/dist/content/slug.d.ts +1 -8
  240. package/dist/content/slug.d.ts.map +1 -1
  241. package/dist/content/slug.js +1 -8
  242. package/dist/content/url-hardening.d.ts +2 -2
  243. package/dist/content/url-hardening.d.ts.map +1 -1
  244. package/dist/content/url-hardening.js +2 -0
  245. package/dist/controls/actions.d.ts +16 -1
  246. package/dist/controls/actions.d.ts.map +1 -1
  247. package/dist/controls/enum-filter.d.ts +1 -1
  248. package/dist/controls/enum-filter.d.ts.map +1 -1
  249. package/dist/controls/filter-context.d.ts.map +1 -1
  250. package/dist/controls/filter-context.js +3 -1
  251. package/dist/controls/filter-set.js +4 -6
  252. package/dist/controls/form-layout.d.ts +1 -1
  253. package/dist/controls/form-layout.d.ts.map +1 -1
  254. package/dist/controls/form-layout.js +1 -1
  255. package/dist/controls/glyphs.d.ts +0 -2
  256. package/dist/controls/glyphs.d.ts.map +1 -1
  257. package/dist/controls/glyphs.js +0 -7
  258. package/dist/controls/index.d.ts +12 -17
  259. package/dist/controls/index.d.ts.map +1 -1
  260. package/dist/controls/index.js +5 -39
  261. package/dist/controls/multi-select-filter.d.ts +4 -3
  262. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  263. package/dist/controls/number-filter.d.ts +4 -3
  264. package/dist/controls/number-filter.d.ts.map +1 -1
  265. package/dist/controls/number-filter.js +3 -1
  266. package/dist/controls/range-filter.d.ts +4 -3
  267. package/dist/controls/range-filter.d.ts.map +1 -1
  268. package/dist/controls/search-filter.d.ts +4 -3
  269. package/dist/controls/search-filter.d.ts.map +1 -1
  270. package/dist/controls/search-filter.js +19 -14
  271. package/dist/controls/select-filter.d.ts +4 -3
  272. package/dist/controls/select-filter.d.ts.map +1 -1
  273. package/dist/controls/sync-button.d.ts.map +1 -1
  274. package/dist/controls/sync-button.js +12 -15
  275. package/dist/controls/toggle-filter.d.ts +4 -3
  276. package/dist/controls/toggle-filter.d.ts.map +1 -1
  277. package/dist/controls/uncontrolled.d.ts +12 -0
  278. package/dist/controls/uncontrolled.d.ts.map +1 -0
  279. package/dist/controls/view-tabs.d.ts +2 -2
  280. package/dist/controls/view-tabs.d.ts.map +1 -1
  281. package/dist/controls-dates/index.d.ts +0 -1
  282. package/dist/controls-dates/index.d.ts.map +1 -1
  283. package/dist/dashboard/index.d.ts +7 -9
  284. package/dist/dashboard/index.d.ts.map +1 -1
  285. package/dist/dashboard/index.js +3 -23
  286. package/dist/dashboard/section.d.ts +4 -6
  287. package/dist/dashboard/section.d.ts.map +1 -1
  288. package/dist/dashboard/section.js +4 -10
  289. package/dist/dashboard/stat-card.d.ts +4 -4
  290. package/dist/dashboard/stat-card.d.ts.map +1 -1
  291. package/dist/dashboard/stat-card.js +3 -3
  292. package/dist/dashboard/widget-header.module.css +9 -7
  293. package/dist/dev-dock.d.ts.map +1 -1
  294. package/dist/dev-dock.js +6 -1
  295. package/dist/format/date.d.ts +0 -34
  296. package/dist/format/date.d.ts.map +1 -1
  297. package/dist/format/date.js +0 -54
  298. package/dist/format/index.d.ts +7 -22
  299. package/dist/format/index.d.ts.map +1 -1
  300. package/dist/format/index.js +2 -43
  301. package/dist/format/number.d.ts +3 -14
  302. package/dist/format/number.d.ts.map +1 -1
  303. package/dist/format/number.js +0 -13
  304. package/dist/format/shared.d.ts +2 -3
  305. package/dist/format/shared.d.ts.map +1 -1
  306. package/dist/forms/index.d.ts +0 -11
  307. package/dist/forms/index.d.ts.map +1 -1
  308. package/dist/forms/index.js +1 -14
  309. package/dist/guard/index.d.ts +6 -21
  310. package/dist/guard/index.d.ts.map +1 -1
  311. package/dist/guard/index.js +27 -115
  312. package/dist/guard/types.d.ts +7 -18
  313. package/dist/guard/types.d.ts.map +1 -1
  314. package/dist/index.d.ts +16 -48
  315. package/dist/index.d.ts.map +1 -1
  316. package/dist/index.js +21 -117
  317. package/dist/provider/create-router.d.ts +44 -0
  318. package/dist/provider/create-router.d.ts.map +1 -0
  319. package/dist/provider/create-router.js +62 -0
  320. package/dist/provider/hotkeys.d.ts +8 -0
  321. package/dist/provider/hotkeys.d.ts.map +1 -0
  322. package/dist/provider/hotkeys.js +50 -0
  323. package/dist/provider/index.d.ts +33 -110
  324. package/dist/provider/index.d.ts.map +1 -1
  325. package/dist/provider/index.js +182 -82
  326. package/dist/provider/lab-theme.d.ts.map +1 -1
  327. package/dist/provider/route-transition.d.ts +76 -0
  328. package/dist/provider/route-transition.d.ts.map +1 -0
  329. package/dist/provider/route-transition.js +98 -0
  330. package/dist/provider/spotlight-actions.d.ts +10 -0
  331. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  332. package/dist/provider/spotlight-actions.js +55 -0
  333. package/dist/provider/test-router.d.ts +6 -0
  334. package/dist/provider/test-router.d.ts.map +1 -0
  335. package/dist/provider/test-router.js +18 -0
  336. package/dist/query-client.d.ts +4 -20
  337. package/dist/query-client.d.ts.map +1 -1
  338. package/dist/query-client.js +2 -2
  339. package/dist/router-tanstack/index.d.ts +18 -64
  340. package/dist/router-tanstack/index.d.ts.map +1 -1
  341. package/dist/router-tanstack/index.js +2 -16
  342. package/dist/router-tanstack/nav.d.ts +12 -1
  343. package/dist/router-tanstack/nav.d.ts.map +1 -1
  344. package/dist/router-tanstack/nav.js +8 -1
  345. package/dist/router-tanstack/search-store.d.ts +1 -1
  346. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  347. package/dist/router-tanstack/use-nav.d.ts +8 -9
  348. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/use-nav.js +20 -1
  350. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  351. package/dist/shell/app-sidebar.js +1 -1
  352. package/dist/shell/index.d.ts +31 -10
  353. package/dist/shell/index.d.ts.map +1 -1
  354. package/dist/shell/index.js +14 -3
  355. package/dist/shell/page-aside.d.ts +2 -2
  356. package/dist/shell/page-aside.d.ts.map +1 -1
  357. package/dist/shell/page-aside.js +31 -12
  358. package/dist/shell/page-bar.d.ts +2 -2
  359. package/dist/shell/page-bar.d.ts.map +1 -1
  360. package/dist/shell/page-bar.js +1 -1
  361. package/dist/state.d.ts +10 -12
  362. package/dist/state.d.ts.map +1 -1
  363. package/dist/state.js +4 -6
  364. package/dist/styles.css +107 -7
  365. package/dist/surfaces.d.ts +28 -103
  366. package/dist/surfaces.d.ts.map +1 -1
  367. package/dist/surfaces.js +54 -143
  368. package/dist/{data → table}/data-table-state.d.ts +1 -1
  369. package/dist/table/data-table-state.d.ts.map +1 -0
  370. package/dist/{data → table}/data-table-state.js +4 -3
  371. package/dist/{data → table}/data-table.d.ts +28 -49
  372. package/dist/table/data-table.d.ts.map +1 -0
  373. package/dist/{data → table}/data-table.js +74 -60
  374. package/dist/table/index.d.ts +18 -0
  375. package/dist/table/index.d.ts.map +1 -0
  376. package/dist/{data/table.js → table/index.js} +1 -1
  377. package/dist/table/query-branch.d.ts.map +1 -0
  378. package/dist/table/table-features.d.ts +69 -0
  379. package/dist/table/table-features.d.ts.map +1 -0
  380. package/dist/table/table-features.js +49 -0
  381. package/dist/telemetry.d.ts +77 -0
  382. package/dist/telemetry.d.ts.map +1 -0
  383. package/dist/telemetry.js +33 -0
  384. package/dist/theme/index.d.ts +10 -21
  385. package/dist/theme/index.d.ts.map +1 -1
  386. package/dist/theme/index.js +3 -14
  387. package/dist/theme/theme-toggle.d.ts.map +1 -1
  388. package/dist/theme/theme-toggle.js +7 -33
  389. package/dist/theme/theme-toggle.module.css +30 -0
  390. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  391. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  392. package/dist/theme-lab/derive-controls.js +5 -3
  393. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  394. package/dist/theme-lab/derive-state.js +2 -1
  395. package/dist/tokens/core.d.ts +360 -0
  396. package/dist/tokens/core.d.ts.map +1 -0
  397. package/dist/tokens/core.js +708 -0
  398. package/dist/tokens/derive.d.ts +1 -1
  399. package/dist/tokens/derive.d.ts.map +1 -1
  400. package/dist/tokens/index.d.ts +5 -373
  401. package/dist/tokens/index.d.ts.map +1 -1
  402. package/dist/tokens/index.js +8 -700
  403. package/dist/tokens/palette.d.ts +2 -6
  404. package/dist/tokens/palette.d.ts.map +1 -1
  405. package/dist/tokens/palette.js +1 -4
  406. package/dist/vite.d.ts +4 -3
  407. package/dist/vite.d.ts.map +1 -1
  408. package/llms.txt +43 -85
  409. package/package.json +77 -170
  410. package/src/agent/ai-sdk-transport.ts +57 -37
  411. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  412. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  413. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  414. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  415. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  416. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  417. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  418. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  419. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  420. package/src/agent/error.ts +43 -0
  421. package/src/agent/history.ts +2 -107
  422. package/src/agent/id.ts +4 -5
  423. package/src/agent/index.ts +23 -112
  424. package/src/agent/outcome.ts +3 -56
  425. package/src/agent/part-list.tsx +3 -3
  426. package/src/agent/parts.ts +23 -22
  427. package/src/agent/run-committer.ts +64 -0
  428. package/src/agent/run-records.ts +147 -0
  429. package/src/agent/thread.ts +24 -231
  430. package/src/agent/transport.ts +6 -96
  431. package/src/agent/use-agent-thread-runs.ts +364 -199
  432. package/src/charts/BandStrip.tsx +276 -0
  433. package/src/charts/Bars.tsx +141 -0
  434. package/src/charts/CartesianChart.tsx +206 -0
  435. package/src/charts/ChartCard.tsx +178 -0
  436. package/src/charts/Donut.tsx +256 -0
  437. package/src/charts/DualPanel.tsx +326 -0
  438. package/src/charts/Heatmap.tsx +282 -0
  439. package/src/charts/Lines.tsx +151 -0
  440. package/src/charts/MirroredBars.tsx +303 -0
  441. package/src/charts/Sparkline.tsx +176 -0
  442. package/src/charts/StackedArea.tsx +80 -0
  443. package/src/charts/box.tsx +96 -0
  444. package/src/charts/card-context.ts +11 -0
  445. package/src/charts/chart-box.module.css +64 -0
  446. package/src/charts/chart-box.module.css.d.ts +12 -0
  447. package/src/charts/chart-card.module.css +25 -0
  448. package/src/charts/chart-card.module.css.d.ts +8 -0
  449. package/src/charts/chart-legend.module.css +38 -0
  450. package/src/charts/chart-legend.module.css.d.ts +10 -0
  451. package/src/charts/compile.ts +585 -0
  452. package/src/charts/cursor.ts +282 -0
  453. package/src/charts/curves.ts +111 -0
  454. package/src/charts/donut.module.css +54 -0
  455. package/src/charts/donut.module.css.d.ts +9 -0
  456. package/src/charts/host.tsx +60 -0
  457. package/src/charts/index.ts +41 -178
  458. package/src/charts/legend.tsx +204 -0
  459. package/src/charts/marks.ts +201 -0
  460. package/src/charts/panel.tsx +227 -0
  461. package/src/charts/scales.ts +237 -0
  462. package/src/charts/sizing.ts +47 -0
  463. package/src/charts/state.tsx +80 -0
  464. package/src/charts/theme.ts +65 -0
  465. package/src/charts/types.ts +242 -0
  466. package/src/cli/audit-allows.ts +8 -30
  467. package/src/cli/config.ts +14 -43
  468. package/src/cli/doctor-upgrade.ts +392 -0
  469. package/src/cli/doctor.ts +81 -72
  470. package/src/cli/help.ts +2 -4
  471. package/src/cli/index.ts +100 -384
  472. package/src/cli/init.ts +60 -51
  473. package/src/cli/sync.ts +13 -68
  474. package/src/cli/tokens-css.ts +7 -28
  475. package/src/commands/ShortcutsHelp.tsx +8 -9
  476. package/src/commands/define-commands.ts +16 -43
  477. package/src/commands/define-overlays.ts +12 -36
  478. package/src/commands/index.ts +11 -94
  479. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  480. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  481. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  482. package/src/commands/notifications/notify.tsx +158 -0
  483. package/src/{notifications → commands/notifications}/store.ts +10 -2
  484. package/src/commands/projectors.ts +5 -225
  485. package/src/commands/shell-bridge.ts +5 -5
  486. package/src/commands/shortcut-format.ts +5 -4
  487. package/src/common/errors.ts +3 -3
  488. package/src/common/use-measured-widths.ts +6 -3
  489. package/src/common/validate.ts +2 -2
  490. package/src/content/article-layout.tsx +37 -38
  491. package/src/content/article-model.ts +1 -84
  492. package/src/content/index.ts +12 -83
  493. package/src/content/markdown.tsx +4 -3
  494. package/src/content/mermaid.tsx +9 -7
  495. package/src/content/slug.ts +1 -16
  496. package/src/content/url-hardening.ts +8 -2
  497. package/src/controls/actions.tsx +24 -1
  498. package/src/controls/enum-filter.tsx +1 -1
  499. package/src/controls/filter-context.tsx +3 -1
  500. package/src/controls/filter-set.tsx +5 -7
  501. package/src/controls/form-layout.tsx +2 -2
  502. package/src/controls/glyphs.tsx +0 -10
  503. package/src/controls/index.ts +13 -64
  504. package/src/controls/multi-select-filter.tsx +5 -4
  505. package/src/controls/number-filter.tsx +8 -4
  506. package/src/controls/range-filter.tsx +5 -4
  507. package/src/controls/search-filter.tsx +25 -19
  508. package/src/controls/select-filter.tsx +5 -4
  509. package/src/controls/sync-button.tsx +18 -20
  510. package/src/controls/toggle-filter.tsx +5 -4
  511. package/src/controls/uncontrolled.ts +12 -0
  512. package/src/controls/view-tabs.tsx +3 -3
  513. package/src/controls-dates/date-range-picker.tsx +1 -1
  514. package/src/controls-dates/index.ts +0 -1
  515. package/src/dashboard/index.ts +7 -48
  516. package/src/dashboard/section.tsx +11 -40
  517. package/src/dashboard/stat-card.tsx +14 -16
  518. package/src/dashboard/widget-header.module.css +9 -7
  519. package/src/dev-dock.tsx +14 -27
  520. package/src/format/date.ts +2 -92
  521. package/src/format/index.ts +7 -53
  522. package/src/format/number.ts +3 -26
  523. package/src/format/shared.ts +2 -3
  524. package/src/forms/index.ts +0 -23
  525. package/src/guard/index.ts +36 -191
  526. package/src/guard/types.ts +6 -19
  527. package/src/index.ts +30 -282
  528. package/src/provider/create-router.tsx +138 -0
  529. package/src/provider/hotkeys.ts +70 -0
  530. package/src/provider/index.tsx +260 -230
  531. package/src/provider/lab-theme.ts +3 -2
  532. package/src/provider/route-transition.ts +199 -0
  533. package/src/provider/spotlight-actions.tsx +69 -0
  534. package/src/provider/test-router.tsx +25 -0
  535. package/src/query-client.ts +4 -22
  536. package/src/router-tanstack/index.ts +18 -112
  537. package/src/router-tanstack/nav.ts +28 -2
  538. package/src/router-tanstack/search-store.ts +9 -2
  539. package/src/router-tanstack/use-nav.ts +47 -13
  540. package/src/shell/app-mobile-nav.tsx +3 -2
  541. package/src/shell/app-sidebar.tsx +1 -1
  542. package/src/shell/aside-docking.ts +1 -1
  543. package/src/shell/index.tsx +61 -20
  544. package/src/shell/page-aside.tsx +47 -23
  545. package/src/shell/page-bar.tsx +3 -3
  546. package/src/shell/page-title.tsx +1 -1
  547. package/src/state.ts +11 -37
  548. package/src/styles.css +107 -7
  549. package/src/surfaces.ts +56 -151
  550. package/src/{data → table}/data-table-state.ts +5 -4
  551. package/src/{data → table}/data-table.tsx +170 -161
  552. package/src/table/index.ts +18 -0
  553. package/src/table/table-features.ts +102 -0
  554. package/src/telemetry.ts +110 -0
  555. package/src/theme/index.ts +22 -47
  556. package/src/theme/theme-toggle.module.css +30 -0
  557. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  558. package/src/theme/theme-toggle.tsx +15 -43
  559. package/src/theme-lab/derive-controls.tsx +5 -3
  560. package/src/theme-lab/derive-state.ts +2 -1
  561. package/src/tokens/core.ts +1163 -0
  562. package/src/tokens/derive.ts +1 -1
  563. package/src/tokens/index.ts +14 -1181
  564. package/src/tokens/palette.ts +3 -7
  565. package/src/vite.ts +3 -3
  566. package/agent/templates/query-client.ts.tpl +0 -26
  567. package/dist/agent/adapter.d.ts +0 -150
  568. package/dist/agent/adapter.d.ts.map +0 -1
  569. package/dist/agent/adapter.js +0 -482
  570. package/dist/agent/use-agent-stream.d.ts +0 -35
  571. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  572. package/dist/agent/use-agent-stream.js +0 -59
  573. package/dist/agent-chat/composer.d.ts.map +0 -1
  574. package/dist/agent-chat/index.d.ts +0 -31
  575. package/dist/agent-chat/index.d.ts.map +0 -1
  576. package/dist/agent-chat/index.js +0 -19
  577. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  578. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  579. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  580. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  581. package/dist/agent-chat/thread-detail-panel.js +0 -115
  582. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  583. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  587. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-workspace.js +0 -153
  589. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  590. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  591. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  592. package/dist/charts/cursor/resolve.d.ts +0 -75
  593. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  594. package/dist/charts/cursor/resolve.js +0 -91
  595. package/dist/charts/cursor/scope.d.ts +0 -20
  596. package/dist/charts/cursor/scope.d.ts.map +0 -1
  597. package/dist/charts/cursor/scope.js +0 -20
  598. package/dist/charts/cursor/store.d.ts +0 -35
  599. package/dist/charts/cursor/store.d.ts.map +0 -1
  600. package/dist/charts/cursor/store.js +0 -25
  601. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  602. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  603. package/dist/charts/cursor/touch-pin.js +0 -79
  604. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  606. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  607. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  608. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  609. package/dist/charts/hooks/use-hysteresis.js +0 -12
  610. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  611. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  612. package/dist/charts/hooks/useBandPlot.js +0 -178
  613. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  614. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/useChartCursor.js +0 -200
  616. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  617. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  618. package/dist/charts/hooks/useChartSize.js +0 -8
  619. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  620. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  621. package/dist/charts/kinds/BandStrip.js +0 -241
  622. package/dist/charts/kinds/Bars.d.ts +0 -141
  623. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  624. package/dist/charts/kinds/Bars.js +0 -343
  625. package/dist/charts/kinds/Donut.d.ts +0 -77
  626. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  627. package/dist/charts/kinds/Donut.js +0 -245
  628. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  629. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  630. package/dist/charts/kinds/DualPanel.js +0 -471
  631. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  632. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  633. package/dist/charts/kinds/Heatmap.js +0 -243
  634. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  635. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  636. package/dist/charts/kinds/MirroredBars.js +0 -292
  637. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  638. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  639. package/dist/charts/kinds/MultiLine.js +0 -176
  640. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  641. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  642. package/dist/charts/kinds/StackedArea.js +0 -135
  643. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  644. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  645. package/dist/charts/kinds/ZonedLine.js +0 -155
  646. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  647. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  648. package/dist/charts/kinds/band-chrome.js +0 -71
  649. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  650. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  651. package/dist/charts/kinds/donut-layout.js +0 -52
  652. package/dist/charts/layout/auto-margin.d.ts +0 -122
  653. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  654. package/dist/charts/layout/auto-margin.js +0 -81
  655. package/dist/charts/layout/end-labels.d.ts +0 -64
  656. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  657. package/dist/charts/layout/end-labels.js +0 -76
  658. package/dist/charts/layout/log-ticks.d.ts +0 -27
  659. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  660. package/dist/charts/layout/log-ticks.js +0 -42
  661. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  662. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  663. package/dist/charts/primitives/AreaGradient.js +0 -13
  664. package/dist/charts/primitives/Axes.d.ts +0 -83
  665. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  666. package/dist/charts/primitives/Axes.js +0 -168
  667. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  668. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  669. package/dist/charts/primitives/CartesianChart.js +0 -549
  670. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  671. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  672. package/dist/charts/primitives/ChartCard.js +0 -143
  673. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  674. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  675. package/dist/charts/primitives/ChartFrame.js +0 -241
  676. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  677. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  678. package/dist/charts/primitives/ChartLegend.js +0 -292
  679. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  680. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartPending.js +0 -117
  682. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  683. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartTooltip.js +0 -197
  685. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  686. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  687. package/dist/charts/primitives/Crosshair.js +0 -23
  688. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  689. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  690. package/dist/charts/primitives/HatchPattern.js +0 -31
  691. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  692. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  693. package/dist/charts/primitives/HoverOverlay.js +0 -72
  694. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  695. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  696. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  697. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  698. package/dist/charts/primitives/XZoneRects.js +0 -65
  699. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  700. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  701. package/dist/charts/primitives/ZoneRects.js +0 -30
  702. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  703. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  704. package/dist/charts/primitives/chart-card-context.js +0 -18
  705. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  706. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  707. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  708. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  709. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  710. package/dist/charts/primitives/chart-layout.js +0 -175
  711. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  712. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-tier.js +0 -44
  714. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  715. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  716. package/dist/charts/primitives/legend-disclosure.js +0 -153
  717. package/dist/charts/series.d.ts +0 -189
  718. package/dist/charts/series.d.ts.map +0 -1
  719. package/dist/charts/series.js +0 -84
  720. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  721. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  722. package/dist/charts/sparklines/BarSparkline.js +0 -53
  723. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  724. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  725. package/dist/charts/sparklines/LineSparkline.js +0 -51
  726. package/dist/charts/sparklines/index.d.ts +0 -3
  727. package/dist/charts/sparklines/index.d.ts.map +0 -1
  728. package/dist/charts/sparklines/index.js +0 -6
  729. package/dist/charts/utils/domain.d.ts +0 -35
  730. package/dist/charts/utils/domain.d.ts.map +0 -1
  731. package/dist/charts/utils/domain.js +0 -12
  732. package/dist/charts/utils/format.d.ts +0 -8
  733. package/dist/charts/utils/format.d.ts.map +0 -1
  734. package/dist/charts/utils/format.js +0 -20
  735. package/dist/charts/utils/measure-text.d.ts +0 -25
  736. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  737. package/dist/charts/utils/measure-text.js +0 -64
  738. package/dist/charts/utils/ticks.d.ts +0 -103
  739. package/dist/charts/utils/ticks.d.ts.map +0 -1
  740. package/dist/charts/utils/ticks.js +0 -92
  741. package/dist/commands/overlays-mount.d.ts +0 -122
  742. package/dist/commands/overlays-mount.d.ts.map +0 -1
  743. package/dist/commands/overlays-mount.js +0 -125
  744. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  745. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  746. package/dist/commands/useCommandHotkeys.js +0 -45
  747. package/dist/content/article-actions.d.ts +0 -39
  748. package/dist/content/article-actions.d.ts.map +0 -1
  749. package/dist/content/article-actions.js +0 -28
  750. package/dist/content/article-card.d.ts +0 -58
  751. package/dist/content/article-card.d.ts.map +0 -1
  752. package/dist/content/article-card.js +0 -79
  753. package/dist/content/article-card.module.css +0 -111
  754. package/dist/content/mdx.d.ts +0 -20
  755. package/dist/content/mdx.d.ts.map +0 -1
  756. package/dist/content/mdx.js +0 -64
  757. package/dist/controls/compare-filter.d.ts +0 -42
  758. package/dist/controls/compare-filter.d.ts.map +0 -1
  759. package/dist/controls/compare-filter.js +0 -38
  760. package/dist/controls/slider-control.d.ts +0 -36
  761. package/dist/controls/slider-control.d.ts.map +0 -1
  762. package/dist/controls/slider-control.js +0 -64
  763. package/dist/dashboard/widget-grid.d.ts +0 -27
  764. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  765. package/dist/dashboard/widget-grid.js +0 -40
  766. package/dist/dashboard/widget-grid.module.css +0 -69
  767. package/dist/data/data-table-state.d.ts.map +0 -1
  768. package/dist/data/data-table.d.ts.map +0 -1
  769. package/dist/data/query-branch.d.ts.map +0 -1
  770. package/dist/data/table.d.ts +0 -24
  771. package/dist/data/table.d.ts.map +0 -1
  772. package/dist/data/virtual-list.d.ts +0 -133
  773. package/dist/data/virtual-list.d.ts.map +0 -1
  774. package/dist/data/virtual-list.js +0 -157
  775. package/dist/data/virtual.d.ts +0 -21
  776. package/dist/data/virtual.d.ts.map +0 -1
  777. package/dist/data/virtual.js +0 -4
  778. package/dist/forms/FormErrorSummary.d.ts +0 -30
  779. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  780. package/dist/forms/FormErrorSummary.js +0 -30
  781. package/dist/forms/use-field-array.d.ts +0 -60
  782. package/dist/forms/use-field-array.d.ts.map +0 -1
  783. package/dist/forms/use-field-array.js +0 -20
  784. package/dist/forms/use-form-draft.d.ts +0 -76
  785. package/dist/forms/use-form-draft.d.ts.map +0 -1
  786. package/dist/forms/use-form-draft.js +0 -92
  787. package/dist/forms/use-form-submit.d.ts +0 -88
  788. package/dist/forms/use-form-submit.d.ts.map +0 -1
  789. package/dist/forms/use-form-submit.js +0 -63
  790. package/dist/notifications/bell.d.ts.map +0 -1
  791. package/dist/notifications/center.d.ts.map +0 -1
  792. package/dist/notifications/define-notifications.d.ts.map +0 -1
  793. package/dist/notifications/index.d.ts +0 -40
  794. package/dist/notifications/index.d.ts.map +0 -1
  795. package/dist/notifications/index.js +0 -54
  796. package/dist/notifications/mount-guard.d.ts +0 -8
  797. package/dist/notifications/mount-guard.d.ts.map +0 -1
  798. package/dist/notifications/mount-guard.js +0 -18
  799. package/dist/notifications/notify.d.ts +0 -149
  800. package/dist/notifications/notify.d.ts.map +0 -1
  801. package/dist/notifications/notify.js +0 -171
  802. package/dist/notifications/store.d.ts.map +0 -1
  803. package/dist/provider/connectivity-indicator.d.ts +0 -13
  804. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  805. package/dist/provider/connectivity-indicator.js +0 -205
  806. package/dist/provider/connectivity-provider.d.ts +0 -7
  807. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  808. package/dist/provider/connectivity-provider.js +0 -128
  809. package/dist/provider/connectivity-types.d.ts +0 -36
  810. package/dist/provider/connectivity-types.d.ts.map +0 -1
  811. package/dist/provider/use-connectivity.d.ts +0 -3
  812. package/dist/provider/use-connectivity.d.ts.map +0 -1
  813. package/dist/provider/use-connectivity.js +0 -14
  814. package/dist/query-devtools.d.ts +0 -21
  815. package/dist/query-devtools.d.ts.map +0 -1
  816. package/dist/query-devtools.js +0 -13
  817. package/src/agent/adapter.ts +0 -945
  818. package/src/agent/use-agent-stream.ts +0 -154
  819. package/src/agent-chat/index.ts +0 -54
  820. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  821. package/src/agent-chat/thread-workspace.tsx +0 -279
  822. package/src/charts/cursor/resolve.ts +0 -198
  823. package/src/charts/cursor/scope.tsx +0 -35
  824. package/src/charts/cursor/store.ts +0 -58
  825. package/src/charts/cursor/touch-pin.ts +0 -138
  826. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  827. package/src/charts/hooks/use-hysteresis.ts +0 -26
  828. package/src/charts/hooks/useBandPlot.ts +0 -383
  829. package/src/charts/hooks/useChartCursor.ts +0 -367
  830. package/src/charts/hooks/useChartSize.ts +0 -35
  831. package/src/charts/kinds/BandStrip.tsx +0 -449
  832. package/src/charts/kinds/Bars.tsx +0 -589
  833. package/src/charts/kinds/Donut.tsx +0 -368
  834. package/src/charts/kinds/DualPanel.tsx +0 -712
  835. package/src/charts/kinds/Heatmap.tsx +0 -396
  836. package/src/charts/kinds/MirroredBars.tsx +0 -469
  837. package/src/charts/kinds/MultiLine.tsx +0 -322
  838. package/src/charts/kinds/StackedArea.tsx +0 -267
  839. package/src/charts/kinds/ZonedLine.tsx +0 -301
  840. package/src/charts/kinds/band-chrome.tsx +0 -91
  841. package/src/charts/kinds/donut-layout.ts +0 -82
  842. package/src/charts/layout/auto-margin.ts +0 -242
  843. package/src/charts/layout/end-labels.ts +0 -135
  844. package/src/charts/layout/log-ticks.ts +0 -90
  845. package/src/charts/primitives/AreaGradient.tsx +0 -26
  846. package/src/charts/primitives/Axes.tsx +0 -271
  847. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  848. package/src/charts/primitives/ChartCard.tsx +0 -280
  849. package/src/charts/primitives/ChartFrame.tsx +0 -493
  850. package/src/charts/primitives/ChartLegend.tsx +0 -422
  851. package/src/charts/primitives/ChartPending.tsx +0 -243
  852. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  853. package/src/charts/primitives/Crosshair.tsx +0 -43
  854. package/src/charts/primitives/HatchPattern.tsx +0 -55
  855. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  856. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  857. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  858. package/src/charts/primitives/XZoneRects.tsx +0 -132
  859. package/src/charts/primitives/ZoneRects.tsx +0 -67
  860. package/src/charts/primitives/chart-card-context.ts +0 -46
  861. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  862. package/src/charts/primitives/chart-layout.ts +0 -318
  863. package/src/charts/primitives/chart-tier.tsx +0 -76
  864. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  865. package/src/charts/series.ts +0 -276
  866. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  867. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  868. package/src/charts/sparklines/index.ts +0 -2
  869. package/src/charts/theme.tsx +0 -53
  870. package/src/charts/utils/domain.ts +0 -41
  871. package/src/charts/utils/format.ts +0 -19
  872. package/src/charts/utils/measure-text.ts +0 -109
  873. package/src/charts/utils/ticks.ts +0 -239
  874. package/src/commands/overlays-mount.tsx +0 -333
  875. package/src/commands/useCommandHotkeys.ts +0 -114
  876. package/src/content/article-actions.ts +0 -72
  877. package/src/content/article-card.module.css +0 -111
  878. package/src/content/article-card.tsx +0 -174
  879. package/src/content/mdx.tsx +0 -127
  880. package/src/controls/compare-filter.tsx +0 -81
  881. package/src/controls/slider-control.tsx +0 -159
  882. package/src/dashboard/widget-grid.module.css +0 -69
  883. package/src/dashboard/widget-grid.tsx +0 -146
  884. package/src/data/table.ts +0 -39
  885. package/src/data/virtual-list.tsx +0 -356
  886. package/src/data/virtual.ts +0 -26
  887. package/src/forms/FormErrorSummary.tsx +0 -71
  888. package/src/forms/use-field-array.ts +0 -94
  889. package/src/forms/use-form-draft.ts +0 -262
  890. package/src/forms/use-form-submit.ts +0 -199
  891. package/src/notifications/index.ts +0 -88
  892. package/src/notifications/mount-guard.ts +0 -38
  893. package/src/notifications/notify.tsx +0 -379
  894. package/src/provider/connectivity-indicator.tsx +0 -267
  895. package/src/provider/connectivity-provider.tsx +0 -189
  896. package/src/provider/connectivity-types.ts +0 -42
  897. package/src/provider/use-connectivity.ts +0 -26
  898. package/src/query-devtools.tsx +0 -40
  899. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  900. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  902. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  903. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  904. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  906. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  907. /package/dist/{data → table}/data-table.module.css +0 -0
  908. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  909. /package/dist/{data → table}/query-branch.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.js +0 -0
  911. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  912. /package/src/{data → table}/data-table.module.css +0 -0
  913. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  914. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,154 +0,0 @@
1
- /**
2
- * useAgentStream — React hook managing the full lifecycle of a streaming agent conversation turn.
3
- *
4
- * Accepts an injected AgentTransport and returns reactive state (parts, status, error) plus
5
- * control handlers (send, stop, regenerate). AbortController integration enables clean
6
- * mid-stream cancellation. SSR-safe — no window access at module or hook top level.
7
- *
8
- * Rules of hooks are satisfied: all hooks are called unconditionally at the top level of the
9
- * returned function; no conditional hook invocations.
10
- *
11
- * @example
12
- * import { useAgentStream, edenTransport, type AgentPart } from 'basalt-ui/agent'
13
- *
14
- * const transport = edenTransport<AgentPart>((input, signal) =>
15
- * api.chat.post({ body: { message: input }, fetch: { signal } }),
16
- * )
17
- *
18
- * function ChatPanel() {
19
- * const { parts, status, send, stop, regenerate } = useAgentStream({ transport })
20
- * return (
21
- * <div>
22
- * <PartList parts={parts} />
23
- * {status === 'streaming' && <button onClick={stop}>Stop</button>}
24
- * <button onClick={() => send('Hello')}>Send</button>
25
- * </div>
26
- * )
27
- * }
28
- */
29
- import { useCallback, useEffect, useRef, useState } from 'react'
30
- import { mintThreadId, withPartIds } from './id'
31
- import { isStartPart } from './parts'
32
- import { mergePart } from './merge'
33
- import type { PartLike } from './merge'
34
- import type { AgentPart } from './parts'
35
- import type { AgentTransport } from './transport'
36
-
37
- // ── StreamStatus ──────────────────────────────────────────────────────────────
38
-
39
- /** The lifecycle state of the current stream. */
40
- export type StreamStatus = 'idle' | 'streaming' | 'done' | 'error'
41
-
42
- // ── useAgentStream return type ────────────────────────────────────────────────
43
-
44
- export type UseAgentStreamReturn<TPart, TInput> = {
45
- /** Accumulated parts from the current (or last completed) stream. */
46
- readonly parts: TPart[]
47
- /** Current lifecycle status. */
48
- readonly status: StreamStatus
49
- /** The error thrown during the last failed stream, or undefined. */
50
- readonly error: unknown
51
- /**
52
- * Start a new stream for the given input. Resets parts and status, aborts any in-flight stream,
53
- * and accumulates new parts as they arrive.
54
- */
55
- readonly send: (input: TInput) => Promise<void>
56
- /** Abort the in-flight stream (no-op when idle or done). */
57
- readonly stop: () => void
58
- /** Re-run the last input. No-op if no input has been sent yet. */
59
- readonly regenerate: () => Promise<void>
60
- }
61
-
62
- // ── useAgentStream ────────────────────────────────────────────────────────────
63
-
64
- /**
65
- * Manages a single streaming agent turn over an injected {@link AgentTransport}.
66
- *
67
- * @example
68
- * const { parts, status, send, stop } = useAgentStream({ transport: myTransport })
69
- * await send('What is the capital of France?')
70
- * // parts accumulates as the stream arrives
71
- * // status: 'idle' → 'streaming' → 'done' (or 'error')
72
- */
73
- export function useAgentStream<TPart extends PartLike = AgentPart, TInput = string>({
74
- transport,
75
- }: {
76
- transport: AgentTransport<TPart, TInput>
77
- }): UseAgentStreamReturn<TPart, TInput> {
78
- const [parts, setParts] = useState<TPart[]>([])
79
- const [status, setStatus] = useState<StreamStatus>('idle')
80
- const [error, setError] = useState<unknown>(undefined)
81
-
82
- // Refs: mutable per-render state that must not trigger re-renders.
83
- const controllerRef = useRef<AbortController | null>(null)
84
- const lastInputRef = useRef<TInput | undefined>(undefined)
85
-
86
- // Abort any in-flight stream on unmount to stop the async generator.
87
- useEffect(
88
- () => () => {
89
- controllerRef.current?.abort()
90
- },
91
- [],
92
- )
93
-
94
- const send = useCallback(
95
- async (input: TInput): Promise<void> => {
96
- // Abort any in-flight stream.
97
- controllerRef.current?.abort()
98
- const controller = new AbortController()
99
- controllerRef.current = controller
100
-
101
- lastInputRef.current = input
102
- setParts([])
103
- setError(undefined)
104
- setStatus('streaming')
105
-
106
- // Per-send namespace: this hook has no thread/session id to key off, and each send() call
107
- // fully resets `parts` anyway, so a fresh id per call is enough to keep two id-less drafts
108
- // ARRIVING WITHIN THE SAME SEND from colliding on `undefined === undefined` in mergePart (the
109
- // F1 bug — text→tool→text destroying each other). Not a replay mechanism — this hook has no
110
- // resume() path — see withPartIds' own doc for why it can't be one anyway. Low collision
111
- // cost (this hook persists nothing — `parts` is discarded on the next send()/unmount), so
112
- // `mintThreadId` — never `mintMessageId` — is the right rung-3 behavior here: this must not
113
- // throw on a host with no usable crypto at all.
114
- const runId = mintThreadId()
115
-
116
- try {
117
- for await (const part of withPartIds(runId, transport.stream(input, controller.signal))) {
118
- // Guard: if a newer send() has superseded this stream, stop updating state.
119
- if (controllerRef.current !== controller) return
120
- if (controller.signal.aborted) break
121
- // StartPart is a no-op signal (run id + resume token), not renderable content — this
122
- // hook has no persistence layer to resume across, so just skip it.
123
- if (isStartPart(part)) continue
124
- setParts((prev) => mergePart(prev, part))
125
- }
126
- // Only mark done if this stream is still the current one and wasn't aborted.
127
- if (controllerRef.current === controller && !controller.signal.aborted) setStatus('done')
128
- } catch (err) {
129
- // Ignore abort errors — they are intentional (stop() was called or superseded).
130
- if (err instanceof Error && err.name === 'AbortError') return
131
- // Guard: don't corrupt state if a newer stream has taken over.
132
- if (controllerRef.current !== controller) return
133
- // Guard: don't overwrite a user-cancelled 'done' if the signal was aborted (e.g. stop()
134
- // aborted the controller before a non-AbortError propagated from the transport).
135
- if (controller.signal.aborted) return
136
- setError(err)
137
- setStatus('error')
138
- }
139
- },
140
- [transport],
141
- )
142
-
143
- const stop = useCallback((): void => {
144
- controllerRef.current?.abort()
145
- setStatus('done')
146
- }, [])
147
-
148
- const regenerate = useCallback(async (): Promise<void> => {
149
- if (lastInputRef.current === undefined) return
150
- await send(lastInputRef.current)
151
- }, [send])
152
-
153
- return { parts, status, error, send, stop, regenerate }
154
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * Mantine-styled thread-chat components over the headless `basalt-ui/agent` layer, capped by the
3
- * flagship `ThreadWorkspace` composite.
4
- *
5
- * This module is Mantine-coupled by design and ships its own `basalt-ui/agent-chat` subpath
6
- * (also re-exported from the root entry, unchanged for existing consumers) — unlike
7
- * `basalt-ui/agent`, which stays headless so it can be styled by any consumer.
8
- *
9
- * @example
10
- * import { ThreadWorkspace } from 'basalt-ui/agent-chat'
11
- * import { createThreadsStore, edenTransport, heuristicOutcome } from 'basalt-ui/agent'
12
- */
13
-
14
- // ── ThreadWorkspace (flagship composite) ──────────────────────────────────────
15
- export { ThreadWorkspace } from './thread-workspace'
16
- export type { ThreadWorkspaceProps } from './thread-workspace'
17
-
18
- // ── ThreadFeed ────────────────────────────────────────────────────────────────
19
- export { ThreadFeed } from './thread-feed'
20
- export type { ThreadFeedProps } from './thread-feed'
21
-
22
- // ── ThreadFeedRow ─────────────────────────────────────────────────────────────
23
- export { ThreadFeedRow } from './thread-feed-row'
24
- export type { ThreadFeedRowProps } from './thread-feed-row'
25
-
26
- // ── Shared transcript/row contracts ───────────────────────────────────────────
27
- // Type-only. Both are named in the PUBLIC props of components exported above
28
- // (`ThreadTranscriptProps.affordances`, `ThreadFeedRowProps`'s height union), so a consumer that
29
- // wants to hold one in a typed variable needs to be able to name it. No runtime export here — the
30
- // resolution/defaults live inside the components. `RowHeightProps` (B3) is `ThreadFeedRow`'s OWN
31
- // height contract — a superset of `VirtualizeProps` that also allows `height` without
32
- // `virtualize` — kept alongside it for the same reason.
33
- export type { MessageAffordances } from './message-affordances'
34
- export type { RowHeightProps, VirtualizeOptions, VirtualizeProps } from './virtualize'
35
-
36
- // ── ThreadOutcomeCard ─────────────────────────────────────────────────────────
37
- export { ThreadOutcomeCard } from './thread-outcome-card'
38
- export type { ThreadOutcomeCardProps } from './thread-outcome-card'
39
-
40
- // ── ThreadDetailPanel ─────────────────────────────────────────────────────────
41
- export { ThreadDetailPanel } from './thread-detail-panel'
42
- export type { ThreadDetailPanelProps } from './thread-detail-panel'
43
-
44
- // ── Composer ──────────────────────────────────────────────────────────────────
45
- export { Composer } from './composer'
46
- export type { ComposerAttachment, ComposerHandle, ComposerProps, ComposerSubmit } from './composer'
47
-
48
- // ── threadPartRenderers + ThreadTranscript ────────────────────────────────────
49
- export { threadPartRenderers, ThreadTranscript } from './thread-message'
50
- export type { ThreadTranscriptProps } from './thread-message'
51
-
52
- // ── ToolChip ──────────────────────────────────────────────────────────────────
53
- export { ToolChip } from './tool-chip'
54
- export type { ToolChipProps } from './tool-chip'
@@ -1,201 +0,0 @@
1
- /**
2
- * ThreadDetailPanel — the right-hand pane rendering one open thread's transcript + composer.
3
- *
4
- * A plain pane (Box), NOT a Modal — the feed/detail split reads via the `divider` token rather
5
- * than a card border (docs/DESIGN-SPEC.md §5); the composite that wires this up owns responsive
6
- * collapse/layout decisions. The header shares a `layoutId` (thread.id) with `ThreadOutcomeCard`
7
- * so opening a thread reads as one continuous shared-element FLIP transition rather than a swap.
8
- * Pure and prop-driven: no store, no fetching — `onSend`/`onStop`/`onClose`/`onRetry` are the
9
- * only seams.
10
- *
11
- * @example
12
- * import { ThreadDetailPanel } from 'basalt-ui'
13
- *
14
- * <ThreadDetailPanel
15
- * thread={activeThread}
16
- * liveParts={liveParts}
17
- * runStatus={runStatus}
18
- * onSend={send}
19
- * onStop={stop}
20
- * onClose={() => select(null)}
21
- * />
22
- */
23
- import { ActionIcon, Alert, Box, Button, Divider, Flex, Stack, Text } from '@mantine/core'
24
- import { useReducedMotion } from '@mantine/hooks'
25
- import { motion } from 'motion/react'
26
- import type { JSX } from 'react'
27
- import type { AgentPart, AgentThread, StreamStatus } from '../agent'
28
- import { BasaltStickToBottom } from '../agent'
29
- import { cx } from '../common/props'
30
- import type { BasaltProps } from '../common/props'
31
- import { MOTION_SPRING } from '../common/motion'
32
- import { Composer } from './composer'
33
- import { ThreadTranscript } from './thread-message'
34
- import { VX } from '../tokens'
35
-
36
- function CloseGlyph(): JSX.Element {
37
- return (
38
- <svg width={16} height={16} viewBox="0 0 24 24" fill="none" aria-hidden>
39
- <path
40
- d="M18 6l-12 12M6 6l12 12"
41
- stroke="currentColor"
42
- strokeWidth={2}
43
- strokeLinecap="round"
44
- strokeLinejoin="round"
45
- />
46
- </svg>
47
- )
48
- }
49
-
50
- function EmptyPanel({ className, style }: BasaltProps): JSX.Element {
51
- return (
52
- <Box p="xl" className={cx(className)} style={{ height: '100%', ...style }}>
53
- <Stack align="center" justify="center" gap={4} h="100%">
54
- <Text fw={550} style={{ fontFamily: 'var(--basalt-font-head)', fontStretch: '88%' }}>
55
- No thread selected
56
- </Text>
57
- <Text size="sm" c="dimmed" ta="center">
58
- Pick a thread from the feed to see its transcript.
59
- </Text>
60
- </Stack>
61
- </Box>
62
- )
63
- }
64
-
65
- /** The header label for an open thread: its resolved outcome title, else its opening prompt. */
66
- function threadLabel(thread: AgentThread): string {
67
- if (thread.outcome !== null && thread.outcome.title.length > 0) return thread.outcome.title
68
- const firstUser = thread.messages.find((message) => message.role === 'user')
69
- if (firstUser === undefined) return 'Untitled'
70
- const text = firstUser.parts
71
- .filter((part): part is Extract<AgentPart, { type: 'text' }> => part.type === 'text')
72
- .map((part) => part.text)
73
- .join('')
74
- .trim()
75
- return text.length > 0 ? text : 'Untitled'
76
- }
77
-
78
- export type ThreadDetailPanelProps = BasaltProps & {
79
- /** The open thread, or null when nothing is selected (renders an empty-state hint). */
80
- readonly thread: AgentThread | null
81
- /** The live (in-flight) assistant turn's parts for this thread, if a run is streaming. */
82
- readonly liveParts?: AgentPart[]
83
- /** The live run's status — gates the composer and shows the Stop action while streaming. */
84
- readonly runStatus?: StreamStatus
85
- readonly onSend: (text: string) => void
86
- readonly onStop: () => void
87
- readonly onClose: () => void
88
- /**
89
- * Replay the last user input on this thread. When provided, a "Retry" action appears in the
90
- * failed-run alert; omit it to render the alert without a retry affordance.
91
- */
92
- readonly onRetry?: () => void
93
- }
94
-
95
- /**
96
- * The detail pane for one open thread: header (title + close), transcript body in an
97
- * auto-scrolling container, and a footer composer (with a Stop action while streaming).
98
- *
99
- * @example
100
- * <ThreadDetailPanel thread={thread} runStatus={runStatus} onSend={send} onStop={stop} onClose={close} />
101
- */
102
- export function ThreadDetailPanel({
103
- thread,
104
- liveParts,
105
- runStatus,
106
- onSend,
107
- onStop,
108
- onClose,
109
- onRetry,
110
- className,
111
- style,
112
- }: ThreadDetailPanelProps): JSX.Element {
113
- const reduceMotion = useReducedMotion()
114
-
115
- if (thread === null) return <EmptyPanel className={className} style={style} />
116
-
117
- const streaming = runStatus === 'streaming'
118
-
119
- const panel = (
120
- <Flex direction="column" h="100%" className={cx(className)} style={style}>
121
- <Flex p="sm" align="center" justify="space-between">
122
- <Text
123
- fw={550}
124
- lineClamp={1}
125
- style={{
126
- fontFamily: 'var(--basalt-font-head)',
127
- fontSize: VX.text.md,
128
- fontStretch: '88%',
129
- }}
130
- >
131
- {threadLabel(thread)}
132
- </Text>
133
- <ActionIcon variant="subtle" color="gray" onClick={onClose} aria-label="Close thread">
134
- <CloseGlyph />
135
- </ActionIcon>
136
- </Flex>
137
- <Divider color="var(--vx-divider)" />
138
- <Box style={{ flex: 1, minHeight: 0 }}>
139
- <BasaltStickToBottom
140
- style={{
141
- height: '100%',
142
- // theme-allow raw-scroll-container — BasaltStickToBottom owns this scroll node (see stick-to-bottom.tsx).
143
- overflowY: 'auto',
144
- padding: 'var(--vx-space-agent-transcript-inset)',
145
- }}
146
- >
147
- <ThreadTranscript
148
- messages={thread.messages}
149
- {...(liveParts !== undefined ? { liveParts } : {})}
150
- {...(runStatus !== undefined ? { liveStatus: runStatus } : {})}
151
- />
152
- {thread.status === 'error' && (
153
- <Alert color="red" variant="light" mt="md">
154
- <Stack gap="xs" align="flex-start">
155
- <Text size="sm">This run didn’t finish. Try sending the message again.</Text>
156
- {onRetry !== undefined && (
157
- <Button size="compact-sm" variant="light" color="red" onClick={onRetry}>
158
- Retry
159
- </Button>
160
- )}
161
- </Stack>
162
- </Alert>
163
- )}
164
- {thread.status === 'interrupted' && (
165
- <Alert color="yellow" variant="light" mt="md">
166
- Interrupted — resend to continue.
167
- </Alert>
168
- )}
169
- </BasaltStickToBottom>
170
- </Box>
171
- <Divider color="var(--vx-divider)" />
172
- <Box p="sm">
173
- <Stack gap="xs">
174
- {/* `onSend` stays a plain string at this component's public seam — the payload shape is
175
- unwrapped here rather than pushed onto every caller. */}
176
- <Composer onSubmit={({ text }) => onSend(text)} streaming={streaming} />
177
- {streaming && (
178
- <Button size="compact-sm" variant="subtle" color="red" onClick={onStop}>
179
- Stop
180
- </Button>
181
- )}
182
- </Stack>
183
- </Box>
184
- </Flex>
185
- )
186
-
187
- if (reduceMotion) return panel
188
-
189
- // Keyed by thread.id so opening/switching threads re-mounts and slides the new content in.
190
- return (
191
- <motion.div
192
- key={thread.id}
193
- initial={{ opacity: 0, x: 12 }}
194
- animate={{ opacity: 1, x: 0 }}
195
- transition={MOTION_SPRING}
196
- style={{ height: '100%' }}
197
- >
198
- {panel}
199
- </motion.div>
200
- )
201
- }
@@ -1,279 +0,0 @@
1
- /**
2
- * ThreadWorkspace — the flagship, ready-to-use two-pane thread-chat composite.
3
- *
4
- * Composes `ThreadFeed` + a new-thread `Composer` (left/main pane) with `ThreadDetailPanel`
5
- * (right pane) over `useAgentThreadRuns`, so a consumer wires one component instead of hand-
6
- * assembling the pieces. Responsive: wide viewports show both panes side by side; narrow
7
- * viewports (the `compact` size class, < 840px) show exactly one — the feed when no thread is open, a full-screen
8
- * detail panel once one is.
9
- *
10
- * `useThreads` is a prop, not called internally, because `createThreadsStore` must be invoked
11
- * ONCE at module scope (see the doctrine on `createThreadsStore` in `../agent`) — the consumer
12
- * owns that module-scope call and passes the resulting hook in here.
13
- *
14
- * @example
15
- * import { ThreadWorkspace } from 'basalt-ui'
16
- * import { createThreadsStore, edenTransport, heuristicOutcome } from 'basalt-ui/agent'
17
- *
18
- * // Module scope — called ONCE:
19
- * const useThreads = createThreadsStore({ key: 'main-threads', version: 1 })
20
- * const transport = edenTransport((input, signal) =>
21
- * api.chat.post({ body: { message: input }, fetch: { signal } }),
22
- * )
23
- *
24
- * function Inbox() {
25
- * return (
26
- * <ThreadWorkspace
27
- * useThreads={useThreads}
28
- * transport={transport}
29
- * resolveOutcome={heuristicOutcome}
30
- * newThreadPlaceholder="Start a new conversation…"
31
- * />
32
- * )
33
- * }
34
- */
35
- import { Box, Divider, Flex, Skeleton, Stack, Text } from '@mantine/core'
36
- import type { JSX, ReactNode } from 'react'
37
- import type { AgentPart, AgentTransport, OutcomeResolver, ThreadsStore } from '../agent'
38
- import { useAgentThreadRuns } from '../agent'
39
- import { cx } from '../common/props'
40
- import type { BasaltProps, SlotStylesProps } from '../common/props'
41
- import { assertRequiredProps } from '../common/validate'
42
- import { useSizeClass } from '../shell/use-size-class'
43
- import { VX } from '../tokens'
44
- import { Composer } from './composer'
45
- import { ThreadDetailPanel } from './thread-detail-panel'
46
- import { ThreadFeed } from './thread-feed'
47
-
48
- const DETAIL_PANEL_WIDTH = 'clamp(440px, 40%, 520px)'
49
-
50
- // Static across every instance, so it stays a module-level constant rather than a per-render
51
- // literal, letting the no-override case keep a stable reference.
52
- const FULL_HEIGHT_STYLE = { height: '100%' } as const
53
-
54
- /** The four boxes `ThreadWorkspace` paints: `root` is the outermost pane split, `feed` is the
55
- * thread-list pane, `composer` is the new-thread composer pinned under the feed, `detail` is the
56
- * right-hand (or, in the `compact` size class, full-screen) open-thread pane. */
57
- export type ThreadWorkspaceSlot = 'root' | 'feed' | 'composer' | 'detail'
58
-
59
- export type ThreadWorkspaceProps = BasaltProps &
60
- SlotStylesProps<ThreadWorkspaceSlot> & {
61
- /**
62
- * The thread-store hook, created ONCE at module scope via `createThreadsStore` and passed in —
63
- * ThreadWorkspace must not call `createThreadsStore` itself.
64
- */
65
- readonly useThreads: () => ThreadsStore
66
- /** The injected transport seam — one stream per `start()` call. */
67
- readonly transport: AgentTransport<AgentPart, string>
68
- /** Distills a finished thread into a feed-ready `AgentOutcome`. */
69
- readonly resolveOutcome: OutcomeResolver<AgentPart>
70
- /** Placeholder for the new-thread composer pinned under the feed. */
71
- readonly newThreadPlaceholder?: string
72
- /**
73
- * Rendered in place of the feed once the store is hydrated and there really are no threads.
74
- * Shown ONLY when `store.hydrated` is true — while an async store's initial load is still in
75
- * flight, `ThreadWorkspace` holds a neutral loading state instead (see `FeedHydratingState`),
76
- * so a server-backed workspace never asserts "no threads yet" before it actually knows that.
77
- */
78
- readonly emptyState?: ReactNode
79
- /**
80
- * Rendered in place of the feed when the store's initial load has failed — `!store.hydrated &&
81
- * store.error !== undefined` (see `ThreadsStore.hydrated`'s doc for the discriminant). Shown
82
- * instead of `FeedHydratingState`, so a rejected `listThreads` surfaces a legible failure rather
83
- * than an endless skeleton.
84
- */
85
- readonly errorState?: ReactNode
86
- }
87
-
88
- /** Default hint shown in the feed pane once hydrated with no threads (overridable via `emptyState`). */
89
- function FeedEmptyState(): JSX.Element {
90
- return (
91
- <Stack align="center" justify="center" gap={4} h="100%" p="xl">
92
- <Text fw={600} size="sm">
93
- No threads yet
94
- </Text>
95
- <Text size="xs" c="dimmed" ta="center">
96
- Send a message below to start your first thread.
97
- </Text>
98
- </Stack>
99
- )
100
- }
101
-
102
- /**
103
- * Neutral hold shown in the feed pane while an async store's initial `listThreads` is still in
104
- * flight, has no threads to show yet, AND has not failed (`!store.hydrated && threads.length ===
105
- * 0 && store.error === undefined`). Never shown for the synchronous `createThreadsStore`, whose
106
- * `hydrated` is always `true` — see `ThreadsStore.hydrated`'s doc. A store that already holds
107
- * cached threads while revalidating (`!hydrated` with a non-empty `threads`) skips this entirely
108
- * and renders the feed normally. A failed load renders `FeedErrorState` instead of this.
109
- */
110
- function FeedHydratingState(): JSX.Element {
111
- return (
112
- <Stack gap="sm" p="sm" data-testid="thread-workspace-hydrating">
113
- <Skeleton height={54} radius="sm" />
114
- <Skeleton height={54} radius="sm" />
115
- <Skeleton height={54} radius="sm" />
116
- </Stack>
117
- )
118
- }
119
-
120
- /**
121
- * Default failure hold shown in the feed pane when an async store's initial `listThreads` has
122
- * rejected (`!store.hydrated && store.error !== undefined`), overridable via `errorState`. Never
123
- * shown for the synchronous `createThreadsStore`, whose `error` is always `undefined` — see
124
- * `ThreadsStore.error`'s doc.
125
- */
126
- function FeedErrorState(): JSX.Element {
127
- return (
128
- <Stack
129
- align="center"
130
- justify="center"
131
- gap={4}
132
- h="100%"
133
- p="xl"
134
- data-testid="thread-workspace-error"
135
- >
136
- <Text fw={600} size="sm" style={{ color: VX.status.bad }}>
137
- Couldn&apos;t load threads
138
- </Text>
139
- <Text size="xs" c="dimmed" ta="center">
140
- Something went wrong loading your threads. Try refreshing the page.
141
- </Text>
142
- </Stack>
143
- )
144
- }
145
-
146
- /**
147
- * A two-pane master-detail thread workspace: a scrollable feed of threads with an anchored
148
- * new-thread composer, and a detail panel for the open thread's live transcript. Collapses to a
149
- * single pane in the `compact` size class (< 840px).
150
- *
151
- * @example
152
- * <ThreadWorkspace useThreads={useThreads} transport={transport} resolveOutcome={heuristicOutcome} />
153
- */
154
- export function ThreadWorkspace({
155
- useThreads,
156
- transport,
157
- resolveOutcome,
158
- newThreadPlaceholder,
159
- emptyState,
160
- errorState,
161
- className,
162
- style,
163
- classNames,
164
- }: ThreadWorkspaceProps): JSX.Element {
165
- assertRequiredProps('ThreadWorkspace', { useThreads }, ['useThreads'])
166
- const store = useThreads()
167
- const runs = useAgentThreadRuns({ transport, store, resolveOutcome })
168
- // Narrow = the compact size class — the same viewport axis as the shell, and SSR/first-frame
169
- // correct (the provider's `sizeClassHint` is the server snapshot, no post-mount flip).
170
- const narrow = useSizeClass() === 'compact'
171
-
172
- const threads = store.threads
173
- const activeThread = threads.find((thread) => thread.id === store.activeId) ?? null
174
- const activeRun = store.activeId !== null ? runs.runs.get(store.activeId) : undefined
175
- const liveParts = activeRun?.parts
176
-
177
- const handleSelect = (id: string): void => {
178
- store.select(id)
179
- store.markRead(id)
180
- }
181
-
182
- const handleNewThread = (text: string): void => {
183
- const id = store.create()
184
- store.select(id)
185
- store.markRead(id)
186
- runs.start(id, text)
187
- }
188
-
189
- const handleSend = (text: string): void => {
190
- if (store.activeId === null) return
191
- runs.start(store.activeId, text)
192
- }
193
-
194
- const handleStop = (): void => {
195
- if (store.activeId === null) return
196
- runs.stop(store.activeId)
197
- }
198
-
199
- const handleRetry = (): void => {
200
- if (store.activeId === null) return
201
- runs.retry(store.activeId)
202
- }
203
-
204
- // A plain pane, NOT a card — the feed's own rows carry the card idiom (docs/DESIGN-SPEC.md §5),
205
- // so this pane stays flush with the page and the feed/detail split reads via the divider token.
206
- const feed = (
207
- <Flex
208
- direction="column"
209
- h="100%"
210
- className={cx(classNames?.feed)}
211
- style={{ overflow: 'hidden' }}
212
- >
213
- <Box style={{ flex: 1, minHeight: 0 }}>
214
- {threads.length === 0 ? (
215
- store.hydrated ? (
216
- (emptyState ?? <FeedEmptyState />)
217
- ) : store.error !== undefined ? (
218
- (errorState ?? <FeedErrorState />)
219
- ) : (
220
- <FeedHydratingState />
221
- )
222
- ) : (
223
- <ThreadFeed threads={threads} activeId={store.activeId} onSelect={handleSelect} />
224
- )}
225
- </Box>
226
- <Divider color="var(--vx-divider)" />
227
- <Box p="sm">
228
- <Composer
229
- onSubmit={({ text }) => handleNewThread(text)}
230
- {...(newThreadPlaceholder !== undefined ? { placeholder: newThreadPlaceholder } : {})}
231
- {...(classNames?.composer !== undefined && { className: classNames.composer })}
232
- />
233
- </Box>
234
- </Flex>
235
- )
236
-
237
- const detail = (
238
- <ThreadDetailPanel
239
- thread={activeThread}
240
- {...(liveParts !== undefined ? { liveParts } : {})}
241
- {...(activeRun !== undefined ? { runStatus: activeRun.status } : {})}
242
- onSend={handleSend}
243
- onStop={handleStop}
244
- onRetry={handleRetry}
245
- onClose={() => store.select(null)}
246
- {...(classNames?.detail !== undefined && { className: classNames.detail })}
247
- />
248
- )
249
-
250
- if (narrow) {
251
- return (
252
- <Box
253
- className={cx(classNames?.root, className)}
254
- style={style ? { ...FULL_HEIGHT_STYLE, ...style } : FULL_HEIGHT_STYLE}
255
- >
256
- {store.activeId !== null ? detail : feed}
257
- </Box>
258
- )
259
- }
260
-
261
- return (
262
- <Flex
263
- className={cx(classNames?.root, className)}
264
- style={style ? { ...FULL_HEIGHT_STYLE, ...style } : FULL_HEIGHT_STYLE}
265
- gap="md"
266
- >
267
- <Box
268
- style={{
269
- flex: 1,
270
- minWidth: 0,
271
- borderRight: '1px solid var(--vx-divider)',
272
- }}
273
- >
274
- {feed}
275
- </Box>
276
- <Box style={{ width: DETAIL_PANEL_WIDTH, flexShrink: 0 }}>{detail}</Box>
277
- </Flex>
278
- )
279
- }