basalt-ui 1.41.0 → 2.0.1

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 (915) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +542 -518
  3. package/MIGRATING.md +964 -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 +18 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/config.js +6 -0
  175. package/dist/cli/doctor-upgrade.d.ts +43 -0
  176. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  177. package/dist/cli/doctor-upgrade.js +314 -0
  178. package/dist/cli/doctor.d.ts +14 -29
  179. package/dist/cli/doctor.d.ts.map +1 -1
  180. package/dist/cli/doctor.js +58 -9
  181. package/dist/cli/help.d.ts.map +1 -1
  182. package/dist/cli/help.js +2 -4
  183. package/dist/cli/index.d.ts +48 -172
  184. package/dist/cli/index.d.ts.map +1 -1
  185. package/dist/cli/index.js +39 -132
  186. package/dist/cli/init.d.ts.map +1 -1
  187. package/dist/cli/init.js +43 -37
  188. package/dist/cli/sync.d.ts +5 -21
  189. package/dist/cli/sync.d.ts.map +1 -1
  190. package/dist/cli/sync.js +4 -23
  191. package/dist/cli/tokens-css.d.ts +7 -28
  192. package/dist/cli/tokens-css.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  194. package/dist/commands/ShortcutsHelp.js +4 -5
  195. package/dist/commands/define-commands.d.ts +15 -31
  196. package/dist/commands/define-commands.d.ts.map +1 -1
  197. package/dist/commands/define-commands.js +1 -11
  198. package/dist/commands/define-overlays.d.ts +5 -19
  199. package/dist/commands/define-overlays.d.ts.map +1 -1
  200. package/dist/commands/define-overlays.js +3 -11
  201. package/dist/commands/index.d.ts +10 -40
  202. package/dist/commands/index.d.ts.map +1 -1
  203. package/dist/commands/index.js +9 -46
  204. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  205. package/dist/commands/notifications/bell.d.ts.map +1 -0
  206. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  207. package/dist/commands/notifications/center.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.js +2 -2
  209. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  210. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  211. package/dist/commands/notifications/notify.d.ts +44 -0
  212. package/dist/commands/notifications/notify.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.js +79 -0
  214. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  215. package/dist/commands/notifications/store.d.ts.map +1 -0
  216. package/dist/{notifications → commands/notifications}/store.js +4 -0
  217. package/dist/commands/projectors.d.ts +1 -131
  218. package/dist/commands/projectors.d.ts.map +1 -1
  219. package/dist/commands/projectors.js +2 -73
  220. package/dist/commands/shell-bridge.d.ts +3 -3
  221. package/dist/commands/shortcut-format.d.ts +5 -4
  222. package/dist/commands/shortcut-format.d.ts.map +1 -1
  223. package/dist/common/errors.d.ts +3 -3
  224. package/dist/common/use-measured-widths.d.ts.map +1 -1
  225. package/dist/common/use-measured-widths.js +5 -3
  226. package/dist/common/validate.d.ts +2 -2
  227. package/dist/content/article-layout.d.ts.map +1 -1
  228. package/dist/content/article-layout.js +3 -3
  229. package/dist/content/article-model.d.ts +1 -46
  230. package/dist/content/article-model.d.ts.map +1 -1
  231. package/dist/content/article-model.js +1 -29
  232. package/dist/content/index.d.ts +11 -41
  233. package/dist/content/index.d.ts.map +1 -1
  234. package/dist/content/index.js +3 -35
  235. package/dist/content/markdown.d.ts +1 -1
  236. package/dist/content/markdown.d.ts.map +1 -1
  237. package/dist/content/markdown.js +1 -1
  238. package/dist/content/mermaid.d.ts.map +1 -1
  239. package/dist/content/mermaid.js +7 -7
  240. package/dist/content/slug.d.ts +1 -8
  241. package/dist/content/slug.d.ts.map +1 -1
  242. package/dist/content/slug.js +1 -8
  243. package/dist/content/url-hardening.d.ts +2 -2
  244. package/dist/content/url-hardening.d.ts.map +1 -1
  245. package/dist/content/url-hardening.js +2 -0
  246. package/dist/controls/actions.d.ts +16 -1
  247. package/dist/controls/actions.d.ts.map +1 -1
  248. package/dist/controls/enum-filter.d.ts +1 -1
  249. package/dist/controls/enum-filter.d.ts.map +1 -1
  250. package/dist/controls/filter-context.d.ts.map +1 -1
  251. package/dist/controls/filter-context.js +3 -1
  252. package/dist/controls/filter-set.js +4 -6
  253. package/dist/controls/form-layout.d.ts +1 -1
  254. package/dist/controls/form-layout.d.ts.map +1 -1
  255. package/dist/controls/form-layout.js +1 -1
  256. package/dist/controls/glyphs.d.ts +0 -2
  257. package/dist/controls/glyphs.d.ts.map +1 -1
  258. package/dist/controls/glyphs.js +0 -7
  259. package/dist/controls/index.d.ts +12 -17
  260. package/dist/controls/index.d.ts.map +1 -1
  261. package/dist/controls/index.js +5 -39
  262. package/dist/controls/multi-select-filter.d.ts +4 -3
  263. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  264. package/dist/controls/number-filter.d.ts +4 -3
  265. package/dist/controls/number-filter.d.ts.map +1 -1
  266. package/dist/controls/number-filter.js +3 -1
  267. package/dist/controls/range-filter.d.ts +4 -3
  268. package/dist/controls/range-filter.d.ts.map +1 -1
  269. package/dist/controls/search-filter.d.ts +4 -3
  270. package/dist/controls/search-filter.d.ts.map +1 -1
  271. package/dist/controls/search-filter.js +19 -14
  272. package/dist/controls/select-filter.d.ts +4 -3
  273. package/dist/controls/select-filter.d.ts.map +1 -1
  274. package/dist/controls/sync-button.d.ts.map +1 -1
  275. package/dist/controls/sync-button.js +12 -15
  276. package/dist/controls/toggle-filter.d.ts +4 -3
  277. package/dist/controls/toggle-filter.d.ts.map +1 -1
  278. package/dist/controls/uncontrolled.d.ts +12 -0
  279. package/dist/controls/uncontrolled.d.ts.map +1 -0
  280. package/dist/controls/view-tabs.d.ts +2 -2
  281. package/dist/controls/view-tabs.d.ts.map +1 -1
  282. package/dist/controls-dates/index.d.ts +0 -1
  283. package/dist/controls-dates/index.d.ts.map +1 -1
  284. package/dist/dashboard/index.d.ts +7 -9
  285. package/dist/dashboard/index.d.ts.map +1 -1
  286. package/dist/dashboard/index.js +3 -23
  287. package/dist/dashboard/section.d.ts +4 -6
  288. package/dist/dashboard/section.d.ts.map +1 -1
  289. package/dist/dashboard/section.js +4 -10
  290. package/dist/dashboard/stat-card.d.ts +4 -4
  291. package/dist/dashboard/stat-card.d.ts.map +1 -1
  292. package/dist/dashboard/stat-card.js +3 -3
  293. package/dist/dashboard/widget-header.module.css +9 -7
  294. package/dist/dev-dock.d.ts.map +1 -1
  295. package/dist/dev-dock.js +6 -1
  296. package/dist/format/date.d.ts +0 -34
  297. package/dist/format/date.d.ts.map +1 -1
  298. package/dist/format/date.js +0 -54
  299. package/dist/format/index.d.ts +7 -22
  300. package/dist/format/index.d.ts.map +1 -1
  301. package/dist/format/index.js +2 -43
  302. package/dist/format/number.d.ts +3 -14
  303. package/dist/format/number.d.ts.map +1 -1
  304. package/dist/format/number.js +0 -13
  305. package/dist/format/shared.d.ts +2 -3
  306. package/dist/format/shared.d.ts.map +1 -1
  307. package/dist/forms/index.d.ts +0 -11
  308. package/dist/forms/index.d.ts.map +1 -1
  309. package/dist/forms/index.js +1 -14
  310. package/dist/guard/index.d.ts +6 -21
  311. package/dist/guard/index.d.ts.map +1 -1
  312. package/dist/guard/index.js +27 -115
  313. package/dist/guard/types.d.ts +7 -18
  314. package/dist/guard/types.d.ts.map +1 -1
  315. package/dist/index.d.ts +16 -48
  316. package/dist/index.d.ts.map +1 -1
  317. package/dist/index.js +21 -117
  318. package/dist/provider/create-router.d.ts +44 -0
  319. package/dist/provider/create-router.d.ts.map +1 -0
  320. package/dist/provider/create-router.js +62 -0
  321. package/dist/provider/hotkeys.d.ts +8 -0
  322. package/dist/provider/hotkeys.d.ts.map +1 -0
  323. package/dist/provider/hotkeys.js +50 -0
  324. package/dist/provider/index.d.ts +33 -110
  325. package/dist/provider/index.d.ts.map +1 -1
  326. package/dist/provider/index.js +182 -82
  327. package/dist/provider/lab-theme.d.ts.map +1 -1
  328. package/dist/provider/route-transition.d.ts +76 -0
  329. package/dist/provider/route-transition.d.ts.map +1 -0
  330. package/dist/provider/route-transition.js +98 -0
  331. package/dist/provider/spotlight-actions.d.ts +10 -0
  332. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  333. package/dist/provider/spotlight-actions.js +55 -0
  334. package/dist/provider/test-router.d.ts +6 -0
  335. package/dist/provider/test-router.d.ts.map +1 -0
  336. package/dist/provider/test-router.js +18 -0
  337. package/dist/query-client.d.ts +4 -20
  338. package/dist/query-client.d.ts.map +1 -1
  339. package/dist/query-client.js +2 -2
  340. package/dist/router-tanstack/index.d.ts +18 -64
  341. package/dist/router-tanstack/index.d.ts.map +1 -1
  342. package/dist/router-tanstack/index.js +2 -16
  343. package/dist/router-tanstack/nav.d.ts +12 -1
  344. package/dist/router-tanstack/nav.d.ts.map +1 -1
  345. package/dist/router-tanstack/nav.js +8 -1
  346. package/dist/router-tanstack/search-store.d.ts +1 -1
  347. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  348. package/dist/router-tanstack/use-nav.d.ts +8 -9
  349. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  350. package/dist/router-tanstack/use-nav.js +20 -1
  351. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  352. package/dist/shell/app-sidebar.js +1 -1
  353. package/dist/shell/index.d.ts +31 -10
  354. package/dist/shell/index.d.ts.map +1 -1
  355. package/dist/shell/index.js +14 -3
  356. package/dist/shell/page-aside.d.ts +2 -2
  357. package/dist/shell/page-aside.d.ts.map +1 -1
  358. package/dist/shell/page-aside.js +31 -12
  359. package/dist/shell/page-bar.d.ts +2 -2
  360. package/dist/shell/page-bar.d.ts.map +1 -1
  361. package/dist/shell/page-bar.js +1 -1
  362. package/dist/state.d.ts +10 -12
  363. package/dist/state.d.ts.map +1 -1
  364. package/dist/state.js +4 -6
  365. package/dist/styles.css +107 -7
  366. package/dist/surfaces.d.ts +28 -103
  367. package/dist/surfaces.d.ts.map +1 -1
  368. package/dist/surfaces.js +54 -143
  369. package/dist/{data → table}/data-table-state.d.ts +1 -1
  370. package/dist/table/data-table-state.d.ts.map +1 -0
  371. package/dist/{data → table}/data-table-state.js +4 -3
  372. package/dist/{data → table}/data-table.d.ts +28 -49
  373. package/dist/table/data-table.d.ts.map +1 -0
  374. package/dist/{data → table}/data-table.js +74 -60
  375. package/dist/table/index.d.ts +18 -0
  376. package/dist/table/index.d.ts.map +1 -0
  377. package/dist/{data/table.js → table/index.js} +1 -1
  378. package/dist/table/query-branch.d.ts.map +1 -0
  379. package/dist/table/table-features.d.ts +69 -0
  380. package/dist/table/table-features.d.ts.map +1 -0
  381. package/dist/table/table-features.js +49 -0
  382. package/dist/telemetry.d.ts +77 -0
  383. package/dist/telemetry.d.ts.map +1 -0
  384. package/dist/telemetry.js +33 -0
  385. package/dist/theme/index.d.ts +10 -21
  386. package/dist/theme/index.d.ts.map +1 -1
  387. package/dist/theme/index.js +3 -14
  388. package/dist/theme/theme-toggle.d.ts.map +1 -1
  389. package/dist/theme/theme-toggle.js +7 -33
  390. package/dist/theme/theme-toggle.module.css +30 -0
  391. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  392. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  393. package/dist/theme-lab/derive-controls.js +5 -3
  394. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  395. package/dist/theme-lab/derive-state.js +2 -1
  396. package/dist/tokens/core.d.ts +360 -0
  397. package/dist/tokens/core.d.ts.map +1 -0
  398. package/dist/tokens/core.js +708 -0
  399. package/dist/tokens/derive.d.ts +1 -1
  400. package/dist/tokens/derive.d.ts.map +1 -1
  401. package/dist/tokens/index.d.ts +5 -373
  402. package/dist/tokens/index.d.ts.map +1 -1
  403. package/dist/tokens/index.js +8 -700
  404. package/dist/tokens/palette.d.ts +2 -6
  405. package/dist/tokens/palette.d.ts.map +1 -1
  406. package/dist/tokens/palette.js +1 -4
  407. package/dist/vite.d.ts +4 -3
  408. package/dist/vite.d.ts.map +1 -1
  409. package/llms.txt +43 -85
  410. package/package.json +80 -173
  411. package/src/agent/ai-sdk-transport.ts +57 -37
  412. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  413. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  414. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  415. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  416. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  417. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  418. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  419. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  420. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  421. package/src/agent/error.ts +43 -0
  422. package/src/agent/history.ts +2 -107
  423. package/src/agent/id.ts +4 -5
  424. package/src/agent/index.ts +23 -112
  425. package/src/agent/outcome.ts +3 -56
  426. package/src/agent/part-list.tsx +3 -3
  427. package/src/agent/parts.ts +23 -22
  428. package/src/agent/run-committer.ts +64 -0
  429. package/src/agent/run-records.ts +147 -0
  430. package/src/agent/thread.ts +24 -231
  431. package/src/agent/transport.ts +6 -96
  432. package/src/agent/use-agent-thread-runs.ts +364 -199
  433. package/src/charts/BandStrip.tsx +276 -0
  434. package/src/charts/Bars.tsx +141 -0
  435. package/src/charts/CartesianChart.tsx +206 -0
  436. package/src/charts/ChartCard.tsx +178 -0
  437. package/src/charts/Donut.tsx +256 -0
  438. package/src/charts/DualPanel.tsx +326 -0
  439. package/src/charts/Heatmap.tsx +282 -0
  440. package/src/charts/Lines.tsx +151 -0
  441. package/src/charts/MirroredBars.tsx +303 -0
  442. package/src/charts/Sparkline.tsx +176 -0
  443. package/src/charts/StackedArea.tsx +80 -0
  444. package/src/charts/box.tsx +96 -0
  445. package/src/charts/card-context.ts +11 -0
  446. package/src/charts/chart-box.module.css +64 -0
  447. package/src/charts/chart-box.module.css.d.ts +12 -0
  448. package/src/charts/chart-card.module.css +25 -0
  449. package/src/charts/chart-card.module.css.d.ts +8 -0
  450. package/src/charts/chart-legend.module.css +38 -0
  451. package/src/charts/chart-legend.module.css.d.ts +10 -0
  452. package/src/charts/compile.ts +585 -0
  453. package/src/charts/cursor.ts +282 -0
  454. package/src/charts/curves.ts +111 -0
  455. package/src/charts/donut.module.css +54 -0
  456. package/src/charts/donut.module.css.d.ts +9 -0
  457. package/src/charts/host.tsx +60 -0
  458. package/src/charts/index.ts +41 -178
  459. package/src/charts/legend.tsx +204 -0
  460. package/src/charts/marks.ts +201 -0
  461. package/src/charts/panel.tsx +227 -0
  462. package/src/charts/scales.ts +237 -0
  463. package/src/charts/sizing.ts +47 -0
  464. package/src/charts/state.tsx +80 -0
  465. package/src/charts/theme.ts +65 -0
  466. package/src/charts/types.ts +242 -0
  467. package/src/cli/audit-allows.ts +8 -30
  468. package/src/cli/config.ts +26 -43
  469. package/src/cli/doctor-upgrade.ts +457 -0
  470. package/src/cli/doctor.ts +89 -72
  471. package/src/cli/help.ts +2 -4
  472. package/src/cli/index.ts +100 -384
  473. package/src/cli/init.ts +60 -51
  474. package/src/cli/sync.ts +13 -68
  475. package/src/cli/tokens-css.ts +7 -28
  476. package/src/commands/ShortcutsHelp.tsx +8 -9
  477. package/src/commands/define-commands.ts +16 -43
  478. package/src/commands/define-overlays.ts +12 -36
  479. package/src/commands/index.ts +11 -94
  480. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  481. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  482. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  483. package/src/commands/notifications/notify.tsx +158 -0
  484. package/src/{notifications → commands/notifications}/store.ts +10 -2
  485. package/src/commands/projectors.ts +5 -225
  486. package/src/commands/shell-bridge.ts +5 -5
  487. package/src/commands/shortcut-format.ts +5 -4
  488. package/src/common/errors.ts +3 -3
  489. package/src/common/use-measured-widths.ts +6 -3
  490. package/src/common/validate.ts +2 -2
  491. package/src/content/article-layout.tsx +37 -38
  492. package/src/content/article-model.ts +1 -84
  493. package/src/content/index.ts +12 -83
  494. package/src/content/markdown.tsx +4 -3
  495. package/src/content/mermaid.tsx +9 -7
  496. package/src/content/slug.ts +1 -16
  497. package/src/content/url-hardening.ts +8 -2
  498. package/src/controls/actions.tsx +24 -1
  499. package/src/controls/enum-filter.tsx +1 -1
  500. package/src/controls/filter-context.tsx +3 -1
  501. package/src/controls/filter-set.tsx +5 -7
  502. package/src/controls/form-layout.tsx +2 -2
  503. package/src/controls/glyphs.tsx +0 -10
  504. package/src/controls/index.ts +13 -64
  505. package/src/controls/multi-select-filter.tsx +5 -4
  506. package/src/controls/number-filter.tsx +8 -4
  507. package/src/controls/range-filter.tsx +5 -4
  508. package/src/controls/search-filter.tsx +25 -19
  509. package/src/controls/select-filter.tsx +5 -4
  510. package/src/controls/sync-button.tsx +18 -20
  511. package/src/controls/toggle-filter.tsx +5 -4
  512. package/src/controls/uncontrolled.ts +12 -0
  513. package/src/controls/view-tabs.tsx +3 -3
  514. package/src/controls-dates/date-range-picker.tsx +1 -1
  515. package/src/controls-dates/index.ts +0 -1
  516. package/src/dashboard/index.ts +7 -48
  517. package/src/dashboard/section.tsx +11 -40
  518. package/src/dashboard/stat-card.tsx +14 -16
  519. package/src/dashboard/widget-header.module.css +9 -7
  520. package/src/dev-dock.tsx +14 -27
  521. package/src/format/date.ts +2 -92
  522. package/src/format/index.ts +7 -53
  523. package/src/format/number.ts +3 -26
  524. package/src/format/shared.ts +2 -3
  525. package/src/forms/index.ts +0 -23
  526. package/src/guard/index.ts +36 -191
  527. package/src/guard/types.ts +6 -19
  528. package/src/index.ts +30 -282
  529. package/src/provider/create-router.tsx +138 -0
  530. package/src/provider/hotkeys.ts +70 -0
  531. package/src/provider/index.tsx +260 -230
  532. package/src/provider/lab-theme.ts +3 -2
  533. package/src/provider/route-transition.ts +199 -0
  534. package/src/provider/spotlight-actions.tsx +69 -0
  535. package/src/provider/test-router.tsx +25 -0
  536. package/src/query-client.ts +4 -22
  537. package/src/router-tanstack/index.ts +18 -112
  538. package/src/router-tanstack/nav.ts +28 -2
  539. package/src/router-tanstack/search-store.ts +9 -2
  540. package/src/router-tanstack/use-nav.ts +47 -13
  541. package/src/shell/app-mobile-nav.tsx +3 -2
  542. package/src/shell/app-sidebar.tsx +1 -1
  543. package/src/shell/aside-docking.ts +1 -1
  544. package/src/shell/index.tsx +61 -20
  545. package/src/shell/page-aside.tsx +47 -23
  546. package/src/shell/page-bar.tsx +3 -3
  547. package/src/shell/page-title.tsx +1 -1
  548. package/src/state.ts +11 -37
  549. package/src/styles.css +107 -7
  550. package/src/surfaces.ts +56 -151
  551. package/src/{data → table}/data-table-state.ts +5 -4
  552. package/src/{data → table}/data-table.tsx +170 -161
  553. package/src/table/index.ts +18 -0
  554. package/src/table/table-features.ts +102 -0
  555. package/src/telemetry.ts +110 -0
  556. package/src/theme/index.ts +22 -47
  557. package/src/theme/theme-toggle.module.css +30 -0
  558. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  559. package/src/theme/theme-toggle.tsx +15 -43
  560. package/src/theme-lab/derive-controls.tsx +5 -3
  561. package/src/theme-lab/derive-state.ts +2 -1
  562. package/src/tokens/core.ts +1163 -0
  563. package/src/tokens/derive.ts +1 -1
  564. package/src/tokens/index.ts +14 -1181
  565. package/src/tokens/palette.ts +3 -7
  566. package/src/vite.ts +3 -3
  567. package/agent/templates/query-client.ts.tpl +0 -26
  568. package/dist/agent/adapter.d.ts +0 -150
  569. package/dist/agent/adapter.d.ts.map +0 -1
  570. package/dist/agent/adapter.js +0 -482
  571. package/dist/agent/use-agent-stream.d.ts +0 -35
  572. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  573. package/dist/agent/use-agent-stream.js +0 -59
  574. package/dist/agent-chat/composer.d.ts.map +0 -1
  575. package/dist/agent-chat/index.d.ts +0 -31
  576. package/dist/agent-chat/index.d.ts.map +0 -1
  577. package/dist/agent-chat/index.js +0 -19
  578. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  579. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  580. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  581. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  582. package/dist/agent-chat/thread-detail-panel.js +0 -115
  583. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  587. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  588. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  589. package/dist/agent-chat/thread-workspace.js +0 -153
  590. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  591. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  592. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  593. package/dist/charts/cursor/resolve.d.ts +0 -75
  594. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  595. package/dist/charts/cursor/resolve.js +0 -91
  596. package/dist/charts/cursor/scope.d.ts +0 -20
  597. package/dist/charts/cursor/scope.d.ts.map +0 -1
  598. package/dist/charts/cursor/scope.js +0 -20
  599. package/dist/charts/cursor/store.d.ts +0 -35
  600. package/dist/charts/cursor/store.d.ts.map +0 -1
  601. package/dist/charts/cursor/store.js +0 -25
  602. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  603. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  604. package/dist/charts/cursor/touch-pin.js +0 -79
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  606. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  607. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  608. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  609. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  610. package/dist/charts/hooks/use-hysteresis.js +0 -12
  611. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  612. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  613. package/dist/charts/hooks/useBandPlot.js +0 -178
  614. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  615. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  616. package/dist/charts/hooks/useChartCursor.js +0 -200
  617. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  618. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  619. package/dist/charts/hooks/useChartSize.js +0 -8
  620. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  621. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  622. package/dist/charts/kinds/BandStrip.js +0 -241
  623. package/dist/charts/kinds/Bars.d.ts +0 -141
  624. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  625. package/dist/charts/kinds/Bars.js +0 -343
  626. package/dist/charts/kinds/Donut.d.ts +0 -77
  627. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  628. package/dist/charts/kinds/Donut.js +0 -245
  629. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  630. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  631. package/dist/charts/kinds/DualPanel.js +0 -471
  632. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  633. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  634. package/dist/charts/kinds/Heatmap.js +0 -243
  635. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  636. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  637. package/dist/charts/kinds/MirroredBars.js +0 -292
  638. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  639. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  640. package/dist/charts/kinds/MultiLine.js +0 -176
  641. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  642. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  643. package/dist/charts/kinds/StackedArea.js +0 -135
  644. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  645. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  646. package/dist/charts/kinds/ZonedLine.js +0 -155
  647. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  648. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  649. package/dist/charts/kinds/band-chrome.js +0 -71
  650. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  651. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  652. package/dist/charts/kinds/donut-layout.js +0 -52
  653. package/dist/charts/layout/auto-margin.d.ts +0 -122
  654. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  655. package/dist/charts/layout/auto-margin.js +0 -81
  656. package/dist/charts/layout/end-labels.d.ts +0 -64
  657. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  658. package/dist/charts/layout/end-labels.js +0 -76
  659. package/dist/charts/layout/log-ticks.d.ts +0 -27
  660. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  661. package/dist/charts/layout/log-ticks.js +0 -42
  662. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  663. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  664. package/dist/charts/primitives/AreaGradient.js +0 -13
  665. package/dist/charts/primitives/Axes.d.ts +0 -83
  666. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  667. package/dist/charts/primitives/Axes.js +0 -168
  668. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  669. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  670. package/dist/charts/primitives/CartesianChart.js +0 -549
  671. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  672. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  673. package/dist/charts/primitives/ChartCard.js +0 -143
  674. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  675. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  676. package/dist/charts/primitives/ChartFrame.js +0 -241
  677. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  678. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  679. package/dist/charts/primitives/ChartLegend.js +0 -292
  680. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  681. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  682. package/dist/charts/primitives/ChartPending.js +0 -117
  683. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  684. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  685. package/dist/charts/primitives/ChartTooltip.js +0 -197
  686. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  687. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  688. package/dist/charts/primitives/Crosshair.js +0 -23
  689. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  690. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  691. package/dist/charts/primitives/HatchPattern.js +0 -31
  692. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  693. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  694. package/dist/charts/primitives/HoverOverlay.js +0 -72
  695. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  696. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  697. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  698. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  699. package/dist/charts/primitives/XZoneRects.js +0 -65
  700. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  701. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  702. package/dist/charts/primitives/ZoneRects.js +0 -30
  703. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  704. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  705. package/dist/charts/primitives/chart-card-context.js +0 -18
  706. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  707. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  708. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  709. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  710. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  711. package/dist/charts/primitives/chart-layout.js +0 -175
  712. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  713. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  714. package/dist/charts/primitives/chart-tier.js +0 -44
  715. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  716. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  717. package/dist/charts/primitives/legend-disclosure.js +0 -153
  718. package/dist/charts/series.d.ts +0 -189
  719. package/dist/charts/series.d.ts.map +0 -1
  720. package/dist/charts/series.js +0 -84
  721. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  722. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  723. package/dist/charts/sparklines/BarSparkline.js +0 -53
  724. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  725. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  726. package/dist/charts/sparklines/LineSparkline.js +0 -51
  727. package/dist/charts/sparklines/index.d.ts +0 -3
  728. package/dist/charts/sparklines/index.d.ts.map +0 -1
  729. package/dist/charts/sparklines/index.js +0 -6
  730. package/dist/charts/utils/domain.d.ts +0 -35
  731. package/dist/charts/utils/domain.d.ts.map +0 -1
  732. package/dist/charts/utils/domain.js +0 -12
  733. package/dist/charts/utils/format.d.ts +0 -8
  734. package/dist/charts/utils/format.d.ts.map +0 -1
  735. package/dist/charts/utils/format.js +0 -20
  736. package/dist/charts/utils/measure-text.d.ts +0 -25
  737. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  738. package/dist/charts/utils/measure-text.js +0 -64
  739. package/dist/charts/utils/ticks.d.ts +0 -103
  740. package/dist/charts/utils/ticks.d.ts.map +0 -1
  741. package/dist/charts/utils/ticks.js +0 -92
  742. package/dist/commands/overlays-mount.d.ts +0 -122
  743. package/dist/commands/overlays-mount.d.ts.map +0 -1
  744. package/dist/commands/overlays-mount.js +0 -125
  745. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  746. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  747. package/dist/commands/useCommandHotkeys.js +0 -45
  748. package/dist/content/article-actions.d.ts +0 -39
  749. package/dist/content/article-actions.d.ts.map +0 -1
  750. package/dist/content/article-actions.js +0 -28
  751. package/dist/content/article-card.d.ts +0 -58
  752. package/dist/content/article-card.d.ts.map +0 -1
  753. package/dist/content/article-card.js +0 -79
  754. package/dist/content/article-card.module.css +0 -111
  755. package/dist/content/mdx.d.ts +0 -20
  756. package/dist/content/mdx.d.ts.map +0 -1
  757. package/dist/content/mdx.js +0 -64
  758. package/dist/controls/compare-filter.d.ts +0 -42
  759. package/dist/controls/compare-filter.d.ts.map +0 -1
  760. package/dist/controls/compare-filter.js +0 -38
  761. package/dist/controls/slider-control.d.ts +0 -36
  762. package/dist/controls/slider-control.d.ts.map +0 -1
  763. package/dist/controls/slider-control.js +0 -64
  764. package/dist/dashboard/widget-grid.d.ts +0 -27
  765. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  766. package/dist/dashboard/widget-grid.js +0 -40
  767. package/dist/dashboard/widget-grid.module.css +0 -69
  768. package/dist/data/data-table-state.d.ts.map +0 -1
  769. package/dist/data/data-table.d.ts.map +0 -1
  770. package/dist/data/query-branch.d.ts.map +0 -1
  771. package/dist/data/table.d.ts +0 -24
  772. package/dist/data/table.d.ts.map +0 -1
  773. package/dist/data/virtual-list.d.ts +0 -133
  774. package/dist/data/virtual-list.d.ts.map +0 -1
  775. package/dist/data/virtual-list.js +0 -157
  776. package/dist/data/virtual.d.ts +0 -21
  777. package/dist/data/virtual.d.ts.map +0 -1
  778. package/dist/data/virtual.js +0 -4
  779. package/dist/forms/FormErrorSummary.d.ts +0 -30
  780. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  781. package/dist/forms/FormErrorSummary.js +0 -30
  782. package/dist/forms/use-field-array.d.ts +0 -60
  783. package/dist/forms/use-field-array.d.ts.map +0 -1
  784. package/dist/forms/use-field-array.js +0 -20
  785. package/dist/forms/use-form-draft.d.ts +0 -76
  786. package/dist/forms/use-form-draft.d.ts.map +0 -1
  787. package/dist/forms/use-form-draft.js +0 -92
  788. package/dist/forms/use-form-submit.d.ts +0 -88
  789. package/dist/forms/use-form-submit.d.ts.map +0 -1
  790. package/dist/forms/use-form-submit.js +0 -63
  791. package/dist/notifications/bell.d.ts.map +0 -1
  792. package/dist/notifications/center.d.ts.map +0 -1
  793. package/dist/notifications/define-notifications.d.ts.map +0 -1
  794. package/dist/notifications/index.d.ts +0 -40
  795. package/dist/notifications/index.d.ts.map +0 -1
  796. package/dist/notifications/index.js +0 -54
  797. package/dist/notifications/mount-guard.d.ts +0 -8
  798. package/dist/notifications/mount-guard.d.ts.map +0 -1
  799. package/dist/notifications/mount-guard.js +0 -18
  800. package/dist/notifications/notify.d.ts +0 -149
  801. package/dist/notifications/notify.d.ts.map +0 -1
  802. package/dist/notifications/notify.js +0 -171
  803. package/dist/notifications/store.d.ts.map +0 -1
  804. package/dist/provider/connectivity-indicator.d.ts +0 -13
  805. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  806. package/dist/provider/connectivity-indicator.js +0 -205
  807. package/dist/provider/connectivity-provider.d.ts +0 -7
  808. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  809. package/dist/provider/connectivity-provider.js +0 -128
  810. package/dist/provider/connectivity-types.d.ts +0 -36
  811. package/dist/provider/connectivity-types.d.ts.map +0 -1
  812. package/dist/provider/use-connectivity.d.ts +0 -3
  813. package/dist/provider/use-connectivity.d.ts.map +0 -1
  814. package/dist/provider/use-connectivity.js +0 -14
  815. package/dist/query-devtools.d.ts +0 -21
  816. package/dist/query-devtools.d.ts.map +0 -1
  817. package/dist/query-devtools.js +0 -13
  818. package/src/agent/adapter.ts +0 -945
  819. package/src/agent/use-agent-stream.ts +0 -154
  820. package/src/agent-chat/index.ts +0 -54
  821. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  822. package/src/agent-chat/thread-workspace.tsx +0 -279
  823. package/src/charts/cursor/resolve.ts +0 -198
  824. package/src/charts/cursor/scope.tsx +0 -35
  825. package/src/charts/cursor/store.ts +0 -58
  826. package/src/charts/cursor/touch-pin.ts +0 -138
  827. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  828. package/src/charts/hooks/use-hysteresis.ts +0 -26
  829. package/src/charts/hooks/useBandPlot.ts +0 -383
  830. package/src/charts/hooks/useChartCursor.ts +0 -367
  831. package/src/charts/hooks/useChartSize.ts +0 -35
  832. package/src/charts/kinds/BandStrip.tsx +0 -449
  833. package/src/charts/kinds/Bars.tsx +0 -589
  834. package/src/charts/kinds/Donut.tsx +0 -368
  835. package/src/charts/kinds/DualPanel.tsx +0 -712
  836. package/src/charts/kinds/Heatmap.tsx +0 -396
  837. package/src/charts/kinds/MirroredBars.tsx +0 -469
  838. package/src/charts/kinds/MultiLine.tsx +0 -322
  839. package/src/charts/kinds/StackedArea.tsx +0 -267
  840. package/src/charts/kinds/ZonedLine.tsx +0 -301
  841. package/src/charts/kinds/band-chrome.tsx +0 -91
  842. package/src/charts/kinds/donut-layout.ts +0 -82
  843. package/src/charts/layout/auto-margin.ts +0 -242
  844. package/src/charts/layout/end-labels.ts +0 -135
  845. package/src/charts/layout/log-ticks.ts +0 -90
  846. package/src/charts/primitives/AreaGradient.tsx +0 -26
  847. package/src/charts/primitives/Axes.tsx +0 -271
  848. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  849. package/src/charts/primitives/ChartCard.tsx +0 -280
  850. package/src/charts/primitives/ChartFrame.tsx +0 -493
  851. package/src/charts/primitives/ChartLegend.tsx +0 -422
  852. package/src/charts/primitives/ChartPending.tsx +0 -243
  853. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  854. package/src/charts/primitives/Crosshair.tsx +0 -43
  855. package/src/charts/primitives/HatchPattern.tsx +0 -55
  856. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  857. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  858. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  859. package/src/charts/primitives/XZoneRects.tsx +0 -132
  860. package/src/charts/primitives/ZoneRects.tsx +0 -67
  861. package/src/charts/primitives/chart-card-context.ts +0 -46
  862. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  863. package/src/charts/primitives/chart-layout.ts +0 -318
  864. package/src/charts/primitives/chart-tier.tsx +0 -76
  865. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  866. package/src/charts/series.ts +0 -276
  867. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  868. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  869. package/src/charts/sparklines/index.ts +0 -2
  870. package/src/charts/theme.tsx +0 -53
  871. package/src/charts/utils/domain.ts +0 -41
  872. package/src/charts/utils/format.ts +0 -19
  873. package/src/charts/utils/measure-text.ts +0 -109
  874. package/src/charts/utils/ticks.ts +0 -239
  875. package/src/commands/overlays-mount.tsx +0 -333
  876. package/src/commands/useCommandHotkeys.ts +0 -114
  877. package/src/content/article-actions.ts +0 -72
  878. package/src/content/article-card.module.css +0 -111
  879. package/src/content/article-card.tsx +0 -174
  880. package/src/content/mdx.tsx +0 -127
  881. package/src/controls/compare-filter.tsx +0 -81
  882. package/src/controls/slider-control.tsx +0 -159
  883. package/src/dashboard/widget-grid.module.css +0 -69
  884. package/src/dashboard/widget-grid.tsx +0 -146
  885. package/src/data/table.ts +0 -39
  886. package/src/data/virtual-list.tsx +0 -356
  887. package/src/data/virtual.ts +0 -26
  888. package/src/forms/FormErrorSummary.tsx +0 -71
  889. package/src/forms/use-field-array.ts +0 -94
  890. package/src/forms/use-form-draft.ts +0 -262
  891. package/src/forms/use-form-submit.ts +0 -199
  892. package/src/notifications/index.ts +0 -88
  893. package/src/notifications/mount-guard.ts +0 -38
  894. package/src/notifications/notify.tsx +0 -379
  895. package/src/provider/connectivity-indicator.tsx +0 -267
  896. package/src/provider/connectivity-provider.tsx +0 -189
  897. package/src/provider/connectivity-types.ts +0 -42
  898. package/src/provider/use-connectivity.ts +0 -26
  899. package/src/query-devtools.tsx +0 -40
  900. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  902. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  903. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  904. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  906. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  907. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  908. /package/dist/{data → table}/data-table.module.css +0 -0
  909. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.d.ts +0 -0
  911. /package/dist/{data → table}/query-branch.js +0 -0
  912. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  913. /package/src/{data → table}/data-table.module.css +0 -0
  914. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  915. /package/src/{data → table}/query-branch.ts +0 -0
@@ -8,7 +8,7 @@
8
8
  * validated, the error text, the denial reason, or the approve/deny affordances.
9
9
  *
10
10
  * @example
11
- * import { ToolChip } from 'basalt-ui/agent-chat'
11
+ * import { ToolChip } from 'basalt-ui/agent'
12
12
  *
13
13
  * <ToolChip
14
14
  * part={part}
@@ -19,12 +19,12 @@
19
19
  import { Box, Button, Collapse, Group, Stack, Text, UnstyledButton } from '@mantine/core'
20
20
  import { useDisclosure } from '@mantine/hooks'
21
21
  import type { JSX } from 'react'
22
- import { isToolCallSettled } from '../agent'
23
- import type { ToolCallPart } from '../agent'
24
- import { cx } from '../common/props'
25
- import type { BasaltProps } from '../common/props'
26
- import { assertRequiredProps } from '../common/validate'
27
- import { alpha, VX } from '../tokens'
22
+ import { isToolCallSettled } from '../parts'
23
+ import type { ToolCallPart } from '../parts'
24
+ import { cx } from '../../common/props'
25
+ import type { BasaltProps } from '../../common/props'
26
+ import { assertRequiredProps } from '../../common/validate'
27
+ import { alpha, VX } from '../../tokens'
28
28
 
29
29
  // Mirrors thread-message.tsx's micro-label/rail/code-block idiom (docs/DESIGN-SPEC.md §3/§5) —
30
30
  // duplicated locally rather than imported, matching the existing part-list.tsx/thread-message.tsx
@@ -81,8 +81,8 @@ function stateMeta(part: ToolCallPart): { readonly label: string; readonly dotTo
81
81
  // `part` is `never` here ONLY at compile time — this switch is genuinely exhaustive today,
82
82
  // so adding an eighth ToolCallPart state without a case above makes this assignment a tsc
83
83
  // error, the same gate `assertNever` provides. But `part` at RUNTIME can be a value this
84
- // build never declared: `createThreadsStore` persists to localStorage with no shape
85
- // validation, and `edenTransport` trusts the wire with zero validation, so a 1.10.0-shaped
84
+ // build never declared: a consumer-owned thread store may persist to localStorage with no
85
+ // shape validation, and a transport may carry wire data with zero validation, so a 1.10.0-shaped
86
86
  // flat tool part (`state` undefined) or a future/foreign `state` string both reach here.
87
87
  // That must never THROW during render — mirrors ThreadTranscript's fallbackRenderer
88
88
  // doctrine (unknown data renders inert, it doesn't blank the transcript) — so, unlike a
@@ -101,10 +101,10 @@ function formatDuration(ms: number): string {
101
101
 
102
102
  export type ToolChipProps = BasaltProps & {
103
103
  readonly part: ToolCallPart
104
- readonly defaultExpanded?: boolean
104
+ readonly defaultExpanded?: boolean | undefined
105
105
  /** Rendered only in 'approval-requested'. Omit both to render a read-only chip. */
106
- readonly onApprove?: (approvalId: string) => void
107
- readonly onDeny?: (approvalId: string, reason?: string) => void
106
+ readonly onApprove?: ((approvalId: string) => void) | undefined
107
+ readonly onDeny?: ((approvalId: string, reason?: string) => void) | undefined
108
108
  }
109
109
 
110
110
  /**
@@ -27,7 +27,7 @@
27
27
  * outside React state.
28
28
  */
29
29
  import { useCallback, useState } from 'react'
30
- import { useIsomorphicLayoutEffect } from '../common/isomorphic-layout-effect'
30
+ import { useIsomorphicLayoutEffect } from '../../common/isomorphic-layout-effect'
31
31
 
32
32
  const KEYBOARD_INSET_VAR = '--vx-keyboard-inset'
33
33
 
@@ -88,13 +88,13 @@
88
88
  /** Tuning knobs passed through to `@tanstack/react-virtual`'s `useVirtualizer`. */
89
89
  export type VirtualizeOptions = {
90
90
  /** Extra rows rendered beyond the visible viewport, each side. Library default: 1. */
91
- readonly overscan?: number
91
+ readonly overscan?: number | undefined
92
92
  /** Estimated row height in px, used before a row has been measured. */
93
- readonly estimateSize?: number
93
+ readonly estimateSize?: number | undefined
94
94
  /** Where the transcript sits on first mount. Default 'end' — a chat transcript opens at the
95
95
  newest message. 'start' opens at the oldest. See this module's fourth composition rule
96
96
  above for the mechanism and why a consumer restoring its own scroll position wants 'start'. */
97
- readonly initialScroll?: 'end' | 'start'
97
+ readonly initialScroll?: 'end' | 'start' | undefined
98
98
  }
99
99
 
100
100
  /**
@@ -103,7 +103,7 @@ export type VirtualizeOptions = {
103
103
  * scroll container, so there is no valid virtualized layout without one.
104
104
  */
105
105
  export type VirtualizeProps =
106
- | { readonly virtualize?: false; readonly height?: never }
106
+ | { readonly virtualize?: false | undefined; readonly height?: undefined }
107
107
  | { readonly virtualize: true | VirtualizeOptions; readonly height: number | string }
108
108
 
109
109
  /** The enabled branch of {@link VirtualizeProps}, with `height` no longer optional. */
@@ -126,7 +126,7 @@ export type ResolvedVirtualize = {
126
126
  * transcript body with inner scroll, no `@tanstack/react-virtual` peer installed).
127
127
  */
128
128
  export type RowHeightProps =
129
- | { readonly virtualize?: false; readonly height?: number | string }
129
+ | { readonly virtualize?: false | undefined; readonly height?: number | string | undefined }
130
130
  | { readonly virtualize: true | VirtualizeOptions; readonly height: number | string }
131
131
 
132
132
  /** The resolved shape of {@link RowHeightProps} — exactly one of the three row body layouts. */
@@ -0,0 +1,43 @@
1
+ /**
2
+ * AgentError — the closed, serializable shape of a failed turn (V2-SPEC § 6).
3
+ *
4
+ * `useAgentThreadRuns({ onError })` keeps the raw thrown value; `ThreadRunState.error` and the
5
+ * `chat.turn` telemetry carry this union instead, so a consumer switches on `kind` rather than
6
+ * parsing an error body. Classification is duck-typed on purpose: this module must never resolve
7
+ * the optional `ai` peer at runtime.
8
+ */
9
+
10
+ /**
11
+ * - `http`: the chat endpoint answered with a non-2xx `status` (AI SDK's `APICallError`).
12
+ * - `stream`: the UI-message stream was malformed (AI SDK's `UIMessageStreamError`).
13
+ * - `server`: an `error` chunk arrived mid-stream, or any other failure; `message` is the server's
14
+ * `errorText` or the thrown error's message.
15
+ * - `aborted`: the request was aborted by something other than `stop()`.
16
+ */
17
+ export type AgentError =
18
+ | { readonly kind: 'http'; readonly status: number }
19
+ | { readonly kind: 'stream'; readonly chunkType: string; readonly chunkId: string }
20
+ | { readonly kind: 'server'; readonly message: string }
21
+ | { readonly kind: 'aborted' }
22
+
23
+ function stringField(value: unknown, key: string): string | undefined {
24
+ if (typeof value !== 'object' || value === null) return undefined
25
+ const field = (value as Record<string, unknown>)[key]
26
+ return typeof field === 'string' ? field : undefined
27
+ }
28
+
29
+ /** Maps whatever a transport threw onto the closed `AgentError` union. */
30
+ export function toAgentError(error: unknown): AgentError {
31
+ // By name, not `instanceof Error`: a `fetch` abort is a DOMException, which is not an Error.
32
+ if (stringField(error, 'name') === 'AbortError') return { kind: 'aborted' }
33
+ const status =
34
+ typeof error === 'object' && error !== null
35
+ ? (error as Record<string, unknown>)['statusCode']
36
+ : undefined
37
+ if (typeof status === 'number') return { kind: 'http', status }
38
+ const chunkType = stringField(error, 'chunkType')
39
+ const chunkId = stringField(error, 'chunkId')
40
+ if (chunkType !== undefined && chunkId !== undefined)
41
+ return { kind: 'stream', chunkType, chunkId }
42
+ return { kind: 'server', message: stringField(error, 'message') ?? String(error) }
43
+ }
@@ -1,27 +1,4 @@
1
- /**
2
- * createChatHistoryStore — persisted, ring-buffered chat history on createPersistedState.
3
- *
4
- * Returns a stable hook factory (call once per module per stable key) that provides the full
5
- * message history, an append function, and a clear function. Messages are trimmed to `max`
6
- * (default 100) via a ring-buffer strategy — oldest entries are dropped first.
7
- *
8
- * SSR-safe: the underlying createPersistedState handles the server snapshot (returns initial).
9
- * Cross-tab: the 'storage' event propagates changes to other tabs automatically.
10
- *
11
- * @example
12
- * import { createChatHistoryStore } from 'basalt-ui/agent'
13
- *
14
- * // Call once at module scope with a stable key:
15
- * const useChatHistory = createChatHistoryStore({ key: 'main-chat', version: 1 })
16
- *
17
- * // In a component:
18
- * function Chat() {
19
- * const { messages, append, clear } = useChatHistory()
20
- * // ...
21
- * }
22
- */
23
- import { useCallback, useRef } from 'react'
24
- import { createPersistedState } from '../state'
1
+ /** ChatMessage — the typed message shape every thread carries. */
25
2
  import type { AgentPart } from './parts'
26
3
 
27
4
  // ── ChatMessage ───────────────────────────────────────────────────────────────
@@ -44,87 +21,5 @@ export type ChatMessage<TPart = AgentPart> = {
44
21
  readonly parts: TPart[]
45
22
  readonly createdAt: number
46
23
  /** How the turn ended. Absent on user messages and on pre-1.11 persisted assistant messages. */
47
- readonly finish?: 'complete' | 'stopped' | 'error'
48
- }
49
-
50
- // ── createChatHistoryStore options ────────────────────────────────────────────
51
-
52
- export type ChatHistoryStoreOptions = {
53
- /** localStorage key (namespaced as `basalt:<key>`). Stable — changes key lose history. */
54
- readonly key: string
55
- /** Envelope version. Increment when the ChatMessage shape changes to clear old data. */
56
- readonly version: number
57
- /**
58
- * Maximum number of messages to retain. Oldest messages are dropped when exceeded.
59
- * @default 100
60
- */
61
- readonly max?: number
62
- }
63
-
64
- // ── Return type of the factory hook ──────────────────────────────────────────
65
-
66
- export type ChatHistoryStore<TPart = AgentPart> = {
67
- /** All retained messages, oldest first. */
68
- readonly messages: ChatMessage<TPart>[]
69
- /** Append a message. Trims to `max` if needed (ring-buffer: drops oldest). */
70
- readonly append: (message: ChatMessage<TPart>) => void
71
- /** Clear all messages. */
72
- readonly clear: () => void
73
- }
74
-
75
- // ── createChatHistoryStore ────────────────────────────────────────────────────
76
-
77
- /**
78
- * Creates a stable persisted chat history hook for the given key + version.
79
- *
80
- * Call this ONCE per module (not inside a component). The returned hook can be called in any
81
- * component that needs access to the same history. All instances sharing the same key stay
82
- * in sync across tabs via the 'storage' event.
83
- *
84
- * @example
85
- * // src/chat/history.ts — ONE stable creation per key:
86
- * export const useChatHistory = createChatHistoryStore({ key: 'main-chat', version: 1 })
87
- *
88
- * // In a component:
89
- * const { messages, append, clear } = useChatHistory()
90
- * append({ id: crypto.randomUUID(), role: 'user', parts: [...], createdAt: Date.now() })
91
- */
92
- export function createChatHistoryStore<TPart = AgentPart>(
93
- opts: ChatHistoryStoreOptions,
94
- ): () => ChatHistoryStore<TPart> {
95
- const max = opts.max ?? 100
96
-
97
- const usePersistedMessages = createPersistedState<ChatMessage<TPart>[]>({
98
- key: opts.key,
99
- version: opts.version,
100
- initial: [],
101
- })
102
-
103
- return function useChatHistoryStore(): ChatHistoryStore<TPart> {
104
- const [messages, setMessages] = usePersistedMessages()
105
-
106
- // Ref mirrors the latest committed value so that two synchronous append() calls in one
107
- // render cycle accumulate correctly. createPersistedState's setter is a whole-value setter
108
- // (not a functional updater), so the second call would otherwise overwrite the first.
109
- const ref = useRef(messages)
110
- ref.current = messages
111
-
112
- const append = useCallback(
113
- (message: ChatMessage<TPart>): void => {
114
- const next = [...ref.current, message]
115
- // Ring-buffer: trim to max, dropping oldest entries first.
116
- const trimmed = next.length > max ? next.slice(next.length - max) : next
117
- ref.current = trimmed // sync so a second append in the same tick sees the update
118
- setMessages(trimmed)
119
- },
120
- [setMessages],
121
- )
122
-
123
- const clear = useCallback((): void => {
124
- ref.current = []
125
- setMessages([])
126
- }, [setMessages])
127
-
128
- return { messages, append, clear }
129
- }
24
+ readonly finish?: 'complete' | 'stopped' | 'error' | undefined
130
25
  }
package/src/agent/id.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Id-minting helpers shared across the agent layer: `mintThreadId` (a low-stakes client-side id —
3
- * threads, run/chat namespaces — used by `./thread`'s `createThreadsStore`, `./adapter`'s
4
- * `createAdapterThreadsStore`/`threadsStoreAdapterContract`, `./use-agent-stream`'s per-send run
5
- * id, and `aiSdkTransport`'s fixed chat id), `mintMessageId` (the higher-stakes id `appendMessage`
6
- * treats as its only idempotency key), and `withPartIds` (stamps sequence ids onto streamed
3
+ * threads, run/chat namespaces — used by `useAgentThreadRuns`'s per-send run id and
4
+ * `aiSdkTransport`'s fixed chat id; the thread store itself is consumer-owned), `mintMessageId`
5
+ * (the higher-stakes id `appendMessage` treats as its only idempotency key), and `withPartIds` (stamps sequence ids onto streamed
7
6
  * parts). Grouped here because they're the id-minting leaves every store/hook/transport in this
8
7
  * layer sits above — not because they share a mechanism (`mintMessageId` deliberately diverges
9
8
  * from `mintThreadId` on rung 3; see its own doc).
@@ -145,7 +144,7 @@ export function mintMessageId(): string {
145
144
  * // part.id is always defined here
146
145
  * }
147
146
  */
148
- export async function* withPartIds<TPart extends { id?: string }>(
147
+ export async function* withPartIds<TPart extends { id?: string | undefined }>(
149
148
  runId: string,
150
149
  source: AsyncGenerator<TPart>,
151
150
  ): AsyncGenerator<TPart & { id: string }> {
@@ -1,123 +1,34 @@
1
1
  /**
2
- * basalt-ui/agent — headless, Mantine-free streaming-chat layer over an injected transport seam.
3
- *
4
- * `aiSdkTransport` (backed by the `ai` npm package) is the RECOMMENDED DEFAULT transport for LLM
5
- * chat use cases; `edenTransport` remains the zero-extra-dependency alternative. Optional peers
6
- * (ai, use-stick-to-bottom) are all lazily loaded — importing this module does NOT eagerly resolve
7
- * either of them. This module ships no markdown renderer — `agent/** -> content` is lint-blocked
8
- * by design, so `PartList` takes a consumer-supplied `components.text`; basalt's own is
9
- * `basalt-ui/content`'s `Markdown`.
10
- *
11
- * Install optional peers:
12
- * bun add ai # aiSdkTransport
13
- * bun add use-stick-to-bottom # BasaltStickToBottom
2
+ * basalt-ui/agent — the AI chat surface: a Mantine-free streaming runtime (`src/agent/**` outside
3
+ * `chat/`) plus the chat UI (`src/agent/chat/**`). `aiSdkTransport` (the `ai` npm package) is the
4
+ * one transport; `useAgentThreadRuns` is the one runner. Optional peers (`ai`,
5
+ * `use-stick-to-bottom`) load lazily — importing this module does not resolve either.
14
6
  *
15
7
  * @example
16
- * import { useAgentStream, edenTransport, PartList, BasaltStickToBottom } from 'basalt-ui/agent'
17
- *
18
- * const transport = edenTransport((input, signal) =>
19
- * api.chat.post({ body: { message: input }, fetch: { signal } }),
20
- * )
21
- *
22
- * function Chat() {
23
- * const { parts, status, send, stop } = useAgentStream({ transport })
24
- * return (
25
- * <BasaltStickToBottom style={{ height: '400px', overflow: 'auto' }}>
26
- * <PartList parts={parts} />
27
- * <button onClick={() => send('Hello')}>Send</button>
28
- * {status === 'streaming' && <button onClick={stop}>Stop</button>}
29
- * </BasaltStickToBottom>
30
- * )
31
- * }
8
+ * import { aiSdkTransport, useAgentThreadRuns, ThreadFeed, Composer } from 'basalt-ui/agent'
32
9
  */
33
10
 
34
- // ── AgentPart discriminated union ─────────────────────────────────────────────
35
- export type {
36
- AgentPart,
37
- AgentPartDraft,
38
- Drafted,
39
- StartPart,
40
- TextPart,
41
- ReasoningPart,
42
- ToolCallPart,
43
- ToolCallState,
44
- SourcePart,
45
- ErrorPart,
46
- } from './parts'
47
- export { parseAgentPart, isStartPart, isToolCallSettled, TERMINAL_TOOL_STATES } from './parts'
48
-
49
- // ── mergePart (identity-addressed accumulator) ───────────────────────────────
50
- export { mergePart } from './merge'
11
+ // ── Parts ─────────────────────────────────────────────────────────────────────
12
+ export type { AgentPart, ToolCallPart } from './parts'
13
+ export { parseAgentPart } from './parts'
14
+ export type { ForeignPart, TranscriptPart, PartRenderers, PartRenderer } from './foreign'
51
15
 
52
- // ── withPartIds (drafts → identified parts) ──────────────────────────────────
53
- export { withPartIds } from './id'
54
-
55
- // ── coalesceParts (adjacent + by-id merge for display) ───────────────────────
56
- export { coalesceParts } from './coalesce'
57
-
58
- // ── foreign parts (the open half of the part-renderer registry) ──────────────
59
- export { definePartRenderers, narrowAgentPart } from './foreign'
60
- export type {
61
- ForeignPart,
62
- TranscriptPart,
63
- ConsumerPart,
64
- PartRenderers,
65
- PartRenderContext,
66
- PartRenderer,
67
- } from './foreign'
68
-
69
- // ── AgentTransport + edenTransport ───────────────────────────────────────────
70
- export type { AgentTransport, ResumableAgentTransport } from './transport'
71
- export { edenTransport, isResumable } from './transport'
72
-
73
- // ── aiSdkTransport (recommended default, optional peer: ai) ──────────────────
16
+ // ── Transport and runner ──────────────────────────────────────────────────────
74
17
  export { aiSdkTransport } from './ai-sdk-transport'
75
- export type { AiSdkTransport, AiSdkTransportOptions } from './ai-sdk-transport'
76
-
77
- // ── useAgentStream ────────────────────────────────────────────────────────────
78
- export { useAgentStream } from './use-agent-stream'
79
- export type { StreamStatus, UseAgentStreamReturn } from './use-agent-stream'
80
-
81
- // ── useAgentThreadRuns ────────────────────────────────────────────────────────
82
18
  export { useAgentThreadRuns } from './use-agent-thread-runs'
83
- export type {
84
- ThreadRunState,
85
- UseAgentThreadRunsArgs,
86
- UseAgentThreadRunsReturn,
87
- } from './use-agent-thread-runs'
88
-
89
- // ── PartList + renderer types ─────────────────────────────────────────────────
90
- export { PartList } from './part-list'
91
- export type {
92
- PartListProps,
93
- AgentPartRenderers,
94
- TextPartRenderer,
95
- ReasoningPartRenderer,
96
- ToolCallPartRenderer,
97
- SourcePartRenderer,
98
- ErrorPartRenderer,
99
- } from './part-list'
19
+ export type { ThreadRunState } from './use-agent-thread-runs'
20
+ export type { AgentError } from './error'
100
21
 
101
- // ── BasaltStickToBottom (lazy, optional peer: use-stick-to-bottom) ────────────
102
- export { BasaltStickToBottom } from './stick-to-bottom'
103
- export type { BasaltStickToBottomProps } from './stick-to-bottom'
104
-
105
- // ── createChatHistoryStore + ChatMessage ──────────────────────────────────────
106
- export { createChatHistoryStore } from './history'
107
- export type { ChatMessage, ChatHistoryStore, ChatHistoryStoreOptions } from './history'
108
-
109
- // ── createThreadsStore + AgentThread ──────────────────────────────────────────
110
- export { createThreadsStore } from './thread'
111
- export type { AgentThread, ThreadStatus, ThreadsStore, ThreadsStoreOptions } from './thread'
112
-
113
- // ── AgentOutcome + heuristicOutcome ────────────────────────────────────────────
114
- export { heuristicOutcome } from './outcome'
22
+ // ── Thread contracts (the store is consumer-owned) ────────────────────────────
23
+ export type { ChatMessage } from './history'
24
+ export type { AgentThread, ThreadStatus, ThreadsStore } from './thread'
115
25
  export type { AgentOutcome, OutcomeResolver } from './outcome'
26
+ export type { AgentTransport, ResumableAgentTransport } from './transport'
116
27
 
117
- // ── createAdapterThreadsStore + threadsStoreAdapterContract ──────────────────
118
- export { createAdapterThreadsStore, threadsStoreAdapterContract } from './adapter'
119
- export type {
120
- AdapterThreadsStoreOptions,
121
- ThreadsStoreAdapter,
122
- ThreadsStoreAdapterContractCase,
123
- } from './adapter'
28
+ // ── Chat UI ───────────────────────────────────────────────────────────────────
29
+ export { ThreadFeed } from './chat/thread-feed'
30
+ export { ThreadFeedRow } from './chat/thread-feed-row'
31
+ export type { MessageAffordances } from './chat/message-affordances'
32
+ export { Composer } from './chat/composer'
33
+ export type { ComposerHandle, ComposerSubmit } from './chat/composer'
34
+ export { ToolChip } from './chat/tool-chip'
@@ -5,7 +5,7 @@
5
5
  * multi-thread feed — only a short, past-tense summary of what happened. AgentOutcome is
6
6
  * that DIFFERENT, smaller shape: a title, a one-line summary, and a status. Producing one
7
7
  * is the job of an OutcomeResolver (typically an LLM-backed summarizer wired by the
8
- * consumer); heuristicOutcome below is a text-only fallback for demos and early wiring.
8
+ * consumer).
9
9
  *
10
10
  * @example
11
11
  * import type { AgentOutcome } from 'basalt-ui/agent'
@@ -32,12 +32,12 @@ import type { AgentThread } from './thread'
32
32
  * turn has settled, so those never apply here.
33
33
  *
34
34
  * Note there are THREE overlapping status-shaped unions in this module family, one per layer:
35
- * `StreamStatus` (single-turn stream lifecycle, `./use-agent-stream`), `ThreadStatus` (persisted
35
+ * the internal `StreamStatus` (single-turn stream lifecycle, `./thread`), `ThreadStatus` (persisted
36
36
  * thread lifecycle, `./thread`), and this `AgentOutcome['status']` (feed-facing terminal
37
37
  * projection). They are related but not identical — `StreamStatus`'s `'idle'` (no turn in
38
38
  * flight) corresponds to `ThreadStatus`'s `'pending'` (thread created, no turn started yet); the
39
39
  * literal rename from `'idle'` to `'pending'` is intentionally deferred since it would ripple
40
- * into `use-agent-stream.ts` and its call sites.
40
+ * into `useAgentThreadRuns` and its call sites.
41
41
  *
42
42
  * @example
43
43
  * const outcome: AgentOutcome = { title: 'New chat', summary: '', status: 'done' }
@@ -65,56 +65,3 @@ export type AgentOutcome = {
65
65
  export type OutcomeResolver<TPart = AgentPart> = (
66
66
  thread: AgentThread<TPart>,
67
67
  ) => AgentOutcome | Promise<AgentOutcome>
68
-
69
- // ── heuristicOutcome ──────────────────────────────────────────────────────────
70
-
71
- const TITLE_MAX = 48
72
- const SUMMARY_MAX = 88
73
-
74
- /** Trim `text` to at most `max` characters, appending an ellipsis when cut. */
75
- function truncate(text: string, max: number): string {
76
- if (text.length <= max) return text
77
- return `${text.slice(0, max - 1).trimEnd()}…`
78
- }
79
-
80
- /** The leading sentence/clause of `text` (up to the first `.`, `!`, or `?`), trimmed. */
81
- function firstClause(text: string): string {
82
- const match = text.match(/^[^.!?]+[.!?]?/)
83
- return (match?.[0] ?? text).trim()
84
- }
85
-
86
- /**
87
- * DEMO-ONLY provisional heuristic — never the production path. Coalesces the last assistant
88
- * message's text parts into one string and derives a title/summary/status from it with no
89
- * model call. Real apps should wire an OutcomeResolver backed by an LLM summarizer; this
90
- * exists purely so a feed has something to render before that wiring lands.
91
- *
92
- * @example
93
- * const outcome = heuristicOutcome(thread)
94
- * // { title: 'Fixed the flaky test', summary: 'Fixed the flaky test by awaiting…', status: 'done' }
95
- */
96
- export function heuristicOutcome(thread: AgentThread): AgentOutcome {
97
- const lastAssistant = thread.messages.toReversed().find((message) => message.role === 'assistant')
98
- if (lastAssistant === undefined) {
99
- return { title: 'New chat', summary: '', status: 'done' }
100
- }
101
-
102
- const text = lastAssistant.parts
103
- .filter((part): part is Extract<AgentPart, { type: 'text' }> => part.type === 'text')
104
- .map((part) => part.text)
105
- .join('')
106
- .trim()
107
-
108
- if (text.length === 0) {
109
- return { title: 'New chat', summary: '', status: 'done' }
110
- }
111
-
112
- const lastPart = lastAssistant.parts[lastAssistant.parts.length - 1]
113
- const status: AgentOutcome['status'] = lastPart?.type === 'error' ? 'error' : 'done'
114
-
115
- return {
116
- title: truncate(firstClause(text), TITLE_MAX),
117
- summary: truncate(text, SUMMARY_MAX),
118
- status,
119
- }
120
- }
@@ -241,21 +241,21 @@ const DEFAULT_RENDERERS: AgentPartRenderers = {
241
241
  // ── PartList ──────────────────────────────────────────────────────────────────
242
242
 
243
243
  export type PartListProps<TPart extends AgentPart = AgentPart> = {
244
- /** The parts accumulator from useAgentStream. */
244
+ /** The parts accumulator from useAgentThreadRuns. */
245
245
  readonly parts: TPart[]
246
246
  /**
247
247
  * Override individual part renderers. Omitted keys fall back to the headless defaults.
248
248
  * Pass `{ text: ({ part, settled }) => <Markdown streaming={!settled} contentTrust="untrusted" density="chat">{part.text}</Markdown> }`
249
249
  * to enable rich markdown rendering.
250
250
  */
251
- readonly components?: Partial<AgentPartRenderers<TPart>>
251
+ readonly components?: Partial<AgentPartRenderers<TPart>> | undefined
252
252
  /**
253
253
  * `false` while the message these parts belong to is still streaming — forwarded to every
254
254
  * renderer so a text renderer can drop out of streaming mode (and a fenced mermaid/diagram can
255
255
  * upgrade) once the turn finishes. Defaults to `true`: a caller that knows nothing about a run
256
256
  * is rendering a finished list, and un-settled must be opted into by the thing that does know.
257
257
  */
258
- readonly settled?: boolean
258
+ readonly settled?: boolean | undefined
259
259
  }
260
260
 
261
261
  /**