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
@@ -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
+ }