basalt-ui 1.41.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (914) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +535 -518
  3. package/MIGRATING.md +945 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +14 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/doctor-upgrade.d.ts +31 -0
  175. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  176. package/dist/cli/doctor-upgrade.js +269 -0
  177. package/dist/cli/doctor.d.ts +13 -29
  178. package/dist/cli/doctor.d.ts.map +1 -1
  179. package/dist/cli/doctor.js +51 -9
  180. package/dist/cli/help.d.ts.map +1 -1
  181. package/dist/cli/help.js +2 -4
  182. package/dist/cli/index.d.ts +48 -172
  183. package/dist/cli/index.d.ts.map +1 -1
  184. package/dist/cli/index.js +39 -132
  185. package/dist/cli/init.d.ts.map +1 -1
  186. package/dist/cli/init.js +43 -37
  187. package/dist/cli/sync.d.ts +5 -21
  188. package/dist/cli/sync.d.ts.map +1 -1
  189. package/dist/cli/sync.js +4 -23
  190. package/dist/cli/tokens-css.d.ts +7 -28
  191. package/dist/cli/tokens-css.d.ts.map +1 -1
  192. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.js +4 -5
  194. package/dist/commands/define-commands.d.ts +15 -31
  195. package/dist/commands/define-commands.d.ts.map +1 -1
  196. package/dist/commands/define-commands.js +1 -11
  197. package/dist/commands/define-overlays.d.ts +5 -19
  198. package/dist/commands/define-overlays.d.ts.map +1 -1
  199. package/dist/commands/define-overlays.js +3 -11
  200. package/dist/commands/index.d.ts +10 -40
  201. package/dist/commands/index.d.ts.map +1 -1
  202. package/dist/commands/index.js +9 -46
  203. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  204. package/dist/commands/notifications/bell.d.ts.map +1 -0
  205. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  206. package/dist/commands/notifications/center.d.ts.map +1 -0
  207. package/dist/{notifications → commands/notifications}/center.js +2 -2
  208. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  209. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  210. package/dist/commands/notifications/notify.d.ts +44 -0
  211. package/dist/commands/notifications/notify.d.ts.map +1 -0
  212. package/dist/commands/notifications/notify.js +79 -0
  213. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  214. package/dist/commands/notifications/store.d.ts.map +1 -0
  215. package/dist/{notifications → commands/notifications}/store.js +4 -0
  216. package/dist/commands/projectors.d.ts +1 -131
  217. package/dist/commands/projectors.d.ts.map +1 -1
  218. package/dist/commands/projectors.js +2 -73
  219. package/dist/commands/shell-bridge.d.ts +3 -3
  220. package/dist/commands/shortcut-format.d.ts +5 -4
  221. package/dist/commands/shortcut-format.d.ts.map +1 -1
  222. package/dist/common/errors.d.ts +3 -3
  223. package/dist/common/use-measured-widths.d.ts.map +1 -1
  224. package/dist/common/use-measured-widths.js +5 -3
  225. package/dist/common/validate.d.ts +2 -2
  226. package/dist/content/article-layout.d.ts.map +1 -1
  227. package/dist/content/article-layout.js +3 -3
  228. package/dist/content/article-model.d.ts +1 -46
  229. package/dist/content/article-model.d.ts.map +1 -1
  230. package/dist/content/article-model.js +1 -29
  231. package/dist/content/index.d.ts +11 -41
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +3 -35
  234. package/dist/content/markdown.d.ts +1 -1
  235. package/dist/content/markdown.d.ts.map +1 -1
  236. package/dist/content/markdown.js +1 -1
  237. package/dist/content/mermaid.d.ts.map +1 -1
  238. package/dist/content/mermaid.js +7 -7
  239. package/dist/content/slug.d.ts +1 -8
  240. package/dist/content/slug.d.ts.map +1 -1
  241. package/dist/content/slug.js +1 -8
  242. package/dist/content/url-hardening.d.ts +2 -2
  243. package/dist/content/url-hardening.d.ts.map +1 -1
  244. package/dist/content/url-hardening.js +2 -0
  245. package/dist/controls/actions.d.ts +16 -1
  246. package/dist/controls/actions.d.ts.map +1 -1
  247. package/dist/controls/enum-filter.d.ts +1 -1
  248. package/dist/controls/enum-filter.d.ts.map +1 -1
  249. package/dist/controls/filter-context.d.ts.map +1 -1
  250. package/dist/controls/filter-context.js +3 -1
  251. package/dist/controls/filter-set.js +4 -6
  252. package/dist/controls/form-layout.d.ts +1 -1
  253. package/dist/controls/form-layout.d.ts.map +1 -1
  254. package/dist/controls/form-layout.js +1 -1
  255. package/dist/controls/glyphs.d.ts +0 -2
  256. package/dist/controls/glyphs.d.ts.map +1 -1
  257. package/dist/controls/glyphs.js +0 -7
  258. package/dist/controls/index.d.ts +12 -17
  259. package/dist/controls/index.d.ts.map +1 -1
  260. package/dist/controls/index.js +5 -39
  261. package/dist/controls/multi-select-filter.d.ts +4 -3
  262. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  263. package/dist/controls/number-filter.d.ts +4 -3
  264. package/dist/controls/number-filter.d.ts.map +1 -1
  265. package/dist/controls/number-filter.js +3 -1
  266. package/dist/controls/range-filter.d.ts +4 -3
  267. package/dist/controls/range-filter.d.ts.map +1 -1
  268. package/dist/controls/search-filter.d.ts +4 -3
  269. package/dist/controls/search-filter.d.ts.map +1 -1
  270. package/dist/controls/search-filter.js +19 -14
  271. package/dist/controls/select-filter.d.ts +4 -3
  272. package/dist/controls/select-filter.d.ts.map +1 -1
  273. package/dist/controls/sync-button.d.ts.map +1 -1
  274. package/dist/controls/sync-button.js +12 -15
  275. package/dist/controls/toggle-filter.d.ts +4 -3
  276. package/dist/controls/toggle-filter.d.ts.map +1 -1
  277. package/dist/controls/uncontrolled.d.ts +12 -0
  278. package/dist/controls/uncontrolled.d.ts.map +1 -0
  279. package/dist/controls/view-tabs.d.ts +2 -2
  280. package/dist/controls/view-tabs.d.ts.map +1 -1
  281. package/dist/controls-dates/index.d.ts +0 -1
  282. package/dist/controls-dates/index.d.ts.map +1 -1
  283. package/dist/dashboard/index.d.ts +7 -9
  284. package/dist/dashboard/index.d.ts.map +1 -1
  285. package/dist/dashboard/index.js +3 -23
  286. package/dist/dashboard/section.d.ts +4 -6
  287. package/dist/dashboard/section.d.ts.map +1 -1
  288. package/dist/dashboard/section.js +4 -10
  289. package/dist/dashboard/stat-card.d.ts +4 -4
  290. package/dist/dashboard/stat-card.d.ts.map +1 -1
  291. package/dist/dashboard/stat-card.js +3 -3
  292. package/dist/dashboard/widget-header.module.css +9 -7
  293. package/dist/dev-dock.d.ts.map +1 -1
  294. package/dist/dev-dock.js +6 -1
  295. package/dist/format/date.d.ts +0 -34
  296. package/dist/format/date.d.ts.map +1 -1
  297. package/dist/format/date.js +0 -54
  298. package/dist/format/index.d.ts +7 -22
  299. package/dist/format/index.d.ts.map +1 -1
  300. package/dist/format/index.js +2 -43
  301. package/dist/format/number.d.ts +3 -14
  302. package/dist/format/number.d.ts.map +1 -1
  303. package/dist/format/number.js +0 -13
  304. package/dist/format/shared.d.ts +2 -3
  305. package/dist/format/shared.d.ts.map +1 -1
  306. package/dist/forms/index.d.ts +0 -11
  307. package/dist/forms/index.d.ts.map +1 -1
  308. package/dist/forms/index.js +1 -14
  309. package/dist/guard/index.d.ts +6 -21
  310. package/dist/guard/index.d.ts.map +1 -1
  311. package/dist/guard/index.js +27 -115
  312. package/dist/guard/types.d.ts +7 -18
  313. package/dist/guard/types.d.ts.map +1 -1
  314. package/dist/index.d.ts +16 -48
  315. package/dist/index.d.ts.map +1 -1
  316. package/dist/index.js +21 -117
  317. package/dist/provider/create-router.d.ts +44 -0
  318. package/dist/provider/create-router.d.ts.map +1 -0
  319. package/dist/provider/create-router.js +62 -0
  320. package/dist/provider/hotkeys.d.ts +8 -0
  321. package/dist/provider/hotkeys.d.ts.map +1 -0
  322. package/dist/provider/hotkeys.js +50 -0
  323. package/dist/provider/index.d.ts +33 -110
  324. package/dist/provider/index.d.ts.map +1 -1
  325. package/dist/provider/index.js +182 -82
  326. package/dist/provider/lab-theme.d.ts.map +1 -1
  327. package/dist/provider/route-transition.d.ts +76 -0
  328. package/dist/provider/route-transition.d.ts.map +1 -0
  329. package/dist/provider/route-transition.js +98 -0
  330. package/dist/provider/spotlight-actions.d.ts +10 -0
  331. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  332. package/dist/provider/spotlight-actions.js +55 -0
  333. package/dist/provider/test-router.d.ts +6 -0
  334. package/dist/provider/test-router.d.ts.map +1 -0
  335. package/dist/provider/test-router.js +18 -0
  336. package/dist/query-client.d.ts +4 -20
  337. package/dist/query-client.d.ts.map +1 -1
  338. package/dist/query-client.js +2 -2
  339. package/dist/router-tanstack/index.d.ts +18 -64
  340. package/dist/router-tanstack/index.d.ts.map +1 -1
  341. package/dist/router-tanstack/index.js +2 -16
  342. package/dist/router-tanstack/nav.d.ts +12 -1
  343. package/dist/router-tanstack/nav.d.ts.map +1 -1
  344. package/dist/router-tanstack/nav.js +8 -1
  345. package/dist/router-tanstack/search-store.d.ts +1 -1
  346. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  347. package/dist/router-tanstack/use-nav.d.ts +8 -9
  348. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/use-nav.js +20 -1
  350. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  351. package/dist/shell/app-sidebar.js +1 -1
  352. package/dist/shell/index.d.ts +31 -10
  353. package/dist/shell/index.d.ts.map +1 -1
  354. package/dist/shell/index.js +14 -3
  355. package/dist/shell/page-aside.d.ts +2 -2
  356. package/dist/shell/page-aside.d.ts.map +1 -1
  357. package/dist/shell/page-aside.js +31 -12
  358. package/dist/shell/page-bar.d.ts +2 -2
  359. package/dist/shell/page-bar.d.ts.map +1 -1
  360. package/dist/shell/page-bar.js +1 -1
  361. package/dist/state.d.ts +10 -12
  362. package/dist/state.d.ts.map +1 -1
  363. package/dist/state.js +4 -6
  364. package/dist/styles.css +107 -7
  365. package/dist/surfaces.d.ts +28 -103
  366. package/dist/surfaces.d.ts.map +1 -1
  367. package/dist/surfaces.js +54 -143
  368. package/dist/{data → table}/data-table-state.d.ts +1 -1
  369. package/dist/table/data-table-state.d.ts.map +1 -0
  370. package/dist/{data → table}/data-table-state.js +4 -3
  371. package/dist/{data → table}/data-table.d.ts +28 -49
  372. package/dist/table/data-table.d.ts.map +1 -0
  373. package/dist/{data → table}/data-table.js +74 -60
  374. package/dist/table/index.d.ts +18 -0
  375. package/dist/table/index.d.ts.map +1 -0
  376. package/dist/{data/table.js → table/index.js} +1 -1
  377. package/dist/table/query-branch.d.ts.map +1 -0
  378. package/dist/table/table-features.d.ts +69 -0
  379. package/dist/table/table-features.d.ts.map +1 -0
  380. package/dist/table/table-features.js +49 -0
  381. package/dist/telemetry.d.ts +77 -0
  382. package/dist/telemetry.d.ts.map +1 -0
  383. package/dist/telemetry.js +33 -0
  384. package/dist/theme/index.d.ts +10 -21
  385. package/dist/theme/index.d.ts.map +1 -1
  386. package/dist/theme/index.js +3 -14
  387. package/dist/theme/theme-toggle.d.ts.map +1 -1
  388. package/dist/theme/theme-toggle.js +7 -33
  389. package/dist/theme/theme-toggle.module.css +30 -0
  390. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  391. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  392. package/dist/theme-lab/derive-controls.js +5 -3
  393. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  394. package/dist/theme-lab/derive-state.js +2 -1
  395. package/dist/tokens/core.d.ts +360 -0
  396. package/dist/tokens/core.d.ts.map +1 -0
  397. package/dist/tokens/core.js +708 -0
  398. package/dist/tokens/derive.d.ts +1 -1
  399. package/dist/tokens/derive.d.ts.map +1 -1
  400. package/dist/tokens/index.d.ts +5 -373
  401. package/dist/tokens/index.d.ts.map +1 -1
  402. package/dist/tokens/index.js +8 -700
  403. package/dist/tokens/palette.d.ts +2 -6
  404. package/dist/tokens/palette.d.ts.map +1 -1
  405. package/dist/tokens/palette.js +1 -4
  406. package/dist/vite.d.ts +4 -3
  407. package/dist/vite.d.ts.map +1 -1
  408. package/llms.txt +43 -85
  409. package/package.json +77 -170
  410. package/src/agent/ai-sdk-transport.ts +57 -37
  411. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  412. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  413. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  414. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  415. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  416. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  417. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  418. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  419. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  420. package/src/agent/error.ts +43 -0
  421. package/src/agent/history.ts +2 -107
  422. package/src/agent/id.ts +4 -5
  423. package/src/agent/index.ts +23 -112
  424. package/src/agent/outcome.ts +3 -56
  425. package/src/agent/part-list.tsx +3 -3
  426. package/src/agent/parts.ts +23 -22
  427. package/src/agent/run-committer.ts +64 -0
  428. package/src/agent/run-records.ts +147 -0
  429. package/src/agent/thread.ts +24 -231
  430. package/src/agent/transport.ts +6 -96
  431. package/src/agent/use-agent-thread-runs.ts +364 -199
  432. package/src/charts/BandStrip.tsx +276 -0
  433. package/src/charts/Bars.tsx +141 -0
  434. package/src/charts/CartesianChart.tsx +206 -0
  435. package/src/charts/ChartCard.tsx +178 -0
  436. package/src/charts/Donut.tsx +256 -0
  437. package/src/charts/DualPanel.tsx +326 -0
  438. package/src/charts/Heatmap.tsx +282 -0
  439. package/src/charts/Lines.tsx +151 -0
  440. package/src/charts/MirroredBars.tsx +303 -0
  441. package/src/charts/Sparkline.tsx +176 -0
  442. package/src/charts/StackedArea.tsx +80 -0
  443. package/src/charts/box.tsx +96 -0
  444. package/src/charts/card-context.ts +11 -0
  445. package/src/charts/chart-box.module.css +64 -0
  446. package/src/charts/chart-box.module.css.d.ts +12 -0
  447. package/src/charts/chart-card.module.css +25 -0
  448. package/src/charts/chart-card.module.css.d.ts +8 -0
  449. package/src/charts/chart-legend.module.css +38 -0
  450. package/src/charts/chart-legend.module.css.d.ts +10 -0
  451. package/src/charts/compile.ts +585 -0
  452. package/src/charts/cursor.ts +282 -0
  453. package/src/charts/curves.ts +111 -0
  454. package/src/charts/donut.module.css +54 -0
  455. package/src/charts/donut.module.css.d.ts +9 -0
  456. package/src/charts/host.tsx +60 -0
  457. package/src/charts/index.ts +41 -178
  458. package/src/charts/legend.tsx +204 -0
  459. package/src/charts/marks.ts +201 -0
  460. package/src/charts/panel.tsx +227 -0
  461. package/src/charts/scales.ts +237 -0
  462. package/src/charts/sizing.ts +47 -0
  463. package/src/charts/state.tsx +80 -0
  464. package/src/charts/theme.ts +65 -0
  465. package/src/charts/types.ts +242 -0
  466. package/src/cli/audit-allows.ts +8 -30
  467. package/src/cli/config.ts +14 -43
  468. package/src/cli/doctor-upgrade.ts +392 -0
  469. package/src/cli/doctor.ts +81 -72
  470. package/src/cli/help.ts +2 -4
  471. package/src/cli/index.ts +100 -384
  472. package/src/cli/init.ts +60 -51
  473. package/src/cli/sync.ts +13 -68
  474. package/src/cli/tokens-css.ts +7 -28
  475. package/src/commands/ShortcutsHelp.tsx +8 -9
  476. package/src/commands/define-commands.ts +16 -43
  477. package/src/commands/define-overlays.ts +12 -36
  478. package/src/commands/index.ts +11 -94
  479. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  480. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  481. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  482. package/src/commands/notifications/notify.tsx +158 -0
  483. package/src/{notifications → commands/notifications}/store.ts +10 -2
  484. package/src/commands/projectors.ts +5 -225
  485. package/src/commands/shell-bridge.ts +5 -5
  486. package/src/commands/shortcut-format.ts +5 -4
  487. package/src/common/errors.ts +3 -3
  488. package/src/common/use-measured-widths.ts +6 -3
  489. package/src/common/validate.ts +2 -2
  490. package/src/content/article-layout.tsx +37 -38
  491. package/src/content/article-model.ts +1 -84
  492. package/src/content/index.ts +12 -83
  493. package/src/content/markdown.tsx +4 -3
  494. package/src/content/mermaid.tsx +9 -7
  495. package/src/content/slug.ts +1 -16
  496. package/src/content/url-hardening.ts +8 -2
  497. package/src/controls/actions.tsx +24 -1
  498. package/src/controls/enum-filter.tsx +1 -1
  499. package/src/controls/filter-context.tsx +3 -1
  500. package/src/controls/filter-set.tsx +5 -7
  501. package/src/controls/form-layout.tsx +2 -2
  502. package/src/controls/glyphs.tsx +0 -10
  503. package/src/controls/index.ts +13 -64
  504. package/src/controls/multi-select-filter.tsx +5 -4
  505. package/src/controls/number-filter.tsx +8 -4
  506. package/src/controls/range-filter.tsx +5 -4
  507. package/src/controls/search-filter.tsx +25 -19
  508. package/src/controls/select-filter.tsx +5 -4
  509. package/src/controls/sync-button.tsx +18 -20
  510. package/src/controls/toggle-filter.tsx +5 -4
  511. package/src/controls/uncontrolled.ts +12 -0
  512. package/src/controls/view-tabs.tsx +3 -3
  513. package/src/controls-dates/date-range-picker.tsx +1 -1
  514. package/src/controls-dates/index.ts +0 -1
  515. package/src/dashboard/index.ts +7 -48
  516. package/src/dashboard/section.tsx +11 -40
  517. package/src/dashboard/stat-card.tsx +14 -16
  518. package/src/dashboard/widget-header.module.css +9 -7
  519. package/src/dev-dock.tsx +14 -27
  520. package/src/format/date.ts +2 -92
  521. package/src/format/index.ts +7 -53
  522. package/src/format/number.ts +3 -26
  523. package/src/format/shared.ts +2 -3
  524. package/src/forms/index.ts +0 -23
  525. package/src/guard/index.ts +36 -191
  526. package/src/guard/types.ts +6 -19
  527. package/src/index.ts +30 -282
  528. package/src/provider/create-router.tsx +138 -0
  529. package/src/provider/hotkeys.ts +70 -0
  530. package/src/provider/index.tsx +260 -230
  531. package/src/provider/lab-theme.ts +3 -2
  532. package/src/provider/route-transition.ts +199 -0
  533. package/src/provider/spotlight-actions.tsx +69 -0
  534. package/src/provider/test-router.tsx +25 -0
  535. package/src/query-client.ts +4 -22
  536. package/src/router-tanstack/index.ts +18 -112
  537. package/src/router-tanstack/nav.ts +28 -2
  538. package/src/router-tanstack/search-store.ts +9 -2
  539. package/src/router-tanstack/use-nav.ts +47 -13
  540. package/src/shell/app-mobile-nav.tsx +3 -2
  541. package/src/shell/app-sidebar.tsx +1 -1
  542. package/src/shell/aside-docking.ts +1 -1
  543. package/src/shell/index.tsx +61 -20
  544. package/src/shell/page-aside.tsx +47 -23
  545. package/src/shell/page-bar.tsx +3 -3
  546. package/src/shell/page-title.tsx +1 -1
  547. package/src/state.ts +11 -37
  548. package/src/styles.css +107 -7
  549. package/src/surfaces.ts +56 -151
  550. package/src/{data → table}/data-table-state.ts +5 -4
  551. package/src/{data → table}/data-table.tsx +170 -161
  552. package/src/table/index.ts +18 -0
  553. package/src/table/table-features.ts +102 -0
  554. package/src/telemetry.ts +110 -0
  555. package/src/theme/index.ts +22 -47
  556. package/src/theme/theme-toggle.module.css +30 -0
  557. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  558. package/src/theme/theme-toggle.tsx +15 -43
  559. package/src/theme-lab/derive-controls.tsx +5 -3
  560. package/src/theme-lab/derive-state.ts +2 -1
  561. package/src/tokens/core.ts +1163 -0
  562. package/src/tokens/derive.ts +1 -1
  563. package/src/tokens/index.ts +14 -1181
  564. package/src/tokens/palette.ts +3 -7
  565. package/src/vite.ts +3 -3
  566. package/agent/templates/query-client.ts.tpl +0 -26
  567. package/dist/agent/adapter.d.ts +0 -150
  568. package/dist/agent/adapter.d.ts.map +0 -1
  569. package/dist/agent/adapter.js +0 -482
  570. package/dist/agent/use-agent-stream.d.ts +0 -35
  571. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  572. package/dist/agent/use-agent-stream.js +0 -59
  573. package/dist/agent-chat/composer.d.ts.map +0 -1
  574. package/dist/agent-chat/index.d.ts +0 -31
  575. package/dist/agent-chat/index.d.ts.map +0 -1
  576. package/dist/agent-chat/index.js +0 -19
  577. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  578. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  579. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  580. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  581. package/dist/agent-chat/thread-detail-panel.js +0 -115
  582. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  583. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  587. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-workspace.js +0 -153
  589. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  590. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  591. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  592. package/dist/charts/cursor/resolve.d.ts +0 -75
  593. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  594. package/dist/charts/cursor/resolve.js +0 -91
  595. package/dist/charts/cursor/scope.d.ts +0 -20
  596. package/dist/charts/cursor/scope.d.ts.map +0 -1
  597. package/dist/charts/cursor/scope.js +0 -20
  598. package/dist/charts/cursor/store.d.ts +0 -35
  599. package/dist/charts/cursor/store.d.ts.map +0 -1
  600. package/dist/charts/cursor/store.js +0 -25
  601. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  602. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  603. package/dist/charts/cursor/touch-pin.js +0 -79
  604. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  606. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  607. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  608. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  609. package/dist/charts/hooks/use-hysteresis.js +0 -12
  610. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  611. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  612. package/dist/charts/hooks/useBandPlot.js +0 -178
  613. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  614. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/useChartCursor.js +0 -200
  616. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  617. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  618. package/dist/charts/hooks/useChartSize.js +0 -8
  619. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  620. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  621. package/dist/charts/kinds/BandStrip.js +0 -241
  622. package/dist/charts/kinds/Bars.d.ts +0 -141
  623. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  624. package/dist/charts/kinds/Bars.js +0 -343
  625. package/dist/charts/kinds/Donut.d.ts +0 -77
  626. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  627. package/dist/charts/kinds/Donut.js +0 -245
  628. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  629. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  630. package/dist/charts/kinds/DualPanel.js +0 -471
  631. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  632. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  633. package/dist/charts/kinds/Heatmap.js +0 -243
  634. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  635. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  636. package/dist/charts/kinds/MirroredBars.js +0 -292
  637. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  638. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  639. package/dist/charts/kinds/MultiLine.js +0 -176
  640. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  641. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  642. package/dist/charts/kinds/StackedArea.js +0 -135
  643. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  644. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  645. package/dist/charts/kinds/ZonedLine.js +0 -155
  646. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  647. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  648. package/dist/charts/kinds/band-chrome.js +0 -71
  649. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  650. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  651. package/dist/charts/kinds/donut-layout.js +0 -52
  652. package/dist/charts/layout/auto-margin.d.ts +0 -122
  653. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  654. package/dist/charts/layout/auto-margin.js +0 -81
  655. package/dist/charts/layout/end-labels.d.ts +0 -64
  656. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  657. package/dist/charts/layout/end-labels.js +0 -76
  658. package/dist/charts/layout/log-ticks.d.ts +0 -27
  659. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  660. package/dist/charts/layout/log-ticks.js +0 -42
  661. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  662. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  663. package/dist/charts/primitives/AreaGradient.js +0 -13
  664. package/dist/charts/primitives/Axes.d.ts +0 -83
  665. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  666. package/dist/charts/primitives/Axes.js +0 -168
  667. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  668. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  669. package/dist/charts/primitives/CartesianChart.js +0 -549
  670. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  671. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  672. package/dist/charts/primitives/ChartCard.js +0 -143
  673. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  674. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  675. package/dist/charts/primitives/ChartFrame.js +0 -241
  676. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  677. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  678. package/dist/charts/primitives/ChartLegend.js +0 -292
  679. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  680. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartPending.js +0 -117
  682. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  683. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartTooltip.js +0 -197
  685. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  686. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  687. package/dist/charts/primitives/Crosshair.js +0 -23
  688. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  689. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  690. package/dist/charts/primitives/HatchPattern.js +0 -31
  691. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  692. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  693. package/dist/charts/primitives/HoverOverlay.js +0 -72
  694. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  695. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  696. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  697. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  698. package/dist/charts/primitives/XZoneRects.js +0 -65
  699. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  700. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  701. package/dist/charts/primitives/ZoneRects.js +0 -30
  702. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  703. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  704. package/dist/charts/primitives/chart-card-context.js +0 -18
  705. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  706. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  707. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  708. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  709. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  710. package/dist/charts/primitives/chart-layout.js +0 -175
  711. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  712. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-tier.js +0 -44
  714. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  715. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  716. package/dist/charts/primitives/legend-disclosure.js +0 -153
  717. package/dist/charts/series.d.ts +0 -189
  718. package/dist/charts/series.d.ts.map +0 -1
  719. package/dist/charts/series.js +0 -84
  720. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  721. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  722. package/dist/charts/sparklines/BarSparkline.js +0 -53
  723. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  724. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  725. package/dist/charts/sparklines/LineSparkline.js +0 -51
  726. package/dist/charts/sparklines/index.d.ts +0 -3
  727. package/dist/charts/sparklines/index.d.ts.map +0 -1
  728. package/dist/charts/sparklines/index.js +0 -6
  729. package/dist/charts/utils/domain.d.ts +0 -35
  730. package/dist/charts/utils/domain.d.ts.map +0 -1
  731. package/dist/charts/utils/domain.js +0 -12
  732. package/dist/charts/utils/format.d.ts +0 -8
  733. package/dist/charts/utils/format.d.ts.map +0 -1
  734. package/dist/charts/utils/format.js +0 -20
  735. package/dist/charts/utils/measure-text.d.ts +0 -25
  736. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  737. package/dist/charts/utils/measure-text.js +0 -64
  738. package/dist/charts/utils/ticks.d.ts +0 -103
  739. package/dist/charts/utils/ticks.d.ts.map +0 -1
  740. package/dist/charts/utils/ticks.js +0 -92
  741. package/dist/commands/overlays-mount.d.ts +0 -122
  742. package/dist/commands/overlays-mount.d.ts.map +0 -1
  743. package/dist/commands/overlays-mount.js +0 -125
  744. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  745. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  746. package/dist/commands/useCommandHotkeys.js +0 -45
  747. package/dist/content/article-actions.d.ts +0 -39
  748. package/dist/content/article-actions.d.ts.map +0 -1
  749. package/dist/content/article-actions.js +0 -28
  750. package/dist/content/article-card.d.ts +0 -58
  751. package/dist/content/article-card.d.ts.map +0 -1
  752. package/dist/content/article-card.js +0 -79
  753. package/dist/content/article-card.module.css +0 -111
  754. package/dist/content/mdx.d.ts +0 -20
  755. package/dist/content/mdx.d.ts.map +0 -1
  756. package/dist/content/mdx.js +0 -64
  757. package/dist/controls/compare-filter.d.ts +0 -42
  758. package/dist/controls/compare-filter.d.ts.map +0 -1
  759. package/dist/controls/compare-filter.js +0 -38
  760. package/dist/controls/slider-control.d.ts +0 -36
  761. package/dist/controls/slider-control.d.ts.map +0 -1
  762. package/dist/controls/slider-control.js +0 -64
  763. package/dist/dashboard/widget-grid.d.ts +0 -27
  764. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  765. package/dist/dashboard/widget-grid.js +0 -40
  766. package/dist/dashboard/widget-grid.module.css +0 -69
  767. package/dist/data/data-table-state.d.ts.map +0 -1
  768. package/dist/data/data-table.d.ts.map +0 -1
  769. package/dist/data/query-branch.d.ts.map +0 -1
  770. package/dist/data/table.d.ts +0 -24
  771. package/dist/data/table.d.ts.map +0 -1
  772. package/dist/data/virtual-list.d.ts +0 -133
  773. package/dist/data/virtual-list.d.ts.map +0 -1
  774. package/dist/data/virtual-list.js +0 -157
  775. package/dist/data/virtual.d.ts +0 -21
  776. package/dist/data/virtual.d.ts.map +0 -1
  777. package/dist/data/virtual.js +0 -4
  778. package/dist/forms/FormErrorSummary.d.ts +0 -30
  779. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  780. package/dist/forms/FormErrorSummary.js +0 -30
  781. package/dist/forms/use-field-array.d.ts +0 -60
  782. package/dist/forms/use-field-array.d.ts.map +0 -1
  783. package/dist/forms/use-field-array.js +0 -20
  784. package/dist/forms/use-form-draft.d.ts +0 -76
  785. package/dist/forms/use-form-draft.d.ts.map +0 -1
  786. package/dist/forms/use-form-draft.js +0 -92
  787. package/dist/forms/use-form-submit.d.ts +0 -88
  788. package/dist/forms/use-form-submit.d.ts.map +0 -1
  789. package/dist/forms/use-form-submit.js +0 -63
  790. package/dist/notifications/bell.d.ts.map +0 -1
  791. package/dist/notifications/center.d.ts.map +0 -1
  792. package/dist/notifications/define-notifications.d.ts.map +0 -1
  793. package/dist/notifications/index.d.ts +0 -40
  794. package/dist/notifications/index.d.ts.map +0 -1
  795. package/dist/notifications/index.js +0 -54
  796. package/dist/notifications/mount-guard.d.ts +0 -8
  797. package/dist/notifications/mount-guard.d.ts.map +0 -1
  798. package/dist/notifications/mount-guard.js +0 -18
  799. package/dist/notifications/notify.d.ts +0 -149
  800. package/dist/notifications/notify.d.ts.map +0 -1
  801. package/dist/notifications/notify.js +0 -171
  802. package/dist/notifications/store.d.ts.map +0 -1
  803. package/dist/provider/connectivity-indicator.d.ts +0 -13
  804. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  805. package/dist/provider/connectivity-indicator.js +0 -205
  806. package/dist/provider/connectivity-provider.d.ts +0 -7
  807. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  808. package/dist/provider/connectivity-provider.js +0 -128
  809. package/dist/provider/connectivity-types.d.ts +0 -36
  810. package/dist/provider/connectivity-types.d.ts.map +0 -1
  811. package/dist/provider/use-connectivity.d.ts +0 -3
  812. package/dist/provider/use-connectivity.d.ts.map +0 -1
  813. package/dist/provider/use-connectivity.js +0 -14
  814. package/dist/query-devtools.d.ts +0 -21
  815. package/dist/query-devtools.d.ts.map +0 -1
  816. package/dist/query-devtools.js +0 -13
  817. package/src/agent/adapter.ts +0 -945
  818. package/src/agent/use-agent-stream.ts +0 -154
  819. package/src/agent-chat/index.ts +0 -54
  820. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  821. package/src/agent-chat/thread-workspace.tsx +0 -279
  822. package/src/charts/cursor/resolve.ts +0 -198
  823. package/src/charts/cursor/scope.tsx +0 -35
  824. package/src/charts/cursor/store.ts +0 -58
  825. package/src/charts/cursor/touch-pin.ts +0 -138
  826. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  827. package/src/charts/hooks/use-hysteresis.ts +0 -26
  828. package/src/charts/hooks/useBandPlot.ts +0 -383
  829. package/src/charts/hooks/useChartCursor.ts +0 -367
  830. package/src/charts/hooks/useChartSize.ts +0 -35
  831. package/src/charts/kinds/BandStrip.tsx +0 -449
  832. package/src/charts/kinds/Bars.tsx +0 -589
  833. package/src/charts/kinds/Donut.tsx +0 -368
  834. package/src/charts/kinds/DualPanel.tsx +0 -712
  835. package/src/charts/kinds/Heatmap.tsx +0 -396
  836. package/src/charts/kinds/MirroredBars.tsx +0 -469
  837. package/src/charts/kinds/MultiLine.tsx +0 -322
  838. package/src/charts/kinds/StackedArea.tsx +0 -267
  839. package/src/charts/kinds/ZonedLine.tsx +0 -301
  840. package/src/charts/kinds/band-chrome.tsx +0 -91
  841. package/src/charts/kinds/donut-layout.ts +0 -82
  842. package/src/charts/layout/auto-margin.ts +0 -242
  843. package/src/charts/layout/end-labels.ts +0 -135
  844. package/src/charts/layout/log-ticks.ts +0 -90
  845. package/src/charts/primitives/AreaGradient.tsx +0 -26
  846. package/src/charts/primitives/Axes.tsx +0 -271
  847. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  848. package/src/charts/primitives/ChartCard.tsx +0 -280
  849. package/src/charts/primitives/ChartFrame.tsx +0 -493
  850. package/src/charts/primitives/ChartLegend.tsx +0 -422
  851. package/src/charts/primitives/ChartPending.tsx +0 -243
  852. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  853. package/src/charts/primitives/Crosshair.tsx +0 -43
  854. package/src/charts/primitives/HatchPattern.tsx +0 -55
  855. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  856. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  857. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  858. package/src/charts/primitives/XZoneRects.tsx +0 -132
  859. package/src/charts/primitives/ZoneRects.tsx +0 -67
  860. package/src/charts/primitives/chart-card-context.ts +0 -46
  861. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  862. package/src/charts/primitives/chart-layout.ts +0 -318
  863. package/src/charts/primitives/chart-tier.tsx +0 -76
  864. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  865. package/src/charts/series.ts +0 -276
  866. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  867. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  868. package/src/charts/sparklines/index.ts +0 -2
  869. package/src/charts/theme.tsx +0 -53
  870. package/src/charts/utils/domain.ts +0 -41
  871. package/src/charts/utils/format.ts +0 -19
  872. package/src/charts/utils/measure-text.ts +0 -109
  873. package/src/charts/utils/ticks.ts +0 -239
  874. package/src/commands/overlays-mount.tsx +0 -333
  875. package/src/commands/useCommandHotkeys.ts +0 -114
  876. package/src/content/article-actions.ts +0 -72
  877. package/src/content/article-card.module.css +0 -111
  878. package/src/content/article-card.tsx +0 -174
  879. package/src/content/mdx.tsx +0 -127
  880. package/src/controls/compare-filter.tsx +0 -81
  881. package/src/controls/slider-control.tsx +0 -159
  882. package/src/dashboard/widget-grid.module.css +0 -69
  883. package/src/dashboard/widget-grid.tsx +0 -146
  884. package/src/data/table.ts +0 -39
  885. package/src/data/virtual-list.tsx +0 -356
  886. package/src/data/virtual.ts +0 -26
  887. package/src/forms/FormErrorSummary.tsx +0 -71
  888. package/src/forms/use-field-array.ts +0 -94
  889. package/src/forms/use-form-draft.ts +0 -262
  890. package/src/forms/use-form-submit.ts +0 -199
  891. package/src/notifications/index.ts +0 -88
  892. package/src/notifications/mount-guard.ts +0 -38
  893. package/src/notifications/notify.tsx +0 -379
  894. package/src/provider/connectivity-indicator.tsx +0 -267
  895. package/src/provider/connectivity-provider.tsx +0 -189
  896. package/src/provider/connectivity-types.ts +0 -42
  897. package/src/provider/use-connectivity.ts +0 -26
  898. package/src/query-devtools.tsx +0 -40
  899. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  900. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  902. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  903. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  904. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  906. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  907. /package/dist/{data → table}/data-table.module.css +0 -0
  908. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  909. /package/dist/{data → table}/query-branch.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.js +0 -0
  911. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  912. /package/src/{data → table}/data-table.module.css +0 -0
  913. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  914. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,422 +0,0 @@
1
- import type { CSSProperties, MouseEvent, ReactNode } from 'react'
2
- import type { BasaltProps } from '../../common/props'
3
- import { useCoarsePointer } from '../../common/use-media-query'
4
- import { alpha, VX } from '../../tokens'
5
- import type { SeriesRole, LegendPlacement } from '../series'
6
- import { DOTS_HIT_GAP, LEGEND_DOT_SIZE, LEGEND_ROW_GAP, orderEntries } from './chart-frame-layout'
7
- import { useChartMetrics } from './chart-tier'
8
- import { LegendDisclosure, useLegendDisclosure } from './legend-disclosure'
9
-
10
- export type LegendEntry = {
11
- key: string
12
- label: string
13
- color: string
14
- secondColor?: string
15
- strokeWidth?: number
16
- shape?: 'line' | 'bar' | 'split' | 'splitLine'
17
- /** Render line-style swatches as dashed (only applies to 'line' / 'splitLine'). */
18
- dashed?: boolean
19
- /** bar swatch opacity — honored instead of a hardcoded value, so it cannot lie about the fill. */
20
- fillOpacity?: number
21
- /** line/splitLine swatch stroke opacity — parity with `fillOpacity` above, so a dimmed
22
- * companion line's swatch cannot lie about its own opacity either. */
23
- strokeOpacity?: number
24
- /** Drives `groups` rendering (series → hairline divider → overlay → reference). */
25
- role?: SeriesRole
26
- /** Companions folded under this entry via `parent` (`deriveLegend`) — rendered as compact,
27
- * subordinate sub-entries beside the parent's label instead of vanishing. */
28
- children?: LegendEntry[]
29
- /** Short qualifier rendered after the label in muted text — e.g. a flat-at-zero series that is
30
- * invisible in the plot. */
31
- note?: string
32
- }
33
-
34
- const LEGEND_ITEM_BASE: CSSProperties = {
35
- display: 'flex',
36
- alignItems: 'center',
37
- gap: 6,
38
- cursor: 'default',
39
- transition: 'opacity 0.15s',
40
- }
41
-
42
- // An interactive legend entry is a native <button> (keyboard-focusable, no jsx-a11y role hack) —
43
- // this strips the browser's default button chrome so it renders identically to the static entry.
44
- const LEGEND_ITEM_BUTTON: CSSProperties = {
45
- ...LEGEND_ITEM_BASE,
46
- appearance: 'none',
47
- background: 'none',
48
- border: 'none',
49
- padding: 0,
50
- margin: 0,
51
- font: 'inherit',
52
- color: 'inherit',
53
- textAlign: 'inherit',
54
- }
55
-
56
- /** Stable empty set — a fresh `new Set()` default would be a new identity on every render. */
57
- const NO_HIDDEN: ReadonlySet<string> = new Set()
58
-
59
- function wrapperStyle(placement: LegendPlacement, fontSize: number, dots: boolean): CSSProperties {
60
- const vertical = placement === 'left' || placement === 'right'
61
- const gap = dots ? DOTS_HIT_GAP : VX.legendGap
62
- return {
63
- display: 'flex',
64
- flexDirection: vertical ? 'column' : 'row',
65
- flexWrap: vertical ? 'nowrap' : 'wrap',
66
- alignItems: vertical ? 'flex-start' : 'center',
67
- justifyContent: 'flex-start',
68
- columnGap: gap,
69
- // Always the tight row gap (R2C-9): the wider dots COLUMN gap is a hit-overlap cap, not
70
- // breathing room between wrapped rows — a dots-mode header legend is 1 row by law
71
- // (`LEGEND_ROWS.header` in `chart-layout.ts`) anyway, so this only ever shows in the band.
72
- rowGap: LEGEND_ROW_GAP,
73
- // Caps each entry's `[data-basalt-hit]` overlay at the real inter-entry gap (styles.css).
74
- ...({ '--vx-hit-gap': `${gap}px` } as CSSProperties),
75
- // A dots-mode row has no text baseline to breathe around — the header-fold law (wave 8) is
76
- // the reason this row exists at all, so it gets the same tight treatment.
77
- padding: dots ? '4px 0 2px' : '8px 0 2px',
78
- fontSize,
79
- color: VX.muted,
80
- }
81
- }
82
-
83
- /** `columnLayout` = the legend itself stacks entries in a column (left/right placement), so the
84
- * divider between role groups must be a horizontal hairline rather than a vertical bar. */
85
- function LegendDivider({ columnLayout }: { columnLayout: boolean }) {
86
- return (
87
- <span
88
- aria-hidden
89
- style={
90
- columnLayout
91
- ? { width: '100%', height: 1, backgroundColor: alpha(VX.neutral, 0.25), margin: '2px 0' }
92
- : { width: 1, alignSelf: 'stretch', backgroundColor: alpha(VX.neutral, 0.25) }
93
- }
94
- />
95
- )
96
- }
97
-
98
- function LegendSwatch({ item, idPrefix }: { item: LegendEntry; idPrefix: string }) {
99
- if (item.shape === 'splitLine') {
100
- return (
101
- <svg width={20} height={14} style={{ flexShrink: 0 }}>
102
- <line
103
- x1={0}
104
- y1={7}
105
- x2={10}
106
- y2={7}
107
- stroke={item.color}
108
- strokeWidth={item.strokeWidth ?? 2.5}
109
- strokeOpacity={item.strokeOpacity ?? 1}
110
- strokeDasharray={item.dashed ? VX.dashArray : undefined}
111
- />
112
- <line
113
- x1={10}
114
- y1={7}
115
- x2={20}
116
- y2={7}
117
- stroke={item.secondColor}
118
- strokeWidth={item.strokeWidth ?? 2.5}
119
- strokeOpacity={item.strokeOpacity ?? 1}
120
- strokeDasharray={item.dashed ? VX.dashArray : undefined}
121
- />
122
- </svg>
123
- )
124
- }
125
-
126
- if (item.shape === 'split') {
127
- const topId = `split-top-${idPrefix}${item.key}`
128
- const botId = `split-bot-${idPrefix}${item.key}`
129
- return (
130
- <svg width={14} height={14} style={{ flexShrink: 0 }}>
131
- <defs>
132
- <clipPath id={topId}>
133
- <polygon points="0,0 14,0 0,14" />
134
- </clipPath>
135
- <clipPath id={botId}>
136
- <polygon points="14,0 14,14 0,14" />
137
- </clipPath>
138
- </defs>
139
- <rect width={14} height={14} rx={2} fill={item.color} clipPath={`url(#${topId})`} />
140
- <rect width={14} height={14} rx={2} fill={item.secondColor} clipPath={`url(#${botId})`} />
141
- </svg>
142
- )
143
- }
144
-
145
- if (item.shape === 'bar') {
146
- return (
147
- <span
148
- style={{
149
- width: 11,
150
- height: 11,
151
- borderRadius: 3, // theme-allow raw-surface — sub-scale legend-swatch corner, below the 4px radius floor
152
- backgroundColor: item.color,
153
- opacity: item.fillOpacity ?? 0.7,
154
- flexShrink: 0,
155
- }}
156
- />
157
- )
158
- }
159
-
160
- // Line series — a 16×3px radius-2 pill (docs/DESIGN-SPEC.md §5). A thick, round-capped stroke
161
- // reads as a filled pill when solid while still supporting the dashed variant.
162
- return (
163
- <svg width={16} height={6} style={{ flexShrink: 0 }}>
164
- <line
165
- x1={0}
166
- y1={3}
167
- x2={16}
168
- y2={3}
169
- stroke={item.color}
170
- strokeWidth={item.strokeWidth ?? 3}
171
- strokeOpacity={item.strokeOpacity ?? 1}
172
- strokeLinecap="round"
173
- strokeDasharray={item.dashed ? VX.dashArray : undefined}
174
- />
175
- </svg>
176
- )
177
- }
178
-
179
- // Same dimming as `LEGEND_CHILD_STYLE` below — the legend wrapper already sets the base text color
180
- // to `VX.muted` (`wrapperStyle`), so subordinate text is just that color at reduced opacity, never
181
- // a second color token.
182
- const LEGEND_NOTE_STYLE: CSSProperties = {
183
- opacity: 0.75,
184
- }
185
-
186
- const LEGEND_CHILD_STYLE: CSSProperties = {
187
- display: 'flex',
188
- alignItems: 'center',
189
- gap: 4,
190
- marginLeft: 4,
191
- fontSize: '0.85em',
192
- opacity: 0.75,
193
- }
194
-
195
- /**
196
- * The whole entry collapses to its color, in 'dots' mode (`docs/CHARTS-SPEC.md` §5: a short or
197
- * `compact`-container header has no room for a text label per entry) — a plain 8px circle
198
- * regardless of the series' own shape, since a two-tone `split`/`splitLine` swatch cannot express
199
- * two colors in one dot. The name survives via the button's own `aria-label`; sighted users get
200
- * color-coded identity only, same trade the `compact` container class already made for the y axis.
201
- */
202
- function LegendDot({ item }: { item: LegendEntry }) {
203
- return (
204
- <span
205
- style={{
206
- width: LEGEND_DOT_SIZE,
207
- height: LEGEND_DOT_SIZE,
208
- borderRadius: '50%', // theme-allow raw-surface — a circle shape, not a surface corner
209
- backgroundColor: item.color,
210
- flexShrink: 0,
211
- }}
212
- />
213
- )
214
- }
215
-
216
- /** Compact swatch for a folded child entry — smaller than {@link LegendSwatch}, line/bar only
217
- * (folded companions are simple line or bar series; `split`/`splitLine` never fold). */
218
- function LegendChildSwatch({ item }: { item: LegendEntry }) {
219
- if (item.shape === 'bar') {
220
- return (
221
- <span
222
- style={{
223
- width: 10,
224
- height: 10,
225
- borderRadius: 2, // theme-allow raw-surface — sub-scale legend-swatch corner, below the 4px radius floor
226
- backgroundColor: item.color,
227
- opacity: item.fillOpacity ?? 0.7,
228
- flexShrink: 0,
229
- }}
230
- />
231
- )
232
- }
233
- return (
234
- <svg width={14} height={10} style={{ flexShrink: 0 }}>
235
- <line
236
- x1={0}
237
- y1={5}
238
- x2={14}
239
- y2={5}
240
- stroke={item.color}
241
- strokeWidth={item.strokeWidth ?? 2}
242
- strokeOpacity={item.strokeOpacity ?? 1}
243
- strokeDasharray={item.dashed ? VX.dashArray : undefined}
244
- />
245
- </svg>
246
- )
247
- }
248
-
249
- /** A folded companion, rendered subordinate to (and inside) its parent's legend entry. */
250
- function LegendChild({ item }: { item: LegendEntry }) {
251
- return (
252
- <span style={LEGEND_CHILD_STYLE}>
253
- <LegendChildSwatch item={item} />
254
- <span>{item.label}</span>
255
- {/* No LEGEND_NOTE_STYLE here — LEGEND_CHILD_STYLE already dims the whole child block, and
256
- compounding the two opacities would push a folded companion's note near-invisible. */}
257
- {item.note ? <span>{item.note}</span> : null}
258
- </span>
259
- )
260
- }
261
-
262
- /**
263
- * Shared legend for all non-sparkline charts. `highlighted`/`onHighlight` are optional — omit for
264
- * static legends without hover interactivity. `chartId` namespaces `split` clipPath ids so two
265
- * legends on the same page never collide. `groups` renders series → hairline divider → overlay →
266
- * reference bands instead of one flat smear. `maxRows` caps the number of rendered ENTRIES and
267
- * rolls the remainder into an `All N` disclosure chip — it is an entry count, not a row count, in
268
- * spite of the name (`entries.slice(0, cap)` below is the whole of it). `ChartFrame` derives the
269
- * cap from the measured fit (`resolveChartLayout().legend`); a caller-stated value wins.
270
- *
271
- * `onToggle` makes an entry a real toggle: clicking it hides the series in the plot, the tooltip,
272
- * and the auto y-domain together (`ChartFrame` owns the `hidden` set — see `docs/CHARTS-SPEC.md`
273
- * §5). A hidden entry is announced via `aria-pressed`.
274
- *
275
- * **The rollup is a disclosure, not a label.** `All N` is a `<button>` carrying `aria-expanded`
276
- * that opens EVERY entry, toggles included, in a popover under the chip on a fine pointer and a
277
- * bottom sheet on a coarse one. Both are fixed-position and portalled, so opening one never grows
278
- * the legend band or moves the plot. Escape, an outside press, a scroll or a resize closes it, and
279
- * focus returns to the chip on every close.
280
- */
281
- export function ChartLegend({
282
- items,
283
- highlighted = null,
284
- onHighlight,
285
- hidden = NO_HIDDEN,
286
- onToggle,
287
- chartId = '',
288
- placement = 'bottom',
289
- groups = false,
290
- maxRows,
291
- mode = 'chips',
292
- className,
293
- style,
294
- }: BasaltProps & {
295
- items: LegendEntry[]
296
- highlighted?: string | null
297
- onHighlight?: (key: string | null) => void
298
- /** Keys currently toggled off. */
299
- hidden?: ReadonlySet<string>
300
- /** Present = entries are clickable toggles. */
301
- onToggle?: (key: string) => void
302
- chartId?: string
303
- placement?: LegendPlacement
304
- groups?: boolean
305
- maxRows?: number
306
- /**
307
- * `'dots'` collapses every VISIBLE entry to a plain color dot with no label (the name still
308
- * reaches assistive tech via `aria-label`) — `resolveChartLayout`'s header-slot legend forces
309
- * this for a short `ChartCard` (wave 11, `docs/CHARTS-SPEC.md` §5) so the legend band's height and
310
- * width both shrink before it eats plot space. The `All N` disclosure panel is unaffected: it
311
- * always shows the full swatch + label, `mode` only governs the inline row. Default `'chips'`
312
- * (today's swatch + label rendering) for every other caller.
313
- */
314
- mode?: 'dots' | 'chips'
315
- }) {
316
- const tier = useChartMetrics()
317
- const coarse = useCoarsePointer()
318
- const { open, panelId, openFrom, close, panel } = useLegendDisclosure(coarse)
319
-
320
- const handleEnter = (key: string) => onHighlight?.(key)
321
- const handleLeave = () => onHighlight?.(null)
322
-
323
- const idPrefix = chartId ? `${chartId}-` : ''
324
- const vertical = placement === 'left' || placement === 'right'
325
- const { entries, dividerAfter } = orderEntries(items, groups)
326
- const rolledUp = maxRows === undefined ? 0 : Math.max(entries.length - maxRows, 0)
327
- const visible = rolledUp > 0 ? entries.slice(0, maxRows) : entries
328
-
329
- // The disclosure panel is a second copy of the same entries: it gets its own id namespace and
330
- // no `data-legend-key`, so a page query for the band's entries never finds the panel's twins.
331
- const entryButton = (item: LegendEntry, inPanel = false): ReactNode => {
332
- // A dots-mode entry names nothing on its own face — its whole point is the color — so a tap
333
- // opens the same All-N sheet the overflow chip does, rather than silently hiding a series the
334
- // reader was trying to identify (R2C-8: "what is this?" used to toggle it off instead). Gated
335
- // on `mode` alone: with `legend.toggle: false` (no `onToggle`) a dots entry still has no OTHER
336
- // way to name itself, so it still needs the title + disclosure — `onToggle !== undefined` used
337
- // to suppress both just because toggling happened to be off.
338
- const isDotTrigger = !inPanel && mode === 'dots'
339
- return (
340
- <button
341
- key={item.key}
342
- type="button"
343
- data-basalt-hit
344
- {...(!inPanel && { 'data-legend-key': item.key })}
345
- // The note is the whole point for a series that is invisible in the plot, so it has to
346
- // reach a screen reader too — an explicit aria-label would otherwise replace it.
347
- aria-label={item.note ? `${item.label} — ${item.note}` : item.label}
348
- {...(isDotTrigger && { title: item.label, 'aria-haspopup': 'dialog' as const })}
349
- {...(isDotTrigger
350
- ? { 'aria-expanded': open, 'aria-controls': panelId }
351
- : onToggle !== undefined && { 'aria-pressed': !hidden.has(item.key) })}
352
- style={{
353
- ...LEGEND_ITEM_BUTTON,
354
- cursor: onToggle === undefined && !isDotTrigger ? 'default' : 'pointer',
355
- // Toggled-off wins over hover-dimming: a hidden series must read as hidden even while
356
- // it is the one being hovered.
357
- opacity: hidden.has(item.key)
358
- ? 0.35
359
- : highlighted === null || highlighted === item.key
360
- ? 1
361
- : 0.3,
362
- textDecoration: hidden.has(item.key) ? 'line-through' : 'none',
363
- }}
364
- {...(isDotTrigger
365
- ? { onClick: (e: MouseEvent<HTMLButtonElement>) => openFrom(e.currentTarget) }
366
- : onToggle !== undefined && { onClick: () => onToggle(item.key) })}
367
- onMouseEnter={() => handleEnter(item.key)}
368
- onMouseLeave={handleLeave}
369
- onFocus={() => handleEnter(item.key)}
370
- onBlur={handleLeave}
371
- >
372
- {!inPanel && mode === 'dots' ? (
373
- <LegendDot item={item} />
374
- ) : (
375
- <>
376
- <LegendSwatch item={item} idPrefix={inPanel ? `${idPrefix}disclosure-` : idPrefix} />
377
- <span>{item.label}</span>
378
- {item.note ? <span style={LEGEND_NOTE_STYLE}>{item.note}</span> : null}
379
- {item.children?.map((child) => (
380
- <LegendChild key={child.key} item={child} />
381
- ))}
382
- </>
383
- )}
384
- </button>
385
- )
386
- }
387
-
388
- const nodes: ReactNode[] = []
389
- visible.forEach((item, i) => {
390
- nodes.push(entryButton(item))
391
- if (dividerAfter.has(i))
392
- nodes.push(<LegendDivider key={`divider-${item.key}`} columnLayout={vertical} />)
393
- })
394
- if (rolledUp > 0) {
395
- nodes.push(
396
- <button
397
- key="legend-more"
398
- type="button"
399
- data-basalt-hit
400
- aria-expanded={open}
401
- aria-haspopup="dialog"
402
- aria-controls={panelId}
403
- onClick={(e) => (open ? close() : openFrom(e.currentTarget))}
404
- style={{ ...LEGEND_ITEM_BUTTON, cursor: 'pointer', textDecoration: 'underline' }}
405
- >
406
- {`All ${entries.length}`}
407
- </button>,
408
- )
409
- }
410
-
411
- return (
412
- <div
413
- {...(className !== undefined && { className })}
414
- style={{ ...wrapperStyle(placement, tier.legendFontSize, mode === 'dots'), ...style }}
415
- >
416
- {nodes}
417
- <LegendDisclosure {...panel} fontSize={tier.legendFontSize}>
418
- {entries.map((item) => entryButton(item, true))}
419
- </LegendDisclosure>
420
- </div>
421
- )
422
- }
@@ -1,243 +0,0 @@
1
- import type { CSSProperties, ReactNode } from 'react'
2
- import type { BasaltProps } from '../../common/props'
3
- import { VX } from '../../tokens'
4
-
5
- export type ChartCenterProps = BasaltProps & {
6
- /** A block body (a title-less pending `ChartCard`, a non-`ChartFrame` body) has no measured
7
- * plot width to reserve — `'100%'` fills its container instead of a pixel figure. */
8
- width: number | string
9
- height: number
10
- children: ReactNode
11
- }
12
-
13
- const centerStyle = (width: number | string, height: number): CSSProperties => ({
14
- width,
15
- height,
16
- display: 'flex',
17
- alignItems: 'center',
18
- justifyContent: 'center',
19
- })
20
-
21
- /**
22
- * Minimal layout primitive: centers `children` inside a `width` × `height` box. Exists because
23
- * `src/charts/**` cannot import Mantine's `Flex`/`Group`/`Center` (the Mantine-free boundary), so
24
- * there was previously nothing to reach for when a chart file needed to center something. Not a
25
- * general layout system — width, height, children, nothing else.
26
- */
27
- export function ChartCenter({
28
- width,
29
- height,
30
- className,
31
- style,
32
- children,
33
- }: ChartCenterProps): ReactNode {
34
- return (
35
- <div
36
- {...(className !== undefined && { className })}
37
- style={{ ...centerStyle(width, height), ...style }}
38
- >
39
- {children}
40
- </div>
41
- )
42
- }
43
-
44
- export type ChartPendingProps = BasaltProps & {
45
- width: number | string
46
- height: number
47
- /** Default `'Loading…'`. */
48
- label?: string
49
- }
50
-
51
- const labelStyle: CSSProperties = {
52
- color: VX.faint,
53
- fontSize: VX.text.sm,
54
- }
55
-
56
- /**
57
- * The placeholder for a chart whose data hasn't arrived yet — the third "nothing to draw" state
58
- * alongside measured-and-empty and measured-and-absent (a real gap in coverage). Collapsing an
59
- * in-flight query into either of those (the `data ?? []` idiom) densifies it into a fully-hatched
60
- * "not measured" window: a positive claim that the series WAS watched and carried nothing, when in
61
- * fact it was never asked. `ChartPending` makes "not asked yet" its own rendered state instead of
62
- * borrowing one of the other two.
63
- *
64
- * Reserves exactly the plot's footprint and draws NOTHING that could be mistaken for a
65
- * measurement — no axes, no gridlines, no hatching, no data marks — just a faint, static, centered
66
- * label. No animation: the package's motion doctrine bans looping/pulsing idle motion, so a static
67
- * reserved box is the correct answer here, not a compromise.
68
- *
69
- * The label is `role="status"` (polite), so a screen reader hears the chart resolve through all
70
- * three states rather than only its failure: `ChartError` was `role="alert"` and its two siblings
71
- * were silent, which announced the one outcome and swallowed the other two. Polite, not assertive —
72
- * a loading placeholder must not interrupt what the reader is already being told.
73
- */
74
- export function ChartPending({
75
- width,
76
- height,
77
- label = 'Loading…',
78
- className,
79
- style,
80
- }: ChartPendingProps): ReactNode {
81
- return (
82
- <ChartCenter
83
- width={width}
84
- height={height}
85
- {...(className !== undefined && { className })}
86
- {...(style !== undefined && { style })}
87
- >
88
- {/* `<output>` is the tag oxlint suggests, and it is the wrong one: it means "the result of
89
- a calculation", owns form semantics (`form`/`name`/`for`), and this box is precisely the
90
- state in which there IS no result yet. A polite live region on a plain span is the
91
- standard pattern. */}
92
- {/* oxlint-disable-next-line jsx-a11y/prefer-tag-over-role */}
93
- <span style={labelStyle} role="status">
94
- {label}
95
- </span>
96
- </ChartCenter>
97
- )
98
- }
99
-
100
- /**
101
- * The three "nothing to draw" states a chart can be in, in ONE prop — the shape a
102
- * `@tanstack/react-query` result (or anything derived from one) already has.
103
- *
104
- * It exists because the answer that already existed, `dashboard/QueryState`, renders Mantine and
105
- * therefore cannot be reached from `./charts` at all (the Mantine-free boundary). A chart consumer
106
- * without that import was left writing the four-way branch by hand, which is the exact bug
107
- * `QueryState` was built for: the shape suggests `empty` and a 500 renders "No data".
108
- *
109
- * Precedence is fixed and is the whole product: **pending → error → empty**. A refetch that is
110
- * both in flight and carrying a stale error is pending, not failed; a query that errored has no
111
- * standing to claim its result was empty.
112
- */
113
- export type ChartState = {
114
- /** The query has not resolved yet. Wins over every other flag. */
115
- pending?: boolean
116
- /** Truthy = the query failed. Any thrown value; an `Error`'s `message` is used as the label. */
117
- error?: unknown
118
- /**
119
- * The query resolved and there is genuinely nothing to plot. `true`, or the empty label
120
- * itself — a string is truthy AND the copy `ChartEmpty` paints, so a consumer with its own
121
- * "No data" wording never needs a ternary around the placeholder.
122
- */
123
- empty?: boolean | string
124
- }
125
-
126
- /** Which placeholder {@link ChartState} resolves to, or `null` to draw the chart. */
127
- export type ResolvedChartState = 'pending' | 'error' | 'empty' | null
128
-
129
- /**
130
- * Resolve {@link ChartState} (plus the older standalone `isPending` flag, which stays a supported
131
- * alias) into the ONE placeholder to render. Pure and exported so a hand-composed plot applies the
132
- * same precedence rather than re-deriving it.
133
- */
134
- export function resolveChartState(input: {
135
- state?: ChartState
136
- isPending?: boolean
137
- }): ResolvedChartState {
138
- const { state, isPending } = input
139
- if (isPending === true || state?.pending === true) return 'pending'
140
- if (state?.error !== undefined && state.error !== null && state.error !== false) return 'error'
141
- if (state?.empty) return 'empty'
142
- return null
143
- }
144
-
145
- export type ChartEmptyProps = BasaltProps & {
146
- width: number | string
147
- height: number
148
- /** Default `'No data'`. */
149
- label?: string
150
- /** Optional affordance under the label — a "clear filters" button, a range reset. Rendered as
151
- * given: this layer is Mantine-free, so the caller owns whatever it puts here. */
152
- action?: ReactNode
153
- }
154
-
155
- const stackStyle: CSSProperties = {
156
- display: 'flex',
157
- flexDirection: 'column',
158
- alignItems: 'center',
159
- gap: 8,
160
- }
161
-
162
- /**
163
- * Measured and EMPTY — the query resolved and there is nothing to plot. Distinct from
164
- * {@link ChartPending} ("not asked yet") and from a hatched absence ("watched, measured nothing"):
165
- * collapsing any of the three into another is the honesty bug this trio exists to prevent.
166
- *
167
- * Same footprint discipline as `ChartPending`: it reserves the plot rect and draws nothing that
168
- * could be read as a measurement — no axes, no gridlines, no marks. Announced `role="status"`
169
- * (polite) like `ChartPending`, so the resolution is heard; only `ChartError` is an `alert`.
170
- */
171
- export function ChartEmpty({
172
- width,
173
- height,
174
- label = 'No data',
175
- action,
176
- className,
177
- style,
178
- }: ChartEmptyProps): ReactNode {
179
- return (
180
- <ChartCenter
181
- width={width}
182
- height={height}
183
- {...(className !== undefined && { className })}
184
- {...(style !== undefined && { style })}
185
- >
186
- {/* Same waiver, same reason, as `ChartPending` — see the comment there. */}
187
- {/* oxlint-disable-next-line jsx-a11y/prefer-tag-over-role */}
188
- <span style={stackStyle} role="status">
189
- <span style={labelStyle}>{label}</span>
190
- {action}
191
- </span>
192
- </ChartCenter>
193
- )
194
- }
195
-
196
- export type ChartErrorProps = BasaltProps & {
197
- width: number | string
198
- height: number
199
- /** Overrides the text outright. Omitted, an `Error`'s own `message` is used, else
200
- * `'Could not load chart'` — a failure never borrows the empty state's copy. */
201
- label?: string
202
- /** The thrown value, used for the default label. */
203
- error?: unknown
204
- /** Optional affordance under the label — typically a retry. */
205
- action?: ReactNode
206
- }
207
-
208
- /** The message an unknown thrown value gets to state for itself. Kept local rather than importing
209
- * `./query`'s `toErrorMessage`: `./charts` resolves with no other basalt subpath installed, and a
210
- * chart placeholder needs one line, not the HTTP-status vocabulary that helper carries. */
211
- function errorLabel(error: unknown): string {
212
- if (error instanceof Error && error.message !== '') return error.message
213
- if (typeof error === 'string' && error !== '') return error
214
- return 'Could not load chart'
215
- }
216
-
217
- /**
218
- * Measured and FAILED. The branch a hand-written chart switch reliably gets wrong — a 500 rendered
219
- * as "No data" is a positive claim that the server answered and had nothing, which it did not.
220
- */
221
- export function ChartError({
222
- width,
223
- height,
224
- label,
225
- error,
226
- action,
227
- className,
228
- style,
229
- }: ChartErrorProps): ReactNode {
230
- return (
231
- <ChartCenter
232
- width={width}
233
- height={height}
234
- {...(className !== undefined && { className })}
235
- {...(style !== undefined && { style })}
236
- >
237
- <span style={stackStyle} role="alert">
238
- <span style={labelStyle}>{label ?? errorLabel(error)}</span>
239
- {action}
240
- </span>
241
- </ChartCenter>
242
- )
243
- }