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
@@ -0,0 +1,276 @@
1
+ /**
2
+ * `BandStrip` — a 1-D state strip: one gap-free band per slot over the shared x axis, no y
3
+ * dimension (`docs/V2-SPEC.md` § 9.3). Each band is in one of the `states`, tinted by the state's
4
+ * color (or an intensity `fill` of the datum's own), optionally carrying an inset `marker`.
5
+ * Absence is a state like any other: color it `VX.neutral` for a flat, unhatched fill.
6
+ *
7
+ * The rung supplies the legend, cursor, crosshair and tooltip. The visible bands are decorative
8
+ * rects on the rung's `[0, 1]` zone scale (a band scale pads its slots, a strip must not), and an
9
+ * invisible bar per slot on the real x scale carries the pointer, so the cursor keys stay the
10
+ * slots' own.
11
+ */
12
+ import { barY } from '@tanstack/charts/bar'
13
+ import { decorative } from '@tanstack/charts/mark/decorative'
14
+ import { rect } from '@tanstack/charts/rect'
15
+ import { useCallback, useMemo } from 'react'
16
+ import type { ReactElement } from 'react'
17
+ import { oneOf } from '../common/errors'
18
+ import { NON_FINITE } from '../format/shared'
19
+ import { VX, alpha } from '../tokens'
20
+ import { CartesianRung } from './CartesianChart'
21
+ import { emphasis } from './marks'
22
+ import { rowX } from './types'
23
+ import type {
24
+ AxisConfig,
25
+ CartesianChartProps,
26
+ ChartMarks,
27
+ ChartSeries,
28
+ ChartX,
29
+ PlotContext,
30
+ PlotRow,
31
+ } from './types'
32
+
33
+ /** A state a strip can draw. A band has no number to plot, so `formatValue` reads the datum. */
34
+ export type BandStripSeries<T> = Pick<
35
+ ChartSeries<T>,
36
+ 'key' | 'label' | 'color' | 'tooltip' | 'legend' | 'note' | 'fillOpacity'
37
+ > & {
38
+ /**
39
+ * The tooltip row's value for a band in this state. `null` is an ABSENT reading and renders an
40
+ * em dash; omit the function when the state's name is the whole reading ("Not measured").
41
+ */
42
+ formatValue?: (d: T) => string | null
43
+ }
44
+
45
+ /** One band: its state, and the two ways to qualify it. */
46
+ export type BandSpan = {
47
+ /** A `states` key: the band's legend entry, fill and tooltip row. */
48
+ state: string
49
+ /** Overrides the state's fill — an intensity ramp WITHIN a state. `alpha(VX.*, …)`, never a hex. */
50
+ fill?: string
51
+ /**
52
+ * A shorter, inset bar over the band, for a fact that must not be read off the fill ramp (a
53
+ * renegotiation, a restart). Its color is a `states` entry, so the legend names it.
54
+ */
55
+ marker?: {
56
+ /** Defaults to the band's own `state`. */
57
+ state?: string
58
+ /** Vertical inset from the band's top and bottom, in px. Default 6. */
59
+ inset?: number
60
+ }
61
+ }
62
+
63
+ /** Collapse adjacent data where one band per datum would be thinner than `minBandPx`. */
64
+ export type BandFold<T> = {
65
+ /** Floor on a drawn band's px width. Default 3. */
66
+ minBandPx?: number
67
+ /**
68
+ * The consumer's merge of a group of adjacent data into the datum drawn in its place — whether
69
+ * that is a max, a sum or a recomputed rate is a question about the measurement. Keep the first
70
+ * datum's `x`, or the cursor key stops naming a real slot.
71
+ */
72
+ merge: (group: T[]) => T
73
+ }
74
+
75
+ export type BandStripProps<T, X extends ChartX = ChartX> = Omit<
76
+ CartesianChartProps<T, X>,
77
+ 'marks' | 'series' | 'y' | 'y2' | 'zones' | 'xZones' | 'refLines'
78
+ > & {
79
+ states: readonly BandStripSeries<T>[]
80
+ /** Which state, fill and marker each datum has. Memoize it: a new function recompiles the chart. */
81
+ getBand: (d: T) => BandSpan
82
+ fold?: BandFold<T>
83
+ }
84
+
85
+ const DEFAULT_MIN_BAND_PX = 3
86
+ const DEFAULT_MARKER_INSET = 6
87
+
88
+ /** The whole strip is one row: a fixed unit domain, no ticks, no grid. */
89
+ const STRIP_AXIS = {
90
+ domain: [0, 1],
91
+ ticks: [],
92
+ grid: false,
93
+ } as const satisfies AxisConfig<unknown>
94
+
95
+ /** Forces the rung's hidden `[0, 1]` x scale (`zx`) into existence; draws nothing. */
96
+ const ZX_ANCHOR = [{ fill: 'transparent' }] as const
97
+
98
+ /** A band whose state is not in `states`: a typo in dev, a neutral tint in production. */
99
+ const UNKNOWN_FILL = alpha(VX.neutral, 0.2)
100
+
101
+ type Cell = { f0: number; f1: number; y0: number; y1: number }
102
+ /** Cells sharing one paint: a `rect` mark takes a constant fill and opacity. */
103
+ type Layer = { fill: string; opacity: number; cells: Cell[] }
104
+ /** A run of adjacent slots drawn as one band; `items` are the source data it stands for. */
105
+ type Group<T> = { start: number; items: T[] }
106
+ /** A slot that answers the pointer: its own source datum, and the (possibly merged) one it reads. */
107
+ type Hit<T> = { source: T; state: string; datum: T }
108
+
109
+ /** Adjacent data in groups of equal size, the last possibly shorter, at most `cap` groups. */
110
+ function groupsOf<T>(data: readonly T[], cap: number): Group<T>[] {
111
+ const size = Math.max(1, Math.ceil(data.length / Math.max(cap, 1)))
112
+ const out: Group<T>[] = []
113
+ data.forEach((d, i) => {
114
+ const last = out.at(-1)
115
+ if (last && last.items.length < size) last.items.push(d)
116
+ else out.push({ start: i, items: [d] })
117
+ })
118
+ return out
119
+ }
120
+
121
+ /** Appends a cell to the layer with this paint, creating it in first-use order. */
122
+ function paintInto(layers: Map<string, Layer>, fill: string, opacity: number, cell: Cell): void {
123
+ const key = `${fill}|${opacity}`
124
+ const layer = layers.get(key)
125
+ if (layer) layer.cells.push(cell)
126
+ else layers.set(key, { fill, opacity, cells: [cell] })
127
+ }
128
+
129
+ type LayoutInput<T> = {
130
+ data: readonly T[]
131
+ getBand: (d: T) => BandSpan
132
+ fold: BandFold<T> | undefined
133
+ states: ReadonlyMap<string, BandStripSeries<T>>
134
+ /** State keys the legend has not toggled off. */
135
+ visible: ReadonlySet<string>
136
+ width: number
137
+ height: number
138
+ /** Legend-hover dimming for a state key. */
139
+ emphasis: (key: string) => number
140
+ }
141
+
142
+ const unknownState = (prop: string, got: string, known: Iterable<string>): Error =>
143
+ new Error(oneOf('BandStrip', prop, [...known], got))
144
+
145
+ /**
146
+ * Where every band and marker goes, and which slots answer the pointer. Pure: base layers and
147
+ * marker layers come back separately so the caller can paint all markers after all bands (a
148
+ * marker in another state's color must never sit under a later band).
149
+ */
150
+ function layoutBands<T>(input: LayoutInput<T>): {
151
+ base: Layer[]
152
+ markers: Layer[]
153
+ hits: Hit<T>[]
154
+ } {
155
+ const { data, getBand, fold, states, visible } = input
156
+ const cap = Math.floor(input.width / (fold?.minBandPx ?? DEFAULT_MIN_BAND_PX))
157
+ const groups: Group<T>[] =
158
+ fold && data.length > cap
159
+ ? groupsOf(data, cap)
160
+ : data.map((d, start) => ({ start, items: [d] }))
161
+ const base = new Map<string, Layer>()
162
+ const markers = new Map<string, Layer>()
163
+ const hits: Hit<T>[] = []
164
+
165
+ for (const g of groups) {
166
+ const datum = fold && g.items.length > 1 ? fold.merge(g.items) : g.items[0]
167
+ if (datum === undefined) continue
168
+ const span = getBand(datum)
169
+ const state = states.get(span.state)
170
+ if (!state && process.env.NODE_ENV !== 'production')
171
+ throw unknownState('BandSpan.state', span.state, states.keys())
172
+ if (state && !visible.has(span.state)) continue
173
+ const cell = { f0: g.start / data.length, f1: (g.start + g.items.length) / data.length }
174
+ const opacity = input.emphasis(span.state)
175
+ paintInto(
176
+ base,
177
+ span.fill ?? (state ? alpha(state.color, state.fillOpacity ?? 1) : UNKNOWN_FILL),
178
+ opacity,
179
+ { ...cell, y0: 0, y1: 1 },
180
+ )
181
+
182
+ if (span.marker) {
183
+ const markerKey = span.marker.state ?? span.state
184
+ const markerState = states.get(markerKey)
185
+ if (!markerState && process.env.NODE_ENV !== 'production')
186
+ throw unknownState('BandSpan.marker.state', markerKey, states.keys())
187
+ if (!markerState || visible.has(markerKey)) {
188
+ const inset = (span.marker.inset ?? DEFAULT_MARKER_INSET) / Math.max(input.height, 1)
189
+ paintInto(markers, markerState?.color ?? UNKNOWN_FILL, input.emphasis(markerKey), {
190
+ ...cell,
191
+ y0: inset,
192
+ y1: 1 - inset,
193
+ })
194
+ }
195
+ }
196
+ // An unknown state (production only) answers no pointer: a tooltip row needs its series.
197
+ if (state) for (const source of g.items) hits.push({ source, state: span.state, datum })
198
+ }
199
+ return { base: [...base.values()], markers: [...markers.values()], hits }
200
+ }
201
+
202
+ export function BandStrip<T, X extends ChartX = ChartX>(props: BandStripProps<T, X>): ReactElement {
203
+ const { states, getBand, fold, cursorResolution = 'leading', tooltip, ...rest } = props
204
+ const { data, x } = rest
205
+
206
+ const series = useMemo<ChartSeries<T>[]>(
207
+ () =>
208
+ states.map((s) => ({
209
+ key: s.key,
210
+ label: s.label,
211
+ color: s.color,
212
+ mark: 'bar' as const,
213
+ ...(s.tooltip !== undefined && { tooltip: s.tooltip }),
214
+ ...(s.legend !== undefined && { legend: s.legend }),
215
+ ...(s.note !== undefined && { note: s.note }),
216
+ getValue: (d) => (getBand(d).state === s.key ? 1 : null),
217
+ formatValue: (_v, d) => (s.formatValue ? (s.formatValue(d) ?? NON_FINITE) : ''),
218
+ })),
219
+ [states, getBand],
220
+ )
221
+
222
+ const marks = useCallback(
223
+ (plot: PlotContext<T, X>): ChartMarks => {
224
+ const { base, markers, hits } = layoutBands({
225
+ data,
226
+ getBand,
227
+ fold,
228
+ states: new Map(states.map((s) => [s.key, s])),
229
+ visible: new Set(plot.visible.map((s) => s.key)),
230
+ width: plot.width,
231
+ height: plot.height,
232
+ emphasis: (key) => emphasis(plot.highlighted, { key }),
233
+ })
234
+ const rows: PlotRow<T, X>[] = hits.map((h) => ({
235
+ x: x(h.source),
236
+ y: 1,
237
+ series: h.state,
238
+ datum: h.datum,
239
+ }))
240
+ return [
241
+ ...[...base, ...markers].map(({ fill, opacity, cells }, i) =>
242
+ decorative(
243
+ rect(cells, {
244
+ id: `band-${i}`,
245
+ x1: 'f0',
246
+ x2: 'f1',
247
+ y1: 'y0',
248
+ y2: 'y1',
249
+ xScale: 'zx',
250
+ fill,
251
+ inset: 0,
252
+ ...(opacity < 1 && { fillOpacity: opacity }),
253
+ }),
254
+ ),
255
+ ),
256
+ ...(rows.length > 0
257
+ ? [barY(rows, { id: 'hit', x: rowX, y1: 0, y2: 1, fill: 'transparent' })]
258
+ : []),
259
+ ]
260
+ },
261
+ [states, getBand, fold, data, x],
262
+ )
263
+
264
+ return (
265
+ <CartesianRung
266
+ {...rest}
267
+ series={series}
268
+ marks={marks}
269
+ band
270
+ y={STRIP_AXIS}
271
+ xZones={ZX_ANCHOR}
272
+ cursorResolution={cursorResolution}
273
+ {...(tooltip !== undefined && { tooltip })}
274
+ />
275
+ )
276
+ }
@@ -0,0 +1,141 @@
1
+ /**
2
+ * `Bars` — bar series on a band x scale (Date, number or string), stacked, grouped or normalized,
3
+ * with line overlays on `y`/`y2` (`docs/V2-SPEC.md` § 9.3). A negative value draws below zero: a
4
+ * stack diverges around the baseline (the 1.x `negativeBars`, now just a signed value). Zones,
5
+ * reference lines, legend, cursor and tooltip are the rung's.
6
+ */
7
+ import { barY } from '@tanstack/charts/bar'
8
+ import { group } from '@tanstack/charts/group'
9
+ import { stack } from '@tanstack/charts/stack'
10
+ import { useCallback, useMemo } from 'react'
11
+ import type { ReactElement } from 'react'
12
+ import { CartesianRung } from './CartesianChart'
13
+ import { emphasis, lineMark } from './marks'
14
+ import { rowX } from './types'
15
+ import type {
16
+ CartesianChartProps,
17
+ ChartMarks,
18
+ ChartSeries,
19
+ ChartX,
20
+ PlotContext,
21
+ PlotRow,
22
+ } from './types'
23
+
24
+ /** A bar series. Bars always read the left axis. */
25
+ export type BarsBar<T> = Pick<
26
+ ChartSeries<T>,
27
+ 'key' | 'label' | 'color' | 'getValue' | 'formatValue' | 'tooltip' | 'legend' | 'role' | 'note'
28
+ > & {
29
+ /** Default 0.85. */
30
+ fillOpacity?: number
31
+ }
32
+
33
+ /** A line overlay; `axis: 'right'` reads the chart's `y2`. */
34
+ export type BarsLine<T> = Pick<
35
+ ChartSeries<T>,
36
+ | 'key'
37
+ | 'label'
38
+ | 'color'
39
+ | 'getValue'
40
+ | 'formatValue'
41
+ | 'tooltip'
42
+ | 'legend'
43
+ | 'role'
44
+ | 'note'
45
+ | 'axis'
46
+ | 'dash'
47
+ | 'curve'
48
+ | 'strokeWidth'
49
+ | 'strokeOpacity'
50
+ >
51
+
52
+ export type BarsProps<T, X extends ChartX = ChartX> = Omit<
53
+ CartesianChartProps<T, X>,
54
+ 'marks' | 'series'
55
+ > & {
56
+ bars: readonly BarsBar<T>[]
57
+ lines?: readonly BarsLine<T>[]
58
+ /** Default `'stacked'`. `'normalized'` stacks each x to its share of the total. */
59
+ layout?: 'stacked' | 'grouped' | 'normalized'
60
+ /** Per-bar opacity (a partial week, an estimate). Overrides the series' `fillOpacity`. */
61
+ barOpacity?: (d: T, key: string) => number
62
+ }
63
+
64
+ const DEFAULT_BAR_OPACITY = 0.85
65
+
66
+ const paint = (color: string, opacity: number): string =>
67
+ opacity >= 1 ? color : `color-mix(in srgb, ${color} ${Math.round(opacity * 100)}%, transparent)`
68
+
69
+ let warnedLogStack = false
70
+
71
+ /** A stack sums bar heights and a log axis has no additive zero to sum from (V2-SPEC § 9.9): dev
72
+ * throws, production logs once and draws what it can. Lines-only and grouped charts are fine. */
73
+ function guardLogStack(layout: string, onLog: boolean): void {
74
+ if (!onLog || layout === 'grouped') return
75
+ const message = `Bars: ${layout} bars cannot use a log axis; use layout: 'grouped'`
76
+ if (process.env.NODE_ENV !== 'production') throw new Error(message)
77
+ // oxlint-disable-next-line no-console -- the production leg of a dev-only throw
78
+ if (!warnedLogStack) console.error(message)
79
+ warnedLogStack = true
80
+ }
81
+
82
+ export function Bars<T, X extends ChartX = ChartX>(props: BarsProps<T, X>): ReactElement {
83
+ const { bars, lines, layout = 'stacked', barOpacity, ...rest } = props
84
+ guardLogStack(layout, bars.length > 0 && rest.y?.scale === 'log')
85
+ const series = useMemo<ChartSeries<T>[]>(
86
+ () => [
87
+ ...bars.map((b) => ({ ...b, mark: 'bar' as const })),
88
+ ...(lines ?? []).map((l) => ({ ...l, mark: 'line' as const })),
89
+ ],
90
+ [bars, lines],
91
+ )
92
+
93
+ const marks = useCallback(
94
+ (plot: PlotContext<T, X>): ChartMarks => {
95
+ const barKeys = new Set(bars.map((b) => b.key))
96
+ const visibleBars = plot.visible.filter((s) => barKeys.has(s.key))
97
+ const byKey = new Map(bars.map((b) => [b.key, b]))
98
+ const rows = visibleBars.flatMap((s) => plot.rows(s.key))
99
+ const h = plot.highlighted
100
+ const fill = (row: PlotRow<T, X>): string => {
101
+ const bar = byKey.get(row.series)
102
+ if (!bar) return 'transparent'
103
+ const base = barOpacity?.(row.datum, row.series) ?? bar.fillOpacity ?? DEFAULT_BAR_OPACITY
104
+ return paint(bar.color, base * emphasis(h, { key: row.series }))
105
+ }
106
+ const order = visibleBars.map((s) => s.key)
107
+ const out: ChartMarks[number][] = []
108
+ if (rows.length > 0)
109
+ out.push(
110
+ barY(rows, {
111
+ id: 'bars',
112
+ x: rowX,
113
+ y: 'y',
114
+ z: 'series',
115
+ fill,
116
+ layout:
117
+ layout === 'grouped'
118
+ ? group({ padding: 0.1 })
119
+ : stack({ order, ...(layout === 'normalized' && { offset: 'normalize' }) }),
120
+ }),
121
+ )
122
+ for (const s of plot.visible) {
123
+ if (barKeys.has(s.key)) continue
124
+ out.push(lineMark(plot, s))
125
+ }
126
+ return out
127
+ },
128
+ [bars, layout, barOpacity],
129
+ )
130
+
131
+ return (
132
+ <CartesianRung
133
+ {...rest}
134
+ series={series}
135
+ marks={marks}
136
+ band
137
+ reverseRows={layout !== 'grouped'}
138
+ {...(layout !== 'grouped' && { stack: layout })}
139
+ />
140
+ )
141
+ }
@@ -0,0 +1,206 @@
1
+ /**
2
+ * `CartesianChart` — the one cartesian rung (`docs/V2-SPEC.md` § 9.2): a definition compiler plus
3
+ * one host. Every cartesian kind is this component with fixed `marks`.
4
+ *
5
+ * Three layers, composed here and nowhere else: the width hook (`sizing.ts`), the bare engine mount
6
+ * in its CSS-owned box (`host.tsx`, `box.tsx`: the height exists before JS runs), and the chrome —
7
+ * the derived legend (its mode picked in CSS) and the `state` placeholders — around both.
8
+ */
9
+ import { useCallback, useId, useMemo, useState } from 'react'
10
+ import type { CSSProperties, ReactElement, ReactNode } from 'react'
11
+ import { useInChartCard } from './card-context'
12
+ import { compileCartesian } from './compile'
13
+ import type { CartesianDefinition } from './compile'
14
+ import { ChartEngine, idPrefixOf } from './host'
15
+ import { ChartLegend, legendEntries } from './legend'
16
+ import { INITIAL_WIDTH, useChartSize } from './sizing'
17
+ import { ChartPlaceholder, resolveChartState } from './state'
18
+ import type { CartesianChartProps, ChartSeries, ChartX } from './types'
19
+
20
+ /** Kind-only compile switches, never on the public props. */
21
+ export type RungOptions = {
22
+ /** A band x scale (bars). */
23
+ band?: boolean
24
+ /** Tooltip rows bottom-up, so a stack reads top-down. */
25
+ reverseRows?: boolean
26
+ /** How the bar series combine for the auto domain. */
27
+ stack?: 'stacked' | 'normalized'
28
+ }
29
+
30
+ // A size container: the legend picks none/dots/chips from this box's width in CSS, so the server
31
+ // HTML already carries the right one (`chart-legend.module.css`).
32
+ const rootStyle: CSSProperties = {
33
+ display: 'flex',
34
+ flexDirection: 'column',
35
+ gap: 6,
36
+ // `width: 100%` because a size container cannot take its width from its content: without it
37
+ // the root collapses to 0 in a flex row or an auto grid track.
38
+ width: '100%',
39
+ minWidth: 0,
40
+ containerType: 'inline-size',
41
+ }
42
+ // A `placement: 'header'` legend inside a `ChartCard` sits where the header's legend row did: the
43
+ // header's 4px bottom inset plus the row's 6px top padding is 10px, less the body's own 2px top inset.
44
+ const headerLegendStyle: CSSProperties = { marginTop: 8 }
45
+
46
+ /** `useId` output (`«r1»`, `:r1:`) is not a safe SVG id fragment. */
47
+
48
+ /** The previous object while every field is `Object.is`-equal: a one-dependency memo key. */
49
+ function useShallowStable<V extends Record<string, unknown>>(next: V): V {
50
+ const [kept, setKept] = useState(next)
51
+ // Union of keys: an omitted prop and an explicit `undefined` are different inputs.
52
+ const same = [...new Set([...Object.keys(kept), ...Object.keys(next)])].every((k) =>
53
+ Object.is(kept[k], next[k]),
54
+ )
55
+ // Render-phase setState: React re-renders at once with `kept` replaced, no effect, no stale frame.
56
+ if (!same) setKept(next)
57
+ return same ? kept : next
58
+ }
59
+
60
+ /** What a chart's definition is compiled from, besides its own props: the chrome's live state. */
61
+ export type ShellContext = {
62
+ /** Unique per mounted chart (React `useId`). */
63
+ chartId: string
64
+ /** Series keys the legend has toggled off. */
65
+ hidden: ReadonlySet<string>
66
+ /** The legend entry under the pointer. */
67
+ highlighted: string | null
68
+ /** A coarse primary pointer. */
69
+ coarse: boolean
70
+ /** The measured width; 0 unless the shell was asked to track it (`byWidth`). */
71
+ width: number
72
+ }
73
+
74
+ export type ChartShellProps<T> = Pick<
75
+ CartesianChartProps<T, ChartX>,
76
+ 'ariaLabel' | 'legend' | 'height' | 'state' | 'className' | 'style'
77
+ > & {
78
+ /** The legend and tooltip source. */
79
+ series: readonly ChartSeries<T>[]
80
+ /** Compiles the definition; memoized on its own identity and the context. Keep it stable. */
81
+ compile: (ctx: ShellContext) => CartesianDefinition
82
+ /** Recompile when the measured width changes (default: it is not an input). */
83
+ byWidth?: boolean
84
+ }
85
+
86
+ /**
87
+ * The chrome around every chart: size, the `hidden`/`highlighted` legend state, the derived legend
88
+ * (and its `ChartCard` header slot), the `state` placeholders and the engine mount. The rung and
89
+ * the composed kinds differ only in the definition they compile.
90
+ */
91
+ export function ChartShell<T>(props: ChartShellProps<T>): ReactElement {
92
+ const { ariaLabel, legend, height, state, className, style, series, compile, byWidth } = props
93
+ const chartId = useId()
94
+ const inCard = useInChartCard()
95
+ const { ref, width: measured, coarse } = useChartSize()
96
+ const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set())
97
+ const [highlighted, setHighlighted] = useState<string | null>(null)
98
+
99
+ // Unmeasured (the server, the first client frame) is the regular class, as the engine's
100
+ // `initialWidth` is.
101
+ const width = byWidth ? measured || INITIAL_WIDTH : 0
102
+ const definition = useMemo(
103
+ () => compile({ chartId, hidden, highlighted, coarse, width }),
104
+ [compile, chartId, hidden, highlighted, coarse, width],
105
+ )
106
+
107
+ // ── legend: micro has none, compact shows dots, regular and wide show chips (CSS, § 9.6) ──────
108
+ const config = legend === false ? null : (legend ?? {})
109
+ const entryCount = legendEntries(series, false)[0]?.length ?? 0
110
+ const shown = config !== null && entryCount > 0
111
+ const toggle = config?.toggle ?? entryCount >= 2
112
+ const onToggle = useCallback((key: string) => {
113
+ setHidden((prev) => {
114
+ const next = new Set(prev)
115
+ if (!next.delete(key)) next.add(key)
116
+ return next
117
+ })
118
+ }, [])
119
+ const legendNode: ReactNode = useMemo(
120
+ () =>
121
+ shown ? (
122
+ <ChartLegend
123
+ series={series}
124
+ hidden={hidden}
125
+ mode="auto"
126
+ groups={config?.groups === true}
127
+ toggle={toggle}
128
+ onToggle={onToggle}
129
+ onHighlight={setHighlighted}
130
+ />
131
+ ) : null,
132
+ [shown, series, hidden, config?.groups, toggle, onToggle],
133
+ )
134
+ // `header` is the enclosing card's header row (`top` outside a card); either way the legend is
135
+ // the first thing in the chart's own markup.
136
+ const atTop = config?.placement === 'top' || config?.placement === 'header'
137
+ const asHeaderRow = config?.placement === 'header' && inCard
138
+
139
+ const resolved = resolveChartState(state)
140
+ return (
141
+ <div
142
+ ref={ref}
143
+ data-basalt-chart=""
144
+ {...(className !== undefined && { className })}
145
+ style={style ? { ...rootStyle, ...style } : rootStyle}
146
+ >
147
+ {atTop && (asHeaderRow ? <div style={headerLegendStyle}>{legendNode}</div> : legendNode)}
148
+ {resolved === null ? (
149
+ <ChartEngine
150
+ definition={definition}
151
+ ariaLabel={ariaLabel}
152
+ height={height}
153
+ idPrefix={idPrefixOf(chartId)}
154
+ coarse={coarse}
155
+ />
156
+ ) : (
157
+ <ChartPlaceholder state={state} height={height} />
158
+ )}
159
+ {!atTop && legendNode}
160
+ </div>
161
+ )
162
+ }
163
+
164
+ export function CartesianRung<T, X extends ChartX>(
165
+ props: CartesianChartProps<T, X> & RungOptions,
166
+ ): ReactElement {
167
+ const { ariaLabel, legend, height, state, className, style, series, ...spec } = props
168
+ const stable = useShallowStable({ ...spec, series })
169
+ const compile = useCallback(
170
+ (ctx: ShellContext) => compileCartesian({ ...stable, ...ctx }),
171
+ [stable],
172
+ )
173
+ return (
174
+ <ChartShell
175
+ series={series}
176
+ compile={compile}
177
+ ariaLabel={ariaLabel}
178
+ {...(legend !== undefined && { legend })}
179
+ {...(height !== undefined && { height })}
180
+ {...(state !== undefined && { state })}
181
+ {...(className !== undefined && { className })}
182
+ {...(style !== undefined && { style })}
183
+ />
184
+ )
185
+ }
186
+
187
+ /**
188
+ * The cartesian rung with consumer marks. Required `ariaLabel`; `marks(plot)` returns TanStack
189
+ * marks imported from the allowed `@tanstack/charts/*` subpaths, drawn from `plot.rows(key)`.
190
+ *
191
+ * ```tsx
192
+ * import { lineY } from '@tanstack/charts/line'
193
+ * <CartesianChart
194
+ * ariaLabel="Load"
195
+ * data={rows}
196
+ * x={(d) => d.at}
197
+ * series={[{ key: 'load', label: 'Load', color: VX.line, getValue: (d) => d.load }]}
198
+ * marks={(plot) => [lineY(plot.rows('load'), { x: 'x', y: 'y', stroke: VX.line })]}
199
+ * />
200
+ * ```
201
+ */
202
+ export function CartesianChart<T, X extends ChartX>(
203
+ props: CartesianChartProps<T, X>,
204
+ ): ReactElement {
205
+ return <CartesianRung {...props} />
206
+ }