basalt-ui 1.41.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (914) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +535 -518
  3. package/MIGRATING.md +945 -37
  4. package/README.md +171 -366
  5. package/agent/rules/basalt-batteries.md +19 -74
  6. package/agent/rules/basalt-charts.md +21 -95
  7. package/agent/rules/basalt-controls.md +23 -131
  8. package/agent/rules/basalt-mantine.md +26 -99
  9. package/agent/rules/basalt-state.md +21 -103
  10. package/agent/rules/basalt-tokens.md +33 -114
  11. package/agent/skills/basalt-app/SKILL.md +229 -72
  12. package/agent/skills/basalt-charts/SKILL.md +23 -57
  13. package/agent/skills/basalt-design/SKILL.md +12 -70
  14. package/agent/templates/AGENTS-block.md.tpl +16 -26
  15. package/agent/templates/DESIGN.md.tpl +1 -1
  16. package/agent/templates/__root.tpl +9 -16
  17. package/agent/templates/main.tpl +21 -0
  18. package/agent/templates/nav.tpl +18 -0
  19. package/configs/oxlint-basalt.json +4 -10
  20. package/configs/oxlint-plugin.js +465 -844
  21. package/configs/oxlint-plugin.test.ts +661 -709
  22. package/configs/oxlint.json +10 -2
  23. package/dist/agent/ai-sdk-transport.d.ts +19 -7
  24. package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
  25. package/dist/agent/ai-sdk-transport.js +10 -7
  26. package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
  27. package/dist/agent/chat/composer.d.ts.map +1 -0
  28. package/dist/{agent-chat → agent/chat}/composer.js +10 -9
  29. package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
  30. package/dist/agent/chat/message-affordances.d.ts.map +1 -0
  31. package/dist/agent/chat/relative-time.d.ts.map +1 -0
  32. package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
  33. package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
  34. package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
  35. package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
  36. package/dist/agent/chat/thread-feed.d.ts.map +1 -0
  37. package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
  38. package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
  39. package/dist/agent/chat/thread-message.d.ts.map +1 -0
  40. package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
  41. package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
  42. package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
  43. package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
  44. package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
  45. package/dist/agent/chat/tool-chip.d.ts.map +1 -0
  46. package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
  47. package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
  48. package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
  49. package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
  50. package/dist/agent/chat/virtualize.d.ts.map +1 -0
  51. package/dist/agent/error.d.ts +31 -0
  52. package/dist/agent/error.d.ts.map +1 -0
  53. package/dist/agent/error.js +18 -0
  54. package/dist/agent/history.d.ts +2 -36
  55. package/dist/agent/history.d.ts.map +1 -1
  56. package/dist/agent/history.js +0 -32
  57. package/dist/agent/id.d.ts +4 -5
  58. package/dist/agent/id.d.ts.map +1 -1
  59. package/dist/agent/index.d.ts +19 -52
  60. package/dist/agent/index.d.ts.map +1 -1
  61. package/dist/agent/index.js +10 -32
  62. package/dist/agent/outcome.d.ts +3 -14
  63. package/dist/agent/outcome.d.ts.map +1 -1
  64. package/dist/agent/outcome.js +0 -30
  65. package/dist/agent/part-list.d.ts +3 -3
  66. package/dist/agent/part-list.d.ts.map +1 -1
  67. package/dist/agent/parts.d.ts +23 -24
  68. package/dist/agent/parts.d.ts.map +1 -1
  69. package/dist/agent/run-committer.d.ts +23 -0
  70. package/dist/agent/run-committer.d.ts.map +1 -0
  71. package/dist/agent/run-committer.js +41 -0
  72. package/dist/agent/run-records.d.ts +77 -0
  73. package/dist/agent/run-records.d.ts.map +1 -0
  74. package/dist/agent/run-records.js +69 -0
  75. package/dist/agent/thread.d.ts +23 -47
  76. package/dist/agent/thread.d.ts.map +1 -1
  77. package/dist/agent/thread.js +3 -134
  78. package/dist/agent/transport.d.ts +6 -69
  79. package/dist/agent/transport.d.ts.map +1 -1
  80. package/dist/agent/transport.js +0 -18
  81. package/dist/agent/use-agent-thread-runs.d.ts +63 -26
  82. package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
  83. package/dist/agent/use-agent-thread-runs.js +202 -66
  84. package/dist/charts/BandStrip.d.ts +46 -0
  85. package/dist/charts/BandStrip.d.ts.map +1 -0
  86. package/dist/charts/BandStrip.js +151 -0
  87. package/dist/charts/Bars.d.ts +19 -0
  88. package/dist/charts/Bars.d.ts.map +1 -0
  89. package/dist/charts/Bars.js +77 -0
  90. package/dist/charts/CartesianChart.d.ts +57 -0
  91. package/dist/charts/CartesianChart.d.ts.map +1 -0
  92. package/dist/charts/CartesianChart.js +121 -0
  93. package/dist/charts/ChartCard.d.ts +34 -0
  94. package/dist/charts/ChartCard.d.ts.map +1 -0
  95. package/dist/charts/ChartCard.js +115 -0
  96. package/dist/charts/Donut.d.ts +25 -0
  97. package/dist/charts/Donut.d.ts.map +1 -0
  98. package/dist/charts/Donut.js +191 -0
  99. package/dist/charts/DualPanel.d.ts +47 -0
  100. package/dist/charts/DualPanel.d.ts.map +1 -0
  101. package/dist/charts/DualPanel.js +214 -0
  102. package/dist/charts/Heatmap.d.ts +41 -0
  103. package/dist/charts/Heatmap.d.ts.map +1 -0
  104. package/dist/charts/Heatmap.js +216 -0
  105. package/dist/charts/Lines.d.ts +11 -0
  106. package/dist/charts/Lines.d.ts.map +1 -0
  107. package/dist/charts/Lines.js +114 -0
  108. package/dist/charts/MirroredBars.d.ts +44 -0
  109. package/dist/charts/MirroredBars.d.ts.map +1 -0
  110. package/dist/charts/MirroredBars.js +190 -0
  111. package/dist/charts/Sparkline.d.ts +22 -0
  112. package/dist/charts/Sparkline.d.ts.map +1 -0
  113. package/dist/charts/Sparkline.js +129 -0
  114. package/dist/charts/StackedArea.d.ts +15 -0
  115. package/dist/charts/StackedArea.d.ts.map +1 -0
  116. package/dist/charts/StackedArea.js +46 -0
  117. package/dist/charts/box.d.ts +38 -0
  118. package/dist/charts/box.d.ts.map +1 -0
  119. package/dist/charts/box.js +72 -0
  120. package/dist/charts/card-context.d.ts +3 -0
  121. package/dist/charts/card-context.d.ts.map +1 -0
  122. package/dist/charts/card-context.js +7 -0
  123. package/dist/charts/chart-box.module.css +64 -0
  124. package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
  125. package/dist/charts/chart-card.module.css +25 -0
  126. package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
  127. package/dist/charts/chart-legend.module.css +38 -0
  128. package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
  129. package/dist/charts/compile.d.ts +62 -0
  130. package/dist/charts/compile.d.ts.map +1 -0
  131. package/dist/charts/compile.js +386 -0
  132. package/dist/charts/cursor.d.ts +50 -0
  133. package/dist/charts/cursor.d.ts.map +1 -0
  134. package/dist/charts/cursor.js +157 -0
  135. package/dist/charts/curves.d.ts +12 -0
  136. package/dist/charts/curves.d.ts.map +1 -0
  137. package/dist/charts/curves.js +86 -0
  138. package/dist/charts/donut.module.css +54 -0
  139. package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
  140. package/dist/charts/host.d.ts +17 -0
  141. package/dist/charts/host.d.ts.map +1 -0
  142. package/dist/charts/host.js +35 -0
  143. package/dist/charts/index.d.ts +18 -53
  144. package/dist/charts/index.d.ts.map +1 -1
  145. package/dist/charts/index.js +17 -189
  146. package/dist/charts/legend.d.ts +23 -0
  147. package/dist/charts/legend.d.ts.map +1 -0
  148. package/dist/charts/legend.js +160 -0
  149. package/dist/charts/marks.d.ts +25 -0
  150. package/dist/charts/marks.d.ts.map +1 -0
  151. package/dist/charts/marks.js +128 -0
  152. package/dist/charts/panel.d.ts +56 -0
  153. package/dist/charts/panel.d.ts.map +1 -0
  154. package/dist/charts/panel.js +123 -0
  155. package/dist/charts/scales.d.ts +44 -0
  156. package/dist/charts/scales.d.ts.map +1 -0
  157. package/dist/charts/scales.js +163 -0
  158. package/dist/charts/sizing.d.ts +12 -0
  159. package/dist/charts/sizing.d.ts.map +1 -0
  160. package/dist/charts/sizing.js +33 -0
  161. package/dist/charts/state.d.ts +17 -0
  162. package/dist/charts/state.d.ts.map +1 -0
  163. package/dist/charts/state.js +53 -0
  164. package/dist/charts/theme.d.ts +38 -19
  165. package/dist/charts/theme.d.ts.map +1 -1
  166. package/dist/charts/theme.js +48 -26
  167. package/dist/charts/types.d.ts +227 -0
  168. package/dist/charts/types.d.ts.map +1 -0
  169. package/dist/charts/types.js +4 -0
  170. package/dist/cli/audit-allows.d.ts +4 -17
  171. package/dist/cli/audit-allows.d.ts.map +1 -1
  172. package/dist/cli/config.d.ts +14 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/doctor-upgrade.d.ts +31 -0
  175. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  176. package/dist/cli/doctor-upgrade.js +269 -0
  177. package/dist/cli/doctor.d.ts +13 -29
  178. package/dist/cli/doctor.d.ts.map +1 -1
  179. package/dist/cli/doctor.js +51 -9
  180. package/dist/cli/help.d.ts.map +1 -1
  181. package/dist/cli/help.js +2 -4
  182. package/dist/cli/index.d.ts +48 -172
  183. package/dist/cli/index.d.ts.map +1 -1
  184. package/dist/cli/index.js +39 -132
  185. package/dist/cli/init.d.ts.map +1 -1
  186. package/dist/cli/init.js +43 -37
  187. package/dist/cli/sync.d.ts +5 -21
  188. package/dist/cli/sync.d.ts.map +1 -1
  189. package/dist/cli/sync.js +4 -23
  190. package/dist/cli/tokens-css.d.ts +7 -28
  191. package/dist/cli/tokens-css.d.ts.map +1 -1
  192. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.js +4 -5
  194. package/dist/commands/define-commands.d.ts +15 -31
  195. package/dist/commands/define-commands.d.ts.map +1 -1
  196. package/dist/commands/define-commands.js +1 -11
  197. package/dist/commands/define-overlays.d.ts +5 -19
  198. package/dist/commands/define-overlays.d.ts.map +1 -1
  199. package/dist/commands/define-overlays.js +3 -11
  200. package/dist/commands/index.d.ts +10 -40
  201. package/dist/commands/index.d.ts.map +1 -1
  202. package/dist/commands/index.js +9 -46
  203. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  204. package/dist/commands/notifications/bell.d.ts.map +1 -0
  205. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  206. package/dist/commands/notifications/center.d.ts.map +1 -0
  207. package/dist/{notifications → commands/notifications}/center.js +2 -2
  208. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  209. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  210. package/dist/commands/notifications/notify.d.ts +44 -0
  211. package/dist/commands/notifications/notify.d.ts.map +1 -0
  212. package/dist/commands/notifications/notify.js +79 -0
  213. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  214. package/dist/commands/notifications/store.d.ts.map +1 -0
  215. package/dist/{notifications → commands/notifications}/store.js +4 -0
  216. package/dist/commands/projectors.d.ts +1 -131
  217. package/dist/commands/projectors.d.ts.map +1 -1
  218. package/dist/commands/projectors.js +2 -73
  219. package/dist/commands/shell-bridge.d.ts +3 -3
  220. package/dist/commands/shortcut-format.d.ts +5 -4
  221. package/dist/commands/shortcut-format.d.ts.map +1 -1
  222. package/dist/common/errors.d.ts +3 -3
  223. package/dist/common/use-measured-widths.d.ts.map +1 -1
  224. package/dist/common/use-measured-widths.js +5 -3
  225. package/dist/common/validate.d.ts +2 -2
  226. package/dist/content/article-layout.d.ts.map +1 -1
  227. package/dist/content/article-layout.js +3 -3
  228. package/dist/content/article-model.d.ts +1 -46
  229. package/dist/content/article-model.d.ts.map +1 -1
  230. package/dist/content/article-model.js +1 -29
  231. package/dist/content/index.d.ts +11 -41
  232. package/dist/content/index.d.ts.map +1 -1
  233. package/dist/content/index.js +3 -35
  234. package/dist/content/markdown.d.ts +1 -1
  235. package/dist/content/markdown.d.ts.map +1 -1
  236. package/dist/content/markdown.js +1 -1
  237. package/dist/content/mermaid.d.ts.map +1 -1
  238. package/dist/content/mermaid.js +7 -7
  239. package/dist/content/slug.d.ts +1 -8
  240. package/dist/content/slug.d.ts.map +1 -1
  241. package/dist/content/slug.js +1 -8
  242. package/dist/content/url-hardening.d.ts +2 -2
  243. package/dist/content/url-hardening.d.ts.map +1 -1
  244. package/dist/content/url-hardening.js +2 -0
  245. package/dist/controls/actions.d.ts +16 -1
  246. package/dist/controls/actions.d.ts.map +1 -1
  247. package/dist/controls/enum-filter.d.ts +1 -1
  248. package/dist/controls/enum-filter.d.ts.map +1 -1
  249. package/dist/controls/filter-context.d.ts.map +1 -1
  250. package/dist/controls/filter-context.js +3 -1
  251. package/dist/controls/filter-set.js +4 -6
  252. package/dist/controls/form-layout.d.ts +1 -1
  253. package/dist/controls/form-layout.d.ts.map +1 -1
  254. package/dist/controls/form-layout.js +1 -1
  255. package/dist/controls/glyphs.d.ts +0 -2
  256. package/dist/controls/glyphs.d.ts.map +1 -1
  257. package/dist/controls/glyphs.js +0 -7
  258. package/dist/controls/index.d.ts +12 -17
  259. package/dist/controls/index.d.ts.map +1 -1
  260. package/dist/controls/index.js +5 -39
  261. package/dist/controls/multi-select-filter.d.ts +4 -3
  262. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  263. package/dist/controls/number-filter.d.ts +4 -3
  264. package/dist/controls/number-filter.d.ts.map +1 -1
  265. package/dist/controls/number-filter.js +3 -1
  266. package/dist/controls/range-filter.d.ts +4 -3
  267. package/dist/controls/range-filter.d.ts.map +1 -1
  268. package/dist/controls/search-filter.d.ts +4 -3
  269. package/dist/controls/search-filter.d.ts.map +1 -1
  270. package/dist/controls/search-filter.js +19 -14
  271. package/dist/controls/select-filter.d.ts +4 -3
  272. package/dist/controls/select-filter.d.ts.map +1 -1
  273. package/dist/controls/sync-button.d.ts.map +1 -1
  274. package/dist/controls/sync-button.js +12 -15
  275. package/dist/controls/toggle-filter.d.ts +4 -3
  276. package/dist/controls/toggle-filter.d.ts.map +1 -1
  277. package/dist/controls/uncontrolled.d.ts +12 -0
  278. package/dist/controls/uncontrolled.d.ts.map +1 -0
  279. package/dist/controls/view-tabs.d.ts +2 -2
  280. package/dist/controls/view-tabs.d.ts.map +1 -1
  281. package/dist/controls-dates/index.d.ts +0 -1
  282. package/dist/controls-dates/index.d.ts.map +1 -1
  283. package/dist/dashboard/index.d.ts +7 -9
  284. package/dist/dashboard/index.d.ts.map +1 -1
  285. package/dist/dashboard/index.js +3 -23
  286. package/dist/dashboard/section.d.ts +4 -6
  287. package/dist/dashboard/section.d.ts.map +1 -1
  288. package/dist/dashboard/section.js +4 -10
  289. package/dist/dashboard/stat-card.d.ts +4 -4
  290. package/dist/dashboard/stat-card.d.ts.map +1 -1
  291. package/dist/dashboard/stat-card.js +3 -3
  292. package/dist/dashboard/widget-header.module.css +9 -7
  293. package/dist/dev-dock.d.ts.map +1 -1
  294. package/dist/dev-dock.js +6 -1
  295. package/dist/format/date.d.ts +0 -34
  296. package/dist/format/date.d.ts.map +1 -1
  297. package/dist/format/date.js +0 -54
  298. package/dist/format/index.d.ts +7 -22
  299. package/dist/format/index.d.ts.map +1 -1
  300. package/dist/format/index.js +2 -43
  301. package/dist/format/number.d.ts +3 -14
  302. package/dist/format/number.d.ts.map +1 -1
  303. package/dist/format/number.js +0 -13
  304. package/dist/format/shared.d.ts +2 -3
  305. package/dist/format/shared.d.ts.map +1 -1
  306. package/dist/forms/index.d.ts +0 -11
  307. package/dist/forms/index.d.ts.map +1 -1
  308. package/dist/forms/index.js +1 -14
  309. package/dist/guard/index.d.ts +6 -21
  310. package/dist/guard/index.d.ts.map +1 -1
  311. package/dist/guard/index.js +27 -115
  312. package/dist/guard/types.d.ts +7 -18
  313. package/dist/guard/types.d.ts.map +1 -1
  314. package/dist/index.d.ts +16 -48
  315. package/dist/index.d.ts.map +1 -1
  316. package/dist/index.js +21 -117
  317. package/dist/provider/create-router.d.ts +44 -0
  318. package/dist/provider/create-router.d.ts.map +1 -0
  319. package/dist/provider/create-router.js +62 -0
  320. package/dist/provider/hotkeys.d.ts +8 -0
  321. package/dist/provider/hotkeys.d.ts.map +1 -0
  322. package/dist/provider/hotkeys.js +50 -0
  323. package/dist/provider/index.d.ts +33 -110
  324. package/dist/provider/index.d.ts.map +1 -1
  325. package/dist/provider/index.js +182 -82
  326. package/dist/provider/lab-theme.d.ts.map +1 -1
  327. package/dist/provider/route-transition.d.ts +76 -0
  328. package/dist/provider/route-transition.d.ts.map +1 -0
  329. package/dist/provider/route-transition.js +98 -0
  330. package/dist/provider/spotlight-actions.d.ts +10 -0
  331. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  332. package/dist/provider/spotlight-actions.js +55 -0
  333. package/dist/provider/test-router.d.ts +6 -0
  334. package/dist/provider/test-router.d.ts.map +1 -0
  335. package/dist/provider/test-router.js +18 -0
  336. package/dist/query-client.d.ts +4 -20
  337. package/dist/query-client.d.ts.map +1 -1
  338. package/dist/query-client.js +2 -2
  339. package/dist/router-tanstack/index.d.ts +18 -64
  340. package/dist/router-tanstack/index.d.ts.map +1 -1
  341. package/dist/router-tanstack/index.js +2 -16
  342. package/dist/router-tanstack/nav.d.ts +12 -1
  343. package/dist/router-tanstack/nav.d.ts.map +1 -1
  344. package/dist/router-tanstack/nav.js +8 -1
  345. package/dist/router-tanstack/search-store.d.ts +1 -1
  346. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  347. package/dist/router-tanstack/use-nav.d.ts +8 -9
  348. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  349. package/dist/router-tanstack/use-nav.js +20 -1
  350. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  351. package/dist/shell/app-sidebar.js +1 -1
  352. package/dist/shell/index.d.ts +31 -10
  353. package/dist/shell/index.d.ts.map +1 -1
  354. package/dist/shell/index.js +14 -3
  355. package/dist/shell/page-aside.d.ts +2 -2
  356. package/dist/shell/page-aside.d.ts.map +1 -1
  357. package/dist/shell/page-aside.js +31 -12
  358. package/dist/shell/page-bar.d.ts +2 -2
  359. package/dist/shell/page-bar.d.ts.map +1 -1
  360. package/dist/shell/page-bar.js +1 -1
  361. package/dist/state.d.ts +10 -12
  362. package/dist/state.d.ts.map +1 -1
  363. package/dist/state.js +4 -6
  364. package/dist/styles.css +107 -7
  365. package/dist/surfaces.d.ts +28 -103
  366. package/dist/surfaces.d.ts.map +1 -1
  367. package/dist/surfaces.js +54 -143
  368. package/dist/{data → table}/data-table-state.d.ts +1 -1
  369. package/dist/table/data-table-state.d.ts.map +1 -0
  370. package/dist/{data → table}/data-table-state.js +4 -3
  371. package/dist/{data → table}/data-table.d.ts +28 -49
  372. package/dist/table/data-table.d.ts.map +1 -0
  373. package/dist/{data → table}/data-table.js +74 -60
  374. package/dist/table/index.d.ts +18 -0
  375. package/dist/table/index.d.ts.map +1 -0
  376. package/dist/{data/table.js → table/index.js} +1 -1
  377. package/dist/table/query-branch.d.ts.map +1 -0
  378. package/dist/table/table-features.d.ts +69 -0
  379. package/dist/table/table-features.d.ts.map +1 -0
  380. package/dist/table/table-features.js +49 -0
  381. package/dist/telemetry.d.ts +77 -0
  382. package/dist/telemetry.d.ts.map +1 -0
  383. package/dist/telemetry.js +33 -0
  384. package/dist/theme/index.d.ts +10 -21
  385. package/dist/theme/index.d.ts.map +1 -1
  386. package/dist/theme/index.js +3 -14
  387. package/dist/theme/theme-toggle.d.ts.map +1 -1
  388. package/dist/theme/theme-toggle.js +7 -33
  389. package/dist/theme/theme-toggle.module.css +30 -0
  390. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  391. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  392. package/dist/theme-lab/derive-controls.js +5 -3
  393. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  394. package/dist/theme-lab/derive-state.js +2 -1
  395. package/dist/tokens/core.d.ts +360 -0
  396. package/dist/tokens/core.d.ts.map +1 -0
  397. package/dist/tokens/core.js +708 -0
  398. package/dist/tokens/derive.d.ts +1 -1
  399. package/dist/tokens/derive.d.ts.map +1 -1
  400. package/dist/tokens/index.d.ts +5 -373
  401. package/dist/tokens/index.d.ts.map +1 -1
  402. package/dist/tokens/index.js +8 -700
  403. package/dist/tokens/palette.d.ts +2 -6
  404. package/dist/tokens/palette.d.ts.map +1 -1
  405. package/dist/tokens/palette.js +1 -4
  406. package/dist/vite.d.ts +4 -3
  407. package/dist/vite.d.ts.map +1 -1
  408. package/llms.txt +43 -85
  409. package/package.json +77 -170
  410. package/src/agent/ai-sdk-transport.ts +57 -37
  411. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  412. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  413. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  414. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  415. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  416. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  417. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  418. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  419. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  420. package/src/agent/error.ts +43 -0
  421. package/src/agent/history.ts +2 -107
  422. package/src/agent/id.ts +4 -5
  423. package/src/agent/index.ts +23 -112
  424. package/src/agent/outcome.ts +3 -56
  425. package/src/agent/part-list.tsx +3 -3
  426. package/src/agent/parts.ts +23 -22
  427. package/src/agent/run-committer.ts +64 -0
  428. package/src/agent/run-records.ts +147 -0
  429. package/src/agent/thread.ts +24 -231
  430. package/src/agent/transport.ts +6 -96
  431. package/src/agent/use-agent-thread-runs.ts +364 -199
  432. package/src/charts/BandStrip.tsx +276 -0
  433. package/src/charts/Bars.tsx +141 -0
  434. package/src/charts/CartesianChart.tsx +206 -0
  435. package/src/charts/ChartCard.tsx +178 -0
  436. package/src/charts/Donut.tsx +256 -0
  437. package/src/charts/DualPanel.tsx +326 -0
  438. package/src/charts/Heatmap.tsx +282 -0
  439. package/src/charts/Lines.tsx +151 -0
  440. package/src/charts/MirroredBars.tsx +303 -0
  441. package/src/charts/Sparkline.tsx +176 -0
  442. package/src/charts/StackedArea.tsx +80 -0
  443. package/src/charts/box.tsx +96 -0
  444. package/src/charts/card-context.ts +11 -0
  445. package/src/charts/chart-box.module.css +64 -0
  446. package/src/charts/chart-box.module.css.d.ts +12 -0
  447. package/src/charts/chart-card.module.css +25 -0
  448. package/src/charts/chart-card.module.css.d.ts +8 -0
  449. package/src/charts/chart-legend.module.css +38 -0
  450. package/src/charts/chart-legend.module.css.d.ts +10 -0
  451. package/src/charts/compile.ts +585 -0
  452. package/src/charts/cursor.ts +282 -0
  453. package/src/charts/curves.ts +111 -0
  454. package/src/charts/donut.module.css +54 -0
  455. package/src/charts/donut.module.css.d.ts +9 -0
  456. package/src/charts/host.tsx +60 -0
  457. package/src/charts/index.ts +41 -178
  458. package/src/charts/legend.tsx +204 -0
  459. package/src/charts/marks.ts +201 -0
  460. package/src/charts/panel.tsx +227 -0
  461. package/src/charts/scales.ts +237 -0
  462. package/src/charts/sizing.ts +47 -0
  463. package/src/charts/state.tsx +80 -0
  464. package/src/charts/theme.ts +65 -0
  465. package/src/charts/types.ts +242 -0
  466. package/src/cli/audit-allows.ts +8 -30
  467. package/src/cli/config.ts +14 -43
  468. package/src/cli/doctor-upgrade.ts +392 -0
  469. package/src/cli/doctor.ts +81 -72
  470. package/src/cli/help.ts +2 -4
  471. package/src/cli/index.ts +100 -384
  472. package/src/cli/init.ts +60 -51
  473. package/src/cli/sync.ts +13 -68
  474. package/src/cli/tokens-css.ts +7 -28
  475. package/src/commands/ShortcutsHelp.tsx +8 -9
  476. package/src/commands/define-commands.ts +16 -43
  477. package/src/commands/define-overlays.ts +12 -36
  478. package/src/commands/index.ts +11 -94
  479. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  480. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  481. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  482. package/src/commands/notifications/notify.tsx +158 -0
  483. package/src/{notifications → commands/notifications}/store.ts +10 -2
  484. package/src/commands/projectors.ts +5 -225
  485. package/src/commands/shell-bridge.ts +5 -5
  486. package/src/commands/shortcut-format.ts +5 -4
  487. package/src/common/errors.ts +3 -3
  488. package/src/common/use-measured-widths.ts +6 -3
  489. package/src/common/validate.ts +2 -2
  490. package/src/content/article-layout.tsx +37 -38
  491. package/src/content/article-model.ts +1 -84
  492. package/src/content/index.ts +12 -83
  493. package/src/content/markdown.tsx +4 -3
  494. package/src/content/mermaid.tsx +9 -7
  495. package/src/content/slug.ts +1 -16
  496. package/src/content/url-hardening.ts +8 -2
  497. package/src/controls/actions.tsx +24 -1
  498. package/src/controls/enum-filter.tsx +1 -1
  499. package/src/controls/filter-context.tsx +3 -1
  500. package/src/controls/filter-set.tsx +5 -7
  501. package/src/controls/form-layout.tsx +2 -2
  502. package/src/controls/glyphs.tsx +0 -10
  503. package/src/controls/index.ts +13 -64
  504. package/src/controls/multi-select-filter.tsx +5 -4
  505. package/src/controls/number-filter.tsx +8 -4
  506. package/src/controls/range-filter.tsx +5 -4
  507. package/src/controls/search-filter.tsx +25 -19
  508. package/src/controls/select-filter.tsx +5 -4
  509. package/src/controls/sync-button.tsx +18 -20
  510. package/src/controls/toggle-filter.tsx +5 -4
  511. package/src/controls/uncontrolled.ts +12 -0
  512. package/src/controls/view-tabs.tsx +3 -3
  513. package/src/controls-dates/date-range-picker.tsx +1 -1
  514. package/src/controls-dates/index.ts +0 -1
  515. package/src/dashboard/index.ts +7 -48
  516. package/src/dashboard/section.tsx +11 -40
  517. package/src/dashboard/stat-card.tsx +14 -16
  518. package/src/dashboard/widget-header.module.css +9 -7
  519. package/src/dev-dock.tsx +14 -27
  520. package/src/format/date.ts +2 -92
  521. package/src/format/index.ts +7 -53
  522. package/src/format/number.ts +3 -26
  523. package/src/format/shared.ts +2 -3
  524. package/src/forms/index.ts +0 -23
  525. package/src/guard/index.ts +36 -191
  526. package/src/guard/types.ts +6 -19
  527. package/src/index.ts +30 -282
  528. package/src/provider/create-router.tsx +138 -0
  529. package/src/provider/hotkeys.ts +70 -0
  530. package/src/provider/index.tsx +260 -230
  531. package/src/provider/lab-theme.ts +3 -2
  532. package/src/provider/route-transition.ts +199 -0
  533. package/src/provider/spotlight-actions.tsx +69 -0
  534. package/src/provider/test-router.tsx +25 -0
  535. package/src/query-client.ts +4 -22
  536. package/src/router-tanstack/index.ts +18 -112
  537. package/src/router-tanstack/nav.ts +28 -2
  538. package/src/router-tanstack/search-store.ts +9 -2
  539. package/src/router-tanstack/use-nav.ts +47 -13
  540. package/src/shell/app-mobile-nav.tsx +3 -2
  541. package/src/shell/app-sidebar.tsx +1 -1
  542. package/src/shell/aside-docking.ts +1 -1
  543. package/src/shell/index.tsx +61 -20
  544. package/src/shell/page-aside.tsx +47 -23
  545. package/src/shell/page-bar.tsx +3 -3
  546. package/src/shell/page-title.tsx +1 -1
  547. package/src/state.ts +11 -37
  548. package/src/styles.css +107 -7
  549. package/src/surfaces.ts +56 -151
  550. package/src/{data → table}/data-table-state.ts +5 -4
  551. package/src/{data → table}/data-table.tsx +170 -161
  552. package/src/table/index.ts +18 -0
  553. package/src/table/table-features.ts +102 -0
  554. package/src/telemetry.ts +110 -0
  555. package/src/theme/index.ts +22 -47
  556. package/src/theme/theme-toggle.module.css +30 -0
  557. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  558. package/src/theme/theme-toggle.tsx +15 -43
  559. package/src/theme-lab/derive-controls.tsx +5 -3
  560. package/src/theme-lab/derive-state.ts +2 -1
  561. package/src/tokens/core.ts +1163 -0
  562. package/src/tokens/derive.ts +1 -1
  563. package/src/tokens/index.ts +14 -1181
  564. package/src/tokens/palette.ts +3 -7
  565. package/src/vite.ts +3 -3
  566. package/agent/templates/query-client.ts.tpl +0 -26
  567. package/dist/agent/adapter.d.ts +0 -150
  568. package/dist/agent/adapter.d.ts.map +0 -1
  569. package/dist/agent/adapter.js +0 -482
  570. package/dist/agent/use-agent-stream.d.ts +0 -35
  571. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  572. package/dist/agent/use-agent-stream.js +0 -59
  573. package/dist/agent-chat/composer.d.ts.map +0 -1
  574. package/dist/agent-chat/index.d.ts +0 -31
  575. package/dist/agent-chat/index.d.ts.map +0 -1
  576. package/dist/agent-chat/index.js +0 -19
  577. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  578. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  579. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  580. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  581. package/dist/agent-chat/thread-detail-panel.js +0 -115
  582. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  583. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  587. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  588. package/dist/agent-chat/thread-workspace.js +0 -153
  589. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  590. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  591. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  592. package/dist/charts/cursor/resolve.d.ts +0 -75
  593. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  594. package/dist/charts/cursor/resolve.js +0 -91
  595. package/dist/charts/cursor/scope.d.ts +0 -20
  596. package/dist/charts/cursor/scope.d.ts.map +0 -1
  597. package/dist/charts/cursor/scope.js +0 -20
  598. package/dist/charts/cursor/store.d.ts +0 -35
  599. package/dist/charts/cursor/store.d.ts.map +0 -1
  600. package/dist/charts/cursor/store.js +0 -25
  601. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  602. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  603. package/dist/charts/cursor/touch-pin.js +0 -79
  604. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  606. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  607. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  608. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  609. package/dist/charts/hooks/use-hysteresis.js +0 -12
  610. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  611. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  612. package/dist/charts/hooks/useBandPlot.js +0 -178
  613. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  614. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  615. package/dist/charts/hooks/useChartCursor.js +0 -200
  616. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  617. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  618. package/dist/charts/hooks/useChartSize.js +0 -8
  619. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  620. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  621. package/dist/charts/kinds/BandStrip.js +0 -241
  622. package/dist/charts/kinds/Bars.d.ts +0 -141
  623. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  624. package/dist/charts/kinds/Bars.js +0 -343
  625. package/dist/charts/kinds/Donut.d.ts +0 -77
  626. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  627. package/dist/charts/kinds/Donut.js +0 -245
  628. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  629. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  630. package/dist/charts/kinds/DualPanel.js +0 -471
  631. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  632. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  633. package/dist/charts/kinds/Heatmap.js +0 -243
  634. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  635. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  636. package/dist/charts/kinds/MirroredBars.js +0 -292
  637. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  638. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  639. package/dist/charts/kinds/MultiLine.js +0 -176
  640. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  641. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  642. package/dist/charts/kinds/StackedArea.js +0 -135
  643. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  644. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  645. package/dist/charts/kinds/ZonedLine.js +0 -155
  646. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  647. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  648. package/dist/charts/kinds/band-chrome.js +0 -71
  649. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  650. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  651. package/dist/charts/kinds/donut-layout.js +0 -52
  652. package/dist/charts/layout/auto-margin.d.ts +0 -122
  653. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  654. package/dist/charts/layout/auto-margin.js +0 -81
  655. package/dist/charts/layout/end-labels.d.ts +0 -64
  656. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  657. package/dist/charts/layout/end-labels.js +0 -76
  658. package/dist/charts/layout/log-ticks.d.ts +0 -27
  659. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  660. package/dist/charts/layout/log-ticks.js +0 -42
  661. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  662. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  663. package/dist/charts/primitives/AreaGradient.js +0 -13
  664. package/dist/charts/primitives/Axes.d.ts +0 -83
  665. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  666. package/dist/charts/primitives/Axes.js +0 -168
  667. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  668. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  669. package/dist/charts/primitives/CartesianChart.js +0 -549
  670. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  671. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  672. package/dist/charts/primitives/ChartCard.js +0 -143
  673. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  674. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  675. package/dist/charts/primitives/ChartFrame.js +0 -241
  676. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  677. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  678. package/dist/charts/primitives/ChartLegend.js +0 -292
  679. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  680. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  681. package/dist/charts/primitives/ChartPending.js +0 -117
  682. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  683. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  684. package/dist/charts/primitives/ChartTooltip.js +0 -197
  685. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  686. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  687. package/dist/charts/primitives/Crosshair.js +0 -23
  688. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  689. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  690. package/dist/charts/primitives/HatchPattern.js +0 -31
  691. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  692. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  693. package/dist/charts/primitives/HoverOverlay.js +0 -72
  694. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  695. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  696. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  697. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  698. package/dist/charts/primitives/XZoneRects.js +0 -65
  699. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  700. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  701. package/dist/charts/primitives/ZoneRects.js +0 -30
  702. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  703. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  704. package/dist/charts/primitives/chart-card-context.js +0 -18
  705. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  706. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  707. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  708. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  709. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  710. package/dist/charts/primitives/chart-layout.js +0 -175
  711. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  712. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  713. package/dist/charts/primitives/chart-tier.js +0 -44
  714. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  715. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  716. package/dist/charts/primitives/legend-disclosure.js +0 -153
  717. package/dist/charts/series.d.ts +0 -189
  718. package/dist/charts/series.d.ts.map +0 -1
  719. package/dist/charts/series.js +0 -84
  720. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  721. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  722. package/dist/charts/sparklines/BarSparkline.js +0 -53
  723. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  724. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  725. package/dist/charts/sparklines/LineSparkline.js +0 -51
  726. package/dist/charts/sparklines/index.d.ts +0 -3
  727. package/dist/charts/sparklines/index.d.ts.map +0 -1
  728. package/dist/charts/sparklines/index.js +0 -6
  729. package/dist/charts/utils/domain.d.ts +0 -35
  730. package/dist/charts/utils/domain.d.ts.map +0 -1
  731. package/dist/charts/utils/domain.js +0 -12
  732. package/dist/charts/utils/format.d.ts +0 -8
  733. package/dist/charts/utils/format.d.ts.map +0 -1
  734. package/dist/charts/utils/format.js +0 -20
  735. package/dist/charts/utils/measure-text.d.ts +0 -25
  736. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  737. package/dist/charts/utils/measure-text.js +0 -64
  738. package/dist/charts/utils/ticks.d.ts +0 -103
  739. package/dist/charts/utils/ticks.d.ts.map +0 -1
  740. package/dist/charts/utils/ticks.js +0 -92
  741. package/dist/commands/overlays-mount.d.ts +0 -122
  742. package/dist/commands/overlays-mount.d.ts.map +0 -1
  743. package/dist/commands/overlays-mount.js +0 -125
  744. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  745. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  746. package/dist/commands/useCommandHotkeys.js +0 -45
  747. package/dist/content/article-actions.d.ts +0 -39
  748. package/dist/content/article-actions.d.ts.map +0 -1
  749. package/dist/content/article-actions.js +0 -28
  750. package/dist/content/article-card.d.ts +0 -58
  751. package/dist/content/article-card.d.ts.map +0 -1
  752. package/dist/content/article-card.js +0 -79
  753. package/dist/content/article-card.module.css +0 -111
  754. package/dist/content/mdx.d.ts +0 -20
  755. package/dist/content/mdx.d.ts.map +0 -1
  756. package/dist/content/mdx.js +0 -64
  757. package/dist/controls/compare-filter.d.ts +0 -42
  758. package/dist/controls/compare-filter.d.ts.map +0 -1
  759. package/dist/controls/compare-filter.js +0 -38
  760. package/dist/controls/slider-control.d.ts +0 -36
  761. package/dist/controls/slider-control.d.ts.map +0 -1
  762. package/dist/controls/slider-control.js +0 -64
  763. package/dist/dashboard/widget-grid.d.ts +0 -27
  764. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  765. package/dist/dashboard/widget-grid.js +0 -40
  766. package/dist/dashboard/widget-grid.module.css +0 -69
  767. package/dist/data/data-table-state.d.ts.map +0 -1
  768. package/dist/data/data-table.d.ts.map +0 -1
  769. package/dist/data/query-branch.d.ts.map +0 -1
  770. package/dist/data/table.d.ts +0 -24
  771. package/dist/data/table.d.ts.map +0 -1
  772. package/dist/data/virtual-list.d.ts +0 -133
  773. package/dist/data/virtual-list.d.ts.map +0 -1
  774. package/dist/data/virtual-list.js +0 -157
  775. package/dist/data/virtual.d.ts +0 -21
  776. package/dist/data/virtual.d.ts.map +0 -1
  777. package/dist/data/virtual.js +0 -4
  778. package/dist/forms/FormErrorSummary.d.ts +0 -30
  779. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  780. package/dist/forms/FormErrorSummary.js +0 -30
  781. package/dist/forms/use-field-array.d.ts +0 -60
  782. package/dist/forms/use-field-array.d.ts.map +0 -1
  783. package/dist/forms/use-field-array.js +0 -20
  784. package/dist/forms/use-form-draft.d.ts +0 -76
  785. package/dist/forms/use-form-draft.d.ts.map +0 -1
  786. package/dist/forms/use-form-draft.js +0 -92
  787. package/dist/forms/use-form-submit.d.ts +0 -88
  788. package/dist/forms/use-form-submit.d.ts.map +0 -1
  789. package/dist/forms/use-form-submit.js +0 -63
  790. package/dist/notifications/bell.d.ts.map +0 -1
  791. package/dist/notifications/center.d.ts.map +0 -1
  792. package/dist/notifications/define-notifications.d.ts.map +0 -1
  793. package/dist/notifications/index.d.ts +0 -40
  794. package/dist/notifications/index.d.ts.map +0 -1
  795. package/dist/notifications/index.js +0 -54
  796. package/dist/notifications/mount-guard.d.ts +0 -8
  797. package/dist/notifications/mount-guard.d.ts.map +0 -1
  798. package/dist/notifications/mount-guard.js +0 -18
  799. package/dist/notifications/notify.d.ts +0 -149
  800. package/dist/notifications/notify.d.ts.map +0 -1
  801. package/dist/notifications/notify.js +0 -171
  802. package/dist/notifications/store.d.ts.map +0 -1
  803. package/dist/provider/connectivity-indicator.d.ts +0 -13
  804. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  805. package/dist/provider/connectivity-indicator.js +0 -205
  806. package/dist/provider/connectivity-provider.d.ts +0 -7
  807. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  808. package/dist/provider/connectivity-provider.js +0 -128
  809. package/dist/provider/connectivity-types.d.ts +0 -36
  810. package/dist/provider/connectivity-types.d.ts.map +0 -1
  811. package/dist/provider/use-connectivity.d.ts +0 -3
  812. package/dist/provider/use-connectivity.d.ts.map +0 -1
  813. package/dist/provider/use-connectivity.js +0 -14
  814. package/dist/query-devtools.d.ts +0 -21
  815. package/dist/query-devtools.d.ts.map +0 -1
  816. package/dist/query-devtools.js +0 -13
  817. package/src/agent/adapter.ts +0 -945
  818. package/src/agent/use-agent-stream.ts +0 -154
  819. package/src/agent-chat/index.ts +0 -54
  820. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  821. package/src/agent-chat/thread-workspace.tsx +0 -279
  822. package/src/charts/cursor/resolve.ts +0 -198
  823. package/src/charts/cursor/scope.tsx +0 -35
  824. package/src/charts/cursor/store.ts +0 -58
  825. package/src/charts/cursor/touch-pin.ts +0 -138
  826. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  827. package/src/charts/hooks/use-hysteresis.ts +0 -26
  828. package/src/charts/hooks/useBandPlot.ts +0 -383
  829. package/src/charts/hooks/useChartCursor.ts +0 -367
  830. package/src/charts/hooks/useChartSize.ts +0 -35
  831. package/src/charts/kinds/BandStrip.tsx +0 -449
  832. package/src/charts/kinds/Bars.tsx +0 -589
  833. package/src/charts/kinds/Donut.tsx +0 -368
  834. package/src/charts/kinds/DualPanel.tsx +0 -712
  835. package/src/charts/kinds/Heatmap.tsx +0 -396
  836. package/src/charts/kinds/MirroredBars.tsx +0 -469
  837. package/src/charts/kinds/MultiLine.tsx +0 -322
  838. package/src/charts/kinds/StackedArea.tsx +0 -267
  839. package/src/charts/kinds/ZonedLine.tsx +0 -301
  840. package/src/charts/kinds/band-chrome.tsx +0 -91
  841. package/src/charts/kinds/donut-layout.ts +0 -82
  842. package/src/charts/layout/auto-margin.ts +0 -242
  843. package/src/charts/layout/end-labels.ts +0 -135
  844. package/src/charts/layout/log-ticks.ts +0 -90
  845. package/src/charts/primitives/AreaGradient.tsx +0 -26
  846. package/src/charts/primitives/Axes.tsx +0 -271
  847. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  848. package/src/charts/primitives/ChartCard.tsx +0 -280
  849. package/src/charts/primitives/ChartFrame.tsx +0 -493
  850. package/src/charts/primitives/ChartLegend.tsx +0 -422
  851. package/src/charts/primitives/ChartPending.tsx +0 -243
  852. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  853. package/src/charts/primitives/Crosshair.tsx +0 -43
  854. package/src/charts/primitives/HatchPattern.tsx +0 -55
  855. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  856. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  857. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  858. package/src/charts/primitives/XZoneRects.tsx +0 -132
  859. package/src/charts/primitives/ZoneRects.tsx +0 -67
  860. package/src/charts/primitives/chart-card-context.ts +0 -46
  861. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  862. package/src/charts/primitives/chart-layout.ts +0 -318
  863. package/src/charts/primitives/chart-tier.tsx +0 -76
  864. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  865. package/src/charts/series.ts +0 -276
  866. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  867. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  868. package/src/charts/sparklines/index.ts +0 -2
  869. package/src/charts/theme.tsx +0 -53
  870. package/src/charts/utils/domain.ts +0 -41
  871. package/src/charts/utils/format.ts +0 -19
  872. package/src/charts/utils/measure-text.ts +0 -109
  873. package/src/charts/utils/ticks.ts +0 -239
  874. package/src/commands/overlays-mount.tsx +0 -333
  875. package/src/commands/useCommandHotkeys.ts +0 -114
  876. package/src/content/article-actions.ts +0 -72
  877. package/src/content/article-card.module.css +0 -111
  878. package/src/content/article-card.tsx +0 -174
  879. package/src/content/mdx.tsx +0 -127
  880. package/src/controls/compare-filter.tsx +0 -81
  881. package/src/controls/slider-control.tsx +0 -159
  882. package/src/dashboard/widget-grid.module.css +0 -69
  883. package/src/dashboard/widget-grid.tsx +0 -146
  884. package/src/data/table.ts +0 -39
  885. package/src/data/virtual-list.tsx +0 -356
  886. package/src/data/virtual.ts +0 -26
  887. package/src/forms/FormErrorSummary.tsx +0 -71
  888. package/src/forms/use-field-array.ts +0 -94
  889. package/src/forms/use-form-draft.ts +0 -262
  890. package/src/forms/use-form-submit.ts +0 -199
  891. package/src/notifications/index.ts +0 -88
  892. package/src/notifications/mount-guard.ts +0 -38
  893. package/src/notifications/notify.tsx +0 -379
  894. package/src/provider/connectivity-indicator.tsx +0 -267
  895. package/src/provider/connectivity-provider.tsx +0 -189
  896. package/src/provider/connectivity-types.ts +0 -42
  897. package/src/provider/use-connectivity.ts +0 -26
  898. package/src/query-devtools.tsx +0 -40
  899. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  900. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  902. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  903. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  904. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  906. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  907. /package/dist/{data → table}/data-table.module.css +0 -0
  908. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  909. /package/dist/{data → table}/query-branch.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.js +0 -0
  911. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  912. /package/src/{data → table}/data-table.module.css +0 -0
  913. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  914. /package/src/{data → table}/query-branch.ts +0 -0
package/src/cli/init.ts CHANGED
@@ -6,15 +6,16 @@
6
6
  import { existsSync } from 'node:fs'
7
7
  import { resolve } from 'node:path'
8
8
 
9
- import { deriveSpacing } from '../tokens'
9
+ import { deriveSpacing } from '../tokens/core'
10
10
  import type { MergeLintResult, ScaffoldFlags } from './index'
11
11
  import {
12
12
  MANIFEST_PATH,
13
- blockMigrationProblem,
13
+ declaredProfile,
14
+ readBasaltConfig,
15
+ ROUTER_SEED_DESTS,
14
16
  findBasaltInstall,
15
17
  managedFiles,
16
18
  mergeOxlintExtends,
17
- migrateBlockToAgentsMd,
18
19
  normalizeForLedger,
19
20
  patchPackageJson,
20
21
  placementNotices,
@@ -22,9 +23,7 @@ import {
22
23
  readManifest,
23
24
  reconcileRoots,
24
25
  renderContext,
25
- reportBlockMigration,
26
26
  reportPrune,
27
- resolvePeerFlags,
28
27
  resolvePlacement,
29
28
  rootsNotices,
30
29
  sha256,
@@ -32,6 +31,7 @@ import {
32
31
  writeFileEnsuringDir,
33
32
  writeUnit,
34
33
  } from './index'
34
+ import { seedTsconfigExtends } from './doctor-upgrade'
35
35
  import { readOxlintPresetPlugins } from './sync'
36
36
 
37
37
  /**
@@ -40,28 +40,35 @@ import { readOxlintPresetPlugins } from './sync'
40
40
  * whole lint half stays off, and every gate downstream reports green over it.
41
41
  */
42
42
  const KEPT_FILE_COST: Record<string, string> = {
43
- '.oxlintrc.json':
44
- 'the shipped oxlint preset (the basalt/* design rules AND the jsx-a11y / import / promise / ' +
45
- 'unicorn plugins) is NOT active — nothing else turns it on, and every gate stays green ' +
46
- 'without it. Re-run with `--merge-lint` to splice the extends in, or add it by hand.',
47
43
  'lefthook.yml':
48
44
  'the pre-commit oxlint / oxfmt / check-theme jobs are not wired — add `extends: ' +
49
45
  '[<preset>]` to your own file.',
50
46
  '.github/workflows/check.yml':
51
47
  'CI does not run check-theme or the sync drift gate — copy those steps into your own workflow.',
48
+ 'src/main.tsx':
49
+ 'change it to match node_modules/basalt-ui/agent/templates/main.tpl: import ' +
50
+ "'basalt-ui/styles.css'; `const router = createBasaltRouter({ routeTree })`; declare " +
51
+ "`interface Register { router: typeof router }` in module '@tanstack/react-router'; render " +
52
+ '`<BasaltProvider router={router} />`. Without them the seeded src/lib/nav.tsx fails tsc.',
52
53
  '.oxfmtrc.json': 'your existing formatter config stands; basalt formats nothing on its own.',
53
54
  'DESIGN.md': 'the design brief Claude reads is yours, not the seeded one.',
54
55
  }
55
56
 
56
- /** Scaffold all managed files into the consumer repo, then write the manifest. Idempotent. Returns 0. */
57
- export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags = {}): number {
58
- // First, before anything is written: a block that cannot be moved safely refuses the whole run.
59
- const blockProblem = blockMigrationProblem(cwd)
60
- if (blockProblem !== null) {
61
- console.error(`✖ basalt-ui init: ${blockProblem}`)
62
- return 1
57
+ /** What happened to a kept `.oxlintrc.json`, by the merge result (null: `--no-merge-lint`). */
58
+ function oxlintrcCost(merge: MergeLintResult | null): string {
59
+ if (merge === 'added' || merge === 'already') {
60
+ return 'now extends the shipped preset: the basalt/* design rules and the jsx-a11y / import / promise / unicorn plugins are on.'
63
61
  }
62
+ const why =
63
+ merge === null ? 'init ran with --no-merge-lint' : 'init could not splice the extends in'
64
+ return (
65
+ `the shipped oxlint preset (the basalt/* rules, jsx-a11y, import, promise, unicorn) is NOT active: ${why}, ` +
66
+ 'nothing else turns it on, and every gate stays green without it. Add the `extends` by hand.'
67
+ )
68
+ }
64
69
 
70
+ /** Scaffold all managed files into the consumer repo, then write the manifest. Idempotent. Returns 0. */
71
+ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags = {}): number {
65
72
  // ── Describe the repo BEFORE rendering anything ───────────────────────────
66
73
  // Every roots-derived seed (the CI oxfmt globs, DESIGN.md's series path, the default scan
67
74
  // exemption) renders from `basalt.roots`, so the key has to exist first. Writing it is what
@@ -91,13 +98,30 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
91
98
  return true
92
99
  })
93
100
 
101
+ // create-vite's `tsc -b && vite build` fails on a fresh app: vite generates routeTree.gen.ts.
102
+ // The stock script is reordered; any other script that runs tsc gets one line of advice.
103
+ let buildNote: string | null = null
104
+ patchPackageJson(cwd, (pkg) => {
105
+ const scripts = (pkg['scripts'] ?? {}) as Record<string, unknown>
106
+ const build = scripts['build']
107
+ if (typeof build !== 'string' || !/\btsc\b/.test(build) || build.startsWith('vite build')) {
108
+ return false
109
+ }
110
+ if (build !== 'tsc -b && vite build') {
111
+ buildNote = `"build" (${build}) left as is: run \`vite build\` before \`tsc\` (vite generates routeTree.gen.ts).`
112
+ return false
113
+ }
114
+ pkg['scripts'] = { ...scripts, build: 'vite build && tsc -b' }
115
+ buildNote = 'rewrote "build" to `vite build && tsc -b` (vite generates routeTree.gen.ts).'
116
+ return true
117
+ })
118
+
94
119
  const manifest = readManifest(cwd)
95
- const peers = resolvePeerFlags(cwd, scaffoldFlags)
96
120
  const placement = resolvePlacement(cwd)
97
- const files = managedFiles(peers, placement)
98
-
99
- // Before the loop: an install from before the move carries the block in CLAUDE.md.
100
- const migration = migrateBlockToAgentsMd(cwd, manifest)
121
+ // A tokens-only consumer has no use for the Mantine/React scaffolds (doctor skips them there too).
122
+ const tokensOnly = declaredProfile(readBasaltConfig(cwd), []) === 'tokens-only'
123
+ const routerSeeds: string[] = Object.values(ROUTER_SEED_DESTS)
124
+ const files = managedFiles(placement).filter((f) => !(tokensOnly && routerSeeds.includes(f.dest)))
101
125
 
102
126
  const writtenFiles: string[] = []
103
127
  const keptFiles: string[] = []
@@ -134,7 +158,7 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
134
158
  const pruned = pruneRetiredManagedFiles(cwd, manifest, files)
135
159
 
136
160
  const mergeLint: MergeLintResult | null =
137
- scaffoldFlags.mergeLint === true ? mergeOxlintExtends(cwd, ctx.vars.OXLINT_PRESET_PATH) : null
161
+ scaffoldFlags.noMergeLint === true ? null : mergeOxlintExtends(cwd, ctx.vars.OXLINT_PRESET_PATH)
138
162
 
139
163
  manifest.basaltVersion = ctx.vars.BASALT_VERSION
140
164
  manifest.spacingScale = { ...deriveSpacing(0).scale }
@@ -144,7 +168,6 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
144
168
  `basalt-ui init: ${writtenFiles.length} written, ${keptFiles.length} kept, manifest at ${MANIFEST_PATH}`,
145
169
  )
146
170
  reportPrune(pruned)
147
- reportBlockMigration(migration, 'init')
148
171
  if (missingSources.length > 0) {
149
172
  console.log(
150
173
  `basalt-ui init: ${missingSources.length} shipped asset(s) not present, skipped: ${missingSources.join(', ')}`,
@@ -156,48 +179,34 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
156
179
  if (keptFiles.length > 0) {
157
180
  console.log(`\nKept (already present — basalt did not touch them):`)
158
181
  for (const dest of keptFiles) {
159
- const cost = KEPT_FILE_COST[dest]
182
+ const cost = dest === '.oxlintrc.json' ? oxlintrcCost(mergeLint) : KEPT_FILE_COST[dest]
160
183
  console.log(cost === undefined ? ` · ${dest}` : ` · ${dest} — ${cost}`)
161
184
  }
162
185
  }
163
- if (mergeLint !== null) {
164
- const mergeMessage: Record<MergeLintResult, string> = {
165
- added: `spliced "${ctx.vars.OXLINT_PRESET_PATH}" into the existing .oxlintrc.json extends`,
166
- already: '.oxlintrc.json already extends the shipped preset — nothing to do',
167
- absent:
168
- 'no existing .oxlintrc.json to merge into (the seeded one already extends the preset)',
169
- unreadable: '.oxlintrc.json is not valid JSON — merge the extends entry by hand',
170
- 'has-comments':
171
- '.oxlintrc.json carries comments; rewriting it would delete them (usually the reason each ' +
172
- `rule is off). Add "extends": ["${ctx.vars.OXLINT_PRESET_PATH}"] as the first entry by hand.`,
173
- }
174
- console.log(`basalt-ui init: --merge-lint — ${mergeMessage[mergeLint]}`)
186
+ // `already` / `absent` need no words: the preset is on, or the seeded config just made it so.
187
+ const mergeMessage: Partial<Record<MergeLintResult, string>> = {
188
+ added: `spliced "${ctx.vars.OXLINT_PRESET_PATH}" into the existing .oxlintrc.json extends`,
189
+ unreadable: '.oxlintrc.json is not valid JSON — merge the extends entry by hand',
190
+ 'has-comments':
191
+ '.oxlintrc.json carries comments; rewriting it would delete them (usually the reason each ' +
192
+ `rule is off). Add "extends": ["${ctx.vars.OXLINT_PRESET_PATH}"] as the first entry by hand.`,
175
193
  }
194
+ const mergeLine = mergeLint === null ? undefined : mergeMessage[mergeLint]
195
+ if (mergeLine !== undefined) console.log(`basalt-ui init: oxlint — ${mergeLine}`)
196
+ const tsconfigLine = tokensOnly ? null : seedTsconfigExtends(cwd)
197
+ if (tsconfigLine !== null) console.log(`basalt-ui init: ${tsconfigLine}`)
198
+ if (buildNote !== null) console.log(`basalt-ui init: ${buildNote}`)
176
199
  const rootsMessages = rootsNotices(rootsState)
177
200
  for (const line of rootsMessages.log) console.log(`basalt-ui init: ${line}`)
178
201
  for (const line of rootsMessages.error) console.error(`⚠ basalt-ui init: ${line}`)
179
202
  if (seededLintScript) {
180
203
  console.log(`basalt-ui init: added the "lint:basalt" script (${lintScript}) to package.json.`)
181
204
  }
182
- // The permanent placement skips (repo-root-shaped tooling, a relocated scaffold) — one text,
205
+ // The permanent placement skips (repo-root-shaped tooling) — one text,
183
206
  // shared with `sync`. See {@link placementNotices}.
184
207
  for (const line of placementNotices(cwd, placement)) {
185
208
  console.log(`basalt-ui init: ${line}`)
186
209
  }
187
- // query-client.ts / __root.tsx reference the optional TanStack peers directly — seeding them
188
- // without the peer installed would ship an unresolved import. Hint how to opt in instead.
189
- if (!peers.hasQuery) {
190
- console.log(
191
- 'basalt-ui init: skipped src/query-client.ts (no @tanstack/react-query dependency detected) — ' +
192
- 'install it, or re-run with --with-query, to scaffold it.',
193
- )
194
- }
195
- if (!peers.hasRouter || !peers.hasQuery) {
196
- console.log(
197
- 'basalt-ui init: skipped src/routes/__root.tsx (needs both @tanstack/react-router and ' +
198
- '@tanstack/react-query) — install both, or re-run with --with-router --with-query, to scaffold it.',
199
- )
200
- }
201
210
  // The guard-hook PreToolUse registration is NOT written automatically — add it manually to
202
211
  // .claude/settings.json so every Write/Edit/MultiEdit goes through the theme guard.
203
212
  console.log(
package/src/cli/sync.ts CHANGED
@@ -1,13 +1,8 @@
1
- /**
2
- * `sync` — split out of `src/cli/index.ts` (C2) so the dispatcher file holds routing only. Imports
3
- * the managed-file manifest engine (`managedFiles`, `readManifest`, `writeUnit`, `reconcileRoots`,
4
- * …), the toolchain-seam inspectors (`inspectLefthookGate`, `basaltPresetEntry`), and project
5
- * resolution back from `./index`, this package's shared CLI helpers.
6
- */
1
+ /** `sync` — split out of `src/cli/index.ts` (C2); shared plumbing is imported back from `./index`. */
7
2
  import { existsSync } from 'node:fs'
8
3
  import { resolve } from 'node:path'
9
4
 
10
- import { deriveSpacing } from '../tokens'
5
+ import { deriveSpacing } from '../tokens/core'
11
6
  import {
12
7
  MANIFEST_PATH,
13
8
  basaltPresetEntry,
@@ -17,12 +12,8 @@ import {
17
12
  diffSummary,
18
13
  findBasaltInstall,
19
14
  inspectLefthookGate,
20
- AGENTS_MD,
21
- blockMigrationProblem,
22
15
  isStringArray,
23
- LEGACY_BLOCK_HOST,
24
16
  managedFiles,
25
- migrateBlockToAgentsMd,
26
17
  normalizeForLedger,
27
18
  noteRelocation,
28
19
  OXLINT_FILES,
@@ -36,9 +27,7 @@ import {
36
27
  reconcileRoots,
37
28
  relativePosix,
38
29
  renderContext,
39
- reportBlockMigration,
40
30
  reportPrune,
41
- resolvePeerFlags,
42
31
  resolvePlacement,
43
32
  resolveProjectDir,
44
33
  rootsNotices,
@@ -63,22 +52,8 @@ export type SyncOptions = {
63
52
  }
64
53
 
65
54
  /**
66
- * The nearest ANCESTOR of `dir` (exclusive) carrying a basalt manifest, or null.
67
- *
68
- * `resolveProjectDir` resolves to exactly one directory — `BASALT_CWD` when set, else the
69
- * invocation cwd — and never walks. The shape that produced this function is the one that resolver
70
- * doesn't cover: a consumer standing in `apps/dashboard`, the package that actually depends on
71
- * basalt-ui, whose install lives at the repo root above it. With nothing walking up, `sync` read
72
- * "no manifest here" as "nothing scaffolded yet" and wrote a complete second consumer beside the
73
- * real one.
74
- */
75
- /**
76
- * The sentence `sync` prints when the cwd carries no install but an ancestor does.
77
- *
78
- * Shared with `doctor` deliberately. The two commands already share `resolveProjectDir`, but not
79
- * the ADVICE: `sync` named the parent install (1.22.0's "stop scaffolding a second consumer" fix)
80
- * while `doctor`, in the same directory, kept prescribing `basalt-ui init` — so following doctor
81
- * literally performed the exact mistake that fix exists to prevent. One function, one sentence.
55
+ * The sentence `sync` and `doctor` both print when the cwd carries no install but an ancestor does
56
+ * (a package under a configured repo); one text, so neither prescribes a second `init`.
82
57
  */
83
58
  export function parentInstallAdvice(cwd: string, parent: string, verb: string): string {
84
59
  return (
@@ -87,6 +62,7 @@ export function parentInstallAdvice(cwd: string, parent: string, verb: string):
87
62
  )
88
63
  }
89
64
 
65
+ /** The nearest ANCESTOR of `dir` (exclusive) carrying a basalt manifest, or null. */
90
66
  export function findManifestAbove(dir: string): string | null {
91
67
  let current = resolve(dir, '..')
92
68
  for (;;) {
@@ -104,11 +80,8 @@ export function findManifestAbove(dir: string): string | null {
104
80
  * (a CI freshness gate), exit 0 when all current.
105
81
  * - `--force` overwrites locally-drifted files instead of skipping them.
106
82
  *
107
- * Runs against `resolveProjectDir(cwd)`, exactly as `check-theme` and `doctor` do — and then
108
- * REFUSES rather than scaffolding when the resolved project has no manifest. See
109
- * {@link findManifestAbove} for the failure that bought this: `sync` is the drift refresh and
110
- * `init` is the scaffold, so placing twenty files on a cwd that was never a consumer is a decision
111
- * `sync` does not get to make silently.
83
+ * Runs against `resolveProjectDir(cwd)` and REFUSES rather than scaffolding when that project has no
84
+ * manifest: `sync` refreshes, `init` scaffolds.
112
85
  */
113
86
  export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd()): number {
114
87
  const syncFlags = opts.flags ?? []
@@ -117,15 +90,8 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
117
90
  const cwd = project.dir
118
91
  noteRelocation('sync', project)
119
92
 
120
- // Profile before the refusal, because in a tokens-only consumer the refusal's own advice is
121
- // wrong: it names `basalt-ui init`, and `doctor` in the same directory at the same version says
122
- // in so many words that init is NOT the fix there — it places a Mantine doctrine the consumer
123
- // has no use for. Mirrors doctor's manifest row verbatim, and exits 0 so `sync --check` is
124
- // wirable into a tokens-only repo's CI (the one drift gate every other consumer runs).
125
- //
126
- // DECLARED, never inferred — the same asymmetry check-theme applies, for the same reason: the
127
- // answer SILENCES the whole reconciliation, and inferring it from a missing @mantine/core would
128
- // turn a framework consumer that keeps Mantine in a sibling package into a silent no-op.
93
+ // Profile before the refusal: init is NOT the fix for a tokens-only consumer. Declared, never
94
+ // inferred (the answer silences the whole reconciliation); exits 0 so `sync --check` is wirable.
129
95
  if (declaredProfile(readBasaltConfig(cwd), syncFlags) === 'tokens-only') {
130
96
  console.log(
131
97
  `basalt-ui sync: ${MANIFEST_PATH}: n/a — a tokens-only consumer has no scaffold to ` +
@@ -135,12 +101,10 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
135
101
  return 0
136
102
  }
137
103
 
138
- // The refusal runs BEFORE reconcileRoots, which WRITES `basalt.roots` into package.json — that
139
- // key is half the damage: a second `basalt` block means check-theme scans a different tree
140
- // depending on which directory it was invoked from.
104
+ // Refuse BEFORE reconcileRoots, which writes `basalt.roots` into package.json.
141
105
  if (!existsSync(resolve(cwd, MANIFEST_PATH))) {
142
106
  const elsewhere = findManifestAbove(cwd)
143
- const wouldWrite = managedFiles(resolvePeerFlags(cwd, {}), resolvePlacement(cwd)).length
107
+ const wouldWrite = managedFiles(resolvePlacement(cwd)).length
144
108
  console.error(
145
109
  `✖ basalt-ui sync: no ${MANIFEST_PATH} at ${cwd} — refusing to scaffold. ` +
146
110
  `\`sync\` refreshes an EXISTING basalt install; creating one is \`basalt-ui init\`'s ` +
@@ -154,24 +118,12 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
154
118
  return 1
155
119
  }
156
120
 
157
- // A block that cannot be moved safely refuses the whole run BEFORE reconcileRoots writes anything.
158
- const blockProblem = blockMigrationProblem(cwd)
159
- if (blockProblem !== null) {
160
- console.error(`✖ basalt-ui sync: ${blockProblem}`)
161
- return 1
162
- }
163
-
164
121
  // Before renderContext, which reads `basalt.roots` for the roots-derived template variables.
165
122
  const rootsState = reconcileRoots(cwd, { write: opts.check !== true })
166
123
  const ctx = renderContext(cwd)
167
124
  const manifest = readManifest(cwd)
168
- const peers = resolvePeerFlags(cwd, {})
169
125
  const placement = resolvePlacement(cwd)
170
- const files = managedFiles(peers, placement)
171
-
172
- // Before the loop: the block moved from CLAUDE.md to AGENTS.md, and the loop reads AGENTS.md.
173
- // `--check` only reports it (and stays red until a real sync moves it).
174
- const migration = migrateBlockToAgentsMd(cwd, manifest, { dryRun: opts.check === true })
126
+ const files = managedFiles(placement)
175
127
 
176
128
  let updated = 0
177
129
  // `created` and `recreated` were one counter, and `0 updated, 20 recreated` is what a full
@@ -288,16 +240,10 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
288
240
  `${retired.join(', ')} — run \`basalt-ui sync\`.`,
289
241
  )
290
242
  }
291
- if (migration.pending) {
292
- console.error(
293
- `basalt-ui sync --check: the basalt block is still in ${LEGACY_BLOCK_HOST} — it now ` +
294
- `lives in ${AGENTS_MD}. Run \`basalt-ui sync\` to move it.`,
295
- )
296
- }
297
243
  if (staleForCheck > 0) {
298
244
  console.error(`basalt-ui sync --check: ${staleForCheck} managed file(s) out of date.`)
299
245
  }
300
- if (staleForCheck > 0 || migration.pending) return 1
246
+ if (staleForCheck > 0) return 1
301
247
  const n = placementSkips.length
302
248
  const skips = n === 0 ? '' : ` (${n} permanent placement skip(s) — --verbose for detail)`
303
249
  console.log(`✓ basalt-ui sync --check: all managed files current.${skips}`)
@@ -313,7 +259,6 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
313
259
  `${skippedDrift} skipped (drift), ${pruned.removed.length} retired.`,
314
260
  )
315
261
  reportPrune(pruned)
316
- reportBlockMigration(migration, 'sync')
317
262
  if (driftLines.length > 0) {
318
263
  console.log('Locally-edited files were skipped (run with --force to overwrite):')
319
264
  for (const l of driftLines) console.log(l)
@@ -34,21 +34,9 @@ function generatedHeader(version: string, command: string, flags: string[]): str
34
34
 
35
35
  /**
36
36
  * Space- and number-normalize the argument list of a legacy color function so the emitted file
37
- * survives a normal repo's formatter.
38
- *
39
- * This is FORMATTING ONLY and deliberately the CLI's single deviation from "print exactly what
40
- * `buildPaletteCss` returned": `rgba(255,255,255,0.6)` and `rgba(255, 255, 255, 0.6)` are the same
41
- * colour, the shipped palette emits the first form on the dark side and the second on the light
42
- * side, and a consumer committing the output ate a lint-ignore entry for the difference. The token
43
- * VALUES are untouched — nothing here can change what basalt's tokens are.
44
- *
45
- * Trailing zeros go the same way and for the same reason: prettier rewrites `0.10` → `0.1`, so the
46
- * two `rgba(28, 25, 23, 0.10)` alphas in the light shadow tokens were the whole reason the one
47
- * framework-free consumer still could not lint its committed sheet — `--fix` and `tokens:css
48
- * --check` disagreed forever, and the lint-ignore entry survived two releases. Only a bare decimal
49
- * literal is touched (never a `%`, a `var()` or a unit), and `0.10`/`0.1` are the same number.
50
- *
51
- * Exported for tests, so the expectation can be computed rather than restated.
37
+ * survives a repo's formatter (`rgba(255,255,255,0.6)` and `rgba(255, 255, 255, 0.6)` are the same
38
+ * colour; `0.10` becomes `0.1`). FORMATTING ONLY: token values are untouched, and only a bare decimal
39
+ * literal is touched (never a `%`, a `var()` or a unit). Exported for tests.
52
40
  */
53
41
  export function normalizeColorFunctions(css: string): string {
54
42
  return css.replace(/\b(rgba?|hsla?)\(([^()]*)\)/g, (_match, fn: string, args: string) => {
@@ -116,19 +104,10 @@ function emitGeneratedCss(content: string, flags: string[], cwd: string, command
116
104
  }
117
105
 
118
106
  /**
119
- * tokens:css — emit the `--vx-*` stylesheet, optionally retargeted.
120
- *
121
- * The escape hatch from installing anything: a static site runs this once (`bunx basalt-ui
122
- * tokens:css --selector-attribute data-theme --out src/tokens.css`) and consumes basalt's token
123
- * system as plain CSS, with no package in its dependency tree at all. `basalt-ui/tokens.css` is the
124
- * same artifact for a consumer that does install; this command exists for the ones that shouldn't
125
- * have to just to change a selector.
126
- *
127
- * It parses flags and calls `buildPaletteCss` for the token VALUES — the CLI and the API must not
128
- * be able to disagree about what basalt's tokens are. What it adds is strictly file framing for an
129
- * artifact a consumer COMMITS: the `@generated` header (the guard's skip marker), a trailing
130
- * newline, and `rgba()` argument spacing. All three were reported by the one framework-free
131
- * consumer as the reasons the output could not simply be committed.
107
+ * tokens:css — emit the `--vx-*` stylesheet, optionally retargeted, for a static site that installs
108
+ * nothing (`bunx basalt-ui tokens:css --selector-attribute data-theme --out src/tokens.css`). Token
109
+ * VALUES come from `buildPaletteCss`, so the CLI and the API cannot disagree; the CLI adds only file
110
+ * framing for a committed artifact: the `@generated` header, a trailing newline, `rgba()` spacing.
132
111
  */
133
112
  export function tokensCss(flags: string[], cwd: string = process.cwd()): number {
134
113
  const attribute = flagValue(flags, '--selector-attribute')
@@ -2,11 +2,11 @@
2
2
  * ShortcutsHelp — renders a keyboard shortcut reference list grouped by command group.
3
3
  *
4
4
  * Reads from the active command registry at render time via `toShortcutList()`. The same
5
- * Command.shortcut field also drives live key binding via useCommandHotkeys().
5
+ * Command.shortcut field also drives live key binding in `BasaltProvider`.
6
6
  *
7
7
  * Platform-aware label: 'Mod' → '⌘' on mac, 'Ctrl' elsewhere.
8
- * Platform detection defers to post-mount (useEffect) to avoid SSR/client hydration mismatch.
9
- * Server and first client render both use non-mac glyphs; the client updates after mount.
8
+ * Platform detection reads through `useSyncExternalStore` with a non-mac server snapshot, so SSR and
9
+ * the hydrating render agree and the client updates right after.
10
10
  *
11
11
  * @example
12
12
  * import { ShortcutsHelp } from 'basalt-ui/commands'
@@ -17,7 +17,7 @@
17
17
  * // With a custom title and max width:
18
18
  * <ShortcutsHelp title="Keyboard shortcuts" maw={480} />
19
19
  */
20
- import { useEffect, useState } from 'react'
20
+ import { useSyncExternalStore } from 'react'
21
21
  import { Box, Group, Kbd, Stack, Text, Title } from '@mantine/core'
22
22
  import type { BasaltProps } from '../common/props'
23
23
  import { cx } from '../common/props'
@@ -25,6 +25,8 @@ import { toShortcutList } from './projectors'
25
25
  import { detectMac, parseShortcut } from './shortcut-format'
26
26
  import { VX } from '../tokens'
27
27
 
28
+ const subscribeNever = (): (() => void) => () => {}
29
+
28
30
  // ── ShortcutsHelpProps ────────────────────────────────────────────────────────
29
31
 
30
32
  export type ShortcutsHelpProps = BasaltProps & {
@@ -78,11 +80,8 @@ export function ShortcutsHelp({
78
80
  style,
79
81
  }: ShortcutsHelpProps) {
80
82
  // Default false — SSR and first client render produce non-mac glyphs (no hydration mismatch).
81
- // Post-mount effect flips to true on macOS, triggering a single client-only re-render.
82
- const [isMac, setIsMac] = useState(false)
83
- useEffect(() => {
84
- setIsMac(detectMac())
85
- }, [])
83
+ // The client snapshot (`detectMac`) takes over right after hydration, in a single re-render.
84
+ const isMac = useSyncExternalStore(subscribeNever, detectMac, () => false)
86
85
 
87
86
  const shortcuts = toShortcutList()
88
87
 
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * define-commands — const-generic factory for typed command registries.
3
3
  *
4
- * Consumer defines their commands with defineCommands, augments BasaltRegister.commands, then uses
5
- * runCommand — unknown ids are tsc errors. The type slot gives the compile-time id union; the
6
- * module-level stash gives the runtime values (type augmentation is erased at runtime).
4
+ * Consumer defines their commands with defineCommands and augments BasaltRegister.commands.
5
+ * `BasaltProvider` reads the module-level stash for its Spotlight actions and hotkeys (type
6
+ * augmentation is erased at runtime; the stash is the live source).
7
7
  *
8
8
  * @example
9
9
  * // commands.ts (app-side)
@@ -16,12 +16,8 @@
16
16
  * declare module 'basalt-ui' {
17
17
  * interface BasaltRegister { commands: typeof COMMANDS }
18
18
  * }
19
- *
20
- * // usage.ts
21
- * import { runCommand } from 'basalt-ui/commands'
22
- * runCommand('file:save') // ✓ typed
23
- * runCommand('nonexistent') // ✗ tsc error
24
19
  */
20
+ import type { Hotkey } from '@tanstack/react-hotkeys'
25
21
  import type { ReactNode } from 'react'
26
22
  import type { Slot } from '../register'
27
23
 
@@ -36,7 +32,7 @@ import type { Slot } from '../register'
36
32
  * })
37
33
  */
38
34
  export type CommandRunContext = {
39
- /** Close the command palette (if open) before executing. Injected by BasaltOverlays. */
35
+ /** Close the command palette (if open) before executing. Injected by the palette. */
40
36
  close?: () => void
41
37
  }
42
38
 
@@ -62,11 +58,12 @@ export type Command = {
62
58
  /** Optional icon (ReactNode — no @tabler/icons dependency per house rules). */
63
59
  icon?: ReactNode
64
60
  /**
65
- * Optional keyboard shortcut string. Drives BOTH the ShortcutsHelp display AND live key
66
- * binding via useCommandHotkeys() (which registers with @tanstack/react-hotkeys optional peer).
67
- * Convention: 'Mod+S' (Mod = Cmd on mac, Ctrl elsewhere), 'Shift+Mod+P', etc.
61
+ * Optional keyboard shortcut, typed as the peer's `Hotkey` so a typo (`'Cmd+B'`) is a compile
62
+ * error. Drives BOTH the ShortcutsHelp display AND live key
63
+ * binding by `BasaltProvider` (through the @tanstack/react-hotkeys optional peer).
64
+ * Convention: 'Mod+S' (Mod = Cmd on mac, Ctrl elsewhere), 'Mod+Shift+P', etc.
68
65
  */
69
- shortcut?: string
66
+ shortcut?: Hotkey
70
67
  /**
71
68
  * Optional predicate — when() returning false hides the command from the palette.
72
69
  * Useful for context-sensitive commands (e.g. "save" only when a form is dirty).
@@ -109,7 +106,7 @@ export type CommandId = Extract<keyof Commands, string>
109
106
  /**
110
107
  * Module-level runtime registry. The BasaltRegister type-slot gives the compile-time id union,
111
108
  * but the augmentation is erased at runtime — so defineCommands also stashes the runtime map here
112
- * for runCommand and the projectors to resolve Command objects. Call defineCommands once (the
109
+ * for the provider and the projectors to resolve Command objects. Call defineCommands once (the
113
110
  * app's single command registry); the last call wins.
114
111
  */
115
112
  let activeCommands: CommandMap = {}
@@ -118,10 +115,10 @@ let activeCommands: CommandMap = {}
118
115
 
119
116
  /**
120
117
  * Define a typed command map. Const-generic identity passthrough — preserves the exact literal
121
- * keys so `runCommand('nonexistent')` is a tsc error after augmenting BasaltRegister.
118
+ * keys so the id union is exact after augmenting BasaltRegister.
122
119
  *
123
- * Stashes the runtime map so `runCommand` and `toSpotlightActions` resolve correctly at runtime
124
- * (type augmentation is erased; the stash is the live source).
120
+ * Stashes the runtime map so the provider resolves commands at runtime (type augmentation is
121
+ * erased; the stash is the live source).
125
122
  *
126
123
  * @example
127
124
  * export const COMMANDS = defineCommands({
@@ -144,7 +141,7 @@ export function defineCommands<const T extends CommandMap>(spec: T): T {
144
141
  *
145
142
  * WARNING: defineCommand only TYPES a command — it does NOT register it into the runtime stash.
146
143
  * Only defineCommands(map) registers commands. Calling defineCommand alone means the command will
147
- * never appear in the palette or be reachable via runCommand.
144
+ * never appear in the palette or bind its shortcut.
148
145
  *
149
146
  * @example
150
147
  * const saveCmd = defineCommand({ label: 'Save', shortcut: 'Mod+S', run: () => save() })
@@ -154,31 +151,7 @@ export function defineCommand(cmd: Command): Command {
154
151
  return cmd
155
152
  }
156
153
 
157
- // ── runCommand ────────────────────────────────────────────────────────────────
158
-
159
- /**
160
- * Run a registered command by id. The id must be a key of the consumer's registered
161
- * `BasaltRegister.commands` map — any other string is a tsc error.
162
- *
163
- * Resolves the command's run function from the runtime stash (NOT from the type slot — that is
164
- * erased). Un-augmented (Commands = {}): CommandId = never → `runCommand` is effectively
165
- * uncallable. Augmented: only the registered keys are accepted.
166
- *
167
- * @example
168
- * runCommand('file:save')
169
- * await runCommand('data:sync', { close: () => closeModal() })
170
- */
171
- export function runCommand(id: CommandId, ctx?: CommandRunContext): void | Promise<void> {
172
- const cmd = activeCommands[id as string]
173
- if (cmd === undefined) {
174
- if (process.env.NODE_ENV !== 'production')
175
- console.warn(`[basalt] runCommand: no command registered for "${id}"`)
176
- return
177
- }
178
- return cmd.run(ctx)
179
- }
180
-
181
- /** @internal — exposed for projectors.ts to iterate the runtime stash. Returns a readonly view. */
154
+ /** @internal — exposed to the provider and projectors.ts to iterate the runtime stash. Returns a readonly view. */
182
155
  export function getActiveCommands(): Readonly<CommandMap> {
183
156
  return activeCommands
184
157
  }