basalt-ui 1.40.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (923) hide show
  1. package/AGENTS.md +50 -45
  2. package/CHANGELOG.md +543 -513
  3. package/MIGRATING.md +969 -37
  4. package/README.md +172 -367
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +30 -0
  15. package/agent/templates/DESIGN.md.tpl +2 -2
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/check.yml +1 -1
  20. package/configs/oxlint-basalt.json +4 -10
  21. package/configs/oxlint-plugin.js +468 -847
  22. package/configs/oxlint-plugin.test.ts +662 -710
  23. package/configs/oxlint.json +10 -2
  24. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  25. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  26. package/dist/agent/ai-sdk-transport.js +10 -7
  27. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  28. package/dist/agent/chat/composer.d.ts.map +1 -0
  29. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  30. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  31. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  32. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  33. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  34. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  35. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  36. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  37. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  38. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  39. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  40. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  41. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  42. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  43. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  44. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  45. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  46. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  47. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  48. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  49. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  50. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  51. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  52. package/dist/agent/error.d.ts +31 -0
  53. package/dist/agent/error.d.ts.map +1 -0
  54. package/dist/agent/error.js +18 -0
  55. package/dist/agent/foreign.d.ts +3 -2
  56. package/dist/agent/foreign.d.ts.map +1 -1
  57. package/dist/agent/history.d.ts +2 -36
  58. package/dist/agent/history.d.ts.map +1 -1
  59. package/dist/agent/history.js +0 -32
  60. package/dist/agent/id.d.ts +4 -5
  61. package/dist/agent/id.d.ts.map +1 -1
  62. package/dist/agent/index.d.ts +19 -52
  63. package/dist/agent/index.d.ts.map +1 -1
  64. package/dist/agent/index.js +10 -32
  65. package/dist/agent/outcome.d.ts +3 -14
  66. package/dist/agent/outcome.d.ts.map +1 -1
  67. package/dist/agent/outcome.js +0 -30
  68. package/dist/agent/part-list.d.ts +3 -3
  69. package/dist/agent/part-list.d.ts.map +1 -1
  70. package/dist/agent/parts.d.ts +23 -24
  71. package/dist/agent/parts.d.ts.map +1 -1
  72. package/dist/agent/run-committer.d.ts +23 -0
  73. package/dist/agent/run-committer.d.ts.map +1 -0
  74. package/dist/agent/run-committer.js +41 -0
  75. package/dist/agent/run-records.d.ts +77 -0
  76. package/dist/agent/run-records.d.ts.map +1 -0
  77. package/dist/agent/run-records.js +69 -0
  78. package/dist/agent/thread.d.ts +23 -47
  79. package/dist/agent/thread.d.ts.map +1 -1
  80. package/dist/agent/thread.js +3 -134
  81. package/dist/agent/transport.d.ts +6 -69
  82. package/dist/agent/transport.d.ts.map +1 -1
  83. package/dist/agent/transport.js +0 -18
  84. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  85. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  86. package/dist/agent/use-agent-thread-runs.js +202 -66
  87. package/dist/charts/BandStrip.d.ts +46 -0
  88. package/dist/charts/BandStrip.d.ts.map +1 -0
  89. package/dist/charts/BandStrip.js +151 -0
  90. package/dist/charts/Bars.d.ts +19 -0
  91. package/dist/charts/Bars.d.ts.map +1 -0
  92. package/dist/charts/Bars.js +77 -0
  93. package/dist/charts/CartesianChart.d.ts +57 -0
  94. package/dist/charts/CartesianChart.d.ts.map +1 -0
  95. package/dist/charts/CartesianChart.js +121 -0
  96. package/dist/charts/ChartCard.d.ts +34 -0
  97. package/dist/charts/ChartCard.d.ts.map +1 -0
  98. package/dist/charts/ChartCard.js +115 -0
  99. package/dist/charts/Donut.d.ts +25 -0
  100. package/dist/charts/Donut.d.ts.map +1 -0
  101. package/dist/charts/Donut.js +191 -0
  102. package/dist/charts/DualPanel.d.ts +47 -0
  103. package/dist/charts/DualPanel.d.ts.map +1 -0
  104. package/dist/charts/DualPanel.js +214 -0
  105. package/dist/charts/Heatmap.d.ts +41 -0
  106. package/dist/charts/Heatmap.d.ts.map +1 -0
  107. package/dist/charts/Heatmap.js +216 -0
  108. package/dist/charts/Lines.d.ts +11 -0
  109. package/dist/charts/Lines.d.ts.map +1 -0
  110. package/dist/charts/Lines.js +114 -0
  111. package/dist/charts/MirroredBars.d.ts +44 -0
  112. package/dist/charts/MirroredBars.d.ts.map +1 -0
  113. package/dist/charts/MirroredBars.js +190 -0
  114. package/dist/charts/Sparkline.d.ts +22 -0
  115. package/dist/charts/Sparkline.d.ts.map +1 -0
  116. package/dist/charts/Sparkline.js +129 -0
  117. package/dist/charts/StackedArea.d.ts +15 -0
  118. package/dist/charts/StackedArea.d.ts.map +1 -0
  119. package/dist/charts/StackedArea.js +46 -0
  120. package/dist/charts/box.d.ts +38 -0
  121. package/dist/charts/box.d.ts.map +1 -0
  122. package/dist/charts/box.js +72 -0
  123. package/dist/charts/card-context.d.ts +3 -0
  124. package/dist/charts/card-context.d.ts.map +1 -0
  125. package/dist/charts/card-context.js +7 -0
  126. package/dist/charts/chart-box.module.css +64 -0
  127. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  128. package/dist/charts/chart-card.module.css +25 -0
  129. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  130. package/dist/charts/chart-legend.module.css +38 -0
  131. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  132. package/dist/charts/compile.d.ts +62 -0
  133. package/dist/charts/compile.d.ts.map +1 -0
  134. package/dist/charts/compile.js +386 -0
  135. package/dist/charts/cursor.d.ts +50 -0
  136. package/dist/charts/cursor.d.ts.map +1 -0
  137. package/dist/charts/cursor.js +157 -0
  138. package/dist/charts/curves.d.ts +12 -0
  139. package/dist/charts/curves.d.ts.map +1 -0
  140. package/dist/charts/curves.js +86 -0
  141. package/dist/charts/donut.module.css +54 -0
  142. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  143. package/dist/charts/host.d.ts +17 -0
  144. package/dist/charts/host.d.ts.map +1 -0
  145. package/dist/charts/host.js +35 -0
  146. package/dist/charts/index.d.ts +18 -53
  147. package/dist/charts/index.d.ts.map +1 -1
  148. package/dist/charts/index.js +17 -189
  149. package/dist/charts/legend.d.ts +23 -0
  150. package/dist/charts/legend.d.ts.map +1 -0
  151. package/dist/charts/legend.js +160 -0
  152. package/dist/charts/marks.d.ts +25 -0
  153. package/dist/charts/marks.d.ts.map +1 -0
  154. package/dist/charts/marks.js +128 -0
  155. package/dist/charts/panel.d.ts +56 -0
  156. package/dist/charts/panel.d.ts.map +1 -0
  157. package/dist/charts/panel.js +123 -0
  158. package/dist/charts/scales.d.ts +44 -0
  159. package/dist/charts/scales.d.ts.map +1 -0
  160. package/dist/charts/scales.js +163 -0
  161. package/dist/charts/sizing.d.ts +12 -0
  162. package/dist/charts/sizing.d.ts.map +1 -0
  163. package/dist/charts/sizing.js +33 -0
  164. package/dist/charts/state.d.ts +17 -0
  165. package/dist/charts/state.d.ts.map +1 -0
  166. package/dist/charts/state.js +53 -0
  167. package/dist/charts/theme.d.ts +38 -19
  168. package/dist/charts/theme.d.ts.map +1 -1
  169. package/dist/charts/theme.js +48 -26
  170. package/dist/charts/types.d.ts +227 -0
  171. package/dist/charts/types.d.ts.map +1 -0
  172. package/dist/charts/types.js +4 -0
  173. package/dist/cli/audit-allows.d.ts +4 -17
  174. package/dist/cli/audit-allows.d.ts.map +1 -1
  175. package/dist/cli/config.d.ts +14 -43
  176. package/dist/cli/config.d.ts.map +1 -1
  177. package/dist/cli/doctor-upgrade.d.ts +31 -0
  178. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  179. package/dist/cli/doctor-upgrade.js +269 -0
  180. package/dist/cli/doctor.d.ts +13 -26
  181. package/dist/cli/doctor.d.ts.map +1 -1
  182. package/dist/cli/doctor.js +79 -8
  183. package/dist/cli/help.d.ts.map +1 -1
  184. package/dist/cli/help.js +2 -4
  185. package/dist/cli/index.d.ts +68 -135
  186. package/dist/cli/index.d.ts.map +1 -1
  187. package/dist/cli/index.js +89 -76
  188. package/dist/cli/init.d.ts.map +1 -1
  189. package/dist/cli/init.js +43 -27
  190. package/dist/cli/sync.d.ts +5 -21
  191. package/dist/cli/sync.d.ts.map +1 -1
  192. package/dist/cli/sync.js +4 -6
  193. package/dist/cli/tokens-css.d.ts +7 -28
  194. package/dist/cli/tokens-css.d.ts.map +1 -1
  195. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  196. package/dist/commands/ShortcutsHelp.js +4 -5
  197. package/dist/commands/define-commands.d.ts +15 -31
  198. package/dist/commands/define-commands.d.ts.map +1 -1
  199. package/dist/commands/define-commands.js +1 -11
  200. package/dist/commands/define-overlays.d.ts +5 -19
  201. package/dist/commands/define-overlays.d.ts.map +1 -1
  202. package/dist/commands/define-overlays.js +3 -11
  203. package/dist/commands/index.d.ts +10 -40
  204. package/dist/commands/index.d.ts.map +1 -1
  205. package/dist/commands/index.js +9 -46
  206. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  207. package/dist/commands/notifications/bell.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  209. package/dist/commands/notifications/center.d.ts.map +1 -0
  210. package/dist/{notifications → commands/notifications}/center.js +2 -2
  211. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  212. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.d.ts +44 -0
  214. package/dist/commands/notifications/notify.d.ts.map +1 -0
  215. package/dist/commands/notifications/notify.js +79 -0
  216. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  217. package/dist/commands/notifications/store.d.ts.map +1 -0
  218. package/dist/{notifications → commands/notifications}/store.js +4 -0
  219. package/dist/commands/projectors.d.ts +1 -131
  220. package/dist/commands/projectors.d.ts.map +1 -1
  221. package/dist/commands/projectors.js +2 -73
  222. package/dist/commands/shell-bridge.d.ts +3 -3
  223. package/dist/commands/shortcut-format.d.ts +5 -4
  224. package/dist/commands/shortcut-format.d.ts.map +1 -1
  225. package/dist/common/errors.d.ts +3 -3
  226. package/dist/common/use-measured-widths.d.ts.map +1 -1
  227. package/dist/common/use-measured-widths.js +5 -3
  228. package/dist/common/validate.d.ts +2 -2
  229. package/dist/content/article-layout.d.ts.map +1 -1
  230. package/dist/content/article-layout.js +3 -3
  231. package/dist/content/article-model.d.ts +1 -46
  232. package/dist/content/article-model.d.ts.map +1 -1
  233. package/dist/content/article-model.js +1 -29
  234. package/dist/content/copy-action.d.ts +1 -1
  235. package/dist/content/glyphs.d.ts +1 -1
  236. package/dist/content/index.d.ts +11 -41
  237. package/dist/content/index.d.ts.map +1 -1
  238. package/dist/content/index.js +3 -35
  239. package/dist/content/markdown.d.ts +1 -1
  240. package/dist/content/markdown.d.ts.map +1 -1
  241. package/dist/content/markdown.js +1 -1
  242. package/dist/content/mermaid.d.ts.map +1 -1
  243. package/dist/content/mermaid.js +7 -7
  244. package/dist/content/slug.d.ts +1 -8
  245. package/dist/content/slug.d.ts.map +1 -1
  246. package/dist/content/slug.js +1 -8
  247. package/dist/content/url-hardening.d.ts +2 -2
  248. package/dist/content/url-hardening.d.ts.map +1 -1
  249. package/dist/content/url-hardening.js +2 -0
  250. package/dist/controls/actions.d.ts +16 -1
  251. package/dist/controls/actions.d.ts.map +1 -1
  252. package/dist/controls/enum-filter.d.ts +1 -1
  253. package/dist/controls/enum-filter.d.ts.map +1 -1
  254. package/dist/controls/filter-context.d.ts.map +1 -1
  255. package/dist/controls/filter-context.js +3 -1
  256. package/dist/controls/filter-set.js +4 -6
  257. package/dist/controls/form-layout.d.ts +1 -1
  258. package/dist/controls/form-layout.d.ts.map +1 -1
  259. package/dist/controls/form-layout.js +1 -1
  260. package/dist/controls/glyphs.d.ts +0 -2
  261. package/dist/controls/glyphs.d.ts.map +1 -1
  262. package/dist/controls/glyphs.js +0 -7
  263. package/dist/controls/index.d.ts +12 -17
  264. package/dist/controls/index.d.ts.map +1 -1
  265. package/dist/controls/index.js +5 -39
  266. package/dist/controls/multi-select-filter.d.ts +4 -3
  267. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  268. package/dist/controls/number-filter.d.ts +4 -3
  269. package/dist/controls/number-filter.d.ts.map +1 -1
  270. package/dist/controls/number-filter.js +3 -1
  271. package/dist/controls/range-filter.d.ts +4 -3
  272. package/dist/controls/range-filter.d.ts.map +1 -1
  273. package/dist/controls/search-filter.d.ts +4 -3
  274. package/dist/controls/search-filter.d.ts.map +1 -1
  275. package/dist/controls/search-filter.js +19 -14
  276. package/dist/controls/select-filter.d.ts +4 -3
  277. package/dist/controls/select-filter.d.ts.map +1 -1
  278. package/dist/controls/sync-button.d.ts.map +1 -1
  279. package/dist/controls/sync-button.js +12 -15
  280. package/dist/controls/toggle-filter.d.ts +4 -3
  281. package/dist/controls/toggle-filter.d.ts.map +1 -1
  282. package/dist/controls/uncontrolled.d.ts +12 -0
  283. package/dist/controls/uncontrolled.d.ts.map +1 -0
  284. package/dist/controls/view-tabs.d.ts +2 -2
  285. package/dist/controls/view-tabs.d.ts.map +1 -1
  286. package/dist/controls-dates/index.d.ts +0 -1
  287. package/dist/controls-dates/index.d.ts.map +1 -1
  288. package/dist/dashboard/index.d.ts +7 -9
  289. package/dist/dashboard/index.d.ts.map +1 -1
  290. package/dist/dashboard/index.js +3 -23
  291. package/dist/dashboard/section.d.ts +4 -6
  292. package/dist/dashboard/section.d.ts.map +1 -1
  293. package/dist/dashboard/section.js +4 -10
  294. package/dist/dashboard/stat-card.d.ts +4 -4
  295. package/dist/dashboard/stat-card.d.ts.map +1 -1
  296. package/dist/dashboard/stat-card.js +3 -3
  297. package/dist/dashboard/widget-header.module.css +9 -7
  298. package/dist/dev-dock.d.ts.map +1 -1
  299. package/dist/dev-dock.js +6 -1
  300. package/dist/format/date.d.ts +0 -34
  301. package/dist/format/date.d.ts.map +1 -1
  302. package/dist/format/date.js +0 -54
  303. package/dist/format/index.d.ts +7 -22
  304. package/dist/format/index.d.ts.map +1 -1
  305. package/dist/format/index.js +2 -43
  306. package/dist/format/number.d.ts +3 -14
  307. package/dist/format/number.d.ts.map +1 -1
  308. package/dist/format/number.js +0 -13
  309. package/dist/format/shared.d.ts +2 -3
  310. package/dist/format/shared.d.ts.map +1 -1
  311. package/dist/forms/index.d.ts +0 -11
  312. package/dist/forms/index.d.ts.map +1 -1
  313. package/dist/forms/index.js +1 -14
  314. package/dist/guard/index.d.ts +6 -21
  315. package/dist/guard/index.d.ts.map +1 -1
  316. package/dist/guard/index.js +27 -115
  317. package/dist/guard/types.d.ts +7 -18
  318. package/dist/guard/types.d.ts.map +1 -1
  319. package/dist/index.d.ts +16 -48
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +21 -117
  322. package/dist/provider/create-router.d.ts +44 -0
  323. package/dist/provider/create-router.d.ts.map +1 -0
  324. package/dist/provider/create-router.js +62 -0
  325. package/dist/provider/hotkeys.d.ts +8 -0
  326. package/dist/provider/hotkeys.d.ts.map +1 -0
  327. package/dist/provider/hotkeys.js +50 -0
  328. package/dist/provider/index.d.ts +33 -110
  329. package/dist/provider/index.d.ts.map +1 -1
  330. package/dist/provider/index.js +182 -82
  331. package/dist/provider/lab-theme.d.ts.map +1 -1
  332. package/dist/provider/route-transition.d.ts +76 -0
  333. package/dist/provider/route-transition.d.ts.map +1 -0
  334. package/dist/provider/route-transition.js +98 -0
  335. package/dist/provider/spotlight-actions.d.ts +10 -0
  336. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  337. package/dist/provider/spotlight-actions.js +55 -0
  338. package/dist/provider/test-router.d.ts +6 -0
  339. package/dist/provider/test-router.d.ts.map +1 -0
  340. package/dist/provider/test-router.js +18 -0
  341. package/dist/query-client.d.ts +4 -20
  342. package/dist/query-client.d.ts.map +1 -1
  343. package/dist/query-client.js +2 -2
  344. package/dist/router-tanstack/index.d.ts +18 -64
  345. package/dist/router-tanstack/index.d.ts.map +1 -1
  346. package/dist/router-tanstack/index.js +2 -16
  347. package/dist/router-tanstack/nav.d.ts +12 -1
  348. package/dist/router-tanstack/nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/nav.js +8 -1
  350. package/dist/router-tanstack/search-store.d.ts +1 -1
  351. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  352. package/dist/router-tanstack/use-nav.d.ts +8 -9
  353. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  354. package/dist/router-tanstack/use-nav.js +20 -1
  355. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  356. package/dist/shell/app-sidebar.js +1 -1
  357. package/dist/shell/index.d.ts +31 -10
  358. package/dist/shell/index.d.ts.map +1 -1
  359. package/dist/shell/index.js +14 -3
  360. package/dist/shell/page-aside.d.ts +2 -2
  361. package/dist/shell/page-aside.d.ts.map +1 -1
  362. package/dist/shell/page-aside.js +31 -12
  363. package/dist/shell/page-bar.d.ts +2 -2
  364. package/dist/shell/page-bar.d.ts.map +1 -1
  365. package/dist/shell/page-bar.js +1 -1
  366. package/dist/state.d.ts +10 -12
  367. package/dist/state.d.ts.map +1 -1
  368. package/dist/state.js +4 -6
  369. package/dist/styles.css +107 -7
  370. package/dist/surfaces.d.ts +28 -103
  371. package/dist/surfaces.d.ts.map +1 -1
  372. package/dist/surfaces.js +54 -143
  373. package/dist/{data → table}/data-table-state.d.ts +1 -1
  374. package/dist/table/data-table-state.d.ts.map +1 -0
  375. package/dist/{data → table}/data-table-state.js +4 -3
  376. package/dist/{data → table}/data-table.d.ts +28 -49
  377. package/dist/table/data-table.d.ts.map +1 -0
  378. package/dist/{data → table}/data-table.js +74 -60
  379. package/dist/table/index.d.ts +18 -0
  380. package/dist/table/index.d.ts.map +1 -0
  381. package/dist/{data/table.js → table/index.js} +1 -1
  382. package/dist/table/query-branch.d.ts.map +1 -0
  383. package/dist/table/table-features.d.ts +69 -0
  384. package/dist/table/table-features.d.ts.map +1 -0
  385. package/dist/table/table-features.js +49 -0
  386. package/dist/telemetry.d.ts +77 -0
  387. package/dist/telemetry.d.ts.map +1 -0
  388. package/dist/telemetry.js +33 -0
  389. package/dist/theme/index.d.ts +10 -21
  390. package/dist/theme/index.d.ts.map +1 -1
  391. package/dist/theme/index.js +3 -14
  392. package/dist/theme/theme-toggle.d.ts.map +1 -1
  393. package/dist/theme/theme-toggle.js +7 -33
  394. package/dist/theme/theme-toggle.module.css +30 -0
  395. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  396. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  397. package/dist/theme-lab/derive-controls.js +5 -3
  398. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  399. package/dist/theme-lab/derive-state.js +2 -1
  400. package/dist/tokens/core.d.ts +360 -0
  401. package/dist/tokens/core.d.ts.map +1 -0
  402. package/dist/tokens/core.js +708 -0
  403. package/dist/tokens/derive.d.ts +1 -1
  404. package/dist/tokens/derive.d.ts.map +1 -1
  405. package/dist/tokens/index.d.ts +5 -373
  406. package/dist/tokens/index.d.ts.map +1 -1
  407. package/dist/tokens/index.js +8 -700
  408. package/dist/tokens/palette.d.ts +2 -6
  409. package/dist/tokens/palette.d.ts.map +1 -1
  410. package/dist/tokens/palette.js +1 -4
  411. package/dist/vite.d.ts +4 -3
  412. package/dist/vite.d.ts.map +1 -1
  413. package/llms.txt +43 -85
  414. package/package.json +77 -170
  415. package/src/agent/ai-sdk-transport.ts +57 -37
  416. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  417. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  418. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  419. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  420. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  421. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  422. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  423. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  424. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  425. package/src/agent/error.ts +43 -0
  426. package/src/agent/foreign.ts +3 -2
  427. package/src/agent/history.ts +2 -107
  428. package/src/agent/id.ts +4 -5
  429. package/src/agent/index.ts +23 -112
  430. package/src/agent/outcome.ts +3 -56
  431. package/src/agent/part-list.tsx +3 -3
  432. package/src/agent/parts.ts +23 -22
  433. package/src/agent/run-committer.ts +64 -0
  434. package/src/agent/run-records.ts +147 -0
  435. package/src/agent/thread.ts +24 -231
  436. package/src/agent/transport.ts +6 -96
  437. package/src/agent/use-agent-thread-runs.ts +364 -199
  438. package/src/charts/BandStrip.tsx +276 -0
  439. package/src/charts/Bars.tsx +141 -0
  440. package/src/charts/CartesianChart.tsx +206 -0
  441. package/src/charts/ChartCard.tsx +178 -0
  442. package/src/charts/Donut.tsx +256 -0
  443. package/src/charts/DualPanel.tsx +326 -0
  444. package/src/charts/Heatmap.tsx +282 -0
  445. package/src/charts/Lines.tsx +151 -0
  446. package/src/charts/MirroredBars.tsx +303 -0
  447. package/src/charts/Sparkline.tsx +176 -0
  448. package/src/charts/StackedArea.tsx +80 -0
  449. package/src/charts/box.tsx +96 -0
  450. package/src/charts/card-context.ts +11 -0
  451. package/src/charts/chart-box.module.css +64 -0
  452. package/src/charts/chart-box.module.css.d.ts +12 -0
  453. package/src/charts/chart-card.module.css +25 -0
  454. package/src/charts/chart-card.module.css.d.ts +8 -0
  455. package/src/charts/chart-legend.module.css +38 -0
  456. package/src/charts/chart-legend.module.css.d.ts +10 -0
  457. package/src/charts/compile.ts +585 -0
  458. package/src/charts/cursor.ts +282 -0
  459. package/src/charts/curves.ts +111 -0
  460. package/src/charts/donut.module.css +54 -0
  461. package/src/charts/donut.module.css.d.ts +9 -0
  462. package/src/charts/host.tsx +60 -0
  463. package/src/charts/index.ts +41 -178
  464. package/src/charts/legend.tsx +204 -0
  465. package/src/charts/marks.ts +201 -0
  466. package/src/charts/panel.tsx +227 -0
  467. package/src/charts/scales.ts +237 -0
  468. package/src/charts/sizing.ts +47 -0
  469. package/src/charts/state.tsx +80 -0
  470. package/src/charts/theme.ts +65 -0
  471. package/src/charts/types.ts +242 -0
  472. package/src/cli/audit-allows.ts +8 -30
  473. package/src/cli/config.ts +14 -43
  474. package/src/cli/doctor-upgrade.ts +392 -0
  475. package/src/cli/doctor.ts +120 -68
  476. package/src/cli/help.ts +2 -4
  477. package/src/cli/index.ts +161 -276
  478. package/src/cli/init.ts +60 -37
  479. package/src/cli/sync.ts +13 -45
  480. package/src/cli/tokens-css.ts +7 -28
  481. package/src/commands/ShortcutsHelp.tsx +8 -9
  482. package/src/commands/define-commands.ts +16 -43
  483. package/src/commands/define-overlays.ts +12 -36
  484. package/src/commands/index.ts +11 -94
  485. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  486. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  487. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  488. package/src/commands/notifications/notify.tsx +158 -0
  489. package/src/{notifications → commands/notifications}/store.ts +10 -2
  490. package/src/commands/projectors.ts +5 -225
  491. package/src/commands/shell-bridge.ts +5 -5
  492. package/src/commands/shortcut-format.ts +5 -4
  493. package/src/common/errors.ts +3 -3
  494. package/src/common/use-measured-widths.ts +6 -3
  495. package/src/common/validate.ts +2 -2
  496. package/src/content/article-layout.tsx +37 -38
  497. package/src/content/article-model.ts +1 -84
  498. package/src/content/copy-action.tsx +1 -1
  499. package/src/content/glyphs.tsx +1 -1
  500. package/src/content/index.ts +12 -83
  501. package/src/content/markdown.tsx +4 -3
  502. package/src/content/mermaid.tsx +9 -7
  503. package/src/content/slug.ts +1 -16
  504. package/src/content/url-hardening.ts +8 -2
  505. package/src/controls/actions.tsx +24 -1
  506. package/src/controls/enum-filter.tsx +1 -1
  507. package/src/controls/filter-context.tsx +3 -1
  508. package/src/controls/filter-set.tsx +5 -7
  509. package/src/controls/form-layout.tsx +2 -2
  510. package/src/controls/glyphs.tsx +0 -10
  511. package/src/controls/index.ts +13 -64
  512. package/src/controls/multi-select-filter.tsx +5 -4
  513. package/src/controls/number-filter.tsx +8 -4
  514. package/src/controls/range-filter.tsx +5 -4
  515. package/src/controls/search-filter.tsx +25 -19
  516. package/src/controls/select-filter.tsx +5 -4
  517. package/src/controls/sync-button.tsx +18 -20
  518. package/src/controls/toggle-filter.tsx +5 -4
  519. package/src/controls/uncontrolled.ts +12 -0
  520. package/src/controls/view-tabs.tsx +3 -3
  521. package/src/controls-dates/date-range-picker.tsx +1 -1
  522. package/src/controls-dates/index.ts +0 -1
  523. package/src/dashboard/index.ts +7 -48
  524. package/src/dashboard/section.tsx +11 -40
  525. package/src/dashboard/stat-card.tsx +14 -16
  526. package/src/dashboard/widget-header.module.css +9 -7
  527. package/src/dev-dock.tsx +14 -27
  528. package/src/format/date.ts +2 -92
  529. package/src/format/index.ts +7 -53
  530. package/src/format/number.ts +3 -26
  531. package/src/format/shared.ts +2 -3
  532. package/src/forms/index.ts +0 -23
  533. package/src/guard/index.ts +37 -192
  534. package/src/guard/types.ts +6 -19
  535. package/src/index.ts +30 -282
  536. package/src/provider/create-router.tsx +138 -0
  537. package/src/provider/hotkeys.ts +70 -0
  538. package/src/provider/index.tsx +260 -230
  539. package/src/provider/lab-theme.ts +3 -2
  540. package/src/provider/route-transition.ts +199 -0
  541. package/src/provider/spotlight-actions.tsx +69 -0
  542. package/src/provider/test-router.tsx +25 -0
  543. package/src/query-client.ts +4 -22
  544. package/src/router-tanstack/index.ts +18 -112
  545. package/src/router-tanstack/nav.ts +28 -2
  546. package/src/router-tanstack/search-store.ts +9 -2
  547. package/src/router-tanstack/use-nav.ts +47 -13
  548. package/src/shell/app-mobile-nav.tsx +3 -2
  549. package/src/shell/app-sidebar.tsx +1 -1
  550. package/src/shell/aside-docking.ts +1 -1
  551. package/src/shell/index.tsx +61 -20
  552. package/src/shell/page-aside.tsx +47 -23
  553. package/src/shell/page-bar.tsx +3 -3
  554. package/src/shell/page-title.tsx +1 -1
  555. package/src/state.ts +11 -37
  556. package/src/styles.css +107 -7
  557. package/src/surfaces.ts +56 -151
  558. package/src/{data → table}/data-table-state.ts +5 -4
  559. package/src/{data → table}/data-table.tsx +170 -161
  560. package/src/table/index.ts +18 -0
  561. package/src/table/table-features.ts +102 -0
  562. package/src/telemetry.ts +110 -0
  563. package/src/theme/index.ts +22 -47
  564. package/src/theme/theme-toggle.module.css +30 -0
  565. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  566. package/src/theme/theme-toggle.tsx +15 -43
  567. package/src/theme-lab/derive-controls.tsx +5 -3
  568. package/src/theme-lab/derive-state.ts +2 -1
  569. package/src/tokens/core.ts +1163 -0
  570. package/src/tokens/derive.ts +1 -1
  571. package/src/tokens/index.ts +14 -1181
  572. package/src/tokens/palette.ts +3 -7
  573. package/src/vite.ts +3 -3
  574. package/agent/templates/CLAUDE-block.md.tpl +0 -40
  575. package/agent/templates/query-client.ts.tpl +0 -26
  576. package/dist/agent/adapter.d.ts +0 -150
  577. package/dist/agent/adapter.d.ts.map +0 -1
  578. package/dist/agent/adapter.js +0 -482
  579. package/dist/agent/use-agent-stream.d.ts +0 -35
  580. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  581. package/dist/agent/use-agent-stream.js +0 -59
  582. package/dist/agent-chat/composer.d.ts.map +0 -1
  583. package/dist/agent-chat/index.d.ts +0 -31
  584. package/dist/agent-chat/index.d.ts.map +0 -1
  585. package/dist/agent-chat/index.js +0 -19
  586. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  587. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  589. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  590. package/dist/agent-chat/thread-detail-panel.js +0 -115
  591. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  592. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  593. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  594. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  595. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  596. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  597. package/dist/agent-chat/thread-workspace.js +0 -153
  598. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  599. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  600. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  601. package/dist/charts/cursor/resolve.d.ts +0 -75
  602. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  603. package/dist/charts/cursor/resolve.js +0 -91
  604. package/dist/charts/cursor/scope.d.ts +0 -20
  605. package/dist/charts/cursor/scope.d.ts.map +0 -1
  606. package/dist/charts/cursor/scope.js +0 -20
  607. package/dist/charts/cursor/store.d.ts +0 -35
  608. package/dist/charts/cursor/store.d.ts.map +0 -1
  609. package/dist/charts/cursor/store.js +0 -25
  610. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  611. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  612. package/dist/charts/cursor/touch-pin.js +0 -79
  613. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  614. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  616. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  617. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  618. package/dist/charts/hooks/use-hysteresis.js +0 -12
  619. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  620. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  621. package/dist/charts/hooks/useBandPlot.js +0 -178
  622. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  623. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  624. package/dist/charts/hooks/useChartCursor.js +0 -200
  625. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  626. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  627. package/dist/charts/hooks/useChartSize.js +0 -8
  628. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  629. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  630. package/dist/charts/kinds/BandStrip.js +0 -241
  631. package/dist/charts/kinds/Bars.d.ts +0 -141
  632. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  633. package/dist/charts/kinds/Bars.js +0 -343
  634. package/dist/charts/kinds/Donut.d.ts +0 -77
  635. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  636. package/dist/charts/kinds/Donut.js +0 -245
  637. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  638. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  639. package/dist/charts/kinds/DualPanel.js +0 -471
  640. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  641. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  642. package/dist/charts/kinds/Heatmap.js +0 -243
  643. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  644. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  645. package/dist/charts/kinds/MirroredBars.js +0 -292
  646. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  647. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  648. package/dist/charts/kinds/MultiLine.js +0 -176
  649. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  650. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  651. package/dist/charts/kinds/StackedArea.js +0 -135
  652. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  653. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  654. package/dist/charts/kinds/ZonedLine.js +0 -155
  655. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  656. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  657. package/dist/charts/kinds/band-chrome.js +0 -71
  658. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  659. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  660. package/dist/charts/kinds/donut-layout.js +0 -52
  661. package/dist/charts/layout/auto-margin.d.ts +0 -122
  662. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  663. package/dist/charts/layout/auto-margin.js +0 -81
  664. package/dist/charts/layout/end-labels.d.ts +0 -64
  665. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  666. package/dist/charts/layout/end-labels.js +0 -76
  667. package/dist/charts/layout/log-ticks.d.ts +0 -27
  668. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  669. package/dist/charts/layout/log-ticks.js +0 -42
  670. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  671. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  672. package/dist/charts/primitives/AreaGradient.js +0 -13
  673. package/dist/charts/primitives/Axes.d.ts +0 -83
  674. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  675. package/dist/charts/primitives/Axes.js +0 -168
  676. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  677. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  678. package/dist/charts/primitives/CartesianChart.js +0 -549
  679. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  680. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartCard.js +0 -143
  682. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  683. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartFrame.js +0 -241
  685. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  686. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  687. package/dist/charts/primitives/ChartLegend.js +0 -292
  688. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  689. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  690. package/dist/charts/primitives/ChartPending.js +0 -117
  691. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  692. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  693. package/dist/charts/primitives/ChartTooltip.js +0 -197
  694. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  695. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  696. package/dist/charts/primitives/Crosshair.js +0 -23
  697. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  698. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  699. package/dist/charts/primitives/HatchPattern.js +0 -31
  700. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  701. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  702. package/dist/charts/primitives/HoverOverlay.js +0 -72
  703. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  704. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  705. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  706. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  707. package/dist/charts/primitives/XZoneRects.js +0 -65
  708. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  709. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  710. package/dist/charts/primitives/ZoneRects.js +0 -30
  711. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  712. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-card-context.js +0 -18
  714. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  715. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  716. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  717. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  718. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  719. package/dist/charts/primitives/chart-layout.js +0 -175
  720. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  721. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  722. package/dist/charts/primitives/chart-tier.js +0 -44
  723. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  724. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  725. package/dist/charts/primitives/legend-disclosure.js +0 -153
  726. package/dist/charts/series.d.ts +0 -189
  727. package/dist/charts/series.d.ts.map +0 -1
  728. package/dist/charts/series.js +0 -84
  729. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  730. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  731. package/dist/charts/sparklines/BarSparkline.js +0 -53
  732. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  733. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  734. package/dist/charts/sparklines/LineSparkline.js +0 -51
  735. package/dist/charts/sparklines/index.d.ts +0 -3
  736. package/dist/charts/sparklines/index.d.ts.map +0 -1
  737. package/dist/charts/sparklines/index.js +0 -6
  738. package/dist/charts/utils/domain.d.ts +0 -35
  739. package/dist/charts/utils/domain.d.ts.map +0 -1
  740. package/dist/charts/utils/domain.js +0 -12
  741. package/dist/charts/utils/format.d.ts +0 -8
  742. package/dist/charts/utils/format.d.ts.map +0 -1
  743. package/dist/charts/utils/format.js +0 -20
  744. package/dist/charts/utils/measure-text.d.ts +0 -25
  745. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  746. package/dist/charts/utils/measure-text.js +0 -64
  747. package/dist/charts/utils/ticks.d.ts +0 -103
  748. package/dist/charts/utils/ticks.d.ts.map +0 -1
  749. package/dist/charts/utils/ticks.js +0 -92
  750. package/dist/commands/overlays-mount.d.ts +0 -122
  751. package/dist/commands/overlays-mount.d.ts.map +0 -1
  752. package/dist/commands/overlays-mount.js +0 -125
  753. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  754. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  755. package/dist/commands/useCommandHotkeys.js +0 -45
  756. package/dist/content/article-actions.d.ts +0 -39
  757. package/dist/content/article-actions.d.ts.map +0 -1
  758. package/dist/content/article-actions.js +0 -28
  759. package/dist/content/article-card.d.ts +0 -58
  760. package/dist/content/article-card.d.ts.map +0 -1
  761. package/dist/content/article-card.js +0 -79
  762. package/dist/content/article-card.module.css +0 -111
  763. package/dist/content/mdx.d.ts +0 -20
  764. package/dist/content/mdx.d.ts.map +0 -1
  765. package/dist/content/mdx.js +0 -64
  766. package/dist/controls/compare-filter.d.ts +0 -42
  767. package/dist/controls/compare-filter.d.ts.map +0 -1
  768. package/dist/controls/compare-filter.js +0 -38
  769. package/dist/controls/slider-control.d.ts +0 -36
  770. package/dist/controls/slider-control.d.ts.map +0 -1
  771. package/dist/controls/slider-control.js +0 -64
  772. package/dist/dashboard/widget-grid.d.ts +0 -27
  773. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  774. package/dist/dashboard/widget-grid.js +0 -40
  775. package/dist/dashboard/widget-grid.module.css +0 -69
  776. package/dist/data/data-table-state.d.ts.map +0 -1
  777. package/dist/data/data-table.d.ts.map +0 -1
  778. package/dist/data/query-branch.d.ts.map +0 -1
  779. package/dist/data/table.d.ts +0 -24
  780. package/dist/data/table.d.ts.map +0 -1
  781. package/dist/data/virtual-list.d.ts +0 -133
  782. package/dist/data/virtual-list.d.ts.map +0 -1
  783. package/dist/data/virtual-list.js +0 -157
  784. package/dist/data/virtual.d.ts +0 -21
  785. package/dist/data/virtual.d.ts.map +0 -1
  786. package/dist/data/virtual.js +0 -4
  787. package/dist/forms/FormErrorSummary.d.ts +0 -30
  788. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  789. package/dist/forms/FormErrorSummary.js +0 -30
  790. package/dist/forms/use-field-array.d.ts +0 -60
  791. package/dist/forms/use-field-array.d.ts.map +0 -1
  792. package/dist/forms/use-field-array.js +0 -20
  793. package/dist/forms/use-form-draft.d.ts +0 -76
  794. package/dist/forms/use-form-draft.d.ts.map +0 -1
  795. package/dist/forms/use-form-draft.js +0 -92
  796. package/dist/forms/use-form-submit.d.ts +0 -88
  797. package/dist/forms/use-form-submit.d.ts.map +0 -1
  798. package/dist/forms/use-form-submit.js +0 -63
  799. package/dist/notifications/bell.d.ts.map +0 -1
  800. package/dist/notifications/center.d.ts.map +0 -1
  801. package/dist/notifications/define-notifications.d.ts.map +0 -1
  802. package/dist/notifications/index.d.ts +0 -40
  803. package/dist/notifications/index.d.ts.map +0 -1
  804. package/dist/notifications/index.js +0 -54
  805. package/dist/notifications/mount-guard.d.ts +0 -8
  806. package/dist/notifications/mount-guard.d.ts.map +0 -1
  807. package/dist/notifications/mount-guard.js +0 -18
  808. package/dist/notifications/notify.d.ts +0 -149
  809. package/dist/notifications/notify.d.ts.map +0 -1
  810. package/dist/notifications/notify.js +0 -171
  811. package/dist/notifications/store.d.ts.map +0 -1
  812. package/dist/provider/connectivity-indicator.d.ts +0 -13
  813. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  814. package/dist/provider/connectivity-indicator.js +0 -205
  815. package/dist/provider/connectivity-provider.d.ts +0 -7
  816. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  817. package/dist/provider/connectivity-provider.js +0 -128
  818. package/dist/provider/connectivity-types.d.ts +0 -36
  819. package/dist/provider/connectivity-types.d.ts.map +0 -1
  820. package/dist/provider/use-connectivity.d.ts +0 -3
  821. package/dist/provider/use-connectivity.d.ts.map +0 -1
  822. package/dist/provider/use-connectivity.js +0 -14
  823. package/dist/query-devtools.d.ts +0 -21
  824. package/dist/query-devtools.d.ts.map +0 -1
  825. package/dist/query-devtools.js +0 -13
  826. package/src/agent/adapter.ts +0 -945
  827. package/src/agent/use-agent-stream.ts +0 -154
  828. package/src/agent-chat/index.ts +0 -54
  829. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  830. package/src/agent-chat/thread-workspace.tsx +0 -279
  831. package/src/charts/cursor/resolve.ts +0 -198
  832. package/src/charts/cursor/scope.tsx +0 -35
  833. package/src/charts/cursor/store.ts +0 -58
  834. package/src/charts/cursor/touch-pin.ts +0 -138
  835. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  836. package/src/charts/hooks/use-hysteresis.ts +0 -26
  837. package/src/charts/hooks/useBandPlot.ts +0 -383
  838. package/src/charts/hooks/useChartCursor.ts +0 -367
  839. package/src/charts/hooks/useChartSize.ts +0 -35
  840. package/src/charts/kinds/BandStrip.tsx +0 -449
  841. package/src/charts/kinds/Bars.tsx +0 -589
  842. package/src/charts/kinds/Donut.tsx +0 -368
  843. package/src/charts/kinds/DualPanel.tsx +0 -712
  844. package/src/charts/kinds/Heatmap.tsx +0 -396
  845. package/src/charts/kinds/MirroredBars.tsx +0 -469
  846. package/src/charts/kinds/MultiLine.tsx +0 -322
  847. package/src/charts/kinds/StackedArea.tsx +0 -267
  848. package/src/charts/kinds/ZonedLine.tsx +0 -301
  849. package/src/charts/kinds/band-chrome.tsx +0 -91
  850. package/src/charts/kinds/donut-layout.ts +0 -82
  851. package/src/charts/layout/auto-margin.ts +0 -242
  852. package/src/charts/layout/end-labels.ts +0 -135
  853. package/src/charts/layout/log-ticks.ts +0 -90
  854. package/src/charts/primitives/AreaGradient.tsx +0 -26
  855. package/src/charts/primitives/Axes.tsx +0 -271
  856. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  857. package/src/charts/primitives/ChartCard.tsx +0 -280
  858. package/src/charts/primitives/ChartFrame.tsx +0 -493
  859. package/src/charts/primitives/ChartLegend.tsx +0 -422
  860. package/src/charts/primitives/ChartPending.tsx +0 -243
  861. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  862. package/src/charts/primitives/Crosshair.tsx +0 -43
  863. package/src/charts/primitives/HatchPattern.tsx +0 -55
  864. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  865. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  866. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  867. package/src/charts/primitives/XZoneRects.tsx +0 -132
  868. package/src/charts/primitives/ZoneRects.tsx +0 -67
  869. package/src/charts/primitives/chart-card-context.ts +0 -46
  870. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  871. package/src/charts/primitives/chart-layout.ts +0 -318
  872. package/src/charts/primitives/chart-tier.tsx +0 -76
  873. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  874. package/src/charts/series.ts +0 -276
  875. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  876. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  877. package/src/charts/sparklines/index.ts +0 -2
  878. package/src/charts/theme.tsx +0 -53
  879. package/src/charts/utils/domain.ts +0 -41
  880. package/src/charts/utils/format.ts +0 -19
  881. package/src/charts/utils/measure-text.ts +0 -109
  882. package/src/charts/utils/ticks.ts +0 -239
  883. package/src/commands/overlays-mount.tsx +0 -333
  884. package/src/commands/useCommandHotkeys.ts +0 -114
  885. package/src/content/article-actions.ts +0 -72
  886. package/src/content/article-card.module.css +0 -111
  887. package/src/content/article-card.tsx +0 -174
  888. package/src/content/mdx.tsx +0 -127
  889. package/src/controls/compare-filter.tsx +0 -81
  890. package/src/controls/slider-control.tsx +0 -159
  891. package/src/dashboard/widget-grid.module.css +0 -69
  892. package/src/dashboard/widget-grid.tsx +0 -146
  893. package/src/data/table.ts +0 -39
  894. package/src/data/virtual-list.tsx +0 -356
  895. package/src/data/virtual.ts +0 -26
  896. package/src/forms/FormErrorSummary.tsx +0 -71
  897. package/src/forms/use-field-array.ts +0 -94
  898. package/src/forms/use-form-draft.ts +0 -262
  899. package/src/forms/use-form-submit.ts +0 -199
  900. package/src/notifications/index.ts +0 -88
  901. package/src/notifications/mount-guard.ts +0 -38
  902. package/src/notifications/notify.tsx +0 -379
  903. package/src/provider/connectivity-indicator.tsx +0 -267
  904. package/src/provider/connectivity-provider.tsx +0 -189
  905. package/src/provider/connectivity-types.ts +0 -42
  906. package/src/provider/use-connectivity.ts +0 -26
  907. package/src/query-devtools.tsx +0 -40
  908. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  909. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  910. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  911. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  912. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  913. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  914. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  915. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  916. /package/dist/{data → table}/data-table.module.css +0 -0
  917. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  918. /package/dist/{data → table}/query-branch.d.ts +0 -0
  919. /package/dist/{data → table}/query-branch.js +0 -0
  920. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  921. /package/src/{data → table}/data-table.module.css +0 -0
  922. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  923. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,185 +1,48 @@
1
1
  /**
2
- * `./charts` — Mantine-free visx chart system (ZERO `@mantine/*` imports, lint-enforced).
3
- *
4
- * Re-exports the framework token layer (so chart consumers have one import surface), the chart
5
- * theme context, the shared cursor (module-level store — charts sync with no provider; see
6
- * `docs/CHARTS-SPEC.md` §3), the primitives, kinds, sparklines, hooks, utils, and a curated set of
7
- * raw @visx primitives for bespoke charts.
8
- *
9
- * The framework ships ONLY generic primitives + framework palette data — no domain series tree
10
- * (apps rebuild that app-side with `seriesTokens` / `groupTokens` against their own series maps).
11
- * Grounded in argo `packages/charts/src/index.ts`.
2
+ * `basalt-ui/charts` — the chart layer on TanStack Charts (`docs/V2-SPEC.md` § 9). Mantine-free:
3
+ * the rung (`CartesianChart`), the kinds (`Lines`, `Bars`, `StackedArea`, `Sparkline`, `BandStrip`, `Donut`, `Heatmap`, `DualPanel`, `MirroredBars`), the card (`ChartCard`) and the shared
4
+ * cursor (`chartCursor`). Engine marks for `CartesianChart`'s `marks` are imported from the allowed
5
+ * `@tanstack/charts/*` subpaths directly; tokens come from `basalt-ui/tokens`, formatters from
6
+ * `basalt-ui/format`. Nothing here re-exports either, or the engine.
12
7
  */
13
-
14
- // ── Framework token surface (Mantine-free) ───────────────────────────────
15
- export {
16
- VX,
17
- alpha,
18
- type ColorPair,
19
- type SeriesMap,
20
- buildPaletteCss,
21
- seriesTokens,
22
- defineSeries,
23
- groupTokens,
24
- chartMargin,
25
- type ChartMargin,
26
- } from '../tokens'
27
-
28
- // ── Design seam type (type-only; erased at runtime — no @mantine value) ─
29
- export type { SeriesKey } from '../register'
30
-
31
- // ── Chart theme + shared cursor ──────────────────────────────────────────
32
- export { VxThemeProvider, useVxTheme, type VxTheme } from './theme'
33
- export { ChartCursorScope, type ChartCursorScopeProps, useCursorState } from './cursor/scope'
34
- export {
35
- createCursorStore,
36
- globalCursorStore,
37
- type CursorState,
38
- type CursorStore,
39
- } from './cursor/store'
40
-
41
- // ── Series descriptor (the legend/tooltip single source of truth) ────────
42
- export {
43
- type SeriesMark,
44
- type SeriesDash,
45
- type SeriesCurve,
46
- curveFor,
47
- type SeriesRole,
48
- type LegendPlacement,
49
- type ChartLegendConfig,
50
- type SeriesStyle,
51
- type ChartSeries,
52
- deriveLegend,
53
- deriveTooltipRows,
54
- } from './series'
55
-
56
- // ── Primitives ───────────────────────────────────────────────────────────
57
- export {
58
- CartesianChart,
59
- resolveAxisDomain,
60
- type CartesianChartProps,
61
- type CartesianTooltipConfig,
62
- type CartesianTooltipRowContext,
63
- type AxisConfig,
64
- type PlotContext,
65
- } from './primitives/CartesianChart'
66
- export {
67
- ChartFrame,
68
- type ChartFrameProps,
69
- type ChartFrameLegend,
70
- type ResponsiveChartHeight,
71
- type PlotRect,
72
- resolveLegend,
73
- } from './primitives/ChartFrame'
74
- export {
75
- ChartCenter,
76
- type ChartCenterProps,
77
- ChartPending,
78
- type ChartPendingProps,
79
- ChartEmpty,
80
- type ChartEmptyProps,
81
- ChartError,
82
- type ChartErrorProps,
83
- type ChartState,
84
- type ResolvedChartState,
85
- resolveChartState,
86
- } from './primitives/ChartPending'
87
- export { Crosshair, SeriesDot } from './primitives/Crosshair'
88
- export { HatchPattern, hatchFill, hatchSizeFor } from './primitives/HatchPattern'
89
- export { ChartCard, type ChartCardProps, type ChartCardSlot } from './primitives/ChartCard'
90
- export { ChartLegend, type LegendEntry } from './primitives/ChartLegend'
91
- export {
92
- ChartTooltipFloat,
93
- TooltipHeader,
94
- TooltipRow,
95
- TooltipBody,
96
- } from './primitives/ChartTooltip'
97
- export {
98
- AxisBottomDate,
99
- AxisBottomNumeric,
100
- AxisLeftNumeric,
101
- AxisRightNumeric,
102
- } from './primitives/Axes'
103
- export { HoverOverlay } from './primitives/HoverOverlay'
104
- export { ZoneRects, type ZoneSpec } from './primitives/ZoneRects'
105
- export { XZoneRects, type XZoneSpec } from './primitives/XZoneRects'
106
- export { AreaGradient, areaFillUrl } from './primitives/AreaGradient'
107
-
108
- // ── Hooks ────────────────────────────────────────────────────────────────
109
- export { useChartCursor, type ChartCursor, type CursorAnchor } from './hooks/useChartCursor'
110
- export {
111
- foldBands,
112
- type BandFold,
113
- type BandTooltipConfig,
114
- type BandTooltipRowContext,
115
- } from './hooks/useBandPlot'
116
- export type { CursorResolution, DomainKind } from './cursor/resolve'
117
- export { useChartSize, type UseChartSizeResult, type ChartSize } from './hooks/useChartSize'
118
-
119
- // ── Utils ────────────────────────────────────────────────────────────────
120
- export {
121
- fmtAxisDate,
122
- fmtTooltipDate,
123
- fmtCompact,
124
- type FmtCompactOptions,
125
- fmtPercent,
126
- type FmtPercentOptions,
127
- fmtCurrency,
128
- type FmtCurrencyOptions,
129
- fmtInt,
130
- formatters,
131
- } from './utils/format'
132
- export { smartTicks, smartTicksEvery, xLabelPxFor, autoXLabelRotate } from './utils/ticks'
133
- export { autoMargin, probeAxisLabels, type AutoMarginInput } from './layout/auto-margin'
134
- export { measureText, maxTextWidth } from './utils/measure-text'
135
-
136
- // ── Kind components (owned by a sibling agent under ./kinds) ──────────────
137
- export {
138
- ZonedLine,
139
- type ZonedLineProps,
140
- type ZonedLineThreshold,
141
- type ZonedLineRefLine,
142
- } from './kinds/ZonedLine'
143
-
144
- export { Bars, type BarsProps, type BarsBar, type BarsLine, type BarsRefLine } from './kinds/Bars'
145
-
146
- export { StackedArea, type StackedAreaProps } from './kinds/StackedArea'
147
- export { Donut, type DonutProps, type DonutDatum } from './kinds/Donut'
148
-
149
- export { MultiLine, type MultiLineProps } from './kinds/MultiLine'
150
- export { DualPanel, type DualPanelProps } from './kinds/DualPanel'
151
- export { Heatmap, type HeatmapProps } from './kinds/Heatmap'
8
+ export { CartesianChart } from './CartesianChart'
9
+ export { Lines, type LinesProps } from './Lines'
10
+ export { Bars, type BarsProps, type BarsBar, type BarsLine } from './Bars'
11
+ export { StackedArea, type StackedAreaProps, type StackedAreaBand } from './StackedArea'
12
+ export { Sparkline, type SparklineProps } from './Sparkline'
152
13
  export {
153
14
  BandStrip,
154
15
  type BandStripProps,
155
16
  type BandStripSeries,
156
17
  type BandSpan,
157
- } from './kinds/BandStrip'
158
- export { MirroredBars, type MirroredBarsProps, type MirroredBarPane } from './kinds/MirroredBars'
159
-
160
- // ── Sparklines ───────────────────────────────────────────────────────────
161
- export {
162
- LineSparkline,
163
- type LineSparklineProps,
164
- BarSparkline,
165
- type BarSparklineProps,
166
- } from './sparklines'
167
-
168
- // ── Re-exported visx primitives ──────────────────────────────────────────
169
- // Bespoke charts (genuinely unique compositions per CLAUDE.md) need raw
170
- // visx primitives. Re-exporting them keeps the dependency declared in one
171
- // place and preserves the rule that consumers only import from `basalt-ui/charts`.
172
- export { Group } from '@visx/group'
173
- export { GridRows, GridColumns } from '@visx/grid'
174
- export { scaleLinear, scaleBand, scalePoint, scaleTime } from '@visx/scale'
175
- export { LinePath, Bar, AreaClosed, AreaStack, BarStack, BarGroup, Line, Pie } from '@visx/shape'
176
- export { Threshold } from '@visx/threshold'
177
- export {
178
- curveMonotoneX,
179
- curveLinear,
180
- curveCatmullRom,
181
- curveStep,
182
- curveStepAfter,
183
- curveStepBefore,
184
- curveBasis,
185
- } from '@visx/curve'
18
+ type BandFold,
19
+ } from './BandStrip'
20
+ export { Donut, type DonutProps, type DonutDatum } from './Donut'
21
+ export { Heatmap, type HeatmapProps } from './Heatmap'
22
+ export { DualPanel, type DualPanelProps, type DualPanelLine, type DualPanelBar } from './DualPanel'
23
+ export {
24
+ MirroredBars,
25
+ type MirroredBarsProps,
26
+ type MirroredBarsSeries,
27
+ type MirroredBarPane,
28
+ } from './MirroredBars'
29
+ export { ChartCard, type ChartCardProps, type ChartCardSlot } from './ChartCard'
30
+ export { chartCursor } from './cursor'
31
+ export type {
32
+ AxisConfig,
33
+ CartesianChartProps,
34
+ ChartLegendConfig,
35
+ ChartMarks,
36
+ ChartSeries,
37
+ ChartState,
38
+ ChartTooltipConfig,
39
+ ChartTooltipRow,
40
+ ChartX,
41
+ CursorResolution,
42
+ PlotContext,
43
+ RefLine,
44
+ ResponsiveChartHeight,
45
+ Threshold,
46
+ XZoneSpec,
47
+ ZoneSpec,
48
+ } from './types'
@@ -0,0 +1,204 @@
1
+ /**
2
+ * The derived legend — HTML, Mantine-free, outside the engine. Entries come from `series` only (a
3
+ * legend cannot name what the plot does not draw); a companion (`legend: false` + `parent`) rides
4
+ * its parent's entry. Toggling an entry hides the series from the plot, the tooltip and the auto
5
+ * domain together; hovering one emphasizes it (the definition is rebuilt with `highlighted`).
6
+ */
7
+ import type { CSSProperties, ReactElement } from 'react'
8
+ import { VX } from '../tokens'
9
+ import classes from './chart-legend.module.css'
10
+ import type { ChartSeries } from './types'
11
+
12
+ /** `auto` renders both swatches and lets the container decide: none, dots or chips (CSS). */
13
+ export type LegendMode = 'dots' | 'chips' | 'auto'
14
+
15
+ const ROLE_ORDER = ['series', 'overlay', 'reference'] as const
16
+
17
+ /**
18
+ * Dots sit wider apart than chips: a dot is 8px, and two 44px coarse-pointer hit areas centred on
19
+ * 8px hosts only stop overlapping once the pitch clears 44 (44 − 8 − 2, plus headroom).
20
+ */
21
+ const DOTS_GAP = 38
22
+
23
+ /** The entries a series list derives, in display order (by role when `groups`). */
24
+ export function legendEntries<T>(
25
+ series: readonly ChartSeries<T>[],
26
+ groups: boolean,
27
+ ): ChartSeries<T>[][] {
28
+ const entries = series.filter((s) => s.legend !== false)
29
+ if (!groups) return entries.length ? [entries] : []
30
+ return ROLE_ORDER.map((role) => entries.filter((s) => (s.role ?? 'series') === role)).filter(
31
+ (g) => g.length > 0,
32
+ )
33
+ }
34
+
35
+ // Everything but `display` and the gaps, which are the stylesheet's in `auto` mode.
36
+ const rowBaseStyle: CSSProperties = {
37
+ border: 0,
38
+ margin: 0,
39
+ padding: 0,
40
+ minWidth: 0,
41
+ flexWrap: 'wrap',
42
+ alignItems: 'center',
43
+ rowGap: 4,
44
+ fontSize: VX.legendFontSize,
45
+ color: VX.ink2,
46
+ lineHeight: 1.35,
47
+ }
48
+ const rowStyle: CSSProperties = { ...rowBaseStyle, display: 'flex' }
49
+ /** The gaps `chart-legend.module.css` reads, as custom properties. */
50
+ type LegendVars = CSSProperties & Record<'--bc-legend-gap' | '--bc-dots-gap', string>
51
+ const autoRowStyle: LegendVars = {
52
+ ...rowBaseStyle,
53
+ '--bc-legend-gap': `${VX.legendGap}px`,
54
+ '--bc-dots-gap': `${DOTS_GAP}px`,
55
+ }
56
+ const dividerStyle: CSSProperties = { width: 1, alignSelf: 'stretch', background: VX.divider }
57
+ const buttonStyle: CSSProperties = {
58
+ all: 'unset',
59
+ // `all: unset` would also drop styles.css's `position: relative` (an inline style outranks the
60
+ // layer), and the `[data-basalt-hit]::after` overlay would anchor to an ancestor — over the plot.
61
+ position: 'relative',
62
+ // theme-allow raw-surface — an invisible 1px: the edge the `[data-basalt-hit]` overlap cap assumes every control carries (styles.css)
63
+ border: '1px solid transparent',
64
+ display: 'inline-flex',
65
+ alignItems: 'center',
66
+ gap: 6,
67
+ cursor: 'pointer',
68
+ borderRadius: VX.radiusCtrl,
69
+ }
70
+ const noteStyle: CSSProperties = { color: VX.axis }
71
+
72
+ type SwatchStyle = Pick<
73
+ ChartSeries<never>,
74
+ 'color' | 'mark' | 'dash' | 'strokeOpacity' | 'fillOpacity'
75
+ >
76
+
77
+ function Swatch({ s, mode }: { s: SwatchStyle; mode: LegendMode }): ReactElement {
78
+ if (mode === 'auto')
79
+ return (
80
+ <>
81
+ <Swatch s={s} mode="dots" />
82
+ <Swatch s={s} mode="chips" />
83
+ </>
84
+ )
85
+ if (mode === 'dots')
86
+ return (
87
+ <span
88
+ aria-hidden
89
+ className={classes.dot}
90
+ // theme-allow raw-surface — a legend dot is a circle, not a surface corner
91
+ style={{ width: 8, height: 8, borderRadius: '50%', background: s.color, flex: 'none' }}
92
+ />
93
+ )
94
+ if ((s.mark ?? 'line') === 'line')
95
+ return (
96
+ <svg aria-hidden className={classes.chip} width={16} height={8} style={{ flex: 'none' }}>
97
+ <line
98
+ x1={1}
99
+ x2={15}
100
+ y1={4}
101
+ y2={4}
102
+ stroke={s.color}
103
+ strokeWidth={2}
104
+ strokeLinecap="round"
105
+ strokeOpacity={s.strokeOpacity ?? 1}
106
+ {...(s.dash === 'dashed' && { strokeDasharray: '4 3' })}
107
+ />
108
+ </svg>
109
+ )
110
+ return (
111
+ <span
112
+ aria-hidden
113
+ className={classes.chip}
114
+ style={{
115
+ width: 10,
116
+ height: 10,
117
+ // theme-allow raw-surface — swatch geometry, not a surface corner
118
+ borderRadius: 2,
119
+ background: s.color,
120
+ opacity: s.fillOpacity ?? 1,
121
+ flex: 'none',
122
+ }}
123
+ />
124
+ )
125
+ }
126
+
127
+ export type ChartLegendProps<T> = {
128
+ series: readonly ChartSeries<T>[]
129
+ hidden: ReadonlySet<string>
130
+ mode: LegendMode
131
+ groups: boolean
132
+ toggle: boolean
133
+ onToggle: (key: string) => void
134
+ onHighlight: (key: string | null) => void
135
+ }
136
+
137
+ export function ChartLegend<T>(props: ChartLegendProps<T>): ReactElement | null {
138
+ const groups = legendEntries(props.series, props.groups)
139
+ if (groups.length === 0) return null
140
+ const auto = props.mode === 'auto'
141
+ const gap = props.mode === 'dots' ? DOTS_GAP : VX.legendGap
142
+ return (
143
+ <fieldset
144
+ aria-label="Legend"
145
+ data-basalt-chart-legend={props.mode}
146
+ {...(auto && { className: classes.auto })}
147
+ style={
148
+ auto
149
+ ? // `display` and the gaps are the stylesheet's: the container picks them by width.
150
+ autoRowStyle
151
+ : {
152
+ ...rowStyle,
153
+ columnGap: gap,
154
+ // Caps each entry's `[data-basalt-hit]` overlay at the real gap between entries.
155
+ ...({ '--vx-hit-gap': `${gap}px` } as CSSProperties),
156
+ }
157
+ }
158
+ >
159
+ {groups.map((group, gi) => [
160
+ gi > 0 && <span key={`divider-${gi}`} aria-hidden style={dividerStyle} />,
161
+ ...group.map((s) => {
162
+ const off = props.hidden.has(s.key)
163
+ const content = (
164
+ <>
165
+ <Swatch s={s} mode={props.mode} />
166
+ <span>{s.label}</span>
167
+ {s.note !== undefined && <span style={noteStyle}>{s.note}</span>}
168
+ </>
169
+ )
170
+ const itemStyle: CSSProperties = { ...buttonStyle, opacity: off ? 0.4 : 1 }
171
+ if (!props.toggle)
172
+ return (
173
+ <span
174
+ key={s.key}
175
+ data-legend-key={s.key}
176
+ style={itemStyle}
177
+ onMouseEnter={() => props.onHighlight(s.key)}
178
+ onMouseLeave={() => props.onHighlight(null)}
179
+ >
180
+ {content}
181
+ </span>
182
+ )
183
+ return (
184
+ <button
185
+ key={s.key}
186
+ type="button"
187
+ data-legend-key={s.key}
188
+ data-basalt-hit=""
189
+ aria-pressed={!off}
190
+ style={itemStyle}
191
+ onClick={() => props.onToggle(s.key)}
192
+ onMouseEnter={() => props.onHighlight(s.key)}
193
+ onMouseLeave={() => props.onHighlight(null)}
194
+ onFocus={() => props.onHighlight(s.key)}
195
+ onBlur={() => props.onHighlight(null)}
196
+ >
197
+ {content}
198
+ </button>
199
+ )
200
+ }),
201
+ ])}
202
+ </fieldset>
203
+ )
204
+ }
@@ -0,0 +1,201 @@
1
+ /**
2
+ * The line-overlay mark every kind draws the same way: `Lines`' series and `Bars`' line overlays.
3
+ * One place for stroke width, dash, curve, the right-axis binding and legend-hover emphasis (a
4
+ * companion keeps full strength while its `parent` is the highlighted entry).
5
+ */
6
+ import { barY } from '@tanstack/charts/bar'
7
+ import type { BarYOptions } from '@tanstack/charts/bar'
8
+ import { dot } from '@tanstack/charts/dot'
9
+ import { lineY } from '@tanstack/charts/line'
10
+ import { decorative } from '@tanstack/charts/mark/decorative'
11
+ import { VX } from '../tokens'
12
+ import { chartCurve } from './curves'
13
+ import { DASH, DIMMED, LINE_STROKE_WIDTH } from './theme'
14
+ import { rowX } from './types'
15
+ import type { ChartMarks, ChartSeries, ChartX, PlotContext, PlotRow } from './types'
16
+
17
+ /** `'y2'` for a right-axis series on a chart that has one; otherwise the default axis. */
18
+ export function yScaleOf<T, X extends ChartX>(
19
+ plot: PlotContext<T, X>,
20
+ s: Pick<ChartSeries<T>, 'axis'>,
21
+ ): 'y2' | undefined {
22
+ return s.axis === 'right' ? plot.y2 : undefined
23
+ }
24
+
25
+ /** `1`, or `DIMMED` while ANOTHER legend entry (not this series, not its parent) is hovered. */
26
+ export function emphasis<T>(
27
+ highlighted: string | null,
28
+ s: Pick<ChartSeries<T>, 'key' | 'parent'>,
29
+ ): number {
30
+ return highlighted === null || highlighted === s.key || highlighted === s.parent ? 1 : DIMMED
31
+ }
32
+
33
+ export function lineMark<T, X extends ChartX>(
34
+ plot: PlotContext<T, X>,
35
+ s: ChartSeries<T>,
36
+ ): ChartMarks[number] {
37
+ const yScale = yScaleOf(plot, s)
38
+ return lineY(plot.rows(s.key), {
39
+ id: s.key,
40
+ x: rowX,
41
+ y: 'y',
42
+ z: 'series',
43
+ stroke: s.color,
44
+ strokeWidth: s.strokeWidth ?? LINE_STROKE_WIDTH,
45
+ strokeOpacity: (s.strokeOpacity ?? 1) * emphasis(plot.highlighted, s),
46
+ curve: chartCurve(s.curve ?? 'monotone'),
47
+ ...(s.dash === 'dashed' && { strokeDasharray: DASH }),
48
+ ...(yScale !== undefined && { yScale }),
49
+ })
50
+ }
51
+
52
+ type MarkerGroup<T, X extends ChartX> = {
53
+ color: string
54
+ opacity: number
55
+ ring: boolean
56
+ rows: (PlotRow<T, X> & { r: number })[]
57
+ }
58
+
59
+ /** A series' `getMarker` points as dots: one decorative mark per distinct paint. */
60
+ export function markersOf<T, X extends ChartX>(
61
+ s: ChartSeries<T>,
62
+ rows: readonly PlotRow<T, X>[],
63
+ yScale: 'y2' | undefined,
64
+ ): ChartMarks {
65
+ const getMarker = s.getMarker
66
+ if (!getMarker) return []
67
+ // `dot.fill` is constant, so one decorative dot mark per distinct marker paint.
68
+ const groups: MarkerGroup<T, X>[] = []
69
+ for (const row of rows) {
70
+ if (row.y === null) continue
71
+ const m = getMarker(row.datum)
72
+ if (!m) continue
73
+ const paint = { color: m.color ?? s.color, opacity: m.fillOpacity ?? 1, ring: m.ring !== false }
74
+ let group = groups.find(
75
+ (g) => g.color === paint.color && g.opacity === paint.opacity && g.ring === paint.ring,
76
+ )
77
+ if (!group) {
78
+ group = { ...paint, rows: [] }
79
+ groups.push(group)
80
+ }
81
+ group.rows.push({ ...row, r: m.r ?? VX.dotR })
82
+ }
83
+ return groups.map((group, i) =>
84
+ decorative(
85
+ dot(group.rows, {
86
+ id: `${s.key}-marker-${i}`,
87
+ x: rowX,
88
+ y: 'y',
89
+ r: 'r',
90
+ fill: group.color,
91
+ fillOpacity: group.opacity,
92
+ ...(group.ring && { stroke: VX.surface.panel, strokeWidth: 1.5 }),
93
+ ...(yScale !== undefined && { yScale }),
94
+ }),
95
+ ),
96
+ )
97
+ }
98
+
99
+ /**
100
+ * A single-series `barY`. The engine stacks every `barY` that has no explicit extent, and a row with
101
+ * no `z`/`color` channel is its own series: an N-by-N matrix (a 5k-row `DualPanel` took 10 s). So
102
+ * the extent is explicit (`y1: 0`) unless the caller asks for a series (`z`, `color`) or a `layout`.
103
+ * Every bar that is not `Bars'` stacked/grouped one is drawn through this.
104
+ */
105
+ const given = (v: unknown): boolean => v !== undefined && v !== null
106
+
107
+ export function barMark<TDatum>(
108
+ rows: Iterable<TDatum>,
109
+ options: BarYOptions<TDatum> = {},
110
+ ): ChartMarks[number] {
111
+ // On values, not keys: `z: undefined` from a conditional spread asks for no series.
112
+ const seriesAsked = [options.z, options.color, options.layout].some(given)
113
+ const extentGiven = [options.y1, options.y2].some(given)
114
+ return barY(rows, seriesAsked || extentGiven ? options : { ...options, y1: 0 })
115
+ }
116
+
117
+ /** Rows per plot pixel beyond which {@link thinFill} thins. */
118
+ const FILL_ROWS_PER_PX = 4
119
+
120
+ type Extreme = { value: number; index: number }
121
+ type Bucket = {
122
+ first: number
123
+ last: number
124
+ minFrom: Extreme
125
+ maxFrom: Extreme
126
+ minTo: Extreme
127
+ maxTo: Extreme
128
+ minGap: Extreme
129
+ maxGap: Extreme
130
+ }
131
+
132
+ const extreme = (value: number, index: number): Extreme => ({ value, index })
133
+ const lower = (e: Extreme, value: number, index: number): void => {
134
+ if (value < e.value) Object.assign(e, { value, index })
135
+ }
136
+ const upper = (e: Extreme, value: number, index: number): void => {
137
+ if (value > e.value) Object.assign(e, { value, index })
138
+ }
139
+
140
+ /**
141
+ * A band fill drawn at `width` px: each pixel column of the plot keeps its first and last row and the
142
+ * rows holding the extremes of `from`, `to` and `to - from`, so the silhouette and every sign
143
+ * crossing survive while a 10k-row series stops costing the engine a scene point per row. `at` is a
144
+ * row's x as a plot fraction (0..1), so an irregularly sampled series (bursts, then a gap) is
145
+ * bucketed by where it is drawn, not by its array index. The series' own first and last row are
146
+ * always kept. Below {@link FILL_ROWS_PER_PX} rows per pixel, or for an unmeasured width, the rows
147
+ * come back unchanged. Order is preserved; pure in its inputs, so the server render and the first
148
+ * client render agree. Only for decorative fills: hover and focus must read the full series.
149
+ */
150
+ export function thinFill<R extends { from: number; to: number }>(
151
+ rows: readonly R[],
152
+ width: number,
153
+ at: (row: R) => number,
154
+ ): R[] {
155
+ const buckets = Math.floor(width)
156
+ if (!(buckets >= 1) || rows.length <= buckets * FILL_ROWS_PER_PX) return rows.slice()
157
+ const kept = new Set<number>([0, rows.length - 1])
158
+ const columns = new Map<number, Bucket>()
159
+ for (const [i, r] of rows.entries()) {
160
+ const position = at(r)
161
+ // A gap (a non-finite value) breaks the fill and must stay where it is; it never seeds or wins an
162
+ // extremum. A row with no position cannot be placed in a column: keep it too.
163
+ if (!Number.isFinite(r.from) || !Number.isFinite(r.to) || !Number.isFinite(position)) {
164
+ kept.add(i)
165
+ continue
166
+ }
167
+ const column = Math.min(buckets - 1, Math.max(0, Math.floor(position * buckets)))
168
+ const gap = r.to - r.from
169
+ const b = columns.get(column)
170
+ if (!b) {
171
+ columns.set(column, {
172
+ first: i,
173
+ last: i,
174
+ minFrom: extreme(r.from, i),
175
+ maxFrom: extreme(r.from, i),
176
+ minTo: extreme(r.to, i),
177
+ maxTo: extreme(r.to, i),
178
+ minGap: extreme(gap, i),
179
+ maxGap: extreme(gap, i),
180
+ })
181
+ continue
182
+ }
183
+ b.last = i
184
+ lower(b.minFrom, r.from, i)
185
+ upper(b.maxFrom, r.from, i)
186
+ lower(b.minTo, r.to, i)
187
+ upper(b.maxTo, r.to, i)
188
+ lower(b.minGap, gap, i)
189
+ upper(b.maxGap, gap, i)
190
+ }
191
+ for (const b of columns.values()) {
192
+ for (const i of [b.first, b.last]) kept.add(i)
193
+ for (const e of [b.minFrom, b.maxFrom, b.minTo, b.maxTo, b.minGap, b.maxGap]) kept.add(e.index)
194
+ }
195
+ return [...kept]
196
+ .toSorted((p, q) => p - q)
197
+ .flatMap((i) => {
198
+ const row = rows[i]
199
+ return row === undefined ? [] : [row]
200
+ })
201
+ }