basalt-ui 1.41.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (914) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +535 -518
  3. package/MIGRATING.md +945 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +14 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/doctor-upgrade.d.ts +31 -0
  175. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  176. package/dist/cli/doctor-upgrade.js +269 -0
  177. package/dist/cli/doctor.d.ts +13 -29
  178. package/dist/cli/doctor.d.ts.map +1 -1
  179. package/dist/cli/doctor.js +51 -9
  180. package/dist/cli/help.d.ts.map +1 -1
  181. package/dist/cli/help.js +2 -4
  182. package/dist/cli/index.d.ts +48 -172
  183. package/dist/cli/index.d.ts.map +1 -1
  184. package/dist/cli/index.js +39 -132
  185. package/dist/cli/init.d.ts.map +1 -1
  186. package/dist/cli/init.js +43 -37
  187. package/dist/cli/sync.d.ts +5 -21
  188. package/dist/cli/sync.d.ts.map +1 -1
  189. package/dist/cli/sync.js +4 -23
  190. package/dist/cli/tokens-css.d.ts +7 -28
  191. package/dist/cli/tokens-css.d.ts.map +1 -1
  192. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.js +4 -5
  194. package/dist/commands/define-commands.d.ts +15 -31
  195. package/dist/commands/define-commands.d.ts.map +1 -1
  196. package/dist/commands/define-commands.js +1 -11
  197. package/dist/commands/define-overlays.d.ts +5 -19
  198. package/dist/commands/define-overlays.d.ts.map +1 -1
  199. package/dist/commands/define-overlays.js +3 -11
  200. package/dist/commands/index.d.ts +10 -40
  201. package/dist/commands/index.d.ts.map +1 -1
  202. package/dist/commands/index.js +9 -46
  203. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  204. package/dist/commands/notifications/bell.d.ts.map +1 -0
  205. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  206. package/dist/commands/notifications/center.d.ts.map +1 -0
  207. package/dist/{notifications → commands/notifications}/center.js +2 -2
  208. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  209. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  210. package/dist/commands/notifications/notify.d.ts +44 -0
  211. package/dist/commands/notifications/notify.d.ts.map +1 -0
  212. package/dist/commands/notifications/notify.js +79 -0
  213. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  214. package/dist/commands/notifications/store.d.ts.map +1 -0
  215. package/dist/{notifications → commands/notifications}/store.js +4 -0
  216. package/dist/commands/projectors.d.ts +1 -131
  217. package/dist/commands/projectors.d.ts.map +1 -1
  218. package/dist/commands/projectors.js +2 -73
  219. package/dist/commands/shell-bridge.d.ts +3 -3
  220. package/dist/commands/shortcut-format.d.ts +5 -4
  221. package/dist/commands/shortcut-format.d.ts.map +1 -1
  222. package/dist/common/errors.d.ts +3 -3
  223. package/dist/common/use-measured-widths.d.ts.map +1 -1
  224. package/dist/common/use-measured-widths.js +5 -3
  225. package/dist/common/validate.d.ts +2 -2
  226. package/dist/content/article-layout.d.ts.map +1 -1
  227. package/dist/content/article-layout.js +3 -3
  228. package/dist/content/article-model.d.ts +1 -46
  229. package/dist/content/article-model.d.ts.map +1 -1
  230. package/dist/content/article-model.js +1 -29
  231. package/dist/content/index.d.ts +11 -41
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +3 -35
  234. package/dist/content/markdown.d.ts +1 -1
  235. package/dist/content/markdown.d.ts.map +1 -1
  236. package/dist/content/markdown.js +1 -1
  237. package/dist/content/mermaid.d.ts.map +1 -1
  238. package/dist/content/mermaid.js +7 -7
  239. package/dist/content/slug.d.ts +1 -8
  240. package/dist/content/slug.d.ts.map +1 -1
  241. package/dist/content/slug.js +1 -8
  242. package/dist/content/url-hardening.d.ts +2 -2
  243. package/dist/content/url-hardening.d.ts.map +1 -1
  244. package/dist/content/url-hardening.js +2 -0
  245. package/dist/controls/actions.d.ts +16 -1
  246. package/dist/controls/actions.d.ts.map +1 -1
  247. package/dist/controls/enum-filter.d.ts +1 -1
  248. package/dist/controls/enum-filter.d.ts.map +1 -1
  249. package/dist/controls/filter-context.d.ts.map +1 -1
  250. package/dist/controls/filter-context.js +3 -1
  251. package/dist/controls/filter-set.js +4 -6
  252. package/dist/controls/form-layout.d.ts +1 -1
  253. package/dist/controls/form-layout.d.ts.map +1 -1
  254. package/dist/controls/form-layout.js +1 -1
  255. package/dist/controls/glyphs.d.ts +0 -2
  256. package/dist/controls/glyphs.d.ts.map +1 -1
  257. package/dist/controls/glyphs.js +0 -7
  258. package/dist/controls/index.d.ts +12 -17
  259. package/dist/controls/index.d.ts.map +1 -1
  260. package/dist/controls/index.js +5 -39
  261. package/dist/controls/multi-select-filter.d.ts +4 -3
  262. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  263. package/dist/controls/number-filter.d.ts +4 -3
  264. package/dist/controls/number-filter.d.ts.map +1 -1
  265. package/dist/controls/number-filter.js +3 -1
  266. package/dist/controls/range-filter.d.ts +4 -3
  267. package/dist/controls/range-filter.d.ts.map +1 -1
  268. package/dist/controls/search-filter.d.ts +4 -3
  269. package/dist/controls/search-filter.d.ts.map +1 -1
  270. package/dist/controls/search-filter.js +19 -14
  271. package/dist/controls/select-filter.d.ts +4 -3
  272. package/dist/controls/select-filter.d.ts.map +1 -1
  273. package/dist/controls/sync-button.d.ts.map +1 -1
  274. package/dist/controls/sync-button.js +12 -15
  275. package/dist/controls/toggle-filter.d.ts +4 -3
  276. package/dist/controls/toggle-filter.d.ts.map +1 -1
  277. package/dist/controls/uncontrolled.d.ts +12 -0
  278. package/dist/controls/uncontrolled.d.ts.map +1 -0
  279. package/dist/controls/view-tabs.d.ts +2 -2
  280. package/dist/controls/view-tabs.d.ts.map +1 -1
  281. package/dist/controls-dates/index.d.ts +0 -1
  282. package/dist/controls-dates/index.d.ts.map +1 -1
  283. package/dist/dashboard/index.d.ts +7 -9
  284. package/dist/dashboard/index.d.ts.map +1 -1
  285. package/dist/dashboard/index.js +3 -23
  286. package/dist/dashboard/section.d.ts +4 -6
  287. package/dist/dashboard/section.d.ts.map +1 -1
  288. package/dist/dashboard/section.js +4 -10
  289. package/dist/dashboard/stat-card.d.ts +4 -4
  290. package/dist/dashboard/stat-card.d.ts.map +1 -1
  291. package/dist/dashboard/stat-card.js +3 -3
  292. package/dist/dashboard/widget-header.module.css +9 -7
  293. package/dist/dev-dock.d.ts.map +1 -1
  294. package/dist/dev-dock.js +6 -1
  295. package/dist/format/date.d.ts +0 -34
  296. package/dist/format/date.d.ts.map +1 -1
  297. package/dist/format/date.js +0 -54
  298. package/dist/format/index.d.ts +7 -22
  299. package/dist/format/index.d.ts.map +1 -1
  300. package/dist/format/index.js +2 -43
  301. package/dist/format/number.d.ts +3 -14
  302. package/dist/format/number.d.ts.map +1 -1
  303. package/dist/format/number.js +0 -13
  304. package/dist/format/shared.d.ts +2 -3
  305. package/dist/format/shared.d.ts.map +1 -1
  306. package/dist/forms/index.d.ts +0 -11
  307. package/dist/forms/index.d.ts.map +1 -1
  308. package/dist/forms/index.js +1 -14
  309. package/dist/guard/index.d.ts +6 -21
  310. package/dist/guard/index.d.ts.map +1 -1
  311. package/dist/guard/index.js +27 -115
  312. package/dist/guard/types.d.ts +7 -18
  313. package/dist/guard/types.d.ts.map +1 -1
  314. package/dist/index.d.ts +16 -48
  315. package/dist/index.d.ts.map +1 -1
  316. package/dist/index.js +21 -117
  317. package/dist/provider/create-router.d.ts +44 -0
  318. package/dist/provider/create-router.d.ts.map +1 -0
  319. package/dist/provider/create-router.js +62 -0
  320. package/dist/provider/hotkeys.d.ts +8 -0
  321. package/dist/provider/hotkeys.d.ts.map +1 -0
  322. package/dist/provider/hotkeys.js +50 -0
  323. package/dist/provider/index.d.ts +33 -110
  324. package/dist/provider/index.d.ts.map +1 -1
  325. package/dist/provider/index.js +182 -82
  326. package/dist/provider/lab-theme.d.ts.map +1 -1
  327. package/dist/provider/route-transition.d.ts +76 -0
  328. package/dist/provider/route-transition.d.ts.map +1 -0
  329. package/dist/provider/route-transition.js +98 -0
  330. package/dist/provider/spotlight-actions.d.ts +10 -0
  331. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  332. package/dist/provider/spotlight-actions.js +55 -0
  333. package/dist/provider/test-router.d.ts +6 -0
  334. package/dist/provider/test-router.d.ts.map +1 -0
  335. package/dist/provider/test-router.js +18 -0
  336. package/dist/query-client.d.ts +4 -20
  337. package/dist/query-client.d.ts.map +1 -1
  338. package/dist/query-client.js +2 -2
  339. package/dist/router-tanstack/index.d.ts +18 -64
  340. package/dist/router-tanstack/index.d.ts.map +1 -1
  341. package/dist/router-tanstack/index.js +2 -16
  342. package/dist/router-tanstack/nav.d.ts +12 -1
  343. package/dist/router-tanstack/nav.d.ts.map +1 -1
  344. package/dist/router-tanstack/nav.js +8 -1
  345. package/dist/router-tanstack/search-store.d.ts +1 -1
  346. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  347. package/dist/router-tanstack/use-nav.d.ts +8 -9
  348. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/use-nav.js +20 -1
  350. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  351. package/dist/shell/app-sidebar.js +1 -1
  352. package/dist/shell/index.d.ts +31 -10
  353. package/dist/shell/index.d.ts.map +1 -1
  354. package/dist/shell/index.js +14 -3
  355. package/dist/shell/page-aside.d.ts +2 -2
  356. package/dist/shell/page-aside.d.ts.map +1 -1
  357. package/dist/shell/page-aside.js +31 -12
  358. package/dist/shell/page-bar.d.ts +2 -2
  359. package/dist/shell/page-bar.d.ts.map +1 -1
  360. package/dist/shell/page-bar.js +1 -1
  361. package/dist/state.d.ts +10 -12
  362. package/dist/state.d.ts.map +1 -1
  363. package/dist/state.js +4 -6
  364. package/dist/styles.css +107 -7
  365. package/dist/surfaces.d.ts +28 -103
  366. package/dist/surfaces.d.ts.map +1 -1
  367. package/dist/surfaces.js +54 -143
  368. package/dist/{data → table}/data-table-state.d.ts +1 -1
  369. package/dist/table/data-table-state.d.ts.map +1 -0
  370. package/dist/{data → table}/data-table-state.js +4 -3
  371. package/dist/{data → table}/data-table.d.ts +28 -49
  372. package/dist/table/data-table.d.ts.map +1 -0
  373. package/dist/{data → table}/data-table.js +74 -60
  374. package/dist/table/index.d.ts +18 -0
  375. package/dist/table/index.d.ts.map +1 -0
  376. package/dist/{data/table.js → table/index.js} +1 -1
  377. package/dist/table/query-branch.d.ts.map +1 -0
  378. package/dist/table/table-features.d.ts +69 -0
  379. package/dist/table/table-features.d.ts.map +1 -0
  380. package/dist/table/table-features.js +49 -0
  381. package/dist/telemetry.d.ts +77 -0
  382. package/dist/telemetry.d.ts.map +1 -0
  383. package/dist/telemetry.js +33 -0
  384. package/dist/theme/index.d.ts +10 -21
  385. package/dist/theme/index.d.ts.map +1 -1
  386. package/dist/theme/index.js +3 -14
  387. package/dist/theme/theme-toggle.d.ts.map +1 -1
  388. package/dist/theme/theme-toggle.js +7 -33
  389. package/dist/theme/theme-toggle.module.css +30 -0
  390. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  391. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  392. package/dist/theme-lab/derive-controls.js +5 -3
  393. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  394. package/dist/theme-lab/derive-state.js +2 -1
  395. package/dist/tokens/core.d.ts +360 -0
  396. package/dist/tokens/core.d.ts.map +1 -0
  397. package/dist/tokens/core.js +708 -0
  398. package/dist/tokens/derive.d.ts +1 -1
  399. package/dist/tokens/derive.d.ts.map +1 -1
  400. package/dist/tokens/index.d.ts +5 -373
  401. package/dist/tokens/index.d.ts.map +1 -1
  402. package/dist/tokens/index.js +8 -700
  403. package/dist/tokens/palette.d.ts +2 -6
  404. package/dist/tokens/palette.d.ts.map +1 -1
  405. package/dist/tokens/palette.js +1 -4
  406. package/dist/vite.d.ts +4 -3
  407. package/dist/vite.d.ts.map +1 -1
  408. package/llms.txt +43 -85
  409. package/package.json +77 -170
  410. package/src/agent/ai-sdk-transport.ts +57 -37
  411. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  412. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  413. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  414. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  415. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  416. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  417. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  418. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  419. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  420. package/src/agent/error.ts +43 -0
  421. package/src/agent/history.ts +2 -107
  422. package/src/agent/id.ts +4 -5
  423. package/src/agent/index.ts +23 -112
  424. package/src/agent/outcome.ts +3 -56
  425. package/src/agent/part-list.tsx +3 -3
  426. package/src/agent/parts.ts +23 -22
  427. package/src/agent/run-committer.ts +64 -0
  428. package/src/agent/run-records.ts +147 -0
  429. package/src/agent/thread.ts +24 -231
  430. package/src/agent/transport.ts +6 -96
  431. package/src/agent/use-agent-thread-runs.ts +364 -199
  432. package/src/charts/BandStrip.tsx +276 -0
  433. package/src/charts/Bars.tsx +141 -0
  434. package/src/charts/CartesianChart.tsx +206 -0
  435. package/src/charts/ChartCard.tsx +178 -0
  436. package/src/charts/Donut.tsx +256 -0
  437. package/src/charts/DualPanel.tsx +326 -0
  438. package/src/charts/Heatmap.tsx +282 -0
  439. package/src/charts/Lines.tsx +151 -0
  440. package/src/charts/MirroredBars.tsx +303 -0
  441. package/src/charts/Sparkline.tsx +176 -0
  442. package/src/charts/StackedArea.tsx +80 -0
  443. package/src/charts/box.tsx +96 -0
  444. package/src/charts/card-context.ts +11 -0
  445. package/src/charts/chart-box.module.css +64 -0
  446. package/src/charts/chart-box.module.css.d.ts +12 -0
  447. package/src/charts/chart-card.module.css +25 -0
  448. package/src/charts/chart-card.module.css.d.ts +8 -0
  449. package/src/charts/chart-legend.module.css +38 -0
  450. package/src/charts/chart-legend.module.css.d.ts +10 -0
  451. package/src/charts/compile.ts +585 -0
  452. package/src/charts/cursor.ts +282 -0
  453. package/src/charts/curves.ts +111 -0
  454. package/src/charts/donut.module.css +54 -0
  455. package/src/charts/donut.module.css.d.ts +9 -0
  456. package/src/charts/host.tsx +60 -0
  457. package/src/charts/index.ts +41 -178
  458. package/src/charts/legend.tsx +204 -0
  459. package/src/charts/marks.ts +201 -0
  460. package/src/charts/panel.tsx +227 -0
  461. package/src/charts/scales.ts +237 -0
  462. package/src/charts/sizing.ts +47 -0
  463. package/src/charts/state.tsx +80 -0
  464. package/src/charts/theme.ts +65 -0
  465. package/src/charts/types.ts +242 -0
  466. package/src/cli/audit-allows.ts +8 -30
  467. package/src/cli/config.ts +14 -43
  468. package/src/cli/doctor-upgrade.ts +392 -0
  469. package/src/cli/doctor.ts +81 -72
  470. package/src/cli/help.ts +2 -4
  471. package/src/cli/index.ts +100 -384
  472. package/src/cli/init.ts +60 -51
  473. package/src/cli/sync.ts +13 -68
  474. package/src/cli/tokens-css.ts +7 -28
  475. package/src/commands/ShortcutsHelp.tsx +8 -9
  476. package/src/commands/define-commands.ts +16 -43
  477. package/src/commands/define-overlays.ts +12 -36
  478. package/src/commands/index.ts +11 -94
  479. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  480. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  481. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  482. package/src/commands/notifications/notify.tsx +158 -0
  483. package/src/{notifications → commands/notifications}/store.ts +10 -2
  484. package/src/commands/projectors.ts +5 -225
  485. package/src/commands/shell-bridge.ts +5 -5
  486. package/src/commands/shortcut-format.ts +5 -4
  487. package/src/common/errors.ts +3 -3
  488. package/src/common/use-measured-widths.ts +6 -3
  489. package/src/common/validate.ts +2 -2
  490. package/src/content/article-layout.tsx +37 -38
  491. package/src/content/article-model.ts +1 -84
  492. package/src/content/index.ts +12 -83
  493. package/src/content/markdown.tsx +4 -3
  494. package/src/content/mermaid.tsx +9 -7
  495. package/src/content/slug.ts +1 -16
  496. package/src/content/url-hardening.ts +8 -2
  497. package/src/controls/actions.tsx +24 -1
  498. package/src/controls/enum-filter.tsx +1 -1
  499. package/src/controls/filter-context.tsx +3 -1
  500. package/src/controls/filter-set.tsx +5 -7
  501. package/src/controls/form-layout.tsx +2 -2
  502. package/src/controls/glyphs.tsx +0 -10
  503. package/src/controls/index.ts +13 -64
  504. package/src/controls/multi-select-filter.tsx +5 -4
  505. package/src/controls/number-filter.tsx +8 -4
  506. package/src/controls/range-filter.tsx +5 -4
  507. package/src/controls/search-filter.tsx +25 -19
  508. package/src/controls/select-filter.tsx +5 -4
  509. package/src/controls/sync-button.tsx +18 -20
  510. package/src/controls/toggle-filter.tsx +5 -4
  511. package/src/controls/uncontrolled.ts +12 -0
  512. package/src/controls/view-tabs.tsx +3 -3
  513. package/src/controls-dates/date-range-picker.tsx +1 -1
  514. package/src/controls-dates/index.ts +0 -1
  515. package/src/dashboard/index.ts +7 -48
  516. package/src/dashboard/section.tsx +11 -40
  517. package/src/dashboard/stat-card.tsx +14 -16
  518. package/src/dashboard/widget-header.module.css +9 -7
  519. package/src/dev-dock.tsx +14 -27
  520. package/src/format/date.ts +2 -92
  521. package/src/format/index.ts +7 -53
  522. package/src/format/number.ts +3 -26
  523. package/src/format/shared.ts +2 -3
  524. package/src/forms/index.ts +0 -23
  525. package/src/guard/index.ts +36 -191
  526. package/src/guard/types.ts +6 -19
  527. package/src/index.ts +30 -282
  528. package/src/provider/create-router.tsx +138 -0
  529. package/src/provider/hotkeys.ts +70 -0
  530. package/src/provider/index.tsx +260 -230
  531. package/src/provider/lab-theme.ts +3 -2
  532. package/src/provider/route-transition.ts +199 -0
  533. package/src/provider/spotlight-actions.tsx +69 -0
  534. package/src/provider/test-router.tsx +25 -0
  535. package/src/query-client.ts +4 -22
  536. package/src/router-tanstack/index.ts +18 -112
  537. package/src/router-tanstack/nav.ts +28 -2
  538. package/src/router-tanstack/search-store.ts +9 -2
  539. package/src/router-tanstack/use-nav.ts +47 -13
  540. package/src/shell/app-mobile-nav.tsx +3 -2
  541. package/src/shell/app-sidebar.tsx +1 -1
  542. package/src/shell/aside-docking.ts +1 -1
  543. package/src/shell/index.tsx +61 -20
  544. package/src/shell/page-aside.tsx +47 -23
  545. package/src/shell/page-bar.tsx +3 -3
  546. package/src/shell/page-title.tsx +1 -1
  547. package/src/state.ts +11 -37
  548. package/src/styles.css +107 -7
  549. package/src/surfaces.ts +56 -151
  550. package/src/{data → table}/data-table-state.ts +5 -4
  551. package/src/{data → table}/data-table.tsx +170 -161
  552. package/src/table/index.ts +18 -0
  553. package/src/table/table-features.ts +102 -0
  554. package/src/telemetry.ts +110 -0
  555. package/src/theme/index.ts +22 -47
  556. package/src/theme/theme-toggle.module.css +30 -0
  557. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  558. package/src/theme/theme-toggle.tsx +15 -43
  559. package/src/theme-lab/derive-controls.tsx +5 -3
  560. package/src/theme-lab/derive-state.ts +2 -1
  561. package/src/tokens/core.ts +1163 -0
  562. package/src/tokens/derive.ts +1 -1
  563. package/src/tokens/index.ts +14 -1181
  564. package/src/tokens/palette.ts +3 -7
  565. package/src/vite.ts +3 -3
  566. package/agent/templates/query-client.ts.tpl +0 -26
  567. package/dist/agent/adapter.d.ts +0 -150
  568. package/dist/agent/adapter.d.ts.map +0 -1
  569. package/dist/agent/adapter.js +0 -482
  570. package/dist/agent/use-agent-stream.d.ts +0 -35
  571. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  572. package/dist/agent/use-agent-stream.js +0 -59
  573. package/dist/agent-chat/composer.d.ts.map +0 -1
  574. package/dist/agent-chat/index.d.ts +0 -31
  575. package/dist/agent-chat/index.d.ts.map +0 -1
  576. package/dist/agent-chat/index.js +0 -19
  577. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  578. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  579. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  580. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  581. package/dist/agent-chat/thread-detail-panel.js +0 -115
  582. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  583. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  587. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-workspace.js +0 -153
  589. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  590. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  591. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  592. package/dist/charts/cursor/resolve.d.ts +0 -75
  593. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  594. package/dist/charts/cursor/resolve.js +0 -91
  595. package/dist/charts/cursor/scope.d.ts +0 -20
  596. package/dist/charts/cursor/scope.d.ts.map +0 -1
  597. package/dist/charts/cursor/scope.js +0 -20
  598. package/dist/charts/cursor/store.d.ts +0 -35
  599. package/dist/charts/cursor/store.d.ts.map +0 -1
  600. package/dist/charts/cursor/store.js +0 -25
  601. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  602. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  603. package/dist/charts/cursor/touch-pin.js +0 -79
  604. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  606. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  607. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  608. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  609. package/dist/charts/hooks/use-hysteresis.js +0 -12
  610. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  611. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  612. package/dist/charts/hooks/useBandPlot.js +0 -178
  613. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  614. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/useChartCursor.js +0 -200
  616. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  617. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  618. package/dist/charts/hooks/useChartSize.js +0 -8
  619. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  620. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  621. package/dist/charts/kinds/BandStrip.js +0 -241
  622. package/dist/charts/kinds/Bars.d.ts +0 -141
  623. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  624. package/dist/charts/kinds/Bars.js +0 -343
  625. package/dist/charts/kinds/Donut.d.ts +0 -77
  626. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  627. package/dist/charts/kinds/Donut.js +0 -245
  628. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  629. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  630. package/dist/charts/kinds/DualPanel.js +0 -471
  631. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  632. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  633. package/dist/charts/kinds/Heatmap.js +0 -243
  634. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  635. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  636. package/dist/charts/kinds/MirroredBars.js +0 -292
  637. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  638. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  639. package/dist/charts/kinds/MultiLine.js +0 -176
  640. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  641. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  642. package/dist/charts/kinds/StackedArea.js +0 -135
  643. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  644. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  645. package/dist/charts/kinds/ZonedLine.js +0 -155
  646. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  647. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  648. package/dist/charts/kinds/band-chrome.js +0 -71
  649. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  650. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  651. package/dist/charts/kinds/donut-layout.js +0 -52
  652. package/dist/charts/layout/auto-margin.d.ts +0 -122
  653. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  654. package/dist/charts/layout/auto-margin.js +0 -81
  655. package/dist/charts/layout/end-labels.d.ts +0 -64
  656. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  657. package/dist/charts/layout/end-labels.js +0 -76
  658. package/dist/charts/layout/log-ticks.d.ts +0 -27
  659. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  660. package/dist/charts/layout/log-ticks.js +0 -42
  661. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  662. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  663. package/dist/charts/primitives/AreaGradient.js +0 -13
  664. package/dist/charts/primitives/Axes.d.ts +0 -83
  665. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  666. package/dist/charts/primitives/Axes.js +0 -168
  667. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  668. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  669. package/dist/charts/primitives/CartesianChart.js +0 -549
  670. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  671. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  672. package/dist/charts/primitives/ChartCard.js +0 -143
  673. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  674. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  675. package/dist/charts/primitives/ChartFrame.js +0 -241
  676. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  677. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  678. package/dist/charts/primitives/ChartLegend.js +0 -292
  679. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  680. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartPending.js +0 -117
  682. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  683. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartTooltip.js +0 -197
  685. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  686. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  687. package/dist/charts/primitives/Crosshair.js +0 -23
  688. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  689. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  690. package/dist/charts/primitives/HatchPattern.js +0 -31
  691. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  692. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  693. package/dist/charts/primitives/HoverOverlay.js +0 -72
  694. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  695. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  696. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  697. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  698. package/dist/charts/primitives/XZoneRects.js +0 -65
  699. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  700. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  701. package/dist/charts/primitives/ZoneRects.js +0 -30
  702. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  703. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  704. package/dist/charts/primitives/chart-card-context.js +0 -18
  705. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  706. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  707. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  708. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  709. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  710. package/dist/charts/primitives/chart-layout.js +0 -175
  711. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  712. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-tier.js +0 -44
  714. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  715. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  716. package/dist/charts/primitives/legend-disclosure.js +0 -153
  717. package/dist/charts/series.d.ts +0 -189
  718. package/dist/charts/series.d.ts.map +0 -1
  719. package/dist/charts/series.js +0 -84
  720. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  721. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  722. package/dist/charts/sparklines/BarSparkline.js +0 -53
  723. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  724. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  725. package/dist/charts/sparklines/LineSparkline.js +0 -51
  726. package/dist/charts/sparklines/index.d.ts +0 -3
  727. package/dist/charts/sparklines/index.d.ts.map +0 -1
  728. package/dist/charts/sparklines/index.js +0 -6
  729. package/dist/charts/utils/domain.d.ts +0 -35
  730. package/dist/charts/utils/domain.d.ts.map +0 -1
  731. package/dist/charts/utils/domain.js +0 -12
  732. package/dist/charts/utils/format.d.ts +0 -8
  733. package/dist/charts/utils/format.d.ts.map +0 -1
  734. package/dist/charts/utils/format.js +0 -20
  735. package/dist/charts/utils/measure-text.d.ts +0 -25
  736. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  737. package/dist/charts/utils/measure-text.js +0 -64
  738. package/dist/charts/utils/ticks.d.ts +0 -103
  739. package/dist/charts/utils/ticks.d.ts.map +0 -1
  740. package/dist/charts/utils/ticks.js +0 -92
  741. package/dist/commands/overlays-mount.d.ts +0 -122
  742. package/dist/commands/overlays-mount.d.ts.map +0 -1
  743. package/dist/commands/overlays-mount.js +0 -125
  744. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  745. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  746. package/dist/commands/useCommandHotkeys.js +0 -45
  747. package/dist/content/article-actions.d.ts +0 -39
  748. package/dist/content/article-actions.d.ts.map +0 -1
  749. package/dist/content/article-actions.js +0 -28
  750. package/dist/content/article-card.d.ts +0 -58
  751. package/dist/content/article-card.d.ts.map +0 -1
  752. package/dist/content/article-card.js +0 -79
  753. package/dist/content/article-card.module.css +0 -111
  754. package/dist/content/mdx.d.ts +0 -20
  755. package/dist/content/mdx.d.ts.map +0 -1
  756. package/dist/content/mdx.js +0 -64
  757. package/dist/controls/compare-filter.d.ts +0 -42
  758. package/dist/controls/compare-filter.d.ts.map +0 -1
  759. package/dist/controls/compare-filter.js +0 -38
  760. package/dist/controls/slider-control.d.ts +0 -36
  761. package/dist/controls/slider-control.d.ts.map +0 -1
  762. package/dist/controls/slider-control.js +0 -64
  763. package/dist/dashboard/widget-grid.d.ts +0 -27
  764. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  765. package/dist/dashboard/widget-grid.js +0 -40
  766. package/dist/dashboard/widget-grid.module.css +0 -69
  767. package/dist/data/data-table-state.d.ts.map +0 -1
  768. package/dist/data/data-table.d.ts.map +0 -1
  769. package/dist/data/query-branch.d.ts.map +0 -1
  770. package/dist/data/table.d.ts +0 -24
  771. package/dist/data/table.d.ts.map +0 -1
  772. package/dist/data/virtual-list.d.ts +0 -133
  773. package/dist/data/virtual-list.d.ts.map +0 -1
  774. package/dist/data/virtual-list.js +0 -157
  775. package/dist/data/virtual.d.ts +0 -21
  776. package/dist/data/virtual.d.ts.map +0 -1
  777. package/dist/data/virtual.js +0 -4
  778. package/dist/forms/FormErrorSummary.d.ts +0 -30
  779. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  780. package/dist/forms/FormErrorSummary.js +0 -30
  781. package/dist/forms/use-field-array.d.ts +0 -60
  782. package/dist/forms/use-field-array.d.ts.map +0 -1
  783. package/dist/forms/use-field-array.js +0 -20
  784. package/dist/forms/use-form-draft.d.ts +0 -76
  785. package/dist/forms/use-form-draft.d.ts.map +0 -1
  786. package/dist/forms/use-form-draft.js +0 -92
  787. package/dist/forms/use-form-submit.d.ts +0 -88
  788. package/dist/forms/use-form-submit.d.ts.map +0 -1
  789. package/dist/forms/use-form-submit.js +0 -63
  790. package/dist/notifications/bell.d.ts.map +0 -1
  791. package/dist/notifications/center.d.ts.map +0 -1
  792. package/dist/notifications/define-notifications.d.ts.map +0 -1
  793. package/dist/notifications/index.d.ts +0 -40
  794. package/dist/notifications/index.d.ts.map +0 -1
  795. package/dist/notifications/index.js +0 -54
  796. package/dist/notifications/mount-guard.d.ts +0 -8
  797. package/dist/notifications/mount-guard.d.ts.map +0 -1
  798. package/dist/notifications/mount-guard.js +0 -18
  799. package/dist/notifications/notify.d.ts +0 -149
  800. package/dist/notifications/notify.d.ts.map +0 -1
  801. package/dist/notifications/notify.js +0 -171
  802. package/dist/notifications/store.d.ts.map +0 -1
  803. package/dist/provider/connectivity-indicator.d.ts +0 -13
  804. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  805. package/dist/provider/connectivity-indicator.js +0 -205
  806. package/dist/provider/connectivity-provider.d.ts +0 -7
  807. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  808. package/dist/provider/connectivity-provider.js +0 -128
  809. package/dist/provider/connectivity-types.d.ts +0 -36
  810. package/dist/provider/connectivity-types.d.ts.map +0 -1
  811. package/dist/provider/use-connectivity.d.ts +0 -3
  812. package/dist/provider/use-connectivity.d.ts.map +0 -1
  813. package/dist/provider/use-connectivity.js +0 -14
  814. package/dist/query-devtools.d.ts +0 -21
  815. package/dist/query-devtools.d.ts.map +0 -1
  816. package/dist/query-devtools.js +0 -13
  817. package/src/agent/adapter.ts +0 -945
  818. package/src/agent/use-agent-stream.ts +0 -154
  819. package/src/agent-chat/index.ts +0 -54
  820. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  821. package/src/agent-chat/thread-workspace.tsx +0 -279
  822. package/src/charts/cursor/resolve.ts +0 -198
  823. package/src/charts/cursor/scope.tsx +0 -35
  824. package/src/charts/cursor/store.ts +0 -58
  825. package/src/charts/cursor/touch-pin.ts +0 -138
  826. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  827. package/src/charts/hooks/use-hysteresis.ts +0 -26
  828. package/src/charts/hooks/useBandPlot.ts +0 -383
  829. package/src/charts/hooks/useChartCursor.ts +0 -367
  830. package/src/charts/hooks/useChartSize.ts +0 -35
  831. package/src/charts/kinds/BandStrip.tsx +0 -449
  832. package/src/charts/kinds/Bars.tsx +0 -589
  833. package/src/charts/kinds/Donut.tsx +0 -368
  834. package/src/charts/kinds/DualPanel.tsx +0 -712
  835. package/src/charts/kinds/Heatmap.tsx +0 -396
  836. package/src/charts/kinds/MirroredBars.tsx +0 -469
  837. package/src/charts/kinds/MultiLine.tsx +0 -322
  838. package/src/charts/kinds/StackedArea.tsx +0 -267
  839. package/src/charts/kinds/ZonedLine.tsx +0 -301
  840. package/src/charts/kinds/band-chrome.tsx +0 -91
  841. package/src/charts/kinds/donut-layout.ts +0 -82
  842. package/src/charts/layout/auto-margin.ts +0 -242
  843. package/src/charts/layout/end-labels.ts +0 -135
  844. package/src/charts/layout/log-ticks.ts +0 -90
  845. package/src/charts/primitives/AreaGradient.tsx +0 -26
  846. package/src/charts/primitives/Axes.tsx +0 -271
  847. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  848. package/src/charts/primitives/ChartCard.tsx +0 -280
  849. package/src/charts/primitives/ChartFrame.tsx +0 -493
  850. package/src/charts/primitives/ChartLegend.tsx +0 -422
  851. package/src/charts/primitives/ChartPending.tsx +0 -243
  852. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  853. package/src/charts/primitives/Crosshair.tsx +0 -43
  854. package/src/charts/primitives/HatchPattern.tsx +0 -55
  855. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  856. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  857. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  858. package/src/charts/primitives/XZoneRects.tsx +0 -132
  859. package/src/charts/primitives/ZoneRects.tsx +0 -67
  860. package/src/charts/primitives/chart-card-context.ts +0 -46
  861. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  862. package/src/charts/primitives/chart-layout.ts +0 -318
  863. package/src/charts/primitives/chart-tier.tsx +0 -76
  864. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  865. package/src/charts/series.ts +0 -276
  866. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  867. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  868. package/src/charts/sparklines/index.ts +0 -2
  869. package/src/charts/theme.tsx +0 -53
  870. package/src/charts/utils/domain.ts +0 -41
  871. package/src/charts/utils/format.ts +0 -19
  872. package/src/charts/utils/measure-text.ts +0 -109
  873. package/src/charts/utils/ticks.ts +0 -239
  874. package/src/commands/overlays-mount.tsx +0 -333
  875. package/src/commands/useCommandHotkeys.ts +0 -114
  876. package/src/content/article-actions.ts +0 -72
  877. package/src/content/article-card.module.css +0 -111
  878. package/src/content/article-card.tsx +0 -174
  879. package/src/content/mdx.tsx +0 -127
  880. package/src/controls/compare-filter.tsx +0 -81
  881. package/src/controls/slider-control.tsx +0 -159
  882. package/src/dashboard/widget-grid.module.css +0 -69
  883. package/src/dashboard/widget-grid.tsx +0 -146
  884. package/src/data/table.ts +0 -39
  885. package/src/data/virtual-list.tsx +0 -356
  886. package/src/data/virtual.ts +0 -26
  887. package/src/forms/FormErrorSummary.tsx +0 -71
  888. package/src/forms/use-field-array.ts +0 -94
  889. package/src/forms/use-form-draft.ts +0 -262
  890. package/src/forms/use-form-submit.ts +0 -199
  891. package/src/notifications/index.ts +0 -88
  892. package/src/notifications/mount-guard.ts +0 -38
  893. package/src/notifications/notify.tsx +0 -379
  894. package/src/provider/connectivity-indicator.tsx +0 -267
  895. package/src/provider/connectivity-provider.tsx +0 -189
  896. package/src/provider/connectivity-types.ts +0 -42
  897. package/src/provider/use-connectivity.ts +0 -26
  898. package/src/query-devtools.tsx +0 -40
  899. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  900. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  902. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  903. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  904. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  906. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  907. /package/dist/{data → table}/data-table.module.css +0 -0
  908. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  909. /package/dist/{data → table}/query-branch.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.js +0 -0
  911. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  912. /package/src/{data → table}/data-table.module.css +0 -0
  913. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  914. /package/src/{data → table}/query-branch.ts +0 -0
@@ -0,0 +1,227 @@
1
+ /**
2
+ * The composed-chart infrastructure `DualPanel` and `MirroredBars` share (`docs/V2-SPEC.md` § 9.2):
3
+ * two TanStack views composed with `composeViews` + `grid` + `alignX` into ONE definition — one
4
+ * host, one cursor, one tooltip — mounted by the rung's own `ChartShell`. A kind supplies a
5
+ * `PanelPlan` (its two panes and its tooltip rows) per legend state; everything else — size, legend,
6
+ * `state`, cursor binding, tooltip surface, guides — is the rung's or lives here once.
7
+ */
8
+ import { crosshair } from '@tanstack/charts/crosshair'
9
+ import { tooltip as tooltipHost } from '@tanstack/charts/tooltip'
10
+ import { portal } from '@tanstack/charts/tooltip/portal'
11
+ import type {
12
+ ChartBuildContext,
13
+ ChartPoint,
14
+ ChartTooltipRow as EngineTooltipRow,
15
+ ChartValue,
16
+ StoredChartSpec,
17
+ } from '@tanstack/charts/types/core'
18
+ import { alignX, composeViews, grid } from '@tanstack/charts/view'
19
+ import type { ComposableResponsiveChartDefinition } from '@tanstack/charts/view'
20
+ import { useCallback } from 'react'
21
+ import type { ReactElement } from 'react'
22
+ import { ChartShell } from './CartesianChart'
23
+ import type { ChartShellProps, ShellContext } from './CartesianChart'
24
+ import { defaultFormatX, utcHeaderDate, visibleSeries, xGuide, yGuide } from './compile'
25
+ import type { CartesianDefinition } from './compile'
26
+ import { cursorBinding, sourceOnlyFocus } from './cursor'
27
+ import type { XScaleModel } from './scales'
28
+ import { CHART_THEME, CROSSHAIR } from './theme'
29
+ import type { ContainerClass } from '../tokens/size-classes'
30
+ import type {
31
+ CartesianChartProps,
32
+ ChartMarks,
33
+ ChartSeries,
34
+ ChartTooltipRow,
35
+ ChartX,
36
+ PlotRow,
37
+ } from './types'
38
+
39
+ /** One pane, built per container class: its marks and its scales (x, y, and any helper scale). */
40
+ export type PaneBuilder = (ctx: ChartBuildContext) => {
41
+ marks: ChartMarks
42
+ scales: StoredChartSpec['scales']
43
+ }
44
+
45
+ /** Everything a composed kind compiles for one legend state. */
46
+ export type PanelPlan<T> = {
47
+ /** Every x value the cursor can land on, for snapping a foreign cursor. */
48
+ keys: readonly ChartX[]
49
+ top: PaneBuilder
50
+ bottom: PaneBuilder
51
+ /** The top pane's share of the grid, 0..1. */
52
+ topFraction: number
53
+ /** Space between the panes in px. */
54
+ gap: number
55
+ /** The per-series tooltip rows for a hovered datum; `tooltip.rows` and the title are the rung's. */
56
+ rows: (d: T) => readonly EngineTooltipRow[]
57
+ }
58
+
59
+ export type PanelInput = {
60
+ hidden: ReadonlySet<string>
61
+ highlighted: string | null
62
+ /** The measured chart width, only when the rung is asked for it (`byWidth`), otherwise 0. */
63
+ width: number
64
+ }
65
+
66
+ export type PanelRungProps<T, X extends ChartX> = Omit<ChartShellProps<T>, 'compile'> &
67
+ Pick<CartesianChartProps<T, X>, 'formatX' | 'cursorGroup' | 'cursorResolution' | 'tooltip'> & {
68
+ plan: (input: PanelInput) => PanelPlan<T>
69
+ /** Recompile on width changes: for a kind whose data depends on it (`fold`). */
70
+ byWidth?: boolean
71
+ }
72
+
73
+ /** A child's theme may not carry a background or focus ring: the composed chart owns them. */
74
+ const { background: _background, focusRing: _focusRing, ...PANE_THEME } = CHART_THEME
75
+
76
+ /** The least share of the height either pane keeps: the grid needs positive tracks. */
77
+ const MIN_PANE_SHARE = 0.02
78
+
79
+ /** A pane's y axis: the scale and the rung's guide for it. */
80
+ export const paneY = (opts: {
81
+ scale: ChartScale
82
+ domain: readonly [number, number]
83
+ format: (v: number) => string
84
+ ticks: number
85
+ cls: ContainerClass
86
+ }): StoredChartSpec['scales'][string] => ({
87
+ scale: opts.scale,
88
+ ...yGuide({
89
+ cfg: { ticks: opts.ticks },
90
+ axis: { domain: opts.domain, format: opts.format },
91
+ cls: opts.cls,
92
+ side: 'left',
93
+ grid: true,
94
+ }),
95
+ })
96
+
97
+ type ChartScale = NonNullable<StoredChartSpec['scales'][string]>['scale']
98
+
99
+ /** The shared x axis (drawn on the bottom pane only): the rung's ticks and format. */
100
+ export const paneX = <X extends ChartX>(opts: {
101
+ scale: ChartScale
102
+ model: XScaleModel<X>
103
+ format: (v: ChartValue) => string
104
+ cls: ContainerClass
105
+ }): StoredChartSpec['scales'][string] => ({
106
+ scale: opts.scale,
107
+ ...xGuide({ model: opts.model, xTicks: undefined, format: opts.format, cls: opts.cls }),
108
+ })
109
+
110
+ /** One row per datum for a series: a `null` or non-finite value is kept as a gap. */
111
+ export function rowsOf<T, X extends ChartX>(
112
+ data: readonly T[],
113
+ x: (d: T) => X,
114
+ s: ChartSeries<T>,
115
+ ): PlotRow<T, X>[] {
116
+ return data.map((d) => {
117
+ const v = s.getValue(d)
118
+ return { x: x(d), y: v === null || !Number.isFinite(v) ? null : v, series: s.key, datum: d }
119
+ })
120
+ }
121
+
122
+ /** A pane as a composable view. The crosshair is per pane: together they span both. */
123
+ function paneView(build: PaneBuilder): ComposableResponsiveChartDefinition {
124
+ return {
125
+ chart: (ctx) => {
126
+ const { marks, scales } = build(ctx)
127
+ return {
128
+ marks: [...marks, crosshair({ x: CROSSHAIR, y: false })],
129
+ scales,
130
+ theme: PANE_THEME,
131
+ clip: true,
132
+ }
133
+ },
134
+ }
135
+ }
136
+
137
+ /** A plotted datum is a `PlotRow` of an owned series: its source datum. Otherwise the datum is `T`. */
138
+ function sourceOf<T>(point: ChartPoint, owned: ReadonlySet<string>): { x: ChartValue; d: T } {
139
+ const datum = point.datum
140
+ if (typeof datum === 'object' && datum !== null && 'datum' in datum && 'series' in datum) {
141
+ const row = datum as PlotRow<T>
142
+ if (owned.has(row.series)) return { x: point.xValue, d: row.datum }
143
+ }
144
+ return { x: point.xValue, d: datum as T }
145
+ }
146
+
147
+ type DefinitionProps<T, X extends ChartX> = Pick<PanelRungProps<T, X>, 'series'> & {
148
+ [K in 'formatX' | 'cursorGroup' | 'cursorResolution' | 'tooltip']: PanelRungProps<T, X>[K]
149
+ }
150
+
151
+ function panelDefinition<T, X extends ChartX>(
152
+ props: DefinitionProps<T, X>,
153
+ ctx: ShellContext,
154
+ plan: PanelPlan<T>,
155
+ ): CartesianDefinition {
156
+ const { series, formatX, cursorGroup, cursorResolution = 'nearest' } = props
157
+ const { hidden, chartId } = ctx
158
+ const tooltip = props.tooltip === false ? undefined : props.tooltip
159
+ // A share outside 0..1 (or NaN) is clamped to leave each pane a sliver rather than throw.
160
+ const top = Number.isFinite(plan.topFraction)
161
+ ? Math.min(Math.max(plan.topFraction, MIN_PANE_SHARE), 1 - MIN_PANE_SHARE)
162
+ : 0.5
163
+ const composed = composeViews({
164
+ views: { top: paneView(plan.top), bottom: paneView(plan.bottom) },
165
+ layout: grid({
166
+ rows: [
167
+ { id: 'top', grow: top },
168
+ { id: 'bottom', grow: 1 - top },
169
+ ],
170
+ columns: [{ id: 'main', grow: 1 }],
171
+ gap: plan.gap,
172
+ cells: { top: { row: 'top', column: 'main' }, bottom: { row: 'bottom', column: 'main' } },
173
+ }),
174
+ links: [alignX('top', 'bottom')],
175
+ })
176
+ const owned = new Set(series.map((s) => s.key))
177
+ const visible = visibleSeries(series, hidden)
178
+ const hiddenSeries = series.filter((s) => !visible.includes(s))
179
+ const header = (v: ChartValue, d: T): string => {
180
+ if (tooltip?.formatHeader) return tooltip.formatHeader(v as X, d)
181
+ if (v instanceof Date && !formatX) return utcHeaderDate(v)
182
+ return formatX ? formatX(v as X) : defaultFormatX(v)
183
+ }
184
+ return {
185
+ chart: () => composed,
186
+ focus: tooltip?.onFollow ? 'group-x' : sourceOnlyFocus(cursorGroup, chartId),
187
+ maxFocusDistance: Number.POSITIVE_INFINITY,
188
+ cursor: cursorBinding({
189
+ group: cursorGroup,
190
+ chartId,
191
+ keys: plan.keys,
192
+ mode: cursorResolution,
193
+ pin: ctx.coarse,
194
+ }),
195
+ tooltip:
196
+ props.tooltip === false
197
+ ? false
198
+ : {
199
+ use: tooltipHost,
200
+ portal,
201
+ anchor: 'group-center',
202
+ content: (points: readonly ChartPoint[]) => {
203
+ const primary = points[0]
204
+ if (!primary) return { rows: [] }
205
+ const { x, d } = sourceOf<T>(primary, owned)
206
+ const extra: readonly ChartTooltipRow[] =
207
+ tooltip?.rows?.(d, { visible, hidden: hiddenSeries }) ?? []
208
+ return { title: header(x, d), rows: [...plan.rows(d), ...extra] }
209
+ },
210
+ },
211
+ }
212
+ }
213
+
214
+ export function PanelRung<T, X extends ChartX>(props: PanelRungProps<T, X>): ReactElement {
215
+ const { plan, byWidth, formatX, cursorGroup, cursorResolution, tooltip, ...shell } = props
216
+ const { series } = shell
217
+ const compile = useCallback(
218
+ (ctx: ShellContext) =>
219
+ panelDefinition(
220
+ { series, formatX, cursorGroup, cursorResolution, tooltip },
221
+ ctx,
222
+ plan({ hidden: ctx.hidden, highlighted: ctx.highlighted, width: ctx.width }),
223
+ ),
224
+ [series, formatX, cursorGroup, cursorResolution, tooltip, plan],
225
+ )
226
+ return <ChartShell {...shell} compile={compile} {...(byWidth !== undefined && { byWidth })} />
227
+ }
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Scales basalt owns (`docs/V2-SPEC.md` § 9.1): every y domain, and the x scale by value type
3
+ * (§ 9.4). TanStack receives CONFIGURED instances, never a factory: a factory infers its domain from
4
+ * every scale-contributing mark (a 60–100 zone widened a 30–70 line's axis to 0–100) and cannot see
5
+ * a legend-hidden series.
6
+ */
7
+ import { scaleBand } from '@tanstack/charts/scales/band'
8
+ import { scaleLinear } from '@tanstack/charts/scales/linear'
9
+ import { scalePoint } from '@tanstack/charts/scales/point'
10
+ import { scaleLog, scaleUtc } from 'd3-scale'
11
+ import type { ChartPositionScaleOptions } from '@tanstack/charts/types/core'
12
+ import type { AxisConfig, ChartSeries, ChartX, XZoneSpec } from './types'
13
+
14
+ const DEFAULT_AUTO_PAD = 1.1
15
+
16
+ /** Pad AWAY from zero: a positive floor moves down, a negative one further down; zero stays. */
17
+ export function padAutoLower(candidate: number, pad: number): number {
18
+ if (candidate === 0) return 0
19
+ return candidate > 0 ? candidate / pad : candidate * pad
20
+ }
21
+
22
+ /** The mirror of {@link padAutoLower}: a positive ceiling moves up, a negative one toward zero. */
23
+ export function padAutoUpper(candidate: number, pad: number): number {
24
+ if (candidate === 0) return 0
25
+ return candidate > 0 ? candidate * pad : candidate / pad
26
+ }
27
+
28
+ /**
29
+ * One y axis' domain. `extraBounds` are the finite zone and reference-line values pinned to this
30
+ * axis — a target past the data must stay inside the plot. Infinite bounds clamp to the domain by
31
+ * definition and are ignored. The 1.x law, unchanged (`resolveAxisDomain`).
32
+ */
33
+ export function resolveYDomain<T>(
34
+ cfg: AxisConfig<T> | undefined,
35
+ data: readonly T[],
36
+ series: readonly ChartSeries<T>[],
37
+ extraBounds: readonly number[] = [],
38
+ ): readonly [number, number] {
39
+ const domain = cfg?.domain ?? 'auto'
40
+ if (Array.isArray(domain)) return domain as readonly [number, number]
41
+ if (typeof domain === 'function') return domain(data, series)
42
+
43
+ const isLog = cfg?.scale === 'log'
44
+ let min = Infinity
45
+ let max = -Infinity
46
+ const take = (v: number | null): void => {
47
+ if (v === null || !Number.isFinite(v)) return
48
+ // A log axis has no zero and no negative half: such a value drops out of the domain.
49
+ if (isLog && v <= 0) return
50
+ if (v < min) min = v
51
+ if (v > max) max = v
52
+ }
53
+ for (const d of data) for (const s of series) take(s.getValue(d))
54
+ for (const v of extraBounds) take(v)
55
+
56
+ const pad = cfg?.autoPad ?? DEFAULT_AUTO_PAD
57
+ if (isLog) {
58
+ if (min === Infinity) return [1, 10]
59
+ if (min === max) return [min / pad, max * pad]
60
+ return [min / pad, padAutoUpper(Math.max(max, cfg?.autoMaxFloor ?? -Infinity), pad)]
61
+ }
62
+ if (min === Infinity) return [0, cfg?.autoMaxFloor ?? 1]
63
+
64
+ // Clamp the RAW bounds first, then pad once, away from zero: padding before the clamp lands a
65
+ // floored top exactly on the floor, with a target line glued to the plot edge.
66
+ const upper = padAutoUpper(Math.max(max, cfg?.autoMaxFloor ?? -Infinity), pad)
67
+ const lower = padAutoLower(Math.min(min, cfg?.autoMinCeil ?? 0), pad)
68
+ // A flat series would be a scale with no extent: every point on one pixel.
69
+ if (lower === upper) return [Math.min(lower, 0), upper === 0 ? 1 : upper * pad]
70
+ return [lower, upper]
71
+ }
72
+
73
+ /** A configured y scale instance for a resolved domain. */
74
+ export function yScaleFor<T>(
75
+ cfg: AxisConfig<T> | undefined,
76
+ domain: readonly [number, number],
77
+ ): ReturnType<typeof scaleLinear> | ReturnType<typeof scaleLog<number, number>> {
78
+ const extent: [number, number] = [domain[0], domain[1]]
79
+ if (cfg?.scale === 'log') {
80
+ const log = scaleLog().domain(extent)
81
+ return cfg.nice ? log.nice() : log
82
+ }
83
+ const linear = scaleLinear().domain(extent)
84
+ return cfg?.nice ? linear.nice() : linear
85
+ }
86
+
87
+ export type XKind = 'date' | 'number' | 'string'
88
+
89
+ /** The value type `x` returns, read off the first row (a chart's x is homogeneous by type). */
90
+ export function xKindOf(values: readonly ChartX[]): XKind {
91
+ const first = values[0]
92
+ if (first instanceof Date) return 'date'
93
+ if (typeof first === 'number') return 'number'
94
+ return 'string'
95
+ }
96
+
97
+ const keyOf = (v: ChartX): number | string => (v instanceof Date ? v.getTime() : v)
98
+
99
+ /** Distinct x values in data order (dates by timestamp). */
100
+ export function distinctX<X extends ChartX>(values: readonly X[]): X[] {
101
+ const seen = new Set<number | string>()
102
+ const out: X[] = []
103
+ for (const v of values) {
104
+ const k = keyOf(v)
105
+ if (seen.has(k)) continue
106
+ seen.add(k)
107
+ out.push(v)
108
+ }
109
+ return out
110
+ }
111
+
112
+ /** Point-scale padding for a categorical line: half a step at each edge. */
113
+ const POINT_PADDING = 0.5
114
+ /** Band padding for bars: the gap between two bars, and the inset at the plot's ends. */
115
+ const BAND_PADDING_INNER = 0.2
116
+ const BAND_PADDING_OUTER = 0.1
117
+
118
+ /**
119
+ * The x scale and the normalized position of any x value inside the plot (0 = left edge, 1 = right
120
+ * edge). Zones and x-zones are drawn on a hidden `[0, 1]` scale from those fractions, so a band
121
+ * spans the plot exactly whatever the x scale is.
122
+ */
123
+ export type XScaleModel<X extends ChartX> = {
124
+ kind: XKind
125
+ band: boolean
126
+ /** Goes straight into `scales.x.scale`. */
127
+ scale: ChartPositionScaleOptions['scale']
128
+ values: readonly X[]
129
+ /** Center of `x` as a plot fraction; `null` for a value the scale does not contain. */
130
+ fraction: (x: X) => number | null
131
+ /** Half a sample step, as a plot fraction (the `'edge'` widening). */
132
+ halfStep: number
133
+ /** Continuous scales: the domain as numbers (ms for dates), and the median sample step. */
134
+ extent?: readonly [number, number]
135
+ step: number
136
+ }
137
+
138
+ const DAY_MS = 86_400_000
139
+
140
+ export function xScaleFor<X extends ChartX>(raw: readonly X[], band: boolean): XScaleModel<X> {
141
+ const values = distinctX(raw)
142
+ const kind = xKindOf(values)
143
+ const n = values.length
144
+
145
+ if (band || kind === 'string') {
146
+ const keys = values as X[]
147
+ const index = new Map(keys.map((k, i) => [keyOf(k), i] as const))
148
+ if (band) {
149
+ const step = 1 / Math.max(1, n - BAND_PADDING_INNER + 2 * BAND_PADDING_OUTER)
150
+ const scale = scaleBand<X>()
151
+ .domain(keys)
152
+ .paddingInner(BAND_PADDING_INNER)
153
+ .paddingOuter(BAND_PADDING_OUTER)
154
+ return {
155
+ kind,
156
+ band: true,
157
+ scale,
158
+ values: keys,
159
+ halfStep: step / 2,
160
+ step: 1,
161
+ fraction: (x) => {
162
+ const i = index.get(keyOf(x))
163
+ if (i === undefined) return null
164
+ return step * (BAND_PADDING_OUTER + i + (1 - BAND_PADDING_INNER) / 2)
165
+ },
166
+ }
167
+ }
168
+ const step = 1 / Math.max(1, n - 1 + 2 * POINT_PADDING)
169
+ return {
170
+ kind,
171
+ band: false,
172
+ scale: scalePoint<X>().domain(keys).padding(POINT_PADDING),
173
+ values: keys,
174
+ halfStep: step / 2,
175
+ step: 1,
176
+ fraction: (x) => {
177
+ const i = index.get(keyOf(x))
178
+ return i === undefined ? null : step * (POINT_PADDING + i)
179
+ },
180
+ }
181
+ }
182
+
183
+ const nums = values.map((v) => (v instanceof Date ? v.getTime() : (v as number)))
184
+ // A loop, not Math.min(...nums): a spread of a long series overflows the call stack.
185
+ let lo = Infinity
186
+ let hi = -Infinity
187
+ for (const v of nums) {
188
+ // NaN poisons the extent, as Math.min/max did: the guard below falls back to [0, 1].
189
+ if (Number.isNaN(v)) {
190
+ lo = hi = NaN
191
+ break
192
+ }
193
+ if (v < lo) lo = v
194
+ if (v > hi) hi = v
195
+ }
196
+ if (!Number.isFinite(lo)) [lo, hi] = [0, 1]
197
+ if (lo === hi) {
198
+ // One sample: give the axis a day (or a unit) of width so the point sits in the middle.
199
+ const half = kind === 'date' ? DAY_MS / 2 : 0.5
200
+ lo -= half
201
+ hi += half
202
+ }
203
+ const span = hi - lo
204
+ const sorted = nums.toSorted((a, b) => a - b)
205
+ const gaps = sorted.slice(1).map((v, i) => v - (sorted[i] as number))
206
+ const medianGap = gaps.length ? (gaps.toSorted((a, b) => a - b)[gaps.length >> 1] as number) : 0
207
+ const scale =
208
+ kind === 'date'
209
+ ? scaleUtc().domain([new Date(lo), new Date(hi)])
210
+ : scaleLinear().domain([lo, hi])
211
+ return {
212
+ kind,
213
+ band: false,
214
+ scale,
215
+ values,
216
+ halfStep: medianGap / span / 2,
217
+ extent: [lo, hi],
218
+ step: medianGap,
219
+ fraction: (x) => {
220
+ const v = x instanceof Date ? x.getTime() : (x as number)
221
+ return typeof v === 'number' && Number.isFinite(v) ? (v - lo) / span : null
222
+ },
223
+ }
224
+ }
225
+
226
+ /** An x-zone's [left, right] as plot fractions, clamped to the plot; `null` when it is empty. */
227
+ export function xZoneFractions<X extends ChartX>(
228
+ zone: XZoneSpec<X>,
229
+ model: XScaleModel<X>,
230
+ ): readonly [number, number] | null {
231
+ const widen = zone.align === 'edge' ? model.halfStep : 0
232
+ const from = zone.from === undefined ? 0 : (model.fraction(zone.from) ?? 0) - widen
233
+ const to = zone.to === undefined ? 1 : (model.fraction(zone.to) ?? 1) + widen
234
+ const left = Math.max(0, Math.min(from, to))
235
+ const right = Math.min(1, Math.max(from, to))
236
+ return right > left ? [left, right] : null
237
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The measured-width seam (`docs/V2-SPEC.md` § 9.2, § 9.6): the chart root's width, for the compiled
3
+ * definition's ticks and fonts. Nothing here sizes the box: `box.tsx` and `chart-box.module.css`
4
+ * own the height in CSS so it exists before JS runs (W10 SSR contract).
5
+ */
6
+ import { useCallback, useRef, useState } from 'react'
7
+ import type { RefCallback } from 'react'
8
+ import { useIsomorphicLayoutEffect } from '../common/isomorphic-layout-effect'
9
+ import { useCoarsePointer } from '../common/use-media-query'
10
+
11
+ /** Server and first-paint width before the host measures (TanStack `initialWidth`): the regular
12
+ * class, so SSR markup and the first client frame agree. Only the svg's internal geometry follows
13
+ * the real width; the box around it is already final. */
14
+ export const INITIAL_WIDTH = 640
15
+
16
+ /** Measures the width of the element `ref` lands on (`0` until measured, e.g. on the server). */
17
+ export function useChartSize(): {
18
+ ref: RefCallback<HTMLElement>
19
+ width: number
20
+ coarse: boolean
21
+ } {
22
+ const [width, setWidth] = useState(0)
23
+ const [node, setNode] = useState<HTMLElement | null>(null)
24
+ const coarse = useCoarsePointer()
25
+ const last = useRef(0)
26
+
27
+ useIsomorphicLayoutEffect(() => {
28
+ if (!node) return
29
+ const read = (w: number): void => {
30
+ const rounded = Math.round(w)
31
+ if (rounded === last.current) return
32
+ last.current = rounded
33
+ setWidth(rounded)
34
+ }
35
+ read(node.getBoundingClientRect().width)
36
+ if (typeof ResizeObserver === 'undefined') return
37
+ const observer = new ResizeObserver((entries) => {
38
+ const entry = entries[0]
39
+ if (entry) read(entry.contentRect.width)
40
+ })
41
+ observer.observe(node)
42
+ return () => observer.disconnect()
43
+ }, [node])
44
+
45
+ const ref = useCallback<RefCallback<HTMLElement>>((el) => setNode(el), [])
46
+ return { ref, width, coarse }
47
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The "nothing to draw" placeholders: pending → error → empty, in that precedence. One renderer for
3
+ * the chart chrome and `ChartCard`, so a pending card and a pending chart read the same.
4
+ */
5
+ import type { CSSProperties, ReactElement, ReactNode } from 'react'
6
+ import { toErrorMessage } from '../common/errors'
7
+ import { VX } from '../tokens'
8
+ import { ChartBox, stateClass } from './box'
9
+ import type { ChartBoxHeight } from './box'
10
+ import type { ChartState } from './types'
11
+
12
+ export type ResolvedChartState = 'pending' | 'error' | 'empty' | null
13
+
14
+ export function resolveChartState(state: ChartState | undefined): ResolvedChartState {
15
+ if (!state) return null
16
+ if (state.pending) return 'pending'
17
+ if (state.error) return 'error'
18
+ if (state.empty) return 'empty'
19
+ return null
20
+ }
21
+
22
+ const boxStyle: CSSProperties = {
23
+ display: 'flex',
24
+ flexDirection: 'column',
25
+ alignItems: 'center',
26
+ justifyContent: 'center',
27
+ gap: 6,
28
+ color: VX.axis,
29
+ fontSize: VX.text.xs,
30
+ textAlign: 'center',
31
+ }
32
+
33
+ const pendingStyle: CSSProperties = {
34
+ ...boxStyle,
35
+ borderRadius: VX.radiusCtrl,
36
+ background: `linear-gradient(90deg, transparent, ${VX.surface.subtle}, transparent)`,
37
+ }
38
+
39
+ const emptyLabel = (state: ChartState | undefined): string =>
40
+ typeof state?.empty === 'string' ? state.empty : 'No data'
41
+
42
+ /** Fills the same {@link ChartBox} the chart will, so a pending, failed or empty chart (and a
43
+ * `<Suspense>` fallback built from one) occupies the final chart's height. */
44
+ export function ChartPlaceholder(props: {
45
+ state: ChartState | undefined
46
+ height?: ChartBoxHeight
47
+ action?: ReactNode
48
+ }): ReactElement | null {
49
+ const kind = resolveChartState(props.state)
50
+ if (kind === null) return null
51
+ const style = kind === 'pending' ? pendingStyle : boxStyle
52
+ const fit = (node: ReactElement): ReactElement => (
53
+ <ChartBox height={props.height}>{node}</ChartBox>
54
+ )
55
+ if (kind === 'pending')
56
+ return fit(
57
+ <output aria-label="Loading chart" aria-busy="true" className={stateClass} style={style} />,
58
+ )
59
+ const label =
60
+ kind === 'error'
61
+ ? toErrorMessage(props.state?.error, 'The chart failed to load.')
62
+ : emptyLabel(props.state)
63
+ const body = (
64
+ <>
65
+ <span>{label}</span>
66
+ {props.action}
67
+ </>
68
+ )
69
+ if (kind === 'error')
70
+ return fit(
71
+ <div role="alert" data-basalt-chart-state={kind} className={stateClass} style={style}>
72
+ {body}
73
+ </div>,
74
+ )
75
+ return fit(
76
+ <output data-basalt-chart-state={kind} className={stateClass} style={style}>
77
+ {body}
78
+ </output>,
79
+ )
80
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The `--vx-*` → TanStack Charts bridge (`docs/V2-SPEC.md` § 9.5). Two halves, both CSS-variable
3
+ * references, so a scheme switch repaints without rebuilding a definition:
4
+ *
5
+ * - `CHART_THEME` goes into every definition's `theme` (scene paint: guides, grid, focus ring).
6
+ * - `CHART_ENGINE_VARS` (`--ts-chart-*`: palette, tooltip, crosshair halo) is one `:root` block
7
+ * (`chartEngineCss`) inside `styles.css`. Not on the host element: the tooltip portal's fallback
8
+ * reparents the tooltip under `<body>`, out of the host's inheritance. Not in `buildPaletteCss`:
9
+ * that emitter stays engine-agnostic.
10
+ */
11
+ import type { ChartTheme } from '@tanstack/charts/types/core'
12
+ import { VX } from '../tokens'
13
+
14
+ export const CHART_THEME: Partial<ChartTheme> = {
15
+ foreground: 'var(--vx-ink2)',
16
+ muted: 'var(--vx-axis)',
17
+ grid: 'var(--vx-grid)',
18
+ background: 'transparent',
19
+ palette: [
20
+ 'var(--ts-chart-1)',
21
+ 'var(--ts-chart-2)',
22
+ 'var(--ts-chart-3)',
23
+ 'var(--ts-chart-4)',
24
+ 'var(--ts-chart-5)',
25
+ 'var(--ts-chart-6)',
26
+ ],
27
+ }
28
+
29
+ export const CHART_ENGINE_VARS: Readonly<Record<`--ts-chart-${string}`, string>> = {
30
+ '--ts-chart-1': 'var(--vx-line)',
31
+ '--ts-chart-2': 'var(--vx-accent)',
32
+ '--ts-chart-3': 'var(--vx-fill-cyan)',
33
+ '--ts-chart-4': 'var(--vx-fill-orange)',
34
+ '--ts-chart-5': 'var(--vx-fill-grape)',
35
+ '--ts-chart-6': 'var(--vx-fill-lime)',
36
+ '--ts-chart-tooltip-background': 'var(--vx-tooltip-bg)',
37
+ '--ts-chart-tooltip-color': 'var(--vx-tooltip-text)',
38
+ '--ts-chart-tooltip-border': 'var(--vx-tooltip-border)',
39
+ '--ts-chart-tooltip-shadow': 'var(--vx-tooltip-shadow)',
40
+ '--ts-chart-tooltip-border-radius': 'var(--vx-radius-ctrl)',
41
+ '--ts-chart-crosshair-label-halo': 'var(--vx-surface-panel)',
42
+ '--ts-chart-crosshair-marker-fill': 'var(--vx-surface-panel)',
43
+ '--ts-chart-focus-fill': 'var(--vx-surface-panel)',
44
+ }
45
+
46
+ /**
47
+ * The charts layer's stylesheet block: one `:root` rule. `styles.css` carries the same declarations
48
+ * (formatter-laid-out) between two generated markers — `scripts/gen-chart-css.ts` writes them from this
49
+ * function's output, and `engine.test.tsx` fails on drift, whitespace aside — so the
50
+ * source tree a Vite alias or the layout fixture serves and the published `dist/styles.css` agree.
51
+ */
52
+ export function chartEngineCss(): string {
53
+ const decls = Object.entries(CHART_ENGINE_VARS).map(([name, value]) => `${name}:${value}`)
54
+ return `:root{${decls.join(';')}}`
55
+ }
56
+
57
+ /** Guide paint every definition shares — the tokens are pre-mixed, so nothing dilutes them. */
58
+ export const AXIS_LINE = { stroke: VX.axisStroke, strokeOpacity: 1 } as const
59
+ export const GRID_LINE = { strokeDasharray: '2 3', strokeOpacity: 1 } as const
60
+ export const CROSSHAIR = { stroke: VX.crosshair, strokeOpacity: 1, strokeDasharray: '3 3' } as const
61
+ export const DASH = VX.dashArray
62
+ /** The default plotted stroke: the redesign's 1.9px line overlay. */
63
+ export const LINE_STROKE_WIDTH = 1.9
64
+ /** A series' opacity multiplier while ANOTHER legend entry is hovered (one value for every kind). */
65
+ export const DIMMED = 0.25