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,276 +0,0 @@
1
- /**
2
- * The series descriptor — single source of truth for color + line-style + label + accessor.
3
- * Legend + tooltip rows are *derived* from it, never hand-authored in parallel. Mantine-free.
4
- *
5
- * Generalizes `MultiLineSeries<T>` (`kinds/MultiLine.tsx`) into the shared spine consumed by
6
- * every kind. `LegendPlacement` also lives here so `ChartLegend` and the future `ChartFrame`
7
- * share one definition.
8
- */
9
-
10
- import {
11
- curveLinear,
12
- curveMonotoneX,
13
- curveStep,
14
- curveStepAfter,
15
- curveStepBefore,
16
- } from '@visx/curve'
17
- import type { LegendEntry } from './primitives/ChartLegend'
18
-
19
- /**
20
- * Default stroke width for plotted line overlays in `DualPanel` / `MultiLine` / `ZonedLine` —
21
- * thinner than the generic `VX.lineWidth` per the 2026-07 modern-zinc redesign
22
- * (`docs/DESIGN-SPEC.md` §5, "tertiary/line overlay ... at 1.9px stroke"). `VX.lineWidth` itself
23
- * stays the "one width everywhere" default for `Bars`' line overlays, legend line swatches, and
24
- * `TooltipRow`'s generic fallback — this constant only overrides the three kinds it's imported by.
25
- */
26
- export const LINE_OVERLAY_STROKE_WIDTH = 1.9
27
-
28
- /** Governs BOTH the plotted mark and the legend swatch shape. */
29
- export type SeriesMark = 'line' | 'bar' | 'area'
30
-
31
- /** Only meaningful for `mark: 'line'`. */
32
- export type SeriesDash = 'solid' | 'dashed'
33
-
34
- /**
35
- * The interpolation between two plotted points. Named rather than a raw d3 `CurveFactory` so the
36
- * set is closed, serializable, and identical across every kind — a chart cannot pick a curve the
37
- * legend swatch and the sibling chart next to it do not also understand.
38
- *
39
- * - `monotone` (default, today's behaviour everywhere) — smoothed, overshoot-free.
40
- * - `linear` — straight segments. The honest choice when the points are samples, not a signal.
41
- * - `step` / `stepAfter` / `stepBefore` — the value HOLDS between samples and changes at one x.
42
- * Reach for these when the quantity is piecewise-constant (a price tier, a config value, a
43
- * discrete state): a smoothed curve through them draws intermediate values that never existed.
44
- * `stepAfter` holds the value forward from its own x, `stepBefore` holds it back from the next,
45
- * `step` changes at the midpoint.
46
- */
47
- export type SeriesCurve = 'monotone' | 'linear' | 'step' | 'stepAfter' | 'stepBefore'
48
-
49
- /** d3's curve-factory shape, taken from a curve we already import rather than from
50
- * `@visx/vendor/d3-shape` — that package is a transitive of `@visx/curve`, not one of the nine
51
- * exact-pinned peers, so naming it in an import would add an undeclared dependency. */
52
- type CurveFactory = typeof curveMonotoneX
53
-
54
- const CURVES: Record<SeriesCurve, CurveFactory> = {
55
- monotone: curveMonotoneX,
56
- linear: curveLinear,
57
- step: curveStep,
58
- stepAfter: curveStepAfter,
59
- stepBefore: curveStepBefore,
60
- }
61
-
62
- /**
63
- * The d3 curve factory for a {@link SeriesCurve}. `undefined` resolves to `curveMonotoneX` — the
64
- * value every kind hard-coded before this seam existed, so an omitted `curve` moves nothing.
65
- * Exported for a hand-composed plot that draws its own `LinePath` from the same `series` array.
66
- */
67
- export function curveFor(curve?: SeriesCurve): CurveFactory {
68
- return curve === undefined ? curveMonotoneX : CURVES[curve]
69
- }
70
-
71
- /** Drives legend grouping/dividers. */
72
- export type SeriesRole = 'series' | 'overlay' | 'reference'
73
-
74
- /** Where the derived legend renders relative to the plot. */
75
- export type LegendPlacement = 'top' | 'bottom' | 'left' | 'right'
76
-
77
- /**
78
- * Consumer-facing legend config exposed by every kind's `legend` prop — the subset of
79
- * `ChartFrame`'s legend object a consumer may set directly. Deliberately excludes
80
- * `highlighted`/`onHighlight`, which the kind injects itself (its own hover-dim state).
81
- * `legend={false}` on a kind disables the legend entirely (the sparkline escape).
82
- */
83
- export type ChartLegendConfig = {
84
- /** Default 'bottom'. */
85
- placement?: LegendPlacement
86
- /** Visually separate role: series | overlay | reference. */
87
- groups?: boolean
88
- /**
89
- * @deprecated Removed in 1.32.0 — the legend fits by measured width and folds overflow into an
90
- * `All N` disclosure on its own. An explicit value still wins this release (entry count).
91
- */
92
- maxRows?: number
93
- /** Clicking an entry hides that series. Default: on whenever there is more than one entry. */
94
- toggle?: boolean
95
- }
96
-
97
- /** Visual identity of a series — everything the legend + tooltip swatch need. No accessors, no `T`. */
98
- export type SeriesStyle = {
99
- key: string
100
- label: string
101
- /** A --vx-* ref (VX.series.*), never a raw hex. */
102
- color: string
103
- mark: SeriesMark
104
- /** Default 'solid'. */
105
- dash?: SeriesDash
106
- /**
107
- * Interpolation between points for the line/area shapes this series draws. Default `'monotone'`
108
- * — today's behaviour, unchanged, everywhere. See {@link SeriesCurve} for when a step curve is
109
- * the honest one. Silently no-ops on `mark: 'bar'`, which has nothing to interpolate.
110
- */
111
- curve?: SeriesCurve
112
- /** Default VX.lineWidth (one width, everywhere). */
113
- strokeWidth?: number
114
- /** bar/area: the swatch honors this so it cannot lie. */
115
- fillOpacity?: number
116
- /**
117
- * A MARK property — dims the plotted stroke, e.g. a faint moving-average companion line. The
118
- * legend swatch honors it too (parity with `fillOpacity`, which it already honors — a swatch
119
- * that lies is the thing the derived-legend rule exists to prevent). The TOOLTIP ROW swatch and
120
- * the CROSSHAIR DOT deliberately do NOT honor it: those are 12px value-readout chips where a
121
- * sub-1 opacity reads as a rendering bug, not as data.
122
- *
123
- * Applies to STROKES only, so it silently no-ops on a `mark: 'bar'`/`'area'` series — a bar
124
- * swatch has no stroke to dim. Dim those with `fillOpacity` instead. This bites the
125
- * zone/reference-legend idiom in particular (`mark: 'bar'`, `getValue: () => null`), where
126
- * reaching for `strokeOpacity` looks right and does nothing.
127
- */
128
- strokeOpacity?: number
129
- /** Which y-axis this series is measured against. Default 'left'. `'right'` is what makes a
130
- * chart dual-axis — `CartesianChart` reads it for the crosshair dots and the tooltip. */
131
- axis?: 'left' | 'right'
132
- /** Default 'series'. */
133
- role?: SeriesRole
134
- /** Default true; false = companion folded under `parent`. */
135
- legend?: boolean
136
- /**
137
- * Default true; false = drawn and legended, but NEVER listed as a tooltip row. The replacement
138
- * for the per-kind `hideBarTooltipRows` escape the old layer had: it belongs to the series, not to the kind, so
139
- * one series can opt out without the kind growing a prop for it.
140
- */
141
- tooltip?: boolean
142
- /** e.g. an MA line names its parent so hover-dimming keeps the pair. */
143
- parent?: string
144
- /** Short qualifier rendered after the label in muted text — e.g. a flat-at-zero series that is
145
- * invisible in the plot. */
146
- note?: string
147
- }
148
-
149
- /** Full descriptor = visual identity + data accessors. Generic over the point type. */
150
- export type ChartSeries<T> = SeriesStyle & {
151
- /**
152
- * null = an ABSENCE, never a zero: a real gap in the line/area (`defined`, not a straight
153
- * interpolation across the hole) plus a skipped tooltip row and no crosshair dot. In a STACKED
154
- * kind the absence is contagious — a band with no value leaves no cumulative total, so the whole
155
- * stack gaps at that x (`StackedArea`'s JSDoc has the accounting).
156
- */
157
- getValue: (d: T) => number | null
158
- /** Per-series override of the shared tooltip/value formatter. Receives the hovered datum
159
- * alongside the value so a row can read fields beyond the plotted number (e.g. `97.5 kg (92.5 ×
160
- * 3)`). */
161
- formatValue?: (v: number, d: T) => string
162
- /** PR star / status dot. Return null for no marker at that point. `ring` defaults true (today's
163
- * punched-out stroke, unchanged); `false` omits the stroke entirely. `fillOpacity` defaults 1. */
164
- getMarker?: (d: T) => { color?: string; r?: number; fillOpacity?: number; ring?: boolean } | null
165
- }
166
-
167
- /** A single derived tooltip row, ready for `TooltipRow`. */
168
- export type TooltipRowData = {
169
- key: string
170
- label: string
171
- color: string
172
- value: string
173
- shape: 'line' | 'bar'
174
- dashed: boolean
175
- strokeWidth?: number
176
- }
177
-
178
- const shapeFor = (mark: SeriesMark): 'line' | 'bar' => (mark === 'line' ? 'line' : 'bar')
179
-
180
- function legendEntryFor(s: SeriesStyle): LegendEntry {
181
- return {
182
- key: s.key,
183
- label: s.label,
184
- color: s.color,
185
- shape: shapeFor(s.mark),
186
- dashed: s.dash === 'dashed',
187
- ...(s.strokeWidth !== undefined && { strokeWidth: s.strokeWidth }),
188
- ...(s.fillOpacity !== undefined && { fillOpacity: s.fillOpacity }),
189
- ...(s.strokeOpacity !== undefined && { strokeOpacity: s.strokeOpacity }),
190
- ...(s.role !== undefined && { role: s.role }),
191
- ...(s.note !== undefined && { note: s.note }),
192
- }
193
- }
194
-
195
- /**
196
- * Derive the legend from a series-style array — the enforcement that the legend can never drift
197
- * from what's plotted. Groups by `role` (series → overlay → reference) via `ChartLegend`'s own
198
- * `groups` rendering.
199
- *
200
- * `legend === false`: dropped entirely, UNLESS `parent` names another series in the array — then
201
- * it is folded into that parent's `LegendEntry.children` as a subordinate dashed sub-entry (e.g.
202
- * an MA companion), rather than vanishing. A series with `legend !== false` always renders as a
203
- * normal top-level entry.
204
- */
205
- export function deriveLegend(series: readonly SeriesStyle[]): LegendEntry[] {
206
- const entries: LegendEntry[] = []
207
- const byKey = new Map<string, LegendEntry>()
208
-
209
- for (const s of series) {
210
- if (s.legend === false) continue
211
- const entry = legendEntryFor(s)
212
- entries.push(entry)
213
- byKey.set(s.key, entry)
214
- }
215
-
216
- for (const s of series) {
217
- if (s.legend !== false || s.parent === undefined) continue
218
- const parent = byKey.get(s.parent)
219
- if (parent === undefined) continue
220
- parent.children ??= []
221
- parent.children.push(legendEntryFor(s))
222
- }
223
-
224
- return entries
225
- }
226
-
227
- /**
228
- * Derive tooltip rows from a series descriptor array + the hovered datum. Skips rows where
229
- * `getValue(datum) === null` or `tooltip === false`; honors per-series `formatValue` over the
230
- * shared `fallbackFormat`.
231
- * Kinds pass `series.toReversed()` for stacked charts so the tooltip stack matches the visual stack.
232
- */
233
- export function deriveTooltipRows<T>(
234
- series: readonly ChartSeries<T>[],
235
- datum: T,
236
- fallbackFormat: (v: number) => string,
237
- ): TooltipRowData[] {
238
- const rows: TooltipRowData[] = []
239
- for (const s of series) {
240
- if (s.tooltip === false) continue
241
- const value = s.getValue(datum)
242
- if (value === null) continue
243
- const format: (v: number, d: T) => string = s.formatValue ?? fallbackFormat
244
- rows.push({
245
- key: s.key,
246
- label: s.label,
247
- color: s.color,
248
- value: format(value, datum),
249
- shape: shapeFor(s.mark),
250
- dashed: s.dash === 'dashed',
251
- ...(s.strokeWidth !== undefined && { strokeWidth: s.strokeWidth }),
252
- })
253
- }
254
- return rows
255
- }
256
-
257
- /**
258
- * Coerces a `ChartSeries.getValue` result into what a plotted point stores as its y: `null`,
259
- * `undefined` and `NaN` all collapse to `null`, which downstream `definedOn` reads as a
260
- * documented gap rather than a value to plot. Shared by `MultiLine`'s `seriesPoints` and
261
- * `ZonedLine`'s `linePoints` — both used to reimplement this coercion independently.
262
- */
263
- export function toPlotPoint(v: number | null | undefined): number | null {
264
- return v === null || v === undefined || Number.isNaN(v) ? null : v
265
- }
266
-
267
- /**
268
- * A `defined` predicate for `LinePath`/`AreaClosed`/`Threshold`, bound to one y-scale. A null
269
- * `__y` is a documented gap (`ChartSeries.getValue`), and a non-positive value on a log scale maps
270
- * to `NaN` via the scale itself — without excluding both, d3's generators either draw an
271
- * interpolated straight line across the hole or blank the entire path from that point on (SVG's
272
- * `NaN` path-command handling). Shared by `MultiLine` and `ZonedLine`.
273
- */
274
- export function definedOn(scale: (y: number) => number): (d: { __y: number | null }) => boolean {
275
- return (d) => d.__y !== null && Number.isFinite(scale(d.__y))
276
- }
@@ -1,94 +0,0 @@
1
- import { scaleLinear } from '@visx/scale'
2
- import { useMemo } from 'react'
3
- import type { BasaltProps } from '../../common/props'
4
- import { VX } from '../../tokens'
5
-
6
- export type BarSparklineProps = BasaltProps & {
7
- data: number[]
8
- width: number
9
- height: number
10
- color?: string
11
- /**
12
- * Gap between two bars, in px. `1` is the shipped look; `2` at ~10 bars reads as a discrete series
13
- * rather than a histogram, which is the KPI-card treatment.
14
- *
15
- * @default 1
16
- */
17
- barGap?: number
18
- /**
19
- * Bar corner radius, in px. `0` is the shipped look.
20
- *
21
- * @default 0
22
- */
23
- barRadius?: number
24
- /**
25
- * Paints the LAST bar in `emphasisColor` at full opacity — "this is where the series ends", the
26
- * one reading a trend beside a KPI value is actually for. Off by default: a chart that means
27
- * something by its final point must say so.
28
- *
29
- * @default false
30
- */
31
- emphasizeLast?: boolean
32
- /** The emphasised bar's fill. @default `VX.accent` */
33
- emphasisColor?: string
34
- /** Accessible text alternative, applied as `aria-label` (+ `role="img"`) on the `<svg>`. */
35
- ariaLabel?: string
36
- }
37
-
38
- /** Quiet inline bar trend — defaults to `VX.faint`, matching the sparkline family's restrained
39
- * identity (docs/DESIGN-SPEC.md §5). Every geometry option below defaults to the shipped look, so
40
- * an existing call site renders byte-identically. */
41
- export function BarSparkline({
42
- data,
43
- width,
44
- height,
45
- color,
46
- barGap = 1,
47
- barRadius = 0,
48
- emphasizeLast = false,
49
- emphasisColor,
50
- ariaLabel,
51
- className,
52
- style,
53
- }: BarSparklineProps) {
54
- const fillColor = color ?? VX.faint
55
- const lastColor = emphasisColor ?? VX.accent
56
- const a11yProps = ariaLabel !== undefined ? { role: 'img' as const, 'aria-label': ariaLabel } : {}
57
-
58
- const yScale = useMemo(() => {
59
- const max = Math.max(...data.filter((v) => isFinite(v)), 1)
60
- return scaleLinear<number>({ domain: [0, max], range: [0, height] })
61
- }, [data, height])
62
-
63
- const rootProps = {
64
- ...(className !== undefined && { className }),
65
- ...(style !== undefined && { style }),
66
- }
67
-
68
- if (!data.length) return <svg width={width} height={height} {...rootProps} {...a11yProps} />
69
-
70
- const step = width / data.length
71
- const barWidth = Math.max(step - barGap, 1)
72
- const lastIndex = data.length - 1
73
-
74
- return (
75
- <svg width={width} height={height} {...rootProps} {...a11yProps}>
76
- {data.map((v, i) => {
77
- const bh = Math.max(yScale(Math.max(v, 0)), 0)
78
- const isLast = emphasizeLast && i === lastIndex
79
- return (
80
- <rect
81
- key={i}
82
- x={i * step}
83
- y={height - bh}
84
- width={barWidth}
85
- height={bh}
86
- {...(barRadius > 0 && { rx: barRadius })}
87
- fill={isLast ? lastColor : fillColor}
88
- fillOpacity={isLast ? 1 : 0.75}
89
- />
90
- )
91
- })}
92
- </svg>
93
- )
94
- }
@@ -1,71 +0,0 @@
1
- import { curveMonotoneX } from '@visx/curve'
2
- import { Group } from '@visx/group'
3
- import { scaleLinear } from '@visx/scale'
4
- import { LinePath } from '@visx/shape'
5
- import { useMemo } from 'react'
6
- import type { BasaltProps } from '../../common/props'
7
- import { VX } from '../../tokens'
8
-
9
- export type LineSparklineProps = BasaltProps & {
10
- data: number[]
11
- width: number
12
- height: number
13
- color?: string
14
- /** Accessible text alternative, applied as `aria-label` (+ `role="img"`) on the `<svg>`. */
15
- ariaLabel?: string
16
- }
17
-
18
- /**
19
- * Quiet single-hue trend line (docs/DESIGN-SPEC.md §5: "single 1.6px faint line, no fill, no
20
- * axes, no dots"). Sparklines default to `VX.faint`, not the bolder `VX.line` used by full charts.
21
- */
22
- export function LineSparkline({
23
- data,
24
- width,
25
- height,
26
- color,
27
- ariaLabel,
28
- className,
29
- style,
30
- }: LineSparklineProps) {
31
- const strokeColor = color ?? VX.faint
32
- const a11yProps = ariaLabel !== undefined ? { role: 'img' as const, 'aria-label': ariaLabel } : {}
33
-
34
- const xScale = useMemo(
35
- () => scaleLinear<number>({ domain: [0, Math.max(data.length - 1, 1)], range: [0, width] }),
36
- [data.length, width],
37
- )
38
-
39
- const yScale = useMemo(() => {
40
- const vals = data.filter((v) => isFinite(v))
41
- if (!vals.length) return scaleLinear<number>({ domain: [0, 1], range: [height, 0] })
42
- const min = Math.min(...vals)
43
- const max = Math.max(...vals)
44
- const pad = (max - min) * 0.1 || 1
45
- return scaleLinear<number>({ domain: [min - pad, max + pad], range: [height, 0] })
46
- }, [data, height])
47
-
48
- const rootProps = {
49
- ...(className !== undefined && { className }),
50
- ...(style !== undefined && { style }),
51
- }
52
-
53
- if (data.length < 2) return <svg width={width} height={height} {...rootProps} {...a11yProps} />
54
-
55
- const indexed = data.map((v, i) => ({ v, i }))
56
-
57
- return (
58
- <svg width={width} height={height} {...rootProps} {...a11yProps}>
59
- <Group>
60
- <LinePath<{ v: number; i: number }>
61
- data={indexed}
62
- x={(d) => xScale(d.i)}
63
- y={(d) => yScale(d.v)}
64
- stroke={strokeColor}
65
- strokeWidth={1.6}
66
- curve={curveMonotoneX}
67
- />
68
- </Group>
69
- </svg>
70
- )
71
- }
@@ -1,2 +0,0 @@
1
- export { LineSparkline, type LineSparklineProps } from './LineSparkline'
2
- export { BarSparkline, type BarSparklineProps } from './BarSparkline'
@@ -1,53 +0,0 @@
1
- import { createContext, useContext, useMemo } from 'react'
2
- import type { ReactNode } from 'react'
3
-
4
- type ColorScheme = 'light' | 'dark'
5
-
6
- export type VxTheme = {
7
- colorScheme: ColorScheme
8
- line: string
9
- line2: string
10
- axis: string
11
- axisStroke: string
12
- tooltipBg: string
13
- tooltipText: string
14
- tooltipMuted: string
15
- tooltipBorder: string
16
- tooltipShadow: string
17
- }
18
-
19
- /**
20
- * Theme-resolved neutrals are now CSS custom properties (see the token layer). They resolve per
21
- * Mantine color scheme in CSS, so these are static var refs — the provider keeps `colorScheme`
22
- * only for any non-color branching a chart may need.
23
- */
24
- const REFS = {
25
- line: 'var(--vx-line)',
26
- line2: 'var(--vx-line2)',
27
- axis: 'var(--vx-axis)',
28
- axisStroke: 'var(--vx-axis-stroke)',
29
- tooltipBg: 'var(--vx-tooltip-bg)',
30
- tooltipText: 'var(--vx-tooltip-text)',
31
- tooltipMuted: 'var(--vx-tooltip-muted)',
32
- tooltipBorder: 'var(--vx-tooltip-border)',
33
- tooltipShadow: 'var(--vx-tooltip-shadow)',
34
- } as const
35
-
36
- const VxThemeContext = createContext<VxTheme | null>(null)
37
-
38
- export function VxThemeProvider({
39
- colorScheme,
40
- children,
41
- }: {
42
- colorScheme: ColorScheme
43
- children: ReactNode
44
- }) {
45
- const value = useMemo<VxTheme>(() => ({ colorScheme, ...REFS }), [colorScheme])
46
- return <VxThemeContext.Provider value={value}>{children}</VxThemeContext.Provider>
47
- }
48
-
49
- export function useVxTheme(): VxTheme {
50
- const ctx = useContext(VxThemeContext)
51
- if (!ctx) throw new Error('useVxTheme must be used inside <VxThemeProvider>')
52
- return ctx
53
- }
@@ -1,41 +0,0 @@
1
- /**
2
- * Auto y-domain lower-bound padding — shared by every `yAutoMinCeil`/`autoMinCeil` idiom across
3
- * the kinds (MultiLine, ZonedLine, Bars' left/right axes).
4
- *
5
- * The lower bound must always pad AWAY from the data (`lower <= candidate`), never toward it —
6
- * a naive `candidate * pad` clips data whenever `candidate` is positive (padding a positive floor
7
- * UP moves it toward, and past, the data minimum). This is exactly the `yAutoMinCeil={Infinity}`
8
- * ("no forced zero baseline") idiom: `candidate` becomes the raw data minimum, which is usually
9
- * positive (e.g. a body-weight series bottoming out at 78), and the old multiplicative pad shoved
10
- * the axis floor above it.
11
- *
12
- * `candidate` is the caller's `Math.min(dataMin, ceil)` — the ceiling has already been applied.
13
- * - `candidate === 0` (the common default-zero-baseline case: positive-only data with the
14
- * default `ceil = 0`) stays exactly 0 — never pushed negative.
15
- * - `candidate > 0` divides by `pad`, moving the floor DOWN toward (and below) the candidate.
16
- * - `candidate < 0` multiplies by `pad`, moving the floor further DOWN (more negative) — the
17
- * pre-existing, still-correct behavior for genuinely negative-swinging metrics.
18
- */
19
- export function padAutoLower(candidate: number, pad: number): number {
20
- if (candidate === 0) return 0
21
- return candidate > 0 ? candidate / pad : candidate * pad
22
- }
23
-
24
- /**
25
- * Auto y-domain upper-bound padding — the exact mirror of {@link padAutoLower}, sharing its
26
- * sign-safety: pad AWAY from zero (`upper >= candidate`), never toward it. `candidate` is the
27
- * caller's `Math.max(dataMax, floor)` — the `autoMaxFloor` clamp has already been applied, so
28
- * padding runs AFTER the floor, not before it. Applying the floor post-pad (the pre-existing bug)
29
- * lands a floored axis top exactly on the floor value with zero headroom — a target line pinned to
30
- * that floor then sits glued to the plot edge instead of getting the same breathing room every
31
- * other bound gets.
32
- *
33
- * - `candidate === 0` stays exactly 0 — never pushed positive.
34
- * - `candidate > 0` multiplies by `pad`, moving the ceiling further UP (away from zero).
35
- * - `candidate < 0` divides by `pad`, moving the ceiling UP toward (and past) zero — the mirror of
36
- * `padAutoLower`'s `candidate > 0` branch.
37
- */
38
- export function padAutoUpper(candidate: number, pad: number): number {
39
- if (candidate === 0) return 0
40
- return candidate > 0 ? candidate * pad : candidate / pad
41
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Re-export shim. The implementation moved to `basalt-ui/format` (C5 consolidation, so
3
- * `money`/`percent`/`duration`/`clock`/… and the chart formatters share one implementation
4
- * instead of two). This file stays so every existing relative import inside `src/charts/**`
5
- * (`../utils/format`) keeps resolving unchanged.
6
- */
7
- export {
8
- fmtAxisDate,
9
- fmtTooltipDate,
10
- fmtCompact,
11
- type FmtCompactOptions,
12
- fmtPercent,
13
- type FmtPercentOptions,
14
- fmtCurrency,
15
- type FmtCurrencyOptions,
16
- fmtInt,
17
- formatters,
18
- NON_FINITE,
19
- } from '../../format'
@@ -1,109 +0,0 @@
1
- /**
2
- * Text measurement for chart layout — the input to {@link autoMargin}.
3
- *
4
- * A static margin token cannot know how wide a tick label is, which is why charts used to have to be
5
- * hand-nudged whenever a label grew (`docs/CHARTS-SPEC.md` §1). This measures the strings that
6
- * will actually be painted, via an OFFSCREEN canvas 2D context: no element is attached, so there
7
- * is no layout thrash and no reflow — unlike an SVG `getBBox()` probe.
8
- *
9
- * Mantine-free and dependency-free by construction (`charts/**` boundary).
10
- */
11
-
12
- /** Fallback advance width per character, as a fraction of the font size, when no DOM is
13
- * available (SSR, `renderToStaticMarkup`). Mono faces sit near 0.6em; being deterministic matters
14
- * more than being exact, since the measured value is only ever a floor-raiser. */
15
- const FALLBACK_CHAR_RATIO = 0.6
16
-
17
- /** Last-resort family when the `--basalt-font-mono` custom property cannot be read. */
18
- const FALLBACK_MONO = 'ui-monospace, SFMono-Regular, Menlo, monospace'
19
-
20
- /**
21
- * Cap on the memo table. Tick labels are low-cardinality per chart, but a long-lived SPA with a
22
- * live counter or currency axis mints a new string every update, and an unbounded module-level Map
23
- * would then grow for the life of the tab. On overflow the whole table is dropped rather than
24
- * evicted one by one: the working set is tiny and re-measuring it costs microseconds, so an LRU's
25
- * bookkeeping would cost more than the misses it avoids.
26
- */
27
- const CACHE_LIMIT = 2000
28
-
29
- const cache = new Map<string, number>()
30
-
31
- let ctx: CanvasRenderingContext2D | null | undefined
32
- let monoFamily: string | undefined
33
-
34
- function canvasContext(): CanvasRenderingContext2D | null {
35
- if (ctx !== undefined) return ctx
36
- if (typeof document === 'undefined') {
37
- ctx = null
38
- return ctx
39
- }
40
- ctx = document.createElement('canvas').getContext('2d')
41
- // Webfonts swap in after first paint; measurements taken against the fallback face would then
42
- // be stale (usually too narrow). Drop the cache once, when the real faces are ready.
43
- // `?.` on every hop: a non-browser DOM harness can expose `document` with no `fonts`, or a
44
- // `fonts` with no `ready` — neither is a reason to fail a measurement.
45
- document.fonts?.ready?.then?.(() => cache.clear()).catch(() => {})
46
- return ctx
47
- }
48
-
49
- /**
50
- * The resolved value of `--basalt-font-mono` — canvas needs a concrete family list, it cannot
51
- * resolve a CSS custom property. Read once from the document element.
52
- */
53
- export function monoFontFamily(): string {
54
- if (monoFamily !== undefined) return monoFamily
55
- if (typeof document === 'undefined' || typeof getComputedStyle !== 'function') {
56
- monoFamily = FALLBACK_MONO
57
- return monoFamily
58
- }
59
- const value = getComputedStyle(document.documentElement)
60
- .getPropertyValue('--basalt-font-mono')
61
- .trim()
62
- monoFamily = value.length > 0 ? value : FALLBACK_MONO
63
- return monoFamily
64
- }
65
-
66
- /**
67
- * Width in px of `text` at `fontPx` in the chart tick font. Memoized per `font|text` — a chart
68
- * re-measures the same ~10 tick labels on every resize, and the cache turns that into a Map hit.
69
- */
70
- export function measureText(text: string, fontPx: number, fontFamily?: string): number {
71
- const family = fontFamily ?? monoFontFamily()
72
- const font = `${fontPx}px ${family}`
73
- const key = `${font}|${text}`
74
- const hit = cache.get(key)
75
- if (hit !== undefined) return hit
76
-
77
- const c = canvasContext()
78
- let width: number
79
- if (c === null) {
80
- width = text.length * fontPx * FALLBACK_CHAR_RATIO
81
- } else {
82
- c.font = font
83
- width = c.measureText(text).width
84
- }
85
- if (cache.size >= CACHE_LIMIT) cache.clear()
86
- cache.set(key, width)
87
- return width
88
- }
89
-
90
- /** Widest of `texts` at `fontPx`. Returns 0 for an empty list. */
91
- export function maxTextWidth(
92
- texts: readonly string[],
93
- fontPx: number,
94
- fontFamily?: string,
95
- ): number {
96
- let max = 0
97
- for (const text of texts) {
98
- const width = measureText(text, fontPx, fontFamily)
99
- if (width > max) max = width
100
- }
101
- return max
102
- }
103
-
104
- /** Test seam — drops the memo table (and the resolved family) so a test can change fonts. */
105
- export function resetTextMetrics(): void {
106
- cache.clear()
107
- ctx = undefined
108
- monoFamily = undefined
109
- }