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
@@ -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