basalt-ui 1.41.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (914) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +535 -518
  3. package/MIGRATING.md +945 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +14 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/doctor-upgrade.d.ts +31 -0
  175. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  176. package/dist/cli/doctor-upgrade.js +269 -0
  177. package/dist/cli/doctor.d.ts +13 -29
  178. package/dist/cli/doctor.d.ts.map +1 -1
  179. package/dist/cli/doctor.js +51 -9
  180. package/dist/cli/help.d.ts.map +1 -1
  181. package/dist/cli/help.js +2 -4
  182. package/dist/cli/index.d.ts +48 -172
  183. package/dist/cli/index.d.ts.map +1 -1
  184. package/dist/cli/index.js +39 -132
  185. package/dist/cli/init.d.ts.map +1 -1
  186. package/dist/cli/init.js +43 -37
  187. package/dist/cli/sync.d.ts +5 -21
  188. package/dist/cli/sync.d.ts.map +1 -1
  189. package/dist/cli/sync.js +4 -23
  190. package/dist/cli/tokens-css.d.ts +7 -28
  191. package/dist/cli/tokens-css.d.ts.map +1 -1
  192. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.js +4 -5
  194. package/dist/commands/define-commands.d.ts +15 -31
  195. package/dist/commands/define-commands.d.ts.map +1 -1
  196. package/dist/commands/define-commands.js +1 -11
  197. package/dist/commands/define-overlays.d.ts +5 -19
  198. package/dist/commands/define-overlays.d.ts.map +1 -1
  199. package/dist/commands/define-overlays.js +3 -11
  200. package/dist/commands/index.d.ts +10 -40
  201. package/dist/commands/index.d.ts.map +1 -1
  202. package/dist/commands/index.js +9 -46
  203. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  204. package/dist/commands/notifications/bell.d.ts.map +1 -0
  205. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  206. package/dist/commands/notifications/center.d.ts.map +1 -0
  207. package/dist/{notifications → commands/notifications}/center.js +2 -2
  208. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  209. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  210. package/dist/commands/notifications/notify.d.ts +44 -0
  211. package/dist/commands/notifications/notify.d.ts.map +1 -0
  212. package/dist/commands/notifications/notify.js +79 -0
  213. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  214. package/dist/commands/notifications/store.d.ts.map +1 -0
  215. package/dist/{notifications → commands/notifications}/store.js +4 -0
  216. package/dist/commands/projectors.d.ts +1 -131
  217. package/dist/commands/projectors.d.ts.map +1 -1
  218. package/dist/commands/projectors.js +2 -73
  219. package/dist/commands/shell-bridge.d.ts +3 -3
  220. package/dist/commands/shortcut-format.d.ts +5 -4
  221. package/dist/commands/shortcut-format.d.ts.map +1 -1
  222. package/dist/common/errors.d.ts +3 -3
  223. package/dist/common/use-measured-widths.d.ts.map +1 -1
  224. package/dist/common/use-measured-widths.js +5 -3
  225. package/dist/common/validate.d.ts +2 -2
  226. package/dist/content/article-layout.d.ts.map +1 -1
  227. package/dist/content/article-layout.js +3 -3
  228. package/dist/content/article-model.d.ts +1 -46
  229. package/dist/content/article-model.d.ts.map +1 -1
  230. package/dist/content/article-model.js +1 -29
  231. package/dist/content/index.d.ts +11 -41
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +3 -35
  234. package/dist/content/markdown.d.ts +1 -1
  235. package/dist/content/markdown.d.ts.map +1 -1
  236. package/dist/content/markdown.js +1 -1
  237. package/dist/content/mermaid.d.ts.map +1 -1
  238. package/dist/content/mermaid.js +7 -7
  239. package/dist/content/slug.d.ts +1 -8
  240. package/dist/content/slug.d.ts.map +1 -1
  241. package/dist/content/slug.js +1 -8
  242. package/dist/content/url-hardening.d.ts +2 -2
  243. package/dist/content/url-hardening.d.ts.map +1 -1
  244. package/dist/content/url-hardening.js +2 -0
  245. package/dist/controls/actions.d.ts +16 -1
  246. package/dist/controls/actions.d.ts.map +1 -1
  247. package/dist/controls/enum-filter.d.ts +1 -1
  248. package/dist/controls/enum-filter.d.ts.map +1 -1
  249. package/dist/controls/filter-context.d.ts.map +1 -1
  250. package/dist/controls/filter-context.js +3 -1
  251. package/dist/controls/filter-set.js +4 -6
  252. package/dist/controls/form-layout.d.ts +1 -1
  253. package/dist/controls/form-layout.d.ts.map +1 -1
  254. package/dist/controls/form-layout.js +1 -1
  255. package/dist/controls/glyphs.d.ts +0 -2
  256. package/dist/controls/glyphs.d.ts.map +1 -1
  257. package/dist/controls/glyphs.js +0 -7
  258. package/dist/controls/index.d.ts +12 -17
  259. package/dist/controls/index.d.ts.map +1 -1
  260. package/dist/controls/index.js +5 -39
  261. package/dist/controls/multi-select-filter.d.ts +4 -3
  262. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  263. package/dist/controls/number-filter.d.ts +4 -3
  264. package/dist/controls/number-filter.d.ts.map +1 -1
  265. package/dist/controls/number-filter.js +3 -1
  266. package/dist/controls/range-filter.d.ts +4 -3
  267. package/dist/controls/range-filter.d.ts.map +1 -1
  268. package/dist/controls/search-filter.d.ts +4 -3
  269. package/dist/controls/search-filter.d.ts.map +1 -1
  270. package/dist/controls/search-filter.js +19 -14
  271. package/dist/controls/select-filter.d.ts +4 -3
  272. package/dist/controls/select-filter.d.ts.map +1 -1
  273. package/dist/controls/sync-button.d.ts.map +1 -1
  274. package/dist/controls/sync-button.js +12 -15
  275. package/dist/controls/toggle-filter.d.ts +4 -3
  276. package/dist/controls/toggle-filter.d.ts.map +1 -1
  277. package/dist/controls/uncontrolled.d.ts +12 -0
  278. package/dist/controls/uncontrolled.d.ts.map +1 -0
  279. package/dist/controls/view-tabs.d.ts +2 -2
  280. package/dist/controls/view-tabs.d.ts.map +1 -1
  281. package/dist/controls-dates/index.d.ts +0 -1
  282. package/dist/controls-dates/index.d.ts.map +1 -1
  283. package/dist/dashboard/index.d.ts +7 -9
  284. package/dist/dashboard/index.d.ts.map +1 -1
  285. package/dist/dashboard/index.js +3 -23
  286. package/dist/dashboard/section.d.ts +4 -6
  287. package/dist/dashboard/section.d.ts.map +1 -1
  288. package/dist/dashboard/section.js +4 -10
  289. package/dist/dashboard/stat-card.d.ts +4 -4
  290. package/dist/dashboard/stat-card.d.ts.map +1 -1
  291. package/dist/dashboard/stat-card.js +3 -3
  292. package/dist/dashboard/widget-header.module.css +9 -7
  293. package/dist/dev-dock.d.ts.map +1 -1
  294. package/dist/dev-dock.js +6 -1
  295. package/dist/format/date.d.ts +0 -34
  296. package/dist/format/date.d.ts.map +1 -1
  297. package/dist/format/date.js +0 -54
  298. package/dist/format/index.d.ts +7 -22
  299. package/dist/format/index.d.ts.map +1 -1
  300. package/dist/format/index.js +2 -43
  301. package/dist/format/number.d.ts +3 -14
  302. package/dist/format/number.d.ts.map +1 -1
  303. package/dist/format/number.js +0 -13
  304. package/dist/format/shared.d.ts +2 -3
  305. package/dist/format/shared.d.ts.map +1 -1
  306. package/dist/forms/index.d.ts +0 -11
  307. package/dist/forms/index.d.ts.map +1 -1
  308. package/dist/forms/index.js +1 -14
  309. package/dist/guard/index.d.ts +6 -21
  310. package/dist/guard/index.d.ts.map +1 -1
  311. package/dist/guard/index.js +27 -115
  312. package/dist/guard/types.d.ts +7 -18
  313. package/dist/guard/types.d.ts.map +1 -1
  314. package/dist/index.d.ts +16 -48
  315. package/dist/index.d.ts.map +1 -1
  316. package/dist/index.js +21 -117
  317. package/dist/provider/create-router.d.ts +44 -0
  318. package/dist/provider/create-router.d.ts.map +1 -0
  319. package/dist/provider/create-router.js +62 -0
  320. package/dist/provider/hotkeys.d.ts +8 -0
  321. package/dist/provider/hotkeys.d.ts.map +1 -0
  322. package/dist/provider/hotkeys.js +50 -0
  323. package/dist/provider/index.d.ts +33 -110
  324. package/dist/provider/index.d.ts.map +1 -1
  325. package/dist/provider/index.js +182 -82
  326. package/dist/provider/lab-theme.d.ts.map +1 -1
  327. package/dist/provider/route-transition.d.ts +76 -0
  328. package/dist/provider/route-transition.d.ts.map +1 -0
  329. package/dist/provider/route-transition.js +98 -0
  330. package/dist/provider/spotlight-actions.d.ts +10 -0
  331. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  332. package/dist/provider/spotlight-actions.js +55 -0
  333. package/dist/provider/test-router.d.ts +6 -0
  334. package/dist/provider/test-router.d.ts.map +1 -0
  335. package/dist/provider/test-router.js +18 -0
  336. package/dist/query-client.d.ts +4 -20
  337. package/dist/query-client.d.ts.map +1 -1
  338. package/dist/query-client.js +2 -2
  339. package/dist/router-tanstack/index.d.ts +18 -64
  340. package/dist/router-tanstack/index.d.ts.map +1 -1
  341. package/dist/router-tanstack/index.js +2 -16
  342. package/dist/router-tanstack/nav.d.ts +12 -1
  343. package/dist/router-tanstack/nav.d.ts.map +1 -1
  344. package/dist/router-tanstack/nav.js +8 -1
  345. package/dist/router-tanstack/search-store.d.ts +1 -1
  346. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  347. package/dist/router-tanstack/use-nav.d.ts +8 -9
  348. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/use-nav.js +20 -1
  350. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  351. package/dist/shell/app-sidebar.js +1 -1
  352. package/dist/shell/index.d.ts +31 -10
  353. package/dist/shell/index.d.ts.map +1 -1
  354. package/dist/shell/index.js +14 -3
  355. package/dist/shell/page-aside.d.ts +2 -2
  356. package/dist/shell/page-aside.d.ts.map +1 -1
  357. package/dist/shell/page-aside.js +31 -12
  358. package/dist/shell/page-bar.d.ts +2 -2
  359. package/dist/shell/page-bar.d.ts.map +1 -1
  360. package/dist/shell/page-bar.js +1 -1
  361. package/dist/state.d.ts +10 -12
  362. package/dist/state.d.ts.map +1 -1
  363. package/dist/state.js +4 -6
  364. package/dist/styles.css +107 -7
  365. package/dist/surfaces.d.ts +28 -103
  366. package/dist/surfaces.d.ts.map +1 -1
  367. package/dist/surfaces.js +54 -143
  368. package/dist/{data → table}/data-table-state.d.ts +1 -1
  369. package/dist/table/data-table-state.d.ts.map +1 -0
  370. package/dist/{data → table}/data-table-state.js +4 -3
  371. package/dist/{data → table}/data-table.d.ts +28 -49
  372. package/dist/table/data-table.d.ts.map +1 -0
  373. package/dist/{data → table}/data-table.js +74 -60
  374. package/dist/table/index.d.ts +18 -0
  375. package/dist/table/index.d.ts.map +1 -0
  376. package/dist/{data/table.js → table/index.js} +1 -1
  377. package/dist/table/query-branch.d.ts.map +1 -0
  378. package/dist/table/table-features.d.ts +69 -0
  379. package/dist/table/table-features.d.ts.map +1 -0
  380. package/dist/table/table-features.js +49 -0
  381. package/dist/telemetry.d.ts +77 -0
  382. package/dist/telemetry.d.ts.map +1 -0
  383. package/dist/telemetry.js +33 -0
  384. package/dist/theme/index.d.ts +10 -21
  385. package/dist/theme/index.d.ts.map +1 -1
  386. package/dist/theme/index.js +3 -14
  387. package/dist/theme/theme-toggle.d.ts.map +1 -1
  388. package/dist/theme/theme-toggle.js +7 -33
  389. package/dist/theme/theme-toggle.module.css +30 -0
  390. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  391. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  392. package/dist/theme-lab/derive-controls.js +5 -3
  393. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  394. package/dist/theme-lab/derive-state.js +2 -1
  395. package/dist/tokens/core.d.ts +360 -0
  396. package/dist/tokens/core.d.ts.map +1 -0
  397. package/dist/tokens/core.js +708 -0
  398. package/dist/tokens/derive.d.ts +1 -1
  399. package/dist/tokens/derive.d.ts.map +1 -1
  400. package/dist/tokens/index.d.ts +5 -373
  401. package/dist/tokens/index.d.ts.map +1 -1
  402. package/dist/tokens/index.js +8 -700
  403. package/dist/tokens/palette.d.ts +2 -6
  404. package/dist/tokens/palette.d.ts.map +1 -1
  405. package/dist/tokens/palette.js +1 -4
  406. package/dist/vite.d.ts +4 -3
  407. package/dist/vite.d.ts.map +1 -1
  408. package/llms.txt +43 -85
  409. package/package.json +77 -170
  410. package/src/agent/ai-sdk-transport.ts +57 -37
  411. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  412. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  413. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  414. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  415. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  416. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  417. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  418. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  419. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  420. package/src/agent/error.ts +43 -0
  421. package/src/agent/history.ts +2 -107
  422. package/src/agent/id.ts +4 -5
  423. package/src/agent/index.ts +23 -112
  424. package/src/agent/outcome.ts +3 -56
  425. package/src/agent/part-list.tsx +3 -3
  426. package/src/agent/parts.ts +23 -22
  427. package/src/agent/run-committer.ts +64 -0
  428. package/src/agent/run-records.ts +147 -0
  429. package/src/agent/thread.ts +24 -231
  430. package/src/agent/transport.ts +6 -96
  431. package/src/agent/use-agent-thread-runs.ts +364 -199
  432. package/src/charts/BandStrip.tsx +276 -0
  433. package/src/charts/Bars.tsx +141 -0
  434. package/src/charts/CartesianChart.tsx +206 -0
  435. package/src/charts/ChartCard.tsx +178 -0
  436. package/src/charts/Donut.tsx +256 -0
  437. package/src/charts/DualPanel.tsx +326 -0
  438. package/src/charts/Heatmap.tsx +282 -0
  439. package/src/charts/Lines.tsx +151 -0
  440. package/src/charts/MirroredBars.tsx +303 -0
  441. package/src/charts/Sparkline.tsx +176 -0
  442. package/src/charts/StackedArea.tsx +80 -0
  443. package/src/charts/box.tsx +96 -0
  444. package/src/charts/card-context.ts +11 -0
  445. package/src/charts/chart-box.module.css +64 -0
  446. package/src/charts/chart-box.module.css.d.ts +12 -0
  447. package/src/charts/chart-card.module.css +25 -0
  448. package/src/charts/chart-card.module.css.d.ts +8 -0
  449. package/src/charts/chart-legend.module.css +38 -0
  450. package/src/charts/chart-legend.module.css.d.ts +10 -0
  451. package/src/charts/compile.ts +585 -0
  452. package/src/charts/cursor.ts +282 -0
  453. package/src/charts/curves.ts +111 -0
  454. package/src/charts/donut.module.css +54 -0
  455. package/src/charts/donut.module.css.d.ts +9 -0
  456. package/src/charts/host.tsx +60 -0
  457. package/src/charts/index.ts +41 -178
  458. package/src/charts/legend.tsx +204 -0
  459. package/src/charts/marks.ts +201 -0
  460. package/src/charts/panel.tsx +227 -0
  461. package/src/charts/scales.ts +237 -0
  462. package/src/charts/sizing.ts +47 -0
  463. package/src/charts/state.tsx +80 -0
  464. package/src/charts/theme.ts +65 -0
  465. package/src/charts/types.ts +242 -0
  466. package/src/cli/audit-allows.ts +8 -30
  467. package/src/cli/config.ts +14 -43
  468. package/src/cli/doctor-upgrade.ts +392 -0
  469. package/src/cli/doctor.ts +81 -72
  470. package/src/cli/help.ts +2 -4
  471. package/src/cli/index.ts +100 -384
  472. package/src/cli/init.ts +60 -51
  473. package/src/cli/sync.ts +13 -68
  474. package/src/cli/tokens-css.ts +7 -28
  475. package/src/commands/ShortcutsHelp.tsx +8 -9
  476. package/src/commands/define-commands.ts +16 -43
  477. package/src/commands/define-overlays.ts +12 -36
  478. package/src/commands/index.ts +11 -94
  479. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  480. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  481. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  482. package/src/commands/notifications/notify.tsx +158 -0
  483. package/src/{notifications → commands/notifications}/store.ts +10 -2
  484. package/src/commands/projectors.ts +5 -225
  485. package/src/commands/shell-bridge.ts +5 -5
  486. package/src/commands/shortcut-format.ts +5 -4
  487. package/src/common/errors.ts +3 -3
  488. package/src/common/use-measured-widths.ts +6 -3
  489. package/src/common/validate.ts +2 -2
  490. package/src/content/article-layout.tsx +37 -38
  491. package/src/content/article-model.ts +1 -84
  492. package/src/content/index.ts +12 -83
  493. package/src/content/markdown.tsx +4 -3
  494. package/src/content/mermaid.tsx +9 -7
  495. package/src/content/slug.ts +1 -16
  496. package/src/content/url-hardening.ts +8 -2
  497. package/src/controls/actions.tsx +24 -1
  498. package/src/controls/enum-filter.tsx +1 -1
  499. package/src/controls/filter-context.tsx +3 -1
  500. package/src/controls/filter-set.tsx +5 -7
  501. package/src/controls/form-layout.tsx +2 -2
  502. package/src/controls/glyphs.tsx +0 -10
  503. package/src/controls/index.ts +13 -64
  504. package/src/controls/multi-select-filter.tsx +5 -4
  505. package/src/controls/number-filter.tsx +8 -4
  506. package/src/controls/range-filter.tsx +5 -4
  507. package/src/controls/search-filter.tsx +25 -19
  508. package/src/controls/select-filter.tsx +5 -4
  509. package/src/controls/sync-button.tsx +18 -20
  510. package/src/controls/toggle-filter.tsx +5 -4
  511. package/src/controls/uncontrolled.ts +12 -0
  512. package/src/controls/view-tabs.tsx +3 -3
  513. package/src/controls-dates/date-range-picker.tsx +1 -1
  514. package/src/controls-dates/index.ts +0 -1
  515. package/src/dashboard/index.ts +7 -48
  516. package/src/dashboard/section.tsx +11 -40
  517. package/src/dashboard/stat-card.tsx +14 -16
  518. package/src/dashboard/widget-header.module.css +9 -7
  519. package/src/dev-dock.tsx +14 -27
  520. package/src/format/date.ts +2 -92
  521. package/src/format/index.ts +7 -53
  522. package/src/format/number.ts +3 -26
  523. package/src/format/shared.ts +2 -3
  524. package/src/forms/index.ts +0 -23
  525. package/src/guard/index.ts +36 -191
  526. package/src/guard/types.ts +6 -19
  527. package/src/index.ts +30 -282
  528. package/src/provider/create-router.tsx +138 -0
  529. package/src/provider/hotkeys.ts +70 -0
  530. package/src/provider/index.tsx +260 -230
  531. package/src/provider/lab-theme.ts +3 -2
  532. package/src/provider/route-transition.ts +199 -0
  533. package/src/provider/spotlight-actions.tsx +69 -0
  534. package/src/provider/test-router.tsx +25 -0
  535. package/src/query-client.ts +4 -22
  536. package/src/router-tanstack/index.ts +18 -112
  537. package/src/router-tanstack/nav.ts +28 -2
  538. package/src/router-tanstack/search-store.ts +9 -2
  539. package/src/router-tanstack/use-nav.ts +47 -13
  540. package/src/shell/app-mobile-nav.tsx +3 -2
  541. package/src/shell/app-sidebar.tsx +1 -1
  542. package/src/shell/aside-docking.ts +1 -1
  543. package/src/shell/index.tsx +61 -20
  544. package/src/shell/page-aside.tsx +47 -23
  545. package/src/shell/page-bar.tsx +3 -3
  546. package/src/shell/page-title.tsx +1 -1
  547. package/src/state.ts +11 -37
  548. package/src/styles.css +107 -7
  549. package/src/surfaces.ts +56 -151
  550. package/src/{data → table}/data-table-state.ts +5 -4
  551. package/src/{data → table}/data-table.tsx +170 -161
  552. package/src/table/index.ts +18 -0
  553. package/src/table/table-features.ts +102 -0
  554. package/src/telemetry.ts +110 -0
  555. package/src/theme/index.ts +22 -47
  556. package/src/theme/theme-toggle.module.css +30 -0
  557. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  558. package/src/theme/theme-toggle.tsx +15 -43
  559. package/src/theme-lab/derive-controls.tsx +5 -3
  560. package/src/theme-lab/derive-state.ts +2 -1
  561. package/src/tokens/core.ts +1163 -0
  562. package/src/tokens/derive.ts +1 -1
  563. package/src/tokens/index.ts +14 -1181
  564. package/src/tokens/palette.ts +3 -7
  565. package/src/vite.ts +3 -3
  566. package/agent/templates/query-client.ts.tpl +0 -26
  567. package/dist/agent/adapter.d.ts +0 -150
  568. package/dist/agent/adapter.d.ts.map +0 -1
  569. package/dist/agent/adapter.js +0 -482
  570. package/dist/agent/use-agent-stream.d.ts +0 -35
  571. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  572. package/dist/agent/use-agent-stream.js +0 -59
  573. package/dist/agent-chat/composer.d.ts.map +0 -1
  574. package/dist/agent-chat/index.d.ts +0 -31
  575. package/dist/agent-chat/index.d.ts.map +0 -1
  576. package/dist/agent-chat/index.js +0 -19
  577. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  578. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  579. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  580. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  581. package/dist/agent-chat/thread-detail-panel.js +0 -115
  582. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  583. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  587. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-workspace.js +0 -153
  589. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  590. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  591. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  592. package/dist/charts/cursor/resolve.d.ts +0 -75
  593. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  594. package/dist/charts/cursor/resolve.js +0 -91
  595. package/dist/charts/cursor/scope.d.ts +0 -20
  596. package/dist/charts/cursor/scope.d.ts.map +0 -1
  597. package/dist/charts/cursor/scope.js +0 -20
  598. package/dist/charts/cursor/store.d.ts +0 -35
  599. package/dist/charts/cursor/store.d.ts.map +0 -1
  600. package/dist/charts/cursor/store.js +0 -25
  601. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  602. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  603. package/dist/charts/cursor/touch-pin.js +0 -79
  604. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  606. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  607. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  608. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  609. package/dist/charts/hooks/use-hysteresis.js +0 -12
  610. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  611. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  612. package/dist/charts/hooks/useBandPlot.js +0 -178
  613. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  614. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/useChartCursor.js +0 -200
  616. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  617. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  618. package/dist/charts/hooks/useChartSize.js +0 -8
  619. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  620. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  621. package/dist/charts/kinds/BandStrip.js +0 -241
  622. package/dist/charts/kinds/Bars.d.ts +0 -141
  623. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  624. package/dist/charts/kinds/Bars.js +0 -343
  625. package/dist/charts/kinds/Donut.d.ts +0 -77
  626. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  627. package/dist/charts/kinds/Donut.js +0 -245
  628. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  629. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  630. package/dist/charts/kinds/DualPanel.js +0 -471
  631. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  632. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  633. package/dist/charts/kinds/Heatmap.js +0 -243
  634. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  635. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  636. package/dist/charts/kinds/MirroredBars.js +0 -292
  637. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  638. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  639. package/dist/charts/kinds/MultiLine.js +0 -176
  640. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  641. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  642. package/dist/charts/kinds/StackedArea.js +0 -135
  643. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  644. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  645. package/dist/charts/kinds/ZonedLine.js +0 -155
  646. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  647. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  648. package/dist/charts/kinds/band-chrome.js +0 -71
  649. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  650. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  651. package/dist/charts/kinds/donut-layout.js +0 -52
  652. package/dist/charts/layout/auto-margin.d.ts +0 -122
  653. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  654. package/dist/charts/layout/auto-margin.js +0 -81
  655. package/dist/charts/layout/end-labels.d.ts +0 -64
  656. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  657. package/dist/charts/layout/end-labels.js +0 -76
  658. package/dist/charts/layout/log-ticks.d.ts +0 -27
  659. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  660. package/dist/charts/layout/log-ticks.js +0 -42
  661. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  662. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  663. package/dist/charts/primitives/AreaGradient.js +0 -13
  664. package/dist/charts/primitives/Axes.d.ts +0 -83
  665. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  666. package/dist/charts/primitives/Axes.js +0 -168
  667. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  668. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  669. package/dist/charts/primitives/CartesianChart.js +0 -549
  670. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  671. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  672. package/dist/charts/primitives/ChartCard.js +0 -143
  673. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  674. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  675. package/dist/charts/primitives/ChartFrame.js +0 -241
  676. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  677. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  678. package/dist/charts/primitives/ChartLegend.js +0 -292
  679. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  680. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartPending.js +0 -117
  682. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  683. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartTooltip.js +0 -197
  685. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  686. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  687. package/dist/charts/primitives/Crosshair.js +0 -23
  688. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  689. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  690. package/dist/charts/primitives/HatchPattern.js +0 -31
  691. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  692. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  693. package/dist/charts/primitives/HoverOverlay.js +0 -72
  694. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  695. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  696. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  697. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  698. package/dist/charts/primitives/XZoneRects.js +0 -65
  699. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  700. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  701. package/dist/charts/primitives/ZoneRects.js +0 -30
  702. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  703. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  704. package/dist/charts/primitives/chart-card-context.js +0 -18
  705. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  706. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  707. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  708. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  709. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  710. package/dist/charts/primitives/chart-layout.js +0 -175
  711. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  712. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-tier.js +0 -44
  714. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  715. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  716. package/dist/charts/primitives/legend-disclosure.js +0 -153
  717. package/dist/charts/series.d.ts +0 -189
  718. package/dist/charts/series.d.ts.map +0 -1
  719. package/dist/charts/series.js +0 -84
  720. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  721. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  722. package/dist/charts/sparklines/BarSparkline.js +0 -53
  723. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  724. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  725. package/dist/charts/sparklines/LineSparkline.js +0 -51
  726. package/dist/charts/sparklines/index.d.ts +0 -3
  727. package/dist/charts/sparklines/index.d.ts.map +0 -1
  728. package/dist/charts/sparklines/index.js +0 -6
  729. package/dist/charts/utils/domain.d.ts +0 -35
  730. package/dist/charts/utils/domain.d.ts.map +0 -1
  731. package/dist/charts/utils/domain.js +0 -12
  732. package/dist/charts/utils/format.d.ts +0 -8
  733. package/dist/charts/utils/format.d.ts.map +0 -1
  734. package/dist/charts/utils/format.js +0 -20
  735. package/dist/charts/utils/measure-text.d.ts +0 -25
  736. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  737. package/dist/charts/utils/measure-text.js +0 -64
  738. package/dist/charts/utils/ticks.d.ts +0 -103
  739. package/dist/charts/utils/ticks.d.ts.map +0 -1
  740. package/dist/charts/utils/ticks.js +0 -92
  741. package/dist/commands/overlays-mount.d.ts +0 -122
  742. package/dist/commands/overlays-mount.d.ts.map +0 -1
  743. package/dist/commands/overlays-mount.js +0 -125
  744. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  745. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  746. package/dist/commands/useCommandHotkeys.js +0 -45
  747. package/dist/content/article-actions.d.ts +0 -39
  748. package/dist/content/article-actions.d.ts.map +0 -1
  749. package/dist/content/article-actions.js +0 -28
  750. package/dist/content/article-card.d.ts +0 -58
  751. package/dist/content/article-card.d.ts.map +0 -1
  752. package/dist/content/article-card.js +0 -79
  753. package/dist/content/article-card.module.css +0 -111
  754. package/dist/content/mdx.d.ts +0 -20
  755. package/dist/content/mdx.d.ts.map +0 -1
  756. package/dist/content/mdx.js +0 -64
  757. package/dist/controls/compare-filter.d.ts +0 -42
  758. package/dist/controls/compare-filter.d.ts.map +0 -1
  759. package/dist/controls/compare-filter.js +0 -38
  760. package/dist/controls/slider-control.d.ts +0 -36
  761. package/dist/controls/slider-control.d.ts.map +0 -1
  762. package/dist/controls/slider-control.js +0 -64
  763. package/dist/dashboard/widget-grid.d.ts +0 -27
  764. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  765. package/dist/dashboard/widget-grid.js +0 -40
  766. package/dist/dashboard/widget-grid.module.css +0 -69
  767. package/dist/data/data-table-state.d.ts.map +0 -1
  768. package/dist/data/data-table.d.ts.map +0 -1
  769. package/dist/data/query-branch.d.ts.map +0 -1
  770. package/dist/data/table.d.ts +0 -24
  771. package/dist/data/table.d.ts.map +0 -1
  772. package/dist/data/virtual-list.d.ts +0 -133
  773. package/dist/data/virtual-list.d.ts.map +0 -1
  774. package/dist/data/virtual-list.js +0 -157
  775. package/dist/data/virtual.d.ts +0 -21
  776. package/dist/data/virtual.d.ts.map +0 -1
  777. package/dist/data/virtual.js +0 -4
  778. package/dist/forms/FormErrorSummary.d.ts +0 -30
  779. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  780. package/dist/forms/FormErrorSummary.js +0 -30
  781. package/dist/forms/use-field-array.d.ts +0 -60
  782. package/dist/forms/use-field-array.d.ts.map +0 -1
  783. package/dist/forms/use-field-array.js +0 -20
  784. package/dist/forms/use-form-draft.d.ts +0 -76
  785. package/dist/forms/use-form-draft.d.ts.map +0 -1
  786. package/dist/forms/use-form-draft.js +0 -92
  787. package/dist/forms/use-form-submit.d.ts +0 -88
  788. package/dist/forms/use-form-submit.d.ts.map +0 -1
  789. package/dist/forms/use-form-submit.js +0 -63
  790. package/dist/notifications/bell.d.ts.map +0 -1
  791. package/dist/notifications/center.d.ts.map +0 -1
  792. package/dist/notifications/define-notifications.d.ts.map +0 -1
  793. package/dist/notifications/index.d.ts +0 -40
  794. package/dist/notifications/index.d.ts.map +0 -1
  795. package/dist/notifications/index.js +0 -54
  796. package/dist/notifications/mount-guard.d.ts +0 -8
  797. package/dist/notifications/mount-guard.d.ts.map +0 -1
  798. package/dist/notifications/mount-guard.js +0 -18
  799. package/dist/notifications/notify.d.ts +0 -149
  800. package/dist/notifications/notify.d.ts.map +0 -1
  801. package/dist/notifications/notify.js +0 -171
  802. package/dist/notifications/store.d.ts.map +0 -1
  803. package/dist/provider/connectivity-indicator.d.ts +0 -13
  804. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  805. package/dist/provider/connectivity-indicator.js +0 -205
  806. package/dist/provider/connectivity-provider.d.ts +0 -7
  807. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  808. package/dist/provider/connectivity-provider.js +0 -128
  809. package/dist/provider/connectivity-types.d.ts +0 -36
  810. package/dist/provider/connectivity-types.d.ts.map +0 -1
  811. package/dist/provider/use-connectivity.d.ts +0 -3
  812. package/dist/provider/use-connectivity.d.ts.map +0 -1
  813. package/dist/provider/use-connectivity.js +0 -14
  814. package/dist/query-devtools.d.ts +0 -21
  815. package/dist/query-devtools.d.ts.map +0 -1
  816. package/dist/query-devtools.js +0 -13
  817. package/src/agent/adapter.ts +0 -945
  818. package/src/agent/use-agent-stream.ts +0 -154
  819. package/src/agent-chat/index.ts +0 -54
  820. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  821. package/src/agent-chat/thread-workspace.tsx +0 -279
  822. package/src/charts/cursor/resolve.ts +0 -198
  823. package/src/charts/cursor/scope.tsx +0 -35
  824. package/src/charts/cursor/store.ts +0 -58
  825. package/src/charts/cursor/touch-pin.ts +0 -138
  826. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  827. package/src/charts/hooks/use-hysteresis.ts +0 -26
  828. package/src/charts/hooks/useBandPlot.ts +0 -383
  829. package/src/charts/hooks/useChartCursor.ts +0 -367
  830. package/src/charts/hooks/useChartSize.ts +0 -35
  831. package/src/charts/kinds/BandStrip.tsx +0 -449
  832. package/src/charts/kinds/Bars.tsx +0 -589
  833. package/src/charts/kinds/Donut.tsx +0 -368
  834. package/src/charts/kinds/DualPanel.tsx +0 -712
  835. package/src/charts/kinds/Heatmap.tsx +0 -396
  836. package/src/charts/kinds/MirroredBars.tsx +0 -469
  837. package/src/charts/kinds/MultiLine.tsx +0 -322
  838. package/src/charts/kinds/StackedArea.tsx +0 -267
  839. package/src/charts/kinds/ZonedLine.tsx +0 -301
  840. package/src/charts/kinds/band-chrome.tsx +0 -91
  841. package/src/charts/kinds/donut-layout.ts +0 -82
  842. package/src/charts/layout/auto-margin.ts +0 -242
  843. package/src/charts/layout/end-labels.ts +0 -135
  844. package/src/charts/layout/log-ticks.ts +0 -90
  845. package/src/charts/primitives/AreaGradient.tsx +0 -26
  846. package/src/charts/primitives/Axes.tsx +0 -271
  847. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  848. package/src/charts/primitives/ChartCard.tsx +0 -280
  849. package/src/charts/primitives/ChartFrame.tsx +0 -493
  850. package/src/charts/primitives/ChartLegend.tsx +0 -422
  851. package/src/charts/primitives/ChartPending.tsx +0 -243
  852. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  853. package/src/charts/primitives/Crosshair.tsx +0 -43
  854. package/src/charts/primitives/HatchPattern.tsx +0 -55
  855. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  856. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  857. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  858. package/src/charts/primitives/XZoneRects.tsx +0 -132
  859. package/src/charts/primitives/ZoneRects.tsx +0 -67
  860. package/src/charts/primitives/chart-card-context.ts +0 -46
  861. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  862. package/src/charts/primitives/chart-layout.ts +0 -318
  863. package/src/charts/primitives/chart-tier.tsx +0 -76
  864. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  865. package/src/charts/series.ts +0 -276
  866. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  867. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  868. package/src/charts/sparklines/index.ts +0 -2
  869. package/src/charts/theme.tsx +0 -53
  870. package/src/charts/utils/domain.ts +0 -41
  871. package/src/charts/utils/format.ts +0 -19
  872. package/src/charts/utils/measure-text.ts +0 -109
  873. package/src/charts/utils/ticks.ts +0 -239
  874. package/src/commands/overlays-mount.tsx +0 -333
  875. package/src/commands/useCommandHotkeys.ts +0 -114
  876. package/src/content/article-actions.ts +0 -72
  877. package/src/content/article-card.module.css +0 -111
  878. package/src/content/article-card.tsx +0 -174
  879. package/src/content/mdx.tsx +0 -127
  880. package/src/controls/compare-filter.tsx +0 -81
  881. package/src/controls/slider-control.tsx +0 -159
  882. package/src/dashboard/widget-grid.module.css +0 -69
  883. package/src/dashboard/widget-grid.tsx +0 -146
  884. package/src/data/table.ts +0 -39
  885. package/src/data/virtual-list.tsx +0 -356
  886. package/src/data/virtual.ts +0 -26
  887. package/src/forms/FormErrorSummary.tsx +0 -71
  888. package/src/forms/use-field-array.ts +0 -94
  889. package/src/forms/use-form-draft.ts +0 -262
  890. package/src/forms/use-form-submit.ts +0 -199
  891. package/src/notifications/index.ts +0 -88
  892. package/src/notifications/mount-guard.ts +0 -38
  893. package/src/notifications/notify.tsx +0 -379
  894. package/src/provider/connectivity-indicator.tsx +0 -267
  895. package/src/provider/connectivity-provider.tsx +0 -189
  896. package/src/provider/connectivity-types.ts +0 -42
  897. package/src/provider/use-connectivity.ts +0 -26
  898. package/src/query-devtools.tsx +0 -40
  899. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  900. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  902. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  903. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  904. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  906. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  907. /package/dist/{data → table}/data-table.module.css +0 -0
  908. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  909. /package/dist/{data → table}/query-branch.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.js +0 -0
  911. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  912. /package/src/{data → table}/data-table.module.css +0 -0
  913. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  914. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,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"}