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
@@ -1,168 +1,99 @@
1
1
  /**
2
- * BasaltProvider — wraps `MantineProvider` with the Basalt theme, injects the `--vx-*` palette
3
- * stylesheet, and bridges Mantine's color scheme into the Vx chart theme context so chrome and
4
- * charts share one scheme-reactive identity.
2
+ * BasaltProvider — the one provider tree (V2-SPEC § 2): `MantineProvider` with the Basalt theme and
3
+ * resolver, the `--vx-*` palette `<style>`, and then
4
+ * `QueryClientProvider > ModalsProvider > RouterProvider` with `Notifications` and `Spotlight` as
5
+ * siblings. The consumer writes the route tree, the nav and the registries.
5
6
  *
6
- * Grounded in argo: argo split this into `main.tsx` (the `MantineProvider` + `cssVariablesResolver`
7
- * wiring) and `charts-bridge.tsx` (the `VxBridge`: read the Mantine color scheme, provide the Vx
8
- * context, inject the palette `<style>`). Basalt folds the GENERIC half of both into one provider.
9
- * The DOMAIN half of argo's `main.tsx` — router, query client, app routes, auth gate, the concrete
10
- * series/sections — stays in the consumer and does NOT extract.
7
+ * It also owns the root error boundary, the `window` error listeners and the telemetry seam
8
+ * (V2-SPEC § 7), the command hotkeys and Spotlight actions, and — in dev only — the dev dock.
11
9
  *
12
- * The palette injection is pure CSS: the `<style>` emitted by `buildPaletteCss` keys off Mantine's
13
- * `[data-mantine-color-scheme]` attribute, so dark/light resolution needs no React re-render. The
14
- * Vx context still carries the resolved `colorScheme` for any non-color branching a chart may need.
15
- *
16
- * Mantine usage is allowed in this `./` root layer (unlike `src/charts/**` and `src/tokens/**`).
10
+ * The palette injection is pure CSS keyed off Mantine's `[data-mantine-color-scheme]` attribute, so
11
+ * dark/light resolution needs no React re-render.
17
12
  */
18
- import {
19
- MantineProvider,
20
- useComputedColorScheme,
21
- useMantineColorScheme,
22
- useMantineTheme,
23
- } from '@mantine/core'
13
+ import { MantineProvider, useMantineColorScheme, useMantineTheme } from '@mantine/core'
24
14
  import type { MantineProviderProps } from '@mantine/core'
25
- import { Component, useEffect, useMemo } from 'react'
15
+ import { ModalsProvider } from '@mantine/modals'
16
+ import { Notifications } from '@mantine/notifications'
17
+ import { Spotlight } from '@mantine/spotlight'
18
+ import type { SpotlightActionData } from '@mantine/spotlight'
19
+ import { QueryClientProvider } from '@tanstack/react-query'
20
+ import type { QueryClient } from '@tanstack/react-query'
21
+ import { RouterProvider } from '@tanstack/react-router'
22
+ import type { AnyRouter } from '@tanstack/react-router'
23
+ import { Component, Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from 'react'
26
24
  import type { ErrorInfo, ReactNode } from 'react'
27
- import { VxThemeProvider } from '../charts/theme'
28
25
  import fallbackClasses from './error-fallback.module.css'
29
- import { ConnectivityProvider } from './connectivity-provider'
30
- import type { ConnectivityProviderProps } from './connectivity-types'
31
26
  import { cssVariablesResolver } from '../theme'
32
27
  import { useLabTheme } from './lab-theme'
33
- import { buildDensityCss, buildFontsCss, buildPaletteCss, buildRadiusCss } from '../tokens'
34
- import type { BuildPaletteOpts } from '../tokens'
28
+ import { buildDensityCss, buildFontsCss, buildPaletteCss, buildRadiusCss } from '../tokens/core'
29
+ import type { BuildPaletteOpts } from '../tokens/core'
35
30
  import { isDefaultDeriveConfig } from '../tokens/derive'
36
31
  import { buildPaletteData } from '../tokens/palette'
37
32
  import { useMediaQuery } from '../common/use-media-query'
33
+ import { registerModalsProvider } from '../commands/define-overlays'
38
34
  import { registerColorSchemeSetter } from '../commands/shell-bridge'
39
35
  import { useIsomorphicLayoutEffect } from '../common/isomorphic-layout-effect'
40
36
  import { PageTitle } from '../shell/page-title'
41
37
  import { SizeClassHintContext } from '../shell/use-size-class'
42
38
  import type { SizeClass } from '../shell/use-size-class'
43
-
44
- /**
45
- * Where an error surfaced — drives consumer routing (a render error vs a global rejection differ).
46
- *
47
- * @example
48
- * <BasaltProvider
49
- * onError={(e, ctx) => {
50
- * if (ctx.kind === 'render') Sentry.captureException(e, { extra: { info: ctx.info } })
51
- * if (ctx.kind === 'unhandledrejection') Sentry.captureException(e)
52
- * }}
53
- * >
54
- */
55
- export type BasaltErrorContext =
56
- | { kind: 'render'; info: ErrorInfo }
57
- | { kind: 'window'; event: ErrorEvent }
58
- | { kind: 'unhandledrejection'; reason: unknown }
39
+ import { TelemetryContext, bindRouterTelemetry, createEmitter, errorName, now } from '../telemetry'
40
+ import type { Telemetry } from '../telemetry'
41
+ import type { BasaltDevDockTool } from '../dev-dock'
42
+ import type { BasaltRouter, BasaltRouterContext } from './create-router'
43
+ import { useRegistryHotkeys } from './hotkeys'
44
+ import { buildSpotlightActions } from './spotlight-actions'
59
45
 
60
46
  export type BasaltProviderProps = {
61
- children: ReactNode
62
- /** Theme override merged onto the Basalt base. Omit to use the base theme as-is. */
47
+ /** From `createBasaltRouter`; the provider mounts it and reads its `queryClient`. */
48
+ router: BasaltRouter
49
+ /** Theme override merged onto the Basalt base. Defaults to `createBasaltTheme()`. */
63
50
  theme?: MantineProviderProps['theme']
51
+ /**
52
+ * Typed events (V2-SPEC § 7) — navigations, route/query/mutation/render/window errors. Called
53
+ * synchronously and wrapped in `try/catch`, so a throwing sink never breaks a render. Events carry
54
+ * ids, hashes, counts and durations only; no sink, no events.
55
+ */
56
+ telemetry?: Telemetry
57
+ /** The root error boundary's UI. Unset → a minimal page with a reload button; `null` renders nothing. */
58
+ fallback?: ReactNode | ((error: unknown) => ReactNode)
64
59
  /**
65
60
  * Inject the `--vx-*` palette stylesheet once via an inline `<style>`. Default `true`. Set
66
- * `false` to skip it (SSR / head injection — emit `buildPaletteCss(paletteOptions)` yourself, all
67
- * three builders importable from `basalt-ui/tokens`).
68
- * A `{ fonts }` config passed to `createBasaltTheme` rides this SAME injection (its
69
- * `--basalt-font-*` declarations are appended to the same `<style>`), so `injectPalette={false}`
70
- * opts fonts out too — emit `buildFontsCss(theme.other.basaltFonts)` yourself alongside the
71
- * palette CSS in that case.
72
- * A `{ radius }` config rides the SAME injection too (its `--vx-radius-*` override declarations
73
- * are appended alongside), so `injectPalette={false}` opts radius out just the same — an SSR
74
- * consumer disabling injection must also emit `buildRadiusCss(theme.other.basaltRadius)`
75
- * themselves, or `var(--vx-radius-*)` consumers render at their defaults instead of the retuned
76
- * level.
77
- * A `{ density }` config rides the SAME injection too (its `--vx-space-*` override declarations
78
- * are appended alongside), so `injectPalette={false}` opts density out just the same — an SSR
79
- * consumer disabling injection must also emit `buildDensityCss(theme.other.basaltDensity)`
80
- * themselves, or `var(--vx-space-*)` consumers render at their defaults instead of the retuned
81
- * level.
61
+ * `false` to skip it (SSR / head injection — emit `buildPaletteCss(paletteOptions)` yourself).
62
+ * Fonts, radius and density configs ride the same injection, so `false` opts them out too.
82
63
  */
83
64
  injectPalette?: boolean
84
65
  /**
85
66
  * Passed through to `buildPaletteCss` so a consumer can append its own series/groups/derived
86
- * declarations on top of the framework primitives. Additive extension to the S0 stub shape.
67
+ * declarations on top of the framework primitives.
87
68
  */
88
69
  paletteOptions?: BuildPaletteOpts
89
70
  /** Default color scheme. Defaults to dark. */
90
71
  defaultColorScheme?: MantineProviderProps['defaultColorScheme']
91
72
  /**
92
- * Report errors caught by the in-provider boundary AND global window/unhandledrejection listeners.
93
- * Unset → console.error in dev (process.env.NODE_ENV !== 'production'), no-op in prod.
94
- * NEVER a no-op prop — the BasaltErrorBoundary + listeners that feed it ship in this same freeze.
95
- *
96
- * @example
97
- * <BasaltProvider onError={(e, ctx) => Sentry.captureException(e, { tags: { kind: ctx.kind } })}>
98
- */
99
- onError?: (error: unknown, ctx: BasaltErrorContext) => void
100
- /**
101
- * CSP nonce for the raw palette `<style>` at provider/index.tsx (the one element `...rest`
102
- * cannot reach — it is basalt's own JSX, not a Mantine prop). For Mantine's own injected styles,
103
- * also pass `getStyleNonce={() => nonce}` via `...rest` — Mantine v9 has no top-level `nonce`
104
- * prop; its nonce mechanism is `getStyleNonce: () => string`, which flows through `...rest`.
73
+ * CSP nonce for the raw palette `<style>` (the one element `...rest` cannot reach). For Mantine's
74
+ * own injected styles also pass `getStyleNonce={() => nonce}` via `...rest`.
105
75
  */
106
76
  nonce?: string
107
- /**
108
- * Options threaded through to the auto-mounted `ConnectivityProvider` (everything except
109
- * `children`) — `sseUrl`, `healthUrl`, `healthIntervalMs`, and `override` (previously
110
- * unreachable through `BasaltProvider`: the only way to reach it was a second, shadowing
111
- * `ConnectivityProvider`).
112
- */
113
- connectivity?: Omit<ConnectivityProviderProps, 'children'>
114
77
  /**
115
78
  * The size class `useSizeClass()` reports on the server and during hydration, before `matchMedia`
116
- * can answer. Default `'compact'` (mobile-first). SSR only: a client-rendered (`createRoot`) app
117
- * reads `matchMedia` on its first render and never sees this value. An SSR app that knows the
118
- * device class (UA hint, cookie) passes it so the first frame already matches. An SSR desktop app
119
- * SHOULD pass it: without it the first paint is `'compact'`, and `PageAside`/`ThreadWorkspace`
120
- * remount after hydration when the real class lands.
79
+ * can answer. Default `'compact'`. SSR only; an SSR desktop app SHOULD pass it.
121
80
  */
122
81
  sizeClassHint?: SizeClass
123
82
  } & Omit<MantineProviderProps, 'children' | 'theme' | 'defaultColorScheme' | 'cssVariablesResolver'>
124
83
 
125
- // ── Default error handler ─────────────────────────────────────────────────────────────────────────
126
-
127
- function defaultOnError(error: unknown, ctx: BasaltErrorContext): void {
128
- if (process.env.NODE_ENV !== 'production') {
129
- // eslint-disable-next-line no-console -- intentional dev-only diagnostic when no onError is supplied
130
- console.error('[BasaltProvider] unhandled error', ctx.kind, error)
131
- }
132
- // prod: no-op
133
- }
84
+ // ── Root error boundary ───────────────────────────────────────────────────────────────────────────
134
85
 
135
- // ── Error boundary ────────────────────────────────────────────────────────────────────────────────
136
-
137
- /**
138
- * `BasaltErrorBoundary`'s props — exported (C5 consolidation) so a consumer mounting a nested
139
- * boundary can name the type, e.g. for a wrapper component's own prop forwarding.
140
- */
141
- export type BasaltErrorBoundaryProps = {
86
+ type RootBoundaryProps = {
142
87
  children: ReactNode
143
- /**
144
- * Report the caught render error. Unset → `defaultOnError` (console.error in dev, no-op in
145
- * prod — the same fallback `BasaltProvider`'s own top-level `onError` uses), so a NESTED
146
- * boundary mounted with no `onError` still surfaces something in dev instead of silently
147
- * swallowing it.
148
- */
149
- onError?: (error: unknown, ctx: BasaltErrorContext) => void
150
- /**
151
- * UI to render when a render error is caught. If a function, called with the error. Unset →
152
- * {@link DefaultErrorFallback} — a minimal `PageTitle` + reload button, never a silent `null`;
153
- * pass `fallback={null}` explicitly for the old swallow-it behaviour.
154
- */
155
- fallback?: ReactNode | ((error: unknown) => ReactNode)
88
+ emit: Telemetry
89
+ fallback: BasaltProviderProps['fallback']
156
90
  }
157
91
 
158
92
  type BoundaryState = { hasError: boolean; error: unknown }
159
93
 
160
94
  /**
161
- * The boundary's own default fallback — a `PageTitle` (C5's shell-less page-title primitive, so
162
- * this needs no `in-body-page-title` waiver) plus a plain reload affordance. Deliberately minimal:
163
- * a consumer wanting session ids, a stack trace or a "try to recover" reset (argo's own
164
- * `lib/error-boundary.tsx`) still passes its own `fallback` render function — this default exists
165
- * so an app that mounts `BasaltErrorBoundary` and does nothing else shows a page, not a blank one.
95
+ * The boundary's own default fallback — a `PageTitle` plus a plain reload affordance. Deliberately
96
+ * minimal: a consumer wanting session ids or a "try to recover" reset passes its own `fallback`.
166
97
  */
167
98
  function DefaultErrorFallback(): ReactNode {
168
99
  return (
@@ -182,18 +113,9 @@ function DefaultErrorFallback(): ReactNode {
182
113
  )
183
114
  }
184
115
 
185
- /**
186
- * Error boundary that catches render-phase errors inside `BasaltProvider`. Wraps `BasaltBridge` +
187
- * children INSIDE `MantineProvider` so a thrown render error still has theme context for a fallback.
188
- * Also exported so consumers can mount nested boundaries with the same `onError` contract.
189
- *
190
- * @example
191
- * <BasaltErrorBoundary onError={(e, ctx) => Sentry.captureException(e)} fallback={<p>Something went wrong.</p>}>
192
- * <MyFeature />
193
- * </BasaltErrorBoundary>
194
- */
195
- export class BasaltErrorBoundary extends Component<BasaltErrorBoundaryProps, BoundaryState> {
196
- constructor(props: BasaltErrorBoundaryProps) {
116
+ /** Catches render-phase errors inside `MantineProvider`, so a fallback still has theme context. */
117
+ export class RootBoundary extends Component<RootBoundaryProps, BoundaryState> {
118
+ constructor(props: RootBoundaryProps) {
197
119
  super(props)
198
120
  this.state = { hasError: false, error: undefined }
199
121
  }
@@ -202,43 +124,43 @@ export class BasaltErrorBoundary extends Component<BasaltErrorBoundaryProps, Bou
202
124
  return { hasError: true, error }
203
125
  }
204
126
 
205
- override componentDidCatch(error: unknown, info: ErrorInfo): void {
206
- const onError = this.props.onError ?? defaultOnError
207
- onError(error, { kind: 'render', info })
127
+ override componentDidCatch(error: unknown, _info: ErrorInfo): void {
128
+ if (process.env.NODE_ENV !== 'production') console.error('[basalt] render error', error)
129
+ this.props.emit({
130
+ type: 'render.error',
131
+ failed: true,
132
+ start: now(),
133
+ attributes: {
134
+ 'exception.type': errorName(error),
135
+ 'basalt.error.kind': 'render',
136
+ 'basalt.error.boundary': 'root',
137
+ },
138
+ })
208
139
  }
209
140
 
210
141
  override render(): ReactNode {
211
- if (this.state.hasError) {
212
- const { fallback } = this.props
213
- if (fallback === undefined) return <DefaultErrorFallback />
214
- if (fallback === null) return null
215
- return typeof fallback === 'function' ? fallback(this.state.error) : fallback
216
- }
217
- return this.props.children
142
+ if (!this.state.hasError) return this.props.children
143
+ const { fallback } = this.props
144
+ if (fallback === undefined) return <DefaultErrorFallback />
145
+ if (fallback === null) return null
146
+ return typeof fallback === 'function' ? fallback(this.state.error) : fallback
218
147
  }
219
148
  }
220
149
 
221
150
  /**
222
151
  * Compose the four independently-built override CSS blocks into ONE injected `<style>` body, in
223
- * cascade-winning order. Every builder (`buildPaletteCss`/`buildFontsCss`/`buildRadiusCss`/
224
- * `buildDensityCss`) emits its declarations under a bare `:root { ... }` block — EQUAL selector
225
- * specificity across all four — so nothing but DOCUMENT ORDER decides which value a browser paints
226
- * when two blocks declare the same custom property. `density` must come LAST (its `--vx-space-*`
227
- * overrides must out-cascade the base palette's own defaults), `radius` after `fonts`, `fonts` after
228
- * `base` — reorder this array and the density/radius/fonts knobs silently stop working, with every
229
- * OTHER existing test still green (each builder is tested for its OWN output in isolation, not for
230
- * where it lands in the concatenated string). Exported as a pure function (not inlined in
231
- * `BasaltBridge`'s `useMemo`) purely so `provider/index.test.ts` can assert the ORDER holds without
232
- * rendering a React tree.
152
+ * cascade-winning order. Every builder emits its declarations under a bare `:root { ... }` block —
153
+ * EQUAL selector specificity — so nothing but DOCUMENT ORDER decides which value a browser paints.
154
+ * `density` must come LAST, `radius` after `fonts`, `fonts` after `base`; reorder this array and the
155
+ * knobs silently stop working. Exported as a pure function so a test can assert the ORDER.
233
156
  */
234
157
  export function composeInjectedCss(
235
158
  base: string,
236
159
  fontsCss: string,
237
160
  radiusCss: string,
238
161
  densityCss: string,
239
- inputsCss = '',
240
162
  ): string {
241
- return [base, fontsCss, radiusCss, densityCss, inputsCss].filter(Boolean).join('\n')
163
+ return [base, fontsCss, radiusCss, densityCss].filter(Boolean).join('\n')
242
164
  }
243
165
 
244
166
  // ── Host attribute ────────────────────────────────────────────────────────────────────────────────
@@ -284,30 +206,22 @@ export function useHostAttribute(): void {
284
206
  // ── Inner bridge ──────────────────────────────────────────────────────────────────────────────────
285
207
 
286
208
  /**
287
- * Inner bridge — must render INSIDE `MantineProvider` to read the active color scheme. Provides
288
- * the Vx chart theme context and injects the palette `<style>`. Mirrors argo's `VxBridge`.
289
- * Also registers global window error listeners for the `onError` contract.
209
+ * Inner bridge — must render INSIDE `MantineProvider` (it reads the theme and registers the
210
+ * color-scheme handle). Injects the palette `<style>`; charts paint through those CSS variables.
290
211
  */
291
212
  function BasaltBridge({
292
213
  children,
293
214
  injectPalette,
294
215
  paletteOptions,
295
216
  nonce,
296
- onError,
297
217
  }: {
298
218
  children: ReactNode
299
219
  injectPalette: boolean
300
220
  paletteOptions: BuildPaletteOpts | undefined
301
221
  nonce: string | undefined
302
- onError: (error: unknown, ctx: BasaltErrorContext) => void
303
222
  }) {
304
- // Resolve via Mantine's computed scheme so 'auto' follows the OS prefers-color-scheme
305
- // (fallback 'dark' before hydration, matching the provider's defaultColorScheme).
306
- const resolved = useComputedColorScheme('dark')
307
-
308
223
  // `commands/shell-bridge.ts`'s `setColorScheme` handle — registered here (already inside
309
- // `MantineProvider`) so a consumer's `commands.tsx` calls it with ZERO `__root.tsx` wiring,
310
- // unlike argo's hand-rolled `color-scheme-bridge.ts` this seeds from (see that file's own doc).
224
+ // `MantineProvider`) so a consumer's `commands.tsx` calls it with ZERO `__root.tsx` wiring.
311
225
  const { setColorScheme: setMantineColorScheme } = useMantineColorScheme()
312
226
  useEffect(() => {
313
227
  registerColorSchemeSetter(setMantineColorScheme)
@@ -315,18 +229,14 @@ function BasaltBridge({
315
229
  }, [setMantineColorScheme])
316
230
 
317
231
  // `createBasaltTheme`'s non-default `{ derive }` / `{ fonts }` / `{ radius }` / `{ density }`
318
- // paths stash the resolved values on `theme.other.basaltDerive` / `theme.other.basaltFonts` /
319
- // `theme.other.basaltRadius` / `theme.other.basaltDensity` — read them here (INSIDE
232
+ // paths stash the resolved values on `theme.other.basalt*` — read them here (INSIDE
320
233
  // MantineProvider, so `useMantineTheme` sees the fully-merged runtime theme) to decide whether the
321
- // pre-baked static palette CSS still applies or a re-derived one is needed, and whether any
322
- // `--basalt-font-*` / `--vx-radius-*` / `--vx-space-*` override declarations must ride along.
323
- // Default/absent config -> zero extra derivation work.
234
+ // pre-baked static palette CSS still applies or a re-derived one is needed.
324
235
  const theme = useMantineTheme()
325
236
  const deriveConfig = theme.other?.basaltDerive
326
237
  const fontsConfig = theme.other?.basaltFonts
327
238
  const radiusConfig = theme.other?.basaltRadius
328
239
  const densityConfig = theme.other?.basaltDensity
329
- const desktopInputs = theme.other?.['basaltInputs'] === 'desktop'
330
240
  const paletteCss = useMemo(() => {
331
241
  if (!injectPalette) return ''
332
242
  const base =
@@ -335,48 +245,19 @@ function BasaltBridge({
335
245
  : // Memoized by `buildPaletteData` (keyed on the config value), so retuning is never a
336
246
  // per-render re-derivation once a given config has been built once.
337
247
  buildPaletteCss(paletteOptions, buildPaletteData(deriveConfig))
338
- const fontsCss = buildFontsCss(fontsConfig)
339
- const radiusCss = buildRadiusCss(radiusConfig)
340
- const densityCss = buildDensityCss(densityConfig)
341
- // `createBasaltTheme({ inputs: 'desktop' })` — lifts the iOS 16px input-font floor (`styles.css`).
342
- const inputsCss = desktopInputs ? ':root {\n--basalt-input-fz-floor: 0px;\n}' : ''
343
- return composeInjectedCss(base, fontsCss, radiusCss, densityCss, inputsCss)
344
- }, [
345
- injectPalette,
346
- deriveConfig,
347
- fontsConfig,
348
- radiusConfig,
349
- densityConfig,
350
- desktopInputs,
351
- paletteOptions,
352
- ])
353
-
354
- useEffect(() => {
355
- // SSR guard — window is not available in server contexts
356
- if (typeof window === 'undefined') return
357
-
358
- const handleError = (e: ErrorEvent): void => {
359
- onError(e.error ?? e, { kind: 'window', event: e })
360
- }
361
-
362
- const handleUnhandledRejection = (e: PromiseRejectionEvent): void => {
363
- onError(e.reason, { kind: 'unhandledrejection', reason: e.reason })
364
- }
365
-
366
- window.addEventListener('error', handleError)
367
- window.addEventListener('unhandledrejection', handleUnhandledRejection)
368
-
369
- return () => {
370
- window.removeEventListener('error', handleError)
371
- window.removeEventListener('unhandledrejection', handleUnhandledRejection)
372
- }
373
- }, [onError])
248
+ return composeInjectedCss(
249
+ base,
250
+ buildFontsCss(fontsConfig),
251
+ buildRadiusCss(radiusConfig),
252
+ buildDensityCss(densityConfig),
253
+ )
254
+ }, [injectPalette, deriveConfig, fontsConfig, radiusConfig, densityConfig, paletteOptions])
374
255
 
375
256
  return (
376
- <VxThemeProvider colorScheme={resolved}>
257
+ <>
377
258
  {injectPalette ? <style nonce={nonce}>{paletteCss}</style> : null}
378
259
  {children}
379
- </VxThemeProvider>
260
+ </>
380
261
  )
381
262
  }
382
263
 
@@ -386,7 +267,7 @@ function BasaltBridge({
386
267
  * Module-level (deliberately NOT a per-instance ref, unlike `fence-block.tsx`'s warn-once gate) —
387
268
  * the whole point is detecting a SECOND, unrelated `BasaltProvider` mounted anywhere else in the
388
269
  * tree, which a per-instance gate could never see. Nested/duplicate providers double-mount
389
- * `MantineProvider`, the palette `<style>` and `ConnectivityProvider`'s signal listeners — real
270
+ * `MantineProvider`, the palette `<style>`, the router and the overlays — real
390
271
  * misuse, not a false positive from React 18 StrictMode's double-invoke (that mounts/unmounts the
391
272
  * SAME instance in sequence, so the count returns to 0 before a second instance could ever exist).
392
273
  */
@@ -397,31 +278,164 @@ function useDuplicateProviderGuard(): void {
397
278
  if (providerMounts.mount() > 1 && process.env.NODE_ENV !== 'production') {
398
279
  console.warn(
399
280
  '[basalt] BasaltProvider: more than one instance is mounted at once — nested/duplicate ' +
400
- 'BasaltProviders double-mount MantineProvider, the palette <style> and ' +
401
- 'ConnectivityProvider. Mount exactly one, at the app root.',
281
+ 'BasaltProviders double-mount MantineProvider, the palette <style>, the router and the ' +
282
+ 'overlays. Mount exactly one, at the app root.',
402
283
  )
403
284
  }
404
285
  return () => void providerMounts.unmount()
405
286
  }, [])
406
287
  }
407
288
 
289
+ // ── Telemetry sources ─────────────────────────────────────────────────────────────────────────────
290
+
291
+ /** `window` `error` / `unhandledrejection` → `window.error`. */
292
+ function useWindowErrors(emit: Telemetry): void {
293
+ useEffect(() => {
294
+ const report = (source: 'error' | 'unhandledrejection', error: unknown): void => {
295
+ if (process.env.NODE_ENV !== 'production') console.error(`[basalt] ${source}`, error)
296
+ emit({
297
+ type: 'window.error',
298
+ failed: true,
299
+ start: now(),
300
+ attributes: {
301
+ 'exception.type': errorName(error),
302
+ 'basalt.error.kind': source === 'error' ? 'window' : 'unhandledrejection',
303
+ 'basalt.error.source': source,
304
+ },
305
+ })
306
+ }
307
+ const onError = (e: ErrorEvent): void => report('error', e.error ?? e)
308
+ const onRejection = (e: PromiseRejectionEvent): void => report('unhandledrejection', e.reason)
309
+ window.addEventListener('error', onError)
310
+ window.addEventListener('unhandledrejection', onRejection)
311
+ return () => {
312
+ window.removeEventListener('error', onError)
313
+ window.removeEventListener('unhandledrejection', onRejection)
314
+ }
315
+ }, [emit])
316
+ }
317
+
318
+ /** Router navigations and the QueryClient's caches → `route.*`, `query.error`, `mutation.error`. */
319
+ function useDataTelemetry(router: AnyRouter, client: QueryClient, emit: Telemetry): void {
320
+ useEffect(() => {
321
+ const unbind = bindRouterTelemetry(router, emit)
322
+
323
+ // Keyed by the target href: a newer navigation overwrites, and a resolve for any other target
324
+ // (a superseded or redirected navigation) is dropped rather than paired with the wrong start.
325
+ let pending: { href: string; start: number; from: string } | undefined
326
+ const offBefore = router.subscribe('onBeforeNavigate', (ev) => {
327
+ pending = { href: ev.toLocation.href, start: now(), from: ev.fromLocation?.pathname ?? '' }
328
+ })
329
+ const offResolved = router.subscribe('onResolved', (ev) => {
330
+ if (pending?.href !== ev.toLocation.href) return
331
+ const { start, from } = pending
332
+ pending = undefined
333
+ emit({
334
+ type: 'route.navigate',
335
+ failed: false,
336
+ start,
337
+ duration: now() - start,
338
+ attributes: {
339
+ 'basalt.route.id': router.state.matches.at(-1)?.routeId ?? 'unknown',
340
+ 'basalt.route.from': from,
341
+ 'url.path': ev.toLocation.pathname,
342
+ },
343
+ })
344
+ })
345
+
346
+ const offQuery = client.getQueryCache().subscribe((ev) => {
347
+ if (ev.type !== 'updated' || ev.action.type !== 'error') return
348
+ emit({
349
+ type: 'query.error',
350
+ failed: true,
351
+ start: now(),
352
+ attributes: {
353
+ 'basalt.query.hash': ev.query.queryHash,
354
+ 'basalt.query.failure_count': ev.query.state.fetchFailureCount,
355
+ 'exception.type': errorName(ev.action.error),
356
+ 'basalt.error.kind': 'query',
357
+ },
358
+ })
359
+ })
360
+ const offMutation = client.getMutationCache().subscribe((ev) => {
361
+ if (ev.type !== 'updated' || ev.action.type !== 'error') return
362
+ emit({
363
+ type: 'mutation.error',
364
+ failed: true,
365
+ start: now(),
366
+ attributes: {
367
+ 'basalt.mutation.key': JSON.stringify(ev.mutation.options.mutationKey ?? null),
368
+ 'exception.type': errorName(ev.action.error),
369
+ 'basalt.error.kind': 'mutation',
370
+ },
371
+ })
372
+ })
373
+
374
+ return () => {
375
+ unbind()
376
+ offBefore()
377
+ offResolved()
378
+ offQuery()
379
+ offMutation()
380
+ }
381
+ }, [router, client, emit])
382
+ }
383
+
384
+ // ── Dev dock (dev-only, behind a literal NODE_ENV read at the lazy site) ──────────────────────────
385
+
386
+ const LazyDevDock = lazy(() => import('../dev-dock').then((m) => ({ default: m.BasaltDevDock })))
387
+
388
+ function readQueryClient(router: AnyRouter): QueryClient {
389
+ const client = (router.options.context as Partial<BasaltRouterContext> | undefined)?.queryClient
390
+ if (client === undefined) {
391
+ throw new Error(
392
+ '[basalt] BasaltProvider: the router has no context.queryClient — create it with ' +
393
+ 'createBasaltRouter({ routeTree }).',
394
+ )
395
+ }
396
+ return client
397
+ }
398
+
408
399
  // ── Public provider ───────────────────────────────────────────────────────────────────────────────
409
400
 
410
401
  export function BasaltProvider({
411
- children,
402
+ router,
412
403
  theme,
404
+ telemetry,
405
+ fallback,
413
406
  injectPalette = true,
414
407
  paletteOptions,
415
408
  defaultColorScheme = 'dark',
416
- onError,
417
409
  nonce,
418
- connectivity,
419
410
  sizeClassHint = 'compact',
420
411
  ...rest
421
412
  }: BasaltProviderProps) {
422
413
  useDuplicateProviderGuard()
423
414
  useHostAttribute()
424
- const errorHandler = onError ?? defaultOnError
415
+
416
+ // The sink is read through a ref, so an inline `telemetry` function does not re-subscribe.
417
+ const sinkRef = useRef(telemetry)
418
+ useEffect(() => {
419
+ sinkRef.current = telemetry
420
+ })
421
+ const emit = useMemo(() => createEmitter((event) => sinkRef.current?.(event)), [])
422
+ useWindowErrors(emit)
423
+ useRegistryHotkeys()
424
+ // `overlays.confirm` is an imperative call; this tells it a `ModalsProvider` is live.
425
+ useEffect(() => registerModalsProvider(), [])
426
+
427
+ const client = readQueryClient(router)
428
+ useDataTelemetry(router, client, emit)
429
+
430
+ const [devTool, setDevTool] = useState<BasaltDevDockTool | null>(null)
431
+ // Rebuilt on mount and again at every open, so a command's `when()` is read when the palette
432
+ // appears, not frozen at mount — and `detectMac` (inside the builder) never runs during render.
433
+ const [actions, setActions] = useState<SpotlightActionData[]>([])
434
+ const refreshActions = useCallback(
435
+ () => setActions(buildSpotlightActions(router, setDevTool)),
436
+ [router],
437
+ )
438
+ useEffect(refreshActions, [refreshActions])
425
439
 
426
440
  // `createBasaltTheme(theme)` — plus, when the theme lab's "Apply" switch is on, the delta of its
427
441
  // persisted config, so the dev tool moves the numeric `defaultProps` and `theme.spacing` a `<style>`
@@ -429,31 +443,47 @@ export function BasaltProvider({
429
443
  // Basalt base and nothing else. See `./lab-theme.ts`.
430
444
  const resolvedTheme = useLabTheme(theme)
431
445
 
432
- const resolvedConnectivity = connectivity ?? {}
433
-
434
446
  return (
435
447
  // `...rest` spreads FIRST so a consumer's `MantineProviderProps` can never shadow the three
436
448
  // values that follow it — `cssVariablesResolver` in particular is the resolver the package
437
- // exists to install (F24); `theme`/`defaultColorScheme` are excluded from `rest`'s type too,
438
- // this is belt-and-braces against a widened rest at the call site.
449
+ // exists to install.
439
450
  <MantineProvider
440
451
  {...rest}
441
452
  theme={resolvedTheme}
442
453
  cssVariablesResolver={cssVariablesResolver}
443
454
  defaultColorScheme={defaultColorScheme}
444
455
  >
445
- <BasaltErrorBoundary onError={errorHandler}>
446
- <BasaltBridge
447
- injectPalette={injectPalette}
448
- paletteOptions={paletteOptions}
449
- nonce={nonce}
450
- onError={errorHandler}
451
- >
452
- <SizeClassHintContext.Provider value={sizeClassHint}>
453
- <ConnectivityProvider {...resolvedConnectivity}>{children}</ConnectivityProvider>
454
- </SizeClassHintContext.Provider>
456
+ <RootBoundary emit={emit} fallback={fallback}>
457
+ <BasaltBridge injectPalette={injectPalette} paletteOptions={paletteOptions} nonce={nonce}>
458
+ <TelemetryContext.Provider value={emit}>
459
+ <SizeClassHintContext.Provider value={sizeClassHint}>
460
+ <QueryClientProvider client={client}>
461
+ {/* ModalsProvider WRAPS the router, so `useModals()` / `openContextModal` have real context. */}
462
+ <ModalsProvider>
463
+ <RouterProvider router={router} />
464
+ {/* The literal read sits at the branch, so a production build drops the import. */}
465
+ {process.env.NODE_ENV !== 'production' && (
466
+ <Suspense fallback={null}>
467
+ <LazyDevDock
468
+ tool={devTool}
469
+ onClose={() => setDevTool(null)}
470
+ router={router}
471
+ />
472
+ </Suspense>
473
+ )}
474
+ </ModalsProvider>
475
+ </QueryClientProvider>
476
+ <Notifications position="bottom-right" autoClose={4000} limit={5} />
477
+ <Spotlight
478
+ actions={actions}
479
+ onSpotlightOpen={refreshActions}
480
+ shortcut="mod + K"
481
+ maxHeight={420}
482
+ />
483
+ </SizeClassHintContext.Provider>
484
+ </TelemetryContext.Provider>
455
485
  </BasaltBridge>
456
- </BasaltErrorBoundary>
486
+ </RootBoundary>
457
487
  </MantineProvider>
458
488
  )
459
489
  }