basalt-ui 1.41.0 → 2.0.0

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