basalt-ui 1.40.3 → 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 (923) hide show
  1. package/AGENTS.md +50 -45
  2. package/CHANGELOG.md +543 -513
  3. package/MIGRATING.md +969 -37
  4. package/README.md +172 -367
  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 +30 -0
  15. package/agent/templates/DESIGN.md.tpl +2 -2
  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/check.yml +1 -1
  20. package/configs/oxlint-basalt.json +4 -10
  21. package/configs/oxlint-plugin.js +468 -847
  22. package/configs/oxlint-plugin.test.ts +662 -710
  23. package/configs/oxlint.json +10 -2
  24. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  25. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  26. package/dist/agent/ai-sdk-transport.js +10 -7
  27. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  28. package/dist/agent/chat/composer.d.ts.map +1 -0
  29. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  30. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  31. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  32. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  33. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  34. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  35. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  36. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  37. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  38. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  39. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  40. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  41. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  42. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  43. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  44. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  45. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  46. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  47. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  48. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  49. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  50. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  51. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  52. package/dist/agent/error.d.ts +31 -0
  53. package/dist/agent/error.d.ts.map +1 -0
  54. package/dist/agent/error.js +18 -0
  55. package/dist/agent/foreign.d.ts +3 -2
  56. package/dist/agent/foreign.d.ts.map +1 -1
  57. package/dist/agent/history.d.ts +2 -36
  58. package/dist/agent/history.d.ts.map +1 -1
  59. package/dist/agent/history.js +0 -32
  60. package/dist/agent/id.d.ts +4 -5
  61. package/dist/agent/id.d.ts.map +1 -1
  62. package/dist/agent/index.d.ts +19 -52
  63. package/dist/agent/index.d.ts.map +1 -1
  64. package/dist/agent/index.js +10 -32
  65. package/dist/agent/outcome.d.ts +3 -14
  66. package/dist/agent/outcome.d.ts.map +1 -1
  67. package/dist/agent/outcome.js +0 -30
  68. package/dist/agent/part-list.d.ts +3 -3
  69. package/dist/agent/part-list.d.ts.map +1 -1
  70. package/dist/agent/parts.d.ts +23 -24
  71. package/dist/agent/parts.d.ts.map +1 -1
  72. package/dist/agent/run-committer.d.ts +23 -0
  73. package/dist/agent/run-committer.d.ts.map +1 -0
  74. package/dist/agent/run-committer.js +41 -0
  75. package/dist/agent/run-records.d.ts +77 -0
  76. package/dist/agent/run-records.d.ts.map +1 -0
  77. package/dist/agent/run-records.js +69 -0
  78. package/dist/agent/thread.d.ts +23 -47
  79. package/dist/agent/thread.d.ts.map +1 -1
  80. package/dist/agent/thread.js +3 -134
  81. package/dist/agent/transport.d.ts +6 -69
  82. package/dist/agent/transport.d.ts.map +1 -1
  83. package/dist/agent/transport.js +0 -18
  84. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  85. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  86. package/dist/agent/use-agent-thread-runs.js +202 -66
  87. package/dist/charts/BandStrip.d.ts +46 -0
  88. package/dist/charts/BandStrip.d.ts.map +1 -0
  89. package/dist/charts/BandStrip.js +151 -0
  90. package/dist/charts/Bars.d.ts +19 -0
  91. package/dist/charts/Bars.d.ts.map +1 -0
  92. package/dist/charts/Bars.js +77 -0
  93. package/dist/charts/CartesianChart.d.ts +57 -0
  94. package/dist/charts/CartesianChart.d.ts.map +1 -0
  95. package/dist/charts/CartesianChart.js +121 -0
  96. package/dist/charts/ChartCard.d.ts +34 -0
  97. package/dist/charts/ChartCard.d.ts.map +1 -0
  98. package/dist/charts/ChartCard.js +115 -0
  99. package/dist/charts/Donut.d.ts +25 -0
  100. package/dist/charts/Donut.d.ts.map +1 -0
  101. package/dist/charts/Donut.js +191 -0
  102. package/dist/charts/DualPanel.d.ts +47 -0
  103. package/dist/charts/DualPanel.d.ts.map +1 -0
  104. package/dist/charts/DualPanel.js +214 -0
  105. package/dist/charts/Heatmap.d.ts +41 -0
  106. package/dist/charts/Heatmap.d.ts.map +1 -0
  107. package/dist/charts/Heatmap.js +216 -0
  108. package/dist/charts/Lines.d.ts +11 -0
  109. package/dist/charts/Lines.d.ts.map +1 -0
  110. package/dist/charts/Lines.js +114 -0
  111. package/dist/charts/MirroredBars.d.ts +44 -0
  112. package/dist/charts/MirroredBars.d.ts.map +1 -0
  113. package/dist/charts/MirroredBars.js +190 -0
  114. package/dist/charts/Sparkline.d.ts +22 -0
  115. package/dist/charts/Sparkline.d.ts.map +1 -0
  116. package/dist/charts/Sparkline.js +129 -0
  117. package/dist/charts/StackedArea.d.ts +15 -0
  118. package/dist/charts/StackedArea.d.ts.map +1 -0
  119. package/dist/charts/StackedArea.js +46 -0
  120. package/dist/charts/box.d.ts +38 -0
  121. package/dist/charts/box.d.ts.map +1 -0
  122. package/dist/charts/box.js +72 -0
  123. package/dist/charts/card-context.d.ts +3 -0
  124. package/dist/charts/card-context.d.ts.map +1 -0
  125. package/dist/charts/card-context.js +7 -0
  126. package/dist/charts/chart-box.module.css +64 -0
  127. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  128. package/dist/charts/chart-card.module.css +25 -0
  129. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  130. package/dist/charts/chart-legend.module.css +38 -0
  131. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  132. package/dist/charts/compile.d.ts +62 -0
  133. package/dist/charts/compile.d.ts.map +1 -0
  134. package/dist/charts/compile.js +386 -0
  135. package/dist/charts/cursor.d.ts +50 -0
  136. package/dist/charts/cursor.d.ts.map +1 -0
  137. package/dist/charts/cursor.js +157 -0
  138. package/dist/charts/curves.d.ts +12 -0
  139. package/dist/charts/curves.d.ts.map +1 -0
  140. package/dist/charts/curves.js +86 -0
  141. package/dist/charts/donut.module.css +54 -0
  142. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  143. package/dist/charts/host.d.ts +17 -0
  144. package/dist/charts/host.d.ts.map +1 -0
  145. package/dist/charts/host.js +35 -0
  146. package/dist/charts/index.d.ts +18 -53
  147. package/dist/charts/index.d.ts.map +1 -1
  148. package/dist/charts/index.js +17 -189
  149. package/dist/charts/legend.d.ts +23 -0
  150. package/dist/charts/legend.d.ts.map +1 -0
  151. package/dist/charts/legend.js +160 -0
  152. package/dist/charts/marks.d.ts +25 -0
  153. package/dist/charts/marks.d.ts.map +1 -0
  154. package/dist/charts/marks.js +128 -0
  155. package/dist/charts/panel.d.ts +56 -0
  156. package/dist/charts/panel.d.ts.map +1 -0
  157. package/dist/charts/panel.js +123 -0
  158. package/dist/charts/scales.d.ts +44 -0
  159. package/dist/charts/scales.d.ts.map +1 -0
  160. package/dist/charts/scales.js +163 -0
  161. package/dist/charts/sizing.d.ts +12 -0
  162. package/dist/charts/sizing.d.ts.map +1 -0
  163. package/dist/charts/sizing.js +33 -0
  164. package/dist/charts/state.d.ts +17 -0
  165. package/dist/charts/state.d.ts.map +1 -0
  166. package/dist/charts/state.js +53 -0
  167. package/dist/charts/theme.d.ts +38 -19
  168. package/dist/charts/theme.d.ts.map +1 -1
  169. package/dist/charts/theme.js +48 -26
  170. package/dist/charts/types.d.ts +227 -0
  171. package/dist/charts/types.d.ts.map +1 -0
  172. package/dist/charts/types.js +4 -0
  173. package/dist/cli/audit-allows.d.ts +4 -17
  174. package/dist/cli/audit-allows.d.ts.map +1 -1
  175. package/dist/cli/config.d.ts +14 -43
  176. package/dist/cli/config.d.ts.map +1 -1
  177. package/dist/cli/doctor-upgrade.d.ts +31 -0
  178. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  179. package/dist/cli/doctor-upgrade.js +269 -0
  180. package/dist/cli/doctor.d.ts +13 -26
  181. package/dist/cli/doctor.d.ts.map +1 -1
  182. package/dist/cli/doctor.js +79 -8
  183. package/dist/cli/help.d.ts.map +1 -1
  184. package/dist/cli/help.js +2 -4
  185. package/dist/cli/index.d.ts +68 -135
  186. package/dist/cli/index.d.ts.map +1 -1
  187. package/dist/cli/index.js +89 -76
  188. package/dist/cli/init.d.ts.map +1 -1
  189. package/dist/cli/init.js +43 -27
  190. package/dist/cli/sync.d.ts +5 -21
  191. package/dist/cli/sync.d.ts.map +1 -1
  192. package/dist/cli/sync.js +4 -6
  193. package/dist/cli/tokens-css.d.ts +7 -28
  194. package/dist/cli/tokens-css.d.ts.map +1 -1
  195. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  196. package/dist/commands/ShortcutsHelp.js +4 -5
  197. package/dist/commands/define-commands.d.ts +15 -31
  198. package/dist/commands/define-commands.d.ts.map +1 -1
  199. package/dist/commands/define-commands.js +1 -11
  200. package/dist/commands/define-overlays.d.ts +5 -19
  201. package/dist/commands/define-overlays.d.ts.map +1 -1
  202. package/dist/commands/define-overlays.js +3 -11
  203. package/dist/commands/index.d.ts +10 -40
  204. package/dist/commands/index.d.ts.map +1 -1
  205. package/dist/commands/index.js +9 -46
  206. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  207. package/dist/commands/notifications/bell.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  209. package/dist/commands/notifications/center.d.ts.map +1 -0
  210. package/dist/{notifications → commands/notifications}/center.js +2 -2
  211. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  212. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.d.ts +44 -0
  214. package/dist/commands/notifications/notify.d.ts.map +1 -0
  215. package/dist/commands/notifications/notify.js +79 -0
  216. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  217. package/dist/commands/notifications/store.d.ts.map +1 -0
  218. package/dist/{notifications → commands/notifications}/store.js +4 -0
  219. package/dist/commands/projectors.d.ts +1 -131
  220. package/dist/commands/projectors.d.ts.map +1 -1
  221. package/dist/commands/projectors.js +2 -73
  222. package/dist/commands/shell-bridge.d.ts +3 -3
  223. package/dist/commands/shortcut-format.d.ts +5 -4
  224. package/dist/commands/shortcut-format.d.ts.map +1 -1
  225. package/dist/common/errors.d.ts +3 -3
  226. package/dist/common/use-measured-widths.d.ts.map +1 -1
  227. package/dist/common/use-measured-widths.js +5 -3
  228. package/dist/common/validate.d.ts +2 -2
  229. package/dist/content/article-layout.d.ts.map +1 -1
  230. package/dist/content/article-layout.js +3 -3
  231. package/dist/content/article-model.d.ts +1 -46
  232. package/dist/content/article-model.d.ts.map +1 -1
  233. package/dist/content/article-model.js +1 -29
  234. package/dist/content/copy-action.d.ts +1 -1
  235. package/dist/content/glyphs.d.ts +1 -1
  236. package/dist/content/index.d.ts +11 -41
  237. package/dist/content/index.d.ts.map +1 -1
  238. package/dist/content/index.js +3 -35
  239. package/dist/content/markdown.d.ts +1 -1
  240. package/dist/content/markdown.d.ts.map +1 -1
  241. package/dist/content/markdown.js +1 -1
  242. package/dist/content/mermaid.d.ts.map +1 -1
  243. package/dist/content/mermaid.js +7 -7
  244. package/dist/content/slug.d.ts +1 -8
  245. package/dist/content/slug.d.ts.map +1 -1
  246. package/dist/content/slug.js +1 -8
  247. package/dist/content/url-hardening.d.ts +2 -2
  248. package/dist/content/url-hardening.d.ts.map +1 -1
  249. package/dist/content/url-hardening.js +2 -0
  250. package/dist/controls/actions.d.ts +16 -1
  251. package/dist/controls/actions.d.ts.map +1 -1
  252. package/dist/controls/enum-filter.d.ts +1 -1
  253. package/dist/controls/enum-filter.d.ts.map +1 -1
  254. package/dist/controls/filter-context.d.ts.map +1 -1
  255. package/dist/controls/filter-context.js +3 -1
  256. package/dist/controls/filter-set.js +4 -6
  257. package/dist/controls/form-layout.d.ts +1 -1
  258. package/dist/controls/form-layout.d.ts.map +1 -1
  259. package/dist/controls/form-layout.js +1 -1
  260. package/dist/controls/glyphs.d.ts +0 -2
  261. package/dist/controls/glyphs.d.ts.map +1 -1
  262. package/dist/controls/glyphs.js +0 -7
  263. package/dist/controls/index.d.ts +12 -17
  264. package/dist/controls/index.d.ts.map +1 -1
  265. package/dist/controls/index.js +5 -39
  266. package/dist/controls/multi-select-filter.d.ts +4 -3
  267. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  268. package/dist/controls/number-filter.d.ts +4 -3
  269. package/dist/controls/number-filter.d.ts.map +1 -1
  270. package/dist/controls/number-filter.js +3 -1
  271. package/dist/controls/range-filter.d.ts +4 -3
  272. package/dist/controls/range-filter.d.ts.map +1 -1
  273. package/dist/controls/search-filter.d.ts +4 -3
  274. package/dist/controls/search-filter.d.ts.map +1 -1
  275. package/dist/controls/search-filter.js +19 -14
  276. package/dist/controls/select-filter.d.ts +4 -3
  277. package/dist/controls/select-filter.d.ts.map +1 -1
  278. package/dist/controls/sync-button.d.ts.map +1 -1
  279. package/dist/controls/sync-button.js +12 -15
  280. package/dist/controls/toggle-filter.d.ts +4 -3
  281. package/dist/controls/toggle-filter.d.ts.map +1 -1
  282. package/dist/controls/uncontrolled.d.ts +12 -0
  283. package/dist/controls/uncontrolled.d.ts.map +1 -0
  284. package/dist/controls/view-tabs.d.ts +2 -2
  285. package/dist/controls/view-tabs.d.ts.map +1 -1
  286. package/dist/controls-dates/index.d.ts +0 -1
  287. package/dist/controls-dates/index.d.ts.map +1 -1
  288. package/dist/dashboard/index.d.ts +7 -9
  289. package/dist/dashboard/index.d.ts.map +1 -1
  290. package/dist/dashboard/index.js +3 -23
  291. package/dist/dashboard/section.d.ts +4 -6
  292. package/dist/dashboard/section.d.ts.map +1 -1
  293. package/dist/dashboard/section.js +4 -10
  294. package/dist/dashboard/stat-card.d.ts +4 -4
  295. package/dist/dashboard/stat-card.d.ts.map +1 -1
  296. package/dist/dashboard/stat-card.js +3 -3
  297. package/dist/dashboard/widget-header.module.css +9 -7
  298. package/dist/dev-dock.d.ts.map +1 -1
  299. package/dist/dev-dock.js +6 -1
  300. package/dist/format/date.d.ts +0 -34
  301. package/dist/format/date.d.ts.map +1 -1
  302. package/dist/format/date.js +0 -54
  303. package/dist/format/index.d.ts +7 -22
  304. package/dist/format/index.d.ts.map +1 -1
  305. package/dist/format/index.js +2 -43
  306. package/dist/format/number.d.ts +3 -14
  307. package/dist/format/number.d.ts.map +1 -1
  308. package/dist/format/number.js +0 -13
  309. package/dist/format/shared.d.ts +2 -3
  310. package/dist/format/shared.d.ts.map +1 -1
  311. package/dist/forms/index.d.ts +0 -11
  312. package/dist/forms/index.d.ts.map +1 -1
  313. package/dist/forms/index.js +1 -14
  314. package/dist/guard/index.d.ts +6 -21
  315. package/dist/guard/index.d.ts.map +1 -1
  316. package/dist/guard/index.js +27 -115
  317. package/dist/guard/types.d.ts +7 -18
  318. package/dist/guard/types.d.ts.map +1 -1
  319. package/dist/index.d.ts +16 -48
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +21 -117
  322. package/dist/provider/create-router.d.ts +44 -0
  323. package/dist/provider/create-router.d.ts.map +1 -0
  324. package/dist/provider/create-router.js +62 -0
  325. package/dist/provider/hotkeys.d.ts +8 -0
  326. package/dist/provider/hotkeys.d.ts.map +1 -0
  327. package/dist/provider/hotkeys.js +50 -0
  328. package/dist/provider/index.d.ts +33 -110
  329. package/dist/provider/index.d.ts.map +1 -1
  330. package/dist/provider/index.js +182 -82
  331. package/dist/provider/lab-theme.d.ts.map +1 -1
  332. package/dist/provider/route-transition.d.ts +76 -0
  333. package/dist/provider/route-transition.d.ts.map +1 -0
  334. package/dist/provider/route-transition.js +98 -0
  335. package/dist/provider/spotlight-actions.d.ts +10 -0
  336. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  337. package/dist/provider/spotlight-actions.js +55 -0
  338. package/dist/provider/test-router.d.ts +6 -0
  339. package/dist/provider/test-router.d.ts.map +1 -0
  340. package/dist/provider/test-router.js +18 -0
  341. package/dist/query-client.d.ts +4 -20
  342. package/dist/query-client.d.ts.map +1 -1
  343. package/dist/query-client.js +2 -2
  344. package/dist/router-tanstack/index.d.ts +18 -64
  345. package/dist/router-tanstack/index.d.ts.map +1 -1
  346. package/dist/router-tanstack/index.js +2 -16
  347. package/dist/router-tanstack/nav.d.ts +12 -1
  348. package/dist/router-tanstack/nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/nav.js +8 -1
  350. package/dist/router-tanstack/search-store.d.ts +1 -1
  351. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  352. package/dist/router-tanstack/use-nav.d.ts +8 -9
  353. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  354. package/dist/router-tanstack/use-nav.js +20 -1
  355. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  356. package/dist/shell/app-sidebar.js +1 -1
  357. package/dist/shell/index.d.ts +31 -10
  358. package/dist/shell/index.d.ts.map +1 -1
  359. package/dist/shell/index.js +14 -3
  360. package/dist/shell/page-aside.d.ts +2 -2
  361. package/dist/shell/page-aside.d.ts.map +1 -1
  362. package/dist/shell/page-aside.js +31 -12
  363. package/dist/shell/page-bar.d.ts +2 -2
  364. package/dist/shell/page-bar.d.ts.map +1 -1
  365. package/dist/shell/page-bar.js +1 -1
  366. package/dist/state.d.ts +10 -12
  367. package/dist/state.d.ts.map +1 -1
  368. package/dist/state.js +4 -6
  369. package/dist/styles.css +107 -7
  370. package/dist/surfaces.d.ts +28 -103
  371. package/dist/surfaces.d.ts.map +1 -1
  372. package/dist/surfaces.js +54 -143
  373. package/dist/{data → table}/data-table-state.d.ts +1 -1
  374. package/dist/table/data-table-state.d.ts.map +1 -0
  375. package/dist/{data → table}/data-table-state.js +4 -3
  376. package/dist/{data → table}/data-table.d.ts +28 -49
  377. package/dist/table/data-table.d.ts.map +1 -0
  378. package/dist/{data → table}/data-table.js +74 -60
  379. package/dist/table/index.d.ts +18 -0
  380. package/dist/table/index.d.ts.map +1 -0
  381. package/dist/{data/table.js → table/index.js} +1 -1
  382. package/dist/table/query-branch.d.ts.map +1 -0
  383. package/dist/table/table-features.d.ts +69 -0
  384. package/dist/table/table-features.d.ts.map +1 -0
  385. package/dist/table/table-features.js +49 -0
  386. package/dist/telemetry.d.ts +77 -0
  387. package/dist/telemetry.d.ts.map +1 -0
  388. package/dist/telemetry.js +33 -0
  389. package/dist/theme/index.d.ts +10 -21
  390. package/dist/theme/index.d.ts.map +1 -1
  391. package/dist/theme/index.js +3 -14
  392. package/dist/theme/theme-toggle.d.ts.map +1 -1
  393. package/dist/theme/theme-toggle.js +7 -33
  394. package/dist/theme/theme-toggle.module.css +30 -0
  395. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  396. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  397. package/dist/theme-lab/derive-controls.js +5 -3
  398. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  399. package/dist/theme-lab/derive-state.js +2 -1
  400. package/dist/tokens/core.d.ts +360 -0
  401. package/dist/tokens/core.d.ts.map +1 -0
  402. package/dist/tokens/core.js +708 -0
  403. package/dist/tokens/derive.d.ts +1 -1
  404. package/dist/tokens/derive.d.ts.map +1 -1
  405. package/dist/tokens/index.d.ts +5 -373
  406. package/dist/tokens/index.d.ts.map +1 -1
  407. package/dist/tokens/index.js +8 -700
  408. package/dist/tokens/palette.d.ts +2 -6
  409. package/dist/tokens/palette.d.ts.map +1 -1
  410. package/dist/tokens/palette.js +1 -4
  411. package/dist/vite.d.ts +4 -3
  412. package/dist/vite.d.ts.map +1 -1
  413. package/llms.txt +43 -85
  414. package/package.json +77 -170
  415. package/src/agent/ai-sdk-transport.ts +57 -37
  416. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  417. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  418. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  419. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  420. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  421. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  422. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  423. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  424. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  425. package/src/agent/error.ts +43 -0
  426. package/src/agent/foreign.ts +3 -2
  427. package/src/agent/history.ts +2 -107
  428. package/src/agent/id.ts +4 -5
  429. package/src/agent/index.ts +23 -112
  430. package/src/agent/outcome.ts +3 -56
  431. package/src/agent/part-list.tsx +3 -3
  432. package/src/agent/parts.ts +23 -22
  433. package/src/agent/run-committer.ts +64 -0
  434. package/src/agent/run-records.ts +147 -0
  435. package/src/agent/thread.ts +24 -231
  436. package/src/agent/transport.ts +6 -96
  437. package/src/agent/use-agent-thread-runs.ts +364 -199
  438. package/src/charts/BandStrip.tsx +276 -0
  439. package/src/charts/Bars.tsx +141 -0
  440. package/src/charts/CartesianChart.tsx +206 -0
  441. package/src/charts/ChartCard.tsx +178 -0
  442. package/src/charts/Donut.tsx +256 -0
  443. package/src/charts/DualPanel.tsx +326 -0
  444. package/src/charts/Heatmap.tsx +282 -0
  445. package/src/charts/Lines.tsx +151 -0
  446. package/src/charts/MirroredBars.tsx +303 -0
  447. package/src/charts/Sparkline.tsx +176 -0
  448. package/src/charts/StackedArea.tsx +80 -0
  449. package/src/charts/box.tsx +96 -0
  450. package/src/charts/card-context.ts +11 -0
  451. package/src/charts/chart-box.module.css +64 -0
  452. package/src/charts/chart-box.module.css.d.ts +12 -0
  453. package/src/charts/chart-card.module.css +25 -0
  454. package/src/charts/chart-card.module.css.d.ts +8 -0
  455. package/src/charts/chart-legend.module.css +38 -0
  456. package/src/charts/chart-legend.module.css.d.ts +10 -0
  457. package/src/charts/compile.ts +585 -0
  458. package/src/charts/cursor.ts +282 -0
  459. package/src/charts/curves.ts +111 -0
  460. package/src/charts/donut.module.css +54 -0
  461. package/src/charts/donut.module.css.d.ts +9 -0
  462. package/src/charts/host.tsx +60 -0
  463. package/src/charts/index.ts +41 -178
  464. package/src/charts/legend.tsx +204 -0
  465. package/src/charts/marks.ts +201 -0
  466. package/src/charts/panel.tsx +227 -0
  467. package/src/charts/scales.ts +237 -0
  468. package/src/charts/sizing.ts +47 -0
  469. package/src/charts/state.tsx +80 -0
  470. package/src/charts/theme.ts +65 -0
  471. package/src/charts/types.ts +242 -0
  472. package/src/cli/audit-allows.ts +8 -30
  473. package/src/cli/config.ts +14 -43
  474. package/src/cli/doctor-upgrade.ts +392 -0
  475. package/src/cli/doctor.ts +120 -68
  476. package/src/cli/help.ts +2 -4
  477. package/src/cli/index.ts +161 -276
  478. package/src/cli/init.ts +60 -37
  479. package/src/cli/sync.ts +13 -45
  480. package/src/cli/tokens-css.ts +7 -28
  481. package/src/commands/ShortcutsHelp.tsx +8 -9
  482. package/src/commands/define-commands.ts +16 -43
  483. package/src/commands/define-overlays.ts +12 -36
  484. package/src/commands/index.ts +11 -94
  485. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  486. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  487. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  488. package/src/commands/notifications/notify.tsx +158 -0
  489. package/src/{notifications → commands/notifications}/store.ts +10 -2
  490. package/src/commands/projectors.ts +5 -225
  491. package/src/commands/shell-bridge.ts +5 -5
  492. package/src/commands/shortcut-format.ts +5 -4
  493. package/src/common/errors.ts +3 -3
  494. package/src/common/use-measured-widths.ts +6 -3
  495. package/src/common/validate.ts +2 -2
  496. package/src/content/article-layout.tsx +37 -38
  497. package/src/content/article-model.ts +1 -84
  498. package/src/content/copy-action.tsx +1 -1
  499. package/src/content/glyphs.tsx +1 -1
  500. package/src/content/index.ts +12 -83
  501. package/src/content/markdown.tsx +4 -3
  502. package/src/content/mermaid.tsx +9 -7
  503. package/src/content/slug.ts +1 -16
  504. package/src/content/url-hardening.ts +8 -2
  505. package/src/controls/actions.tsx +24 -1
  506. package/src/controls/enum-filter.tsx +1 -1
  507. package/src/controls/filter-context.tsx +3 -1
  508. package/src/controls/filter-set.tsx +5 -7
  509. package/src/controls/form-layout.tsx +2 -2
  510. package/src/controls/glyphs.tsx +0 -10
  511. package/src/controls/index.ts +13 -64
  512. package/src/controls/multi-select-filter.tsx +5 -4
  513. package/src/controls/number-filter.tsx +8 -4
  514. package/src/controls/range-filter.tsx +5 -4
  515. package/src/controls/search-filter.tsx +25 -19
  516. package/src/controls/select-filter.tsx +5 -4
  517. package/src/controls/sync-button.tsx +18 -20
  518. package/src/controls/toggle-filter.tsx +5 -4
  519. package/src/controls/uncontrolled.ts +12 -0
  520. package/src/controls/view-tabs.tsx +3 -3
  521. package/src/controls-dates/date-range-picker.tsx +1 -1
  522. package/src/controls-dates/index.ts +0 -1
  523. package/src/dashboard/index.ts +7 -48
  524. package/src/dashboard/section.tsx +11 -40
  525. package/src/dashboard/stat-card.tsx +14 -16
  526. package/src/dashboard/widget-header.module.css +9 -7
  527. package/src/dev-dock.tsx +14 -27
  528. package/src/format/date.ts +2 -92
  529. package/src/format/index.ts +7 -53
  530. package/src/format/number.ts +3 -26
  531. package/src/format/shared.ts +2 -3
  532. package/src/forms/index.ts +0 -23
  533. package/src/guard/index.ts +37 -192
  534. package/src/guard/types.ts +6 -19
  535. package/src/index.ts +30 -282
  536. package/src/provider/create-router.tsx +138 -0
  537. package/src/provider/hotkeys.ts +70 -0
  538. package/src/provider/index.tsx +260 -230
  539. package/src/provider/lab-theme.ts +3 -2
  540. package/src/provider/route-transition.ts +199 -0
  541. package/src/provider/spotlight-actions.tsx +69 -0
  542. package/src/provider/test-router.tsx +25 -0
  543. package/src/query-client.ts +4 -22
  544. package/src/router-tanstack/index.ts +18 -112
  545. package/src/router-tanstack/nav.ts +28 -2
  546. package/src/router-tanstack/search-store.ts +9 -2
  547. package/src/router-tanstack/use-nav.ts +47 -13
  548. package/src/shell/app-mobile-nav.tsx +3 -2
  549. package/src/shell/app-sidebar.tsx +1 -1
  550. package/src/shell/aside-docking.ts +1 -1
  551. package/src/shell/index.tsx +61 -20
  552. package/src/shell/page-aside.tsx +47 -23
  553. package/src/shell/page-bar.tsx +3 -3
  554. package/src/shell/page-title.tsx +1 -1
  555. package/src/state.ts +11 -37
  556. package/src/styles.css +107 -7
  557. package/src/surfaces.ts +56 -151
  558. package/src/{data → table}/data-table-state.ts +5 -4
  559. package/src/{data → table}/data-table.tsx +170 -161
  560. package/src/table/index.ts +18 -0
  561. package/src/table/table-features.ts +102 -0
  562. package/src/telemetry.ts +110 -0
  563. package/src/theme/index.ts +22 -47
  564. package/src/theme/theme-toggle.module.css +30 -0
  565. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  566. package/src/theme/theme-toggle.tsx +15 -43
  567. package/src/theme-lab/derive-controls.tsx +5 -3
  568. package/src/theme-lab/derive-state.ts +2 -1
  569. package/src/tokens/core.ts +1163 -0
  570. package/src/tokens/derive.ts +1 -1
  571. package/src/tokens/index.ts +14 -1181
  572. package/src/tokens/palette.ts +3 -7
  573. package/src/vite.ts +3 -3
  574. package/agent/templates/CLAUDE-block.md.tpl +0 -40
  575. package/agent/templates/query-client.ts.tpl +0 -26
  576. package/dist/agent/adapter.d.ts +0 -150
  577. package/dist/agent/adapter.d.ts.map +0 -1
  578. package/dist/agent/adapter.js +0 -482
  579. package/dist/agent/use-agent-stream.d.ts +0 -35
  580. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  581. package/dist/agent/use-agent-stream.js +0 -59
  582. package/dist/agent-chat/composer.d.ts.map +0 -1
  583. package/dist/agent-chat/index.d.ts +0 -31
  584. package/dist/agent-chat/index.d.ts.map +0 -1
  585. package/dist/agent-chat/index.js +0 -19
  586. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  587. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  589. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  590. package/dist/agent-chat/thread-detail-panel.js +0 -115
  591. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  592. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  593. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  594. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  595. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  596. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  597. package/dist/agent-chat/thread-workspace.js +0 -153
  598. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  599. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  600. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  601. package/dist/charts/cursor/resolve.d.ts +0 -75
  602. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  603. package/dist/charts/cursor/resolve.js +0 -91
  604. package/dist/charts/cursor/scope.d.ts +0 -20
  605. package/dist/charts/cursor/scope.d.ts.map +0 -1
  606. package/dist/charts/cursor/scope.js +0 -20
  607. package/dist/charts/cursor/store.d.ts +0 -35
  608. package/dist/charts/cursor/store.d.ts.map +0 -1
  609. package/dist/charts/cursor/store.js +0 -25
  610. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  611. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  612. package/dist/charts/cursor/touch-pin.js +0 -79
  613. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  614. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  616. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  617. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  618. package/dist/charts/hooks/use-hysteresis.js +0 -12
  619. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  620. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  621. package/dist/charts/hooks/useBandPlot.js +0 -178
  622. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  623. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  624. package/dist/charts/hooks/useChartCursor.js +0 -200
  625. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  626. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  627. package/dist/charts/hooks/useChartSize.js +0 -8
  628. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  629. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  630. package/dist/charts/kinds/BandStrip.js +0 -241
  631. package/dist/charts/kinds/Bars.d.ts +0 -141
  632. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  633. package/dist/charts/kinds/Bars.js +0 -343
  634. package/dist/charts/kinds/Donut.d.ts +0 -77
  635. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  636. package/dist/charts/kinds/Donut.js +0 -245
  637. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  638. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  639. package/dist/charts/kinds/DualPanel.js +0 -471
  640. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  641. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  642. package/dist/charts/kinds/Heatmap.js +0 -243
  643. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  644. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  645. package/dist/charts/kinds/MirroredBars.js +0 -292
  646. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  647. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  648. package/dist/charts/kinds/MultiLine.js +0 -176
  649. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  650. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  651. package/dist/charts/kinds/StackedArea.js +0 -135
  652. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  653. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  654. package/dist/charts/kinds/ZonedLine.js +0 -155
  655. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  656. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  657. package/dist/charts/kinds/band-chrome.js +0 -71
  658. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  659. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  660. package/dist/charts/kinds/donut-layout.js +0 -52
  661. package/dist/charts/layout/auto-margin.d.ts +0 -122
  662. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  663. package/dist/charts/layout/auto-margin.js +0 -81
  664. package/dist/charts/layout/end-labels.d.ts +0 -64
  665. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  666. package/dist/charts/layout/end-labels.js +0 -76
  667. package/dist/charts/layout/log-ticks.d.ts +0 -27
  668. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  669. package/dist/charts/layout/log-ticks.js +0 -42
  670. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  671. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  672. package/dist/charts/primitives/AreaGradient.js +0 -13
  673. package/dist/charts/primitives/Axes.d.ts +0 -83
  674. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  675. package/dist/charts/primitives/Axes.js +0 -168
  676. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  677. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  678. package/dist/charts/primitives/CartesianChart.js +0 -549
  679. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  680. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartCard.js +0 -143
  682. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  683. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartFrame.js +0 -241
  685. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  686. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  687. package/dist/charts/primitives/ChartLegend.js +0 -292
  688. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  689. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  690. package/dist/charts/primitives/ChartPending.js +0 -117
  691. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  692. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  693. package/dist/charts/primitives/ChartTooltip.js +0 -197
  694. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  695. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  696. package/dist/charts/primitives/Crosshair.js +0 -23
  697. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  698. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  699. package/dist/charts/primitives/HatchPattern.js +0 -31
  700. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  701. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  702. package/dist/charts/primitives/HoverOverlay.js +0 -72
  703. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  704. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  705. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  706. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  707. package/dist/charts/primitives/XZoneRects.js +0 -65
  708. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  709. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  710. package/dist/charts/primitives/ZoneRects.js +0 -30
  711. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  712. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-card-context.js +0 -18
  714. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  715. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  716. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  717. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  718. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  719. package/dist/charts/primitives/chart-layout.js +0 -175
  720. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  721. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  722. package/dist/charts/primitives/chart-tier.js +0 -44
  723. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  724. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  725. package/dist/charts/primitives/legend-disclosure.js +0 -153
  726. package/dist/charts/series.d.ts +0 -189
  727. package/dist/charts/series.d.ts.map +0 -1
  728. package/dist/charts/series.js +0 -84
  729. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  730. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  731. package/dist/charts/sparklines/BarSparkline.js +0 -53
  732. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  733. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  734. package/dist/charts/sparklines/LineSparkline.js +0 -51
  735. package/dist/charts/sparklines/index.d.ts +0 -3
  736. package/dist/charts/sparklines/index.d.ts.map +0 -1
  737. package/dist/charts/sparklines/index.js +0 -6
  738. package/dist/charts/utils/domain.d.ts +0 -35
  739. package/dist/charts/utils/domain.d.ts.map +0 -1
  740. package/dist/charts/utils/domain.js +0 -12
  741. package/dist/charts/utils/format.d.ts +0 -8
  742. package/dist/charts/utils/format.d.ts.map +0 -1
  743. package/dist/charts/utils/format.js +0 -20
  744. package/dist/charts/utils/measure-text.d.ts +0 -25
  745. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  746. package/dist/charts/utils/measure-text.js +0 -64
  747. package/dist/charts/utils/ticks.d.ts +0 -103
  748. package/dist/charts/utils/ticks.d.ts.map +0 -1
  749. package/dist/charts/utils/ticks.js +0 -92
  750. package/dist/commands/overlays-mount.d.ts +0 -122
  751. package/dist/commands/overlays-mount.d.ts.map +0 -1
  752. package/dist/commands/overlays-mount.js +0 -125
  753. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  754. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  755. package/dist/commands/useCommandHotkeys.js +0 -45
  756. package/dist/content/article-actions.d.ts +0 -39
  757. package/dist/content/article-actions.d.ts.map +0 -1
  758. package/dist/content/article-actions.js +0 -28
  759. package/dist/content/article-card.d.ts +0 -58
  760. package/dist/content/article-card.d.ts.map +0 -1
  761. package/dist/content/article-card.js +0 -79
  762. package/dist/content/article-card.module.css +0 -111
  763. package/dist/content/mdx.d.ts +0 -20
  764. package/dist/content/mdx.d.ts.map +0 -1
  765. package/dist/content/mdx.js +0 -64
  766. package/dist/controls/compare-filter.d.ts +0 -42
  767. package/dist/controls/compare-filter.d.ts.map +0 -1
  768. package/dist/controls/compare-filter.js +0 -38
  769. package/dist/controls/slider-control.d.ts +0 -36
  770. package/dist/controls/slider-control.d.ts.map +0 -1
  771. package/dist/controls/slider-control.js +0 -64
  772. package/dist/dashboard/widget-grid.d.ts +0 -27
  773. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  774. package/dist/dashboard/widget-grid.js +0 -40
  775. package/dist/dashboard/widget-grid.module.css +0 -69
  776. package/dist/data/data-table-state.d.ts.map +0 -1
  777. package/dist/data/data-table.d.ts.map +0 -1
  778. package/dist/data/query-branch.d.ts.map +0 -1
  779. package/dist/data/table.d.ts +0 -24
  780. package/dist/data/table.d.ts.map +0 -1
  781. package/dist/data/virtual-list.d.ts +0 -133
  782. package/dist/data/virtual-list.d.ts.map +0 -1
  783. package/dist/data/virtual-list.js +0 -157
  784. package/dist/data/virtual.d.ts +0 -21
  785. package/dist/data/virtual.d.ts.map +0 -1
  786. package/dist/data/virtual.js +0 -4
  787. package/dist/forms/FormErrorSummary.d.ts +0 -30
  788. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  789. package/dist/forms/FormErrorSummary.js +0 -30
  790. package/dist/forms/use-field-array.d.ts +0 -60
  791. package/dist/forms/use-field-array.d.ts.map +0 -1
  792. package/dist/forms/use-field-array.js +0 -20
  793. package/dist/forms/use-form-draft.d.ts +0 -76
  794. package/dist/forms/use-form-draft.d.ts.map +0 -1
  795. package/dist/forms/use-form-draft.js +0 -92
  796. package/dist/forms/use-form-submit.d.ts +0 -88
  797. package/dist/forms/use-form-submit.d.ts.map +0 -1
  798. package/dist/forms/use-form-submit.js +0 -63
  799. package/dist/notifications/bell.d.ts.map +0 -1
  800. package/dist/notifications/center.d.ts.map +0 -1
  801. package/dist/notifications/define-notifications.d.ts.map +0 -1
  802. package/dist/notifications/index.d.ts +0 -40
  803. package/dist/notifications/index.d.ts.map +0 -1
  804. package/dist/notifications/index.js +0 -54
  805. package/dist/notifications/mount-guard.d.ts +0 -8
  806. package/dist/notifications/mount-guard.d.ts.map +0 -1
  807. package/dist/notifications/mount-guard.js +0 -18
  808. package/dist/notifications/notify.d.ts +0 -149
  809. package/dist/notifications/notify.d.ts.map +0 -1
  810. package/dist/notifications/notify.js +0 -171
  811. package/dist/notifications/store.d.ts.map +0 -1
  812. package/dist/provider/connectivity-indicator.d.ts +0 -13
  813. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  814. package/dist/provider/connectivity-indicator.js +0 -205
  815. package/dist/provider/connectivity-provider.d.ts +0 -7
  816. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  817. package/dist/provider/connectivity-provider.js +0 -128
  818. package/dist/provider/connectivity-types.d.ts +0 -36
  819. package/dist/provider/connectivity-types.d.ts.map +0 -1
  820. package/dist/provider/use-connectivity.d.ts +0 -3
  821. package/dist/provider/use-connectivity.d.ts.map +0 -1
  822. package/dist/provider/use-connectivity.js +0 -14
  823. package/dist/query-devtools.d.ts +0 -21
  824. package/dist/query-devtools.d.ts.map +0 -1
  825. package/dist/query-devtools.js +0 -13
  826. package/src/agent/adapter.ts +0 -945
  827. package/src/agent/use-agent-stream.ts +0 -154
  828. package/src/agent-chat/index.ts +0 -54
  829. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  830. package/src/agent-chat/thread-workspace.tsx +0 -279
  831. package/src/charts/cursor/resolve.ts +0 -198
  832. package/src/charts/cursor/scope.tsx +0 -35
  833. package/src/charts/cursor/store.ts +0 -58
  834. package/src/charts/cursor/touch-pin.ts +0 -138
  835. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  836. package/src/charts/hooks/use-hysteresis.ts +0 -26
  837. package/src/charts/hooks/useBandPlot.ts +0 -383
  838. package/src/charts/hooks/useChartCursor.ts +0 -367
  839. package/src/charts/hooks/useChartSize.ts +0 -35
  840. package/src/charts/kinds/BandStrip.tsx +0 -449
  841. package/src/charts/kinds/Bars.tsx +0 -589
  842. package/src/charts/kinds/Donut.tsx +0 -368
  843. package/src/charts/kinds/DualPanel.tsx +0 -712
  844. package/src/charts/kinds/Heatmap.tsx +0 -396
  845. package/src/charts/kinds/MirroredBars.tsx +0 -469
  846. package/src/charts/kinds/MultiLine.tsx +0 -322
  847. package/src/charts/kinds/StackedArea.tsx +0 -267
  848. package/src/charts/kinds/ZonedLine.tsx +0 -301
  849. package/src/charts/kinds/band-chrome.tsx +0 -91
  850. package/src/charts/kinds/donut-layout.ts +0 -82
  851. package/src/charts/layout/auto-margin.ts +0 -242
  852. package/src/charts/layout/end-labels.ts +0 -135
  853. package/src/charts/layout/log-ticks.ts +0 -90
  854. package/src/charts/primitives/AreaGradient.tsx +0 -26
  855. package/src/charts/primitives/Axes.tsx +0 -271
  856. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  857. package/src/charts/primitives/ChartCard.tsx +0 -280
  858. package/src/charts/primitives/ChartFrame.tsx +0 -493
  859. package/src/charts/primitives/ChartLegend.tsx +0 -422
  860. package/src/charts/primitives/ChartPending.tsx +0 -243
  861. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  862. package/src/charts/primitives/Crosshair.tsx +0 -43
  863. package/src/charts/primitives/HatchPattern.tsx +0 -55
  864. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  865. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  866. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  867. package/src/charts/primitives/XZoneRects.tsx +0 -132
  868. package/src/charts/primitives/ZoneRects.tsx +0 -67
  869. package/src/charts/primitives/chart-card-context.ts +0 -46
  870. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  871. package/src/charts/primitives/chart-layout.ts +0 -318
  872. package/src/charts/primitives/chart-tier.tsx +0 -76
  873. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  874. package/src/charts/series.ts +0 -276
  875. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  876. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  877. package/src/charts/sparklines/index.ts +0 -2
  878. package/src/charts/theme.tsx +0 -53
  879. package/src/charts/utils/domain.ts +0 -41
  880. package/src/charts/utils/format.ts +0 -19
  881. package/src/charts/utils/measure-text.ts +0 -109
  882. package/src/charts/utils/ticks.ts +0 -239
  883. package/src/commands/overlays-mount.tsx +0 -333
  884. package/src/commands/useCommandHotkeys.ts +0 -114
  885. package/src/content/article-actions.ts +0 -72
  886. package/src/content/article-card.module.css +0 -111
  887. package/src/content/article-card.tsx +0 -174
  888. package/src/content/mdx.tsx +0 -127
  889. package/src/controls/compare-filter.tsx +0 -81
  890. package/src/controls/slider-control.tsx +0 -159
  891. package/src/dashboard/widget-grid.module.css +0 -69
  892. package/src/dashboard/widget-grid.tsx +0 -146
  893. package/src/data/table.ts +0 -39
  894. package/src/data/virtual-list.tsx +0 -356
  895. package/src/data/virtual.ts +0 -26
  896. package/src/forms/FormErrorSummary.tsx +0 -71
  897. package/src/forms/use-field-array.ts +0 -94
  898. package/src/forms/use-form-draft.ts +0 -262
  899. package/src/forms/use-form-submit.ts +0 -199
  900. package/src/notifications/index.ts +0 -88
  901. package/src/notifications/mount-guard.ts +0 -38
  902. package/src/notifications/notify.tsx +0 -379
  903. package/src/provider/connectivity-indicator.tsx +0 -267
  904. package/src/provider/connectivity-provider.tsx +0 -189
  905. package/src/provider/connectivity-types.ts +0 -42
  906. package/src/provider/use-connectivity.ts +0 -26
  907. package/src/query-devtools.tsx +0 -40
  908. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  909. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  910. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  911. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  912. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  913. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  914. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  915. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  916. /package/dist/{data → table}/data-table.module.css +0 -0
  917. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  918. /package/dist/{data → table}/query-branch.d.ts +0 -0
  919. /package/dist/{data → table}/query-branch.js +0 -0
  920. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  921. /package/src/{data → table}/data-table.module.css +0 -0
  922. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  923. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,8 +1,22 @@
1
- import { useCallback, useEffect, useRef, useState } from "react";
1
+ import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
2
+ import { toAgentError } from "./error.js";
2
3
  import { mintMessageId, mintThreadId, withPartIds } from "./id.js";
3
4
  import { mergePart } from "./merge.js";
4
5
  import { isStartPart } from "./parts.js";
6
+ import { createRunCommitter, isContentPart } from "./run-committer.js";
7
+ import {
8
+ beginRun,
9
+ endRun,
10
+ failedThreadIds,
11
+ dismissRun,
12
+ hasLiveRun,
13
+ isLatestRun,
14
+ isLive,
15
+ planStopWithTombstone,
16
+ sweepFlushed
17
+ } from "./run-records.js";
5
18
  import { isResumable } from "./transport.js";
19
+ import { TelemetryContext, createEmitter, errorName, now } from "../telemetry.js";
6
20
  function defaultToUserParts(input) {
7
21
  return [{ id: mintThreadId(), type: "text", text: input }];
8
22
  }
@@ -29,36 +43,47 @@ function buildDoneSnapshot(priorThread, threadId, userMessage, assistantMessage)
29
43
  async function consumeAndFinalize(args) {
30
44
  const {
31
45
  threadId,
32
- controller,
46
+ record,
33
47
  generator,
34
48
  userMessage,
35
- controllersRef,
36
- appendedRef,
49
+ recordsRef,
37
50
  storeRef,
38
51
  resolveOutcome,
39
52
  setRuns,
40
53
  onFailureStatus,
54
+ throttle,
55
+ emit,
41
56
  onError
42
57
  } = args;
58
+ const { controller } = record;
59
+ const live = () => isLive(recordsRef.current, threadId, controller);
60
+ const owns = () => isLatestRun(record);
43
61
  let parts = [];
62
+ const startedAt = now();
63
+ let firstContentAt;
64
+ const committer = createRunCommitter(throttle, (committed, status) => {
65
+ if (!live()) return;
66
+ setRuns((prev) => {
67
+ const next = new Map(prev);
68
+ next.set(threadId, { status, parts: committed });
69
+ return next;
70
+ });
71
+ });
44
72
  try {
45
73
  for await (const part of generator) {
46
- if (controllersRef.current.get(threadId) !== controller) return;
47
- if (controller.signal.aborted) return;
74
+ if (!live()) return;
48
75
  if (isStartPart(part)) {
49
76
  storeRef.current.setResumeToken(threadId, part.resumeToken);
50
77
  continue;
51
78
  }
52
79
  parts = mergePart(parts, part);
53
- setRuns((prev) => {
54
- const next = new Map(prev);
55
- next.set(threadId, { status: "streaming", parts });
56
- return next;
57
- });
58
- }
59
- if (controllersRef.current.get(threadId) !== controller || controller.signal.aborted) {
60
- return;
80
+ record.parts = parts;
81
+ const firstContent = firstContentAt === void 0 && isContentPart(part);
82
+ if (firstContent) firstContentAt = now();
83
+ committer.push(parts, firstContentAt === void 0 ? "submitted" : "streaming", firstContent);
61
84
  }
85
+ committer.flush();
86
+ if (!live()) return;
62
87
  const assistantMessage = {
63
88
  // appendMessage's idempotency key — mintMessageId, never mintThreadId (see that helper's
64
89
  // doc): a collided id here would silently drop this message, not merge a duplicate thread.
@@ -69,42 +94,83 @@ async function consumeAndFinalize(args) {
69
94
  finish: "complete"
70
95
  };
71
96
  storeRef.current.appendMessage(threadId, assistantMessage);
72
- appendedRef.current.set(threadId, controller);
97
+ record.appended = true;
73
98
  const priorThread = storeRef.current.threads.find((thread) => thread.id === threadId);
74
99
  const snapshot = buildDoneSnapshot(priorThread, threadId, userMessage, assistantMessage);
75
- const outcome = await resolveOutcome(snapshot);
76
- if (controllersRef.current.get(threadId) !== controller || controller.signal.aborted) {
100
+ record.resolving = true;
101
+ let outcome;
102
+ try {
103
+ outcome = await resolveOutcome(snapshot);
104
+ } finally {
105
+ record.resolving = false;
106
+ }
107
+ if (!live()) {
108
+ if (record.ended === "stopped" && record.appended && owns()) {
109
+ storeRef.current.setOutcome(threadId, outcome);
110
+ }
77
111
  return;
78
112
  }
79
113
  storeRef.current.setOutcome(threadId, outcome);
80
114
  storeRef.current.setStatus(threadId, outcome.status);
81
115
  storeRef.current.setResumeToken(threadId, void 0);
82
- controllersRef.current.delete(threadId);
83
- appendedRef.current.delete(threadId);
116
+ endRun(record, "settled");
84
117
  setRuns((prev) => {
85
118
  if (!prev.has(threadId)) return prev;
86
119
  const next = new Map(prev);
87
120
  next.delete(threadId);
88
121
  return next;
89
122
  });
123
+ emit(
124
+ buildTurnEvent({
125
+ threadId,
126
+ startedAt,
127
+ firstContentAt,
128
+ partCount: parts.length,
129
+ status: outcome.status
130
+ })
131
+ );
90
132
  } catch (err) {
91
- if (err instanceof Error && err.name === "AbortError") return;
92
- if (controllersRef.current.get(threadId) !== controller) return;
93
- if (controller.signal.aborted) return;
133
+ if (!live()) {
134
+ if (record.ended === "stopped" && record.appended) onError?.({ threadId, error: err });
135
+ return;
136
+ }
137
+ const agentError = toAgentError(err);
138
+ const messageLanded = record.appended;
139
+ endRun(record, "failed");
94
140
  storeRef.current.setStatus(threadId, onFailureStatus);
95
- controllersRef.current.delete(threadId);
96
- appendedRef.current.delete(threadId);
141
+ const failedParts = messageLanded ? [] : parts;
97
142
  setRuns((prev) => {
98
- if (!prev.has(threadId)) return prev;
99
143
  const next = new Map(prev);
100
- next.delete(threadId);
144
+ next.set(threadId, { status: "error", parts: failedParts, error: agentError });
101
145
  return next;
102
146
  });
147
+ emit(
148
+ buildTurnEvent({
149
+ threadId,
150
+ startedAt,
151
+ firstContentAt,
152
+ partCount: parts.length,
153
+ status: onFailureStatus,
154
+ failure: { error: err, agentError }
155
+ })
156
+ );
103
157
  onError?.({ threadId, error: err });
158
+ } finally {
159
+ committer.cancel();
104
160
  }
105
161
  }
106
162
  async function finalizeStop(args) {
107
- const { threadId, parts, alreadyAppended, storeRef, resolveOutcome, setRuns } = args;
163
+ const {
164
+ threadId,
165
+ parts,
166
+ alreadyAppended,
167
+ outcomeInFlight,
168
+ record,
169
+ onError,
170
+ storeRef,
171
+ resolveOutcome,
172
+ setRuns
173
+ } = args;
108
174
  let appendFailed = false;
109
175
  if (!alreadyAppended && parts.length > 0) {
110
176
  try {
@@ -141,26 +207,64 @@ async function finalizeStop(args) {
141
207
  next.delete(threadId);
142
208
  return next;
143
209
  });
144
- if (settleFailed) return;
210
+ if (settleFailed || outcomeInFlight) return;
145
211
  const snapshot = storeRef.current.threads.find((thread) => thread.id === threadId);
146
212
  if (snapshot === void 0) return;
147
- const outcome = await resolveOutcome(snapshot);
148
- storeRef.current.setOutcome(threadId, outcome);
213
+ record.resolving = true;
214
+ try {
215
+ const outcome = await resolveOutcome(snapshot);
216
+ if (isLatestRun(record)) storeRef.current.setOutcome(threadId, outcome);
217
+ } catch (error) {
218
+ onError?.({ threadId, error });
219
+ } finally {
220
+ record.resolving = false;
221
+ }
222
+ }
223
+ function buildTurnEvent(args) {
224
+ const { threadId, startedAt, firstContentAt, partCount, status, failure } = args;
225
+ const endedAt = now();
226
+ const base = {
227
+ start: startedAt,
228
+ duration: endedAt - startedAt
229
+ };
230
+ const attributes = {
231
+ "basalt.chat.thread_id": threadId,
232
+ "basalt.chat.ttft_ms": (firstContentAt ?? endedAt) - startedAt,
233
+ "basalt.chat.parts": partCount,
234
+ "basalt.chat.status": status
235
+ };
236
+ if (failure === void 0) return { ...base, type: "chat.turn", failed: false, attributes };
237
+ return {
238
+ ...base,
239
+ type: "chat.turn",
240
+ failed: true,
241
+ attributes: {
242
+ ...attributes,
243
+ "exception.type": errorName(failure.error),
244
+ "basalt.error.kind": failure.agentError.kind
245
+ }
246
+ };
149
247
  }
150
248
  function useAgentThreadRuns({
151
249
  transport,
152
250
  store,
153
251
  resolveOutcome,
154
252
  toUserParts,
155
- onError
253
+ onError,
254
+ throttle = 100,
255
+ telemetry
156
256
  }) {
157
257
  const [runs, setRuns] = useState(/* @__PURE__ */ new Map());
158
258
  const runsRef = useRef(runs);
159
259
  runsRef.current = runs;
160
260
  const onErrorRef = useRef(onError);
161
261
  onErrorRef.current = onError;
162
- const controllersRef = useRef(/* @__PURE__ */ new Map());
163
- const appendedRef = useRef(/* @__PURE__ */ new Map());
262
+ const providerSink = useContext(TelemetryContext);
263
+ const telemetryRef = useRef(telemetry ?? providerSink);
264
+ telemetryRef.current = telemetry ?? providerSink;
265
+ const throttleRef = useRef(throttle);
266
+ throttleRef.current = throttle;
267
+ const recordsRef = useRef(/* @__PURE__ */ new Map());
164
268
  const lastInputRef = useRef(/* @__PURE__ */ new Map());
165
269
  const storeRef = useRef(store);
166
270
  storeRef.current = store;
@@ -170,6 +274,10 @@ function useAgentThreadRuns({
170
274
  const resolvedToUserParts = toUserParts ?? defaultToUserParts;
171
275
  const toUserPartsRef = useRef(resolvedToUserParts);
172
276
  toUserPartsRef.current = resolvedToUserParts;
277
+ const emitTelemetry = useMemo(
278
+ () => createEmitter((event) => telemetryRef.current?.(event)),
279
+ []
280
+ );
173
281
  const resolveTransport = (threadId) => {
174
282
  const currentTransport = transportRef.current;
175
283
  if (typeof currentTransport !== "function") return currentTransport;
@@ -181,10 +289,13 @@ function useAgentThreadRuns({
181
289
  };
182
290
  useEffect(
183
291
  () => () => {
184
- const abortedThreadIds = Array.from(controllersRef.current.keys());
185
- controllersRef.current.forEach((controller) => controller.abort());
186
- controllersRef.current.clear();
187
- appendedRef.current.clear();
292
+ const abortedThreadIds = [];
293
+ for (const [threadId, record] of recordsRef.current) {
294
+ if (record.ended !== void 0) continue;
295
+ abortedThreadIds.push(threadId);
296
+ record.controller.abort();
297
+ }
298
+ recordsRef.current.clear();
188
299
  if (abortedThreadIds.length === 0) return;
189
300
  setRuns((prev) => {
190
301
  let next;
@@ -198,10 +309,13 @@ function useAgentThreadRuns({
198
309
  },
199
310
  []
200
311
  );
312
+ useEffect(() => {
313
+ sweepFlushed(recordsRef.current, runs);
314
+ });
201
315
  useEffect(() => {
202
316
  if (!store.hydrated) return;
203
317
  for (const thread of storeRef.current.threads) {
204
- const orphaned = (thread.status === "pending" || thread.status === "streaming") && !controllersRef.current.has(thread.id);
318
+ const orphaned = (thread.status === "pending" || thread.status === "streaming") && !hasLiveRun(recordsRef.current, thread.id);
205
319
  if (!orphaned) continue;
206
320
  const resumeToken = thread.resumeToken;
207
321
  const lastUserMessage = thread.messages.filter((message) => message.role === "user").at(-1);
@@ -212,15 +326,15 @@ function useAgentThreadRuns({
212
326
  }
213
327
  const resume = resolvedTransport.resume;
214
328
  const controller = new AbortController();
215
- controllersRef.current.set(thread.id, controller);
329
+ const record = beginRun(recordsRef.current, thread.id, controller);
216
330
  setRuns((prev) => {
217
331
  const next = new Map(prev);
218
- next.set(thread.id, { status: "streaming", parts: [] });
332
+ next.set(thread.id, { status: "submitted", parts: [] });
219
333
  return next;
220
334
  });
221
335
  void consumeAndFinalize({
222
336
  threadId: thread.id,
223
- controller,
337
+ record,
224
338
  // Namespaced by thread.id (stable across a thread's whole lifetime, including this
225
339
  // resume) rather than per-call — see withPartIds' own doc for why this is NOT a replay-
226
340
  // convergence guarantee on its own: it only protects against two id-less drafts within
@@ -230,19 +344,20 @@ function useAgentThreadRuns({
230
344
  // providing that safety.
231
345
  generator: withPartIds(thread.id, resume(resumeToken, controller.signal)),
232
346
  userMessage: lastUserMessage,
233
- controllersRef,
234
- appendedRef,
347
+ recordsRef,
235
348
  storeRef,
236
349
  resolveOutcome,
237
350
  setRuns,
238
351
  onFailureStatus: "interrupted",
352
+ throttle: throttleRef.current,
353
+ emit: emitTelemetry,
239
354
  onError: (info) => onErrorRef.current?.(info)
240
355
  });
241
356
  }
242
357
  }, [store.hydrated]);
243
358
  const start = useCallback(
244
359
  (threadId, input) => {
245
- if (controllersRef.current.has(threadId)) return;
360
+ if (hasLiveRun(recordsRef.current, threadId)) return;
246
361
  lastInputRef.current.set(threadId, input);
247
362
  const userMessage = {
248
363
  // Same idempotency-key reasoning as consumeAndFinalize's assistantMessage — mintMessageId.
@@ -255,15 +370,15 @@ function useAgentThreadRuns({
255
370
  storeRef.current.setStatus(threadId, "streaming");
256
371
  setRuns((prev) => {
257
372
  const next = new Map(prev);
258
- next.set(threadId, { status: "streaming", parts: [] });
373
+ next.set(threadId, { status: "submitted", parts: [] });
259
374
  return next;
260
375
  });
261
376
  const controller = new AbortController();
262
- controllersRef.current.set(threadId, controller);
377
+ const record = beginRun(recordsRef.current, threadId, controller);
263
378
  const resolvedTransport = resolveTransport(threadId);
264
379
  void consumeAndFinalize({
265
380
  threadId,
266
- controller,
381
+ record,
267
382
  // Namespaced by threadId — same choice, same caveat, as the mount-time resume call above.
268
383
  // ctx.messageId is this turn's OWN idempotency key (userMessage.id, just minted above) —
269
384
  // a transport that accepts it (aiSdkTransport) mints its wire-level message with the SAME
@@ -273,16 +388,17 @@ function useAgentThreadRuns({
273
388
  resolvedTransport.stream(input, controller.signal, { messageId: userMessage.id })
274
389
  ),
275
390
  userMessage,
276
- controllersRef,
277
- appendedRef,
391
+ recordsRef,
278
392
  storeRef,
279
393
  resolveOutcome,
280
394
  setRuns,
281
395
  onFailureStatus: "error",
396
+ throttle: throttleRef.current,
397
+ emit: emitTelemetry,
282
398
  onError: (info) => onErrorRef.current?.(info)
283
399
  });
284
400
  },
285
- [resolveOutcome]
401
+ [emitTelemetry, resolveOutcome]
286
402
  );
287
403
  const retry = useCallback(
288
404
  (threadId) => {
@@ -292,30 +408,50 @@ function useAgentThreadRuns({
292
408
  },
293
409
  [start]
294
410
  );
411
+ const dismiss = useCallback((threadId) => {
412
+ dismissRun(recordsRef.current, threadId);
413
+ setRuns((prev) => {
414
+ if (!prev.has(threadId)) return prev;
415
+ const next = new Map(prev);
416
+ next.delete(threadId);
417
+ return next;
418
+ });
419
+ }, []);
295
420
  const stop = useCallback(
296
421
  (threadId) => {
297
- const controller = controllersRef.current.get(threadId);
298
- if (controller === void 0) {
299
- if (!runsRef.current.has(threadId)) return;
300
- const parts2 = runsRef.current.get(threadId)?.parts ?? [];
301
- const alreadyAppended2 = appendedRef.current.has(threadId);
302
- appendedRef.current.delete(threadId);
303
- void finalizeStop({ threadId, parts: parts2, alreadyAppended: alreadyAppended2, storeRef, resolveOutcome, setRuns });
422
+ const plan = planStopWithTombstone(
423
+ recordsRef.current,
424
+ threadId,
425
+ runsRef.current.get(threadId)
426
+ );
427
+ if (plan.kind === "noop") return;
428
+ if (plan.kind === "dismiss") {
429
+ dismiss(threadId);
304
430
  return;
305
431
  }
306
- controllersRef.current.delete(threadId);
307
- const parts = runsRef.current.get(threadId)?.parts ?? [];
308
- controller.abort();
309
- const alreadyAppended = appendedRef.current.get(threadId) === controller;
310
- appendedRef.current.delete(threadId);
311
- void finalizeStop({ threadId, parts, alreadyAppended, storeRef, resolveOutcome, setRuns });
432
+ const { record, parts } = plan;
433
+ const { appended, resolving } = record;
434
+ endRun(record, "stopped");
435
+ record.controller.abort();
436
+ void finalizeStop({
437
+ threadId,
438
+ parts,
439
+ alreadyAppended: appended,
440
+ outcomeInFlight: resolving,
441
+ record,
442
+ storeRef,
443
+ resolveOutcome,
444
+ setRuns,
445
+ onError: (info) => onErrorRef.current?.(info)
446
+ });
312
447
  },
313
- [resolveOutcome]
448
+ [dismiss, resolveOutcome]
314
449
  );
315
450
  const stopAll = useCallback(() => {
316
- for (const threadId of Array.from(controllersRef.current.keys())) {
317
- stop(threadId);
451
+ for (const [threadId, record] of Array.from(recordsRef.current)) {
452
+ if (record.ended === void 0) stop(threadId);
318
453
  }
454
+ for (const threadId of failedThreadIds(recordsRef.current, runsRef.current)) stop(threadId);
319
455
  }, [stop]);
320
456
  return { runs, start, retry, stop, stopAll };
321
457
  }
@@ -0,0 +1,46 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { CartesianChartProps, ChartSeries, ChartX } from './types.js';
3
+ /** A state a strip can draw. A band has no number to plot, so `formatValue` reads the datum. */
4
+ export type BandStripSeries<T> = Pick<ChartSeries<T>, 'key' | 'label' | 'color' | 'tooltip' | 'legend' | 'note' | 'fillOpacity'> & {
5
+ /**
6
+ * The tooltip row's value for a band in this state. `null` is an ABSENT reading and renders an
7
+ * em dash; omit the function when the state's name is the whole reading ("Not measured").
8
+ */
9
+ formatValue?: (d: T) => string | null;
10
+ };
11
+ /** One band: its state, and the two ways to qualify it. */
12
+ export type BandSpan = {
13
+ /** A `states` key: the band's legend entry, fill and tooltip row. */
14
+ state: string;
15
+ /** Overrides the state's fill — an intensity ramp WITHIN a state. `alpha(VX.*, …)`, never a hex. */
16
+ fill?: string;
17
+ /**
18
+ * A shorter, inset bar over the band, for a fact that must not be read off the fill ramp (a
19
+ * renegotiation, a restart). Its color is a `states` entry, so the legend names it.
20
+ */
21
+ marker?: {
22
+ /** Defaults to the band's own `state`. */
23
+ state?: string;
24
+ /** Vertical inset from the band's top and bottom, in px. Default 6. */
25
+ inset?: number;
26
+ };
27
+ };
28
+ /** Collapse adjacent data where one band per datum would be thinner than `minBandPx`. */
29
+ export type BandFold<T> = {
30
+ /** Floor on a drawn band's px width. Default 3. */
31
+ minBandPx?: number;
32
+ /**
33
+ * The consumer's merge of a group of adjacent data into the datum drawn in its place — whether
34
+ * that is a max, a sum or a recomputed rate is a question about the measurement. Keep the first
35
+ * datum's `x`, or the cursor key stops naming a real slot.
36
+ */
37
+ merge: (group: T[]) => T;
38
+ };
39
+ export type BandStripProps<T, X extends ChartX = ChartX> = Omit<CartesianChartProps<T, X>, 'marks' | 'series' | 'y' | 'y2' | 'zones' | 'xZones' | 'refLines'> & {
40
+ states: readonly BandStripSeries<T>[];
41
+ /** Which state, fill and marker each datum has. Memoize it: a new function recompiles the chart. */
42
+ getBand: (d: T) => BandSpan;
43
+ fold?: BandFold<T>;
44
+ };
45
+ export declare function BandStrip<T, X extends ChartX = ChartX>(props: BandStripProps<T, X>): ReactElement;
46
+ //# sourceMappingURL=BandStrip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BandStrip.d.ts","sourceRoot":"","sources":["../../src/charts/BandStrip.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAOzC,OAAO,KAAK,EAEV,mBAAmB,EAEnB,WAAW,EACX,MAAM,EAGP,MAAM,SAAS,CAAA;AAEhB,gGAAgG;AAChG,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,IAAI,CACnC,WAAW,CAAC,CAAC,CAAC,EACd,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAC1E,GAAG;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAA;CACtC,CAAA;AAED,2DAA2D;AAC3D,MAAM,MAAM,QAAQ,GAAG;IACrB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,0CAA0C;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,uEAAuE;QACvE,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF,CAAA;AAED,yFAAyF;AACzF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAC7D,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAClE,GAAG;IACF,MAAM,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAA;IACrC,oGAAoG;IACpG,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAA;IAC3B,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;CACnB,CAAA;AAuHD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CA0EjG"}
@@ -0,0 +1,151 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { barY } from "@tanstack/charts/bar";
3
+ import { decorative } from "@tanstack/charts/mark/decorative";
4
+ import { rect } from "@tanstack/charts/rect";
5
+ import { useCallback, useMemo } from "react";
6
+ import { oneOf } from "../common/errors.js";
7
+ import { NON_FINITE } from "../format/shared.js";
8
+ import { VX, alpha } from "../tokens/index.js";
9
+ import { CartesianRung } from "./CartesianChart.js";
10
+ import { emphasis } from "./marks.js";
11
+ import { rowX } from "./types.js";
12
+ const DEFAULT_MIN_BAND_PX = 3;
13
+ const DEFAULT_MARKER_INSET = 6;
14
+ const STRIP_AXIS = {
15
+ domain: [0, 1],
16
+ ticks: [],
17
+ grid: false
18
+ };
19
+ const ZX_ANCHOR = [{ fill: "transparent" }];
20
+ const UNKNOWN_FILL = alpha(VX.neutral, 0.2);
21
+ function groupsOf(data, cap) {
22
+ const size = Math.max(1, Math.ceil(data.length / Math.max(cap, 1)));
23
+ const out = [];
24
+ data.forEach((d, i) => {
25
+ const last = out.at(-1);
26
+ if (last && last.items.length < size) last.items.push(d);
27
+ else out.push({ start: i, items: [d] });
28
+ });
29
+ return out;
30
+ }
31
+ function paintInto(layers, fill, opacity, cell) {
32
+ const key = `${fill}|${opacity}`;
33
+ const layer = layers.get(key);
34
+ if (layer) layer.cells.push(cell);
35
+ else layers.set(key, { fill, opacity, cells: [cell] });
36
+ }
37
+ const unknownState = (prop, got, known) => new Error(oneOf("BandStrip", prop, [...known], got));
38
+ function layoutBands(input) {
39
+ const { data, getBand, fold, states, visible } = input;
40
+ const cap = Math.floor(input.width / (fold?.minBandPx ?? DEFAULT_MIN_BAND_PX));
41
+ const groups = fold && data.length > cap ? groupsOf(data, cap) : data.map((d, start) => ({ start, items: [d] }));
42
+ const base = /* @__PURE__ */ new Map();
43
+ const markers = /* @__PURE__ */ new Map();
44
+ const hits = [];
45
+ for (const g of groups) {
46
+ const datum = fold && g.items.length > 1 ? fold.merge(g.items) : g.items[0];
47
+ if (datum === void 0) continue;
48
+ const span = getBand(datum);
49
+ const state = states.get(span.state);
50
+ if (!state && process.env.NODE_ENV !== "production")
51
+ throw unknownState("BandSpan.state", span.state, states.keys());
52
+ if (state && !visible.has(span.state)) continue;
53
+ const cell = { f0: g.start / data.length, f1: (g.start + g.items.length) / data.length };
54
+ const opacity = input.emphasis(span.state);
55
+ paintInto(
56
+ base,
57
+ span.fill ?? (state ? alpha(state.color, state.fillOpacity ?? 1) : UNKNOWN_FILL),
58
+ opacity,
59
+ { ...cell, y0: 0, y1: 1 }
60
+ );
61
+ if (span.marker) {
62
+ const markerKey = span.marker.state ?? span.state;
63
+ const markerState = states.get(markerKey);
64
+ if (!markerState && process.env.NODE_ENV !== "production")
65
+ throw unknownState("BandSpan.marker.state", markerKey, states.keys());
66
+ if (!markerState || visible.has(markerKey)) {
67
+ const inset = (span.marker.inset ?? DEFAULT_MARKER_INSET) / Math.max(input.height, 1);
68
+ paintInto(markers, markerState?.color ?? UNKNOWN_FILL, input.emphasis(markerKey), {
69
+ ...cell,
70
+ y0: inset,
71
+ y1: 1 - inset
72
+ });
73
+ }
74
+ }
75
+ if (state) for (const source of g.items) hits.push({ source, state: span.state, datum });
76
+ }
77
+ return { base: [...base.values()], markers: [...markers.values()], hits };
78
+ }
79
+ function BandStrip(props) {
80
+ const { states, getBand, fold, cursorResolution = "leading", tooltip, ...rest } = props;
81
+ const { data, x } = rest;
82
+ const series = useMemo(
83
+ () => states.map((s) => ({
84
+ key: s.key,
85
+ label: s.label,
86
+ color: s.color,
87
+ mark: "bar",
88
+ ...s.tooltip !== void 0 && { tooltip: s.tooltip },
89
+ ...s.legend !== void 0 && { legend: s.legend },
90
+ ...s.note !== void 0 && { note: s.note },
91
+ getValue: (d) => getBand(d).state === s.key ? 1 : null,
92
+ formatValue: (_v, d) => s.formatValue ? s.formatValue(d) ?? NON_FINITE : ""
93
+ })),
94
+ [states, getBand]
95
+ );
96
+ const marks = useCallback(
97
+ (plot) => {
98
+ const { base, markers, hits } = layoutBands({
99
+ data,
100
+ getBand,
101
+ fold,
102
+ states: new Map(states.map((s) => [s.key, s])),
103
+ visible: new Set(plot.visible.map((s) => s.key)),
104
+ width: plot.width,
105
+ height: plot.height,
106
+ emphasis: (key) => emphasis(plot.highlighted, { key })
107
+ });
108
+ const rows = hits.map((h) => ({
109
+ x: x(h.source),
110
+ y: 1,
111
+ series: h.state,
112
+ datum: h.datum
113
+ }));
114
+ return [
115
+ ...[...base, ...markers].map(
116
+ ({ fill, opacity, cells }, i) => decorative(
117
+ rect(cells, {
118
+ id: `band-${i}`,
119
+ x1: "f0",
120
+ x2: "f1",
121
+ y1: "y0",
122
+ y2: "y1",
123
+ xScale: "zx",
124
+ fill,
125
+ inset: 0,
126
+ ...opacity < 1 && { fillOpacity: opacity }
127
+ })
128
+ )
129
+ ),
130
+ ...rows.length > 0 ? [barY(rows, { id: "hit", x: rowX, y1: 0, y2: 1, fill: "transparent" })] : []
131
+ ];
132
+ },
133
+ [states, getBand, fold, data, x]
134
+ );
135
+ return /* @__PURE__ */ jsx(
136
+ CartesianRung,
137
+ {
138
+ ...rest,
139
+ series,
140
+ marks,
141
+ band: true,
142
+ y: STRIP_AXIS,
143
+ xZones: ZX_ANCHOR,
144
+ cursorResolution,
145
+ ...tooltip !== void 0 && { tooltip }
146
+ }
147
+ );
148
+ }
149
+ export {
150
+ BandStrip
151
+ };
@@ -0,0 +1,19 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { CartesianChartProps, ChartSeries, ChartX } from './types.js';
3
+ /** A bar series. Bars always read the left axis. */
4
+ export type BarsBar<T> = Pick<ChartSeries<T>, 'key' | 'label' | 'color' | 'getValue' | 'formatValue' | 'tooltip' | 'legend' | 'role' | 'note'> & {
5
+ /** Default 0.85. */
6
+ fillOpacity?: number;
7
+ };
8
+ /** A line overlay; `axis: 'right'` reads the chart's `y2`. */
9
+ export type BarsLine<T> = Pick<ChartSeries<T>, 'key' | 'label' | 'color' | 'getValue' | 'formatValue' | 'tooltip' | 'legend' | 'role' | 'note' | 'axis' | 'dash' | 'curve' | 'strokeWidth' | 'strokeOpacity'>;
10
+ export type BarsProps<T, X extends ChartX = ChartX> = Omit<CartesianChartProps<T, X>, 'marks' | 'series'> & {
11
+ bars: readonly BarsBar<T>[];
12
+ lines?: readonly BarsLine<T>[];
13
+ /** Default `'stacked'`. `'normalized'` stacks each x to its share of the total. */
14
+ layout?: 'stacked' | 'grouped' | 'normalized';
15
+ /** Per-bar opacity (a partial week, an estimate). Overrides the series' `fillOpacity`. */
16
+ barOpacity?: (d: T, key: string) => number;
17
+ };
18
+ export declare function Bars<T, X extends ChartX = ChartX>(props: BarsProps<T, X>): ReactElement;
19
+ //# sourceMappingURL=Bars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bars.d.ts","sourceRoot":"","sources":["../../src/charts/Bars.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAIzC,OAAO,KAAK,EACV,mBAAmB,EAEnB,WAAW,EACX,MAAM,EAGP,MAAM,SAAS,CAAA;AAEhB,oDAAoD;AACpD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,IAAI,CAC3B,WAAW,CAAC,CAAC,CAAC,EACd,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAChG,GAAG;IACF,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,8DAA8D;AAC9D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,IAAI,CAC5B,WAAW,CAAC,CAAC,CAAC,EACZ,KAAK,GACL,OAAO,GACP,OAAO,GACP,UAAU,GACV,aAAa,GACb,SAAS,GACT,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,aAAa,GACb,eAAe,CAClB,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CACxD,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,GAAG,QAAQ,CACnB,GAAG;IACF,IAAI,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9B,mFAAmF;IACnF,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAA;IAC7C,0FAA0F;IAC1F,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3C,CAAA;AAoBD,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CA2DvF"}