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
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ./table — BasaltDataTable: a sortable data table over @tanstack/react-table v9, rendered with
3
+ * Mantine primitives. Opt-in chrome: a search/facet toolbar, a pagination bar (client-side or
4
+ * server-driven) and sticky column pinning. `createColumnHelper` is basalt's own, bound to the
5
+ * table's feature set — no TanStack hook, feature or row-model symbol leaves this subpath.
6
+ *
7
+ * Optional peer: @tanstack/react-table 9.2.8 (exact).
8
+ *
9
+ * @example
10
+ * import { BasaltDataTable, createColumnHelper } from 'basalt-ui/table'
11
+ * type Row = { name: string; score: number }
12
+ * const col = createColumnHelper<Row>()
13
+ * const columns = [col.accessor('name', { header: 'Name' }), col.accessor('score', { header: 'Score' })]
14
+ * <BasaltDataTable data={rows} columns={columns} enableGlobalFilter enablePagination />
15
+ */
16
+
17
+ export { BasaltDataTable } from './data-table'
18
+ export { createColumnHelper } from './table-features'
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The ONE module-scope Table v9 feature set `BasaltDataTable` runs on, and the basalt-owned
3
+ * `createColumnHelper` bound to it. Nothing here but `createColumnHelper` leaves `./table`: the
4
+ * feature set, `useTable` and the row-model factories are implementation, and a consumer never
5
+ * spells `<TFeatures, TData>` (`docs/V2-SPEC.md` § 8).
6
+ */
7
+ import {
8
+ columnFilteringFeature,
9
+ columnPinningFeature,
10
+ columnSizingFeature,
11
+ columnVisibilityFeature,
12
+ createColumnHelper as tanstackColumnHelper,
13
+ createFilteredRowModel,
14
+ createPaginatedRowModel,
15
+ createSortedRowModel,
16
+ filterFn_includesString,
17
+ globalFilteringFeature,
18
+ metaHelper,
19
+ rowPaginationFeature,
20
+ rowSelectionFeature,
21
+ rowSortingFeature,
22
+ sortFn_alphanumeric,
23
+ sortFn_basic,
24
+ sortFn_datetime,
25
+ sortFn_text,
26
+ tableFeatures,
27
+ } from '@tanstack/react-table'
28
+ import type { ColumnDef, ColumnHelper, RowData } from '@tanstack/react-table'
29
+
30
+ /** Horizontal alignment of a column's header AND its cells. */
31
+ export type DataTableAlign = 'left' | 'center' | 'right'
32
+
33
+ /**
34
+ * What a column def's `meta` may carry. Registered per table through `columnMeta: metaHelper<…>()`
35
+ * rather than a global `declare module '@tanstack/react-table'`, so `meta: { aling: 'right' }` is a
36
+ * compile error (excess-property check on the literal) and nothing leaks into a consumer's own
37
+ * TanStack types. A wrong align VALUE that reaches runtime still throws at render.
38
+ */
39
+ export type BasaltColumnMeta = {
40
+ align?: DataTableAlign
41
+ /**
42
+ * Opt OUT of the automatic mono-numeral cell style. The table applies it whenever the cell's
43
+ * raw value is a number — which is right for a plain figure and wrong for a numeric accessor
44
+ * whose `cell` renders its own chrome (a coloured `Text`, a `Badge`, a sparkline), because the
45
+ * `<td>`'s mono font then overrides what the cell asked for.
46
+ */
47
+ numeral?: boolean
48
+ /**
49
+ * Fold priority for the measured column fold (`docs/CONTROLS-SPEC.md` §2): once the
50
+ * table no longer fits its wrapper, the HIGHEST-numbered priority column folds first, moving
51
+ * into a per-row disclosure instead of forcing the table into horizontal scroll. Unset columns
52
+ * fall back to their declared position, so a bare `<BasaltDataTable data columns />` folds its
53
+ * LAST column first — nothing regresses with no `meta.priority` set anywhere. See `foldOrder`.
54
+ */
55
+ priority?: number
56
+ }
57
+
58
+ /**
59
+ * Every row model is registered (v9 has no per-render `getXRowModel` switch); the table bypasses the
60
+ * ones a prop turns off through TanStack's `manual*` flags. `sortFns` is load-bearing: v9 falls back
61
+ * to `basic` for an unregistered sort function with only a dev warning, which sorts `Project 10`
62
+ * before `Project 2`. `columnSizingFeature` is too — `column.getStart`/`getAfter` live there, and
63
+ * sticky pinning reads them.
64
+ */
65
+ export const basaltTableFeatures = tableFeatures({
66
+ rowSortingFeature,
67
+ columnFilteringFeature,
68
+ globalFilteringFeature,
69
+ rowPaginationFeature,
70
+ rowSelectionFeature,
71
+ columnSizingFeature,
72
+ columnPinningFeature,
73
+ columnVisibilityFeature,
74
+ sortedRowModel: createSortedRowModel(),
75
+ filteredRowModel: createFilteredRowModel(),
76
+ paginatedRowModel: createPaginatedRowModel(),
77
+ sortFns: {
78
+ alphanumeric: sortFn_alphanumeric,
79
+ text: sortFn_text,
80
+ datetime: sortFn_datetime,
81
+ basic: sortFn_basic,
82
+ },
83
+ filterFns: { includesString: filterFn_includesString },
84
+ columnMeta: metaHelper<BasaltColumnMeta>(),
85
+ })
86
+
87
+ export type BasaltTableFeatures = typeof basaltTableFeatures
88
+
89
+ /**
90
+ * A column def of `BasaltDataTable`'s feature set; the cell value varies per column, hence the `any`.
91
+ * Build columns with `createColumnHelper` below — hand-typing this is not the supported path.
92
+ */
93
+ // oxlint-disable-next-line typescript/no-explicit-any -- TanStack-idiomatic heterogeneous column array
94
+ export type BasaltColumnDef<T extends RowData> = ColumnDef<BasaltTableFeatures, T, any>
95
+
96
+ /**
97
+ * Typed accessor builder for `BasaltDataTable` columns: `col.accessor('field', …)` columns sort by
98
+ * value. One generic, the row type — the feature set is basalt's.
99
+ */
100
+ export function createColumnHelper<T extends RowData>(): ColumnHelper<BasaltTableFeatures, T> {
101
+ return tanstackColumnHelper<BasaltTableFeatures, T>()
102
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The telemetry seam (V2-SPEC § 7). Basalt emits typed events through one sink,
3
+ * `BasaltProvider telemetry`, and has no OTel dependency; the consumer maps events to its own SDK.
4
+ *
5
+ * Events carry ids, hashes, counts and durations only — never an error object, message, stack,
6
+ * search param or query data. A `failed: true` event additionally carries `exception.type` and
7
+ * `basalt.error.kind`; a `failed: false` event carries neither, and the types enforce both ways.
8
+ */
9
+ import { createContext } from 'react'
10
+ import type { ThreadStatus } from './agent/thread'
11
+
12
+ /** Epoch ms (`performance.timeOrigin + performance.now()`). */
13
+ type At = { start: number }
14
+ /** `start` plus a duration in ms. */
15
+ type Span = At & { duration: number }
16
+
17
+ /** The error family, or an `AgentError` kind (W8) — closed. */
18
+ type ErrorKind =
19
+ | 'route'
20
+ | 'query'
21
+ | 'mutation'
22
+ | 'render'
23
+ | 'window'
24
+ | 'unhandledrejection'
25
+ | 'http'
26
+ | 'stream'
27
+ | 'server'
28
+ | 'aborted'
29
+
30
+ type Failure = { 'exception.type': string; 'basalt.error.kind': ErrorKind }
31
+ type Ok<T, A> = Span & { type: T; failed: false; attributes: A }
32
+ type Err<T, A, S = At> = S & { type: T; failed: true; attributes: A & Failure }
33
+
34
+ type RouteAttrs = {
35
+ 'basalt.route.id': string
36
+ 'basalt.route.from': string
37
+ /** Pathname, never search. */
38
+ 'url.path': string
39
+ }
40
+
41
+ type ChatAttrs = {
42
+ 'basalt.chat.thread_id': string
43
+ 'basalt.chat.ttft_ms': number
44
+ 'basalt.chat.parts': number
45
+ 'basalt.chat.status': ThreadStatus
46
+ }
47
+
48
+ /**
49
+ * Closed union: switch on `type`/`failed` and end with `default: return event satisfies never`.
50
+ *
51
+ * @example
52
+ * export function telemetry(e: BasaltEvent): void {
53
+ * const span = tracer.startSpan(e.type, { startTime: e.start, attributes: { ...e.attributes } })
54
+ * if (e.failed) span.setStatus({ code: SpanStatusCode.ERROR })
55
+ * span.end('duration' in e ? e.start + e.duration : e.start)
56
+ * }
57
+ */
58
+ export type BasaltEvent =
59
+ | Ok<'route.navigate', RouteAttrs>
60
+ | Err<'route.error', { 'basalt.route.id': string }>
61
+ | Err<'query.error', { 'basalt.query.hash': string; 'basalt.query.failure_count': number }>
62
+ | Err<'mutation.error', { 'basalt.mutation.key': string }>
63
+ | Err<'render.error', { 'basalt.error.boundary': 'root' }>
64
+ | Err<'window.error', { 'basalt.error.source': 'error' | 'unhandledrejection' }>
65
+ | Ok<'chat.turn', ChatAttrs>
66
+ | Err<'chat.turn', ChatAttrs, Span>
67
+
68
+ export type Telemetry = (event: BasaltEvent) => void
69
+
70
+ export const now = (): number => performance.timeOrigin + performance.now()
71
+
72
+ /** `error.name`, `'Error'` for a non-`Error` throw. */
73
+ export const errorName = (error: unknown): string => (error instanceof Error ? error.name : 'Error')
74
+
75
+ /**
76
+ * Wrap a sink so it is called synchronously and a throwing sink never breaks a render. No sink, no
77
+ * events.
78
+ */
79
+ export function createEmitter(sink: Telemetry | undefined): Telemetry {
80
+ if (sink === undefined) return noop
81
+ return (event) => {
82
+ try {
83
+ sink(event)
84
+ } catch {
85
+ // a throwing sink must never break the app (§ 7 delivery rules)
86
+ }
87
+ }
88
+ }
89
+
90
+ function noop(): void {}
91
+
92
+ /**
93
+ * The provider's wrapped emitter, for hooks that emit their own events (`useAgentThreadRuns`'
94
+ * `chat.turn`). `undefined` outside a `BasaltProvider`, where such a hook emits nothing.
95
+ */
96
+ export const TelemetryContext = createContext<Telemetry | undefined>(undefined)
97
+
98
+ /** The event sink of the provider mounted on a router, read by `createBasaltRouter`'s `onCatch`. */
99
+ const routerSinks = new WeakMap<object, Telemetry>()
100
+
101
+ export function bindRouterTelemetry(router: object, emit: Telemetry): () => void {
102
+ routerSinks.set(router, emit)
103
+ return () => {
104
+ if (routerSinks.get(router) === emit) routerSinks.delete(router)
105
+ }
106
+ }
107
+
108
+ export function routerTelemetry(router: object): Telemetry {
109
+ return routerSinks.get(router) ?? noop
110
+ }
@@ -81,9 +81,9 @@ import {
81
81
  import type { PaletteData, RadiusValues, SpaceValues } from '../tokens/palette'
82
82
  import { DEFAULT_DERIVE_CONFIG, isDefaultDeriveConfig, resolveDeriveConfig } from '../tokens/derive'
83
83
  import type { DeriveConfig } from '../tokens/derive'
84
- import { pxRem, VX } from '../tokens'
84
+ import { pxRem, VX } from '../tokens/core'
85
85
  import { SIZE_CLASS_BREAKPOINTS } from '../tokens/size-classes'
86
- import type { BasaltFontsConfig } from '../tokens'
86
+ import type { BasaltFontsConfig } from '../tokens/core'
87
87
  import controlsClasses from './controls.module.css'
88
88
  import floatingClasses from './floating.module.css'
89
89
  import navLinkClasses from './nav-link.module.css'
@@ -92,12 +92,12 @@ import timelineClasses from './timeline.module.css'
92
92
  import { HIT_ATTR } from './ctl-theme'
93
93
 
94
94
  /**
95
- * The `fonts` option's resolved shape — defined in `basalt-ui/tokens` (`BasaltFontsConfig`,
96
- * paired with its pure builder `buildFontsCss` there); re-exported here since
95
+ * The `fonts` option's resolved shape — defined in `../tokens/core` (`BasaltFontsConfig`, paired
96
+ * with its pure builder `buildFontsCss` there, internal to the package); re-exported here since
97
97
  * `CreateBasaltThemeOptions.fonts` below is its primary production entry point. See
98
98
  * {@link CreateBasaltThemeOptions.fonts}.
99
99
  */
100
- export type { BasaltFontsConfig } from '../tokens'
100
+ export type { BasaltFontsConfig } from '../tokens/core'
101
101
 
102
102
  // The active resolved SpaceValues off the running theme (as opposed to the static level-0
103
103
  // snapshot) — see its own doc comment for why it lives here rather than in `tokens/`.
@@ -110,11 +110,10 @@ export { useBasaltSpacing } from './use-basalt-spacing'
110
110
  export { CTL_THEME, CtlSlot, type CtlSlotProps } from './ctl-theme'
111
111
 
112
112
  // `ThemeToggle` moved into this directory (C1 consolidation, merging the former `theme-toggle/`
113
- // dir) but is deliberately NOT re-exported from this barrel: it imports `motion/react` eagerly,
114
- // and this file resolves from `./controls` (via `CtlSlot`) among others — re-exporting it here
115
- // would make `motion` a hard transitive peer of every consumer of this barrel, not just of
116
- // `ThemeToggle` itself. The root barrel (`src/index.ts`) imports it straight from
117
- // `./theme/theme-toggle`, unchanged from before the merge.
113
+ // dir) and is deliberately NOT re-exported from this barrel: the root barrel (`src/index.ts`) imports
114
+ // it straight from `./theme/theme-toggle`, which keeps it out of the `./controls` graph (this file
115
+ // resolves from `./controls` via `CtlSlot`). It no longer imports `motion/react` (V2-SPEC § 5), so
116
+ // that is no longer a peer concern, only a graph-size one.
118
117
 
119
118
  // Typed `theme.other.basaltDerive` / `theme.other.basaltFonts` / `theme.other.basaltRadius` /
120
119
  // `theme.other.basaltDensity` reads (Mantine's `MantineThemeOther` ships an index signature, so
@@ -447,6 +446,8 @@ function buildTheme(data: PaletteData, options: BuildThemeOptions = {}): Mantine
447
446
  // Mantine's dark `--mantine-color-{c}-text`, which is hardcoded to shade 4 = `ACCENT.accent.dark`.
448
447
  primaryShade: 6,
449
448
  autoContrast: true,
449
+ // V2-SPEC § 5: Mantine's own transitions (modal, drawer, popover, menu) follow the OS setting.
450
+ respectReducedMotion: true,
450
451
  luminanceThreshold: 0.45,
451
452
  // Force the `light` variant to a faint, AA-legible tint in both schemes (see resolver above).
452
453
  variantColorResolver: basaltVariantColorResolver,
@@ -1433,6 +1434,12 @@ function ctlSizeVars(): Record<string, string> {
1433
1434
  }
1434
1435
  }
1435
1436
 
1437
+ /** `radius` knob: an integer level, so an out-of-range value is a tsc error (V2-SPEC §3). */
1438
+ export type BasaltRadiusLevel = -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5
1439
+
1440
+ /** `density` knob: an integer level, so an out-of-range value is a tsc error (V2-SPEC §3). */
1441
+ export type BasaltDensityLevel = -3 | -2 | -1 | 0 | 1 | 2 | 3
1442
+
1436
1443
  /**
1437
1444
  * Build the `cssVariablesResolver` bound to a given palette `data` — the derive-config-dependent
1438
1445
  * half of the fallback hexes below (see `buildTheme` above for the same split on `theme.colors`).
@@ -1444,9 +1451,9 @@ function ctlSizeVars(): Record<string, string> {
1444
1451
  * `BasaltBridge`'s injected `<style>` (the palette CSS built from the SAME resolved config, keyed
1445
1452
  * by `theme.other.basaltDerive`), which wins the cascade over the resolver's inline fallback hexes.
1446
1453
  * Limitation: `injectPalette={false}` combined with a custom `derive` therefore leaves the
1447
- * resolver's fallback hexes at the shipped defaults — a consumer taking over palette injection
1448
- * (SSR/head) with a non-default derive config must also emit `buildPaletteCss(opts, buildPaletteData(config))`
1449
- * themselves, or those fallbacks silently mismatch the intended identity.
1454
+ * resolver's fallback hexes at the shipped defaults, silently mismatching the intended identity.
1455
+ * `buildPaletteData` is not public, so a consumer with a non-default derive config keeps
1456
+ * `injectPalette` on.
1450
1457
  */
1451
1458
  function buildCssVariablesResolver(data: PaletteData): CSSVariablesResolver {
1452
1459
  const { INK, NEUTRAL, SURFACE } = data
@@ -1575,7 +1582,7 @@ export type CreateBasaltThemeOptions = {
1575
1582
  * @example
1576
1583
  * createBasaltTheme(undefined, { radius: 2 })
1577
1584
  */
1578
- radius?: number
1585
+ radius?: BasaltRadiusLevel
1579
1586
 
1580
1587
  /**
1581
1588
  * Retune spacing DENSITY from a single integer level in `[-3, 3]` (default `0` = the shipped
@@ -1598,23 +1605,7 @@ export type CreateBasaltThemeOptions = {
1598
1605
  * @example
1599
1606
  * createBasaltTheme(undefined, { density: -2 })
1600
1607
  */
1601
- density?: number
1602
-
1603
- /**
1604
- * Input sizing for the platform the app runs on. `'touch'` (default) keeps the shipped identity:
1605
- * `md` inputs (42px) with the 16px font floor that stops iOS Safari's focus-zoom. `'desktop'` is
1606
- * for an app that never runs in a mobile browser (a Tauri/Electron shell): the Input family
1607
- * (`TextInput`, `NumberInput`, `PasswordInput`, `Select`, `Textarea`, `Input`) defaults to
1608
- * Mantine's `sm` (36px, `--vx-text-sm` font) and the provider drops the 16px floor, so every
1609
- * input Mantine ships — `MultiSelect`/`TagsInput`/pills included, they already default to `sm` —
1610
- * renders at its own size. An explicit `size` prop still wins. Stashed on
1611
- * `theme.other.basaltInputs` (only when non-default); `BasaltProvider` emits the floor override,
1612
- * so `injectPalette={false}` also opts it out.
1613
- *
1614
- * @example
1615
- * createBasaltTheme(undefined, { inputs: 'desktop' })
1616
- */
1617
- inputs?: 'touch' | 'desktop'
1608
+ density?: BasaltDensityLevel
1618
1609
  }
1619
1610
 
1620
1611
  /**
@@ -1627,20 +1618,6 @@ function hasFontsConfig(fonts: BasaltFontsConfig | undefined): fonts is BasaltFo
1627
1618
  return fonts !== undefined && Object.values(fonts).some((value) => value !== undefined)
1628
1619
  }
1629
1620
 
1630
- /** `{ inputs: 'desktop' }` — see {@link CreateBasaltThemeOptions.inputs}. Merged AFTER the base
1631
- * theme, so `defaultProps.size: 'sm'` replaces the base's `'md'` and `other` deep-merges. */
1632
- const DESKTOP_INPUTS_THEME: MantineThemeOverride = {
1633
- components: {
1634
- Input: Input.extend({ defaultProps: { size: 'sm' } }),
1635
- TextInput: TextInput.extend({ defaultProps: { size: 'sm' } }),
1636
- NumberInput: NumberInput.extend({ defaultProps: { size: 'sm' } }),
1637
- PasswordInput: PasswordInput.extend({ defaultProps: { size: 'sm' } }),
1638
- Select: Select.extend({ defaultProps: { size: 'sm' } }),
1639
- Textarea: Textarea.extend({ defaultProps: { size: 'sm' } }),
1640
- },
1641
- other: { basaltInputs: 'desktop' },
1642
- }
1643
-
1644
1621
  /**
1645
1622
  * Build the Basalt theme, optionally merged with consumer overrides. Overrides win on conflict
1646
1623
  * (Mantine `mergeThemeOverrides` is last-wins), so a consumer can retune any field without
@@ -1677,7 +1654,6 @@ export function createBasaltTheme(
1677
1654
  const spaceValues = deriveSpacing(densityLevel)
1678
1655
  const isDefaultDensity = densityLevel === 0
1679
1656
  const isDefaultDerive = isDefaultDeriveConfig(resolvedConfig)
1680
- const desktopInputs = options?.inputs === 'desktop'
1681
1657
 
1682
1658
  let theme: MantineThemeOverride
1683
1659
  if (isDefaultDerive && isDefaultRadius && isDefaultDensity) {
@@ -1699,7 +1675,6 @@ export function createBasaltTheme(
1699
1675
  if (hasFontsConfig(fontsConfig)) {
1700
1676
  theme = mergeThemeOverrides(theme, { other: { basaltFonts: fontsConfig } })
1701
1677
  }
1702
- if (desktopInputs) theme = mergeThemeOverrides(theme, DESKTOP_INPUTS_THEME)
1703
1678
  if (!overrides) return theme
1704
1679
  // `theme.breakpoints` is derived from `SIZE_CLASSES` — a JS caller's override is dropped.
1705
1680
  return { ...mergeThemeOverrides(theme, overrides), breakpoints: SIZE_CLASS_BREAKPOINTS }
@@ -0,0 +1,30 @@
1
+ /*
2
+ * The sun/moon glyph: both icons stacked in one grid cell, the inactive one faded, shrunk and
3
+ * rotated away. A CSS transition, not `motion` (V2-SPEC § 5); reduced motion swaps instantly.
4
+ */
5
+ .glyph {
6
+ display: inline-grid;
7
+ place-items: center;
8
+ }
9
+
10
+ .sun,
11
+ .moon {
12
+ grid-area: 1 / 1;
13
+ display: inline-flex;
14
+ transition:
15
+ opacity 150ms ease,
16
+ transform 250ms cubic-bezier(0.4, 0, 0.2, 1);
17
+ }
18
+
19
+ .glyph[data-dark='true'] .sun,
20
+ .glyph[data-dark='false'] .moon {
21
+ opacity: 0;
22
+ transform: scale(0.6) rotate(30deg);
23
+ }
24
+
25
+ @media (prefers-reduced-motion: reduce) {
26
+ .sun,
27
+ .moon {
28
+ transition: none;
29
+ }
30
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Typed CSS-module declaration (the S4 CSS-modules path). Named string props — not an index
3
+ * signature — so dot access stays verbatim under the package's strict flags.
4
+ */
5
+ declare const classes: {
6
+ readonly glyph: string
7
+ readonly sun: string
8
+ readonly moon: string
9
+ }
10
+ export default classes
@@ -8,23 +8,20 @@
8
8
  *
9
9
  * The glyph is a single animated sun/moon (never a third "computer" icon) reflecting the
10
10
  * *resolved* appearance (`useComputedColorScheme`) — no extra chrome for system mode; the tooltip
11
- * ("System (dark)") and the popover's selected option carry that state instead. Animated via
12
- * `motion` (see `../motion` for the shared duration/spring tokens); collapses to an instant,
13
- * unanimated swap when `useReducedMotion` reports a preference for reduced motion.
11
+ * ("System (dark)") and the popover's selected option carry that state instead. Animated by a CSS
12
+ * transition (`theme-toggle.module.css`), which drops to an instant swap under
13
+ * `prefers-reduced-motion: reduce`.
14
14
  */
15
15
  import {
16
16
  ActionIcon,
17
- Center,
18
17
  Popover,
19
18
  SegmentedControl,
20
19
  useComputedColorScheme,
21
20
  useMantineColorScheme,
22
21
  } from '@mantine/core'
23
- import { useReducedMotion } from '@mantine/hooks'
24
- import { AnimatePresence, motion } from 'motion/react'
25
22
  import { useRef, useState } from 'react'
26
- import { MOTION_SPRING } from '../common/motion'
27
23
  import type { BasaltProps } from '../common/props'
24
+ import classes from './theme-toggle.module.css'
28
25
 
29
26
  type Scheme = 'light' | 'dark' | 'auto'
30
27
 
@@ -71,41 +68,17 @@ function MoonGlyph() {
71
68
  )
72
69
  }
73
70
 
74
- /** The animated sun/moon glyph — crossfades + rotates between the two on scheme change. */
75
- function SchemeGlyph({ dark, reduceMotion }: { dark: boolean; reduceMotion: boolean }) {
76
- if (reduceMotion) {
77
- return (
78
- <Center component="span" inline>
79
- {dark ? <MoonGlyph /> : <SunGlyph />}
80
- </Center>
81
- )
82
- }
71
+ /** The sun/moon glyph — both mounted, crossfaded and rotated by CSS on scheme change. */
72
+ function SchemeGlyph({ dark }: { dark: boolean }) {
83
73
  return (
84
- <AnimatePresence mode="wait" initial={false}>
85
- {dark ? (
86
- <motion.span
87
- key="moon"
88
- style={{ display: 'inline-flex' }} // theme-allow inline-display — a framer-motion glyph wrapper, not a Mantine layout node
89
- initial={{ opacity: 0, scale: 0.6, rotate: 30 }}
90
- animate={{ opacity: 1, scale: 1, rotate: 0 }}
91
- exit={{ opacity: 0, scale: 0.6, rotate: -30 }}
92
- transition={MOTION_SPRING}
93
- >
94
- <MoonGlyph />
95
- </motion.span>
96
- ) : (
97
- <motion.span
98
- key="sun"
99
- style={{ display: 'inline-flex' }} // theme-allow inline-display — a framer-motion glyph wrapper, not a Mantine layout node
100
- initial={{ opacity: 0, scale: 0.6, rotate: -30 }}
101
- animate={{ opacity: 1, scale: 1, rotate: 0 }}
102
- exit={{ opacity: 0, scale: 0.6, rotate: 30 }}
103
- transition={MOTION_SPRING}
104
- >
105
- <SunGlyph />
106
- </motion.span>
107
- )}
108
- </AnimatePresence>
74
+ <span className={classes.glyph} data-dark={dark}>
75
+ <span className={classes.sun}>
76
+ <SunGlyph />
77
+ </span>
78
+ <span className={classes.moon}>
79
+ <MoonGlyph />
80
+ </span>
81
+ </span>
109
82
  )
110
83
  }
111
84
 
@@ -129,7 +102,6 @@ export function ThemeToggle({
129
102
  }: ThemeToggleProps = {}) {
130
103
  const { colorScheme, setColorScheme } = useMantineColorScheme()
131
104
  const resolved = useComputedColorScheme('dark')
132
- const reduceMotion = useReducedMotion()
133
105
  const [opened, setOpened] = useState(false)
134
106
  const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)
135
107
 
@@ -166,7 +138,7 @@ export function ThemeToggle({
166
138
  onFocus={scheduleOpen}
167
139
  onBlur={scheduleClose}
168
140
  >
169
- <SchemeGlyph dark={dark} reduceMotion={reduceMotion} />
141
+ <SchemeGlyph dark={dark} />
170
142
  </ActionIcon>
171
143
  </Popover.Target>
172
144
  <Popover.Dropdown
@@ -61,7 +61,7 @@ import {
61
61
  } from '@mantine/core'
62
62
  import { useEffect, useState } from 'react'
63
63
  import type { ReactNode } from 'react'
64
- import { buildDensityCss, buildPaletteCss, buildRadiusCss } from '../tokens'
64
+ import { buildDensityCss, buildPaletteCss, buildRadiusCss } from '../tokens/core'
65
65
  import type { DeriveConfig } from '../tokens/derive'
66
66
  import { buildPaletteData, deriveRadius, deriveSpacing } from '../tokens/palette'
67
67
  import {
@@ -145,9 +145,11 @@ export function DeriveControls({ resetIcon }: DeriveControlsProps) {
145
145
  // persisted/derived config once it matches a full hex; an invalid in-progress value keeps the
146
146
  // last valid accent applied.
147
147
  const [accentDraft, setAccentDraft] = useState(state.accent)
148
- useEffect(() => {
148
+ const [draftSource, setDraftSource] = useState(state.accent)
149
+ if (draftSource !== state.accent) {
150
+ setDraftSource(state.accent)
149
151
  setAccentDraft(state.accent)
150
- }, [state.accent])
152
+ }
151
153
 
152
154
  const handleAccentChange = (value: string) => {
153
155
  setAccentDraft(value)
@@ -14,7 +14,8 @@
14
14
  * whole dev-tool UI (Slider/ColorInput/SegmentedControl) along with the six lines of state it
15
15
  * actually needs. This module has zero `@mantine/*` and zero JSX for exactly that reason.
16
16
  */
17
- import { createPersistedState, readPersistedValue } from '../state'
17
+ import { createPersistedState } from '../state'
18
+ import { readPersistedValue } from '../state/persisted'
18
19
  import { DEFAULT_DERIVE_CONFIG, resolveDeriveConfig } from '../tokens/derive'
19
20
  import type { DeriveConfig } from '../tokens/derive'
20
21