basalt-ui 1.40.3 → 2.0.0

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