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,322 +0,0 @@
1
- import { LinePath } from '@visx/shape'
2
- import { memo, useCallback, useMemo } from 'react'
3
- import type { ReactNode } from 'react'
4
- import { assertRequiredProps } from '../../common/validate'
5
- import type { BasaltProps } from '../../common/props'
6
- import type { CursorResolution } from '../cursor/resolve'
7
- import type { CartesianTooltipConfig, AxisConfig, PlotContext } from '../primitives/CartesianChart'
8
- import { CartesianChart } from '../primitives/CartesianChart'
9
- import type { ResponsiveChartHeight } from '../primitives/ChartFrame'
10
- import type { XZoneSpec } from '../primitives/XZoneRects'
11
- import type { ZoneSpec } from '../primitives/ZoneRects'
12
- import type { ChartState } from '../primitives/ChartPending'
13
- import { curveFor, definedOn, LINE_OVERLAY_STROKE_WIDTH, toPlotPoint } from '../series'
14
- import type { ChartLegendConfig, ChartSeries } from '../series'
15
- import { VX } from '../../tokens'
16
-
17
- export type MultiLineProps<T> = BasaltProps & {
18
- data: T[]
19
- /** Height in px, or one per size step (`{ base, sm?, md?, lg? }`). Default 240. Forwarded
20
- * unchanged; `ChartFrameProps.height` owns the law — steps resolve off the MEASURED width. */
21
- height?: number | ResponsiveChartHeight
22
- chartId: string
23
- /** Extracts the x-axis category (date string) from a data point. */
24
- getX: (d: T) => string
25
- /** 1+ line series sharing the y-axis(es) — the single source of truth for color, dash, legend,
26
- * and tooltip rows. A series opts into the right axis with `axis: 'right'`. */
27
- series: ChartSeries<T>[]
28
- /** Left y-axis. Collapses the old `yDomain` / `yAutoMaxFloor` / `yAutoMinCeil` / `yAutoPad` /
29
- * `numTicksY` / `formatYTick` prop soup into one object. */
30
- y?: AxisConfig<T>
31
- /** Right y-axis. Passing it is what makes the chart dual-axis — the margin widens by
32
- * measurement, and `axis: 'right'` series read against it. */
33
- y2?: AxisConfig<T>
34
- /** Horizontal value-range overlays (target zones), rendered behind the lines. */
35
- zones?: ZoneSpec[]
36
- /** Vertical x-range overlays (time windows), rendered behind the lines. Bounds are `getX`
37
- * domain keys. */
38
- xZones?: XZoneSpec[]
39
- /** Horizontal reference lines. Solid by default; set dashed: true for a dashed line. */
40
- refLines?: { value: number; color: string; dashed?: boolean }[]
41
- /** Exact number of x ticks. Default: as many as fit. Ignored when `xTickValues` is set. */
42
- xTicks?: number
43
- /** Which domain keys get a tick, from the full key list and the resolved plot width. Takes
44
- * precedence over `xTicks` — see `CartesianChartProps.xTickValues` for why a count is not
45
- * always enough. */
46
- xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
47
- /** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
48
- formatX?: (key: string) => string
49
- /** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
50
- * see `CartesianChartProps.xLabelRotate`. */
51
- xLabelRotate?: 0 | 45 | 90
52
- /**
53
- * How a sibling chart's broadcast cursor key resolves against this chart's points. Default
54
- * `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
55
- * keyed by its Monday) — see `CursorResolution`.
56
- */
57
- cursorResolution?: CursorResolution
58
- /** Tooltip config — `label` for a right-aligned header badge, `extraRows` for rows appended
59
- * after the derived per-series rows. `false` disables the tooltip entirely. */
60
- tooltip?: CartesianTooltipConfig<T> | false
61
- /** Marker glyph for per-point markers. Default 'circle'. */
62
- markerShape?: 'circle' | 'star'
63
- /** Legend config forwarded to `CartesianChart`; `false` disables the legend (sparkline escape).
64
- * Default `{ placement: 'bottom' }`. */
65
- legend?: ChartLegendConfig | false
66
- /** Accessible text alternative, forwarded to `CartesianChart` as `aria-label` (+ `role="group"`). */
67
- ariaLabel?: string
68
- /** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
69
- isPending?: boolean
70
- /** The three "nothing to draw" states in one prop — pending → error → empty. See
71
- * `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
72
- state?: ChartState
73
- }
74
-
75
- const STAR_R = 6
76
-
77
- /** Five-point star path centered at (cx, cy) with outer radius r. */
78
- function starPath(cx: number, cy: number, r: number): string {
79
- const inner = r * 0.4
80
- const pts: string[] = []
81
- for (let i = 0; i < 10; i++) {
82
- const radius = i % 2 === 0 ? r : inner
83
- const angle = (Math.PI / 5) * i - Math.PI / 2
84
- pts.push(`${cx + radius * Math.cos(angle)},${cy + radius * Math.sin(angle)}`)
85
- }
86
- return `M${pts.join('L')}Z`
87
- }
88
-
89
- type LinePt<T> = { __d: T; __y: number | null }
90
-
91
- /**
92
- * Every row, in x order, with `__y: null` where the series reports no value. The null row STAYS in
93
- * the array: `ChartSeries.getValue` documents null as a line GAP, and dropping the row instead
94
- * makes `LinePath` join straight across a coverage hole — drawing a measurement that was never
95
- * taken. `defined` on the consuming shape is what turns it back into a gap. Reused by the lines
96
- * and the markers.
97
- */
98
- function seriesPoints<T>(series: ChartSeries<T>, data: readonly T[]): LinePt<T>[] {
99
- return data.map((d) => ({ __d: d, __y: toPlotPoint(series.getValue(d)) }))
100
- }
101
-
102
- /**
103
- * N series sharing one or two y-axes, with optional zones/reference lines, per-point markers
104
- * (PR stars / status dots), a dashed companion line per series, legend-hover dimming, and a
105
- * shared-cursor tooltip. Generalizes the multi-line argo charts (e1RM trend, relative
106
- * progression, training load, fitness trends).
107
- *
108
- * Composes `CartesianChart` for measuring, scales, grid, axes, cursor, and tooltip — this kind
109
- * draws ONLY the marks (lines + per-point markers). `series` is the single array that drives the
110
- * plotted lines, the legend, and the tooltip rows.
111
- *
112
- * X-axis is built from the full `data` array so the calendar is preserved even when a series
113
- * has nulls; each series line BREAKS at a null point, leaving a real gap rather than interpolating
114
- * across it.
115
- */
116
- function MultiLineInner<T>(props: MultiLineProps<T>) {
117
- // F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
118
- // from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
119
- // swallows into a blank subtree that names nothing.
120
- assertRequiredProps('MultiLine', props, ['data', 'getX', 'series'])
121
- const {
122
- data,
123
- chartId,
124
- getX,
125
- series,
126
- y,
127
- y2,
128
- zones,
129
- xZones,
130
- refLines,
131
- xTicks,
132
- xTickValues,
133
- formatX,
134
- xLabelRotate,
135
- cursorResolution,
136
- tooltip,
137
- markerShape = 'circle',
138
- height,
139
- legend,
140
- ariaLabel,
141
- isPending,
142
- state,
143
- className,
144
- style,
145
- } = props
146
-
147
- // Default line overlays to the redesign's 1.9px stroke (docs/DESIGN-SPEC.md §5) — applied once
148
- // here so the plotted line, the derived legend swatch, and the derived tooltip row all agree.
149
- const styledSeries = useMemo<ChartSeries<T>[]>(
150
- () => series.map((s) => ({ ...s, strokeWidth: s.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH })),
151
- [series],
152
- )
153
-
154
- return (
155
- <CartesianChart
156
- data={data}
157
- chartId={chartId}
158
- getX={getX}
159
- series={styledSeries}
160
- {...(y !== undefined && { y })}
161
- {...(y2 !== undefined && { y2 })}
162
- {...(zones !== undefined && { zones })}
163
- {...(xZones !== undefined && { xZones })}
164
- {...(refLines !== undefined && { refLines })}
165
- {...(xTicks !== undefined && { xTicks })}
166
- {...(xTickValues !== undefined && { xTickValues })}
167
- {...(formatX !== undefined && { formatX })}
168
- {...(xLabelRotate !== undefined && { xLabelRotate })}
169
- {...(cursorResolution !== undefined && { cursorResolution })}
170
- {...(tooltip !== undefined && { tooltip })}
171
- {...(height !== undefined && { height })}
172
- {...(legend !== undefined && { legend })}
173
- {...(ariaLabel !== undefined && { ariaLabel })}
174
- {...(isPending !== undefined && { isPending })}
175
- {...(state !== undefined && { state })}
176
- {...(className !== undefined && { className })}
177
- {...(style !== undefined && { style })}
178
- >
179
- {(ctx: PlotContext<T>) => <MultiLineMarks getX={getX} markerShape={markerShape} ctx={ctx} />}
180
- </CartesianChart>
181
- )
182
- }
183
-
184
- /** Draws lines + per-point markers for the visible series, dimming everything except the
185
- * legend-highlighted series (and its dashed companions, matched by `parent`). */
186
- function MultiLineMarks<T>({
187
- getX,
188
- markerShape,
189
- ctx,
190
- }: {
191
- getX: (d: T) => string
192
- markerShape: 'circle' | 'star'
193
- ctx: PlotContext<T>
194
- }) {
195
- const { data, visible, xScale, yScale, y2Scale, highlighted } = ctx
196
-
197
- // Memoized per (visible, data), NOT recomputed per render: the cursor is a shared store now, so
198
- // every pointer frame re-renders every chart on the page. Without this, each frame walks the
199
- // full series × data grid twice (lines, then markers) and allocates a fresh point array for
200
- // each — the exact per-paint recompute the
201
- // pre-rebuild kind memoized away.
202
- const pointsBySeries = useMemo(() => {
203
- const m = new Map<string, LinePt<T>[]>()
204
- for (const s of visible) m.set(s.key, seriesPoints(s, data))
205
- return m
206
- }, [visible, data])
207
-
208
- // A series stays at full opacity when nothing is highlighted, when it IS the highlighted series,
209
- // or when it is a companion of the highlighted series (its `parent` matches). `useCallback`
210
- // (rather than a plain function) gives both a stable identity across renders where `highlighted`/
211
- // `y2Scale` haven't changed, so `markerNodes` below can depend on THEM rather than the raw
212
- // scale/highlighted values a closure would otherwise hide from the deps array.
213
- const dimOpacity = useCallback(
214
- (s: ChartSeries<T>): number =>
215
- highlighted === null || s.key === highlighted || s.parent === highlighted ? 1 : 0.25,
216
- [highlighted],
217
- )
218
-
219
- const scaleFor = useCallback(
220
- (s: ChartSeries<T>) => (s.axis === 'right' && y2Scale !== null ? y2Scale : yScale),
221
- [y2Scale, yScale],
222
- )
223
-
224
- // Memoized for the same reason as `pointsBySeries` above — the shared cursor re-renders every
225
- // mounted chart on every pointer frame, and this walks every visible series' points calling the
226
- // consumer's `getMarker` each time otherwise.
227
- const markerNodes = useMemo<ReactNode[]>(
228
- () =>
229
- visible.flatMap((s) => {
230
- const getMarker = s.getMarker
231
- if (!getMarker) return [] as ReactNode[]
232
- const scale = scaleFor(s)
233
- const op = dimOpacity(s)
234
- const markers: ReactNode[] = []
235
- for (const p of pointsBySeries.get(s.key) ?? []) {
236
- // A null point is an absence: no dot, no marker — the same claim the line's `defined`
237
- // makes by breaking there.
238
- if (p.__y === null) continue
239
- const m = getMarker(p.__d)
240
- if (m === null) continue
241
- const cx = xScale(getX(p.__d)) ?? 0
242
- const cy = scale(p.__y)
243
- // A non-positive value on a log axis (or any input a scale can't place) maps to NaN —
244
- // skip the marker rather than paint one at `cy="NaN"`.
245
- if (!Number.isFinite(cy)) continue
246
- const color = m.color ?? s.color
247
- const r = m.r ?? (markerShape === 'star' ? STAR_R : VX.dotR)
248
- const ring = m.ring ?? true
249
- const fillOpacity = (m.fillOpacity ?? 1) * op
250
- markers.push(
251
- markerShape === 'star' ? (
252
- <path
253
- key={`mk-${s.key}-${getX(p.__d)}`}
254
- d={starPath(cx, cy, r)}
255
- fill={color}
256
- fillOpacity={fillOpacity}
257
- {...(ring && { stroke: VX.dotStroke, strokeWidth: 1.5, strokeOpacity: op })}
258
- />
259
- ) : (
260
- <circle
261
- key={`mk-${s.key}-${getX(p.__d)}`}
262
- cx={cx}
263
- cy={cy}
264
- r={r}
265
- fill={color}
266
- fillOpacity={fillOpacity}
267
- {...(ring && { stroke: VX.dotStroke, strokeWidth: 2, strokeOpacity: op })}
268
- />
269
- ),
270
- )
271
- }
272
- return markers
273
- }),
274
- [visible, pointsBySeries, xScale, getX, scaleFor, dimOpacity, markerShape],
275
- )
276
-
277
- return (
278
- <>
279
- {visible.map((s) => {
280
- const pts = pointsBySeries.get(s.key) ?? []
281
- // A series that measured nothing (the legend-only `getValue: () => null` idiom) draws no
282
- // path at all, rather than an empty one.
283
- if (!pts.some((p) => p.__y !== null)) return null
284
- const scale = scaleFor(s)
285
- return (
286
- <LinePath<LinePt<T>>
287
- key={`line-${s.key}`}
288
- data={pts}
289
- x={(p) => xScale(getX(p.__d)) ?? 0}
290
- // Never reached with a null `__y`: d3's line generator calls the position accessors
291
- // only for points `defined` accepted. The `NaN` floor is a type-level one, and it can
292
- // never paint at zero the way a `?? 0` would.
293
- y={(p) => scale(p.__y ?? NaN)}
294
- // Two absences, one guard. A null value is a documented GAP (`ChartSeries.getValue`),
295
- // and a non-positive value on a log axis maps to NaN via `scale(p.__y)` — `defined`
296
- // breaks the line at both instead of interpolating across the hole (a coverage hole
297
- // reading as a measured straight line) or emitting a NaN path command, which per SVG
298
- // error handling blanks the ENTIRE polyline from that point on.
299
- defined={definedOn(scale)}
300
- stroke={s.color}
301
- strokeWidth={s.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH}
302
- strokeDasharray={s.dash === 'dashed' ? VX.dashArray : undefined}
303
- strokeOpacity={dimOpacity(s) * (s.strokeOpacity ?? 1)}
304
- curve={curveFor(s.curve)}
305
- />
306
- )
307
- })}
308
-
309
- {markerNodes}
310
- </>
311
- )
312
- }
313
-
314
- /**
315
- * Hand-memoized: React Compiler does not process the shipped dist, so the hot MultiLine kind is
316
- * wrapped in `React.memo` to retain the auto-memoization it had as source (parity with ZonedLine).
317
- */
318
- const MultiLineMemo = memo(MultiLineInner)
319
- // Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
320
- // graph of nine identically-named nodes names nothing.
321
- MultiLineMemo.displayName = 'MultiLine'
322
- export const MultiLine = MultiLineMemo as typeof MultiLineInner
@@ -1,267 +0,0 @@
1
- import { AreaStack } from '@visx/shape'
2
- import { memo, useCallback, useMemo } from 'react'
3
- import { assertRequiredProps } from '../../common/validate'
4
- import type { BasaltProps } from '../../common/props'
5
- import type { CursorResolution } from '../cursor/resolve'
6
- import { CartesianChart } from '../primitives/CartesianChart'
7
- import type { AxisConfig, PlotContext } from '../primitives/CartesianChart'
8
- import type { ResponsiveChartHeight } from '../primitives/ChartFrame'
9
- import type { ChartState } from '../primitives/ChartPending'
10
- import { curveFor } from '../series'
11
- import type { ChartLegendConfig, ChartSeries } from '../series'
12
-
13
- export type StackedAreaProps<T> = BasaltProps & {
14
- data: T[]
15
- /** Height in px, or one per size step (`{ base, sm?, md?, lg? }`). Default 240. Forwarded
16
- * unchanged; `ChartFrameProps.height` owns the law — steps resolve off the MEASURED width. */
17
- height?: number | ResponsiveChartHeight
18
- chartId: string
19
- getX: (d: T) => string
20
- /** The stacked bands, bottom to top — the single source of truth for color, legend, and tooltip
21
- * rows. Typically `mark: 'area'` (rendered as a `bar`-shaped legend/tooltip swatch). */
22
- series: ChartSeries<T>[]
23
- /** Axis config for ticks/format/grid. `domain` defaults to the summed per-point stack total
24
- * (padded ×1.1, or `autoMaxFloor` if higher) rather than a per-series max — the seam a stacked
25
- * chart needs, since the plotted quantity is the cumulative band top, not any one series' own
26
- * value. Pass a fixed tuple or your own function to override. No `scale` — stacking sums bar
27
- * heights directly and a log axis has no additive zero to sum from. */
28
- y?: Omit<AxisConfig<T>, 'scale'>
29
- /** Exact number of x ticks. Default: as many as fit. Ignored when `xTickValues` is set. */
30
- xTicks?: number
31
- /** Which domain keys get a tick, from the full key list and the resolved plot width. Takes
32
- * precedence over `xTicks` — see `CartesianChartProps.xTickValues` for why a count is not
33
- * always enough. */
34
- xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
35
- /** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
36
- formatX?: (key: string) => string
37
- /** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
38
- * see `CartesianChartProps.xLabelRotate`. */
39
- xLabelRotate?: 0 | 45 | 90
40
- /**
41
- * How a sibling chart's broadcast cursor key resolves against this chart's points. Default
42
- * `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
43
- * keyed by its Monday) — see `CursorResolution`.
44
- */
45
- cursorResolution?: CursorResolution
46
- /** Legend config forwarded to `CartesianChart`; `false` disables the legend (sparkline escape).
47
- * Default `{ placement: 'bottom' }`. */
48
- legend?: ChartLegendConfig | false
49
- /** Accessible text alternative, forwarded as `aria-label` (+ `role="group"`). */
50
- ariaLabel?: string
51
- /** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
52
- isPending?: boolean
53
- /** The three "nothing to draw" states in one prop — pending → error → empty. See
54
- * `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
55
- state?: ChartState
56
- }
57
-
58
- /**
59
- * A stack is only as dense as its sparsest band. A band's value is only meaningful as part of a
60
- * cumulative total, so a row where ANY visible band reports `null` has no total — every band gaps
61
- * across it. Reading the missing band as `0` instead would be a positive claim the quantity was
62
- * measured at zero, which is exactly the absence-as-data lie `ChartSeries.getValue`'s null
63
- * contract exists to prevent.
64
- */
65
- function rowIsDense<T>(d: T, bands: readonly ChartSeries<T>[]): boolean {
66
- return bands.every((s) => s.getValue(d) !== null)
67
- }
68
-
69
- /**
70
- * Multi-series stacked-area chart with an optional derived legend (default on) and legend-hover
71
- * dimming. Each band's fillOpacity is dimmed when a different key is highlighted via the legend.
72
- *
73
- * **A stack is only as dense as its sparsest series.** A row where any VISIBLE band is null is
74
- * dropped from the stack entirely — the bands break across that x, the crosshair reports no
75
- * cumulative value there, and the axis domain ignores it. Toggling the sparse band off in the
76
- * legend closes the gap, because density is measured against the visible set. A chart that needs
77
- * a null band to read as zero must say so in its own `getValue`.
78
- *
79
- * Composes `CartesianChart` (`docs/CHARTS-SPEC.md` §2) — margin, scale, grid, axes, cursor, and
80
- * tooltip are the primitive's job. This file draws only the `AreaStack` bands.
81
- *
82
- * The tooltip must render top-to-bottom (matching the visual stack read from the top), but the
83
- * marks must stack bottom-to-top (matching `series`' own order) — the two can't share one order.
84
- * `CartesianChart`'s `series` prop drives BOTH the derived tooltip rows and legend, so `series` is
85
- * passed reversed to it (tooltip/legend read top-first); the marks then reverse `ctx.visible` back
86
- * to restore the original bottom-to-top stacking order for `AreaStack`'s `keys`.
87
- */
88
- function StackedAreaInner<T>(props: StackedAreaProps<T>) {
89
- // F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
90
- // from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
91
- // swallows into a blank subtree that names nothing.
92
- assertRequiredProps('StackedArea', props, ['data', 'getX', 'series'])
93
- const {
94
- data,
95
- chartId,
96
- getX,
97
- series,
98
- y,
99
- xTicks,
100
- xTickValues,
101
- formatX,
102
- xLabelRotate,
103
- cursorResolution,
104
- height,
105
- legend,
106
- ariaLabel,
107
- isPending,
108
- state,
109
- className,
110
- style,
111
- } = props
112
-
113
- // The stack sums band heights via `getValue` totals directly — a log axis has no additive zero
114
- // to sum from (`docs/CHARTS-SPEC.md`'s null-gap + log contract, mirrored from `Bars`' own guard).
115
- if (
116
- process.env.NODE_ENV !== 'production' &&
117
- (y as { scale?: string } | undefined)?.scale === 'log'
118
- ) {
119
- throw new Error(
120
- 'StackedArea: cannot use a log axis (y.scale: "log") — the stack sums band heights, ' +
121
- 'and a log axis has no additive zero to sum from.',
122
- )
123
- }
124
-
125
- // The plotted quantity is the CUMULATIVE stack top, not any one series' value — the built-in
126
- // 'auto' domain (per-series max) would clip a multi-band stack. Skipped when the caller already
127
- // supplies a fixed tuple or their own domain function.
128
- const yConfig = useMemo<AxisConfig<T>>(() => {
129
- const base = y ?? {}
130
- if (base.domain !== undefined && base.domain !== 'auto') return base
131
- const pad = base.autoPad ?? 1.1
132
- return {
133
- ...base,
134
- // Sums the VISIBLE bands only, so toggling one off in the legend shrinks the axis instead
135
- // of leaving a permanent empty gap above the stack.
136
- domain: (rows: readonly T[], visible: readonly ChartSeries<T>[]) => {
137
- let maxTotal = 0
138
- for (const d of rows) {
139
- // A sparse row is not drawn, so it cannot set the axis top either.
140
- if (!rowIsDense(d, visible)) continue
141
- let total = 0
142
- for (const s of visible) total += s.getValue(d) ?? 0
143
- if (total > maxTotal) maxTotal = total
144
- }
145
- return [0, Math.max(maxTotal, base.autoMaxFloor ?? maxTotal) * pad]
146
- },
147
- }
148
- }, [y])
149
-
150
- // A stacked band's crosshair dot belongs at the CUMULATIVE band top — the edge the reader is
151
- // tracking — not at the band's own raw value, which sits somewhere inside the fill.
152
- const stackedCursorValue = useCallback(
153
- (d: T, s: ChartSeries<T>, visible: readonly ChartSeries<T>[]): number | null => {
154
- // No total on a sparse row — the bands gap there, so a dot would sit on nothing. The
155
- // per-band tooltip rows keep skipping their own nulls (`deriveTooltipRows`), so a row the
156
- // stack cannot draw never contributes a value anywhere.
157
- if (!rowIsDense(d, visible)) return null
158
- let total = 0
159
- // `visible` arrives top-to-bottom (the `series.toReversed()` handed to the primitive);
160
- // stacking accumulates bottom-up.
161
- for (let i = visible.length - 1; i >= 0; i--) {
162
- const band = visible[i] as ChartSeries<T>
163
- total += band.getValue(d) ?? 0
164
- if (band.key === s.key) return total
165
- }
166
- return null
167
- },
168
- [],
169
- )
170
-
171
- // Memoized: this array is `CartesianChart`'s `series` prop, and a fresh identity every render
172
- // would bust every memo keyed on it inside the primitive (domains, tick labels, margin, visible).
173
- const reversedSeries = useMemo(() => series.toReversed(), [series])
174
-
175
- return (
176
- <CartesianChart
177
- data={data}
178
- chartId={chartId}
179
- getX={getX}
180
- series={reversedSeries}
181
- y={yConfig}
182
- cursorValue={stackedCursorValue}
183
- {...(xTicks !== undefined && { xTicks })}
184
- {...(xTickValues !== undefined && { xTickValues })}
185
- {...(formatX !== undefined && { formatX })}
186
- {...(xLabelRotate !== undefined && { xLabelRotate })}
187
- {...(cursorResolution !== undefined && { cursorResolution })}
188
- {...(height !== undefined && { height })}
189
- {...(legend !== undefined && { legend })}
190
- {...(ariaLabel !== undefined && { ariaLabel })}
191
- {...(isPending !== undefined && { isPending })}
192
- {...(state !== undefined && { state })}
193
- {...(className !== undefined && { className })}
194
- {...(style !== undefined && { style })}
195
- >
196
- {(ctx) => <StackedAreaMarks getX={getX} ctx={ctx} />}
197
- </CartesianChart>
198
- )
199
- }
200
-
201
- /**
202
- * The bands. A component rather than an inline render-prop body so the stack bookkeeping can be
203
- * memoized: the cursor is a shared store, so every pointer frame re-renders every chart, and
204
- * rebuilding the key list + lookup Map + a copy of `data` per frame is pure waste.
205
- */
206
- function StackedAreaMarks<T>({ getX, ctx }: { getX: (d: T) => string; ctx: PlotContext<T> }) {
207
- const { visible, xScale, yScale, highlighted } = ctx
208
-
209
- // Restore bottom-to-top order for the actual stacking geometry (see the component doc above).
210
- const { groups, seriesByKey } = useMemo(() => {
211
- const stackOrder = visible.toReversed()
212
- return {
213
- groups: stackOrder.map((s) => s.key),
214
- seriesByKey: new Map(stackOrder.map((s) => [s.key, s])),
215
- }
216
- }, [visible])
217
-
218
- // `AreaStack` wants a mutable array; `ctx.data` is readonly. Copy once per data change.
219
- const rows = useMemo(() => [...ctx.data], [ctx.data])
220
-
221
- // `AreaStack` draws every band from ONE curve — the bands share their boundaries, so two curves
222
- // would leave gaps and overlaps between them. `visible` is in `reversedSeries` order (top band
223
- // first), so this resolves to the TOPMOST VISIBLE band that declares a `curve` — the last such
224
- // entry in the caller's own `series` array. A band declaring none is skipped rather than read as
225
- // the monotone default, and a HIDDEN one is never consulted, so a legend toggle can hand the
226
- // stack to the next declarer down. `series.curve.test.tsx` pins all four halves of that.
227
- const curve = curveFor(visible.find((s) => s.curve !== undefined)?.curve)
228
-
229
- return (
230
- <AreaStack<T, string>
231
- data={rows}
232
- keys={groups}
233
- x={(d) => xScale(getX(d.data)) ?? 0}
234
- y0={(d) => yScale(d[0]) ?? 0}
235
- y1={(d) => yScale(d[1]) ?? 0}
236
- // d3's stack layout needs a number per cell, so a null still enters the layout as 0 — but
237
- // `defined` keeps that cell out of every band's PATH, so the zero is never drawn. Without it
238
- // a missing band reads as a measured zero and the bands above it slide down onto it.
239
- value={(d, key) => seriesByKey.get(key)?.getValue(d) ?? 0}
240
- defined={(d) => rowIsDense(d.data, visible)}
241
- curve={curve}
242
- >
243
- {({ stacks, path }) =>
244
- stacks.map((stack) => (
245
- <path
246
- key={`stack-${stack.key}`}
247
- d={path(stack) || ''}
248
- fill={seriesByKey.get(stack.key)?.color}
249
- stroke="transparent"
250
- fillOpacity={highlighted === null || highlighted === stack.key ? 1 : 0.25}
251
- />
252
- ))
253
- }
254
- </AreaStack>
255
- )
256
- }
257
-
258
- /**
259
- * Hand-memoized: React Compiler does not process the shipped dist, so we wrap the
260
- * hot stacked-area kind in `React.memo` to retain the auto-memoization it had as source
261
- * (parity with ZonedLine / Bars / MultiLine).
262
- */
263
- const StackedAreaMemo = memo(StackedAreaInner)
264
- // Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
265
- // graph of nine identically-named nodes names nothing.
266
- StackedAreaMemo.displayName = 'StackedArea'
267
- export const StackedArea = StackedAreaMemo as typeof StackedAreaInner