basalt-ui 1.41.0 → 2.0.1

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