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,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