basalt-ui 1.41.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (915) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +542 -518
  3. package/MIGRATING.md +964 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +18 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/config.js +6 -0
  175. package/dist/cli/doctor-upgrade.d.ts +43 -0
  176. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  177. package/dist/cli/doctor-upgrade.js +314 -0
  178. package/dist/cli/doctor.d.ts +14 -29
  179. package/dist/cli/doctor.d.ts.map +1 -1
  180. package/dist/cli/doctor.js +58 -9
  181. package/dist/cli/help.d.ts.map +1 -1
  182. package/dist/cli/help.js +2 -4
  183. package/dist/cli/index.d.ts +48 -172
  184. package/dist/cli/index.d.ts.map +1 -1
  185. package/dist/cli/index.js +39 -132
  186. package/dist/cli/init.d.ts.map +1 -1
  187. package/dist/cli/init.js +43 -37
  188. package/dist/cli/sync.d.ts +5 -21
  189. package/dist/cli/sync.d.ts.map +1 -1
  190. package/dist/cli/sync.js +4 -23
  191. package/dist/cli/tokens-css.d.ts +7 -28
  192. package/dist/cli/tokens-css.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  194. package/dist/commands/ShortcutsHelp.js +4 -5
  195. package/dist/commands/define-commands.d.ts +15 -31
  196. package/dist/commands/define-commands.d.ts.map +1 -1
  197. package/dist/commands/define-commands.js +1 -11
  198. package/dist/commands/define-overlays.d.ts +5 -19
  199. package/dist/commands/define-overlays.d.ts.map +1 -1
  200. package/dist/commands/define-overlays.js +3 -11
  201. package/dist/commands/index.d.ts +10 -40
  202. package/dist/commands/index.d.ts.map +1 -1
  203. package/dist/commands/index.js +9 -46
  204. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  205. package/dist/commands/notifications/bell.d.ts.map +1 -0
  206. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  207. package/dist/commands/notifications/center.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.js +2 -2
  209. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  210. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  211. package/dist/commands/notifications/notify.d.ts +44 -0
  212. package/dist/commands/notifications/notify.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.js +79 -0
  214. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  215. package/dist/commands/notifications/store.d.ts.map +1 -0
  216. package/dist/{notifications → commands/notifications}/store.js +4 -0
  217. package/dist/commands/projectors.d.ts +1 -131
  218. package/dist/commands/projectors.d.ts.map +1 -1
  219. package/dist/commands/projectors.js +2 -73
  220. package/dist/commands/shell-bridge.d.ts +3 -3
  221. package/dist/commands/shortcut-format.d.ts +5 -4
  222. package/dist/commands/shortcut-format.d.ts.map +1 -1
  223. package/dist/common/errors.d.ts +3 -3
  224. package/dist/common/use-measured-widths.d.ts.map +1 -1
  225. package/dist/common/use-measured-widths.js +5 -3
  226. package/dist/common/validate.d.ts +2 -2
  227. package/dist/content/article-layout.d.ts.map +1 -1
  228. package/dist/content/article-layout.js +3 -3
  229. package/dist/content/article-model.d.ts +1 -46
  230. package/dist/content/article-model.d.ts.map +1 -1
  231. package/dist/content/article-model.js +1 -29
  232. package/dist/content/index.d.ts +11 -41
  233. package/dist/content/index.d.ts.map +1 -1
  234. package/dist/content/index.js +3 -35
  235. package/dist/content/markdown.d.ts +1 -1
  236. package/dist/content/markdown.d.ts.map +1 -1
  237. package/dist/content/markdown.js +1 -1
  238. package/dist/content/mermaid.d.ts.map +1 -1
  239. package/dist/content/mermaid.js +7 -7
  240. package/dist/content/slug.d.ts +1 -8
  241. package/dist/content/slug.d.ts.map +1 -1
  242. package/dist/content/slug.js +1 -8
  243. package/dist/content/url-hardening.d.ts +2 -2
  244. package/dist/content/url-hardening.d.ts.map +1 -1
  245. package/dist/content/url-hardening.js +2 -0
  246. package/dist/controls/actions.d.ts +16 -1
  247. package/dist/controls/actions.d.ts.map +1 -1
  248. package/dist/controls/enum-filter.d.ts +1 -1
  249. package/dist/controls/enum-filter.d.ts.map +1 -1
  250. package/dist/controls/filter-context.d.ts.map +1 -1
  251. package/dist/controls/filter-context.js +3 -1
  252. package/dist/controls/filter-set.js +4 -6
  253. package/dist/controls/form-layout.d.ts +1 -1
  254. package/dist/controls/form-layout.d.ts.map +1 -1
  255. package/dist/controls/form-layout.js +1 -1
  256. package/dist/controls/glyphs.d.ts +0 -2
  257. package/dist/controls/glyphs.d.ts.map +1 -1
  258. package/dist/controls/glyphs.js +0 -7
  259. package/dist/controls/index.d.ts +12 -17
  260. package/dist/controls/index.d.ts.map +1 -1
  261. package/dist/controls/index.js +5 -39
  262. package/dist/controls/multi-select-filter.d.ts +4 -3
  263. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  264. package/dist/controls/number-filter.d.ts +4 -3
  265. package/dist/controls/number-filter.d.ts.map +1 -1
  266. package/dist/controls/number-filter.js +3 -1
  267. package/dist/controls/range-filter.d.ts +4 -3
  268. package/dist/controls/range-filter.d.ts.map +1 -1
  269. package/dist/controls/search-filter.d.ts +4 -3
  270. package/dist/controls/search-filter.d.ts.map +1 -1
  271. package/dist/controls/search-filter.js +19 -14
  272. package/dist/controls/select-filter.d.ts +4 -3
  273. package/dist/controls/select-filter.d.ts.map +1 -1
  274. package/dist/controls/sync-button.d.ts.map +1 -1
  275. package/dist/controls/sync-button.js +12 -15
  276. package/dist/controls/toggle-filter.d.ts +4 -3
  277. package/dist/controls/toggle-filter.d.ts.map +1 -1
  278. package/dist/controls/uncontrolled.d.ts +12 -0
  279. package/dist/controls/uncontrolled.d.ts.map +1 -0
  280. package/dist/controls/view-tabs.d.ts +2 -2
  281. package/dist/controls/view-tabs.d.ts.map +1 -1
  282. package/dist/controls-dates/index.d.ts +0 -1
  283. package/dist/controls-dates/index.d.ts.map +1 -1
  284. package/dist/dashboard/index.d.ts +7 -9
  285. package/dist/dashboard/index.d.ts.map +1 -1
  286. package/dist/dashboard/index.js +3 -23
  287. package/dist/dashboard/section.d.ts +4 -6
  288. package/dist/dashboard/section.d.ts.map +1 -1
  289. package/dist/dashboard/section.js +4 -10
  290. package/dist/dashboard/stat-card.d.ts +4 -4
  291. package/dist/dashboard/stat-card.d.ts.map +1 -1
  292. package/dist/dashboard/stat-card.js +3 -3
  293. package/dist/dashboard/widget-header.module.css +9 -7
  294. package/dist/dev-dock.d.ts.map +1 -1
  295. package/dist/dev-dock.js +6 -1
  296. package/dist/format/date.d.ts +0 -34
  297. package/dist/format/date.d.ts.map +1 -1
  298. package/dist/format/date.js +0 -54
  299. package/dist/format/index.d.ts +7 -22
  300. package/dist/format/index.d.ts.map +1 -1
  301. package/dist/format/index.js +2 -43
  302. package/dist/format/number.d.ts +3 -14
  303. package/dist/format/number.d.ts.map +1 -1
  304. package/dist/format/number.js +0 -13
  305. package/dist/format/shared.d.ts +2 -3
  306. package/dist/format/shared.d.ts.map +1 -1
  307. package/dist/forms/index.d.ts +0 -11
  308. package/dist/forms/index.d.ts.map +1 -1
  309. package/dist/forms/index.js +1 -14
  310. package/dist/guard/index.d.ts +6 -21
  311. package/dist/guard/index.d.ts.map +1 -1
  312. package/dist/guard/index.js +27 -115
  313. package/dist/guard/types.d.ts +7 -18
  314. package/dist/guard/types.d.ts.map +1 -1
  315. package/dist/index.d.ts +16 -48
  316. package/dist/index.d.ts.map +1 -1
  317. package/dist/index.js +21 -117
  318. package/dist/provider/create-router.d.ts +44 -0
  319. package/dist/provider/create-router.d.ts.map +1 -0
  320. package/dist/provider/create-router.js +62 -0
  321. package/dist/provider/hotkeys.d.ts +8 -0
  322. package/dist/provider/hotkeys.d.ts.map +1 -0
  323. package/dist/provider/hotkeys.js +50 -0
  324. package/dist/provider/index.d.ts +33 -110
  325. package/dist/provider/index.d.ts.map +1 -1
  326. package/dist/provider/index.js +182 -82
  327. package/dist/provider/lab-theme.d.ts.map +1 -1
  328. package/dist/provider/route-transition.d.ts +76 -0
  329. package/dist/provider/route-transition.d.ts.map +1 -0
  330. package/dist/provider/route-transition.js +98 -0
  331. package/dist/provider/spotlight-actions.d.ts +10 -0
  332. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  333. package/dist/provider/spotlight-actions.js +55 -0
  334. package/dist/provider/test-router.d.ts +6 -0
  335. package/dist/provider/test-router.d.ts.map +1 -0
  336. package/dist/provider/test-router.js +18 -0
  337. package/dist/query-client.d.ts +4 -20
  338. package/dist/query-client.d.ts.map +1 -1
  339. package/dist/query-client.js +2 -2
  340. package/dist/router-tanstack/index.d.ts +18 -64
  341. package/dist/router-tanstack/index.d.ts.map +1 -1
  342. package/dist/router-tanstack/index.js +2 -16
  343. package/dist/router-tanstack/nav.d.ts +12 -1
  344. package/dist/router-tanstack/nav.d.ts.map +1 -1
  345. package/dist/router-tanstack/nav.js +8 -1
  346. package/dist/router-tanstack/search-store.d.ts +1 -1
  347. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  348. package/dist/router-tanstack/use-nav.d.ts +8 -9
  349. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  350. package/dist/router-tanstack/use-nav.js +20 -1
  351. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  352. package/dist/shell/app-sidebar.js +1 -1
  353. package/dist/shell/index.d.ts +31 -10
  354. package/dist/shell/index.d.ts.map +1 -1
  355. package/dist/shell/index.js +14 -3
  356. package/dist/shell/page-aside.d.ts +2 -2
  357. package/dist/shell/page-aside.d.ts.map +1 -1
  358. package/dist/shell/page-aside.js +31 -12
  359. package/dist/shell/page-bar.d.ts +2 -2
  360. package/dist/shell/page-bar.d.ts.map +1 -1
  361. package/dist/shell/page-bar.js +1 -1
  362. package/dist/state.d.ts +10 -12
  363. package/dist/state.d.ts.map +1 -1
  364. package/dist/state.js +4 -6
  365. package/dist/styles.css +107 -7
  366. package/dist/surfaces.d.ts +28 -103
  367. package/dist/surfaces.d.ts.map +1 -1
  368. package/dist/surfaces.js +54 -143
  369. package/dist/{data → table}/data-table-state.d.ts +1 -1
  370. package/dist/table/data-table-state.d.ts.map +1 -0
  371. package/dist/{data → table}/data-table-state.js +4 -3
  372. package/dist/{data → table}/data-table.d.ts +28 -49
  373. package/dist/table/data-table.d.ts.map +1 -0
  374. package/dist/{data → table}/data-table.js +74 -60
  375. package/dist/table/index.d.ts +18 -0
  376. package/dist/table/index.d.ts.map +1 -0
  377. package/dist/{data/table.js → table/index.js} +1 -1
  378. package/dist/table/query-branch.d.ts.map +1 -0
  379. package/dist/table/table-features.d.ts +69 -0
  380. package/dist/table/table-features.d.ts.map +1 -0
  381. package/dist/table/table-features.js +49 -0
  382. package/dist/telemetry.d.ts +77 -0
  383. package/dist/telemetry.d.ts.map +1 -0
  384. package/dist/telemetry.js +33 -0
  385. package/dist/theme/index.d.ts +10 -21
  386. package/dist/theme/index.d.ts.map +1 -1
  387. package/dist/theme/index.js +3 -14
  388. package/dist/theme/theme-toggle.d.ts.map +1 -1
  389. package/dist/theme/theme-toggle.js +7 -33
  390. package/dist/theme/theme-toggle.module.css +30 -0
  391. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  392. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  393. package/dist/theme-lab/derive-controls.js +5 -3
  394. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  395. package/dist/theme-lab/derive-state.js +2 -1
  396. package/dist/tokens/core.d.ts +360 -0
  397. package/dist/tokens/core.d.ts.map +1 -0
  398. package/dist/tokens/core.js +708 -0
  399. package/dist/tokens/derive.d.ts +1 -1
  400. package/dist/tokens/derive.d.ts.map +1 -1
  401. package/dist/tokens/index.d.ts +5 -373
  402. package/dist/tokens/index.d.ts.map +1 -1
  403. package/dist/tokens/index.js +8 -700
  404. package/dist/tokens/palette.d.ts +2 -6
  405. package/dist/tokens/palette.d.ts.map +1 -1
  406. package/dist/tokens/palette.js +1 -4
  407. package/dist/vite.d.ts +4 -3
  408. package/dist/vite.d.ts.map +1 -1
  409. package/llms.txt +43 -85
  410. package/package.json +80 -173
  411. package/src/agent/ai-sdk-transport.ts +57 -37
  412. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  413. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  414. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  415. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  416. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  417. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  418. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  419. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  420. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  421. package/src/agent/error.ts +43 -0
  422. package/src/agent/history.ts +2 -107
  423. package/src/agent/id.ts +4 -5
  424. package/src/agent/index.ts +23 -112
  425. package/src/agent/outcome.ts +3 -56
  426. package/src/agent/part-list.tsx +3 -3
  427. package/src/agent/parts.ts +23 -22
  428. package/src/agent/run-committer.ts +64 -0
  429. package/src/agent/run-records.ts +147 -0
  430. package/src/agent/thread.ts +24 -231
  431. package/src/agent/transport.ts +6 -96
  432. package/src/agent/use-agent-thread-runs.ts +364 -199
  433. package/src/charts/BandStrip.tsx +276 -0
  434. package/src/charts/Bars.tsx +141 -0
  435. package/src/charts/CartesianChart.tsx +206 -0
  436. package/src/charts/ChartCard.tsx +178 -0
  437. package/src/charts/Donut.tsx +256 -0
  438. package/src/charts/DualPanel.tsx +326 -0
  439. package/src/charts/Heatmap.tsx +282 -0
  440. package/src/charts/Lines.tsx +151 -0
  441. package/src/charts/MirroredBars.tsx +303 -0
  442. package/src/charts/Sparkline.tsx +176 -0
  443. package/src/charts/StackedArea.tsx +80 -0
  444. package/src/charts/box.tsx +96 -0
  445. package/src/charts/card-context.ts +11 -0
  446. package/src/charts/chart-box.module.css +64 -0
  447. package/src/charts/chart-box.module.css.d.ts +12 -0
  448. package/src/charts/chart-card.module.css +25 -0
  449. package/src/charts/chart-card.module.css.d.ts +8 -0
  450. package/src/charts/chart-legend.module.css +38 -0
  451. package/src/charts/chart-legend.module.css.d.ts +10 -0
  452. package/src/charts/compile.ts +585 -0
  453. package/src/charts/cursor.ts +282 -0
  454. package/src/charts/curves.ts +111 -0
  455. package/src/charts/donut.module.css +54 -0
  456. package/src/charts/donut.module.css.d.ts +9 -0
  457. package/src/charts/host.tsx +60 -0
  458. package/src/charts/index.ts +41 -178
  459. package/src/charts/legend.tsx +204 -0
  460. package/src/charts/marks.ts +201 -0
  461. package/src/charts/panel.tsx +227 -0
  462. package/src/charts/scales.ts +237 -0
  463. package/src/charts/sizing.ts +47 -0
  464. package/src/charts/state.tsx +80 -0
  465. package/src/charts/theme.ts +65 -0
  466. package/src/charts/types.ts +242 -0
  467. package/src/cli/audit-allows.ts +8 -30
  468. package/src/cli/config.ts +26 -43
  469. package/src/cli/doctor-upgrade.ts +457 -0
  470. package/src/cli/doctor.ts +89 -72
  471. package/src/cli/help.ts +2 -4
  472. package/src/cli/index.ts +100 -384
  473. package/src/cli/init.ts +60 -51
  474. package/src/cli/sync.ts +13 -68
  475. package/src/cli/tokens-css.ts +7 -28
  476. package/src/commands/ShortcutsHelp.tsx +8 -9
  477. package/src/commands/define-commands.ts +16 -43
  478. package/src/commands/define-overlays.ts +12 -36
  479. package/src/commands/index.ts +11 -94
  480. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  481. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  482. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  483. package/src/commands/notifications/notify.tsx +158 -0
  484. package/src/{notifications → commands/notifications}/store.ts +10 -2
  485. package/src/commands/projectors.ts +5 -225
  486. package/src/commands/shell-bridge.ts +5 -5
  487. package/src/commands/shortcut-format.ts +5 -4
  488. package/src/common/errors.ts +3 -3
  489. package/src/common/use-measured-widths.ts +6 -3
  490. package/src/common/validate.ts +2 -2
  491. package/src/content/article-layout.tsx +37 -38
  492. package/src/content/article-model.ts +1 -84
  493. package/src/content/index.ts +12 -83
  494. package/src/content/markdown.tsx +4 -3
  495. package/src/content/mermaid.tsx +9 -7
  496. package/src/content/slug.ts +1 -16
  497. package/src/content/url-hardening.ts +8 -2
  498. package/src/controls/actions.tsx +24 -1
  499. package/src/controls/enum-filter.tsx +1 -1
  500. package/src/controls/filter-context.tsx +3 -1
  501. package/src/controls/filter-set.tsx +5 -7
  502. package/src/controls/form-layout.tsx +2 -2
  503. package/src/controls/glyphs.tsx +0 -10
  504. package/src/controls/index.ts +13 -64
  505. package/src/controls/multi-select-filter.tsx +5 -4
  506. package/src/controls/number-filter.tsx +8 -4
  507. package/src/controls/range-filter.tsx +5 -4
  508. package/src/controls/search-filter.tsx +25 -19
  509. package/src/controls/select-filter.tsx +5 -4
  510. package/src/controls/sync-button.tsx +18 -20
  511. package/src/controls/toggle-filter.tsx +5 -4
  512. package/src/controls/uncontrolled.ts +12 -0
  513. package/src/controls/view-tabs.tsx +3 -3
  514. package/src/controls-dates/date-range-picker.tsx +1 -1
  515. package/src/controls-dates/index.ts +0 -1
  516. package/src/dashboard/index.ts +7 -48
  517. package/src/dashboard/section.tsx +11 -40
  518. package/src/dashboard/stat-card.tsx +14 -16
  519. package/src/dashboard/widget-header.module.css +9 -7
  520. package/src/dev-dock.tsx +14 -27
  521. package/src/format/date.ts +2 -92
  522. package/src/format/index.ts +7 -53
  523. package/src/format/number.ts +3 -26
  524. package/src/format/shared.ts +2 -3
  525. package/src/forms/index.ts +0 -23
  526. package/src/guard/index.ts +36 -191
  527. package/src/guard/types.ts +6 -19
  528. package/src/index.ts +30 -282
  529. package/src/provider/create-router.tsx +138 -0
  530. package/src/provider/hotkeys.ts +70 -0
  531. package/src/provider/index.tsx +260 -230
  532. package/src/provider/lab-theme.ts +3 -2
  533. package/src/provider/route-transition.ts +199 -0
  534. package/src/provider/spotlight-actions.tsx +69 -0
  535. package/src/provider/test-router.tsx +25 -0
  536. package/src/query-client.ts +4 -22
  537. package/src/router-tanstack/index.ts +18 -112
  538. package/src/router-tanstack/nav.ts +28 -2
  539. package/src/router-tanstack/search-store.ts +9 -2
  540. package/src/router-tanstack/use-nav.ts +47 -13
  541. package/src/shell/app-mobile-nav.tsx +3 -2
  542. package/src/shell/app-sidebar.tsx +1 -1
  543. package/src/shell/aside-docking.ts +1 -1
  544. package/src/shell/index.tsx +61 -20
  545. package/src/shell/page-aside.tsx +47 -23
  546. package/src/shell/page-bar.tsx +3 -3
  547. package/src/shell/page-title.tsx +1 -1
  548. package/src/state.ts +11 -37
  549. package/src/styles.css +107 -7
  550. package/src/surfaces.ts +56 -151
  551. package/src/{data → table}/data-table-state.ts +5 -4
  552. package/src/{data → table}/data-table.tsx +170 -161
  553. package/src/table/index.ts +18 -0
  554. package/src/table/table-features.ts +102 -0
  555. package/src/telemetry.ts +110 -0
  556. package/src/theme/index.ts +22 -47
  557. package/src/theme/theme-toggle.module.css +30 -0
  558. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  559. package/src/theme/theme-toggle.tsx +15 -43
  560. package/src/theme-lab/derive-controls.tsx +5 -3
  561. package/src/theme-lab/derive-state.ts +2 -1
  562. package/src/tokens/core.ts +1163 -0
  563. package/src/tokens/derive.ts +1 -1
  564. package/src/tokens/index.ts +14 -1181
  565. package/src/tokens/palette.ts +3 -7
  566. package/src/vite.ts +3 -3
  567. package/agent/templates/query-client.ts.tpl +0 -26
  568. package/dist/agent/adapter.d.ts +0 -150
  569. package/dist/agent/adapter.d.ts.map +0 -1
  570. package/dist/agent/adapter.js +0 -482
  571. package/dist/agent/use-agent-stream.d.ts +0 -35
  572. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  573. package/dist/agent/use-agent-stream.js +0 -59
  574. package/dist/agent-chat/composer.d.ts.map +0 -1
  575. package/dist/agent-chat/index.d.ts +0 -31
  576. package/dist/agent-chat/index.d.ts.map +0 -1
  577. package/dist/agent-chat/index.js +0 -19
  578. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  579. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  580. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  581. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  582. package/dist/agent-chat/thread-detail-panel.js +0 -115
  583. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  587. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  588. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  589. package/dist/agent-chat/thread-workspace.js +0 -153
  590. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  591. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  592. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  593. package/dist/charts/cursor/resolve.d.ts +0 -75
  594. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  595. package/dist/charts/cursor/resolve.js +0 -91
  596. package/dist/charts/cursor/scope.d.ts +0 -20
  597. package/dist/charts/cursor/scope.d.ts.map +0 -1
  598. package/dist/charts/cursor/scope.js +0 -20
  599. package/dist/charts/cursor/store.d.ts +0 -35
  600. package/dist/charts/cursor/store.d.ts.map +0 -1
  601. package/dist/charts/cursor/store.js +0 -25
  602. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  603. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  604. package/dist/charts/cursor/touch-pin.js +0 -79
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  606. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  607. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  608. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  609. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  610. package/dist/charts/hooks/use-hysteresis.js +0 -12
  611. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  612. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  613. package/dist/charts/hooks/useBandPlot.js +0 -178
  614. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  615. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  616. package/dist/charts/hooks/useChartCursor.js +0 -200
  617. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  618. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  619. package/dist/charts/hooks/useChartSize.js +0 -8
  620. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  621. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  622. package/dist/charts/kinds/BandStrip.js +0 -241
  623. package/dist/charts/kinds/Bars.d.ts +0 -141
  624. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  625. package/dist/charts/kinds/Bars.js +0 -343
  626. package/dist/charts/kinds/Donut.d.ts +0 -77
  627. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  628. package/dist/charts/kinds/Donut.js +0 -245
  629. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  630. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  631. package/dist/charts/kinds/DualPanel.js +0 -471
  632. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  633. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  634. package/dist/charts/kinds/Heatmap.js +0 -243
  635. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  636. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  637. package/dist/charts/kinds/MirroredBars.js +0 -292
  638. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  639. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  640. package/dist/charts/kinds/MultiLine.js +0 -176
  641. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  642. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  643. package/dist/charts/kinds/StackedArea.js +0 -135
  644. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  645. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  646. package/dist/charts/kinds/ZonedLine.js +0 -155
  647. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  648. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  649. package/dist/charts/kinds/band-chrome.js +0 -71
  650. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  651. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  652. package/dist/charts/kinds/donut-layout.js +0 -52
  653. package/dist/charts/layout/auto-margin.d.ts +0 -122
  654. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  655. package/dist/charts/layout/auto-margin.js +0 -81
  656. package/dist/charts/layout/end-labels.d.ts +0 -64
  657. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  658. package/dist/charts/layout/end-labels.js +0 -76
  659. package/dist/charts/layout/log-ticks.d.ts +0 -27
  660. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  661. package/dist/charts/layout/log-ticks.js +0 -42
  662. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  663. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  664. package/dist/charts/primitives/AreaGradient.js +0 -13
  665. package/dist/charts/primitives/Axes.d.ts +0 -83
  666. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  667. package/dist/charts/primitives/Axes.js +0 -168
  668. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  669. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  670. package/dist/charts/primitives/CartesianChart.js +0 -549
  671. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  672. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  673. package/dist/charts/primitives/ChartCard.js +0 -143
  674. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  675. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  676. package/dist/charts/primitives/ChartFrame.js +0 -241
  677. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  678. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  679. package/dist/charts/primitives/ChartLegend.js +0 -292
  680. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  681. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  682. package/dist/charts/primitives/ChartPending.js +0 -117
  683. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  684. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  685. package/dist/charts/primitives/ChartTooltip.js +0 -197
  686. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  687. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  688. package/dist/charts/primitives/Crosshair.js +0 -23
  689. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  690. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  691. package/dist/charts/primitives/HatchPattern.js +0 -31
  692. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  693. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  694. package/dist/charts/primitives/HoverOverlay.js +0 -72
  695. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  696. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  697. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  698. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  699. package/dist/charts/primitives/XZoneRects.js +0 -65
  700. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  701. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  702. package/dist/charts/primitives/ZoneRects.js +0 -30
  703. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  704. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  705. package/dist/charts/primitives/chart-card-context.js +0 -18
  706. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  707. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  708. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  709. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  710. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  711. package/dist/charts/primitives/chart-layout.js +0 -175
  712. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  713. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  714. package/dist/charts/primitives/chart-tier.js +0 -44
  715. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  716. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  717. package/dist/charts/primitives/legend-disclosure.js +0 -153
  718. package/dist/charts/series.d.ts +0 -189
  719. package/dist/charts/series.d.ts.map +0 -1
  720. package/dist/charts/series.js +0 -84
  721. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  722. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  723. package/dist/charts/sparklines/BarSparkline.js +0 -53
  724. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  725. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  726. package/dist/charts/sparklines/LineSparkline.js +0 -51
  727. package/dist/charts/sparklines/index.d.ts +0 -3
  728. package/dist/charts/sparklines/index.d.ts.map +0 -1
  729. package/dist/charts/sparklines/index.js +0 -6
  730. package/dist/charts/utils/domain.d.ts +0 -35
  731. package/dist/charts/utils/domain.d.ts.map +0 -1
  732. package/dist/charts/utils/domain.js +0 -12
  733. package/dist/charts/utils/format.d.ts +0 -8
  734. package/dist/charts/utils/format.d.ts.map +0 -1
  735. package/dist/charts/utils/format.js +0 -20
  736. package/dist/charts/utils/measure-text.d.ts +0 -25
  737. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  738. package/dist/charts/utils/measure-text.js +0 -64
  739. package/dist/charts/utils/ticks.d.ts +0 -103
  740. package/dist/charts/utils/ticks.d.ts.map +0 -1
  741. package/dist/charts/utils/ticks.js +0 -92
  742. package/dist/commands/overlays-mount.d.ts +0 -122
  743. package/dist/commands/overlays-mount.d.ts.map +0 -1
  744. package/dist/commands/overlays-mount.js +0 -125
  745. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  746. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  747. package/dist/commands/useCommandHotkeys.js +0 -45
  748. package/dist/content/article-actions.d.ts +0 -39
  749. package/dist/content/article-actions.d.ts.map +0 -1
  750. package/dist/content/article-actions.js +0 -28
  751. package/dist/content/article-card.d.ts +0 -58
  752. package/dist/content/article-card.d.ts.map +0 -1
  753. package/dist/content/article-card.js +0 -79
  754. package/dist/content/article-card.module.css +0 -111
  755. package/dist/content/mdx.d.ts +0 -20
  756. package/dist/content/mdx.d.ts.map +0 -1
  757. package/dist/content/mdx.js +0 -64
  758. package/dist/controls/compare-filter.d.ts +0 -42
  759. package/dist/controls/compare-filter.d.ts.map +0 -1
  760. package/dist/controls/compare-filter.js +0 -38
  761. package/dist/controls/slider-control.d.ts +0 -36
  762. package/dist/controls/slider-control.d.ts.map +0 -1
  763. package/dist/controls/slider-control.js +0 -64
  764. package/dist/dashboard/widget-grid.d.ts +0 -27
  765. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  766. package/dist/dashboard/widget-grid.js +0 -40
  767. package/dist/dashboard/widget-grid.module.css +0 -69
  768. package/dist/data/data-table-state.d.ts.map +0 -1
  769. package/dist/data/data-table.d.ts.map +0 -1
  770. package/dist/data/query-branch.d.ts.map +0 -1
  771. package/dist/data/table.d.ts +0 -24
  772. package/dist/data/table.d.ts.map +0 -1
  773. package/dist/data/virtual-list.d.ts +0 -133
  774. package/dist/data/virtual-list.d.ts.map +0 -1
  775. package/dist/data/virtual-list.js +0 -157
  776. package/dist/data/virtual.d.ts +0 -21
  777. package/dist/data/virtual.d.ts.map +0 -1
  778. package/dist/data/virtual.js +0 -4
  779. package/dist/forms/FormErrorSummary.d.ts +0 -30
  780. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  781. package/dist/forms/FormErrorSummary.js +0 -30
  782. package/dist/forms/use-field-array.d.ts +0 -60
  783. package/dist/forms/use-field-array.d.ts.map +0 -1
  784. package/dist/forms/use-field-array.js +0 -20
  785. package/dist/forms/use-form-draft.d.ts +0 -76
  786. package/dist/forms/use-form-draft.d.ts.map +0 -1
  787. package/dist/forms/use-form-draft.js +0 -92
  788. package/dist/forms/use-form-submit.d.ts +0 -88
  789. package/dist/forms/use-form-submit.d.ts.map +0 -1
  790. package/dist/forms/use-form-submit.js +0 -63
  791. package/dist/notifications/bell.d.ts.map +0 -1
  792. package/dist/notifications/center.d.ts.map +0 -1
  793. package/dist/notifications/define-notifications.d.ts.map +0 -1
  794. package/dist/notifications/index.d.ts +0 -40
  795. package/dist/notifications/index.d.ts.map +0 -1
  796. package/dist/notifications/index.js +0 -54
  797. package/dist/notifications/mount-guard.d.ts +0 -8
  798. package/dist/notifications/mount-guard.d.ts.map +0 -1
  799. package/dist/notifications/mount-guard.js +0 -18
  800. package/dist/notifications/notify.d.ts +0 -149
  801. package/dist/notifications/notify.d.ts.map +0 -1
  802. package/dist/notifications/notify.js +0 -171
  803. package/dist/notifications/store.d.ts.map +0 -1
  804. package/dist/provider/connectivity-indicator.d.ts +0 -13
  805. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  806. package/dist/provider/connectivity-indicator.js +0 -205
  807. package/dist/provider/connectivity-provider.d.ts +0 -7
  808. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  809. package/dist/provider/connectivity-provider.js +0 -128
  810. package/dist/provider/connectivity-types.d.ts +0 -36
  811. package/dist/provider/connectivity-types.d.ts.map +0 -1
  812. package/dist/provider/use-connectivity.d.ts +0 -3
  813. package/dist/provider/use-connectivity.d.ts.map +0 -1
  814. package/dist/provider/use-connectivity.js +0 -14
  815. package/dist/query-devtools.d.ts +0 -21
  816. package/dist/query-devtools.d.ts.map +0 -1
  817. package/dist/query-devtools.js +0 -13
  818. package/src/agent/adapter.ts +0 -945
  819. package/src/agent/use-agent-stream.ts +0 -154
  820. package/src/agent-chat/index.ts +0 -54
  821. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  822. package/src/agent-chat/thread-workspace.tsx +0 -279
  823. package/src/charts/cursor/resolve.ts +0 -198
  824. package/src/charts/cursor/scope.tsx +0 -35
  825. package/src/charts/cursor/store.ts +0 -58
  826. package/src/charts/cursor/touch-pin.ts +0 -138
  827. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  828. package/src/charts/hooks/use-hysteresis.ts +0 -26
  829. package/src/charts/hooks/useBandPlot.ts +0 -383
  830. package/src/charts/hooks/useChartCursor.ts +0 -367
  831. package/src/charts/hooks/useChartSize.ts +0 -35
  832. package/src/charts/kinds/BandStrip.tsx +0 -449
  833. package/src/charts/kinds/Bars.tsx +0 -589
  834. package/src/charts/kinds/Donut.tsx +0 -368
  835. package/src/charts/kinds/DualPanel.tsx +0 -712
  836. package/src/charts/kinds/Heatmap.tsx +0 -396
  837. package/src/charts/kinds/MirroredBars.tsx +0 -469
  838. package/src/charts/kinds/MultiLine.tsx +0 -322
  839. package/src/charts/kinds/StackedArea.tsx +0 -267
  840. package/src/charts/kinds/ZonedLine.tsx +0 -301
  841. package/src/charts/kinds/band-chrome.tsx +0 -91
  842. package/src/charts/kinds/donut-layout.ts +0 -82
  843. package/src/charts/layout/auto-margin.ts +0 -242
  844. package/src/charts/layout/end-labels.ts +0 -135
  845. package/src/charts/layout/log-ticks.ts +0 -90
  846. package/src/charts/primitives/AreaGradient.tsx +0 -26
  847. package/src/charts/primitives/Axes.tsx +0 -271
  848. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  849. package/src/charts/primitives/ChartCard.tsx +0 -280
  850. package/src/charts/primitives/ChartFrame.tsx +0 -493
  851. package/src/charts/primitives/ChartLegend.tsx +0 -422
  852. package/src/charts/primitives/ChartPending.tsx +0 -243
  853. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  854. package/src/charts/primitives/Crosshair.tsx +0 -43
  855. package/src/charts/primitives/HatchPattern.tsx +0 -55
  856. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  857. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  858. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  859. package/src/charts/primitives/XZoneRects.tsx +0 -132
  860. package/src/charts/primitives/ZoneRects.tsx +0 -67
  861. package/src/charts/primitives/chart-card-context.ts +0 -46
  862. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  863. package/src/charts/primitives/chart-layout.ts +0 -318
  864. package/src/charts/primitives/chart-tier.tsx +0 -76
  865. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  866. package/src/charts/series.ts +0 -276
  867. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  868. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  869. package/src/charts/sparklines/index.ts +0 -2
  870. package/src/charts/theme.tsx +0 -53
  871. package/src/charts/utils/domain.ts +0 -41
  872. package/src/charts/utils/format.ts +0 -19
  873. package/src/charts/utils/measure-text.ts +0 -109
  874. package/src/charts/utils/ticks.ts +0 -239
  875. package/src/commands/overlays-mount.tsx +0 -333
  876. package/src/commands/useCommandHotkeys.ts +0 -114
  877. package/src/content/article-actions.ts +0 -72
  878. package/src/content/article-card.module.css +0 -111
  879. package/src/content/article-card.tsx +0 -174
  880. package/src/content/mdx.tsx +0 -127
  881. package/src/controls/compare-filter.tsx +0 -81
  882. package/src/controls/slider-control.tsx +0 -159
  883. package/src/dashboard/widget-grid.module.css +0 -69
  884. package/src/dashboard/widget-grid.tsx +0 -146
  885. package/src/data/table.ts +0 -39
  886. package/src/data/virtual-list.tsx +0 -356
  887. package/src/data/virtual.ts +0 -26
  888. package/src/forms/FormErrorSummary.tsx +0 -71
  889. package/src/forms/use-field-array.ts +0 -94
  890. package/src/forms/use-form-draft.ts +0 -262
  891. package/src/forms/use-form-submit.ts +0 -199
  892. package/src/notifications/index.ts +0 -88
  893. package/src/notifications/mount-guard.ts +0 -38
  894. package/src/notifications/notify.tsx +0 -379
  895. package/src/provider/connectivity-indicator.tsx +0 -267
  896. package/src/provider/connectivity-provider.tsx +0 -189
  897. package/src/provider/connectivity-types.ts +0 -42
  898. package/src/provider/use-connectivity.ts +0 -26
  899. package/src/query-devtools.tsx +0 -40
  900. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  902. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  903. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  904. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  906. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  907. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  908. /package/dist/{data → table}/data-table.module.css +0 -0
  909. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.d.ts +0 -0
  911. /package/dist/{data → table}/query-branch.js +0 -0
  912. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  913. /package/src/{data → table}/data-table.module.css +0 -0
  914. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  915. /package/src/{data → table}/query-branch.ts +0 -0
package/MIGRATING.md CHANGED
@@ -66,26 +66,953 @@ There is one row per SURFACE, not per export, and a surface earns a row once any
66
66
  shipped lefthook preset both changed in 1.30.0 with no row that owned them — which is how a
67
67
  consumer read this index, found nothing, and diffed a KPI row that had silently gone 4-up → 2-up.
68
68
 
69
- | Surface | 1.27.0 | 1.28.0 | 1.29.0 | 1.30.0 | 1.30.1 | 1.30.2 | 1.31.0 | 1.32.0 | 1.32.1 | 1.33.0 | 1.34.0 | 1.34.1 | 1.35.0 | 1.36.0 | 1.36.1 | 1.37.0 | 1.37.1 | 1.38.0 | 1.38.1 | 1.39.0 | 1.40.0 | 1.40.1 | 1.40.2 | 1.40.3 | 1.41.0 | Unreleased |
70
- | ----------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------- | ------ | ------ | -------------------------------------------------------------------------------------------- | ------ | ------ | ------ | ------ | ------ | ----------------------------------------------- | ------ | ------ | ------ | ------ | ------------------------------------------------------------ | ---------- | --- |
71
- | **tokens** (`./tokens`) | — | `--vx-divider` → `rgba()` on both schemes (§ Shell) | `--vx-space-touch-target` added (§ Additions) | eight spacing numbers (§ Chrome) | — | — | `--vx-hit` replaces the touch vars; `SIZE_CLASSES` (§ 1.31.0) | — | `SIZE_CLASSES`/`CONTAINER_CLASSES` actually exported (§ Fixes) | `CONTAINER_GRID_BREAKPOINTS`; `raw-breakpoint` trusts it (§ 1.33.0) | `CONTAINER_KEYS` (§ 1.34.0) | — | — | — | — | — | — | — | | `appShellInset` 20 → 16 (§ 1.38.1) | — | — | — | — | — | — | — |
72
- | **charts** (`./charts`) | — | phone tier, `curve`, formatters, `state`, log axis (§ preamble) | `ChartState.empty: string`, `AxisBottomNumeric` (§ Additions) | responsive `height`, `legend.maxRows` (§ Charts) | `height` reaches the kinds; `maxRows` beats the `fill` fit (§ Charts) | — | container-class tier + `height` keys (§ 1.31.0) | — | `ResponsiveChartHeight` `sm` → key (§ Container recipes) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
73
- | **shell** (`.`) | — | scrollport, region seams, **the brand left the sidebar** (§§ scrollport, brand, Shell) | `PageTitle`, `BasaltDevDock`, `useBreakpoint` (§ Additions) | More popover, aside pill, the responsive gutter, `useBasaltSpacing` (§ Chrome) | — | — | `theme.breakpoints` derived, `useSizeClass`, `data-basalt-host`, `useBreakpoint` on notice (§ 1.31.0) | `useBreakpoint` removal → 1.33.0; `useSizeClass` is shell-only (§ 1.32.0) | shell-less `shell/` gutter, `AppShell` breakpoints, `useSizeClass` for overlays (§§ Shell-less, `useSizeClass`) | — | `useBreakpoint` removed (§ 1.34.0) | — | — | `useCoarsePointer()` (§ `useCoarsePointer()`) | — | — | — | — | | content gutter 16, block 8 from `sm` (§ 1.38.1) | — | — | — | — | — | — | — |
74
- | **controls** (`./controls`) | `NumberFilter`, `field.number` (§ Controls) | sheet renders panel rows; `PanelRow`, `SliderControl` (§ `basalt-ui/controls`) | — | — | — | — | — | — | — | `NumberFilter clearable`; `createSearchStore` `resets` (§ State and controls) | — | — | — | `FormSection`/`FormRow`/`FormGroup`/`FormActions` move here (§ The form layout moves) | — | — | — | — | — | — | — | — | — | — | — | — |
75
- | **forms** (`./forms`) | — | `field` → `inputProps`, **`inputProps` drops `key`**, the layout tier (§ `inputProps`) | `field` DELETED — and the `--fix` recipe no longer works (§ Consolidation) | — | — | — | — | — | `FormGroup` row no longer stretches (§ Fixes) | — | — | — | — | the layout + `useForm`/`schemaResolver` deprecated, removed 1.37.0 (§ The form layout moves) | — | — | — | — | — | — | — | — | — | — | — | — |
76
- | **data** (`./data/table`) | — | root is a `<div>`, row selection, `getItemKey` required (§ `basalt-ui/data`) | `./data` + `./query` + `./connectivity` dropped (§ Consolidation) | — | — | — | — | — | `renderCard` documented (§ `renderCard`) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
77
- | **dashboard** (`.`) | `StatCard`: `unit`, `breakdown`, delta format (§ `StatCard`) | `StatGroup`, `WidgetGrid`, query-aware `StatCard` — additive | — | **the column law keys on the CONTAINER; `cols={4}` is 2-up at `sm`** (§ Dashboard) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
78
- | **toolchain** (`./configs/*`) | — | — | the shipped lefthook preset's `check-theme` BROKE — the CLI resolver stopped ascending (§ CLI) | the preset's default bin, and the `root:` recipe (§ Toolchain) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
79
- | **CLI** (`basalt-ui`) | — | — | **resolver stops relocating; `doctor` loses 6 of 10 checks** (§ CLI) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | the managed block moves `CLAUDE.md` → `AGENTS.md` (§ 1.41.0) | — |
80
- | **guards** | five rules → `error` (§ Guards) | six new ids at `warn` (§ preamble) | `query-dual-import` retired in 1.29.1 (§ Guards) | four rules → `error` (§ Guards) | — | — | — | `raw-breakpoint`: the container-grid answer, `error` at 1.33.0 (§ 1.32.0) | `FormRow`/`FormGroup` homes in both lanes; `basalt-main` dropped (§ Fixes) | C1 + breakpoint pairs → `error`; `unknown-vx-token` `warn` (§ Guards) | — | — | — | `unknown-vx-token` → `error`; the token factories throw (§ Guards) | — | — | — | — | — | — | — | — | — | — | — | — |
69
+ | Surface | 1.27.0 | 1.28.0 | 1.29.0 | 1.30.0 | 1.30.1 | 1.30.2 | 1.31.0 | 1.32.0 | 1.32.1 | 1.33.0 | 1.34.0 | 1.34.1 | 1.35.0 | 1.36.0 | 1.36.1 | 1.37.0 | 1.37.1 | 1.38.0 | 1.38.1 | 1.39.0 | 1.40.0 | 1.40.1 | 1.40.2 | 1.40.3 | 1.41.0 | 2.0.0 | 2.0.1 | Unreleased |
70
+ | ----------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------- | ------ | ------ | -------------------------------------------------------------------------------------------- | ------ | ------ | ------ | ------ | ------ | ----------------------------------------------- | ------ | ------ | ------ | ------ | ------------------------------------------------------------ | ---------- | --- | --- | --- |
71
+ | **tokens** (`./tokens`) | — | `--vx-divider` → `rgba()` on both schemes (§ Shell) | `--vx-space-touch-target` added (§ Additions) | eight spacing numbers (§ Chrome) | — | — | `--vx-hit` replaces the touch vars; `SIZE_CLASSES` (§ 1.31.0) | — | `SIZE_CLASSES`/`CONTAINER_CLASSES` actually exported (§ Fixes) | `CONTAINER_GRID_BREAKPOINTS`; `raw-breakpoint` trusts it (§ 1.33.0) | `CONTAINER_KEYS` (§ 1.34.0) | — | — | — | — | — | — | — | | `appShellInset` 20 → 16 (§ 1.38.1) | — | — | — | — | — | — | — | — | — |
72
+ | **charts** (`./charts`) | — | phone tier, `curve`, formatters, `state`, log axis (§ preamble) | `ChartState.empty: string`, `AxisBottomNumeric` (§ Additions) | responsive `height`, `legend.maxRows` (§ Charts) | `height` reaches the kinds; `maxRows` beats the `fill` fit (§ Charts) | — | container-class tier + `height` keys (§ 1.31.0) | — | `ResponsiveChartHeight` `sm` → key (§ Container recipes) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
73
+ | **shell** (`.`) | — | scrollport, region seams, **the brand left the sidebar** (§§ scrollport, brand, Shell) | `PageTitle`, `BasaltDevDock`, `useBreakpoint` (§ Additions) | More popover, aside pill, the responsive gutter, `useBasaltSpacing` (§ Chrome) | — | — | `theme.breakpoints` derived, `useSizeClass`, `data-basalt-host`, `useBreakpoint` on notice (§ 1.31.0) | `useBreakpoint` removal → 1.33.0; `useSizeClass` is shell-only (§ 1.32.0) | shell-less `shell/` gutter, `AppShell` breakpoints, `useSizeClass` for overlays (§§ Shell-less, `useSizeClass`) | — | `useBreakpoint` removed (§ 1.34.0) | — | — | `useCoarsePointer()` (§ `useCoarsePointer()`) | — | — | — | — | | content gutter 16, block 8 from `sm` (§ 1.38.1) | — | — | — | — | — | — | — | — | — |
74
+ | **controls** (`./controls`) | `NumberFilter`, `field.number` (§ Controls) | sheet renders panel rows; `PanelRow`, `SliderControl` (§ `basalt-ui/controls`) | — | — | — | — | — | — | — | `NumberFilter clearable`; `createSearchStore` `resets` (§ State and controls) | — | — | — | `FormSection`/`FormRow`/`FormGroup`/`FormActions` move here (§ The form layout moves) | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
75
+ | **forms** (`./forms`) | — | `field` → `inputProps`, **`inputProps` drops `key`**, the layout tier (§ `inputProps`) | `field` DELETED — and the `--fix` recipe no longer works (§ Consolidation) | — | — | — | — | — | `FormGroup` row no longer stretches (§ Fixes) | — | — | — | — | the layout + `useForm`/`schemaResolver` deprecated, removed 1.37.0 (§ The form layout moves) | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
76
+ | **data** (`./data/table`) | — | root is a `<div>`, row selection, `getItemKey` required (§ `basalt-ui/data`) | `./data` + `./query` + `./connectivity` dropped (§ Consolidation) | — | — | — | — | — | `renderCard` documented (§ `renderCard`) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
77
+ | **dashboard** (`.`) | `StatCard`: `unit`, `breakdown`, delta format (§ `StatCard`) | `StatGroup`, `WidgetGrid`, query-aware `StatCard` — additive | — | **the column law keys on the CONTAINER; `cols={4}` is 2-up at `sm`** (§ Dashboard) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
78
+ | **toolchain** (`./configs/*`) | — | — | the shipped lefthook preset's `check-theme` BROKE — the CLI resolver stopped ascending (§ CLI) | the preset's default bin, and the `root:` recipe (§ Toolchain) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
79
+ | **CLI** (`basalt-ui`) | — | — | **resolver stops relocating; `doctor` loses 6 of 10 checks** (§ CLI) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | the managed block moves `CLAUDE.md` → `AGENTS.md` (§ 1.41.0) | — | — | — |
80
+ | **guards** | five rules → `error` (§ Guards) | six new ids at `warn` (§ preamble) | `query-dual-import` retired in 1.29.1 (§ Guards) | four rules → `error` (§ Guards) | — | — | — | `raw-breakpoint`: the container-grid answer, `error` at 1.33.0 (§ 1.32.0) | `FormRow`/`FormGroup` homes in both lanes; `basalt-main` dropped (§ Fixes) | C1 + breakpoint pairs → `error`; `unknown-vx-token` `warn` (§ Guards) | — | — | — | `unknown-vx-token` → `error`; the token factories throw (§ Guards) | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
81
81
 
82
82
  ---
83
83
 
84
+ ## 2.0.0
85
+
86
+ Contract: `docs/V2-SPEC.md`. Every removal and move is one row, grouped by area. 1.x is frozen at v1.41.0; 2.0.0 is the only major.
87
+
88
+ ### Upgrading from 1.x
89
+
90
+ 1. Go to `1.41.0` first and clear its deprecations: 2.0 retires the lifecycle, so nothing deprecated survives.
91
+ 2. Install `basalt-ui@2` and the now-required peers (§ Subpaths, peers and gates); delete only the
92
+ `@mantine/{core,notifications,spotlight}/styles.layer.css` imports, because `basalt-ui/styles.css`
93
+ `@import`s exactly those three. Keep every extension package's layer CSS (`@mantine/dates`,
94
+ `@mantine/schedule`, …) imported AFTER `basalt-ui/styles.css`.
95
+ 3. Replace the hand-built root (providers, `QueryClient`, router) with `BasaltProvider` +
96
+ `createBasaltRouter` (§ Provider and wiring).
97
+ 4. Rewrite imports by area, using the tables below. A `move` changes only the specifier.
98
+ 5. Run `bunx basalt-ui sync`, then `bunx basalt-ui doctor`, and take the lint findings one at a time.
99
+
100
+ ### AI, content, commands, state and table (`w3/delete-agent-data`)
101
+
102
+ Subpath folds: `basalt-ui/agent-chat` → `basalt-ui/agent`, `basalt-ui/notifications` → `basalt-ui/commands`, `basalt-ui/data/table` → `basalt-ui/table`. `basalt-ui/data/virtual` is removed. A `move` changes only the import specifier; the name is unchanged.
103
+
104
+ | Old import | New | Why |
105
+ | --------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
106
+ | `basalt-ui/commands`: `defineCommand` | deleted | no consumer outside the playground |
107
+ | `basalt-ui/commands`: `runCommand` | deleted | no consumer outside the playground |
108
+ | `basalt-ui/commands`: `CommandMap` | deleted | type removed (`'idle' \| 'submitted' \| 'streaming' \| 'done' \| 'error'`); derive with `NonNullable<ComponentProps<typeof ThreadFeedRow>['liveStatus']>` |
109
+ | `basalt-ui/commands`: `CommandId` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
110
+ | `basalt-ui/commands`: `CommandRunContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
111
+ | `basalt-ui/commands`: `defineOverlay` | deleted | no consumer outside the playground |
112
+ | `basalt-ui/commands`: `registerModalsProvider` | deleted | provider-internal (§ 2) |
113
+ | `basalt-ui/commands`: `Overlay` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
114
+ | `basalt-ui/commands`: `OverlayMap` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
115
+ | `basalt-ui/commands`: `OverlayKey` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
116
+ | `basalt-ui/commands`: `ConfirmOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
117
+ | `basalt-ui/commands`: `ConfirmDeleteOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
118
+ | `basalt-ui/commands`: `toSpotlightActions` | deleted | provider-internal |
119
+ | `basalt-ui/commands`: `toRouteActions` | deleted | no consumer outside the playground |
120
+ | `basalt-ui/commands`: `toShortcutList` | deleted | no consumer outside the playground |
121
+ | `basalt-ui/commands`: `toHotkeyBindings` | deleted | provider-internal (§ 2); § 8 replaces the mirrored hotkey types |
122
+ | `basalt-ui/commands`: `RouteActionItem` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
123
+ | `basalt-ui/commands`: `RouteActionSection` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
124
+ | `basalt-ui/commands`: `ToRouteActionsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
125
+ | `basalt-ui/commands`: `ShortcutEntry` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
126
+ | `basalt-ui/commands`: `HotkeyBinding` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
127
+ | `basalt-ui/commands`: `ColorScheme` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
128
+ | `basalt-ui/commands`: `ColorSchemeSetter` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
129
+ | `basalt-ui/commands`: `SidebarToggle` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
130
+ | `basalt-ui/commands`: `parseShortcut` | deleted | no consumer outside the playground |
131
+ | `basalt-ui/commands`: `detectMac` | deleted | no consumer outside the playground |
132
+ | `basalt-ui/commands`: `formatShortcutDisplay` | deleted | no consumer outside the playground |
133
+ | `basalt-ui/commands`: `useCommandHotkeys` | deleted | provider binds the `defineCommands` registry, Hotkeys 0.13 loaded lazily (§ 2, § 8) |
134
+ | `basalt-ui/commands`: `ShortcutsHelpProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
135
+ | `basalt-ui/commands`: `BasaltOverlays` | deleted | `BasaltProvider` mounts modals, spotlight, hotkeys, notifications (§ 2) |
136
+ | `basalt-ui/commands`: `BasaltOverlaysProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
137
+ | `basalt-ui/commands`: `basaltSpotlight` | deleted | no consumer outside the playground |
138
+ | `basalt-ui/commands`: `openSpotlight` | deleted | no consumer outside the playground |
139
+ | `basalt-ui/commands`: `closeSpotlight` | deleted | no consumer outside the playground |
140
+ | `basalt-ui/notifications`: `notify` | deleted | no consumer outside the playground |
141
+ | `basalt-ui/notifications`: `notifySuccess` | deleted | no consumer outside the playground |
142
+ | `basalt-ui/notifications`: `notifyError` | deleted | no consumer outside the playground |
143
+ | `basalt-ui/notifications`: `notifyWarning` | deleted | no consumer outside the playground |
144
+ | `basalt-ui/notifications`: `notifyInfo` | deleted | no consumer outside the playground |
145
+ | `basalt-ui/notifications`: `notifyPromise` | deleted | no consumer outside the playground |
146
+ | `basalt-ui/notifications`: `notifyUndo` | deleted | no consumer outside the playground |
147
+ | `basalt-ui/notifications`: `notifyUndoable` | deleted | no consumer outside the playground |
148
+ | `basalt-ui/notifications`: `NotifyOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
149
+ | `basalt-ui/notifications`: `NotifyPromiseMessages` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
150
+ | `basalt-ui/notifications`: `NotifyUndoOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
151
+ | `basalt-ui/notifications`: `NotifyUndoHandle` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
152
+ | `basalt-ui/notifications`: `defineNotification` | deleted | no consumer outside the playground |
153
+ | `basalt-ui/notifications`: `defineNotifications` | `basalt-ui/commands` | ./notifications folds into ./commands |
154
+ | `basalt-ui/notifications`: `emit` | `basalt-ui/commands` | ./notifications folds into ./commands |
155
+ | `basalt-ui/notifications`: `resolveAction` | deleted | no consumer outside the playground |
156
+ | `basalt-ui/notifications`: `NotificationAction` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
157
+ | `basalt-ui/notifications`: `NotificationKind` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
158
+ | `basalt-ui/notifications`: `NotificationSpec` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
159
+ | `basalt-ui/notifications`: `NotificationSpecMap` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
160
+ | `basalt-ui/notifications`: `NotificationIntent` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
161
+ | `basalt-ui/notifications`: `add` | deleted | no consumer outside the playground |
162
+ | `basalt-ui/notifications`: `markRead` | deleted | no consumer outside the playground |
163
+ | `basalt-ui/notifications`: `markAllRead` | deleted | no consumer outside the playground |
164
+ | `basalt-ui/notifications`: `dismiss` | deleted | no consumer outside the playground |
165
+ | `basalt-ui/notifications`: `dismissAll` | deleted | no consumer outside the playground |
166
+ | `basalt-ui/notifications`: `remove` | deleted | no consumer outside the playground |
167
+ | `basalt-ui/notifications`: `clear` | deleted | no consumer outside the playground |
168
+ | `basalt-ui/notifications`: `needsAttention` | deleted | no consumer outside the playground |
169
+ | `basalt-ui/notifications`: `useNotificationHistory` | deleted | no consumer outside the playground |
170
+ | `basalt-ui/notifications`: `NotificationActionRef` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
171
+ | `basalt-ui/notifications`: `NotificationHistoryItem` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
172
+ | `basalt-ui/notifications`: `NotificationHistoryState` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
173
+ | `basalt-ui/notifications`: `UseNotificationHistoryReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
174
+ | `basalt-ui/notifications`: `NotificationBell` | `basalt-ui/commands` | ./notifications folds into ./commands |
175
+ | `basalt-ui/notifications`: `NotificationBellProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
176
+ | `basalt-ui/notifications`: `NotificationCenter` | deleted | no consumer outside the playground |
177
+ | `basalt-ui/notifications`: `NotificationCenterProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
178
+ | `basalt-ui/data/table`: `BasaltDataTable` | `basalt-ui/table` | ./data/table folds into ./table |
179
+ | `basalt-ui/data/table`: `BasaltDataTableProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
180
+ | `basalt-ui/data/table`: `BasaltDataTableSlot` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
181
+ | `basalt-ui/data/table`: `DataTableAlign` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
182
+ | `basalt-ui/data/table`: `DataTableColumnId` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
183
+ | `basalt-ui/data/table`: `DataTableColumnPinning` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
184
+ | `basalt-ui/data/table`: `DataTableFacet` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
185
+ | `basalt-ui/data/table`: `DataTableFacetOption` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
186
+ | `basalt-ui/data/table`: `createColumnHelper` | `basalt-ui/table` | becomes basalt-owned: `createColumnHelper<Row>()` over Table v9 (§ 8) |
187
+ | `basalt-ui/data/virtual`: `BasaltVirtualList` | deleted | no consumer; Virtual stays an internal dep of the transcript/table |
188
+ | `basalt-ui/data/virtual`: `BasaltVirtualListHandle` | deleted | no consumer outside the playground |
189
+ | `basalt-ui/data/virtual`: `BasaltVirtualListProps` | deleted | no consumer outside the playground |
190
+ | `basalt-ui/data/virtual`: `BasaltVirtualListSlot` | deleted | no consumer outside the playground |
191
+ | `basalt-ui/agent`: `AgentPartDraft` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
192
+ | `basalt-ui/agent`: `Drafted` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
193
+ | `basalt-ui/agent`: `StartPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
194
+ | `basalt-ui/agent`: `TextPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
195
+ | `basalt-ui/agent`: `ReasoningPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
196
+ | `basalt-ui/agent`: `ToolCallState` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
197
+ | `basalt-ui/agent`: `SourcePart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
198
+ | `basalt-ui/agent`: `ErrorPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
199
+ | `basalt-ui/agent`: `isStartPart` | deleted | no consumer outside the playground |
200
+ | `basalt-ui/agent`: `isToolCallSettled` | deleted | no consumer outside the playground |
201
+ | `basalt-ui/agent`: `TERMINAL_TOOL_STATES` | deleted | no consumer outside the playground |
202
+ | `basalt-ui/agent`: `mergePart` | deleted | no consumer outside the playground |
203
+ | `basalt-ui/agent`: `withPartIds` | deleted | no consumer outside the playground |
204
+ | `basalt-ui/agent`: `coalesceParts` | deleted | no consumer outside the playground |
205
+ | `basalt-ui/agent`: `definePartRenderers` | deleted | no consumer outside the playground |
206
+ | `basalt-ui/agent`: `narrowAgentPart` | deleted | no consumer outside the playground |
207
+ | `basalt-ui/agent`: `ConsumerPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
208
+ | `basalt-ui/agent`: `PartRenderContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
209
+ | `basalt-ui/agent`: `AgentTransport` | kept | still exported from `basalt-ui/agent` (W9: the DX trial needed it to type a mock or custom transport) |
210
+ | `basalt-ui/agent`: `ResumableAgentTransport` | kept | still exported from `basalt-ui/agent` (W9: the DX trial needed it to type a mock or custom transport) |
211
+ | `basalt-ui/agent`: `edenTransport` | deleted | no consumer; `aiSdkTransport` is the one transport (§ 6) |
212
+ | `basalt-ui/agent`: `isResumable` | deleted | no consumer outside the playground |
213
+ | `basalt-ui/agent`: `AiSdkTransport` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
214
+ | `basalt-ui/agent`: `AiSdkTransportOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
215
+ | `basalt-ui/agent`: `useAgentStream` | deleted | no consumer; `useAgentThreadRuns` is the one runner |
216
+ | `basalt-ui/agent`: `StreamStatus` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
217
+ | `basalt-ui/agent`: `UseAgentStreamReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
218
+ | `basalt-ui/agent`: `UseAgentThreadRunsArgs` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
219
+ | `basalt-ui/agent`: `UseAgentThreadRunsReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
220
+ | `basalt-ui/agent`: `PartList` | deleted | no consumer outside the playground |
221
+ | `basalt-ui/agent`: `PartListProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
222
+ | `basalt-ui/agent`: `AgentPartRenderers` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
223
+ | `basalt-ui/agent`: `TextPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
224
+ | `basalt-ui/agent`: `ReasoningPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
225
+ | `basalt-ui/agent`: `ToolCallPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
226
+ | `basalt-ui/agent`: `SourcePartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
227
+ | `basalt-ui/agent`: `ErrorPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
228
+ | `basalt-ui/agent`: `BasaltStickToBottom` | deleted | no consumer outside the playground |
229
+ | `basalt-ui/agent`: `BasaltStickToBottomProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
230
+ | `basalt-ui/agent`: `createChatHistoryStore` | deleted | no consumer outside the playground |
231
+ | `basalt-ui/agent`: `ChatHistoryStore` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
232
+ | `basalt-ui/agent`: `ChatHistoryStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
233
+ | `basalt-ui/agent`: `createThreadsStore` | deleted | no consumer outside the playground |
234
+ | `basalt-ui/agent`: `ThreadsStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
235
+ | `basalt-ui/agent`: `heuristicOutcome` | deleted | no consumer outside the playground |
236
+ | `basalt-ui/agent`: `createAdapterThreadsStore` | deleted | no consumer outside the playground |
237
+ | `basalt-ui/agent`: `threadsStoreAdapterContract` | deleted | no consumer outside the playground |
238
+ | `basalt-ui/agent`: `AdapterThreadsStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
239
+ | `basalt-ui/agent`: `ThreadsStoreAdapter` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
240
+ | `basalt-ui/agent`: `ThreadsStoreAdapterContractCase` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
241
+ | `basalt-ui/agent-chat`: `ThreadWorkspace` | deleted | no consumer |
242
+ | `basalt-ui/agent-chat`: `ThreadWorkspaceProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
243
+ | `basalt-ui/agent-chat`: `ThreadFeed` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
244
+ | `basalt-ui/agent-chat`: `ThreadFeedProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
245
+ | `basalt-ui/agent-chat`: `ThreadFeedRow` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
246
+ | `basalt-ui/agent-chat`: `ThreadFeedRowProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
247
+ | `basalt-ui/agent-chat`: `MessageAffordances` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
248
+ | `basalt-ui/agent-chat`: `RowHeightProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
249
+ | `basalt-ui/agent-chat`: `VirtualizeOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
250
+ | `basalt-ui/agent-chat`: `VirtualizeProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
251
+ | `basalt-ui/agent-chat`: `ThreadOutcomeCard` | deleted | no consumer outside the playground |
252
+ | `basalt-ui/agent-chat`: `ThreadOutcomeCardProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
253
+ | `basalt-ui/agent-chat`: `ThreadDetailPanel` | deleted | no consumer outside the playground |
254
+ | `basalt-ui/agent-chat`: `ThreadDetailPanelProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
255
+ | `basalt-ui/agent-chat`: `Composer` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
256
+ | `basalt-ui/agent-chat`: `ComposerAttachment` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
257
+ | `basalt-ui/agent-chat`: `ComposerHandle` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
258
+ | `basalt-ui/agent-chat`: `ComposerProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
259
+ | `basalt-ui/agent-chat`: `ComposerSubmit` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
260
+ | `basalt-ui/agent-chat`: `threadPartRenderers` | deleted | no consumer outside the playground |
261
+ | `basalt-ui/agent-chat`: `ThreadTranscript` | deleted | no consumer; argo renders turns through `ThreadFeedRow` |
262
+ | `basalt-ui/agent-chat`: `ThreadTranscriptProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
263
+ | `basalt-ui/agent-chat`: `ToolChip` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
264
+ | `basalt-ui/agent-chat`: `ToolChipProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
265
+ | `basalt-ui/content`: `ProseDensity` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
266
+ | `basalt-ui/content`: `ProseProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
267
+ | `basalt-ui/content`: `CodeBlock` | deleted | rendered by `Markdown` fences; no direct consumer |
268
+ | `basalt-ui/content`: `CodeBlockProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
269
+ | `basalt-ui/content`: `CalloutProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
270
+ | `basalt-ui/content`: `TableOfContentsProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
271
+ | `basalt-ui/content`: `ReadingProgress` | deleted | no consumer outside the playground |
272
+ | `basalt-ui/content`: `ReadingProgressProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
273
+ | `basalt-ui/content`: `headingSlug` | deleted | no consumer outside the playground |
274
+ | `basalt-ui/content`: `readingTime` | deleted | no consumer outside the playground |
275
+ | `basalt-ui/content`: `SlugTracker` | deleted | no consumer outside the playground |
276
+ | `basalt-ui/content`: `ReadingTime` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
277
+ | `basalt-ui/content`: `HeadingAnchor` | deleted | no consumer outside the playground |
278
+ | `basalt-ui/content`: `HeadingAnchorProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
279
+ | `basalt-ui/content`: `FenceRenderContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
280
+ | `basalt-ui/content`: `MarkdownContentTrust` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
281
+ | `basalt-ui/content`: `BASALT_SANITIZE_SCHEMA` | deleted | no consumer outside the playground |
282
+ | `basalt-ui/content`: `SanitizePropertyDefinition` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
283
+ | `basalt-ui/content`: `SanitizeSchema` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
284
+ | `basalt-ui/content`: `MermaidDiagram` | deleted | rendered by `Markdown` fences; no direct consumer |
285
+ | `basalt-ui/content`: `MermaidDiagramProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
286
+ | `basalt-ui/content`: `blockSplit` | deleted | no consumer outside the playground |
287
+ | `basalt-ui/content`: `createMdxComponents` | deleted | no consumer outside the playground |
288
+ | `basalt-ui/content`: `mdxComponents` | deleted | no consumer outside the playground |
289
+ | `basalt-ui/content`: `CreateMdxComponentsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
290
+ | `basalt-ui/content`: `ArticleLayoutProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
291
+ | `basalt-ui/content`: `ArticleNavTarget` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
292
+ | `basalt-ui/content`: `ArticleCard` | deleted | no consumer outside the playground |
293
+ | `basalt-ui/content`: `ArticleGrid` | deleted | no consumer outside the playground |
294
+ | `basalt-ui/content`: `ArticleCardProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
295
+ | `basalt-ui/content`: `ArticleGridProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
296
+ | `basalt-ui/content`: `filterArticles` | deleted | no consumer outside the playground |
297
+ | `basalt-ui/content`: `formatArticleDate` | deleted | no consumer outside the playground |
298
+ | `basalt-ui/content`: `sortArticles` | deleted | no consumer outside the playground |
299
+ | `basalt-ui/content`: `Article` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
300
+ | `basalt-ui/content`: `ArticleFilterQuery` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
301
+ | `basalt-ui/content`: `ArticleOrder` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
302
+ | `basalt-ui/content`: `toArticleActions` | deleted | no consumer outside the playground |
303
+ | `basalt-ui/content`: `ToArticleActionsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
304
+ | `basalt-ui/content`: `FilterSet` | deleted | duplicate of `./controls`; one import path per symbol |
305
+ | `basalt-ui/content`: `MultiSelectFilter` | deleted | duplicate of `./controls`; one import path per symbol |
306
+ | `basalt-ui/content`: `ViewTabs` | deleted | duplicate of `./controls`; one import path per symbol |
307
+ | `basalt-ui/content`: `FilterSetProps` | deleted | duplicate of `./controls`; one import path per symbol |
308
+ | `basalt-ui/content`: `MultiSelectFilterProps` | deleted | duplicate of `./controls`; one import path per symbol |
309
+ | `basalt-ui/content`: `ViewTabsOption` | deleted | duplicate of `./controls`; one import path per symbol |
310
+ | `basalt-ui/content`: `ViewTabsProps` | deleted | duplicate of `./controls`; one import path per symbol |
311
+ | `basalt-ui/content`: `GuideDrawer` | deleted | no consumer outside the playground |
312
+ | `basalt-ui/content`: `GuideDrawerProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
313
+ | `basalt-ui/content`: `GuideLinkProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
314
+ | `basalt-ui/state`: `PersistedStateOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
315
+ | `basalt-ui/state`: `readPersistedValue` | deleted | no consumer outside the playground |
316
+ | `basalt-ui/state`: `LocalStore` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
317
+ | `basalt-ui/state`: `FieldLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
318
+ | `basalt-ui/state`: `ResolvedLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
319
+ | `basalt-ui/state`: `ResolveLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
320
+ | `basalt-ui/state`: `RangeValue` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
321
+ | `basalt-ui/state`: `RangeParams` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
322
+ | `basalt-ui/state`: `RangePresets` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
323
+ | `basalt-ui/state`: `RangeWindows` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
324
+ | `basalt-ui/state`: `FieldFallback` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
325
+ | `basalt-ui/state`: `FieldSetOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
326
+ | `basalt-ui/state`: `MultiField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
327
+ | `basalt-ui/state`: `RangeField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
328
+ | `basalt-ui/state`: `NumberField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
329
+ | `basalt-ui/state`: `BooleanField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
330
+ | `basalt-ui/state`: `StringField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
331
+ | `basalt-ui/state`: `AnyField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
332
+ | `basalt-ui/state`: `FieldValue` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
333
+ | `basalt-ui/state`: `FieldOption` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
334
+ | `basalt-ui/state`: `SearchValues` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
335
+ | `basalt-ui/state`: `StoredValues` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
336
+
337
+ ### Lint (`w9/lint`)
338
+
339
+ Every `basalt/*` rule is `error` in 2.0.0 (the major is the channel). Edit your `.oxlintrc.json`
340
+ accordingly; an unknown `basalt/<id>` is a hard oxlint config error.
341
+
342
+ | Rule | Change | Consumer action |
343
+ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
344
+ | `basalt/provider-above-router` | removed | delete it from `.oxlintrc.json`; `BasaltProvider` mounts `RouterProvider`, so the inverted tree cannot be written |
345
+ | `basalt/page-bar-budget` | removed | delete it; `PageBar.actions` and `Section.actions` are tuple types, so a sixth/second-primary/fourth action is a tsc error. A second `PageBar` in one tree and two filled buttons in one slot are no longer linted |
346
+ | `basalt/agent-resume-guard` | removed | delete it; `resumeStream` exists only on `useChat`/`Chat`, both banned by `agent-no-raw-usechat` |
347
+ | `basalt/deprecated-export` | removed | delete it; 2.0.0 ships no deprecations, every removal is a row in this file. Returns with the first 2.x deprecation |
348
+ | `basalt/shadow-basalt-export` | `warn` → `error` | rename the fork to compose the basalt export, or `theme-allow shadow-basalt-export — <why>` |
349
+ | `basalt/agent-no-raw-usechat` | widened to the `Chat` class | import `Chat` from neither `@ai-sdk/react` nor `ai/react`; use `useAgentStream` / `useAgentThreadRuns` |
350
+ | `basalt/no-dev-helper` | new, repo-local only (not in the preset) | none |
351
+ | `basalt/no-import-meta-env` | repo-local only, now enabled | none |
352
+ | `configs/oxlint.json` (generic preset) | the six `react/*` compiler rules (`globals`, `immutability`, `incompatible-library`, `preserve-manual-memoization`, `refs`, `set-state-in-effect`), `no-constant-binary-expression` and `typescript/no-explicit-any` are `error` | fix the findings; to turn one down for a path add `{ "overrides": [{ "files": ["src/legacy/**"], "rules": { "react/refs": "off" } }] }` to your own `.oxlintrc.json`, or write `// oxlint-disable-next-line react/refs -- <why>` |
353
+
354
+ ### Table v9 (`w6/table-v9`)
355
+
356
+ `BasaltDataTable` runs on `@tanstack/react-table` **9.2.8, exact** (peer and dev pin; 9.3.x waits on the `table-parity` / `table-v9.test` gate).
357
+
358
+ - Move your own `@tanstack/react-table` to `9.2.8` exact. Raw v8 helpers and `ColumnDef` no longer type-check against `columns`.
359
+ - `createColumnHelper` stays `import { createColumnHelper } from 'basalt-ui/table'` with the same one-generic call, `createColumnHelper<Row>()`. Do not import the helper from `@tanstack/react-table`: its v9 form needs `<TFeatures, TData>`.
360
+ - The table's registry is closed: sort functions `alphanumeric`, `text`, `datetime`, `basic`; filter function `includesString` (global search and facets). A column naming another built-in `sortFn` / `filterFn` falls back to the default with a dev-only warning.
361
+ - The `@tanstack/react-virtual` peer floor moves to `>=3.14.0 <4`.
362
+ - `initialColumnPinning` is logical: `{ left, right }` → `{ start, end }`.
363
+ - `meta.align` / `numeral` / `priority` are typed by the table's own `columnMeta` slot; the global `declare module '@tanstack/react-table'` augmentation is gone, so it no longer leaks into your own TanStack types.
364
+ - The global search now filters 250 ms after the last keystroke; `onGlobalFilterChange` fires at the same moment.
365
+
366
+ ### Transitions (`w7/transitions`)
367
+
368
+ Contract: `docs/V2-SPEC.md` § 5. React 19.3 is required (`ViewTransition`, `Activity`).
369
+
370
+ - Route changes animate through the router: `createBasaltRouter` sets `defaultViewTransition` with a direction from your `defineNav` order, only where `:active-view-transition-type()` is supported (Chrome 125 / Safari 18.2 / Firefox 147); elsewhere navigation does not animate. A `<ViewTransition>` around `<Outlet>` never fired (the router commits through `useSyncExternalStore`) and is now an error, `basalt/route-view-transition`: delete it. `<ViewTransition>` stays for in-page changes (`docs/waves/evidence/w10/transitions.md`).
371
+ - `PageAside` folds inside `startTransition` with a `<ViewTransition>` on the region, and the folded body is hidden under `<Activity>` instead of unmounted. Scroll, input values and `useState` survive a fold. A hidden `Activity` runs the body's effect cleanups and re-runs the effects on expand, so a subscribing or streaming child resumes from its own state; whatever an effect set up (timer, socket) is torn down while folded.
372
+ - `ThemeToggle` animates with a CSS transition, not `motion`. `motion` is no longer reached from the package root; it is required only by `basalt-ui/agent`.
373
+ - `styles.css` sets `animation: none` on `::view-transition-group(*)`, `-old(*)` and `-new(*)` under `prefers-reduced-motion: reduce`, and the base theme sets Mantine `respectReducedMotion: true`. A consumer theme that sets `respectReducedMotion: false` opts Mantine's own transitions back out.
374
+
375
+ ### Content streaming (`w8/content-streaming`)
376
+
377
+ `Markdown` no longer drops a blocked or unfinished image silently: when the `src` is refused (an off-origin image under `contentTrust="untrusted"`, or remend's `streamdown:incomplete-image` placeholder mid-stream) it renders the `alt` text as a plain `<span>` instead of an empty `<span aria-label>`. No `<img>` and no URL reaches the DOM either way. No action needed; a test that asserted the empty span must assert the alt text.
378
+
379
+ ### Agent runtime (`w8/agent-runtime`)
380
+
381
+ Behavior changes to symbols that stay; no import changes. Contract: V2-SPEC § 6, § 7.
382
+
383
+ | Symbol | Change |
384
+ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
385
+ | `ThreadRunState.status` | `'submitted' \| 'streaming' \| 'error'`. A fresh turn is `'submitted'` until its first text, reasoning or tool part, so `status === 'streaming'` no longer holds from the send. `NonNullable<ComponentProps<typeof ThreadFeedRow>['liveStatus']>` gains `'submitted'`, and the chat rows treat `'submitted'` and `'streaming'` as live, so `liveStatus={runs.get(id)?.status}` stays correct. For your own liveness check use `run?.status === 'submitted' \|\| run?.status === 'streaming'`. |
386
+ | `ThreadRunState.error` (new), `AgentError` (new) | A failed turn KEEPS its `runs` entry (`status: 'error'`, the parts so far, `error`) until the next `start()`/`retry()` replaces it or `stop()`/`stopAll()` dismisses it. `runs.has(id)` no longer means live: test `run.status`. `onError` still receives the raw thrown value, and now also fires for an abort that `stop()`/supersede/unmount did not issue. |
387
+ | `aiSdkTransport` failures | A non-2xx response, an `error` chunk and a malformed chunk now reject the stream. They used to end it as if the turn had completed. The run's `error` carries `kind: 'http'` / `'server'` / `'stream'`. |
388
+ | `aiSdkTransport({ transport })` (new form) | Any AI SDK `ChatTransport<UIMessage>` is used as-is, e.g. a `WebSocketChatTransport`. `{ api, headers?, credentials?, fetch? }` is unchanged. |
389
+ | `useAgentThreadRuns({ throttle, telemetry })` | `throttle` (ms, default `100`; pass `0` to commit every part) batches part commits like `useChat`. A completed or failed turn emits one `chat.turn` event (a `stop()`ped turn emits none) to `telemetry`, which defaults to the enclosing `BasaltProvider`'s sink. |
390
+ | Optional props of `basalt-ui/agent` | Every optional prop and field in the public types is `?: T \| undefined`, so a maybe-undefined value (`summary={maybe}`, `Partial<AgentThread>` with `resumeToken: undefined`) compiles under `exactOptionalPropertyTypes`. `undefined` means absent. Drop any omit-destructure or `''` workaround. Exceptions: the `?: never` discriminant markers and optional function parameters, which the option does not govern. |
391
+
392
+ ### Root, shell, controls, dashboard, format, forms, tokens, theme (W3 delete-core)
393
+
394
+ Source of the rows: `docs/waves/v2-surface.md`. A deleted export has no replacement unless the
395
+ row names one; a deleted type is derived with `ComponentProps<typeof X>` / `Parameters<typeof f>[0]`.
396
+
397
+ Behaviour and type changes (`docs/V2-SPEC.md` §§ 3–4):
398
+
399
+ | Was | Now |
400
+ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
401
+ | `<PageBar actions={{ primary, secondary: [...] }} />` | `actions` is a tuple: the first entry carries `primary: true`, then up to four more (`PageBarActions`); a missing or second primary and a sixth entry are tsc errors |
402
+ | `<Section actions={...} />` taking a `ReactNode` or `BarAction[]` | `actions` is a tuple of at most three `BarAction`s (`SectionActions`); wrap a custom node as `{ key, kind: 'custom', node }` |
403
+ | a filter or tab given `value`, `onChange` or `size` | still an error, now named: the slots are typed `never` on every filter and `ViewTabs` |
404
+ | `createBasaltTheme(_, { radius: number, density: number })` | `radius` is `-5 … 5`, `density` is `-3 … 3` (literal unions) |
405
+ | `createBasaltTheme(_, { inputs: 'desktop' })` | deleted — four dimensions: `derive`, `fonts`, `radius`, `density` |
406
+ | `paletteOptions.groups` as a string-keyed record | `SeriesGroup[]`: pass what `groupTokens` returned, so the `name-` key is written once |
407
+ | `Section` dev warning for a fourth action | gone — the tuple type rejects it |
408
+
409
+ Removed or moved exports (old import → new):
410
+
411
+ | Was | Now |
412
+ | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
413
+ | `BasaltProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
414
+ | `SlotClassNames` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
415
+ | `SlotStylesProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
416
+ | `Tone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
417
+ | `ToneWithNeutral` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
418
+ | `Tier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
419
+ | `cx` — `basalt-ui` | deleted — no consumer outside the playground |
420
+ | `SCROLLPORT_ATTRIBUTE` — `basalt-ui` | deleted — no consumer outside the playground |
421
+ | `baseTheme` — `basalt-ui` | deleted — provider-internal |
422
+ | `cssVariablesResolver` — `basalt-ui` | deleted — provider-internal; a second resolver is the misuse it invites |
423
+ | `BasaltFontsConfig` — `basalt-ui` | deleted — duplicate of ./tokens; one import path per symbol |
424
+ | `CreateBasaltThemeOptions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
425
+ | `CTL_THEME` — `basalt-ui` | deleted — no consumer outside the playground |
426
+ | `CtlSlot` — `basalt-ui` | deleted — no consumer outside the playground |
427
+ | `CtlSlotProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
428
+ | `useBasaltSpacing` — `basalt-ui` | deleted — no consumer outside the playground |
429
+ | `ThemeToggleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
430
+ | `ActionGroup` — `basalt-ui` | deleted — duplicate of ./controls; one import path per symbol |
431
+ | `BarAction` — `basalt-ui` | import from `basalt-ui/controls` instead — duplicate of ./controls; one import path per symbol |
432
+ | `ActionGroupProps` — `basalt-ui` | deleted — duplicate of ./controls; one import path per symbol |
433
+ | `GlobalAction` — `basalt-ui` | import from `basalt-ui/controls` instead — duplicate of ./controls; one import path per symbol |
434
+ | `MOTION_DURATION` — `basalt-ui` | deleted — no consumer outside the playground |
435
+ | `MOTION_SPRING` — `basalt-ui` | deleted — no consumer outside the playground |
436
+ | `MOTION_EASE_STANDARD` — `basalt-ui` | deleted — no consumer outside the playground |
437
+ | `NavCountBadge` — `basalt-ui` | deleted — no consumer outside the playground |
438
+ | `NavCountBadgeProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
439
+ | `AppSidebar` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
440
+ | `SidebarSearch` — `basalt-ui` | deleted — BasaltShell search prop |
441
+ | `SidebarSearchProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
442
+ | `SidebarSearchConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
443
+ | `SidebarSearchActions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
444
+ | `SidebarAccount` — `basalt-ui` | deleted — BasaltShell account prop |
445
+ | `MobileNav` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
446
+ | `MobileNavProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
447
+ | `projectMobileNav` — `basalt-ui` | deleted — shell-internal |
448
+ | `ProjectMobileNavOptions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
449
+ | `MOBILE_MAX_TABS_DEFAULT` — `basalt-ui` | deleted — no consumer outside the playground |
450
+ | `MOBILE_MENU_MAX_DEFAULT` — `basalt-ui` | deleted — no consumer outside the playground |
451
+ | `MOBILE_MORE_KEY` — `basalt-ui` | deleted — no consumer outside the playground |
452
+ | `AppBreadcrumbs` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
453
+ | `AppBreadcrumbsProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
454
+ | `PageBarProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
455
+ | `PageBarSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
456
+ | `PageAsideProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
457
+ | `PageAsideSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
458
+ | `SizeClass` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
459
+ | `PageTitleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
460
+ | `PageTitleSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
461
+ | `SidebarSection` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
462
+ | `SidebarItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
463
+ | `SidebarBlockItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
464
+ | `SidebarBlockTone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
465
+ | `SidebarListBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
466
+ | `SidebarProgressBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
467
+ | `SidebarCustomBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
468
+ | `NavAnchor` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
469
+ | `NavAnchorProps` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
470
+ | `NavMobilePlacement` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
471
+ | `NavSectionMobile` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
472
+ | `MobileNavConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
473
+ | `MobileNavGroup` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
474
+ | `MobileNavModel` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
475
+ | `MobileNavSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
476
+ | `MobileNavSurface` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
477
+ | `BasaltShellProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
478
+ | `BrandConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
479
+ | `AppSidebarProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
480
+ | `AccountBadgeTone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
481
+ | `BasaltIdentity` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
482
+ | `BasaltRole` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
483
+ | `BasaltPlan` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
484
+ | `AccountMenuItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
485
+ | `BasaltAccountState` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
486
+ | `BasaltAccountActions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
487
+ | `BasaltAccountProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
488
+ | `Slot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
489
+ | `Series` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
490
+ | `SeriesKey` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
491
+ | `AsyncState` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
492
+ | `assertNever` — `basalt-ui` | deleted — no consumer; x satisfies never needs no import |
493
+ | `StandardSchemaV1` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
494
+ | `createPersistedState` — `basalt-ui` | import from `basalt-ui/state` instead — duplicate of ./state; one import path per symbol |
495
+ | `PersistedStateOptions` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
496
+ | `readPersistedValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
497
+ | `createLocalStore` — `basalt-ui` | import from `basalt-ui/state` instead — duplicate of ./state; one import path per symbol |
498
+ | `LocalStore` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
499
+ | `AnyField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
500
+ | `BooleanField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
501
+ | `EnumField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
502
+ | `FieldFallback` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
503
+ | `FieldHandle` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
504
+ | `FieldLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
505
+ | `FieldOption` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
506
+ | `FieldSetOptions` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
507
+ | `FieldValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
508
+ | `MultiField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
509
+ | `NumberField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
510
+ | `RangeField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
511
+ | `RangeParams` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
512
+ | `RangePresets` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
513
+ | `RangeValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
514
+ | `RangeWindow` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
515
+ | `RangeWindows` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
516
+ | `ResolvedLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
517
+ | `ResolveLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
518
+ | `SearchValues` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
519
+ | `StoredValues` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
520
+ | `StringField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
521
+ | `WidgetHeaderDeltaProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
522
+ | `WidgetHeaderMetricProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
523
+ | `WidgetHeaderProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
524
+ | `WidgetHeaderSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
525
+ | `WidgetHeaderTier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
526
+ | `WidgetHeaderTitleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
527
+ | `DeltaBadgeProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
528
+ | `DeltaPolarity` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
529
+ | `SectionProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
530
+ | `SectionSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
531
+ | `StatCardProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
532
+ | `StatCardSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
533
+ | `WidgetGrid` — `basalt-ui` | deleted — no consumer outside the playground |
534
+ | `WidgetGridCols` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
535
+ | `WidgetGridItemProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
536
+ | `WidgetGridProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
537
+ | `StatGroupCols` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
538
+ | `StatGroupProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
539
+ | `EmptyStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
540
+ | `EmptyStateSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
541
+ | `SettingsSectionProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
542
+ | `SettingsSectionSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
543
+ | `SettingsRowProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
544
+ | `SettingsRowSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
545
+ | `DangerZoneProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
546
+ | `QueryState` — `basalt-ui` | deleted — router defaultPendingComponent/defaultErrorComponent + suspense queries replace it (§ 2) |
547
+ | `QueryStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
548
+ | `QueryStateLike` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
549
+ | `QueryStateSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
550
+ | `QueryStateTier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
551
+ | `QueryEmptyCopy` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
552
+ | `LoadingState` — `basalt-ui` | deleted — router defaultPendingComponent (§ 2) |
553
+ | `LoadingStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
554
+ | `ErrorState` — `basalt-ui` | deleted — router defaultErrorComponent (§ 2) |
555
+ | `ErrorStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
556
+ | `SurfaceSpec` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
557
+ | `RuleName` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
558
+ | `SkillName` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
559
+ | `GuardKind` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
560
+ | `ThreadWorkspace` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
561
+ | `ThreadFeed` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
562
+ | `ThreadFeedRow` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
563
+ | `ThreadOutcomeCard` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
564
+ | `ThreadDetailPanel` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
565
+ | `Composer` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
566
+ | `threadPartRenderers` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
567
+ | `ThreadTranscript` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
568
+ | `ToolChip` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
569
+ | `ThreadWorkspaceProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
570
+ | `ThreadFeedProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
571
+ | `ThreadFeedRowProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
572
+ | `ThreadOutcomeCardProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
573
+ | `ThreadDetailPanelProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
574
+ | `ComposerProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
575
+ | `ComposerSubmit` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
576
+ | `ComposerAttachment` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
577
+ | `ComposerHandle` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
578
+ | `ThreadTranscriptProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
579
+ | `MessageAffordances` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
580
+ | `VirtualizeOptions` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
581
+ | `VirtualizeProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
582
+ | `RowHeightProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
583
+ | `ToolChipProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
584
+ | `createAdapterThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
585
+ | `createThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
586
+ | `heuristicOutcome` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
587
+ | `threadsStoreAdapterContract` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
588
+ | `useAgentThreadRuns` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
589
+ | `AdapterThreadsStoreOptions` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
590
+ | `AgentThread` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
591
+ | `AgentOutcome` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
592
+ | `ThreadStatus` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
593
+ | `ThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
594
+ | `ThreadsStoreAdapter` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
595
+ | `ThreadsStoreAdapterContractCase` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
596
+ | `ThreadsStoreOptions` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
597
+ | `OutcomeResolver` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
598
+ | `ChatMessage` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
599
+ | `AgentPart` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
600
+ | `AgentTransport` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
601
+ | `pxRem` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
602
+ | `buildFontsCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
603
+ | `buildRadiusCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
604
+ | `buildDensityCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
605
+ | `DEFAULT_DERIVE_CONFIG` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
606
+ | `deriveTokens` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
607
+ | `resolveDeriveConfig` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
608
+ | `DeriveConfig` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
609
+ | `DerivedPalette` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
610
+ | `deriveRadius` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
611
+ | `RadiusValues` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
612
+ | `deriveSpacing` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
613
+ | `SpaceValues` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
614
+ | `resolveContainerClass` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
615
+ | `SIZE_CLASSES` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
616
+ | `ContainerClass` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
617
+ | `BREAKPOINTS` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
618
+ | `ColorSchemeSelector` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
619
+ | `BuildPaletteOpts` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
620
+ | `BasaltFontsConfig` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
621
+ | `ThemeLabControls` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
622
+ | `DeriveControls` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
623
+ | `DeriveControlsProps` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
624
+ | `applyOverrides` — `basalt-ui/theme-lab` | deleted — provider applies persisted lab overrides in dev (§ 2) (no longer a subpath) |
625
+ | `AREA_BOTTOM_VAR` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
626
+ | `AREA_TOP_VAR` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
627
+ | `COLOR_GROUPS` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
628
+ | `loadOverrides` — `basalt-ui/theme-lab` | deleted — provider applies persisted lab overrides in dev (§ 2) (no longer a subpath) |
629
+ | `readVar` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
630
+ | `saveOverrides` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
631
+ | `ColorGroup` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
632
+ | `ColorTunable` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
633
+ | `Overrides` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
634
+ | `ThemeLabControlsProps` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
635
+ | `BasaltViteOptions` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
636
+ | `BasaltAppIcon` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
637
+ | `BasaltAppOptions` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
638
+ | `unmatchedExemptPatterns` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
639
+ | `guardKindRemedy` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
640
+ | `guardWaiverHint` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
641
+ | `checkSource` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
642
+ | `findAllowAnnotations` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
643
+ | `neutralizeAllowAnnotation` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
644
+ | `Finding` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
645
+ | `GuardConfig` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
646
+ | `GuardKind` — `basalt-ui/guard` | deleted — duplicate of .; one import path per symbol (no longer a subpath) |
647
+ | `GuardSeverity` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
648
+ | `DEFAULT_GUARD_CONFIG` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
649
+ | `GraceEntry` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
650
+ | `GRACE_PERIOD_KINDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
651
+ | `UnmatchedExemptPattern` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
652
+ | `PLUGIN_RULE_IDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
653
+ | `WAIVER_ID_ALIASES` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
654
+ | `GENERATED_HEADER_LINE` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
655
+ | `TOKENS_ONLY_DISABLED_KINDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
656
+ | `GUARD_RULES` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
657
+ | `AllowAnnotationSite` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
658
+ | `NEUTRALIZED_ALLOW_TOKEN` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
659
+ | `compact` — `basalt-ui/format` | deleted — no consumer outside the playground |
660
+ | `deltaPct` — `basalt-ui/format` | deleted — no consumer outside the playground |
661
+ | `DeltaPctOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
662
+ | `fmtCompact` — `basalt-ui/format` | deleted — alias of compact — one name per formatter |
663
+ | `FmtCompactOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
664
+ | `fmtCurrency` — `basalt-ui/format` | deleted — alias of money |
665
+ | `FmtCurrencyOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
666
+ | `fmtInt` — `basalt-ui/format` | deleted — alias of integer |
667
+ | `fmtPercent` — `basalt-ui/format` | deleted — alias of percent |
668
+ | `FmtPercentOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
669
+ | `LocaleOption` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
670
+ | `NON_FINITE` — `basalt-ui/format` | deleted — no consumer outside the playground |
671
+ | `clock` — `basalt-ui/format` | deleted — no consumer outside the playground |
672
+ | `ClockOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
673
+ | `duration` — `basalt-ui/format` | deleted — no consumer outside the playground |
674
+ | `DurationOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
675
+ | `DurationUnit` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
676
+ | `RelativeTimeOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
677
+ | `WeekdayOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
678
+ | `KcalOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
679
+ | `KmOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
680
+ | `UseBasaltFormOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
681
+ | `useFormSubmit` — `basalt-ui/forms` | deleted — no consumer outside the playground |
682
+ | `isFieldErrorEnvelope` — `basalt-ui/forms` | deleted — no consumer outside the playground |
683
+ | `FormFieldErrors` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
684
+ | `UseFormSubmitOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
685
+ | `UseFormSubmitReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
686
+ | `FormStateProvider` — `basalt-ui/forms` | deleted — no consumer outside the playground |
687
+ | `useFormState` — `basalt-ui/forms` | deleted — no consumer outside the playground |
688
+ | `FormState` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
689
+ | `FormStateProviderProps` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
690
+ | `useFieldArray` — `basalt-ui/forms` | deleted — no consumer outside the playground |
691
+ | `UseFieldArrayReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
692
+ | `FormErrorSummary` — `basalt-ui/forms` | deleted — no consumer outside the playground |
693
+ | `FormErrorSummaryProps` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
694
+ | `useFormDraft` — `basalt-ui/forms` | deleted — no consumer outside the playground |
695
+ | `DEFAULT_AUTOSAVE_DEBOUNCE_MS` — `basalt-ui/forms` | deleted — no consumer outside the playground |
696
+ | `UseFormDraftOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
697
+ | `UseFormDraftReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
698
+ | `ActionGroup` — `basalt-ui/controls` | deleted — no consumer outside the playground |
699
+ | `OverflowMenu` — `basalt-ui/controls` | deleted — no consumer outside the playground |
700
+ | `MOBILE_GLOBAL_BAR_MAX` — `basalt-ui/controls` | deleted — no consumer outside the playground |
701
+ | `barActionMobile` — `basalt-ui/controls` | deleted — no consumer outside the playground |
702
+ | `globalActionMobile` — `basalt-ui/controls` | deleted — no consumer outside the playground |
703
+ | `BarActionItem` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
704
+ | `BarActionMenu` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
705
+ | `BarActionCustom` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
706
+ | `ActionGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
707
+ | `OverflowMenuProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
708
+ | `formatAge` — `basalt-ui/controls` | deleted — no consumer outside the playground |
709
+ | `AGE_REFRESH_MS` — `basalt-ui/controls` | deleted — no consumer outside the playground |
710
+ | `SyncButtonProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
711
+ | `ControlGroup` — `basalt-ui/controls` | deleted — no consumer outside the playground |
712
+ | `ControlGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
713
+ | `FilterSetProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
714
+ | `RangeCustomPickerProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
715
+ | `RangeFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
716
+ | `CompareFilter` — `basalt-ui/controls` | deleted — no consumer outside the playground |
717
+ | `COMPARE_VALUES` — `basalt-ui/controls` | deleted — no consumer outside the playground |
718
+ | `CompareFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
719
+ | `CompareValue` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
720
+ | `FilterOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
721
+ | `SelectFilterEnumProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
722
+ | `SelectFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
723
+ | `SelectFilterStringProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
724
+ | `MultiSelectFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
725
+ | `NumberFilterOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
726
+ | `NumberFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
727
+ | `SearchFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
728
+ | `ToggleFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
729
+ | `ViewTabsOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
730
+ | `ViewTabsProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
731
+ | `PanelRow` — `basalt-ui/controls` | deleted — no consumer outside the playground |
732
+ | `PanelRowProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
733
+ | `SliderControl` — `basalt-ui/controls` | deleted — no consumer outside the playground |
734
+ | `SliderControlProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
735
+ | `FormSection` — `basalt-ui/controls` | deleted — no consumer outside the playground |
736
+ | `FormActions` — `basalt-ui/controls` | deleted — no consumer outside the playground |
737
+ | `FormSectionProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
738
+ | `FormSectionSlot` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
739
+ | `FormRowProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
740
+ | `FormRowSlot` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
741
+ | `FormGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
742
+ | `FormActionsProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
743
+ | `RangeCustomPickerProps` — `basalt-ui/controls-dates` | deleted — duplicate of ./controls; one import path per symbol |
744
+
745
+ Still exported from `basalt-ui` in this wave, because the provider, query and dev-dock lanes replace them (V2-SPEC §§ 2, 7): `BasaltProviderProps`, `BasaltErrorBoundary`(`Props`), `BasaltErrorContext`, the `Connectivity*` family, `createBasaltQueryClient`, `BasaltQueryDevtools`, `toErrorMessage`, `errorStatus`, `BasaltDevDock`(`Props`/`Tool`). `BasaltRegister` is also kept: `declare module` augmentation only merges when the entry exports it.
746
+
747
+ ### CLI (`w9/cli`)
748
+
749
+ `basalt-ui sync` carries a 1.x install forward: untouched rules, skills and the `AGENTS.md` block are rewritten, a locally edited file is reported and left alone (`--force` overwrites it), and the manifest's `basaltVersion` moves. `sync --check` goes green once nothing is stale.
750
+
751
+ `basalt-ui doctor` gains three hard checks, each failure printing a `Fix:` line:
752
+
753
+ - `tsconfig-base`: `tsconfig.json` (or a config it references) must extend `basalt-ui/configs/tsconfig.react-app.json` or `tsconfig.base.json`; the 2.0 types assume `strict`, `exactOptionalPropertyTypes` and `noUncheckedIndexedAccess`.
754
+ - `retired-lint-rules`: `.oxlintrc.json` (and local `extends`) sets a `basalt/<id>` the installed plugin no longer registers; delete the entry.
755
+ - `dropped-subpaths`: a source file under `basalt.roots` imports a `basalt-ui/<subpath>` the install's `exports` lacks; reported as `file:line`.
756
+
757
+ A check that cannot run (an unloadable plugin, an unresolvable `extends`) prints `SKIPPED` and exits non-zero. `doctor` loads the ESM lint plugin with `require`: the bin runs under Bun, and under Node that needs ≥ 20.19 / 22.12. `init` seeds `src/main.tsx` (when absent, with both TanStack peers: `defineNav` rejects every call until its `Register` augmentation exists) and inserts `extends` into the tsconfig that covers `src`. Removed: the pre-1.41 `CLAUDE.md` → `AGENTS.md` block migration; `doctor` still warns about a leftover `CLAUDE.md`, delete its block by hand.
758
+
759
+ - `init` always seeds `src/main.tsx`, `src/routes/__root.tsx` and `src/lib/nav.tsx`: `@tanstack/react-router` and `@tanstack/react-query` are required peers of `.`, so `--with-router` and `--with-query` are deleted (passing either exits 1).
760
+ - `init` splices the shipped preset into an existing `.oxlintrc.json` by default (a stock create-vite one); `--merge-lint` is deleted and `--no-merge-lint` opts out. A child `plugins` list unions with the preset's, so `jsx-a11y` stays on. A config with comments is left as is and the line names the `extends` to add.
761
+ - `doctor` gains the hard check `app-wiring`: the entry `index.html` loads (default `src/main.tsx`) must mount `BasaltProvider` on a `createBasaltRouter` router, and the TanStack router plugin must be in the vite config (or `src/routeTree.gen.*` exist). A stock create-vite `main.tsx` is kept by `init`, so this is the check that turns red until it matches `agent/templates/main.tpl`.
762
+ - `init` rewrites create-vite's stock `"build": "tsc -b && vite build"` to `vite build && tsc -b` (vite's router plugin generates `routeTree.gen.ts`, which `tsc` needs); any other build script that runs `tsc` is left as is with a one-line advice.
763
+ - The shipped preset sets `react/only-export-components` to `["warn", { "allowExportNames": ["Route"] }]` so TanStack route files stop warning, and `init`'s lint merge adds `"Route"` to your own setting of that rule (its level and other options are kept).
764
+
765
+ ### Charts
766
+
767
+ Contract: `docs/V2-SPEC.md` § 9. `basalt-ui/charts` moved from visx to TanStack Charts. `@tanstack/charts` `1.1.0` and `d3-scale` `4.0.2` are exact, optional peers of `./charts`; visx is no dependency, peer or re-export. The public surface is `CartesianChart`, `ChartCard`, `chartCursor` and nine kinds (`Lines`, `Bars`, `StackedArea`, `Sparkline`, `BandStrip`, `Donut`, `Heatmap`, `DualPanel`, `MirroredBars`), plus their prop types. `ariaLabel` is required on every chart. The x scale follows the value `x` returns (`Date` → proportional time, which closes 1.x issue #52; `number` → linear; `string` → point or band). Engine marks for `marks` come from the allowed `@tanstack/charts/*` subpaths (`basalt/chart-engine-boundary`); basalt re-exports none.
768
+
769
+ Lint: `basalt/visx-boundary`, `basalt/visx-tooltip`, `basalt/hand-rolled-plot`, `basalt/chart-legend-literal` and the guard kinds `raw-visx-axis` and `chart-missing-aria-label` are deleted. `basalt/chart-engine-boundary` replaces the first two; the rest have no replacement (the rung and the required prop make them unreachable). A `theme-allow` naming a deleted id waives nothing (an unrecognised id is unknown); delete it. The guard has 26 kinds (was 28), and `profile: 'tokens-only'` disables 16 of them (was 18, the two deleted kinds having been Mantine-coupled). `basalt/chart-in-raw-surface` now names `Lines` and `Sparkline` (was `MultiLine`, `ZonedLine`, `LineSparkline`, `BarSparkline`). New: `basalt/chart-host-single` (repo-local) keeps `@tanstack/charts/react` inside `src/charts/host.tsx`.
770
+
771
+ | Old import | New | Why |
772
+ | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
773
+ | `basalt-ui/charts`: `LinePath` | `lineY` (`@tanstack/charts/line`) in `CartesianChart`'s `marks`, or a `Lines` series | visx is gone: no dependency, peer or re-export |
774
+ | `basalt-ui/charts`: `AreaClosed` | `areaY` (`@tanstack/charts/area`) in `marks`, or `ChartSeries.area` | visx is gone: no dependency, peer or re-export |
775
+ | `basalt-ui/charts`: `AreaStack` | `StackedArea`, or `areaY` + `stack` (`@tanstack/charts/stack`) in `marks` | visx is gone: no dependency, peer or re-export |
776
+ | `basalt-ui/charts`: `Threshold` (the visx component) | `Lines` `thresholds`, or `differenceY` (`@tanstack/charts/difference`) in `marks`; `Threshold` is now basalt's type for a `thresholds` entry | visx is gone: no dependency, peer or re-export |
777
+ | `basalt-ui/charts`: `Bar` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
778
+ | `basalt-ui/charts`: `BarStack` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
779
+ | `basalt-ui/charts`: `BarGroup` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
780
+ | `basalt-ui/charts`: `Line` | `ruleX`/`ruleY` (`@tanstack/charts/rule`), `link` (`@tanstack/charts/link`) or `refLines` | visx is gone: no dependency, peer or re-export |
781
+ | `basalt-ui/charts`: `Pie` | `Donut` | visx is gone: no dependency, peer or re-export |
782
+ | `basalt-ui/charts`: `Group` | deleted; marks carry their own position | visx is gone: no dependency, peer or re-export |
783
+ | `basalt-ui/charts`: `GridRows` | deleted; `AxisConfig.grid` | visx is gone: no dependency, peer or re-export |
784
+ | `basalt-ui/charts`: `GridColumns` | deleted; `AxisConfig.grid` | visx is gone: no dependency, peer or re-export |
785
+ | `basalt-ui/charts`: `scaleLinear` | deleted; the x scale follows `x`'s value type; `@tanstack/charts/scales/*` or `d3-scale` (a peer) inside `marks` | visx is gone: no dependency, peer or re-export |
786
+ | `basalt-ui/charts`: `scaleBand` | deleted; the x scale follows `x`'s value type; `@tanstack/charts/scales/*` or `d3-scale` (a peer) inside `marks` | visx is gone: no dependency, peer or re-export |
787
+ | `basalt-ui/charts`: `scalePoint` | deleted; the x scale follows `x`'s value type; `@tanstack/charts/scales/*` or `d3-scale` (a peer) inside `marks` | visx is gone: no dependency, peer or re-export |
788
+ | `basalt-ui/charts`: `scaleTime` | deleted; the x scale follows `x`'s value type; `@tanstack/charts/scales/*` or `d3-scale` (a peer) inside `marks` | visx is gone: no dependency, peer or re-export |
789
+ | `basalt-ui/charts`: `curveMonotoneX` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
790
+ | `basalt-ui/charts`: `curveLinear` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
791
+ | `basalt-ui/charts`: `curveCatmullRom` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
792
+ | `basalt-ui/charts`: `curveStep` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
793
+ | `basalt-ui/charts`: `curveStepAfter` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
794
+ | `basalt-ui/charts`: `curveStepBefore` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
795
+ | `basalt-ui/charts`: `curveBasis` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
796
+ | `basalt-ui/charts`: `ZonedLine` | `Lines`; `getX` + `chartId` → `x`, `isPending` → `state`, `areaFill` → `ChartSeries.area` | `ZonedLine` and `MultiLine` merged: zones, x-zones, ref lines and `y2` moved to the rung |
797
+ | `basalt-ui/charts`: `ZonedLineProps` | `LinesProps` | merged with `MultiLine` |
798
+ | `basalt-ui/charts`: `ZonedLineThreshold` | `Threshold` | renamed |
799
+ | `basalt-ui/charts`: `ZonedLineRefLine` | `RefLine` | one reference-line type for every kind |
800
+ | `basalt-ui/charts`: `BarsRefLine` | `RefLine` | one reference-line type for every kind |
801
+ | `basalt-ui/charts`: `MultiLine` | `Lines` | merged with `ZonedLine` |
802
+ | `basalt-ui/charts`: `MultiLineProps` | `LinesProps` | merged with `ZonedLineProps` |
803
+ | `basalt-ui/charts`: `Bars` | `Bars`, same name, new props: `positiveBars`/`negativeBars`/`getValue(d, key)` → `bars: BarsBar<T>[]` (each with its own `getValue`), `barLayout` → `layout: 'stacked' \| 'grouped' \| 'normalized'`, `getX`+`chartId`→`x` | contract change (V2-SPEC § 9.3) |
804
+ | `basalt-ui/charts`: `BarsProps` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
805
+ | `basalt-ui/charts`: `BarsBar` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
806
+ | `basalt-ui/charts`: `BarsLine` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
807
+ | `basalt-ui/charts`: `StackedArea` | `StackedArea`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
808
+ | `basalt-ui/charts`: `StackedAreaProps` | `StackedArea`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
809
+ | `basalt-ui/charts`: `DualPanel` | `DualPanel`, rebuilt on this engine (compiled through `composeViews`) | rebuilt in W5 (props in § 9.3) |
810
+ | `basalt-ui/charts`: `DualPanelProps` | `DualPanel`, rebuilt on this engine (compiled through `composeViews`) | rebuilt in W5 (props in § 9.3) |
811
+ | `basalt-ui/charts`: `MirroredBars` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
812
+ | `basalt-ui/charts`: `MirroredBarsProps` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
813
+ | `basalt-ui/charts`: `MirroredBarPane` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
814
+ | `basalt-ui/charts`: `BandStrip` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
815
+ | `basalt-ui/charts`: `BandStripProps` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
816
+ | `basalt-ui/charts`: `BandStripSeries` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
817
+ | `basalt-ui/charts`: `BandSpan` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
818
+ | `basalt-ui/charts`: `BandFold` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
819
+ | `basalt-ui/charts`: `Donut` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
820
+ | `basalt-ui/charts`: `DonutProps` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
821
+ | `basalt-ui/charts`: `DonutDatum` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
822
+ | `basalt-ui/charts`: `Heatmap` | `Heatmap`, rebuilt on this engine, unless the 3 bespoke grids are cheaper | no TanStack Charts port in W4; the 1.x kind had no consumer |
823
+ | `basalt-ui/charts`: `HeatmapProps` | `Heatmap`, rebuilt on this engine, unless the 3 bespoke grids are cheaper | no TanStack Charts port in W4; the 1.x kind had no consumer |
824
+ | `basalt-ui/charts`: `LineSparkline` | `Sparkline`, rebuilt on this engine (`mark: 'line' \| 'bar'`) | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
825
+ | `basalt-ui/charts`: `BarSparkline` | `Sparkline`, rebuilt on this engine (`mark: 'line' \| 'bar'`) | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
826
+ | `basalt-ui/charts`: `LineSparklineProps` | `SparklineProps`, rebuilt on this engine | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
827
+ | `basalt-ui/charts`: `BarSparklineProps` | `SparklineProps`, rebuilt on this engine | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
828
+ | `basalt-ui/charts`: `CartesianChart` | kept, new contract: `children(ctx)` → `marks(plot)`, `getX` + `chartId` → `x`, `isPending` → `state`, `ariaLabel` is required | a definition compiler plus one host (V2-SPEC § 9.2) |
829
+ | `basalt-ui/charts`: `CartesianChartProps` | kept names, new contract | V2-SPEC § 9.2 |
830
+ | `basalt-ui/charts`: `AxisConfig` | kept names, new contract | V2-SPEC § 9.2 |
831
+ | `basalt-ui/charts`: `PlotContext` | kept names, new contract | V2-SPEC § 9.2 |
832
+ | `basalt-ui/charts`: `resolveAxisDomain` | internal | the rung owns the y domains |
833
+ | `basalt-ui/charts`: `ChartFrame` | deleted; the host is private. A bespoke body moves to `CartesianChart` `marks`, a matrix to W5 `Heatmap` | the engine owns the frame |
834
+ | `basalt-ui/charts`: `ChartFrameProps` | deleted; the host is private. A bespoke body moves to `CartesianChart` `marks`, a matrix to W5 `Heatmap` | the engine owns the frame |
835
+ | `basalt-ui/charts`: `ChartFrameLegend` | deleted; the host is private. A bespoke body moves to `CartesianChart` `marks`, a matrix to W5 `Heatmap` | the engine owns the frame |
836
+ | `basalt-ui/charts`: `PlotRect` | deleted; the host is private. A bespoke body moves to `CartesianChart` `marks`, a matrix to W5 `Heatmap` | the engine owns the frame |
837
+ | `basalt-ui/charts`: `resolveLegend` | deleted; the host is private. A bespoke body moves to `CartesianChart` `marks`, a matrix to W5 `Heatmap` | the engine owns the frame |
838
+ | `basalt-ui/charts`: `ResponsiveChartHeight` | kept | unchanged |
839
+ | `basalt-ui/charts`: `ChartState` | kept; the `isPending` alias is deleted (use `state={{ pending }}`) | one state type |
840
+ | `basalt-ui/charts`: `ChartCenter` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
841
+ | `basalt-ui/charts`: `ChartPending` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
842
+ | `basalt-ui/charts`: `ChartEmpty` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
843
+ | `basalt-ui/charts`: `ChartError` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
844
+ | `basalt-ui/charts`: `ChartCenterProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
845
+ | `basalt-ui/charts`: `ChartPendingProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
846
+ | `basalt-ui/charts`: `ChartEmptyProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
847
+ | `basalt-ui/charts`: `ChartErrorProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
848
+ | `basalt-ui/charts`: `ResolvedChartState` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
849
+ | `basalt-ui/charts`: `resolveChartState` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
850
+ | `basalt-ui/charts`: `ChartCard` | kept | unchanged |
851
+ | `basalt-ui/charts`: `ChartCardProps` | kept | unchanged |
852
+ | `basalt-ui/charts`: `ChartCardSlot` | kept | unchanged |
853
+ | `basalt-ui/charts`: `ChartCard` `placeholderHeight` | default is the chart height law (the box an unsized chart takes), no longer `240`; it is a `number | ResponsiveChartHeight`. Pass the chart's own `height`when it states one, so a`<Suspense>` fallback reserves the final size | a pending card is a streamed section's fallback and must take the final box |
854
+ | `basalt-ui/charts`: `Donut` side legend | the legend sits beside the ring in a 480px-or-wider container (CSS), no longer when the frame is wider than 1.5 × its height; a stated `height` above 320px now gets the side layout too | the layout is a container query, so the server HTML is the hydrated layout |
855
+ | `basalt-ui/charts`: `ChartCard` short fold | a chart that states `height` ≤ 180px marks the card short in the server HTML (subtitle folds, KPI numeral `lg`, header top inset trims); no longer decided from a rendered height under 280px. A body that is not a chart is still measured | the fold is in the markup, so hydration does not re-fold the header |
856
+ | `basalt-ui/charts`: `legend.placement: 'header'` markup | the legend is drawn at the top of the chart body, spaced as the header's legend row; `[data-basalt-legend-slot]` and the legend inside the card's header element are gone, so a selector or test on the slot reads the chart body instead | the legend is in the chart's own markup, so it is in the server HTML and the header never grows on hydration |
857
+ | `basalt-ui/charts`: `[data-basalt-chart-legend]` value | reads `auto` (both swatches render, the container picks none / dots / chips); it was `dots` or `chips` | the mode is a container query, so the server HTML carries the right legend; read the computed `display` of the swatches for the effective mode |
858
+ | `basalt-ui/charts`: `ChartCursorScope` | the `cursorGroup` prop | no provider: one controller per group in a module map |
859
+ | `basalt-ui/charts`: `ChartCursorScopeProps` | the `cursorGroup` prop | no provider: one controller per group in a module map |
860
+ | `basalt-ui/charts`: `globalCursorStore` | `chartCursor(group?)`; read it with `useSyncExternalStore(controller.subscribe, controller.getState, () => null)` | the 1.x store is replaced by TanStack's cursor controller |
861
+ | `basalt-ui/charts`: `createCursorStore` | `chartCursor(group?)`; read it with `useSyncExternalStore(controller.subscribe, controller.getState, () => null)` | the 1.x store is replaced by TanStack's cursor controller |
862
+ | `basalt-ui/charts`: `CursorStore` | `chartCursor(group?)`; read it with `useSyncExternalStore(controller.subscribe, controller.getState, () => null)` | the 1.x store is replaced by TanStack's cursor controller |
863
+ | `basalt-ui/charts`: `CursorState` | `chartCursor(group?)`; read it with `useSyncExternalStore(controller.subscribe, controller.getState, () => null)` | the 1.x store is replaced by TanStack's cursor controller |
864
+ | `basalt-ui/charts`: `useCursorState` | `chartCursor(group?)`; read it with `useSyncExternalStore(controller.subscribe, controller.getState, () => null)` | the 1.x store is replaced by TanStack's cursor controller |
865
+ | `basalt-ui/charts`: `useChartCursor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
866
+ | `basalt-ui/charts`: `ChartCursor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
867
+ | `basalt-ui/charts`: `CursorAnchor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
868
+ | `basalt-ui/charts`: `DomainKind` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
869
+ | `basalt-ui/charts`: `CursorResolution` | kept (`'exact' \| 'nearest' \| 'leading'`) | unchanged |
870
+ | `basalt-ui/charts`: `Crosshair` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
871
+ | `basalt-ui/charts`: `SeriesDot` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
872
+ | `basalt-ui/charts`: `HoverOverlay` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
873
+ | `basalt-ui/charts`: `AxisBottomDate` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
874
+ | `basalt-ui/charts`: `AxisBottomNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
875
+ | `basalt-ui/charts`: `AxisLeftNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
876
+ | `basalt-ui/charts`: `AxisRightNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
877
+ | `basalt-ui/charts`: `ZoneRects` | deleted; `zones` / `xZones` props take `ZoneSpec` / `XZoneSpec`, which are kept | the rung compiles zones |
878
+ | `basalt-ui/charts`: `XZoneRects` | deleted; `zones` / `xZones` props take `ZoneSpec` / `XZoneSpec`, which are kept | the rung compiles zones |
879
+ | `basalt-ui/charts`: `AreaGradient` | `ChartSeries.area` | the engine owns SVG resources |
880
+ | `basalt-ui/charts`: `areaFillUrl` | `ChartSeries.area` | the engine owns SVG resources |
881
+ | `basalt-ui/charts`: `HatchPattern` | deleted; absent-state paint is a flat fill (V2-SPEC § 9 Open item: hatch) | TanStack's SVG resources are gradients and clips only |
882
+ | `basalt-ui/charts`: `hatchFill` | deleted; absent-state paint is a flat fill (V2-SPEC § 9 Open item: hatch) | TanStack's SVG resources are gradients and clips only |
883
+ | `basalt-ui/charts`: `hatchSizeFor` | deleted; absent-state paint is a flat fill (V2-SPEC § 9 Open item: hatch) | TanStack's SVG resources are gradients and clips only |
884
+ | `basalt-ui/charts`: `ChartTooltipFloat` | deleted; rows are `ChartTooltipRow` data from `tooltip.rows(d, { visible, hidden })`, the title is `tooltip.formatHeader(x, d)` | the tooltip surface is TanStack's |
885
+ | `basalt-ui/charts`: `TooltipHeader` | deleted; rows are `ChartTooltipRow` data from `tooltip.rows(d, { visible, hidden })`, the title is `tooltip.formatHeader(x, d)` | the tooltip surface is TanStack's |
886
+ | `basalt-ui/charts`: `TooltipRow` | deleted; rows are `ChartTooltipRow` data from `tooltip.rows(d, { visible, hidden })`, the title is `tooltip.formatHeader(x, d)` | the tooltip surface is TanStack's |
887
+ | `basalt-ui/charts`: `TooltipBody` | deleted; rows are `ChartTooltipRow` data from `tooltip.rows(d, { visible, hidden })`, the title is `tooltip.formatHeader(x, d)` | the tooltip surface is TanStack's |
888
+ | `basalt-ui/charts`: `CartesianTooltipConfig` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
889
+ | `basalt-ui/charts`: `CartesianTooltipRowContext` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
890
+ | `basalt-ui/charts`: `BandTooltipConfig` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
891
+ | `basalt-ui/charts`: `BandTooltipRowContext` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
892
+ | `basalt-ui/charts`: `ChartLegend` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
893
+ | `basalt-ui/charts`: `LegendEntry` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
894
+ | `basalt-ui/charts`: `deriveLegend` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
895
+ | `basalt-ui/charts`: `deriveTooltipRows` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
896
+ | `basalt-ui/charts`: `ChartLegendConfig` | kept; `LegendPlacement` is inlined | unchanged shape |
897
+ | `basalt-ui/charts`: `LegendPlacement` | inlined in `ChartLegendConfig` (`'top' \| 'bottom' \| 'header'`) | one legend type |
898
+ | `basalt-ui/charts`: `ChartSeries` | kept; absorbs `SeriesStyle`, plus `area` | one series descriptor |
899
+ | `basalt-ui/charts`: `SeriesStyle` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
900
+ | `basalt-ui/charts`: `SeriesMark` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
901
+ | `basalt-ui/charts`: `SeriesDash` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
902
+ | `basalt-ui/charts`: `SeriesCurve` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
903
+ | `basalt-ui/charts`: `SeriesRole` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
904
+ | `basalt-ui/charts`: `curveFor` | internal | `ChartSeries.curve` is the public seam |
905
+ | `basalt-ui/charts`: `foldBands` | internal | returns with W5 `BandStrip` |
906
+ | `basalt-ui/charts`: `useChartSize` | deleted; the host measures the width | the host owns sizing |
907
+ | `basalt-ui/charts`: `UseChartSizeResult` | deleted; the host measures the width | the host owns sizing |
908
+ | `basalt-ui/charts`: `ChartSize` | deleted; the host measures the width | the host owns sizing |
909
+ | `basalt-ui/charts`: `autoMargin` | deleted | TanStack's measured guides own the margins |
910
+ | `basalt-ui/charts`: `probeAxisLabels` | deleted | TanStack's measured guides own the margins |
911
+ | `basalt-ui/charts`: `AutoMarginInput` | deleted | TanStack's measured guides own the margins |
912
+ | `basalt-ui/charts`: `measureText` | deleted | TanStack's measured guides own the margins |
913
+ | `basalt-ui/charts`: `maxTextWidth` | deleted | TanStack's measured guides own the margins |
914
+ | `basalt-ui/charts`: `smartTicks` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
915
+ | `basalt-ui/charts`: `smartTicksEvery` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
916
+ | `basalt-ui/charts`: `xLabelPxFor` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
917
+ | `basalt-ui/charts`: `autoXLabelRotate` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
918
+ | `basalt-ui/charts`: `chartMargin` | deleted; margins are measured, band kinds own their top inset | the engine owns the margins |
919
+ | `basalt-ui/charts`: `ChartMargin` | deleted; margins are measured, band kinds own their top inset | the engine owns the margins |
920
+ | `basalt-ui/charts`: `fmtAxisDate` | deleted (also from `basalt-ui/format`); `formatX` and `tooltip.formatHeader` default to the date formats | one home for formatters |
921
+ | `basalt-ui/charts`: `fmtTooltipDate` | deleted (also from `basalt-ui/format`); `formatX` and `tooltip.formatHeader` default to the date formats | one home for formatters |
922
+ | `basalt-ui/charts`: `fmtCompact` | deleted; `AxisConfig.format` defaults to compact numbers | one home for formatters |
923
+ | `basalt-ui/charts`: `FmtCompactOptions` | deleted; `AxisConfig.format` defaults to compact numbers | one home for formatters |
924
+ | `basalt-ui/charts`: `fmtPercent` | `percent` from `basalt-ui/format` | one home for formatters |
925
+ | `basalt-ui/charts`: `FmtPercentOptions` | `percent` from `basalt-ui/format` | one home for formatters |
926
+ | `basalt-ui/charts`: `fmtCurrency` | `money` from `basalt-ui/format` | one home for formatters |
927
+ | `basalt-ui/charts`: `FmtCurrencyOptions` | `money` from `basalt-ui/format` | one home for formatters |
928
+ | `basalt-ui/charts`: `fmtInt` | `integer` from `basalt-ui/format` | one home for formatters |
929
+ | `basalt-ui/charts`: `formatters` | deleted; `basalt-ui/format` | one home for formatters |
930
+ | `basalt-ui/charts`: `VX` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
931
+ | `basalt-ui/charts`: `alpha` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
932
+ | `basalt-ui/charts`: `buildPaletteCss` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
933
+ | `basalt-ui/charts`: `seriesTokens` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
934
+ | `basalt-ui/charts`: `defineSeries` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
935
+ | `basalt-ui/charts`: `groupTokens` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
936
+ | `basalt-ui/charts`: `ColorPair` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
937
+ | `basalt-ui/charts`: `SeriesMap` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
938
+ | `basalt-ui/charts`: `SeriesKey` | `basalt-ui/tokens` or `basalt-ui` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
939
+ | `basalt-ui/charts`: `VxThemeProvider` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
940
+ | `basalt-ui/charts`: `useVxTheme` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
941
+ | `basalt-ui/charts`: `VxTheme` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
942
+
943
+ ### Subpaths, peers and gates (W3 gates)
944
+
945
+ | 1.41 import | 2.0 | Reason |
946
+ | ---------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------- |
947
+ | `basalt-ui/agent-chat` | `basalt-ui/agent` | the chat UI folds into `./agent`; `motion` is subpath-required there |
948
+ | `basalt-ui/notifications` | `basalt-ui/commands` | no new peer: `BasaltProvider` mounts `Notifications`, `ModalsProvider`, `Spotlight` |
949
+ | `basalt-ui/router-tanstack` (nav half) | `basalt-ui` | nav lives in the root barrel |
950
+ | `basalt-ui/router-tanstack` (store half) | `basalt-ui/state` | stores live with `field` and the search store |
951
+ | `basalt-ui/data/table` | `basalt-ui/table` | renamed; `@tanstack/react-table` is subpath-required |
952
+ | `basalt-ui/data/virtual` | deleted | 0 imports across the fleet |
953
+ | `basalt-ui/guard` | deleted | CLI-internal |
954
+ | `basalt-ui/theme-lab` | deleted | provider-mounted in dev |
955
+ | `basalt-ui/tokens.css` | `basalt-ui tokens:css` (CLI) | weatherorb 1.30 and rollhook 1.36 only |
956
+ | `basalt-ui/llms.txt`, `basalt-ui/package.json` | deleted from `exports` | 0 imports; both files stay in the tarball |
957
+
958
+ Peers: `react`, `react-dom`, `@mantine/{core,hooks,modals,notifications,spotlight}`,
959
+ `@tanstack/{react-router,react-query}` and the three `@fontsource-variable/*` are now **required**
960
+ (no longer `optional`). `@ai-sdk/provider` (`./agent`) and `dayjs` (`./controls-dates`) are new
961
+ optional, subpath-required peers.
962
+
963
+ ### Provider and wiring
964
+
965
+ | Old import | New / deleted | Why |
966
+ | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
967
+ | `BasaltProvider` `children`, `onError`, `connectivity` props | `router` (required), `telemetry?`, `fallback?`; `theme` defaults to `createBasaltTheme()` | the provider mounts the router and every overlay (V2-SPEC § 2) |
968
+ | `createBasaltQueryClient` (`basalt-ui`) | `createBasaltRouter({ routeTree, context?, query? })` | one QueryClient per router, 1.x defaults kept, `query` merges over them |
969
+ | `BasaltErrorBoundary`, `BasaltErrorBoundaryProps` | deleted: `BasaltProvider fallback` + telemetry `render.error`; routes get `defaultErrorComponent` | the provider mounts the root boundary |
970
+ | `BasaltErrorContext` | `BasaltEvent` (type) | `onError` is replaced by the `telemetry` seam (V2-SPEC § 7) |
971
+ | `BasaltOverlays`, `useCommandHotkeys` glue (`basalt-ui/commands`) | deleted: the provider mounts `ModalsProvider` (wrapping the router), `Notifications`, `Spotlight`, and binds registry hotkeys | no second mount, no `modals={false}` escape |
972
+ | `BasaltQueryDevtools`, `BasaltDevDock`, `BasaltDevDockProps`, `BasaltDevDockTool` | deleted: the provider mounts one dev dock in dev (router + query devtools, theme lab) behind a literal `NODE_ENV` gate; Spotlight commands `dev.router` / `dev.query` / `dev.theme` open it | one dock, never in production |
973
+ | `ConnectivityProvider`, `ConnectivityIndicator`, `useConnectivity` and their types | deleted | no consumer; the auto-mount is gone |
974
+ | `toErrorMessage`, `errorStatus` (`basalt-ui`) | deleted | no consumer outside the playground |
975
+ | `queryClient` seed `agent/templates/query-client.ts.tpl` | deleted; `__root.tpl` seeds `createRootRouteWithContext<BasaltRouterContext>()` | the router owns the client |
976
+ | `@mantine/{core,notifications,spotlight}/styles.layer.css` imports in the app | delete them: `basalt-ui/styles.css` now `@import`s all three, so keeping yours emits the bundle twice. With `basalt-ui/controls-dates`, import `@mantine/dates/styles.layer.css` AFTER `basalt-ui/styles.css` | the provider mounts `Notifications` and `Spotlight`, so their layers ship with it |
977
+
978
+ ### Router bridge (`basalt-ui/router-tanstack`)
979
+
980
+ | Old import | New / deleted | Why |
981
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
982
+ | `defineNav`, `navGroup`, `navTarget`, `flattenNav`, `useBasaltNav`, `NavItemId` | move to `basalt-ui` | `./router-tanstack` folds into `.` |
983
+ | `createSearchStore` | `basalt-ui/state` | the store half folds into `./state` |
984
+ | `field` and the 20 `Field`/`Range*`/`Search*` types re-exported here | `basalt-ui/state` (same names) | one import path per symbol |
985
+ | `defineNav(config)` without the `Register` augmentation | compile error: the parameter becomes `'basalt: declare Register { router }'` | the definition validated nothing (V2-SPEC § 3) |
986
+ | `useRouterBreadcrumbs`, `BasaltBreadcrumb`, `BasaltNav` | deleted | shell-internal / unnamed |
987
+ | `NavItemMeta`, `NavGroupMeta`, `AnyNavItem`, `AnyNavGroup`, `AnyNavLink`, `FlatNavItem`, `NavConfig`, `NavGroupId`, `NavTabId`, `NavIndex`, `UseNavOptions`, `NavBinding`, `NavAnchor`, `NavAnchorProps`, `NavMobilePlacement` | deleted | no consumer names them; derive with `ComponentProps` / `Parameters` |
988
+ | `useNav`, and `BasaltShell`'s `sections` / `mobileNav` props | deleted: pass `nav={NAV}` (plus `badges`, `isActive`, `getScrollElement` — the old `useNav` options) to `BasaltShell`; it resolves the sidebar, the mobile bar and the breadcrumb itself. `mobileNav` tuning moves to `defineNav`'s `mobile`. argo `apps/dashboard/src/routes/__root.tsx`: replace `const nav = useNav(NAV, { badges })` + `{...nav}` with `nav={NAV} badges={…}` (migrates in W12; 1.x consumers stay on their pinned version until then) |
989
+
84
990
  ## Unreleased
85
991
 
86
992
  _Nothing yet. Author the next section under this heading as `## Unreleased — <title>`; the
87
993
  release renames it and opens a new one here._
88
994
 
995
+ ## 2.0.1
996
+
997
+ _Nothing to migrate in this release._
998
+
999
+ ## Next patch — doctor reads the peers and the config
1000
+
1001
+ - `doctor` gains `exact-peers`: for each exact-pinned peer of the installed basalt-ui (the three
1002
+ `@fontsource-variable/*`, `motion`, `remend`, …) it compares your installed version and prints a
1003
+ one-line `bun add <pkg>@<version>` fix on a mismatch. `bun add` accepts the mismatch silently.
1004
+ The three font peers now pin `5.3.0`.
1005
+ - `doctor` gains `config-keys`: a key in the package.json `basalt` object that the config does not
1006
+ read fails with its fix. `basalt.chartMissingAriaLabel` is gone with its guard kind; `ariaLabel`
1007
+ is required on a chart now, so delete the key.
1008
+ - Corrected the § 2.0 "Upgrading from 1.x" step 2: delete only the core, notifications and
1009
+ spotlight layer imports; extension packages (`@mantine/dates`, `@mantine/schedule`) stay, after
1010
+ `basalt-ui/styles.css`.
1011
+
1012
+ ## 2.0.0
1013
+
1014
+ _Nothing to migrate in this release._
1015
+
89
1016
  ## 1.41.0 — the managed block moves to AGENTS.md
90
1017
 
91
1018
  **Changed: `init` and `sync` splice the `<!-- basalt:begin … -->` block into `AGENTS.md`, not
@@ -901,7 +1828,7 @@ claim to have already done this was false. **Consumer-visible consequence:** the
901
1828
  an installed tarball carries its own version number. If it says `Unreleased`, file it.
902
1829
 
903
1830
  **§ 1.30.0 § Guards carries a corrected number**, restated here because a published measurement
904
- moved: meteo is 5 `control-outside-home` incumbents, not 0, and the fleet total is 34, not 29 — the
1831
+ moved: weatherorb is 5 `control-outside-home` incumbents, not 0, and the fleet total is 34, not 29 — the
905
1832
  zero was a failed `npx --no-install oxlint` invocation read as "no findings". The four promotions to
906
1833
  `error` are unaffected and stand as shipped; only the extended C1 pair's count changed.
907
1834
 
@@ -1097,23 +2024,23 @@ That measurement was taken 2026-09-09, with all seven consumers freshly migrated
1097
2024
  basalt built from `master`, by running `npx oxlint .` in each repo and counting by rule id — a
1098
2025
  method that failed open in one of them, see the correction under the table:
1099
2026
 
1100
- | Rule | argo | image-gen | image-share | rb | linewatch | meteo | obsidian | playground | Verdict |
1101
- | ----------------------------------------------------------------- | ---- | --------- | ----------- | --- | --------- | ----- | -------- | ---------- | ------------ |
1102
- | `basalt/provider-above-router` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1103
- | `basalt/forms-field-key` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1104
- | `basalt/query-fn-unwrap` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1105
- | `basalt/bound-control-outside-home` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1106
- | `basalt/control-outside-home` + `raw-selection-control` (one law) | 2 | 10 | 6 | 8 | 0 | 5 | 0 | 3 | stays `warn` |
2027
+ | Rule | argo | image-gen | image-share | rb | linewatch | weatherorb | obsidian | playground | Verdict |
2028
+ | ----------------------------------------------------------------- | ---- | --------- | ----------- | --- | --------- | ---------- | -------- | ---------- | ------------ |
2029
+ | `basalt/provider-above-router` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2030
+ | `basalt/forms-field-key` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2031
+ | `basalt/query-fn-unwrap` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2032
+ | `basalt/bound-control-outside-home` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2033
+ | `basalt/control-outside-home` + `raw-selection-control` (one law) | 2 | 10 | 6 | 8 | 0 | 5 | 0 | 3 | stays `warn` |
1107
2034
 
1108
- **Corrected at 1.30.1: meteo is 5, not 0 — the fleet total is 34, not 29.** The zero published at
1109
- 1.30.0 was an artifact: meteo has no local oxlint binary, so `npx --no-install oxlint` failed there
2035
+ **Corrected at 1.30.1: weatherorb is 5, not 0 — the fleet total is 34, not 29.** The zero published at
2036
+ 1.30.0 was an artifact: weatherorb has no local oxlint binary, so `npx --no-install oxlint` failed there
1110
2037
  with a package error and the counting pipeline read that failure as "no findings" — the same
1111
2038
  silent-zero shape this file already warns about for `check-theme`'s fabricated roots, arrived at from the other side. The
1112
2039
  five are real (`display-controls.tsx:258`, `stack-editor.tsx:301/323/337`, `forecast-tab.tsx:151`),
1113
2040
  and re-measuring with a guaranteed-present binary is what found them. **The DECISION is unchanged**:
1114
- all four promoted rules re-measured at zero in every repo including meteo, so those four promotions
2041
+ all four promoted rules re-measured at zero in every repo including weatherorb, so those four promotions
1115
2042
  stand exactly as shipped — only the extended pair's count moved. A count taken through a repo's own
1116
- `lint` script rather than a bare oxlint invocation is not a measurement; meteo's `lint` is
2043
+ `lint` script rather than a bare oxlint invocation is not a measurement; weatherorb's `lint` is
1117
2044
  `basalt-ui check-theme` alone and never runs oxlint at all.
1118
2045
 
1119
2046
  **The four promotions cost nothing to take.** They were measured at zero, in every consumer, before
@@ -1170,7 +2097,7 @@ A patch, one export's TYPE only. Nothing renamed, nothing removed.
1170
2097
  - **`unwrap` strips `null`/`undefined` from a union-typed Eden response again** — the single
1171
2098
  conditional signature 1.29.1 landed still inferred `TData` off `Envelope<infer TData>`, and an Eden
1172
2099
  Treaty response is a UNION of envelopes (`{ data: T; error: null } | { data: null; error:
1173
- EdenFetchError }`), not one envelope with a nullable `data`; inferring through the wrapper type
2100
+ EdenFetchError }`), not one envelope with a nullable `data`; inferring through the wrapper type
1174
2101
  read `T | null` at every Eden call site. `UnwrapResult` now infers the raw `data` field and wraps
1175
2102
  it in `NonNullable`, which distributes over a union `R` — `unwrap(await api.x.get())` resolves to
1176
2103
  `T` again, with no `| null`. Runtime unchanged.
@@ -1244,7 +2171,7 @@ annotation and rationale):
1244
2171
  - `QueryStateVariant` and the `variant` prop on `QueryState`/`LoadingState`/`ErrorState`/`EmptyState`
1245
2172
  — use `QueryStateTier` and `tier`. **Identical values, identical branch behaviour**, verified by
1246
2173
  diffing `src/dashboard/query-state.tsx` at `v1.25.0` against 1.29.2: the union is `'page' |
1247
- 'section'` in both, and `'section'` takes the same bare/compact branch in both. A pure rename, so a
2174
+ 'section'` in both, and `'section'` takes the same bare/compact branch in both. A pure rename, so a
1248
2175
  `variant="section"` becomes `tier="section"` with nothing to eyeball afterwards.
1249
2176
  `QueryStateTier`'s own JSDoc says "`'section'` meant two different things across the two
1250
2177
  spellings" — that is the NAMING rationale for picking `tier` (audit B #19), not a behaviour
@@ -1286,7 +2213,7 @@ annotation and rationale):
1286
2213
 
1287
2214
  **On notice for 1.30.0** — a public export with exactly one consumer (the playground) as of this
1288
2215
  audit. Adopt-or-delete: gains a real consumer by 1.30.0 or is removed. Not a promise either way;
1289
- record your adoption in `docs/ARGO-MIGRATION-LEARNINGS.md` if you pick one up.
2216
+ say so in an issue if you pick one up.
1290
2217
 
1291
2218
  - **Threads/agent-chat composite tier**: `ThreadWorkspace`, `ThreadFeed`, `ThreadFeedRow`,
1292
2219
  `ThreadDetailPanel`, `ThreadOutcomeCard`, `ThreadsStoreAdapter`, `createThreadsStore`,
@@ -1495,7 +2422,7 @@ What is new, one line each — nothing here renames or removes anything:
1495
2422
  FLOORS to 0.75×, shrinks the crosshair dot, narrows the tooltip 140 → 110, and caps the legend at
1496
2423
  two entries with a `+N more` rollup. **This moves rendering, but only below 480px of measured
1497
2424
  width** — nothing at desktop width changes. Opt back out per chart with an explicit
1498
- `legend.maxRows` / `margin` override. `docs/CHARTS-SPEC.md` §8.
2425
+ `legend.maxRows` / `margin` override. `docs/archive/CHARTS-SPEC.md` §8.
1499
2426
  - **`xLabelRotate` accepts `0`**, and left UNSET now auto-rotates to 45 at the phone tier when the
1500
2427
  measured labels cannot fit three ticks side by side. `0` is the documented opt-out. Also on every
1501
2428
  rotated axis, at every width: the LEFT margin now clears the rotated label's leftward projection
@@ -1504,7 +2431,7 @@ What is new, one line each — nothing here renames or removes anything:
1504
2431
  §1's measured-gutter law, so a rotated or a densely-labelled axis will lay out slightly
1505
2432
  differently; an explicit `margin` / `xTicks` / `xTickValues` still wins.
1506
2433
  - **`SeriesStyle.curve`** (`basalt-ui/charts`) — `'monotone' | 'linear' | 'step' | 'stepAfter' |
1507
- 'stepBefore'`, plus the `curveFor` mapper and the newly re-exported `curveStep`/`curveStepBefore`.
2434
+ 'stepBefore'`, plus the `curveFor` mapper and the newly re-exported `curveStep`/`curveStepBefore`.
1508
2435
  Default `'monotone'`, which is what every kind hard-coded, so an omitted `curve` moves nothing.
1509
2436
  Honoured by `MultiLine`, `DualPanel`, `ZonedLine`, `StackedArea` and `BarsLine.curve`. Two of
1510
2437
  those read ONE curve for a whole shape rather than one per series: `ZonedLine` takes the PRIMARY
@@ -1604,7 +2531,7 @@ What is new, one line each — nothing here renames or removes anything:
1604
2531
  `QueryStateTier` is the new type name; `QueryStateVariant` stayed exported as an alias through
1605
2532
  1.28.x and is **removed in 1.29.0** together with the `variant` prop (see § Consolidation).
1606
2533
  - **`WidgetHeader` and `QueryState` gained slot classes** — `classNames={{ root, title, metric,
1607
- icon }}` on the first, `classNames={{ root }}` on the second (the branch that is live). Additive.
2534
+ icon }}` on the first, `classNames={{ root }}` on the second (the branch that is live). Additive.
1608
2535
  `Section` now OMITS `classNames` from the `WidgetHeaderProps` it re-publishes, so its slot union
1609
2536
  stays exactly `root | header | body` — a `<Section classNames={{ metric: … }}>` that used to
1610
2537
  type-check (and do nothing) is now a compile error. Reach the header's own slots on a
@@ -1661,10 +2588,10 @@ icon }}` on the first, `classNames={{ root }}` on the second (the branch that is
1661
2588
  - **`overlays.confirm` / `overlays.confirmDelete`** (`basalt-ui/commands`) — the two-button dialog
1662
2589
  every consumer was registering as a `defineOverlays` entry with its own button pair, now
1663
2590
  registry-free: `confirm({ title, body?, confirmLabel?, cancelLabel?, danger?, onConfirm,
1664
- onCancel? })` resolves `true`/`false` and fires exactly one callback, whichever exit the user takes
2591
+ onCancel? })` resolves `true`/`false` and fires exactly one callback, whichever exit the user takes
1665
2592
  (cancel, escape, click-outside and the close button all count as `false`). `danger` paints the
1666
2593
  confirm button in the theme's derived destructive family. `confirmDelete({ subject, count?,
1667
- onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT with a named
2594
+ onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT with a named
1668
2595
  `[basalt] overlays.confirm: …` error when the `@mantine/modals` peer is absent, or when no
1669
2596
  `ModalsProvider` is live — previously either returned a promise nothing would ever settle, because
1670
2597
  the imperative API is a window event bus with nothing subscribed. `@mantine/modals` stays lazily
@@ -1735,7 +2662,7 @@ onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT
1735
2662
  - **Still subpath-only.** The root barrel re-exports none of this, so a consumer without
1736
2663
  `@mantine/form` is unaffected by importing `basalt-ui`.
1737
2664
  - **Mobile "More" sheet rows now 40px with the sidebar's own insets** — `--vx-space-mobile-nav-row-
1738
- height` 44 → 40 (WCAG 2.5.5 AA touch floor, not the AAA figure the bar's own `mobileNavBarHeight`
2665
+ height` 44 → 40 (WCAG 2.5.5 AA touch floor, not the AAA figure the bar's own `mobileNavBarHeight`
1739
2666
  still holds to). The rows themselves no longer force a bespoke touch padding over the theme's
1740
2667
  `NavLink` styling; they now render with the SAME `--vx-space-row-inset-y`/`-x` padding and
1741
2668
  `VX.text.md` the desktop sidebar row does. A nested (child) row gains the sidebar's own child
@@ -2727,7 +3654,7 @@ homes rather than shipped repo-wide. `basalt/shadow-basalt-export` gains a renam
2727
3654
  → `StatCard`), so a fork that RENAMED the export is visible too. It stays a permanent advisory
2728
3655
  `warn`.
2729
3656
 
2730
- **`profile: 'tokens-only'` now disables 18 kinds** — Mantine-coupled kinds, count as of this write (drifts release to release; `TOKENS_ONLY_DISABLED_KINDS.size` in `src/guard/index.ts` is ground truth, this table isn't).
3657
+ **`profile: 'tokens-only'` now disables 16 kinds** — Mantine-coupled kinds, count as of this write (drifts release to release; `TOKENS_ONLY_DISABLED_KINDS.size` in `src/guard/index.ts` is ground truth, this table isn't).
2731
3658
 
2732
3659
  **`SURFACES` gains `pluginRules`** (`src/surfaces.ts`, internal — not a published subpath): every
2733
3660
  doctrine surface names the oxlint rules that enforce it, every registered rule maps to exactly one
@@ -2820,7 +3747,7 @@ exact route is never visited still lights on a descendant route.
2820
3747
  `$1294.9k ▲18.9%` rendered as `$129… ▲18.9%`, and truncating the number to protect the delta about
2821
3748
  that number is the wrong way round. A short value still keeps its badge on the line.
2822
3749
  - **`StatCard`'s `actions` slot is the 24px tier now, not 30px.** `CtlSlot` gained `tier?: 'ctl' |
2823
- 'widget'` (default `'ctl'`, so no existing call site changes), and `StatCard` mounts its header slot
3750
+ 'widget'` (default `'ctl'`, so no existing call site changes), and `StatCard` mounts its header slot
2824
3751
  at `'widget'` — the `size="icon"` step `--vx-space-control-height-widget` has always named as
2825
3752
  "`WidgetHeader tier="widget"` actions". A raw `ActionIcon` there rendered at the 30px `ctl` tier
2826
3753
  inside a 28px header row and grew it to 30, so a KPI card WITH a kebab sat 2px below the card
@@ -3102,7 +4029,7 @@ The shared choreography lives in an internal `useBandPlot` — **not exported**,
3102
4029
  the kinds' contract with each other, not a public seam.
3103
4030
 
3104
4031
  **`MirroredBars` reverses a recorded decision, and the recorded reason for it was wrong.** The old
3105
- entry in `docs/CHARTS-SPEC.md` read _"no two-bar-pane kind with independent per-pane scales"_, with
4032
+ entry in `docs/archive/CHARTS-SPEC.md` read _"no two-bar-pane kind with independent per-pane scales"_, with
3106
4033
  _"a second consumer asks"_ as its trigger. That trigger never fired. Round 4 framed the blocker as
3107
4034
  independent SCALES; `DualPanel` already had `topYDomain`/`bottomYDomain`, so that was never it. The
3108
4035
  real blockers are that `DualPanel`'s top pane is a LINE pane and its bottom takes one SIGNED
@@ -3412,7 +4339,7 @@ with the whole lint half off).
3412
4339
 
3413
4340
  | Surface | Note |
3414
4341
  | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
3415
- | `basalt.profile: 'tokens-only'` / `--tokens-only` | disables the 18 kinds whose remedy is a Mantine component, prop or the React theme factory. `check-theme` requires it DECLARED; `doctor` infers it, because its profile only changes advice, never enforcement |
4342
+ | `basalt.profile: 'tokens-only'` / `--tokens-only` | disables the 16 kinds whose remedy is a Mantine component, prop or the React theme factory. `check-theme` requires it DECLARED; `doctor` infers it, because its profile only changes advice, never enforcement |
3416
4343
  | `basalt.include: [...]` | scan a named file outside `roots` — and the only route to a `.json`, which is never blanket-scanned |
3417
4344
  | `basalt.roots` + a `lint:basalt` script | written by `init` from the real layout; `init` on an existing app is a lint-debt event, not a no-op |
3418
4345
  | `tokens:css --check`, `--selector-class <c>` (+ `--light-class`) | drift gate; the Tailwind `<html class="dark">` convention. There is no `scheme: { class }` API — the class form is CLI-only |