basalt-ui 1.41.0 → 2.0.1

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