basalt-ui 1.40.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (923) hide show
  1. package/AGENTS.md +50 -45
  2. package/CHANGELOG.md +543 -513
  3. package/MIGRATING.md +969 -37
  4. package/README.md +172 -367
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +30 -0
  15. package/agent/templates/DESIGN.md.tpl +2 -2
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/check.yml +1 -1
  20. package/configs/oxlint-basalt.json +4 -10
  21. package/configs/oxlint-plugin.js +468 -847
  22. package/configs/oxlint-plugin.test.ts +662 -710
  23. package/configs/oxlint.json +10 -2
  24. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  25. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  26. package/dist/agent/ai-sdk-transport.js +10 -7
  27. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  28. package/dist/agent/chat/composer.d.ts.map +1 -0
  29. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  30. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  31. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  32. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  33. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  34. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  35. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  36. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  37. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  38. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  39. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  40. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  41. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  42. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  43. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  44. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  45. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  46. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  47. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  48. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  49. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  50. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  51. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  52. package/dist/agent/error.d.ts +31 -0
  53. package/dist/agent/error.d.ts.map +1 -0
  54. package/dist/agent/error.js +18 -0
  55. package/dist/agent/foreign.d.ts +3 -2
  56. package/dist/agent/foreign.d.ts.map +1 -1
  57. package/dist/agent/history.d.ts +2 -36
  58. package/dist/agent/history.d.ts.map +1 -1
  59. package/dist/agent/history.js +0 -32
  60. package/dist/agent/id.d.ts +4 -5
  61. package/dist/agent/id.d.ts.map +1 -1
  62. package/dist/agent/index.d.ts +19 -52
  63. package/dist/agent/index.d.ts.map +1 -1
  64. package/dist/agent/index.js +10 -32
  65. package/dist/agent/outcome.d.ts +3 -14
  66. package/dist/agent/outcome.d.ts.map +1 -1
  67. package/dist/agent/outcome.js +0 -30
  68. package/dist/agent/part-list.d.ts +3 -3
  69. package/dist/agent/part-list.d.ts.map +1 -1
  70. package/dist/agent/parts.d.ts +23 -24
  71. package/dist/agent/parts.d.ts.map +1 -1
  72. package/dist/agent/run-committer.d.ts +23 -0
  73. package/dist/agent/run-committer.d.ts.map +1 -0
  74. package/dist/agent/run-committer.js +41 -0
  75. package/dist/agent/run-records.d.ts +77 -0
  76. package/dist/agent/run-records.d.ts.map +1 -0
  77. package/dist/agent/run-records.js +69 -0
  78. package/dist/agent/thread.d.ts +23 -47
  79. package/dist/agent/thread.d.ts.map +1 -1
  80. package/dist/agent/thread.js +3 -134
  81. package/dist/agent/transport.d.ts +6 -69
  82. package/dist/agent/transport.d.ts.map +1 -1
  83. package/dist/agent/transport.js +0 -18
  84. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  85. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  86. package/dist/agent/use-agent-thread-runs.js +202 -66
  87. package/dist/charts/BandStrip.d.ts +46 -0
  88. package/dist/charts/BandStrip.d.ts.map +1 -0
  89. package/dist/charts/BandStrip.js +151 -0
  90. package/dist/charts/Bars.d.ts +19 -0
  91. package/dist/charts/Bars.d.ts.map +1 -0
  92. package/dist/charts/Bars.js +77 -0
  93. package/dist/charts/CartesianChart.d.ts +57 -0
  94. package/dist/charts/CartesianChart.d.ts.map +1 -0
  95. package/dist/charts/CartesianChart.js +121 -0
  96. package/dist/charts/ChartCard.d.ts +34 -0
  97. package/dist/charts/ChartCard.d.ts.map +1 -0
  98. package/dist/charts/ChartCard.js +115 -0
  99. package/dist/charts/Donut.d.ts +25 -0
  100. package/dist/charts/Donut.d.ts.map +1 -0
  101. package/dist/charts/Donut.js +191 -0
  102. package/dist/charts/DualPanel.d.ts +47 -0
  103. package/dist/charts/DualPanel.d.ts.map +1 -0
  104. package/dist/charts/DualPanel.js +214 -0
  105. package/dist/charts/Heatmap.d.ts +41 -0
  106. package/dist/charts/Heatmap.d.ts.map +1 -0
  107. package/dist/charts/Heatmap.js +216 -0
  108. package/dist/charts/Lines.d.ts +11 -0
  109. package/dist/charts/Lines.d.ts.map +1 -0
  110. package/dist/charts/Lines.js +114 -0
  111. package/dist/charts/MirroredBars.d.ts +44 -0
  112. package/dist/charts/MirroredBars.d.ts.map +1 -0
  113. package/dist/charts/MirroredBars.js +190 -0
  114. package/dist/charts/Sparkline.d.ts +22 -0
  115. package/dist/charts/Sparkline.d.ts.map +1 -0
  116. package/dist/charts/Sparkline.js +129 -0
  117. package/dist/charts/StackedArea.d.ts +15 -0
  118. package/dist/charts/StackedArea.d.ts.map +1 -0
  119. package/dist/charts/StackedArea.js +46 -0
  120. package/dist/charts/box.d.ts +38 -0
  121. package/dist/charts/box.d.ts.map +1 -0
  122. package/dist/charts/box.js +72 -0
  123. package/dist/charts/card-context.d.ts +3 -0
  124. package/dist/charts/card-context.d.ts.map +1 -0
  125. package/dist/charts/card-context.js +7 -0
  126. package/dist/charts/chart-box.module.css +64 -0
  127. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  128. package/dist/charts/chart-card.module.css +25 -0
  129. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  130. package/dist/charts/chart-legend.module.css +38 -0
  131. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  132. package/dist/charts/compile.d.ts +62 -0
  133. package/dist/charts/compile.d.ts.map +1 -0
  134. package/dist/charts/compile.js +386 -0
  135. package/dist/charts/cursor.d.ts +50 -0
  136. package/dist/charts/cursor.d.ts.map +1 -0
  137. package/dist/charts/cursor.js +157 -0
  138. package/dist/charts/curves.d.ts +12 -0
  139. package/dist/charts/curves.d.ts.map +1 -0
  140. package/dist/charts/curves.js +86 -0
  141. package/dist/charts/donut.module.css +54 -0
  142. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  143. package/dist/charts/host.d.ts +17 -0
  144. package/dist/charts/host.d.ts.map +1 -0
  145. package/dist/charts/host.js +35 -0
  146. package/dist/charts/index.d.ts +18 -53
  147. package/dist/charts/index.d.ts.map +1 -1
  148. package/dist/charts/index.js +17 -189
  149. package/dist/charts/legend.d.ts +23 -0
  150. package/dist/charts/legend.d.ts.map +1 -0
  151. package/dist/charts/legend.js +160 -0
  152. package/dist/charts/marks.d.ts +25 -0
  153. package/dist/charts/marks.d.ts.map +1 -0
  154. package/dist/charts/marks.js +128 -0
  155. package/dist/charts/panel.d.ts +56 -0
  156. package/dist/charts/panel.d.ts.map +1 -0
  157. package/dist/charts/panel.js +123 -0
  158. package/dist/charts/scales.d.ts +44 -0
  159. package/dist/charts/scales.d.ts.map +1 -0
  160. package/dist/charts/scales.js +163 -0
  161. package/dist/charts/sizing.d.ts +12 -0
  162. package/dist/charts/sizing.d.ts.map +1 -0
  163. package/dist/charts/sizing.js +33 -0
  164. package/dist/charts/state.d.ts +17 -0
  165. package/dist/charts/state.d.ts.map +1 -0
  166. package/dist/charts/state.js +53 -0
  167. package/dist/charts/theme.d.ts +38 -19
  168. package/dist/charts/theme.d.ts.map +1 -1
  169. package/dist/charts/theme.js +48 -26
  170. package/dist/charts/types.d.ts +227 -0
  171. package/dist/charts/types.d.ts.map +1 -0
  172. package/dist/charts/types.js +4 -0
  173. package/dist/cli/audit-allows.d.ts +4 -17
  174. package/dist/cli/audit-allows.d.ts.map +1 -1
  175. package/dist/cli/config.d.ts +14 -43
  176. package/dist/cli/config.d.ts.map +1 -1
  177. package/dist/cli/doctor-upgrade.d.ts +31 -0
  178. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  179. package/dist/cli/doctor-upgrade.js +269 -0
  180. package/dist/cli/doctor.d.ts +13 -26
  181. package/dist/cli/doctor.d.ts.map +1 -1
  182. package/dist/cli/doctor.js +79 -8
  183. package/dist/cli/help.d.ts.map +1 -1
  184. package/dist/cli/help.js +2 -4
  185. package/dist/cli/index.d.ts +68 -135
  186. package/dist/cli/index.d.ts.map +1 -1
  187. package/dist/cli/index.js +89 -76
  188. package/dist/cli/init.d.ts.map +1 -1
  189. package/dist/cli/init.js +43 -27
  190. package/dist/cli/sync.d.ts +5 -21
  191. package/dist/cli/sync.d.ts.map +1 -1
  192. package/dist/cli/sync.js +4 -6
  193. package/dist/cli/tokens-css.d.ts +7 -28
  194. package/dist/cli/tokens-css.d.ts.map +1 -1
  195. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  196. package/dist/commands/ShortcutsHelp.js +4 -5
  197. package/dist/commands/define-commands.d.ts +15 -31
  198. package/dist/commands/define-commands.d.ts.map +1 -1
  199. package/dist/commands/define-commands.js +1 -11
  200. package/dist/commands/define-overlays.d.ts +5 -19
  201. package/dist/commands/define-overlays.d.ts.map +1 -1
  202. package/dist/commands/define-overlays.js +3 -11
  203. package/dist/commands/index.d.ts +10 -40
  204. package/dist/commands/index.d.ts.map +1 -1
  205. package/dist/commands/index.js +9 -46
  206. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  207. package/dist/commands/notifications/bell.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  209. package/dist/commands/notifications/center.d.ts.map +1 -0
  210. package/dist/{notifications → commands/notifications}/center.js +2 -2
  211. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  212. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.d.ts +44 -0
  214. package/dist/commands/notifications/notify.d.ts.map +1 -0
  215. package/dist/commands/notifications/notify.js +79 -0
  216. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  217. package/dist/commands/notifications/store.d.ts.map +1 -0
  218. package/dist/{notifications → commands/notifications}/store.js +4 -0
  219. package/dist/commands/projectors.d.ts +1 -131
  220. package/dist/commands/projectors.d.ts.map +1 -1
  221. package/dist/commands/projectors.js +2 -73
  222. package/dist/commands/shell-bridge.d.ts +3 -3
  223. package/dist/commands/shortcut-format.d.ts +5 -4
  224. package/dist/commands/shortcut-format.d.ts.map +1 -1
  225. package/dist/common/errors.d.ts +3 -3
  226. package/dist/common/use-measured-widths.d.ts.map +1 -1
  227. package/dist/common/use-measured-widths.js +5 -3
  228. package/dist/common/validate.d.ts +2 -2
  229. package/dist/content/article-layout.d.ts.map +1 -1
  230. package/dist/content/article-layout.js +3 -3
  231. package/dist/content/article-model.d.ts +1 -46
  232. package/dist/content/article-model.d.ts.map +1 -1
  233. package/dist/content/article-model.js +1 -29
  234. package/dist/content/copy-action.d.ts +1 -1
  235. package/dist/content/glyphs.d.ts +1 -1
  236. package/dist/content/index.d.ts +11 -41
  237. package/dist/content/index.d.ts.map +1 -1
  238. package/dist/content/index.js +3 -35
  239. package/dist/content/markdown.d.ts +1 -1
  240. package/dist/content/markdown.d.ts.map +1 -1
  241. package/dist/content/markdown.js +1 -1
  242. package/dist/content/mermaid.d.ts.map +1 -1
  243. package/dist/content/mermaid.js +7 -7
  244. package/dist/content/slug.d.ts +1 -8
  245. package/dist/content/slug.d.ts.map +1 -1
  246. package/dist/content/slug.js +1 -8
  247. package/dist/content/url-hardening.d.ts +2 -2
  248. package/dist/content/url-hardening.d.ts.map +1 -1
  249. package/dist/content/url-hardening.js +2 -0
  250. package/dist/controls/actions.d.ts +16 -1
  251. package/dist/controls/actions.d.ts.map +1 -1
  252. package/dist/controls/enum-filter.d.ts +1 -1
  253. package/dist/controls/enum-filter.d.ts.map +1 -1
  254. package/dist/controls/filter-context.d.ts.map +1 -1
  255. package/dist/controls/filter-context.js +3 -1
  256. package/dist/controls/filter-set.js +4 -6
  257. package/dist/controls/form-layout.d.ts +1 -1
  258. package/dist/controls/form-layout.d.ts.map +1 -1
  259. package/dist/controls/form-layout.js +1 -1
  260. package/dist/controls/glyphs.d.ts +0 -2
  261. package/dist/controls/glyphs.d.ts.map +1 -1
  262. package/dist/controls/glyphs.js +0 -7
  263. package/dist/controls/index.d.ts +12 -17
  264. package/dist/controls/index.d.ts.map +1 -1
  265. package/dist/controls/index.js +5 -39
  266. package/dist/controls/multi-select-filter.d.ts +4 -3
  267. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  268. package/dist/controls/number-filter.d.ts +4 -3
  269. package/dist/controls/number-filter.d.ts.map +1 -1
  270. package/dist/controls/number-filter.js +3 -1
  271. package/dist/controls/range-filter.d.ts +4 -3
  272. package/dist/controls/range-filter.d.ts.map +1 -1
  273. package/dist/controls/search-filter.d.ts +4 -3
  274. package/dist/controls/search-filter.d.ts.map +1 -1
  275. package/dist/controls/search-filter.js +19 -14
  276. package/dist/controls/select-filter.d.ts +4 -3
  277. package/dist/controls/select-filter.d.ts.map +1 -1
  278. package/dist/controls/sync-button.d.ts.map +1 -1
  279. package/dist/controls/sync-button.js +12 -15
  280. package/dist/controls/toggle-filter.d.ts +4 -3
  281. package/dist/controls/toggle-filter.d.ts.map +1 -1
  282. package/dist/controls/uncontrolled.d.ts +12 -0
  283. package/dist/controls/uncontrolled.d.ts.map +1 -0
  284. package/dist/controls/view-tabs.d.ts +2 -2
  285. package/dist/controls/view-tabs.d.ts.map +1 -1
  286. package/dist/controls-dates/index.d.ts +0 -1
  287. package/dist/controls-dates/index.d.ts.map +1 -1
  288. package/dist/dashboard/index.d.ts +7 -9
  289. package/dist/dashboard/index.d.ts.map +1 -1
  290. package/dist/dashboard/index.js +3 -23
  291. package/dist/dashboard/section.d.ts +4 -6
  292. package/dist/dashboard/section.d.ts.map +1 -1
  293. package/dist/dashboard/section.js +4 -10
  294. package/dist/dashboard/stat-card.d.ts +4 -4
  295. package/dist/dashboard/stat-card.d.ts.map +1 -1
  296. package/dist/dashboard/stat-card.js +3 -3
  297. package/dist/dashboard/widget-header.module.css +9 -7
  298. package/dist/dev-dock.d.ts.map +1 -1
  299. package/dist/dev-dock.js +6 -1
  300. package/dist/format/date.d.ts +0 -34
  301. package/dist/format/date.d.ts.map +1 -1
  302. package/dist/format/date.js +0 -54
  303. package/dist/format/index.d.ts +7 -22
  304. package/dist/format/index.d.ts.map +1 -1
  305. package/dist/format/index.js +2 -43
  306. package/dist/format/number.d.ts +3 -14
  307. package/dist/format/number.d.ts.map +1 -1
  308. package/dist/format/number.js +0 -13
  309. package/dist/format/shared.d.ts +2 -3
  310. package/dist/format/shared.d.ts.map +1 -1
  311. package/dist/forms/index.d.ts +0 -11
  312. package/dist/forms/index.d.ts.map +1 -1
  313. package/dist/forms/index.js +1 -14
  314. package/dist/guard/index.d.ts +6 -21
  315. package/dist/guard/index.d.ts.map +1 -1
  316. package/dist/guard/index.js +27 -115
  317. package/dist/guard/types.d.ts +7 -18
  318. package/dist/guard/types.d.ts.map +1 -1
  319. package/dist/index.d.ts +16 -48
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +21 -117
  322. package/dist/provider/create-router.d.ts +44 -0
  323. package/dist/provider/create-router.d.ts.map +1 -0
  324. package/dist/provider/create-router.js +62 -0
  325. package/dist/provider/hotkeys.d.ts +8 -0
  326. package/dist/provider/hotkeys.d.ts.map +1 -0
  327. package/dist/provider/hotkeys.js +50 -0
  328. package/dist/provider/index.d.ts +33 -110
  329. package/dist/provider/index.d.ts.map +1 -1
  330. package/dist/provider/index.js +182 -82
  331. package/dist/provider/lab-theme.d.ts.map +1 -1
  332. package/dist/provider/route-transition.d.ts +76 -0
  333. package/dist/provider/route-transition.d.ts.map +1 -0
  334. package/dist/provider/route-transition.js +98 -0
  335. package/dist/provider/spotlight-actions.d.ts +10 -0
  336. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  337. package/dist/provider/spotlight-actions.js +55 -0
  338. package/dist/provider/test-router.d.ts +6 -0
  339. package/dist/provider/test-router.d.ts.map +1 -0
  340. package/dist/provider/test-router.js +18 -0
  341. package/dist/query-client.d.ts +4 -20
  342. package/dist/query-client.d.ts.map +1 -1
  343. package/dist/query-client.js +2 -2
  344. package/dist/router-tanstack/index.d.ts +18 -64
  345. package/dist/router-tanstack/index.d.ts.map +1 -1
  346. package/dist/router-tanstack/index.js +2 -16
  347. package/dist/router-tanstack/nav.d.ts +12 -1
  348. package/dist/router-tanstack/nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/nav.js +8 -1
  350. package/dist/router-tanstack/search-store.d.ts +1 -1
  351. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  352. package/dist/router-tanstack/use-nav.d.ts +8 -9
  353. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  354. package/dist/router-tanstack/use-nav.js +20 -1
  355. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  356. package/dist/shell/app-sidebar.js +1 -1
  357. package/dist/shell/index.d.ts +31 -10
  358. package/dist/shell/index.d.ts.map +1 -1
  359. package/dist/shell/index.js +14 -3
  360. package/dist/shell/page-aside.d.ts +2 -2
  361. package/dist/shell/page-aside.d.ts.map +1 -1
  362. package/dist/shell/page-aside.js +31 -12
  363. package/dist/shell/page-bar.d.ts +2 -2
  364. package/dist/shell/page-bar.d.ts.map +1 -1
  365. package/dist/shell/page-bar.js +1 -1
  366. package/dist/state.d.ts +10 -12
  367. package/dist/state.d.ts.map +1 -1
  368. package/dist/state.js +4 -6
  369. package/dist/styles.css +107 -7
  370. package/dist/surfaces.d.ts +28 -103
  371. package/dist/surfaces.d.ts.map +1 -1
  372. package/dist/surfaces.js +54 -143
  373. package/dist/{data → table}/data-table-state.d.ts +1 -1
  374. package/dist/table/data-table-state.d.ts.map +1 -0
  375. package/dist/{data → table}/data-table-state.js +4 -3
  376. package/dist/{data → table}/data-table.d.ts +28 -49
  377. package/dist/table/data-table.d.ts.map +1 -0
  378. package/dist/{data → table}/data-table.js +74 -60
  379. package/dist/table/index.d.ts +18 -0
  380. package/dist/table/index.d.ts.map +1 -0
  381. package/dist/{data/table.js → table/index.js} +1 -1
  382. package/dist/table/query-branch.d.ts.map +1 -0
  383. package/dist/table/table-features.d.ts +69 -0
  384. package/dist/table/table-features.d.ts.map +1 -0
  385. package/dist/table/table-features.js +49 -0
  386. package/dist/telemetry.d.ts +77 -0
  387. package/dist/telemetry.d.ts.map +1 -0
  388. package/dist/telemetry.js +33 -0
  389. package/dist/theme/index.d.ts +10 -21
  390. package/dist/theme/index.d.ts.map +1 -1
  391. package/dist/theme/index.js +3 -14
  392. package/dist/theme/theme-toggle.d.ts.map +1 -1
  393. package/dist/theme/theme-toggle.js +7 -33
  394. package/dist/theme/theme-toggle.module.css +30 -0
  395. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  396. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  397. package/dist/theme-lab/derive-controls.js +5 -3
  398. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  399. package/dist/theme-lab/derive-state.js +2 -1
  400. package/dist/tokens/core.d.ts +360 -0
  401. package/dist/tokens/core.d.ts.map +1 -0
  402. package/dist/tokens/core.js +708 -0
  403. package/dist/tokens/derive.d.ts +1 -1
  404. package/dist/tokens/derive.d.ts.map +1 -1
  405. package/dist/tokens/index.d.ts +5 -373
  406. package/dist/tokens/index.d.ts.map +1 -1
  407. package/dist/tokens/index.js +8 -700
  408. package/dist/tokens/palette.d.ts +2 -6
  409. package/dist/tokens/palette.d.ts.map +1 -1
  410. package/dist/tokens/palette.js +1 -4
  411. package/dist/vite.d.ts +4 -3
  412. package/dist/vite.d.ts.map +1 -1
  413. package/llms.txt +43 -85
  414. package/package.json +77 -170
  415. package/src/agent/ai-sdk-transport.ts +57 -37
  416. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  417. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  418. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  419. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  420. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  421. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  422. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  423. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  424. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  425. package/src/agent/error.ts +43 -0
  426. package/src/agent/foreign.ts +3 -2
  427. package/src/agent/history.ts +2 -107
  428. package/src/agent/id.ts +4 -5
  429. package/src/agent/index.ts +23 -112
  430. package/src/agent/outcome.ts +3 -56
  431. package/src/agent/part-list.tsx +3 -3
  432. package/src/agent/parts.ts +23 -22
  433. package/src/agent/run-committer.ts +64 -0
  434. package/src/agent/run-records.ts +147 -0
  435. package/src/agent/thread.ts +24 -231
  436. package/src/agent/transport.ts +6 -96
  437. package/src/agent/use-agent-thread-runs.ts +364 -199
  438. package/src/charts/BandStrip.tsx +276 -0
  439. package/src/charts/Bars.tsx +141 -0
  440. package/src/charts/CartesianChart.tsx +206 -0
  441. package/src/charts/ChartCard.tsx +178 -0
  442. package/src/charts/Donut.tsx +256 -0
  443. package/src/charts/DualPanel.tsx +326 -0
  444. package/src/charts/Heatmap.tsx +282 -0
  445. package/src/charts/Lines.tsx +151 -0
  446. package/src/charts/MirroredBars.tsx +303 -0
  447. package/src/charts/Sparkline.tsx +176 -0
  448. package/src/charts/StackedArea.tsx +80 -0
  449. package/src/charts/box.tsx +96 -0
  450. package/src/charts/card-context.ts +11 -0
  451. package/src/charts/chart-box.module.css +64 -0
  452. package/src/charts/chart-box.module.css.d.ts +12 -0
  453. package/src/charts/chart-card.module.css +25 -0
  454. package/src/charts/chart-card.module.css.d.ts +8 -0
  455. package/src/charts/chart-legend.module.css +38 -0
  456. package/src/charts/chart-legend.module.css.d.ts +10 -0
  457. package/src/charts/compile.ts +585 -0
  458. package/src/charts/cursor.ts +282 -0
  459. package/src/charts/curves.ts +111 -0
  460. package/src/charts/donut.module.css +54 -0
  461. package/src/charts/donut.module.css.d.ts +9 -0
  462. package/src/charts/host.tsx +60 -0
  463. package/src/charts/index.ts +41 -178
  464. package/src/charts/legend.tsx +204 -0
  465. package/src/charts/marks.ts +201 -0
  466. package/src/charts/panel.tsx +227 -0
  467. package/src/charts/scales.ts +237 -0
  468. package/src/charts/sizing.ts +47 -0
  469. package/src/charts/state.tsx +80 -0
  470. package/src/charts/theme.ts +65 -0
  471. package/src/charts/types.ts +242 -0
  472. package/src/cli/audit-allows.ts +8 -30
  473. package/src/cli/config.ts +14 -43
  474. package/src/cli/doctor-upgrade.ts +392 -0
  475. package/src/cli/doctor.ts +120 -68
  476. package/src/cli/help.ts +2 -4
  477. package/src/cli/index.ts +161 -276
  478. package/src/cli/init.ts +60 -37
  479. package/src/cli/sync.ts +13 -45
  480. package/src/cli/tokens-css.ts +7 -28
  481. package/src/commands/ShortcutsHelp.tsx +8 -9
  482. package/src/commands/define-commands.ts +16 -43
  483. package/src/commands/define-overlays.ts +12 -36
  484. package/src/commands/index.ts +11 -94
  485. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  486. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  487. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  488. package/src/commands/notifications/notify.tsx +158 -0
  489. package/src/{notifications → commands/notifications}/store.ts +10 -2
  490. package/src/commands/projectors.ts +5 -225
  491. package/src/commands/shell-bridge.ts +5 -5
  492. package/src/commands/shortcut-format.ts +5 -4
  493. package/src/common/errors.ts +3 -3
  494. package/src/common/use-measured-widths.ts +6 -3
  495. package/src/common/validate.ts +2 -2
  496. package/src/content/article-layout.tsx +37 -38
  497. package/src/content/article-model.ts +1 -84
  498. package/src/content/copy-action.tsx +1 -1
  499. package/src/content/glyphs.tsx +1 -1
  500. package/src/content/index.ts +12 -83
  501. package/src/content/markdown.tsx +4 -3
  502. package/src/content/mermaid.tsx +9 -7
  503. package/src/content/slug.ts +1 -16
  504. package/src/content/url-hardening.ts +8 -2
  505. package/src/controls/actions.tsx +24 -1
  506. package/src/controls/enum-filter.tsx +1 -1
  507. package/src/controls/filter-context.tsx +3 -1
  508. package/src/controls/filter-set.tsx +5 -7
  509. package/src/controls/form-layout.tsx +2 -2
  510. package/src/controls/glyphs.tsx +0 -10
  511. package/src/controls/index.ts +13 -64
  512. package/src/controls/multi-select-filter.tsx +5 -4
  513. package/src/controls/number-filter.tsx +8 -4
  514. package/src/controls/range-filter.tsx +5 -4
  515. package/src/controls/search-filter.tsx +25 -19
  516. package/src/controls/select-filter.tsx +5 -4
  517. package/src/controls/sync-button.tsx +18 -20
  518. package/src/controls/toggle-filter.tsx +5 -4
  519. package/src/controls/uncontrolled.ts +12 -0
  520. package/src/controls/view-tabs.tsx +3 -3
  521. package/src/controls-dates/date-range-picker.tsx +1 -1
  522. package/src/controls-dates/index.ts +0 -1
  523. package/src/dashboard/index.ts +7 -48
  524. package/src/dashboard/section.tsx +11 -40
  525. package/src/dashboard/stat-card.tsx +14 -16
  526. package/src/dashboard/widget-header.module.css +9 -7
  527. package/src/dev-dock.tsx +14 -27
  528. package/src/format/date.ts +2 -92
  529. package/src/format/index.ts +7 -53
  530. package/src/format/number.ts +3 -26
  531. package/src/format/shared.ts +2 -3
  532. package/src/forms/index.ts +0 -23
  533. package/src/guard/index.ts +37 -192
  534. package/src/guard/types.ts +6 -19
  535. package/src/index.ts +30 -282
  536. package/src/provider/create-router.tsx +138 -0
  537. package/src/provider/hotkeys.ts +70 -0
  538. package/src/provider/index.tsx +260 -230
  539. package/src/provider/lab-theme.ts +3 -2
  540. package/src/provider/route-transition.ts +199 -0
  541. package/src/provider/spotlight-actions.tsx +69 -0
  542. package/src/provider/test-router.tsx +25 -0
  543. package/src/query-client.ts +4 -22
  544. package/src/router-tanstack/index.ts +18 -112
  545. package/src/router-tanstack/nav.ts +28 -2
  546. package/src/router-tanstack/search-store.ts +9 -2
  547. package/src/router-tanstack/use-nav.ts +47 -13
  548. package/src/shell/app-mobile-nav.tsx +3 -2
  549. package/src/shell/app-sidebar.tsx +1 -1
  550. package/src/shell/aside-docking.ts +1 -1
  551. package/src/shell/index.tsx +61 -20
  552. package/src/shell/page-aside.tsx +47 -23
  553. package/src/shell/page-bar.tsx +3 -3
  554. package/src/shell/page-title.tsx +1 -1
  555. package/src/state.ts +11 -37
  556. package/src/styles.css +107 -7
  557. package/src/surfaces.ts +56 -151
  558. package/src/{data → table}/data-table-state.ts +5 -4
  559. package/src/{data → table}/data-table.tsx +170 -161
  560. package/src/table/index.ts +18 -0
  561. package/src/table/table-features.ts +102 -0
  562. package/src/telemetry.ts +110 -0
  563. package/src/theme/index.ts +22 -47
  564. package/src/theme/theme-toggle.module.css +30 -0
  565. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  566. package/src/theme/theme-toggle.tsx +15 -43
  567. package/src/theme-lab/derive-controls.tsx +5 -3
  568. package/src/theme-lab/derive-state.ts +2 -1
  569. package/src/tokens/core.ts +1163 -0
  570. package/src/tokens/derive.ts +1 -1
  571. package/src/tokens/index.ts +14 -1181
  572. package/src/tokens/palette.ts +3 -7
  573. package/src/vite.ts +3 -3
  574. package/agent/templates/CLAUDE-block.md.tpl +0 -40
  575. package/agent/templates/query-client.ts.tpl +0 -26
  576. package/dist/agent/adapter.d.ts +0 -150
  577. package/dist/agent/adapter.d.ts.map +0 -1
  578. package/dist/agent/adapter.js +0 -482
  579. package/dist/agent/use-agent-stream.d.ts +0 -35
  580. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  581. package/dist/agent/use-agent-stream.js +0 -59
  582. package/dist/agent-chat/composer.d.ts.map +0 -1
  583. package/dist/agent-chat/index.d.ts +0 -31
  584. package/dist/agent-chat/index.d.ts.map +0 -1
  585. package/dist/agent-chat/index.js +0 -19
  586. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  587. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  589. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  590. package/dist/agent-chat/thread-detail-panel.js +0 -115
  591. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  592. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  593. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  594. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  595. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  596. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  597. package/dist/agent-chat/thread-workspace.js +0 -153
  598. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  599. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  600. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  601. package/dist/charts/cursor/resolve.d.ts +0 -75
  602. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  603. package/dist/charts/cursor/resolve.js +0 -91
  604. package/dist/charts/cursor/scope.d.ts +0 -20
  605. package/dist/charts/cursor/scope.d.ts.map +0 -1
  606. package/dist/charts/cursor/scope.js +0 -20
  607. package/dist/charts/cursor/store.d.ts +0 -35
  608. package/dist/charts/cursor/store.d.ts.map +0 -1
  609. package/dist/charts/cursor/store.js +0 -25
  610. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  611. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  612. package/dist/charts/cursor/touch-pin.js +0 -79
  613. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  614. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  616. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  617. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  618. package/dist/charts/hooks/use-hysteresis.js +0 -12
  619. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  620. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  621. package/dist/charts/hooks/useBandPlot.js +0 -178
  622. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  623. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  624. package/dist/charts/hooks/useChartCursor.js +0 -200
  625. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  626. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  627. package/dist/charts/hooks/useChartSize.js +0 -8
  628. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  629. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  630. package/dist/charts/kinds/BandStrip.js +0 -241
  631. package/dist/charts/kinds/Bars.d.ts +0 -141
  632. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  633. package/dist/charts/kinds/Bars.js +0 -343
  634. package/dist/charts/kinds/Donut.d.ts +0 -77
  635. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  636. package/dist/charts/kinds/Donut.js +0 -245
  637. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  638. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  639. package/dist/charts/kinds/DualPanel.js +0 -471
  640. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  641. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  642. package/dist/charts/kinds/Heatmap.js +0 -243
  643. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  644. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  645. package/dist/charts/kinds/MirroredBars.js +0 -292
  646. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  647. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  648. package/dist/charts/kinds/MultiLine.js +0 -176
  649. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  650. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  651. package/dist/charts/kinds/StackedArea.js +0 -135
  652. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  653. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  654. package/dist/charts/kinds/ZonedLine.js +0 -155
  655. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  656. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  657. package/dist/charts/kinds/band-chrome.js +0 -71
  658. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  659. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  660. package/dist/charts/kinds/donut-layout.js +0 -52
  661. package/dist/charts/layout/auto-margin.d.ts +0 -122
  662. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  663. package/dist/charts/layout/auto-margin.js +0 -81
  664. package/dist/charts/layout/end-labels.d.ts +0 -64
  665. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  666. package/dist/charts/layout/end-labels.js +0 -76
  667. package/dist/charts/layout/log-ticks.d.ts +0 -27
  668. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  669. package/dist/charts/layout/log-ticks.js +0 -42
  670. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  671. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  672. package/dist/charts/primitives/AreaGradient.js +0 -13
  673. package/dist/charts/primitives/Axes.d.ts +0 -83
  674. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  675. package/dist/charts/primitives/Axes.js +0 -168
  676. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  677. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  678. package/dist/charts/primitives/CartesianChart.js +0 -549
  679. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  680. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartCard.js +0 -143
  682. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  683. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartFrame.js +0 -241
  685. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  686. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  687. package/dist/charts/primitives/ChartLegend.js +0 -292
  688. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  689. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  690. package/dist/charts/primitives/ChartPending.js +0 -117
  691. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  692. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  693. package/dist/charts/primitives/ChartTooltip.js +0 -197
  694. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  695. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  696. package/dist/charts/primitives/Crosshair.js +0 -23
  697. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  698. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  699. package/dist/charts/primitives/HatchPattern.js +0 -31
  700. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  701. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  702. package/dist/charts/primitives/HoverOverlay.js +0 -72
  703. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  704. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  705. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  706. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  707. package/dist/charts/primitives/XZoneRects.js +0 -65
  708. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  709. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  710. package/dist/charts/primitives/ZoneRects.js +0 -30
  711. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  712. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-card-context.js +0 -18
  714. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  715. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  716. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  717. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  718. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  719. package/dist/charts/primitives/chart-layout.js +0 -175
  720. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  721. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  722. package/dist/charts/primitives/chart-tier.js +0 -44
  723. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  724. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  725. package/dist/charts/primitives/legend-disclosure.js +0 -153
  726. package/dist/charts/series.d.ts +0 -189
  727. package/dist/charts/series.d.ts.map +0 -1
  728. package/dist/charts/series.js +0 -84
  729. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  730. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  731. package/dist/charts/sparklines/BarSparkline.js +0 -53
  732. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  733. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  734. package/dist/charts/sparklines/LineSparkline.js +0 -51
  735. package/dist/charts/sparklines/index.d.ts +0 -3
  736. package/dist/charts/sparklines/index.d.ts.map +0 -1
  737. package/dist/charts/sparklines/index.js +0 -6
  738. package/dist/charts/utils/domain.d.ts +0 -35
  739. package/dist/charts/utils/domain.d.ts.map +0 -1
  740. package/dist/charts/utils/domain.js +0 -12
  741. package/dist/charts/utils/format.d.ts +0 -8
  742. package/dist/charts/utils/format.d.ts.map +0 -1
  743. package/dist/charts/utils/format.js +0 -20
  744. package/dist/charts/utils/measure-text.d.ts +0 -25
  745. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  746. package/dist/charts/utils/measure-text.js +0 -64
  747. package/dist/charts/utils/ticks.d.ts +0 -103
  748. package/dist/charts/utils/ticks.d.ts.map +0 -1
  749. package/dist/charts/utils/ticks.js +0 -92
  750. package/dist/commands/overlays-mount.d.ts +0 -122
  751. package/dist/commands/overlays-mount.d.ts.map +0 -1
  752. package/dist/commands/overlays-mount.js +0 -125
  753. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  754. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  755. package/dist/commands/useCommandHotkeys.js +0 -45
  756. package/dist/content/article-actions.d.ts +0 -39
  757. package/dist/content/article-actions.d.ts.map +0 -1
  758. package/dist/content/article-actions.js +0 -28
  759. package/dist/content/article-card.d.ts +0 -58
  760. package/dist/content/article-card.d.ts.map +0 -1
  761. package/dist/content/article-card.js +0 -79
  762. package/dist/content/article-card.module.css +0 -111
  763. package/dist/content/mdx.d.ts +0 -20
  764. package/dist/content/mdx.d.ts.map +0 -1
  765. package/dist/content/mdx.js +0 -64
  766. package/dist/controls/compare-filter.d.ts +0 -42
  767. package/dist/controls/compare-filter.d.ts.map +0 -1
  768. package/dist/controls/compare-filter.js +0 -38
  769. package/dist/controls/slider-control.d.ts +0 -36
  770. package/dist/controls/slider-control.d.ts.map +0 -1
  771. package/dist/controls/slider-control.js +0 -64
  772. package/dist/dashboard/widget-grid.d.ts +0 -27
  773. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  774. package/dist/dashboard/widget-grid.js +0 -40
  775. package/dist/dashboard/widget-grid.module.css +0 -69
  776. package/dist/data/data-table-state.d.ts.map +0 -1
  777. package/dist/data/data-table.d.ts.map +0 -1
  778. package/dist/data/query-branch.d.ts.map +0 -1
  779. package/dist/data/table.d.ts +0 -24
  780. package/dist/data/table.d.ts.map +0 -1
  781. package/dist/data/virtual-list.d.ts +0 -133
  782. package/dist/data/virtual-list.d.ts.map +0 -1
  783. package/dist/data/virtual-list.js +0 -157
  784. package/dist/data/virtual.d.ts +0 -21
  785. package/dist/data/virtual.d.ts.map +0 -1
  786. package/dist/data/virtual.js +0 -4
  787. package/dist/forms/FormErrorSummary.d.ts +0 -30
  788. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  789. package/dist/forms/FormErrorSummary.js +0 -30
  790. package/dist/forms/use-field-array.d.ts +0 -60
  791. package/dist/forms/use-field-array.d.ts.map +0 -1
  792. package/dist/forms/use-field-array.js +0 -20
  793. package/dist/forms/use-form-draft.d.ts +0 -76
  794. package/dist/forms/use-form-draft.d.ts.map +0 -1
  795. package/dist/forms/use-form-draft.js +0 -92
  796. package/dist/forms/use-form-submit.d.ts +0 -88
  797. package/dist/forms/use-form-submit.d.ts.map +0 -1
  798. package/dist/forms/use-form-submit.js +0 -63
  799. package/dist/notifications/bell.d.ts.map +0 -1
  800. package/dist/notifications/center.d.ts.map +0 -1
  801. package/dist/notifications/define-notifications.d.ts.map +0 -1
  802. package/dist/notifications/index.d.ts +0 -40
  803. package/dist/notifications/index.d.ts.map +0 -1
  804. package/dist/notifications/index.js +0 -54
  805. package/dist/notifications/mount-guard.d.ts +0 -8
  806. package/dist/notifications/mount-guard.d.ts.map +0 -1
  807. package/dist/notifications/mount-guard.js +0 -18
  808. package/dist/notifications/notify.d.ts +0 -149
  809. package/dist/notifications/notify.d.ts.map +0 -1
  810. package/dist/notifications/notify.js +0 -171
  811. package/dist/notifications/store.d.ts.map +0 -1
  812. package/dist/provider/connectivity-indicator.d.ts +0 -13
  813. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  814. package/dist/provider/connectivity-indicator.js +0 -205
  815. package/dist/provider/connectivity-provider.d.ts +0 -7
  816. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  817. package/dist/provider/connectivity-provider.js +0 -128
  818. package/dist/provider/connectivity-types.d.ts +0 -36
  819. package/dist/provider/connectivity-types.d.ts.map +0 -1
  820. package/dist/provider/use-connectivity.d.ts +0 -3
  821. package/dist/provider/use-connectivity.d.ts.map +0 -1
  822. package/dist/provider/use-connectivity.js +0 -14
  823. package/dist/query-devtools.d.ts +0 -21
  824. package/dist/query-devtools.d.ts.map +0 -1
  825. package/dist/query-devtools.js +0 -13
  826. package/src/agent/adapter.ts +0 -945
  827. package/src/agent/use-agent-stream.ts +0 -154
  828. package/src/agent-chat/index.ts +0 -54
  829. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  830. package/src/agent-chat/thread-workspace.tsx +0 -279
  831. package/src/charts/cursor/resolve.ts +0 -198
  832. package/src/charts/cursor/scope.tsx +0 -35
  833. package/src/charts/cursor/store.ts +0 -58
  834. package/src/charts/cursor/touch-pin.ts +0 -138
  835. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  836. package/src/charts/hooks/use-hysteresis.ts +0 -26
  837. package/src/charts/hooks/useBandPlot.ts +0 -383
  838. package/src/charts/hooks/useChartCursor.ts +0 -367
  839. package/src/charts/hooks/useChartSize.ts +0 -35
  840. package/src/charts/kinds/BandStrip.tsx +0 -449
  841. package/src/charts/kinds/Bars.tsx +0 -589
  842. package/src/charts/kinds/Donut.tsx +0 -368
  843. package/src/charts/kinds/DualPanel.tsx +0 -712
  844. package/src/charts/kinds/Heatmap.tsx +0 -396
  845. package/src/charts/kinds/MirroredBars.tsx +0 -469
  846. package/src/charts/kinds/MultiLine.tsx +0 -322
  847. package/src/charts/kinds/StackedArea.tsx +0 -267
  848. package/src/charts/kinds/ZonedLine.tsx +0 -301
  849. package/src/charts/kinds/band-chrome.tsx +0 -91
  850. package/src/charts/kinds/donut-layout.ts +0 -82
  851. package/src/charts/layout/auto-margin.ts +0 -242
  852. package/src/charts/layout/end-labels.ts +0 -135
  853. package/src/charts/layout/log-ticks.ts +0 -90
  854. package/src/charts/primitives/AreaGradient.tsx +0 -26
  855. package/src/charts/primitives/Axes.tsx +0 -271
  856. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  857. package/src/charts/primitives/ChartCard.tsx +0 -280
  858. package/src/charts/primitives/ChartFrame.tsx +0 -493
  859. package/src/charts/primitives/ChartLegend.tsx +0 -422
  860. package/src/charts/primitives/ChartPending.tsx +0 -243
  861. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  862. package/src/charts/primitives/Crosshair.tsx +0 -43
  863. package/src/charts/primitives/HatchPattern.tsx +0 -55
  864. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  865. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  866. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  867. package/src/charts/primitives/XZoneRects.tsx +0 -132
  868. package/src/charts/primitives/ZoneRects.tsx +0 -67
  869. package/src/charts/primitives/chart-card-context.ts +0 -46
  870. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  871. package/src/charts/primitives/chart-layout.ts +0 -318
  872. package/src/charts/primitives/chart-tier.tsx +0 -76
  873. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  874. package/src/charts/series.ts +0 -276
  875. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  876. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  877. package/src/charts/sparklines/index.ts +0 -2
  878. package/src/charts/theme.tsx +0 -53
  879. package/src/charts/utils/domain.ts +0 -41
  880. package/src/charts/utils/format.ts +0 -19
  881. package/src/charts/utils/measure-text.ts +0 -109
  882. package/src/charts/utils/ticks.ts +0 -239
  883. package/src/commands/overlays-mount.tsx +0 -333
  884. package/src/commands/useCommandHotkeys.ts +0 -114
  885. package/src/content/article-actions.ts +0 -72
  886. package/src/content/article-card.module.css +0 -111
  887. package/src/content/article-card.tsx +0 -174
  888. package/src/content/mdx.tsx +0 -127
  889. package/src/controls/compare-filter.tsx +0 -81
  890. package/src/controls/slider-control.tsx +0 -159
  891. package/src/dashboard/widget-grid.module.css +0 -69
  892. package/src/dashboard/widget-grid.tsx +0 -146
  893. package/src/data/table.ts +0 -39
  894. package/src/data/virtual-list.tsx +0 -356
  895. package/src/data/virtual.ts +0 -26
  896. package/src/forms/FormErrorSummary.tsx +0 -71
  897. package/src/forms/use-field-array.ts +0 -94
  898. package/src/forms/use-form-draft.ts +0 -262
  899. package/src/forms/use-form-submit.ts +0 -199
  900. package/src/notifications/index.ts +0 -88
  901. package/src/notifications/mount-guard.ts +0 -38
  902. package/src/notifications/notify.tsx +0 -379
  903. package/src/provider/connectivity-indicator.tsx +0 -267
  904. package/src/provider/connectivity-provider.tsx +0 -189
  905. package/src/provider/connectivity-types.ts +0 -42
  906. package/src/provider/use-connectivity.ts +0 -26
  907. package/src/query-devtools.tsx +0 -40
  908. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  909. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  910. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  911. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  912. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  913. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  914. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  915. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  916. /package/dist/{data → table}/data-table.module.css +0 -0
  917. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  918. /package/dist/{data → table}/query-branch.d.ts +0 -0
  919. /package/dist/{data → table}/query-branch.js +0 -0
  920. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  921. /package/src/{data → table}/data-table.module.css +0 -0
  922. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  923. /package/src/{data → table}/query-branch.ts +0 -0
package/MIGRATING.md CHANGED
@@ -66,26 +66,958 @@ 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 | 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) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
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 | 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 your
92
+ `@mantine/*/styles.layer.css` imports, because `basalt-ui/styles.css` carries them.
93
+ 3. Replace the hand-built root (providers, `QueryClient`, router) with `BasaltProvider` +
94
+ `createBasaltRouter` (§ Provider and wiring).
95
+ 4. Rewrite imports by area, using the tables below. A `move` changes only the specifier.
96
+ 5. Run `bunx basalt-ui sync`, then `bunx basalt-ui doctor`, and take the lint findings one at a time.
97
+
98
+ ### AI, content, commands, state and table (`w3/delete-agent-data`)
99
+
100
+ 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.
101
+
102
+ | Old import | New | Why |
103
+ | --------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
104
+ | `basalt-ui/commands`: `defineCommand` | deleted | no consumer outside the playground |
105
+ | `basalt-ui/commands`: `runCommand` | deleted | no consumer outside the playground |
106
+ | `basalt-ui/commands`: `CommandMap` | deleted | type removed (`'idle' \| 'submitted' \| 'streaming' \| 'done' \| 'error'`); derive with `NonNullable<ComponentProps<typeof ThreadFeedRow>['liveStatus']>` |
107
+ | `basalt-ui/commands`: `CommandId` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
108
+ | `basalt-ui/commands`: `CommandRunContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
109
+ | `basalt-ui/commands`: `defineOverlay` | deleted | no consumer outside the playground |
110
+ | `basalt-ui/commands`: `registerModalsProvider` | deleted | provider-internal (§ 2) |
111
+ | `basalt-ui/commands`: `Overlay` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
112
+ | `basalt-ui/commands`: `OverlayMap` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
113
+ | `basalt-ui/commands`: `OverlayKey` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
114
+ | `basalt-ui/commands`: `ConfirmOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
115
+ | `basalt-ui/commands`: `ConfirmDeleteOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
116
+ | `basalt-ui/commands`: `toSpotlightActions` | deleted | provider-internal |
117
+ | `basalt-ui/commands`: `toRouteActions` | deleted | no consumer outside the playground |
118
+ | `basalt-ui/commands`: `toShortcutList` | deleted | no consumer outside the playground |
119
+ | `basalt-ui/commands`: `toHotkeyBindings` | deleted | provider-internal (§ 2); § 8 replaces the mirrored hotkey types |
120
+ | `basalt-ui/commands`: `RouteActionItem` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
121
+ | `basalt-ui/commands`: `RouteActionSection` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
122
+ | `basalt-ui/commands`: `ToRouteActionsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
123
+ | `basalt-ui/commands`: `ShortcutEntry` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
124
+ | `basalt-ui/commands`: `HotkeyBinding` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
125
+ | `basalt-ui/commands`: `ColorScheme` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
126
+ | `basalt-ui/commands`: `ColorSchemeSetter` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
127
+ | `basalt-ui/commands`: `SidebarToggle` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
128
+ | `basalt-ui/commands`: `parseShortcut` | deleted | no consumer outside the playground |
129
+ | `basalt-ui/commands`: `detectMac` | deleted | no consumer outside the playground |
130
+ | `basalt-ui/commands`: `formatShortcutDisplay` | deleted | no consumer outside the playground |
131
+ | `basalt-ui/commands`: `useCommandHotkeys` | deleted | provider binds the `defineCommands` registry, Hotkeys 0.13 loaded lazily (§ 2, § 8) |
132
+ | `basalt-ui/commands`: `ShortcutsHelpProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
133
+ | `basalt-ui/commands`: `BasaltOverlays` | deleted | `BasaltProvider` mounts modals, spotlight, hotkeys, notifications (§ 2) |
134
+ | `basalt-ui/commands`: `BasaltOverlaysProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
135
+ | `basalt-ui/commands`: `basaltSpotlight` | deleted | no consumer outside the playground |
136
+ | `basalt-ui/commands`: `openSpotlight` | deleted | no consumer outside the playground |
137
+ | `basalt-ui/commands`: `closeSpotlight` | deleted | no consumer outside the playground |
138
+ | `basalt-ui/notifications`: `notify` | deleted | no consumer outside the playground |
139
+ | `basalt-ui/notifications`: `notifySuccess` | deleted | no consumer outside the playground |
140
+ | `basalt-ui/notifications`: `notifyError` | deleted | no consumer outside the playground |
141
+ | `basalt-ui/notifications`: `notifyWarning` | deleted | no consumer outside the playground |
142
+ | `basalt-ui/notifications`: `notifyInfo` | deleted | no consumer outside the playground |
143
+ | `basalt-ui/notifications`: `notifyPromise` | deleted | no consumer outside the playground |
144
+ | `basalt-ui/notifications`: `notifyUndo` | deleted | no consumer outside the playground |
145
+ | `basalt-ui/notifications`: `notifyUndoable` | deleted | no consumer outside the playground |
146
+ | `basalt-ui/notifications`: `NotifyOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
147
+ | `basalt-ui/notifications`: `NotifyPromiseMessages` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
148
+ | `basalt-ui/notifications`: `NotifyUndoOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
149
+ | `basalt-ui/notifications`: `NotifyUndoHandle` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
150
+ | `basalt-ui/notifications`: `defineNotification` | deleted | no consumer outside the playground |
151
+ | `basalt-ui/notifications`: `defineNotifications` | `basalt-ui/commands` | ./notifications folds into ./commands |
152
+ | `basalt-ui/notifications`: `emit` | `basalt-ui/commands` | ./notifications folds into ./commands |
153
+ | `basalt-ui/notifications`: `resolveAction` | deleted | no consumer outside the playground |
154
+ | `basalt-ui/notifications`: `NotificationAction` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
155
+ | `basalt-ui/notifications`: `NotificationKind` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
156
+ | `basalt-ui/notifications`: `NotificationSpec` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
157
+ | `basalt-ui/notifications`: `NotificationSpecMap` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
158
+ | `basalt-ui/notifications`: `NotificationIntent` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
159
+ | `basalt-ui/notifications`: `add` | deleted | no consumer outside the playground |
160
+ | `basalt-ui/notifications`: `markRead` | deleted | no consumer outside the playground |
161
+ | `basalt-ui/notifications`: `markAllRead` | deleted | no consumer outside the playground |
162
+ | `basalt-ui/notifications`: `dismiss` | deleted | no consumer outside the playground |
163
+ | `basalt-ui/notifications`: `dismissAll` | deleted | no consumer outside the playground |
164
+ | `basalt-ui/notifications`: `remove` | deleted | no consumer outside the playground |
165
+ | `basalt-ui/notifications`: `clear` | deleted | no consumer outside the playground |
166
+ | `basalt-ui/notifications`: `needsAttention` | deleted | no consumer outside the playground |
167
+ | `basalt-ui/notifications`: `useNotificationHistory` | deleted | no consumer outside the playground |
168
+ | `basalt-ui/notifications`: `NotificationActionRef` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
169
+ | `basalt-ui/notifications`: `NotificationHistoryItem` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
170
+ | `basalt-ui/notifications`: `NotificationHistoryState` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
171
+ | `basalt-ui/notifications`: `UseNotificationHistoryReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
172
+ | `basalt-ui/notifications`: `NotificationBell` | `basalt-ui/commands` | ./notifications folds into ./commands |
173
+ | `basalt-ui/notifications`: `NotificationBellProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
174
+ | `basalt-ui/notifications`: `NotificationCenter` | deleted | no consumer outside the playground |
175
+ | `basalt-ui/notifications`: `NotificationCenterProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
176
+ | `basalt-ui/data/table`: `BasaltDataTable` | `basalt-ui/table` | ./data/table folds into ./table |
177
+ | `basalt-ui/data/table`: `BasaltDataTableProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
178
+ | `basalt-ui/data/table`: `BasaltDataTableSlot` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
179
+ | `basalt-ui/data/table`: `DataTableAlign` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
180
+ | `basalt-ui/data/table`: `DataTableColumnId` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
181
+ | `basalt-ui/data/table`: `DataTableColumnPinning` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
182
+ | `basalt-ui/data/table`: `DataTableFacet` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
183
+ | `basalt-ui/data/table`: `DataTableFacetOption` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
184
+ | `basalt-ui/data/table`: `createColumnHelper` | `basalt-ui/table` | becomes basalt-owned: `createColumnHelper<Row>()` over Table v9 (§ 8) |
185
+ | `basalt-ui/data/virtual`: `BasaltVirtualList` | deleted | no consumer; Virtual stays an internal dep of the transcript/table |
186
+ | `basalt-ui/data/virtual`: `BasaltVirtualListHandle` | deleted | no consumer outside the playground |
187
+ | `basalt-ui/data/virtual`: `BasaltVirtualListProps` | deleted | no consumer outside the playground |
188
+ | `basalt-ui/data/virtual`: `BasaltVirtualListSlot` | deleted | no consumer outside the playground |
189
+ | `basalt-ui/agent`: `AgentPartDraft` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
190
+ | `basalt-ui/agent`: `Drafted` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
191
+ | `basalt-ui/agent`: `StartPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
192
+ | `basalt-ui/agent`: `TextPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
193
+ | `basalt-ui/agent`: `ReasoningPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
194
+ | `basalt-ui/agent`: `ToolCallState` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
195
+ | `basalt-ui/agent`: `SourcePart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
196
+ | `basalt-ui/agent`: `ErrorPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
197
+ | `basalt-ui/agent`: `isStartPart` | deleted | no consumer outside the playground |
198
+ | `basalt-ui/agent`: `isToolCallSettled` | deleted | no consumer outside the playground |
199
+ | `basalt-ui/agent`: `TERMINAL_TOOL_STATES` | deleted | no consumer outside the playground |
200
+ | `basalt-ui/agent`: `mergePart` | deleted | no consumer outside the playground |
201
+ | `basalt-ui/agent`: `withPartIds` | deleted | no consumer outside the playground |
202
+ | `basalt-ui/agent`: `coalesceParts` | deleted | no consumer outside the playground |
203
+ | `basalt-ui/agent`: `definePartRenderers` | deleted | no consumer outside the playground |
204
+ | `basalt-ui/agent`: `narrowAgentPart` | deleted | no consumer outside the playground |
205
+ | `basalt-ui/agent`: `ConsumerPart` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
206
+ | `basalt-ui/agent`: `PartRenderContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
207
+ | `basalt-ui/agent`: `AgentTransport` | kept | still exported from `basalt-ui/agent` (W9: the DX trial needed it to type a mock or custom transport) |
208
+ | `basalt-ui/agent`: `ResumableAgentTransport` | kept | still exported from `basalt-ui/agent` (W9: the DX trial needed it to type a mock or custom transport) |
209
+ | `basalt-ui/agent`: `edenTransport` | deleted | no consumer; `aiSdkTransport` is the one transport (§ 6) |
210
+ | `basalt-ui/agent`: `isResumable` | deleted | no consumer outside the playground |
211
+ | `basalt-ui/agent`: `AiSdkTransport` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
212
+ | `basalt-ui/agent`: `AiSdkTransportOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
213
+ | `basalt-ui/agent`: `useAgentStream` | deleted | no consumer; `useAgentThreadRuns` is the one runner |
214
+ | `basalt-ui/agent`: `StreamStatus` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
215
+ | `basalt-ui/agent`: `UseAgentStreamReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
216
+ | `basalt-ui/agent`: `UseAgentThreadRunsArgs` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
217
+ | `basalt-ui/agent`: `UseAgentThreadRunsReturn` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
218
+ | `basalt-ui/agent`: `PartList` | deleted | no consumer outside the playground |
219
+ | `basalt-ui/agent`: `PartListProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
220
+ | `basalt-ui/agent`: `AgentPartRenderers` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
221
+ | `basalt-ui/agent`: `TextPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
222
+ | `basalt-ui/agent`: `ReasoningPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
223
+ | `basalt-ui/agent`: `ToolCallPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
224
+ | `basalt-ui/agent`: `SourcePartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
225
+ | `basalt-ui/agent`: `ErrorPartRenderer` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
226
+ | `basalt-ui/agent`: `BasaltStickToBottom` | deleted | no consumer outside the playground |
227
+ | `basalt-ui/agent`: `BasaltStickToBottomProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
228
+ | `basalt-ui/agent`: `createChatHistoryStore` | deleted | no consumer outside the playground |
229
+ | `basalt-ui/agent`: `ChatHistoryStore` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
230
+ | `basalt-ui/agent`: `ChatHistoryStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
231
+ | `basalt-ui/agent`: `createThreadsStore` | deleted | no consumer outside the playground |
232
+ | `basalt-ui/agent`: `ThreadsStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
233
+ | `basalt-ui/agent`: `heuristicOutcome` | deleted | no consumer outside the playground |
234
+ | `basalt-ui/agent`: `createAdapterThreadsStore` | deleted | no consumer outside the playground |
235
+ | `basalt-ui/agent`: `threadsStoreAdapterContract` | deleted | no consumer outside the playground |
236
+ | `basalt-ui/agent`: `AdapterThreadsStoreOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
237
+ | `basalt-ui/agent`: `ThreadsStoreAdapter` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
238
+ | `basalt-ui/agent`: `ThreadsStoreAdapterContractCase` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
239
+ | `basalt-ui/agent-chat`: `ThreadWorkspace` | deleted | no consumer |
240
+ | `basalt-ui/agent-chat`: `ThreadWorkspaceProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
241
+ | `basalt-ui/agent-chat`: `ThreadFeed` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
242
+ | `basalt-ui/agent-chat`: `ThreadFeedProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
243
+ | `basalt-ui/agent-chat`: `ThreadFeedRow` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
244
+ | `basalt-ui/agent-chat`: `ThreadFeedRowProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
245
+ | `basalt-ui/agent-chat`: `MessageAffordances` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
246
+ | `basalt-ui/agent-chat`: `RowHeightProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
247
+ | `basalt-ui/agent-chat`: `VirtualizeOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
248
+ | `basalt-ui/agent-chat`: `VirtualizeProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
249
+ | `basalt-ui/agent-chat`: `ThreadOutcomeCard` | deleted | no consumer outside the playground |
250
+ | `basalt-ui/agent-chat`: `ThreadOutcomeCardProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
251
+ | `basalt-ui/agent-chat`: `ThreadDetailPanel` | deleted | no consumer outside the playground |
252
+ | `basalt-ui/agent-chat`: `ThreadDetailPanelProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
253
+ | `basalt-ui/agent-chat`: `Composer` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
254
+ | `basalt-ui/agent-chat`: `ComposerAttachment` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
255
+ | `basalt-ui/agent-chat`: `ComposerHandle` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
256
+ | `basalt-ui/agent-chat`: `ComposerProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
257
+ | `basalt-ui/agent-chat`: `ComposerSubmit` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
258
+ | `basalt-ui/agent-chat`: `threadPartRenderers` | deleted | no consumer outside the playground |
259
+ | `basalt-ui/agent-chat`: `ThreadTranscript` | deleted | no consumer; argo renders turns through `ThreadFeedRow` |
260
+ | `basalt-ui/agent-chat`: `ThreadTranscriptProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
261
+ | `basalt-ui/agent-chat`: `ToolChip` | `basalt-ui/agent` | ./agent-chat folds into ./agent |
262
+ | `basalt-ui/agent-chat`: `ToolChipProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
263
+ | `basalt-ui/content`: `ProseDensity` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
264
+ | `basalt-ui/content`: `ProseProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
265
+ | `basalt-ui/content`: `CodeBlock` | deleted | rendered by `Markdown` fences; no direct consumer |
266
+ | `basalt-ui/content`: `CodeBlockProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
267
+ | `basalt-ui/content`: `CalloutProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
268
+ | `basalt-ui/content`: `TableOfContentsProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
269
+ | `basalt-ui/content`: `ReadingProgress` | deleted | no consumer outside the playground |
270
+ | `basalt-ui/content`: `ReadingProgressProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
271
+ | `basalt-ui/content`: `headingSlug` | deleted | no consumer outside the playground |
272
+ | `basalt-ui/content`: `readingTime` | deleted | no consumer outside the playground |
273
+ | `basalt-ui/content`: `SlugTracker` | deleted | no consumer outside the playground |
274
+ | `basalt-ui/content`: `ReadingTime` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
275
+ | `basalt-ui/content`: `HeadingAnchor` | deleted | no consumer outside the playground |
276
+ | `basalt-ui/content`: `HeadingAnchorProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
277
+ | `basalt-ui/content`: `FenceRenderContext` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
278
+ | `basalt-ui/content`: `MarkdownContentTrust` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
279
+ | `basalt-ui/content`: `BASALT_SANITIZE_SCHEMA` | deleted | no consumer outside the playground |
280
+ | `basalt-ui/content`: `SanitizePropertyDefinition` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
281
+ | `basalt-ui/content`: `SanitizeSchema` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
282
+ | `basalt-ui/content`: `MermaidDiagram` | deleted | rendered by `Markdown` fences; no direct consumer |
283
+ | `basalt-ui/content`: `MermaidDiagramProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
284
+ | `basalt-ui/content`: `blockSplit` | deleted | no consumer outside the playground |
285
+ | `basalt-ui/content`: `createMdxComponents` | deleted | no consumer outside the playground |
286
+ | `basalt-ui/content`: `mdxComponents` | deleted | no consumer outside the playground |
287
+ | `basalt-ui/content`: `CreateMdxComponentsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
288
+ | `basalt-ui/content`: `ArticleLayoutProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
289
+ | `basalt-ui/content`: `ArticleNavTarget` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
290
+ | `basalt-ui/content`: `ArticleCard` | deleted | no consumer outside the playground |
291
+ | `basalt-ui/content`: `ArticleGrid` | deleted | no consumer outside the playground |
292
+ | `basalt-ui/content`: `ArticleCardProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
293
+ | `basalt-ui/content`: `ArticleGridProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
294
+ | `basalt-ui/content`: `filterArticles` | deleted | no consumer outside the playground |
295
+ | `basalt-ui/content`: `formatArticleDate` | deleted | no consumer outside the playground |
296
+ | `basalt-ui/content`: `sortArticles` | deleted | no consumer outside the playground |
297
+ | `basalt-ui/content`: `Article` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
298
+ | `basalt-ui/content`: `ArticleFilterQuery` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
299
+ | `basalt-ui/content`: `ArticleOrder` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
300
+ | `basalt-ui/content`: `toArticleActions` | deleted | no consumer outside the playground |
301
+ | `basalt-ui/content`: `ToArticleActionsOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
302
+ | `basalt-ui/content`: `FilterSet` | deleted | duplicate of `./controls`; one import path per symbol |
303
+ | `basalt-ui/content`: `MultiSelectFilter` | deleted | duplicate of `./controls`; one import path per symbol |
304
+ | `basalt-ui/content`: `ViewTabs` | deleted | duplicate of `./controls`; one import path per symbol |
305
+ | `basalt-ui/content`: `FilterSetProps` | deleted | duplicate of `./controls`; one import path per symbol |
306
+ | `basalt-ui/content`: `MultiSelectFilterProps` | deleted | duplicate of `./controls`; one import path per symbol |
307
+ | `basalt-ui/content`: `ViewTabsOption` | deleted | duplicate of `./controls`; one import path per symbol |
308
+ | `basalt-ui/content`: `ViewTabsProps` | deleted | duplicate of `./controls`; one import path per symbol |
309
+ | `basalt-ui/content`: `GuideDrawer` | deleted | no consumer outside the playground |
310
+ | `basalt-ui/content`: `GuideDrawerProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
311
+ | `basalt-ui/content`: `GuideLinkProps` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
312
+ | `basalt-ui/state`: `PersistedStateOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
313
+ | `basalt-ui/state`: `readPersistedValue` | deleted | no consumer outside the playground |
314
+ | `basalt-ui/state`: `LocalStore` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
315
+ | `basalt-ui/state`: `FieldLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
316
+ | `basalt-ui/state`: `ResolvedLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
317
+ | `basalt-ui/state`: `ResolveLane` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
318
+ | `basalt-ui/state`: `RangeValue` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
319
+ | `basalt-ui/state`: `RangeParams` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
320
+ | `basalt-ui/state`: `RangePresets` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
321
+ | `basalt-ui/state`: `RangeWindows` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
322
+ | `basalt-ui/state`: `FieldFallback` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
323
+ | `basalt-ui/state`: `FieldSetOptions` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
324
+ | `basalt-ui/state`: `MultiField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
325
+ | `basalt-ui/state`: `RangeField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
326
+ | `basalt-ui/state`: `NumberField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
327
+ | `basalt-ui/state`: `BooleanField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
328
+ | `basalt-ui/state`: `StringField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
329
+ | `basalt-ui/state`: `AnyField` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
330
+ | `basalt-ui/state`: `FieldValue` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
331
+ | `basalt-ui/state`: `FieldOption` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
332
+ | `basalt-ui/state`: `SearchValues` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
333
+ | `basalt-ui/state`: `StoredValues` | deleted | type removed; derive with `ComponentProps`/`Parameters` |
334
+
335
+ ### Lint (`w9/lint`)
336
+
337
+ Every `basalt/*` rule is `error` in 2.0.0 (the major is the channel). Edit your `.oxlintrc.json`
338
+ accordingly; an unknown `basalt/<id>` is a hard oxlint config error.
339
+
340
+ | Rule | Change | Consumer action |
341
+ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
342
+ | `basalt/provider-above-router` | removed | delete it from `.oxlintrc.json`; `BasaltProvider` mounts `RouterProvider`, so the inverted tree cannot be written |
343
+ | `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 |
344
+ | `basalt/agent-resume-guard` | removed | delete it; `resumeStream` exists only on `useChat`/`Chat`, both banned by `agent-no-raw-usechat` |
345
+ | `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 |
346
+ | `basalt/shadow-basalt-export` | `warn` → `error` | rename the fork to compose the basalt export, or `theme-allow shadow-basalt-export — <why>` |
347
+ | `basalt/agent-no-raw-usechat` | widened to the `Chat` class | import `Chat` from neither `@ai-sdk/react` nor `ai/react`; use `useAgentStream` / `useAgentThreadRuns` |
348
+ | `basalt/no-dev-helper` | new, repo-local only (not in the preset) | none |
349
+ | `basalt/no-import-meta-env` | repo-local only, now enabled | none |
350
+ | `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>` |
351
+
352
+ ### Table v9 (`w6/table-v9`)
353
+
354
+ `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).
355
+
356
+ - Move your own `@tanstack/react-table` to `9.2.8` exact. Raw v8 helpers and `ColumnDef` no longer type-check against `columns`.
357
+ - `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>`.
358
+ - 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.
359
+ - The `@tanstack/react-virtual` peer floor moves to `>=3.14.0 <4`.
360
+ - `initialColumnPinning` is logical: `{ left, right }` → `{ start, end }`.
361
+ - `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.
362
+ - The global search now filters 250 ms after the last keystroke; `onGlobalFilterChange` fires at the same moment.
363
+
364
+ ### Transitions (`w7/transitions`)
365
+
366
+ Contract: `docs/V2-SPEC.md` § 5. React 19.3 is required (`ViewTransition`, `Activity`).
367
+
368
+ - 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`).
369
+ - `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.
370
+ - `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`.
371
+ - `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.
372
+
373
+ ### Content streaming (`w8/content-streaming`)
374
+
375
+ `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.
376
+
377
+ ### Agent runtime (`w8/agent-runtime`)
378
+
379
+ Behavior changes to symbols that stay; no import changes. Contract: V2-SPEC § 6, § 7.
380
+
381
+ | Symbol | Change |
382
+ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
383
+ | `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'`. |
384
+ | `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. |
385
+ | `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'`. |
386
+ | `aiSdkTransport({ transport })` (new form) | Any AI SDK `ChatTransport<UIMessage>` is used as-is, e.g. a `WebSocketChatTransport`. `{ api, headers?, credentials?, fetch? }` is unchanged. |
387
+ | `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. |
388
+ | 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. |
389
+
390
+ ### Root, shell, controls, dashboard, format, forms, tokens, theme (W3 delete-core)
391
+
392
+ Source of the rows: `docs/waves/v2-surface.md`. A deleted export has no replacement unless the
393
+ row names one; a deleted type is derived with `ComponentProps<typeof X>` / `Parameters<typeof f>[0]`.
394
+
395
+ Behaviour and type changes (`docs/V2-SPEC.md` §§ 3–4):
396
+
397
+ | Was | Now |
398
+ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
399
+ | `<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 |
400
+ | `<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 }` |
401
+ | a filter or tab given `value`, `onChange` or `size` | still an error, now named: the slots are typed `never` on every filter and `ViewTabs` |
402
+ | `createBasaltTheme(_, { radius: number, density: number })` | `radius` is `-5 … 5`, `density` is `-3 … 3` (literal unions) |
403
+ | `createBasaltTheme(_, { inputs: 'desktop' })` | deleted — four dimensions: `derive`, `fonts`, `radius`, `density` |
404
+ | `paletteOptions.groups` as a string-keyed record | `SeriesGroup[]`: pass what `groupTokens` returned, so the `name-` key is written once |
405
+ | `Section` dev warning for a fourth action | gone — the tuple type rejects it |
406
+
407
+ Removed or moved exports (old import → new):
408
+
409
+ | Was | Now |
410
+ | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
411
+ | `BasaltProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
412
+ | `SlotClassNames` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
413
+ | `SlotStylesProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
414
+ | `Tone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
415
+ | `ToneWithNeutral` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
416
+ | `Tier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
417
+ | `cx` — `basalt-ui` | deleted — no consumer outside the playground |
418
+ | `SCROLLPORT_ATTRIBUTE` — `basalt-ui` | deleted — no consumer outside the playground |
419
+ | `baseTheme` — `basalt-ui` | deleted — provider-internal |
420
+ | `cssVariablesResolver` — `basalt-ui` | deleted — provider-internal; a second resolver is the misuse it invites |
421
+ | `BasaltFontsConfig` — `basalt-ui` | deleted — duplicate of ./tokens; one import path per symbol |
422
+ | `CreateBasaltThemeOptions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
423
+ | `CTL_THEME` — `basalt-ui` | deleted — no consumer outside the playground |
424
+ | `CtlSlot` — `basalt-ui` | deleted — no consumer outside the playground |
425
+ | `CtlSlotProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
426
+ | `useBasaltSpacing` — `basalt-ui` | deleted — no consumer outside the playground |
427
+ | `ThemeToggleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
428
+ | `ActionGroup` — `basalt-ui` | deleted — duplicate of ./controls; one import path per symbol |
429
+ | `BarAction` — `basalt-ui` | import from `basalt-ui/controls` instead — duplicate of ./controls; one import path per symbol |
430
+ | `ActionGroupProps` — `basalt-ui` | deleted — duplicate of ./controls; one import path per symbol |
431
+ | `GlobalAction` — `basalt-ui` | import from `basalt-ui/controls` instead — duplicate of ./controls; one import path per symbol |
432
+ | `MOTION_DURATION` — `basalt-ui` | deleted — no consumer outside the playground |
433
+ | `MOTION_SPRING` — `basalt-ui` | deleted — no consumer outside the playground |
434
+ | `MOTION_EASE_STANDARD` — `basalt-ui` | deleted — no consumer outside the playground |
435
+ | `NavCountBadge` — `basalt-ui` | deleted — no consumer outside the playground |
436
+ | `NavCountBadgeProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
437
+ | `AppSidebar` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
438
+ | `SidebarSearch` — `basalt-ui` | deleted — BasaltShell search prop |
439
+ | `SidebarSearchProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
440
+ | `SidebarSearchConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
441
+ | `SidebarSearchActions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
442
+ | `SidebarAccount` — `basalt-ui` | deleted — BasaltShell account prop |
443
+ | `MobileNav` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
444
+ | `MobileNavProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
445
+ | `projectMobileNav` — `basalt-ui` | deleted — shell-internal |
446
+ | `ProjectMobileNavOptions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
447
+ | `MOBILE_MAX_TABS_DEFAULT` — `basalt-ui` | deleted — no consumer outside the playground |
448
+ | `MOBILE_MENU_MAX_DEFAULT` — `basalt-ui` | deleted — no consumer outside the playground |
449
+ | `MOBILE_MORE_KEY` — `basalt-ui` | deleted — no consumer outside the playground |
450
+ | `AppBreadcrumbs` — `basalt-ui` | deleted — BasaltShell is the one mount (§ 3) |
451
+ | `AppBreadcrumbsProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
452
+ | `PageBarProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
453
+ | `PageBarSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
454
+ | `PageAsideProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
455
+ | `PageAsideSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
456
+ | `SizeClass` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
457
+ | `PageTitleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
458
+ | `PageTitleSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
459
+ | `SidebarSection` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
460
+ | `SidebarItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
461
+ | `SidebarBlockItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
462
+ | `SidebarBlockTone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
463
+ | `SidebarListBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
464
+ | `SidebarProgressBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
465
+ | `SidebarCustomBlock` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
466
+ | `NavAnchor` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
467
+ | `NavAnchorProps` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
468
+ | `NavMobilePlacement` — `basalt-ui` | deleted — duplicate of ./router-tanstack; one import path per symbol |
469
+ | `NavSectionMobile` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
470
+ | `MobileNavConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
471
+ | `MobileNavGroup` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
472
+ | `MobileNavModel` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
473
+ | `MobileNavSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
474
+ | `MobileNavSurface` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
475
+ | `BasaltShellProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
476
+ | `BrandConfig` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
477
+ | `AppSidebarProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
478
+ | `AccountBadgeTone` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
479
+ | `BasaltIdentity` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
480
+ | `BasaltRole` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
481
+ | `BasaltPlan` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
482
+ | `AccountMenuItem` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
483
+ | `BasaltAccountState` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
484
+ | `BasaltAccountActions` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
485
+ | `BasaltAccountProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
486
+ | `Slot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
487
+ | `Series` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
488
+ | `SeriesKey` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
489
+ | `AsyncState` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
490
+ | `assertNever` — `basalt-ui` | deleted — no consumer; x satisfies never needs no import |
491
+ | `StandardSchemaV1` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
492
+ | `createPersistedState` — `basalt-ui` | import from `basalt-ui/state` instead — duplicate of ./state; one import path per symbol |
493
+ | `PersistedStateOptions` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
494
+ | `readPersistedValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
495
+ | `createLocalStore` — `basalt-ui` | import from `basalt-ui/state` instead — duplicate of ./state; one import path per symbol |
496
+ | `LocalStore` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
497
+ | `AnyField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
498
+ | `BooleanField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
499
+ | `EnumField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
500
+ | `FieldFallback` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
501
+ | `FieldHandle` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
502
+ | `FieldLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
503
+ | `FieldOption` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
504
+ | `FieldSetOptions` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
505
+ | `FieldValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
506
+ | `MultiField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
507
+ | `NumberField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
508
+ | `RangeField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
509
+ | `RangeParams` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
510
+ | `RangePresets` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
511
+ | `RangeValue` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
512
+ | `RangeWindow` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
513
+ | `RangeWindows` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
514
+ | `ResolvedLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
515
+ | `ResolveLane` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
516
+ | `SearchValues` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
517
+ | `StoredValues` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
518
+ | `StringField` — `basalt-ui` | deleted — duplicate of ./state; one import path per symbol |
519
+ | `WidgetHeaderDeltaProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
520
+ | `WidgetHeaderMetricProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
521
+ | `WidgetHeaderProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
522
+ | `WidgetHeaderSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
523
+ | `WidgetHeaderTier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
524
+ | `WidgetHeaderTitleProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
525
+ | `DeltaBadgeProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
526
+ | `DeltaPolarity` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
527
+ | `SectionProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
528
+ | `SectionSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
529
+ | `StatCardProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
530
+ | `StatCardSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
531
+ | `WidgetGrid` — `basalt-ui` | deleted — no consumer outside the playground |
532
+ | `WidgetGridCols` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
533
+ | `WidgetGridItemProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
534
+ | `WidgetGridProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
535
+ | `StatGroupCols` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
536
+ | `StatGroupProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
537
+ | `EmptyStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
538
+ | `EmptyStateSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
539
+ | `SettingsSectionProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
540
+ | `SettingsSectionSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
541
+ | `SettingsRowProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
542
+ | `SettingsRowSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
543
+ | `DangerZoneProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
544
+ | `QueryState` — `basalt-ui` | deleted — router defaultPendingComponent/defaultErrorComponent + suspense queries replace it (§ 2) |
545
+ | `QueryStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
546
+ | `QueryStateLike` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
547
+ | `QueryStateSlot` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
548
+ | `QueryStateTier` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
549
+ | `QueryEmptyCopy` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
550
+ | `LoadingState` — `basalt-ui` | deleted — router defaultPendingComponent (§ 2) |
551
+ | `LoadingStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
552
+ | `ErrorState` — `basalt-ui` | deleted — router defaultErrorComponent (§ 2) |
553
+ | `ErrorStateProps` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
554
+ | `SurfaceSpec` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
555
+ | `RuleName` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
556
+ | `SkillName` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
557
+ | `GuardKind` — `basalt-ui` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
558
+ | `ThreadWorkspace` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
559
+ | `ThreadFeed` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
560
+ | `ThreadFeedRow` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
561
+ | `ThreadOutcomeCard` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
562
+ | `ThreadDetailPanel` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
563
+ | `Composer` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
564
+ | `threadPartRenderers` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
565
+ | `ThreadTranscript` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
566
+ | `ToolChip` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
567
+ | `ThreadWorkspaceProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
568
+ | `ThreadFeedProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
569
+ | `ThreadFeedRowProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
570
+ | `ThreadOutcomeCardProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
571
+ | `ThreadDetailPanelProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
572
+ | `ComposerProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
573
+ | `ComposerSubmit` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
574
+ | `ComposerAttachment` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
575
+ | `ComposerHandle` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
576
+ | `ThreadTranscriptProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
577
+ | `MessageAffordances` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
578
+ | `VirtualizeOptions` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
579
+ | `VirtualizeProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
580
+ | `RowHeightProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
581
+ | `ToolChipProps` — `basalt-ui` | deleted — duplicate of ./agent-chat; one import path per symbol |
582
+ | `createAdapterThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
583
+ | `createThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
584
+ | `heuristicOutcome` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
585
+ | `threadsStoreAdapterContract` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
586
+ | `useAgentThreadRuns` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
587
+ | `AdapterThreadsStoreOptions` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
588
+ | `AgentThread` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
589
+ | `AgentOutcome` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
590
+ | `ThreadStatus` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
591
+ | `ThreadsStore` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
592
+ | `ThreadsStoreAdapter` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
593
+ | `ThreadsStoreAdapterContractCase` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
594
+ | `ThreadsStoreOptions` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
595
+ | `OutcomeResolver` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
596
+ | `ChatMessage` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
597
+ | `AgentPart` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
598
+ | `AgentTransport` — `basalt-ui` | deleted — duplicate of ./agent; one import path per symbol |
599
+ | `pxRem` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
600
+ | `buildFontsCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
601
+ | `buildRadiusCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
602
+ | `buildDensityCss` — `basalt-ui/tokens` | deleted — provider/CLI-internal |
603
+ | `DEFAULT_DERIVE_CONFIG` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
604
+ | `deriveTokens` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
605
+ | `resolveDeriveConfig` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
606
+ | `DeriveConfig` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
607
+ | `DerivedPalette` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
608
+ | `deriveRadius` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
609
+ | `RadiusValues` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
610
+ | `deriveSpacing` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
611
+ | `SpaceValues` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
612
+ | `resolveContainerClass` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
613
+ | `SIZE_CLASSES` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
614
+ | `ContainerClass` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
615
+ | `BREAKPOINTS` — `basalt-ui/tokens` | deleted — no consumer outside the playground |
616
+ | `ColorSchemeSelector` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
617
+ | `BuildPaletteOpts` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
618
+ | `BasaltFontsConfig` — `basalt-ui/tokens` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
619
+ | `ThemeLabControls` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
620
+ | `DeriveControls` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
621
+ | `DeriveControlsProps` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
622
+ | `applyOverrides` — `basalt-ui/theme-lab` | deleted — provider applies persisted lab overrides in dev (§ 2) (no longer a subpath) |
623
+ | `AREA_BOTTOM_VAR` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
624
+ | `AREA_TOP_VAR` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
625
+ | `COLOR_GROUPS` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
626
+ | `loadOverrides` — `basalt-ui/theme-lab` | deleted — provider applies persisted lab overrides in dev (§ 2) (no longer a subpath) |
627
+ | `readVar` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
628
+ | `saveOverrides` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
629
+ | `ColorGroup` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
630
+ | `ColorTunable` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
631
+ | `Overrides` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
632
+ | `ThemeLabControlsProps` — `basalt-ui/theme-lab` | deleted — dev-only; provider-internal (§ 2) (no longer a subpath) |
633
+ | `BasaltViteOptions` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
634
+ | `BasaltAppIcon` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
635
+ | `BasaltAppOptions` — `basalt-ui/vite` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
636
+ | `unmatchedExemptPatterns` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
637
+ | `guardKindRemedy` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
638
+ | `guardWaiverHint` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
639
+ | `checkSource` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
640
+ | `findAllowAnnotations` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
641
+ | `neutralizeAllowAnnotation` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
642
+ | `Finding` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
643
+ | `GuardConfig` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
644
+ | `GuardKind` — `basalt-ui/guard` | deleted — duplicate of .; one import path per symbol (no longer a subpath) |
645
+ | `GuardSeverity` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
646
+ | `DEFAULT_GUARD_CONFIG` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
647
+ | `GraceEntry` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
648
+ | `GRACE_PERIOD_KINDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
649
+ | `UnmatchedExemptPattern` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
650
+ | `PLUGIN_RULE_IDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
651
+ | `WAIVER_ID_ALIASES` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
652
+ | `GENERATED_HEADER_LINE` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
653
+ | `TOKENS_ONLY_DISABLED_KINDS` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
654
+ | `GUARD_RULES` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
655
+ | `AllowAnnotationSite` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
656
+ | `NEUTRALIZED_ALLOW_TOKEN` — `basalt-ui/guard` | deleted — CLI-internal; no import consumer (no longer a subpath) |
657
+ | `compact` — `basalt-ui/format` | deleted — no consumer outside the playground |
658
+ | `deltaPct` — `basalt-ui/format` | deleted — no consumer outside the playground |
659
+ | `DeltaPctOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
660
+ | `fmtCompact` — `basalt-ui/format` | deleted — alias of compact — one name per formatter |
661
+ | `FmtCompactOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
662
+ | `fmtCurrency` — `basalt-ui/format` | deleted — alias of money |
663
+ | `FmtCurrencyOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
664
+ | `fmtInt` — `basalt-ui/format` | deleted — alias of integer |
665
+ | `fmtPercent` — `basalt-ui/format` | deleted — alias of percent |
666
+ | `FmtPercentOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
667
+ | `LocaleOption` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
668
+ | `NON_FINITE` — `basalt-ui/format` | deleted — no consumer outside the playground |
669
+ | `clock` — `basalt-ui/format` | deleted — no consumer outside the playground |
670
+ | `ClockOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
671
+ | `duration` — `basalt-ui/format` | deleted — no consumer outside the playground |
672
+ | `DurationOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
673
+ | `DurationUnit` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
674
+ | `RelativeTimeOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
675
+ | `WeekdayOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
676
+ | `KcalOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
677
+ | `KmOptions` — `basalt-ui/format` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
678
+ | `UseBasaltFormOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
679
+ | `useFormSubmit` — `basalt-ui/forms` | deleted — no consumer outside the playground |
680
+ | `isFieldErrorEnvelope` — `basalt-ui/forms` | deleted — no consumer outside the playground |
681
+ | `FormFieldErrors` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
682
+ | `UseFormSubmitOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
683
+ | `UseFormSubmitReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
684
+ | `FormStateProvider` — `basalt-ui/forms` | deleted — no consumer outside the playground |
685
+ | `useFormState` — `basalt-ui/forms` | deleted — no consumer outside the playground |
686
+ | `FormState` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
687
+ | `FormStateProviderProps` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
688
+ | `useFieldArray` — `basalt-ui/forms` | deleted — no consumer outside the playground |
689
+ | `UseFieldArrayReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
690
+ | `FormErrorSummary` — `basalt-ui/forms` | deleted — no consumer outside the playground |
691
+ | `FormErrorSummaryProps` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
692
+ | `useFormDraft` — `basalt-ui/forms` | deleted — no consumer outside the playground |
693
+ | `DEFAULT_AUTOSAVE_DEBOUNCE_MS` — `basalt-ui/forms` | deleted — no consumer outside the playground |
694
+ | `UseFormDraftOptions` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
695
+ | `UseFormDraftReturn` — `basalt-ui/forms` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
696
+ | `ActionGroup` — `basalt-ui/controls` | deleted — no consumer outside the playground |
697
+ | `OverflowMenu` — `basalt-ui/controls` | deleted — no consumer outside the playground |
698
+ | `MOBILE_GLOBAL_BAR_MAX` — `basalt-ui/controls` | deleted — no consumer outside the playground |
699
+ | `barActionMobile` — `basalt-ui/controls` | deleted — no consumer outside the playground |
700
+ | `globalActionMobile` — `basalt-ui/controls` | deleted — no consumer outside the playground |
701
+ | `BarActionItem` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
702
+ | `BarActionMenu` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
703
+ | `BarActionCustom` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
704
+ | `ActionGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
705
+ | `OverflowMenuProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
706
+ | `formatAge` — `basalt-ui/controls` | deleted — no consumer outside the playground |
707
+ | `AGE_REFRESH_MS` — `basalt-ui/controls` | deleted — no consumer outside the playground |
708
+ | `SyncButtonProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
709
+ | `ControlGroup` — `basalt-ui/controls` | deleted — no consumer outside the playground |
710
+ | `ControlGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
711
+ | `FilterSetProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
712
+ | `RangeCustomPickerProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
713
+ | `RangeFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
714
+ | `CompareFilter` — `basalt-ui/controls` | deleted — no consumer outside the playground |
715
+ | `COMPARE_VALUES` — `basalt-ui/controls` | deleted — no consumer outside the playground |
716
+ | `CompareFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
717
+ | `CompareValue` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
718
+ | `FilterOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
719
+ | `SelectFilterEnumProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
720
+ | `SelectFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
721
+ | `SelectFilterStringProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
722
+ | `MultiSelectFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
723
+ | `NumberFilterOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
724
+ | `NumberFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
725
+ | `SearchFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
726
+ | `ToggleFilterProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
727
+ | `ViewTabsOption` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
728
+ | `ViewTabsProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
729
+ | `PanelRow` — `basalt-ui/controls` | deleted — no consumer outside the playground |
730
+ | `PanelRowProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
731
+ | `SliderControl` — `basalt-ui/controls` | deleted — no consumer outside the playground |
732
+ | `SliderControlProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
733
+ | `FormSection` — `basalt-ui/controls` | deleted — no consumer outside the playground |
734
+ | `FormActions` — `basalt-ui/controls` | deleted — no consumer outside the playground |
735
+ | `FormSectionProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
736
+ | `FormSectionSlot` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
737
+ | `FormRowProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
738
+ | `FormRowSlot` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
739
+ | `FormGroupProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
740
+ | `FormActionsProps` — `basalt-ui/controls` | deleted — type only; derive it with `ComponentProps`/`Parameters` |
741
+ | `RangeCustomPickerProps` — `basalt-ui/controls-dates` | deleted — duplicate of ./controls; one import path per symbol |
742
+
743
+ 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.
744
+
745
+ ### CLI (`w9/cli`)
746
+
747
+ `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.
748
+
749
+ `basalt-ui doctor` gains three hard checks, each failure printing a `Fix:` line:
750
+
751
+ - `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`.
752
+ - `retired-lint-rules`: `.oxlintrc.json` (and local `extends`) sets a `basalt/<id>` the installed plugin no longer registers; delete the entry.
753
+ - `dropped-subpaths`: a source file under `basalt.roots` imports a `basalt-ui/<subpath>` the install's `exports` lacks; reported as `file:line`.
754
+
755
+ 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.
756
+
757
+ - `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).
758
+ - `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.
759
+ - `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`.
760
+ - `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.
761
+ - 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).
762
+
763
+ ### Charts
764
+
765
+ 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.
766
+
767
+ 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`.
768
+
769
+ | Old import | New | Why |
770
+ | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
771
+ | `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 |
772
+ | `basalt-ui/charts`: `AreaClosed` | `areaY` (`@tanstack/charts/area`) in `marks`, or `ChartSeries.area` | visx is gone: no dependency, peer or re-export |
773
+ | `basalt-ui/charts`: `AreaStack` | `StackedArea`, or `areaY` + `stack` (`@tanstack/charts/stack`) in `marks` | visx is gone: no dependency, peer or re-export |
774
+ | `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 |
775
+ | `basalt-ui/charts`: `Bar` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
776
+ | `basalt-ui/charts`: `BarStack` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
777
+ | `basalt-ui/charts`: `BarGroup` | `Bars`, or `barY` (`@tanstack/charts/bar`, plus `stack`) in `marks` | visx is gone: no dependency, peer or re-export |
778
+ | `basalt-ui/charts`: `Line` | `ruleX`/`ruleY` (`@tanstack/charts/rule`), `link` (`@tanstack/charts/link`) or `refLines` | visx is gone: no dependency, peer or re-export |
779
+ | `basalt-ui/charts`: `Pie` | `Donut` | visx is gone: no dependency, peer or re-export |
780
+ | `basalt-ui/charts`: `Group` | deleted; marks carry their own position | visx is gone: no dependency, peer or re-export |
781
+ | `basalt-ui/charts`: `GridRows` | deleted; `AxisConfig.grid` | visx is gone: no dependency, peer or re-export |
782
+ | `basalt-ui/charts`: `GridColumns` | deleted; `AxisConfig.grid` | visx is gone: no dependency, peer or re-export |
783
+ | `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 |
784
+ | `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 |
785
+ | `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 |
786
+ | `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 |
787
+ | `basalt-ui/charts`: `curveMonotoneX` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
788
+ | `basalt-ui/charts`: `curveLinear` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
789
+ | `basalt-ui/charts`: `curveCatmullRom` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
790
+ | `basalt-ui/charts`: `curveStep` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
791
+ | `basalt-ui/charts`: `curveStepAfter` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
792
+ | `basalt-ui/charts`: `curveStepBefore` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
793
+ | `basalt-ui/charts`: `curveBasis` | `ChartSeries.curve`; `d3Curve` from `@tanstack/charts/d3/shape` inside `marks` | visx is gone: no dependency, peer or re-export |
794
+ | `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 |
795
+ | `basalt-ui/charts`: `ZonedLineProps` | `LinesProps` | merged with `MultiLine` |
796
+ | `basalt-ui/charts`: `ZonedLineThreshold` | `Threshold` | renamed |
797
+ | `basalt-ui/charts`: `ZonedLineRefLine` | `RefLine` | one reference-line type for every kind |
798
+ | `basalt-ui/charts`: `BarsRefLine` | `RefLine` | one reference-line type for every kind |
799
+ | `basalt-ui/charts`: `MultiLine` | `Lines` | merged with `ZonedLine` |
800
+ | `basalt-ui/charts`: `MultiLineProps` | `LinesProps` | merged with `ZonedLineProps` |
801
+ | `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) |
802
+ | `basalt-ui/charts`: `BarsProps` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
803
+ | `basalt-ui/charts`: `BarsBar` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
804
+ | `basalt-ui/charts`: `BarsLine` | kept, reshaped with `Bars` | contract change (V2-SPEC § 9.3) |
805
+ | `basalt-ui/charts`: `StackedArea` | `StackedArea`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
806
+ | `basalt-ui/charts`: `StackedAreaProps` | `StackedArea`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
807
+ | `basalt-ui/charts`: `DualPanel` | `DualPanel`, rebuilt on this engine (compiled through `composeViews`) | rebuilt in W5 (props in § 9.3) |
808
+ | `basalt-ui/charts`: `DualPanelProps` | `DualPanel`, rebuilt on this engine (compiled through `composeViews`) | rebuilt in W5 (props in § 9.3) |
809
+ | `basalt-ui/charts`: `MirroredBars` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
810
+ | `basalt-ui/charts`: `MirroredBarsProps` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
811
+ | `basalt-ui/charts`: `MirroredBarPane` | `MirroredBars`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
812
+ | `basalt-ui/charts`: `BandStrip` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
813
+ | `basalt-ui/charts`: `BandStripProps` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
814
+ | `basalt-ui/charts`: `BandStripSeries` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
815
+ | `basalt-ui/charts`: `BandSpan` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
816
+ | `basalt-ui/charts`: `BandFold` | `BandStrip`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
817
+ | `basalt-ui/charts`: `Donut` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
818
+ | `basalt-ui/charts`: `DonutProps` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
819
+ | `basalt-ui/charts`: `DonutDatum` | `Donut`, rebuilt on this engine | rebuilt in W5 (props in § 9.3) |
820
+ | `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 |
821
+ | `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 |
822
+ | `basalt-ui/charts`: `LineSparkline` | `Sparkline`, rebuilt on this engine (`mark: 'line' \| 'bar'`) | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
823
+ | `basalt-ui/charts`: `BarSparkline` | `Sparkline`, rebuilt on this engine (`mark: 'line' \| 'bar'`) | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
824
+ | `basalt-ui/charts`: `LineSparklineProps` | `SparklineProps`, rebuilt on this engine | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
825
+ | `basalt-ui/charts`: `BarSparklineProps` | `SparklineProps`, rebuilt on this engine | the two sparklines merge; rebuilt in W5 (props in § 9.3) |
826
+ | `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) |
827
+ | `basalt-ui/charts`: `CartesianChartProps` | kept names, new contract | V2-SPEC § 9.2 |
828
+ | `basalt-ui/charts`: `AxisConfig` | kept names, new contract | V2-SPEC § 9.2 |
829
+ | `basalt-ui/charts`: `PlotContext` | kept names, new contract | V2-SPEC § 9.2 |
830
+ | `basalt-ui/charts`: `resolveAxisDomain` | internal | the rung owns the y domains |
831
+ | `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 |
832
+ | `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 |
833
+ | `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 |
834
+ | `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 |
835
+ | `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 |
836
+ | `basalt-ui/charts`: `ResponsiveChartHeight` | kept | unchanged |
837
+ | `basalt-ui/charts`: `ChartState` | kept; the `isPending` alias is deleted (use `state={{ pending }}`) | one state type |
838
+ | `basalt-ui/charts`: `ChartCenter` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
839
+ | `basalt-ui/charts`: `ChartPending` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
840
+ | `basalt-ui/charts`: `ChartEmpty` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
841
+ | `basalt-ui/charts`: `ChartError` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
842
+ | `basalt-ui/charts`: `ChartCenterProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
843
+ | `basalt-ui/charts`: `ChartPendingProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
844
+ | `basalt-ui/charts`: `ChartEmptyProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
845
+ | `basalt-ui/charts`: `ChartErrorProps` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
846
+ | `basalt-ui/charts`: `ResolvedChartState` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
847
+ | `basalt-ui/charts`: `resolveChartState` | internal to the host and `ChartCard`; render a state with the `state` prop | the host owns the placeholders |
848
+ | `basalt-ui/charts`: `ChartCard` | kept | unchanged |
849
+ | `basalt-ui/charts`: `ChartCardProps` | kept | unchanged |
850
+ | `basalt-ui/charts`: `ChartCardSlot` | kept | unchanged |
851
+ | `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 |
852
+ | `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 |
853
+ | `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 |
854
+ | `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 |
855
+ | `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 |
856
+ | `basalt-ui/charts`: `ChartCursorScope` | the `cursorGroup` prop | no provider: one controller per group in a module map |
857
+ | `basalt-ui/charts`: `ChartCursorScopeProps` | the `cursorGroup` prop | no provider: one controller per group in a module map |
858
+ | `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 |
859
+ | `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 |
860
+ | `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 |
861
+ | `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 |
862
+ | `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 |
863
+ | `basalt-ui/charts`: `useChartCursor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
864
+ | `basalt-ui/charts`: `ChartCursor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
865
+ | `basalt-ui/charts`: `CursorAnchor` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
866
+ | `basalt-ui/charts`: `DomainKind` | deleted; TanStack focus plus basalt's cursor resolution | the engine owns the pointer and keyboard model |
867
+ | `basalt-ui/charts`: `CursorResolution` | kept (`'exact' \| 'nearest' \| 'leading'`) | unchanged |
868
+ | `basalt-ui/charts`: `Crosshair` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
869
+ | `basalt-ui/charts`: `SeriesDot` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
870
+ | `basalt-ui/charts`: `HoverOverlay` | deleted; the engine's crosshair, focus ring and keyboard focus | the engine owns the overlay |
871
+ | `basalt-ui/charts`: `AxisBottomDate` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
872
+ | `basalt-ui/charts`: `AxisBottomNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
873
+ | `basalt-ui/charts`: `AxisLeftNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
874
+ | `basalt-ui/charts`: `AxisRightNumeric` | deleted; `AxisConfig` (`y`, `y2`), `xTicks`, `formatX` | the engine draws the guides |
875
+ | `basalt-ui/charts`: `ZoneRects` | deleted; `zones` / `xZones` props take `ZoneSpec` / `XZoneSpec`, which are kept | the rung compiles zones |
876
+ | `basalt-ui/charts`: `XZoneRects` | deleted; `zones` / `xZones` props take `ZoneSpec` / `XZoneSpec`, which are kept | the rung compiles zones |
877
+ | `basalt-ui/charts`: `AreaGradient` | `ChartSeries.area` | the engine owns SVG resources |
878
+ | `basalt-ui/charts`: `areaFillUrl` | `ChartSeries.area` | the engine owns SVG resources |
879
+ | `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 |
880
+ | `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 |
881
+ | `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 |
882
+ | `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 |
883
+ | `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 |
884
+ | `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 |
885
+ | `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 |
886
+ | `basalt-ui/charts`: `CartesianTooltipConfig` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
887
+ | `basalt-ui/charts`: `CartesianTooltipRowContext` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
888
+ | `basalt-ui/charts`: `BandTooltipConfig` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
889
+ | `basalt-ui/charts`: `BandTooltipRowContext` | `ChartTooltipConfig` (one type for every kind) | `label` / `prependRows` / `extraRows` / `TooltipRow` collapse into `tooltip.rows` |
890
+ | `basalt-ui/charts`: `ChartLegend` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
891
+ | `basalt-ui/charts`: `LegendEntry` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
892
+ | `basalt-ui/charts`: `deriveLegend` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
893
+ | `basalt-ui/charts`: `deriveTooltipRows` | internal; an external legend is `legend.placement: 'header'` | legend and tooltip rows derive from `series` inside the host |
894
+ | `basalt-ui/charts`: `ChartLegendConfig` | kept; `LegendPlacement` is inlined | unchanged shape |
895
+ | `basalt-ui/charts`: `LegendPlacement` | inlined in `ChartLegendConfig` (`'top' \| 'bottom' \| 'header'`) | one legend type |
896
+ | `basalt-ui/charts`: `ChartSeries` | kept; absorbs `SeriesStyle`, plus `area` | one series descriptor |
897
+ | `basalt-ui/charts`: `SeriesStyle` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
898
+ | `basalt-ui/charts`: `SeriesMark` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
899
+ | `basalt-ui/charts`: `SeriesDash` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
900
+ | `basalt-ui/charts`: `SeriesCurve` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
901
+ | `basalt-ui/charts`: `SeriesRole` | folded into `ChartSeries` (`ChartSeries['curve']`, …) | one series descriptor |
902
+ | `basalt-ui/charts`: `curveFor` | internal | `ChartSeries.curve` is the public seam |
903
+ | `basalt-ui/charts`: `foldBands` | internal | returns with W5 `BandStrip` |
904
+ | `basalt-ui/charts`: `useChartSize` | deleted; the host measures the width | the host owns sizing |
905
+ | `basalt-ui/charts`: `UseChartSizeResult` | deleted; the host measures the width | the host owns sizing |
906
+ | `basalt-ui/charts`: `ChartSize` | deleted; the host measures the width | the host owns sizing |
907
+ | `basalt-ui/charts`: `autoMargin` | deleted | TanStack's measured guides own the margins |
908
+ | `basalt-ui/charts`: `probeAxisLabels` | deleted | TanStack's measured guides own the margins |
909
+ | `basalt-ui/charts`: `AutoMarginInput` | deleted | TanStack's measured guides own the margins |
910
+ | `basalt-ui/charts`: `measureText` | deleted | TanStack's measured guides own the margins |
911
+ | `basalt-ui/charts`: `maxTextWidth` | deleted | TanStack's measured guides own the margins |
912
+ | `basalt-ui/charts`: `smartTicks` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
913
+ | `basalt-ui/charts`: `smartTicksEvery` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
914
+ | `basalt-ui/charts`: `xLabelPxFor` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
915
+ | `basalt-ui/charts`: `autoXLabelRotate` | deleted; `xTicks` (a count or the values) plus `tickLabels.thin`; labels never rotate | the engine thins colliding labels |
916
+ | `basalt-ui/charts`: `chartMargin` | deleted; margins are measured, band kinds own their top inset | the engine owns the margins |
917
+ | `basalt-ui/charts`: `ChartMargin` | deleted; margins are measured, band kinds own their top inset | the engine owns the margins |
918
+ | `basalt-ui/charts`: `fmtAxisDate` | deleted (also from `basalt-ui/format`); `formatX` and `tooltip.formatHeader` default to the date formats | one home for formatters |
919
+ | `basalt-ui/charts`: `fmtTooltipDate` | deleted (also from `basalt-ui/format`); `formatX` and `tooltip.formatHeader` default to the date formats | one home for formatters |
920
+ | `basalt-ui/charts`: `fmtCompact` | deleted; `AxisConfig.format` defaults to compact numbers | one home for formatters |
921
+ | `basalt-ui/charts`: `FmtCompactOptions` | deleted; `AxisConfig.format` defaults to compact numbers | one home for formatters |
922
+ | `basalt-ui/charts`: `fmtPercent` | `percent` from `basalt-ui/format` | one home for formatters |
923
+ | `basalt-ui/charts`: `FmtPercentOptions` | `percent` from `basalt-ui/format` | one home for formatters |
924
+ | `basalt-ui/charts`: `fmtCurrency` | `money` from `basalt-ui/format` | one home for formatters |
925
+ | `basalt-ui/charts`: `FmtCurrencyOptions` | `money` from `basalt-ui/format` | one home for formatters |
926
+ | `basalt-ui/charts`: `fmtInt` | `integer` from `basalt-ui/format` | one home for formatters |
927
+ | `basalt-ui/charts`: `formatters` | deleted; `basalt-ui/format` | one home for formatters |
928
+ | `basalt-ui/charts`: `VX` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
929
+ | `basalt-ui/charts`: `alpha` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
930
+ | `basalt-ui/charts`: `buildPaletteCss` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
931
+ | `basalt-ui/charts`: `seriesTokens` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
932
+ | `basalt-ui/charts`: `defineSeries` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
933
+ | `basalt-ui/charts`: `groupTokens` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
934
+ | `basalt-ui/charts`: `ColorPair` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
935
+ | `basalt-ui/charts`: `SeriesMap` | `basalt-ui/tokens` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
936
+ | `basalt-ui/charts`: `SeriesKey` | `basalt-ui/tokens` or `basalt-ui` (a move: the name is unchanged) | `basalt-ui/charts` re-exports no tokens |
937
+ | `basalt-ui/charts`: `VxThemeProvider` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
938
+ | `basalt-ui/charts`: `useVxTheme` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
939
+ | `basalt-ui/charts`: `VxTheme` | deleted; every chart paint is a `var(--vx-*)` reference | no theme context |
940
+
941
+ ### Subpaths, peers and gates (W3 gates)
942
+
943
+ | 1.41 import | 2.0 | Reason |
944
+ | ---------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------- |
945
+ | `basalt-ui/agent-chat` | `basalt-ui/agent` | the chat UI folds into `./agent`; `motion` is subpath-required there |
946
+ | `basalt-ui/notifications` | `basalt-ui/commands` | no new peer: `BasaltProvider` mounts `Notifications`, `ModalsProvider`, `Spotlight` |
947
+ | `basalt-ui/router-tanstack` (nav half) | `basalt-ui` | nav lives in the root barrel |
948
+ | `basalt-ui/router-tanstack` (store half) | `basalt-ui/state` | stores live with `field` and the search store |
949
+ | `basalt-ui/data/table` | `basalt-ui/table` | renamed; `@tanstack/react-table` is subpath-required |
950
+ | `basalt-ui/data/virtual` | deleted | 0 imports across the fleet |
951
+ | `basalt-ui/guard` | deleted | CLI-internal |
952
+ | `basalt-ui/theme-lab` | deleted | provider-mounted in dev |
953
+ | `basalt-ui/tokens.css` | `basalt-ui tokens:css` (CLI) | weatherorb 1.30 and rollhook 1.36 only |
954
+ | `basalt-ui/llms.txt`, `basalt-ui/package.json` | deleted from `exports` | 0 imports; both files stay in the tarball |
955
+
956
+ Peers: `react`, `react-dom`, `@mantine/{core,hooks,modals,notifications,spotlight}`,
957
+ `@tanstack/{react-router,react-query}` and the three `@fontsource-variable/*` are now **required**
958
+ (no longer `optional`). `@ai-sdk/provider` (`./agent`) and `dayjs` (`./controls-dates`) are new
959
+ optional, subpath-required peers.
960
+
961
+ ### Provider and wiring
962
+
963
+ | Old import | New / deleted | Why |
964
+ | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
965
+ | `BasaltProvider` `children`, `onError`, `connectivity` props | `router` (required), `telemetry?`, `fallback?`; `theme` defaults to `createBasaltTheme()` | the provider mounts the router and every overlay (V2-SPEC § 2) |
966
+ | `createBasaltQueryClient` (`basalt-ui`) | `createBasaltRouter({ routeTree, context?, query? })` | one QueryClient per router, 1.x defaults kept, `query` merges over them |
967
+ | `BasaltErrorBoundary`, `BasaltErrorBoundaryProps` | deleted: `BasaltProvider fallback` + telemetry `render.error`; routes get `defaultErrorComponent` | the provider mounts the root boundary |
968
+ | `BasaltErrorContext` | `BasaltEvent` (type) | `onError` is replaced by the `telemetry` seam (V2-SPEC § 7) |
969
+ | `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 |
970
+ | `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 |
971
+ | `ConnectivityProvider`, `ConnectivityIndicator`, `useConnectivity` and their types | deleted | no consumer; the auto-mount is gone |
972
+ | `toErrorMessage`, `errorStatus` (`basalt-ui`) | deleted | no consumer outside the playground |
973
+ | `queryClient` seed `agent/templates/query-client.ts.tpl` | deleted; `__root.tpl` seeds `createRootRouteWithContext<BasaltRouterContext>()` | the router owns the client |
974
+ | `@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 |
975
+
976
+ ### Router bridge (`basalt-ui/router-tanstack`)
977
+
978
+ | Old import | New / deleted | Why |
979
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
980
+ | `defineNav`, `navGroup`, `navTarget`, `flattenNav`, `useBasaltNav`, `NavItemId` | move to `basalt-ui` | `./router-tanstack` folds into `.` |
981
+ | `createSearchStore` | `basalt-ui/state` | the store half folds into `./state` |
982
+ | `field` and the 20 `Field`/`Range*`/`Search*` types re-exported here | `basalt-ui/state` (same names) | one import path per symbol |
983
+ | `defineNav(config)` without the `Register` augmentation | compile error: the parameter becomes `'basalt: declare Register { router }'` | the definition validated nothing (V2-SPEC § 3) |
984
+ | `useRouterBreadcrumbs`, `BasaltBreadcrumb`, `BasaltNav` | deleted | shell-internal / unnamed |
985
+ | `NavItemMeta`, `NavGroupMeta`, `AnyNavItem`, `AnyNavGroup`, `AnyNavLink`, `FlatNavItem`, `NavConfig`, `NavGroupId`, `NavTabId`, `NavIndex`, `UseNavOptions`, `NavBinding`, `NavAnchor`, `NavAnchorProps`, `NavMobilePlacement` | deleted | no consumer names them; derive with `ComponentProps` / `Parameters` |
986
+ | `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) |
987
+
84
988
  ## Unreleased
85
989
 
86
990
  _Nothing yet. Author the next section under this heading as `## Unreleased — <title>`; the
87
991
  release renames it and opens a new one here._
88
992
 
993
+ ## 2.0.0
994
+
995
+ _Nothing to migrate in this release._
996
+
997
+ ## 1.41.0 — the managed block moves to AGENTS.md
998
+
999
+ **Changed: `init` and `sync` splice the `<!-- basalt:begin … -->` block into `AGENTS.md`, not
1000
+ `CLAUDE.md`.** Claude Code loads a repo-root `AGENTS.md` directly, but any `CLAUDE.md` in or above
1001
+ the working directory suppresses it — so the block can no longer be the reason a `CLAUDE.md` exists.
1002
+ The shipped template is renamed `agent/templates/AGENTS-block.md.tpl`, and the manifest key moves
1003
+ from `CLAUDE.md` to `AGENTS.md`.
1004
+
1005
+ **Migration is automatic — run `basalt-ui sync` once.** If `CLAUDE.md` carries a basalt block:
1006
+
1007
+ - the block is cut out of `CLAUDE.md` and spliced into `AGENTS.md` (created if missing);
1008
+ - a `CLAUDE.md` left empty, or holding only `@AGENTS.md`, is deleted; anything else in it is
1009
+ yours and stays — move it into `AGENTS.md` and delete the file, or Claude Code keeps loading
1010
+ `CLAUDE.md` instead of `AGENTS.md`;
1011
+ - a hand-edited block is carried over as it is and treated as drift (skipped, reported;
1012
+ `sync --force` restores the shipped text) — the same rule every other managed unit follows;
1013
+ - `sync --check` exits 1 until the move has happened, then 0;
1014
+ - nothing is discarded silently: if `AGENTS.md` already has a block that differs from the one in
1015
+ `CLAUDE.md`, or either file has duplicate or unterminated markers, `sync` and `sync --check` exit 1
1016
+ naming the file, and both files stay untouched until you resolve it by hand.
1017
+
1018
+ `doctor` now warns (never fails) when a project-root `CLAUDE.md` does not import `@AGENTS.md` — it
1019
+ suppresses `AGENTS.md` — or still carries a basalt block.
1020
+
89
1021
  ## 1.40.3
90
1022
 
91
1023
  _Nothing to migrate in this release._
@@ -877,7 +1809,7 @@ claim to have already done this was false. **Consumer-visible consequence:** the
877
1809
  an installed tarball carries its own version number. If it says `Unreleased`, file it.
878
1810
 
879
1811
  **§ 1.30.0 § Guards carries a corrected number**, restated here because a published measurement
880
- moved: meteo is 5 `control-outside-home` incumbents, not 0, and the fleet total is 34, not 29 — the
1812
+ moved: weatherorb is 5 `control-outside-home` incumbents, not 0, and the fleet total is 34, not 29 — the
881
1813
  zero was a failed `npx --no-install oxlint` invocation read as "no findings". The four promotions to
882
1814
  `error` are unaffected and stand as shipped; only the extended C1 pair's count changed.
883
1815
 
@@ -1073,23 +2005,23 @@ That measurement was taken 2026-09-09, with all seven consumers freshly migrated
1073
2005
  basalt built from `master`, by running `npx oxlint .` in each repo and counting by rule id — a
1074
2006
  method that failed open in one of them, see the correction under the table:
1075
2007
 
1076
- | Rule | argo | image-gen | image-share | rb | linewatch | meteo | obsidian | playground | Verdict |
1077
- | ----------------------------------------------------------------- | ---- | --------- | ----------- | --- | --------- | ----- | -------- | ---------- | ------------ |
1078
- | `basalt/provider-above-router` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1079
- | `basalt/forms-field-key` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1080
- | `basalt/query-fn-unwrap` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1081
- | `basalt/bound-control-outside-home` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
1082
- | `basalt/control-outside-home` + `raw-selection-control` (one law) | 2 | 10 | 6 | 8 | 0 | 5 | 0 | 3 | stays `warn` |
2008
+ | Rule | argo | image-gen | image-share | rb | linewatch | weatherorb | obsidian | playground | Verdict |
2009
+ | ----------------------------------------------------------------- | ---- | --------- | ----------- | --- | --------- | ---------- | -------- | ---------- | ------------ |
2010
+ | `basalt/provider-above-router` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2011
+ | `basalt/forms-field-key` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2012
+ | `basalt/query-fn-unwrap` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2013
+ | `basalt/bound-control-outside-home` | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | → `error` |
2014
+ | `basalt/control-outside-home` + `raw-selection-control` (one law) | 2 | 10 | 6 | 8 | 0 | 5 | 0 | 3 | stays `warn` |
1083
2015
 
1084
- **Corrected at 1.30.1: meteo is 5, not 0 — the fleet total is 34, not 29.** The zero published at
1085
- 1.30.0 was an artifact: meteo has no local oxlint binary, so `npx --no-install oxlint` failed there
2016
+ **Corrected at 1.30.1: weatherorb is 5, not 0 — the fleet total is 34, not 29.** The zero published at
2017
+ 1.30.0 was an artifact: weatherorb has no local oxlint binary, so `npx --no-install oxlint` failed there
1086
2018
  with a package error and the counting pipeline read that failure as "no findings" — the same
1087
2019
  silent-zero shape this file already warns about for `check-theme`'s fabricated roots, arrived at from the other side. The
1088
2020
  five are real (`display-controls.tsx:258`, `stack-editor.tsx:301/323/337`, `forecast-tab.tsx:151`),
1089
2021
  and re-measuring with a guaranteed-present binary is what found them. **The DECISION is unchanged**:
1090
- all four promoted rules re-measured at zero in every repo including meteo, so those four promotions
2022
+ all four promoted rules re-measured at zero in every repo including weatherorb, so those four promotions
1091
2023
  stand exactly as shipped — only the extended pair's count moved. A count taken through a repo's own
1092
- `lint` script rather than a bare oxlint invocation is not a measurement; meteo's `lint` is
2024
+ `lint` script rather than a bare oxlint invocation is not a measurement; weatherorb's `lint` is
1093
2025
  `basalt-ui check-theme` alone and never runs oxlint at all.
1094
2026
 
1095
2027
  **The four promotions cost nothing to take.** They were measured at zero, in every consumer, before
@@ -1146,7 +2078,7 @@ A patch, one export's TYPE only. Nothing renamed, nothing removed.
1146
2078
  - **`unwrap` strips `null`/`undefined` from a union-typed Eden response again** — the single
1147
2079
  conditional signature 1.29.1 landed still inferred `TData` off `Envelope<infer TData>`, and an Eden
1148
2080
  Treaty response is a UNION of envelopes (`{ data: T; error: null } | { data: null; error:
1149
- EdenFetchError }`), not one envelope with a nullable `data`; inferring through the wrapper type
2081
+ EdenFetchError }`), not one envelope with a nullable `data`; inferring through the wrapper type
1150
2082
  read `T | null` at every Eden call site. `UnwrapResult` now infers the raw `data` field and wraps
1151
2083
  it in `NonNullable`, which distributes over a union `R` — `unwrap(await api.x.get())` resolves to
1152
2084
  `T` again, with no `| null`. Runtime unchanged.
@@ -1220,7 +2152,7 @@ annotation and rationale):
1220
2152
  - `QueryStateVariant` and the `variant` prop on `QueryState`/`LoadingState`/`ErrorState`/`EmptyState`
1221
2153
  — use `QueryStateTier` and `tier`. **Identical values, identical branch behaviour**, verified by
1222
2154
  diffing `src/dashboard/query-state.tsx` at `v1.25.0` against 1.29.2: the union is `'page' |
1223
- 'section'` in both, and `'section'` takes the same bare/compact branch in both. A pure rename, so a
2155
+ 'section'` in both, and `'section'` takes the same bare/compact branch in both. A pure rename, so a
1224
2156
  `variant="section"` becomes `tier="section"` with nothing to eyeball afterwards.
1225
2157
  `QueryStateTier`'s own JSDoc says "`'section'` meant two different things across the two
1226
2158
  spellings" — that is the NAMING rationale for picking `tier` (audit B #19), not a behaviour
@@ -1262,7 +2194,7 @@ annotation and rationale):
1262
2194
 
1263
2195
  **On notice for 1.30.0** — a public export with exactly one consumer (the playground) as of this
1264
2196
  audit. Adopt-or-delete: gains a real consumer by 1.30.0 or is removed. Not a promise either way;
1265
- record your adoption in `docs/ARGO-MIGRATION-LEARNINGS.md` if you pick one up.
2197
+ say so in an issue if you pick one up.
1266
2198
 
1267
2199
  - **Threads/agent-chat composite tier**: `ThreadWorkspace`, `ThreadFeed`, `ThreadFeedRow`,
1268
2200
  `ThreadDetailPanel`, `ThreadOutcomeCard`, `ThreadsStoreAdapter`, `createThreadsStore`,
@@ -1471,7 +2403,7 @@ What is new, one line each — nothing here renames or removes anything:
1471
2403
  FLOORS to 0.75×, shrinks the crosshair dot, narrows the tooltip 140 → 110, and caps the legend at
1472
2404
  two entries with a `+N more` rollup. **This moves rendering, but only below 480px of measured
1473
2405
  width** — nothing at desktop width changes. Opt back out per chart with an explicit
1474
- `legend.maxRows` / `margin` override. `docs/CHARTS-SPEC.md` §8.
2406
+ `legend.maxRows` / `margin` override. `docs/archive/CHARTS-SPEC.md` §8.
1475
2407
  - **`xLabelRotate` accepts `0`**, and left UNSET now auto-rotates to 45 at the phone tier when the
1476
2408
  measured labels cannot fit three ticks side by side. `0` is the documented opt-out. Also on every
1477
2409
  rotated axis, at every width: the LEFT margin now clears the rotated label's leftward projection
@@ -1480,7 +2412,7 @@ What is new, one line each — nothing here renames or removes anything:
1480
2412
  §1's measured-gutter law, so a rotated or a densely-labelled axis will lay out slightly
1481
2413
  differently; an explicit `margin` / `xTicks` / `xTickValues` still wins.
1482
2414
  - **`SeriesStyle.curve`** (`basalt-ui/charts`) — `'monotone' | 'linear' | 'step' | 'stepAfter' |
1483
- 'stepBefore'`, plus the `curveFor` mapper and the newly re-exported `curveStep`/`curveStepBefore`.
2415
+ 'stepBefore'`, plus the `curveFor` mapper and the newly re-exported `curveStep`/`curveStepBefore`.
1484
2416
  Default `'monotone'`, which is what every kind hard-coded, so an omitted `curve` moves nothing.
1485
2417
  Honoured by `MultiLine`, `DualPanel`, `ZonedLine`, `StackedArea` and `BarsLine.curve`. Two of
1486
2418
  those read ONE curve for a whole shape rather than one per series: `ZonedLine` takes the PRIMARY
@@ -1580,7 +2512,7 @@ What is new, one line each — nothing here renames or removes anything:
1580
2512
  `QueryStateTier` is the new type name; `QueryStateVariant` stayed exported as an alias through
1581
2513
  1.28.x and is **removed in 1.29.0** together with the `variant` prop (see § Consolidation).
1582
2514
  - **`WidgetHeader` and `QueryState` gained slot classes** — `classNames={{ root, title, metric,
1583
- icon }}` on the first, `classNames={{ root }}` on the second (the branch that is live). Additive.
2515
+ icon }}` on the first, `classNames={{ root }}` on the second (the branch that is live). Additive.
1584
2516
  `Section` now OMITS `classNames` from the `WidgetHeaderProps` it re-publishes, so its slot union
1585
2517
  stays exactly `root | header | body` — a `<Section classNames={{ metric: … }}>` that used to
1586
2518
  type-check (and do nothing) is now a compile error. Reach the header's own slots on a
@@ -1637,10 +2569,10 @@ icon }}` on the first, `classNames={{ root }}` on the second (the branch that is
1637
2569
  - **`overlays.confirm` / `overlays.confirmDelete`** (`basalt-ui/commands`) — the two-button dialog
1638
2570
  every consumer was registering as a `defineOverlays` entry with its own button pair, now
1639
2571
  registry-free: `confirm({ title, body?, confirmLabel?, cancelLabel?, danger?, onConfirm,
1640
- onCancel? })` resolves `true`/`false` and fires exactly one callback, whichever exit the user takes
2572
+ onCancel? })` resolves `true`/`false` and fires exactly one callback, whichever exit the user takes
1641
2573
  (cancel, escape, click-outside and the close button all count as `false`). `danger` paints the
1642
2574
  confirm button in the theme's derived destructive family. `confirmDelete({ subject, count?,
1643
- onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT with a named
2575
+ onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT with a named
1644
2576
  `[basalt] overlays.confirm: …` error when the `@mantine/modals` peer is absent, or when no
1645
2577
  `ModalsProvider` is live — previously either returned a promise nothing would ever settle, because
1646
2578
  the imperative API is a window event bus with nothing subscribed. `@mantine/modals` stays lazily
@@ -1711,7 +2643,7 @@ onConfirm })` is the counted one-liner over it ("Delete 3 items?"). Both REJECT
1711
2643
  - **Still subpath-only.** The root barrel re-exports none of this, so a consumer without
1712
2644
  `@mantine/form` is unaffected by importing `basalt-ui`.
1713
2645
  - **Mobile "More" sheet rows now 40px with the sidebar's own insets** — `--vx-space-mobile-nav-row-
1714
- height` 44 → 40 (WCAG 2.5.5 AA touch floor, not the AAA figure the bar's own `mobileNavBarHeight`
2646
+ height` 44 → 40 (WCAG 2.5.5 AA touch floor, not the AAA figure the bar's own `mobileNavBarHeight`
1715
2647
  still holds to). The rows themselves no longer force a bespoke touch padding over the theme's
1716
2648
  `NavLink` styling; they now render with the SAME `--vx-space-row-inset-y`/`-x` padding and
1717
2649
  `VX.text.md` the desktop sidebar row does. A nested (child) row gains the sidebar's own child
@@ -2703,7 +3635,7 @@ homes rather than shipped repo-wide. `basalt/shadow-basalt-export` gains a renam
2703
3635
  → `StatCard`), so a fork that RENAMED the export is visible too. It stays a permanent advisory
2704
3636
  `warn`.
2705
3637
 
2706
- **`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).
3638
+ **`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).
2707
3639
 
2708
3640
  **`SURFACES` gains `pluginRules`** (`src/surfaces.ts`, internal — not a published subpath): every
2709
3641
  doctrine surface names the oxlint rules that enforce it, every registered rule maps to exactly one
@@ -2796,7 +3728,7 @@ exact route is never visited still lights on a descendant route.
2796
3728
  `$1294.9k ▲18.9%` rendered as `$129… ▲18.9%`, and truncating the number to protect the delta about
2797
3729
  that number is the wrong way round. A short value still keeps its badge on the line.
2798
3730
  - **`StatCard`'s `actions` slot is the 24px tier now, not 30px.** `CtlSlot` gained `tier?: 'ctl' |
2799
- 'widget'` (default `'ctl'`, so no existing call site changes), and `StatCard` mounts its header slot
3731
+ 'widget'` (default `'ctl'`, so no existing call site changes), and `StatCard` mounts its header slot
2800
3732
  at `'widget'` — the `size="icon"` step `--vx-space-control-height-widget` has always named as
2801
3733
  "`WidgetHeader tier="widget"` actions". A raw `ActionIcon` there rendered at the 30px `ctl` tier
2802
3734
  inside a 28px header row and grew it to 30, so a KPI card WITH a kebab sat 2px below the card
@@ -3078,7 +4010,7 @@ The shared choreography lives in an internal `useBandPlot` — **not exported**,
3078
4010
  the kinds' contract with each other, not a public seam.
3079
4011
 
3080
4012
  **`MirroredBars` reverses a recorded decision, and the recorded reason for it was wrong.** The old
3081
- entry in `docs/CHARTS-SPEC.md` read _"no two-bar-pane kind with independent per-pane scales"_, with
4013
+ entry in `docs/archive/CHARTS-SPEC.md` read _"no two-bar-pane kind with independent per-pane scales"_, with
3082
4014
  _"a second consumer asks"_ as its trigger. That trigger never fired. Round 4 framed the blocker as
3083
4015
  independent SCALES; `DualPanel` already had `topYDomain`/`bottomYDomain`, so that was never it. The
3084
4016
  real blockers are that `DualPanel`'s top pane is a LINE pane and its bottom takes one SIGNED
@@ -3388,7 +4320,7 @@ with the whole lint half off).
3388
4320
 
3389
4321
  | Surface | Note |
3390
4322
  | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
3391
- | `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 |
4323
+ | `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 |
3392
4324
  | `basalt.include: [...]` | scan a named file outside `roots` — and the only route to a `.json`, which is never blanket-scanned |
3393
4325
  | `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 |
3394
4326
  | `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 |