basalt-ui 1.41.0 → 2.0.1

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 (915) hide show
  1. package/AGENTS.md +46 -43
  2. package/CHANGELOG.md +542 -518
  3. package/MIGRATING.md +964 -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 +18 -43
  173. package/dist/cli/config.d.ts.map +1 -1
  174. package/dist/cli/config.js +6 -0
  175. package/dist/cli/doctor-upgrade.d.ts +43 -0
  176. package/dist/cli/doctor-upgrade.d.ts.map +1 -0
  177. package/dist/cli/doctor-upgrade.js +314 -0
  178. package/dist/cli/doctor.d.ts +14 -29
  179. package/dist/cli/doctor.d.ts.map +1 -1
  180. package/dist/cli/doctor.js +58 -9
  181. package/dist/cli/help.d.ts.map +1 -1
  182. package/dist/cli/help.js +2 -4
  183. package/dist/cli/index.d.ts +48 -172
  184. package/dist/cli/index.d.ts.map +1 -1
  185. package/dist/cli/index.js +39 -132
  186. package/dist/cli/init.d.ts.map +1 -1
  187. package/dist/cli/init.js +43 -37
  188. package/dist/cli/sync.d.ts +5 -21
  189. package/dist/cli/sync.d.ts.map +1 -1
  190. package/dist/cli/sync.js +4 -23
  191. package/dist/cli/tokens-css.d.ts +7 -28
  192. package/dist/cli/tokens-css.d.ts.map +1 -1
  193. package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
  194. package/dist/commands/ShortcutsHelp.js +4 -5
  195. package/dist/commands/define-commands.d.ts +15 -31
  196. package/dist/commands/define-commands.d.ts.map +1 -1
  197. package/dist/commands/define-commands.js +1 -11
  198. package/dist/commands/define-overlays.d.ts +5 -19
  199. package/dist/commands/define-overlays.d.ts.map +1 -1
  200. package/dist/commands/define-overlays.js +3 -11
  201. package/dist/commands/index.d.ts +10 -40
  202. package/dist/commands/index.d.ts.map +1 -1
  203. package/dist/commands/index.js +9 -46
  204. package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
  205. package/dist/commands/notifications/bell.d.ts.map +1 -0
  206. package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
  207. package/dist/commands/notifications/center.d.ts.map +1 -0
  208. package/dist/{notifications → commands/notifications}/center.js +2 -2
  209. package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
  210. package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
  211. package/dist/commands/notifications/notify.d.ts +44 -0
  212. package/dist/commands/notifications/notify.d.ts.map +1 -0
  213. package/dist/commands/notifications/notify.js +79 -0
  214. package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
  215. package/dist/commands/notifications/store.d.ts.map +1 -0
  216. package/dist/{notifications → commands/notifications}/store.js +4 -0
  217. package/dist/commands/projectors.d.ts +1 -131
  218. package/dist/commands/projectors.d.ts.map +1 -1
  219. package/dist/commands/projectors.js +2 -73
  220. package/dist/commands/shell-bridge.d.ts +3 -3
  221. package/dist/commands/shortcut-format.d.ts +5 -4
  222. package/dist/commands/shortcut-format.d.ts.map +1 -1
  223. package/dist/common/errors.d.ts +3 -3
  224. package/dist/common/use-measured-widths.d.ts.map +1 -1
  225. package/dist/common/use-measured-widths.js +5 -3
  226. package/dist/common/validate.d.ts +2 -2
  227. package/dist/content/article-layout.d.ts.map +1 -1
  228. package/dist/content/article-layout.js +3 -3
  229. package/dist/content/article-model.d.ts +1 -46
  230. package/dist/content/article-model.d.ts.map +1 -1
  231. package/dist/content/article-model.js +1 -29
  232. package/dist/content/index.d.ts +11 -41
  233. package/dist/content/index.d.ts.map +1 -1
  234. package/dist/content/index.js +3 -35
  235. package/dist/content/markdown.d.ts +1 -1
  236. package/dist/content/markdown.d.ts.map +1 -1
  237. package/dist/content/markdown.js +1 -1
  238. package/dist/content/mermaid.d.ts.map +1 -1
  239. package/dist/content/mermaid.js +7 -7
  240. package/dist/content/slug.d.ts +1 -8
  241. package/dist/content/slug.d.ts.map +1 -1
  242. package/dist/content/slug.js +1 -8
  243. package/dist/content/url-hardening.d.ts +2 -2
  244. package/dist/content/url-hardening.d.ts.map +1 -1
  245. package/dist/content/url-hardening.js +2 -0
  246. package/dist/controls/actions.d.ts +16 -1
  247. package/dist/controls/actions.d.ts.map +1 -1
  248. package/dist/controls/enum-filter.d.ts +1 -1
  249. package/dist/controls/enum-filter.d.ts.map +1 -1
  250. package/dist/controls/filter-context.d.ts.map +1 -1
  251. package/dist/controls/filter-context.js +3 -1
  252. package/dist/controls/filter-set.js +4 -6
  253. package/dist/controls/form-layout.d.ts +1 -1
  254. package/dist/controls/form-layout.d.ts.map +1 -1
  255. package/dist/controls/form-layout.js +1 -1
  256. package/dist/controls/glyphs.d.ts +0 -2
  257. package/dist/controls/glyphs.d.ts.map +1 -1
  258. package/dist/controls/glyphs.js +0 -7
  259. package/dist/controls/index.d.ts +12 -17
  260. package/dist/controls/index.d.ts.map +1 -1
  261. package/dist/controls/index.js +5 -39
  262. package/dist/controls/multi-select-filter.d.ts +4 -3
  263. package/dist/controls/multi-select-filter.d.ts.map +1 -1
  264. package/dist/controls/number-filter.d.ts +4 -3
  265. package/dist/controls/number-filter.d.ts.map +1 -1
  266. package/dist/controls/number-filter.js +3 -1
  267. package/dist/controls/range-filter.d.ts +4 -3
  268. package/dist/controls/range-filter.d.ts.map +1 -1
  269. package/dist/controls/search-filter.d.ts +4 -3
  270. package/dist/controls/search-filter.d.ts.map +1 -1
  271. package/dist/controls/search-filter.js +19 -14
  272. package/dist/controls/select-filter.d.ts +4 -3
  273. package/dist/controls/select-filter.d.ts.map +1 -1
  274. package/dist/controls/sync-button.d.ts.map +1 -1
  275. package/dist/controls/sync-button.js +12 -15
  276. package/dist/controls/toggle-filter.d.ts +4 -3
  277. package/dist/controls/toggle-filter.d.ts.map +1 -1
  278. package/dist/controls/uncontrolled.d.ts +12 -0
  279. package/dist/controls/uncontrolled.d.ts.map +1 -0
  280. package/dist/controls/view-tabs.d.ts +2 -2
  281. package/dist/controls/view-tabs.d.ts.map +1 -1
  282. package/dist/controls-dates/index.d.ts +0 -1
  283. package/dist/controls-dates/index.d.ts.map +1 -1
  284. package/dist/dashboard/index.d.ts +7 -9
  285. package/dist/dashboard/index.d.ts.map +1 -1
  286. package/dist/dashboard/index.js +3 -23
  287. package/dist/dashboard/section.d.ts +4 -6
  288. package/dist/dashboard/section.d.ts.map +1 -1
  289. package/dist/dashboard/section.js +4 -10
  290. package/dist/dashboard/stat-card.d.ts +4 -4
  291. package/dist/dashboard/stat-card.d.ts.map +1 -1
  292. package/dist/dashboard/stat-card.js +3 -3
  293. package/dist/dashboard/widget-header.module.css +9 -7
  294. package/dist/dev-dock.d.ts.map +1 -1
  295. package/dist/dev-dock.js +6 -1
  296. package/dist/format/date.d.ts +0 -34
  297. package/dist/format/date.d.ts.map +1 -1
  298. package/dist/format/date.js +0 -54
  299. package/dist/format/index.d.ts +7 -22
  300. package/dist/format/index.d.ts.map +1 -1
  301. package/dist/format/index.js +2 -43
  302. package/dist/format/number.d.ts +3 -14
  303. package/dist/format/number.d.ts.map +1 -1
  304. package/dist/format/number.js +0 -13
  305. package/dist/format/shared.d.ts +2 -3
  306. package/dist/format/shared.d.ts.map +1 -1
  307. package/dist/forms/index.d.ts +0 -11
  308. package/dist/forms/index.d.ts.map +1 -1
  309. package/dist/forms/index.js +1 -14
  310. package/dist/guard/index.d.ts +6 -21
  311. package/dist/guard/index.d.ts.map +1 -1
  312. package/dist/guard/index.js +27 -115
  313. package/dist/guard/types.d.ts +7 -18
  314. package/dist/guard/types.d.ts.map +1 -1
  315. package/dist/index.d.ts +16 -48
  316. package/dist/index.d.ts.map +1 -1
  317. package/dist/index.js +21 -117
  318. package/dist/provider/create-router.d.ts +44 -0
  319. package/dist/provider/create-router.d.ts.map +1 -0
  320. package/dist/provider/create-router.js +62 -0
  321. package/dist/provider/hotkeys.d.ts +8 -0
  322. package/dist/provider/hotkeys.d.ts.map +1 -0
  323. package/dist/provider/hotkeys.js +50 -0
  324. package/dist/provider/index.d.ts +33 -110
  325. package/dist/provider/index.d.ts.map +1 -1
  326. package/dist/provider/index.js +182 -82
  327. package/dist/provider/lab-theme.d.ts.map +1 -1
  328. package/dist/provider/route-transition.d.ts +76 -0
  329. package/dist/provider/route-transition.d.ts.map +1 -0
  330. package/dist/provider/route-transition.js +98 -0
  331. package/dist/provider/spotlight-actions.d.ts +10 -0
  332. package/dist/provider/spotlight-actions.d.ts.map +1 -0
  333. package/dist/provider/spotlight-actions.js +55 -0
  334. package/dist/provider/test-router.d.ts +6 -0
  335. package/dist/provider/test-router.d.ts.map +1 -0
  336. package/dist/provider/test-router.js +18 -0
  337. package/dist/query-client.d.ts +4 -20
  338. package/dist/query-client.d.ts.map +1 -1
  339. package/dist/query-client.js +2 -2
  340. package/dist/router-tanstack/index.d.ts +18 -64
  341. package/dist/router-tanstack/index.d.ts.map +1 -1
  342. package/dist/router-tanstack/index.js +2 -16
  343. package/dist/router-tanstack/nav.d.ts +12 -1
  344. package/dist/router-tanstack/nav.d.ts.map +1 -1
  345. package/dist/router-tanstack/nav.js +8 -1
  346. package/dist/router-tanstack/search-store.d.ts +1 -1
  347. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  348. package/dist/router-tanstack/use-nav.d.ts +8 -9
  349. package/dist/router-tanstack/use-nav.d.ts.map +1 -1
  350. package/dist/router-tanstack/use-nav.js +20 -1
  351. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  352. package/dist/shell/app-sidebar.js +1 -1
  353. package/dist/shell/index.d.ts +31 -10
  354. package/dist/shell/index.d.ts.map +1 -1
  355. package/dist/shell/index.js +14 -3
  356. package/dist/shell/page-aside.d.ts +2 -2
  357. package/dist/shell/page-aside.d.ts.map +1 -1
  358. package/dist/shell/page-aside.js +31 -12
  359. package/dist/shell/page-bar.d.ts +2 -2
  360. package/dist/shell/page-bar.d.ts.map +1 -1
  361. package/dist/shell/page-bar.js +1 -1
  362. package/dist/state.d.ts +10 -12
  363. package/dist/state.d.ts.map +1 -1
  364. package/dist/state.js +4 -6
  365. package/dist/styles.css +107 -7
  366. package/dist/surfaces.d.ts +28 -103
  367. package/dist/surfaces.d.ts.map +1 -1
  368. package/dist/surfaces.js +54 -143
  369. package/dist/{data → table}/data-table-state.d.ts +1 -1
  370. package/dist/table/data-table-state.d.ts.map +1 -0
  371. package/dist/{data → table}/data-table-state.js +4 -3
  372. package/dist/{data → table}/data-table.d.ts +28 -49
  373. package/dist/table/data-table.d.ts.map +1 -0
  374. package/dist/{data → table}/data-table.js +74 -60
  375. package/dist/table/index.d.ts +18 -0
  376. package/dist/table/index.d.ts.map +1 -0
  377. package/dist/{data/table.js → table/index.js} +1 -1
  378. package/dist/table/query-branch.d.ts.map +1 -0
  379. package/dist/table/table-features.d.ts +69 -0
  380. package/dist/table/table-features.d.ts.map +1 -0
  381. package/dist/table/table-features.js +49 -0
  382. package/dist/telemetry.d.ts +77 -0
  383. package/dist/telemetry.d.ts.map +1 -0
  384. package/dist/telemetry.js +33 -0
  385. package/dist/theme/index.d.ts +10 -21
  386. package/dist/theme/index.d.ts.map +1 -1
  387. package/dist/theme/index.js +3 -14
  388. package/dist/theme/theme-toggle.d.ts.map +1 -1
  389. package/dist/theme/theme-toggle.js +7 -33
  390. package/dist/theme/theme-toggle.module.css +30 -0
  391. package/dist/theme/theme-toggle.module.css.d.ts +10 -0
  392. package/dist/theme-lab/derive-controls.d.ts.map +1 -1
  393. package/dist/theme-lab/derive-controls.js +5 -3
  394. package/dist/theme-lab/derive-state.d.ts.map +1 -1
  395. package/dist/theme-lab/derive-state.js +2 -1
  396. package/dist/tokens/core.d.ts +360 -0
  397. package/dist/tokens/core.d.ts.map +1 -0
  398. package/dist/tokens/core.js +708 -0
  399. package/dist/tokens/derive.d.ts +1 -1
  400. package/dist/tokens/derive.d.ts.map +1 -1
  401. package/dist/tokens/index.d.ts +5 -373
  402. package/dist/tokens/index.d.ts.map +1 -1
  403. package/dist/tokens/index.js +8 -700
  404. package/dist/tokens/palette.d.ts +2 -6
  405. package/dist/tokens/palette.d.ts.map +1 -1
  406. package/dist/tokens/palette.js +1 -4
  407. package/dist/vite.d.ts +4 -3
  408. package/dist/vite.d.ts.map +1 -1
  409. package/llms.txt +43 -85
  410. package/package.json +80 -173
  411. package/src/agent/ai-sdk-transport.ts +57 -37
  412. package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
  413. package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
  414. package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
  415. package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
  416. package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
  417. package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
  418. package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
  419. package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
  420. package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
  421. package/src/agent/error.ts +43 -0
  422. package/src/agent/history.ts +2 -107
  423. package/src/agent/id.ts +4 -5
  424. package/src/agent/index.ts +23 -112
  425. package/src/agent/outcome.ts +3 -56
  426. package/src/agent/part-list.tsx +3 -3
  427. package/src/agent/parts.ts +23 -22
  428. package/src/agent/run-committer.ts +64 -0
  429. package/src/agent/run-records.ts +147 -0
  430. package/src/agent/thread.ts +24 -231
  431. package/src/agent/transport.ts +6 -96
  432. package/src/agent/use-agent-thread-runs.ts +364 -199
  433. package/src/charts/BandStrip.tsx +276 -0
  434. package/src/charts/Bars.tsx +141 -0
  435. package/src/charts/CartesianChart.tsx +206 -0
  436. package/src/charts/ChartCard.tsx +178 -0
  437. package/src/charts/Donut.tsx +256 -0
  438. package/src/charts/DualPanel.tsx +326 -0
  439. package/src/charts/Heatmap.tsx +282 -0
  440. package/src/charts/Lines.tsx +151 -0
  441. package/src/charts/MirroredBars.tsx +303 -0
  442. package/src/charts/Sparkline.tsx +176 -0
  443. package/src/charts/StackedArea.tsx +80 -0
  444. package/src/charts/box.tsx +96 -0
  445. package/src/charts/card-context.ts +11 -0
  446. package/src/charts/chart-box.module.css +64 -0
  447. package/src/charts/chart-box.module.css.d.ts +12 -0
  448. package/src/charts/chart-card.module.css +25 -0
  449. package/src/charts/chart-card.module.css.d.ts +8 -0
  450. package/src/charts/chart-legend.module.css +38 -0
  451. package/src/charts/chart-legend.module.css.d.ts +10 -0
  452. package/src/charts/compile.ts +585 -0
  453. package/src/charts/cursor.ts +282 -0
  454. package/src/charts/curves.ts +111 -0
  455. package/src/charts/donut.module.css +54 -0
  456. package/src/charts/donut.module.css.d.ts +9 -0
  457. package/src/charts/host.tsx +60 -0
  458. package/src/charts/index.ts +41 -178
  459. package/src/charts/legend.tsx +204 -0
  460. package/src/charts/marks.ts +201 -0
  461. package/src/charts/panel.tsx +227 -0
  462. package/src/charts/scales.ts +237 -0
  463. package/src/charts/sizing.ts +47 -0
  464. package/src/charts/state.tsx +80 -0
  465. package/src/charts/theme.ts +65 -0
  466. package/src/charts/types.ts +242 -0
  467. package/src/cli/audit-allows.ts +8 -30
  468. package/src/cli/config.ts +26 -43
  469. package/src/cli/doctor-upgrade.ts +457 -0
  470. package/src/cli/doctor.ts +89 -72
  471. package/src/cli/help.ts +2 -4
  472. package/src/cli/index.ts +100 -384
  473. package/src/cli/init.ts +60 -51
  474. package/src/cli/sync.ts +13 -68
  475. package/src/cli/tokens-css.ts +7 -28
  476. package/src/commands/ShortcutsHelp.tsx +8 -9
  477. package/src/commands/define-commands.ts +16 -43
  478. package/src/commands/define-overlays.ts +12 -36
  479. package/src/commands/index.ts +11 -94
  480. package/src/{notifications → commands/notifications}/bell.tsx +2 -2
  481. package/src/{notifications → commands/notifications}/center.tsx +7 -5
  482. package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
  483. package/src/commands/notifications/notify.tsx +158 -0
  484. package/src/{notifications → commands/notifications}/store.ts +10 -2
  485. package/src/commands/projectors.ts +5 -225
  486. package/src/commands/shell-bridge.ts +5 -5
  487. package/src/commands/shortcut-format.ts +5 -4
  488. package/src/common/errors.ts +3 -3
  489. package/src/common/use-measured-widths.ts +6 -3
  490. package/src/common/validate.ts +2 -2
  491. package/src/content/article-layout.tsx +37 -38
  492. package/src/content/article-model.ts +1 -84
  493. package/src/content/index.ts +12 -83
  494. package/src/content/markdown.tsx +4 -3
  495. package/src/content/mermaid.tsx +9 -7
  496. package/src/content/slug.ts +1 -16
  497. package/src/content/url-hardening.ts +8 -2
  498. package/src/controls/actions.tsx +24 -1
  499. package/src/controls/enum-filter.tsx +1 -1
  500. package/src/controls/filter-context.tsx +3 -1
  501. package/src/controls/filter-set.tsx +5 -7
  502. package/src/controls/form-layout.tsx +2 -2
  503. package/src/controls/glyphs.tsx +0 -10
  504. package/src/controls/index.ts +13 -64
  505. package/src/controls/multi-select-filter.tsx +5 -4
  506. package/src/controls/number-filter.tsx +8 -4
  507. package/src/controls/range-filter.tsx +5 -4
  508. package/src/controls/search-filter.tsx +25 -19
  509. package/src/controls/select-filter.tsx +5 -4
  510. package/src/controls/sync-button.tsx +18 -20
  511. package/src/controls/toggle-filter.tsx +5 -4
  512. package/src/controls/uncontrolled.ts +12 -0
  513. package/src/controls/view-tabs.tsx +3 -3
  514. package/src/controls-dates/date-range-picker.tsx +1 -1
  515. package/src/controls-dates/index.ts +0 -1
  516. package/src/dashboard/index.ts +7 -48
  517. package/src/dashboard/section.tsx +11 -40
  518. package/src/dashboard/stat-card.tsx +14 -16
  519. package/src/dashboard/widget-header.module.css +9 -7
  520. package/src/dev-dock.tsx +14 -27
  521. package/src/format/date.ts +2 -92
  522. package/src/format/index.ts +7 -53
  523. package/src/format/number.ts +3 -26
  524. package/src/format/shared.ts +2 -3
  525. package/src/forms/index.ts +0 -23
  526. package/src/guard/index.ts +36 -191
  527. package/src/guard/types.ts +6 -19
  528. package/src/index.ts +30 -282
  529. package/src/provider/create-router.tsx +138 -0
  530. package/src/provider/hotkeys.ts +70 -0
  531. package/src/provider/index.tsx +260 -230
  532. package/src/provider/lab-theme.ts +3 -2
  533. package/src/provider/route-transition.ts +199 -0
  534. package/src/provider/spotlight-actions.tsx +69 -0
  535. package/src/provider/test-router.tsx +25 -0
  536. package/src/query-client.ts +4 -22
  537. package/src/router-tanstack/index.ts +18 -112
  538. package/src/router-tanstack/nav.ts +28 -2
  539. package/src/router-tanstack/search-store.ts +9 -2
  540. package/src/router-tanstack/use-nav.ts +47 -13
  541. package/src/shell/app-mobile-nav.tsx +3 -2
  542. package/src/shell/app-sidebar.tsx +1 -1
  543. package/src/shell/aside-docking.ts +1 -1
  544. package/src/shell/index.tsx +61 -20
  545. package/src/shell/page-aside.tsx +47 -23
  546. package/src/shell/page-bar.tsx +3 -3
  547. package/src/shell/page-title.tsx +1 -1
  548. package/src/state.ts +11 -37
  549. package/src/styles.css +107 -7
  550. package/src/surfaces.ts +56 -151
  551. package/src/{data → table}/data-table-state.ts +5 -4
  552. package/src/{data → table}/data-table.tsx +170 -161
  553. package/src/table/index.ts +18 -0
  554. package/src/table/table-features.ts +102 -0
  555. package/src/telemetry.ts +110 -0
  556. package/src/theme/index.ts +22 -47
  557. package/src/theme/theme-toggle.module.css +30 -0
  558. package/src/theme/theme-toggle.module.css.d.ts +10 -0
  559. package/src/theme/theme-toggle.tsx +15 -43
  560. package/src/theme-lab/derive-controls.tsx +5 -3
  561. package/src/theme-lab/derive-state.ts +2 -1
  562. package/src/tokens/core.ts +1163 -0
  563. package/src/tokens/derive.ts +1 -1
  564. package/src/tokens/index.ts +14 -1181
  565. package/src/tokens/palette.ts +3 -7
  566. package/src/vite.ts +3 -3
  567. package/agent/templates/query-client.ts.tpl +0 -26
  568. package/dist/agent/adapter.d.ts +0 -150
  569. package/dist/agent/adapter.d.ts.map +0 -1
  570. package/dist/agent/adapter.js +0 -482
  571. package/dist/agent/use-agent-stream.d.ts +0 -35
  572. package/dist/agent/use-agent-stream.d.ts.map +0 -1
  573. package/dist/agent/use-agent-stream.js +0 -59
  574. package/dist/agent-chat/composer.d.ts.map +0 -1
  575. package/dist/agent-chat/index.d.ts +0 -31
  576. package/dist/agent-chat/index.d.ts.map +0 -1
  577. package/dist/agent-chat/index.js +0 -19
  578. package/dist/agent-chat/message-affordances.d.ts.map +0 -1
  579. package/dist/agent-chat/relative-time.d.ts.map +0 -1
  580. package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
  581. package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
  582. package/dist/agent-chat/thread-detail-panel.js +0 -115
  583. package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
  584. package/dist/agent-chat/thread-feed.d.ts.map +0 -1
  585. package/dist/agent-chat/thread-message.d.ts.map +0 -1
  586. package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
  587. package/dist/agent-chat/thread-workspace.d.ts +0 -44
  588. package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
  589. package/dist/agent-chat/thread-workspace.js +0 -153
  590. package/dist/agent-chat/tool-chip.d.ts.map +0 -1
  591. package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
  592. package/dist/agent-chat/virtualize.d.ts.map +0 -1
  593. package/dist/charts/cursor/resolve.d.ts +0 -75
  594. package/dist/charts/cursor/resolve.d.ts.map +0 -1
  595. package/dist/charts/cursor/resolve.js +0 -91
  596. package/dist/charts/cursor/scope.d.ts +0 -20
  597. package/dist/charts/cursor/scope.d.ts.map +0 -1
  598. package/dist/charts/cursor/scope.js +0 -20
  599. package/dist/charts/cursor/store.d.ts +0 -35
  600. package/dist/charts/cursor/store.d.ts.map +0 -1
  601. package/dist/charts/cursor/store.js +0 -25
  602. package/dist/charts/cursor/touch-pin.d.ts +0 -45
  603. package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
  604. package/dist/charts/cursor/touch-pin.js +0 -79
  605. package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
  606. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
  607. package/dist/charts/hooks/use-discrete-cursor.js +0 -198
  608. package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
  609. package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
  610. package/dist/charts/hooks/use-hysteresis.js +0 -12
  611. package/dist/charts/hooks/useBandPlot.d.ts +0 -145
  612. package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
  613. package/dist/charts/hooks/useBandPlot.js +0 -178
  614. package/dist/charts/hooks/useChartCursor.d.ts +0 -75
  615. package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
  616. package/dist/charts/hooks/useChartCursor.js +0 -200
  617. package/dist/charts/hooks/useChartSize.d.ts +0 -29
  618. package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
  619. package/dist/charts/hooks/useChartSize.js +0 -8
  620. package/dist/charts/kinds/BandStrip.d.ts +0 -132
  621. package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
  622. package/dist/charts/kinds/BandStrip.js +0 -241
  623. package/dist/charts/kinds/Bars.d.ts +0 -141
  624. package/dist/charts/kinds/Bars.d.ts.map +0 -1
  625. package/dist/charts/kinds/Bars.js +0 -343
  626. package/dist/charts/kinds/Donut.d.ts +0 -77
  627. package/dist/charts/kinds/Donut.d.ts.map +0 -1
  628. package/dist/charts/kinds/Donut.js +0 -245
  629. package/dist/charts/kinds/DualPanel.d.ts +0 -111
  630. package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
  631. package/dist/charts/kinds/DualPanel.js +0 -471
  632. package/dist/charts/kinds/Heatmap.d.ts +0 -85
  633. package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
  634. package/dist/charts/kinds/Heatmap.js +0 -243
  635. package/dist/charts/kinds/MirroredBars.d.ts +0 -98
  636. package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
  637. package/dist/charts/kinds/MirroredBars.js +0 -292
  638. package/dist/charts/kinds/MultiLine.d.ts +0 -87
  639. package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
  640. package/dist/charts/kinds/MultiLine.js +0 -176
  641. package/dist/charts/kinds/StackedArea.d.ts +0 -73
  642. package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
  643. package/dist/charts/kinds/StackedArea.js +0 -135
  644. package/dist/charts/kinds/ZonedLine.d.ts +0 -97
  645. package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
  646. package/dist/charts/kinds/ZonedLine.js +0 -155
  647. package/dist/charts/kinds/band-chrome.d.ts +0 -31
  648. package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
  649. package/dist/charts/kinds/band-chrome.js +0 -71
  650. package/dist/charts/kinds/donut-layout.d.ts +0 -47
  651. package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
  652. package/dist/charts/kinds/donut-layout.js +0 -52
  653. package/dist/charts/layout/auto-margin.d.ts +0 -122
  654. package/dist/charts/layout/auto-margin.d.ts.map +0 -1
  655. package/dist/charts/layout/auto-margin.js +0 -81
  656. package/dist/charts/layout/end-labels.d.ts +0 -64
  657. package/dist/charts/layout/end-labels.d.ts.map +0 -1
  658. package/dist/charts/layout/end-labels.js +0 -76
  659. package/dist/charts/layout/log-ticks.d.ts +0 -27
  660. package/dist/charts/layout/log-ticks.d.ts.map +0 -1
  661. package/dist/charts/layout/log-ticks.js +0 -42
  662. package/dist/charts/primitives/AreaGradient.d.ts +0 -18
  663. package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
  664. package/dist/charts/primitives/AreaGradient.js +0 -13
  665. package/dist/charts/primitives/Axes.d.ts +0 -83
  666. package/dist/charts/primitives/Axes.d.ts.map +0 -1
  667. package/dist/charts/primitives/Axes.js +0 -168
  668. package/dist/charts/primitives/CartesianChart.d.ts +0 -257
  669. package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
  670. package/dist/charts/primitives/CartesianChart.js +0 -549
  671. package/dist/charts/primitives/ChartCard.d.ts +0 -66
  672. package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
  673. package/dist/charts/primitives/ChartCard.js +0 -143
  674. package/dist/charts/primitives/ChartFrame.d.ts +0 -156
  675. package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
  676. package/dist/charts/primitives/ChartFrame.js +0 -241
  677. package/dist/charts/primitives/ChartLegend.d.ts +0 -67
  678. package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
  679. package/dist/charts/primitives/ChartLegend.js +0 -292
  680. package/dist/charts/primitives/ChartPending.d.ts +0 -113
  681. package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
  682. package/dist/charts/primitives/ChartPending.js +0 -117
  683. package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
  684. package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
  685. package/dist/charts/primitives/ChartTooltip.js +0 -197
  686. package/dist/charts/primitives/Crosshair.d.ts +0 -26
  687. package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
  688. package/dist/charts/primitives/Crosshair.js +0 -23
  689. package/dist/charts/primitives/HatchPattern.d.ts +0 -31
  690. package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
  691. package/dist/charts/primitives/HatchPattern.js +0 -31
  692. package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
  693. package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
  694. package/dist/charts/primitives/HoverOverlay.js +0 -72
  695. package/dist/charts/primitives/HoverOverlay.module.css +0 -13
  696. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  697. package/dist/charts/primitives/XZoneRects.d.ts +0 -54
  698. package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
  699. package/dist/charts/primitives/XZoneRects.js +0 -65
  700. package/dist/charts/primitives/ZoneRects.d.ts +0 -38
  701. package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
  702. package/dist/charts/primitives/ZoneRects.js +0 -30
  703. package/dist/charts/primitives/chart-card-context.d.ts +0 -33
  704. package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
  705. package/dist/charts/primitives/chart-card-context.js +0 -18
  706. package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
  707. package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
  708. package/dist/charts/primitives/chart-frame-layout.js +0 -175
  709. package/dist/charts/primitives/chart-layout.d.ts +0 -112
  710. package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
  711. package/dist/charts/primitives/chart-layout.js +0 -175
  712. package/dist/charts/primitives/chart-tier.d.ts +0 -16
  713. package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
  714. package/dist/charts/primitives/chart-tier.js +0 -44
  715. package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
  716. package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
  717. package/dist/charts/primitives/legend-disclosure.js +0 -153
  718. package/dist/charts/series.d.ts +0 -189
  719. package/dist/charts/series.d.ts.map +0 -1
  720. package/dist/charts/series.js +0 -84
  721. package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
  722. package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
  723. package/dist/charts/sparklines/BarSparkline.js +0 -53
  724. package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
  725. package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
  726. package/dist/charts/sparklines/LineSparkline.js +0 -51
  727. package/dist/charts/sparklines/index.d.ts +0 -3
  728. package/dist/charts/sparklines/index.d.ts.map +0 -1
  729. package/dist/charts/sparklines/index.js +0 -6
  730. package/dist/charts/utils/domain.d.ts +0 -35
  731. package/dist/charts/utils/domain.d.ts.map +0 -1
  732. package/dist/charts/utils/domain.js +0 -12
  733. package/dist/charts/utils/format.d.ts +0 -8
  734. package/dist/charts/utils/format.d.ts.map +0 -1
  735. package/dist/charts/utils/format.js +0 -20
  736. package/dist/charts/utils/measure-text.d.ts +0 -25
  737. package/dist/charts/utils/measure-text.d.ts.map +0 -1
  738. package/dist/charts/utils/measure-text.js +0 -64
  739. package/dist/charts/utils/ticks.d.ts +0 -103
  740. package/dist/charts/utils/ticks.d.ts.map +0 -1
  741. package/dist/charts/utils/ticks.js +0 -92
  742. package/dist/commands/overlays-mount.d.ts +0 -122
  743. package/dist/commands/overlays-mount.d.ts.map +0 -1
  744. package/dist/commands/overlays-mount.js +0 -125
  745. package/dist/commands/useCommandHotkeys.d.ts +0 -14
  746. package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
  747. package/dist/commands/useCommandHotkeys.js +0 -45
  748. package/dist/content/article-actions.d.ts +0 -39
  749. package/dist/content/article-actions.d.ts.map +0 -1
  750. package/dist/content/article-actions.js +0 -28
  751. package/dist/content/article-card.d.ts +0 -58
  752. package/dist/content/article-card.d.ts.map +0 -1
  753. package/dist/content/article-card.js +0 -79
  754. package/dist/content/article-card.module.css +0 -111
  755. package/dist/content/mdx.d.ts +0 -20
  756. package/dist/content/mdx.d.ts.map +0 -1
  757. package/dist/content/mdx.js +0 -64
  758. package/dist/controls/compare-filter.d.ts +0 -42
  759. package/dist/controls/compare-filter.d.ts.map +0 -1
  760. package/dist/controls/compare-filter.js +0 -38
  761. package/dist/controls/slider-control.d.ts +0 -36
  762. package/dist/controls/slider-control.d.ts.map +0 -1
  763. package/dist/controls/slider-control.js +0 -64
  764. package/dist/dashboard/widget-grid.d.ts +0 -27
  765. package/dist/dashboard/widget-grid.d.ts.map +0 -1
  766. package/dist/dashboard/widget-grid.js +0 -40
  767. package/dist/dashboard/widget-grid.module.css +0 -69
  768. package/dist/data/data-table-state.d.ts.map +0 -1
  769. package/dist/data/data-table.d.ts.map +0 -1
  770. package/dist/data/query-branch.d.ts.map +0 -1
  771. package/dist/data/table.d.ts +0 -24
  772. package/dist/data/table.d.ts.map +0 -1
  773. package/dist/data/virtual-list.d.ts +0 -133
  774. package/dist/data/virtual-list.d.ts.map +0 -1
  775. package/dist/data/virtual-list.js +0 -157
  776. package/dist/data/virtual.d.ts +0 -21
  777. package/dist/data/virtual.d.ts.map +0 -1
  778. package/dist/data/virtual.js +0 -4
  779. package/dist/forms/FormErrorSummary.d.ts +0 -30
  780. package/dist/forms/FormErrorSummary.d.ts.map +0 -1
  781. package/dist/forms/FormErrorSummary.js +0 -30
  782. package/dist/forms/use-field-array.d.ts +0 -60
  783. package/dist/forms/use-field-array.d.ts.map +0 -1
  784. package/dist/forms/use-field-array.js +0 -20
  785. package/dist/forms/use-form-draft.d.ts +0 -76
  786. package/dist/forms/use-form-draft.d.ts.map +0 -1
  787. package/dist/forms/use-form-draft.js +0 -92
  788. package/dist/forms/use-form-submit.d.ts +0 -88
  789. package/dist/forms/use-form-submit.d.ts.map +0 -1
  790. package/dist/forms/use-form-submit.js +0 -63
  791. package/dist/notifications/bell.d.ts.map +0 -1
  792. package/dist/notifications/center.d.ts.map +0 -1
  793. package/dist/notifications/define-notifications.d.ts.map +0 -1
  794. package/dist/notifications/index.d.ts +0 -40
  795. package/dist/notifications/index.d.ts.map +0 -1
  796. package/dist/notifications/index.js +0 -54
  797. package/dist/notifications/mount-guard.d.ts +0 -8
  798. package/dist/notifications/mount-guard.d.ts.map +0 -1
  799. package/dist/notifications/mount-guard.js +0 -18
  800. package/dist/notifications/notify.d.ts +0 -149
  801. package/dist/notifications/notify.d.ts.map +0 -1
  802. package/dist/notifications/notify.js +0 -171
  803. package/dist/notifications/store.d.ts.map +0 -1
  804. package/dist/provider/connectivity-indicator.d.ts +0 -13
  805. package/dist/provider/connectivity-indicator.d.ts.map +0 -1
  806. package/dist/provider/connectivity-indicator.js +0 -205
  807. package/dist/provider/connectivity-provider.d.ts +0 -7
  808. package/dist/provider/connectivity-provider.d.ts.map +0 -1
  809. package/dist/provider/connectivity-provider.js +0 -128
  810. package/dist/provider/connectivity-types.d.ts +0 -36
  811. package/dist/provider/connectivity-types.d.ts.map +0 -1
  812. package/dist/provider/use-connectivity.d.ts +0 -3
  813. package/dist/provider/use-connectivity.d.ts.map +0 -1
  814. package/dist/provider/use-connectivity.js +0 -14
  815. package/dist/query-devtools.d.ts +0 -21
  816. package/dist/query-devtools.d.ts.map +0 -1
  817. package/dist/query-devtools.js +0 -13
  818. package/src/agent/adapter.ts +0 -945
  819. package/src/agent/use-agent-stream.ts +0 -154
  820. package/src/agent-chat/index.ts +0 -54
  821. package/src/agent-chat/thread-detail-panel.tsx +0 -201
  822. package/src/agent-chat/thread-workspace.tsx +0 -279
  823. package/src/charts/cursor/resolve.ts +0 -198
  824. package/src/charts/cursor/scope.tsx +0 -35
  825. package/src/charts/cursor/store.ts +0 -58
  826. package/src/charts/cursor/touch-pin.ts +0 -138
  827. package/src/charts/hooks/use-discrete-cursor.ts +0 -335
  828. package/src/charts/hooks/use-hysteresis.ts +0 -26
  829. package/src/charts/hooks/useBandPlot.ts +0 -383
  830. package/src/charts/hooks/useChartCursor.ts +0 -367
  831. package/src/charts/hooks/useChartSize.ts +0 -35
  832. package/src/charts/kinds/BandStrip.tsx +0 -449
  833. package/src/charts/kinds/Bars.tsx +0 -589
  834. package/src/charts/kinds/Donut.tsx +0 -368
  835. package/src/charts/kinds/DualPanel.tsx +0 -712
  836. package/src/charts/kinds/Heatmap.tsx +0 -396
  837. package/src/charts/kinds/MirroredBars.tsx +0 -469
  838. package/src/charts/kinds/MultiLine.tsx +0 -322
  839. package/src/charts/kinds/StackedArea.tsx +0 -267
  840. package/src/charts/kinds/ZonedLine.tsx +0 -301
  841. package/src/charts/kinds/band-chrome.tsx +0 -91
  842. package/src/charts/kinds/donut-layout.ts +0 -82
  843. package/src/charts/layout/auto-margin.ts +0 -242
  844. package/src/charts/layout/end-labels.ts +0 -135
  845. package/src/charts/layout/log-ticks.ts +0 -90
  846. package/src/charts/primitives/AreaGradient.tsx +0 -26
  847. package/src/charts/primitives/Axes.tsx +0 -271
  848. package/src/charts/primitives/CartesianChart.tsx +0 -1002
  849. package/src/charts/primitives/ChartCard.tsx +0 -280
  850. package/src/charts/primitives/ChartFrame.tsx +0 -493
  851. package/src/charts/primitives/ChartLegend.tsx +0 -422
  852. package/src/charts/primitives/ChartPending.tsx +0 -243
  853. package/src/charts/primitives/ChartTooltip.tsx +0 -265
  854. package/src/charts/primitives/Crosshair.tsx +0 -43
  855. package/src/charts/primitives/HatchPattern.tsx +0 -55
  856. package/src/charts/primitives/HoverOverlay.module.css +0 -13
  857. package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
  858. package/src/charts/primitives/HoverOverlay.tsx +0 -109
  859. package/src/charts/primitives/XZoneRects.tsx +0 -132
  860. package/src/charts/primitives/ZoneRects.tsx +0 -67
  861. package/src/charts/primitives/chart-card-context.ts +0 -46
  862. package/src/charts/primitives/chart-frame-layout.ts +0 -430
  863. package/src/charts/primitives/chart-layout.ts +0 -318
  864. package/src/charts/primitives/chart-tier.tsx +0 -76
  865. package/src/charts/primitives/legend-disclosure.tsx +0 -178
  866. package/src/charts/series.ts +0 -276
  867. package/src/charts/sparklines/BarSparkline.tsx +0 -94
  868. package/src/charts/sparklines/LineSparkline.tsx +0 -71
  869. package/src/charts/sparklines/index.ts +0 -2
  870. package/src/charts/theme.tsx +0 -53
  871. package/src/charts/utils/domain.ts +0 -41
  872. package/src/charts/utils/format.ts +0 -19
  873. package/src/charts/utils/measure-text.ts +0 -109
  874. package/src/charts/utils/ticks.ts +0 -239
  875. package/src/commands/overlays-mount.tsx +0 -333
  876. package/src/commands/useCommandHotkeys.ts +0 -114
  877. package/src/content/article-actions.ts +0 -72
  878. package/src/content/article-card.module.css +0 -111
  879. package/src/content/article-card.tsx +0 -174
  880. package/src/content/mdx.tsx +0 -127
  881. package/src/controls/compare-filter.tsx +0 -81
  882. package/src/controls/slider-control.tsx +0 -159
  883. package/src/dashboard/widget-grid.module.css +0 -69
  884. package/src/dashboard/widget-grid.tsx +0 -146
  885. package/src/data/table.ts +0 -39
  886. package/src/data/virtual-list.tsx +0 -356
  887. package/src/data/virtual.ts +0 -26
  888. package/src/forms/FormErrorSummary.tsx +0 -71
  889. package/src/forms/use-field-array.ts +0 -94
  890. package/src/forms/use-form-draft.ts +0 -262
  891. package/src/forms/use-form-submit.ts +0 -199
  892. package/src/notifications/index.ts +0 -88
  893. package/src/notifications/mount-guard.ts +0 -38
  894. package/src/notifications/notify.tsx +0 -379
  895. package/src/provider/connectivity-indicator.tsx +0 -267
  896. package/src/provider/connectivity-provider.tsx +0 -189
  897. package/src/provider/connectivity-types.ts +0 -42
  898. package/src/provider/use-connectivity.ts +0 -26
  899. package/src/query-devtools.tsx +0 -40
  900. /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
  901. /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
  902. /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
  903. /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
  904. /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
  905. /package/dist/{notifications → commands/notifications}/bell.js +0 -0
  906. /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
  907. /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
  908. /package/dist/{data → table}/data-table.module.css +0 -0
  909. /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
  910. /package/dist/{data → table}/query-branch.d.ts +0 -0
  911. /package/dist/{data → table}/query-branch.js +0 -0
  912. /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
  913. /package/src/{data → table}/data-table.module.css +0 -0
  914. /package/src/{data → table}/data-table.module.css.d.ts +0 -0
  915. /package/src/{data → table}/query-branch.ts +0 -0
@@ -1,183 +1,9 @@
1
1
  /**
2
- * projectors — project the active command registry into Mantine Spotlight actions, a shortcut list,
3
- * and a @tanstack/react-hotkeys bindings array.
4
- *
5
- * All functions read the runtime stash (populated by defineCommands) — they do NOT read the
6
- * type-erased BasaltRegister slot. They are safe to call before any commands are registered
7
- * (returns empty array).
8
- *
9
- * @example
10
- * // In BasaltOverlays, pass toSpotlightActions() to Spotlight:
11
- * <Spotlight store={basaltSpotlight[0]} actions={toSpotlightActions()} shortcut="mod + K" />
12
- *
13
- * // Render a shortcut reference list:
14
- * const shortcuts = toShortcutList() // [{ id, label, shortcut, group? }, ...]
15
- *
16
- * // Opt-in: drive your own useHotkeys() call (useCommandHotkeys uses the imperative manager API instead):
17
- * const bindings = toHotkeyBindings()
18
- * useHotkeys(bindings)
19
- */
20
- import type { SpotlightActionData } from '@mantine/spotlight'
21
- import type { ReactNode } from 'react'
22
- import { getActiveCommands, runCommand } from './define-commands'
23
- import type { CommandId } from './define-commands'
24
- import { formatShortcutDisplay, detectMac } from './shortcut-format'
25
-
26
- // ── UseHotkeyDefinition (re-typed locally to avoid peer import at module level) ──
27
-
28
- /**
29
- * Shape of a single entry in the array passed to useHotkeys().
30
- * Mirrors UseHotkeyDefinition from @tanstack/react-hotkeys — typed locally so
31
- * projectors.ts has no hard import on the optional peer.
32
- */
33
- export type HotkeyBinding = {
34
- hotkey: string
35
- /**
36
- * Callback invoked when the hotkey fires. Widened to match @tanstack/react-hotkeys'
37
- * HotkeyCallback signature — `(event: KeyboardEvent, context?: unknown) => void` — so
38
- * consumers can pass toHotkeyBindings() directly to useHotkeys() without a tsc error.
39
- * The implementations produced by toHotkeyBindings() only use the zero-arg form internally.
40
- */
41
- callback: (event: KeyboardEvent, context?: unknown) => void
42
- }
43
-
44
- // ── toSpotlightActions ────────────────────────────────────────────────────────
45
-
46
- /**
47
- * Project the active command registry into a Mantine Spotlight `SpotlightActionData[]` array.
48
- * Commands where `when()` returns false are excluded from the list.
49
- *
50
- * Reads a one-time snapshot of the runtime command stash at call time — commands registered AFTER
51
- * this is called (lazy/code-split) won't appear. Register all commands at module load before
52
- * mounting <BasaltOverlays>.
53
- *
54
- * When onTrigger is provided it is called INSTEAD OF runCommand (put runCommand(id) inside your
55
- * onTrigger if you want it to fire); without onTrigger, runCommand(id) fires directly.
56
- *
57
- * @example
58
- * // Close the palette then run the command:
59
- * const actions = toSpotlightActions((id) => { spotlight.close(); runCommand(id) })
60
- *
61
- * // Default: just runs the command directly
62
- * const actions = toSpotlightActions()
63
- */
64
- export function toSpotlightActions(onTrigger?: (id: CommandId) => void): SpotlightActionData[] {
65
- const cmds = getActiveCommands()
66
- const actions: SpotlightActionData[] = []
67
-
68
- for (const [id, cmd] of Object.entries(cmds)) {
69
- // Skip commands gated behind a false when() predicate
70
- if (cmd.when !== undefined && !cmd.when()) continue
71
-
72
- const action: SpotlightActionData = {
73
- id,
74
- label: cmd.label,
75
- leftSection: cmd.icon,
76
- keywords: [cmd.group ?? '', id].join(' ').trim(),
77
- onClick: () => {
78
- // id is the actual stash key (string from Object.entries), narrowed to CommandId for the typed callback
79
- if (onTrigger !== undefined) {
80
- onTrigger(id as CommandId)
81
- } else {
82
- runCommand(id as CommandId)
83
- }
84
- },
85
- }
86
- if (cmd.shortcut !== undefined) {
87
- // detectMac() is SSR-safe (returns false when navigator is unavailable)
88
- action.description = formatShortcutDisplay(cmd.shortcut, detectMac())
89
- }
90
- if (cmd.group !== undefined) action.group = cmd.group
91
- actions.push(action)
92
- }
93
-
94
- return actions
95
- }
96
-
97
- // ── toRouteActions ────────────────────────────────────────────────────────────
98
-
99
- export type RouteActionItem = {
100
- label: string
101
- href?: string
102
- icon?: ReactNode
103
- disabled?: boolean
104
- children?: RouteActionItem[]
105
- }
106
-
107
- export type RouteActionSection = {
108
- /** Section label — the root segment of each item's breadcrumb-trail label. */
109
- label: string
110
- /** Section icon — inherited as the leftSection by items/children that have no icon of their own. */
111
- icon?: ReactNode
112
- items: RouteActionItem[]
113
- }
114
-
115
- export type ToRouteActionsOptions = {
116
- /** Navigate to a route href — e.g. `(href) => router.navigate({ to: href })`. */
117
- onNavigate: (href: string) => void
118
- /** Prefix for generated action ids so they never collide with command ids. Default 'route:'. */
119
- idPrefix?: string
120
- /**
121
- * Spotlight group for every produced action (e.g. 'Pages'). Omit for an ungrouped, flat list.
122
- * Unlike the nav section (which becomes part of the breadcrumb label), this is a single kind
123
- * bucket across all routes.
124
- */
125
- group?: string
126
- /** Separator between breadcrumb segments in the action label. Default ' › '. */
127
- separator?: string
128
- /**
129
- * Node rendered on the right of every action — e.g. a kind badge (`<Badge>Page</Badge>`). Lets
130
- * the palette distinguish pages from commands at a glance regardless of grouping.
131
- */
132
- rightSection?: ReactNode
133
- }
134
-
135
- /**
136
- * Project a nav model (sections → items → nested children) into Mantine Spotlight
137
- * page-navigation actions. Pass the result to <BasaltOverlays spotlightActions={…}> so the palette
138
- * lists Pages alongside Commands.
139
- *
140
- * Each action's label is the full breadcrumb trail from the section down to the item
141
- * (e.g. `Overview › Dashboard › Sessions`), so a result is self-describing. Disabled items and
142
- * items without an href are skipped. An item/child without its own icon inherits the nearest
143
- * ancestor's (section → parent item), so sub-routes carry the parent's icon in the palette while
144
- * staying icon-less in a sidebar that renders them against a rail. Optionally assign one `group`
145
- * (a kind bucket like 'Pages') and a `rightSection` (a kind badge) to every action. Reads a static
146
- * snapshot — routes are static, so build it once.
147
- *
148
- * Structurally compatible with the shell's SidebarSection[] — pass your existing nav model directly.
2
+ * projectors — project the active command registry into the shortcut reference list that
3
+ * `ShortcutsHelp` renders. Reads the runtime stash (populated by `defineCommands`), not the
4
+ * type-erased `BasaltRegister` slot; safe to call before any commands are registered.
149
5
  */
150
- export function toRouteActions(
151
- sections: RouteActionSection[],
152
- options: ToRouteActionsOptions,
153
- ): SpotlightActionData[] {
154
- const { onNavigate, idPrefix = 'route:', separator = ' › ', group, rightSection } = options
155
- const actions: SpotlightActionData[] = []
156
-
157
- const walk = (items: RouteActionItem[], trail: string[], inheritedIcon?: ReactNode): void => {
158
- for (const item of items) {
159
- const itemTrail = [...trail, item.label]
160
- const icon = item.icon ?? inheritedIcon
161
- if (!item.disabled && item.href !== undefined) {
162
- const href = item.href
163
- const action: SpotlightActionData = {
164
- id: `${idPrefix}${href}`,
165
- label: itemTrail.join(separator),
166
- leftSection: icon,
167
- keywords: [...itemTrail, href].join(' '),
168
- onClick: () => onNavigate(href),
169
- }
170
- if (group !== undefined) action.group = group
171
- if (rightSection !== undefined) action.rightSection = rightSection
172
- actions.push(action)
173
- }
174
- if (item.children !== undefined) walk(item.children, itemTrail, icon)
175
- }
176
- }
177
-
178
- for (const section of sections) walk(section.items, [section.label], section.icon)
179
- return actions
180
- }
6
+ import { getActiveCommands } from './define-commands'
181
7
 
182
8
  // ── ShortcutEntry ─────────────────────────────────────────────────────────────
183
9
 
@@ -198,7 +24,7 @@ export type ShortcutEntry = {
198
24
  *
199
25
  * Reads a one-time snapshot of the runtime command stash at call time — commands registered AFTER
200
26
  * this is called (lazy/code-split) won't appear. Register all commands at module load before
201
- * mounting <BasaltOverlays>.
27
+ * rendering `ShortcutsHelp`.
202
28
  *
203
29
  * @example
204
30
  * const shortcuts = toShortcutList()
@@ -219,49 +45,3 @@ export function toShortcutList(): ShortcutEntry[] {
219
45
 
220
46
  return result
221
47
  }
222
-
223
- // ── toHotkeyBindings ──────────────────────────────────────────────────────────
224
-
225
- /**
226
- * Project the active command registry into a `UseHotkeyDefinition[]` bindings array — the exact
227
- * shape accepted by `useHotkeys` from `@tanstack/react-hotkeys`.
228
- *
229
- * Commands without a `shortcut` field are skipped. Commands where `when()` returns false are
230
- * included in the bindings but their callback is a no-op (the command is gated at call time, not
231
- * at registration time — this avoids hook-count churn when `when()` toggles).
232
- *
233
- * Reads a one-time snapshot of the runtime command stash.
234
- *
235
- * NOTE: the built-in useCommandHotkeys() does NOT call this function. It uses the imperative
236
- * getHotkeyManager() API from @tanstack/react-hotkeys directly (register/unregister per
237
- * mount/unmount cycle). toHotkeyBindings() is an opt-in convenience projector for consumers
238
- * who want to drive their own useHotkeys([...]) call — it is not on the path that
239
- * useCommandHotkeys() takes.
240
- *
241
- * @example
242
- * import { useHotkeys } from '@tanstack/react-hotkeys'
243
- * import { toHotkeyBindings } from 'basalt-ui/commands'
244
- *
245
- * function MyHotkeys() {
246
- * useHotkeys(toHotkeyBindings())
247
- * }
248
- */
249
- export function toHotkeyBindings(): HotkeyBinding[] {
250
- const cmds = getActiveCommands()
251
- const bindings: HotkeyBinding[] = []
252
-
253
- for (const [id, cmd] of Object.entries(cmds)) {
254
- if (cmd.shortcut === undefined) continue
255
-
256
- bindings.push({
257
- hotkey: cmd.shortcut,
258
- callback: () => {
259
- // Respect the when() gate at execution time (not registration time)
260
- if (cmd.when !== undefined && !cmd.when()) return
261
- void runCommand(id as CommandId)
262
- },
263
- })
264
- }
265
-
266
- return bindings
267
- }
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * basalt registers BOTH setters itself — `BasaltProvider` calls {@link registerColorSchemeSetter}
17
17
  * from inside `MantineProvider` (`provider/index.tsx`'s `BasaltBridge`), `BasaltShell` calls
18
- * {@link registerSidebarToggle} (`shell/index.tsx`'s `ShellFrame`) — so a consumer's own
18
+ * {@link registerSidebarToggle} (`shell/index.tsx`'s `ShellBody`) — so a consumer's own
19
19
  * `commands.tsx` needs no `__root.tsx` wiring at all, unlike argo's hand-rolled version: mount
20
20
  * `BasaltProvider`/`BasaltShell` once, and `setColorScheme`/`toggleSidebar` just work.
21
21
  *
@@ -50,8 +50,8 @@ export function registerSidebarToggle(toggle: SidebarToggle | null): void {
50
50
 
51
51
  /**
52
52
  * Set the color scheme from outside the React tree. A no-op (with a dev-only console warning)
53
- * when no `BasaltProvider` is mounted yet — the same "not wired" shape `runCommand`/
54
- * `overlays.open` already use for an unregistered id.
53
+ * when no `BasaltProvider` is mounted yet — the same "not wired" shape
54
+ * `overlays.open` already uses for an unregistered id.
55
55
  *
56
56
  * @example
57
57
  * setColorScheme('dark')
@@ -59,7 +59,7 @@ export function registerSidebarToggle(toggle: SidebarToggle | null): void {
59
59
  export function setColorScheme(scheme: ColorScheme): void {
60
60
  if (colorSchemeSetterRef === null) {
61
61
  if (process.env['NODE_ENV'] !== 'production') {
62
- // eslint-disable-next-line no-console -- dev-only diagnostic, mirrors runCommand's own
62
+ // eslint-disable-next-line no-console -- dev-only diagnostic
63
63
  console.warn('[basalt] setColorScheme: no BasaltProvider is mounted yet')
64
64
  }
65
65
  return
@@ -77,7 +77,7 @@ export function setColorScheme(scheme: ColorScheme): void {
77
77
  export function toggleSidebar(): void {
78
78
  if (sidebarToggleRef === null) {
79
79
  if (process.env['NODE_ENV'] !== 'production') {
80
- // eslint-disable-next-line no-console -- dev-only diagnostic, mirrors runCommand's own
80
+ // eslint-disable-next-line no-console -- dev-only diagnostic
81
81
  console.warn('[basalt] toggleSidebar: no BasaltShell is mounted yet')
82
82
  }
83
83
  return
@@ -18,7 +18,8 @@
18
18
  /**
19
19
  * Returns true when running on macOS. SSR-safe — returns false when navigator is unavailable.
20
20
  * Uses userAgentData.platform when available; falls back to userAgent string regex.
21
- * Never call during render — use only inside useEffect to avoid hydration mismatches.
21
+ * Reads the client's platform, so during SSR/hydration render it through `useSyncExternalStore`
22
+ * with a `false` server snapshot (as `ShortcutsHelp` does) rather than calling it bare in render.
22
23
  */
23
24
  export function detectMac(): boolean {
24
25
  if (typeof navigator === 'undefined') return false
@@ -64,14 +65,14 @@ function plainKey(key: string): string {
64
65
  /**
65
66
  * Convert a shortcut string to a list of Kbd-friendly tokens.
66
67
  * 'Mod+S' → ['⌘', 'S'] (mac) or ['Ctrl', 'S'] (other).
67
- * 'Shift+Mod+P' → ['⇧', '⌘', 'P'] (mac) or ['Shift', 'Ctrl', 'P'] (other).
68
+ * 'Mod+Shift+P' → ['⌘', '⇧', 'P'] (mac) or ['Ctrl', 'Shift', 'P'] (other).
68
69
  * Named keys read as glyphs on mac and Title-case words elsewhere:
69
70
  * 'Mod+Backspace' → ['⌘', '⌫'] (mac) or ['Ctrl', 'Backspace'] (other).
70
71
  * isMac is the post-mount platform flag; defaults false on SSR / first render.
71
72
  *
72
73
  * @example
73
74
  * parseShortcut('Mod+S', true) // ['⌘', 'S']
74
- * parseShortcut('Shift+Mod+P', false) // ['Shift', 'Ctrl', 'P']
75
+ * parseShortcut('Mod+Shift+P', false) // ['Ctrl', 'Shift', 'P']
75
76
  * parseShortcut('ArrowLeft', true) // ['←']
76
77
  */
77
78
  export function parseShortcut(shortcut: string, isMac: boolean): string[] {
@@ -114,7 +115,7 @@ export function parseShortcut(shortcut: string, isMac: boolean): string[] {
114
115
  * formatShortcutDisplay('Mod+S', true) // '⌘S'
115
116
  * formatShortcutDisplay('Mod+Backspace', true) // '⌘⌫'
116
117
  * formatShortcutDisplay('Mod+S', false) // 'Ctrl+S'
117
- * formatShortcutDisplay('Shift+Mod+P', true) // '⇧⌘P'
118
+ * formatShortcutDisplay('Mod+Shift+P', true) // '⌘⇧P'
118
119
  */
119
120
  export function formatShortcutDisplay(shortcut: string, isMac: boolean): string {
120
121
  const tokens = parseShortcut(shortcut, isMac)
@@ -3,7 +3,7 @@
3
3
  * here, so the prefix, the `Component: …` shape and the em-dash-then-remedy rhythm are one decision
4
4
  * instead of 60. It is the generalisation of `assertQueryStateLike`, which was the ONLY component
5
5
  * in the library naming itself in its own failure (isomorphic finding F-ERR-1: the other 54 fail as
6
- * raw `TypeError`s that `BasaltErrorBoundary` swallows into a blank subtree).
6
+ * raw `TypeError`s that `RootBoundary` swallows into a blank subtree).
7
7
  *
8
8
  * Every builder returns a string; nothing here throws or logs. The caller decides which it is —
9
9
  * `assertRequiredProps` throws, `useValidateProps` logs, the mount guards log.
@@ -62,8 +62,8 @@ export function deprecatedProp(
62
62
  *
63
63
  * Distinct from {@link deprecatedProp} (still read, going away) and {@link oneOf} (read, and the
64
64
  * value is out of range): this one renders something the caller did not ask for and nothing in the
65
- * type system, the linter or the console says so. `ChartFrame`'s `height` under `fill` is the
66
- * reference case — meteo passed both for the life of the file and never learnt that eight height
65
+ * type system, the linter or the console says so. A 1.x chart's `height` under `fill` was the
66
+ * reference case — weatherorb passed both for the life of the file and never learnt that eight height
67
67
  * constants and a whole `compact` branch changed no pixel.
68
68
  */
69
69
  export function ignoredProp(component: string, prop: string, because: string): string {
@@ -44,11 +44,14 @@ export function useMeasuredWidths(options: UseMeasuredWidthsOptions): UseMeasure
44
44
 
45
45
  // Read through refs so a fresh closure each render does not re-run the effect.
46
46
  const resolveRef = useRef(resolveRoot)
47
- resolveRef.current = resolveRoot
48
47
  const extraRef = useRef(extra)
49
- extraRef.current = extra
50
48
  const onMeasureRef = useRef(onMeasure)
51
- onMeasureRef.current = onMeasure
49
+ // Declared before the measuring effect, so the refs are current by the time it reads them.
50
+ useIsomorphicLayoutEffect(() => {
51
+ resolveRef.current = resolveRoot
52
+ extraRef.current = extra
53
+ onMeasureRef.current = onMeasure
54
+ })
52
55
 
53
56
  useIsomorphicLayoutEffect(() => {
54
57
  if (signatureRef.current !== signature) {
@@ -60,7 +60,7 @@ export function useValidateProps(
60
60
  /**
61
61
  * The same once-per-`(component, message)` dev diagnostic {@link useValidateProps} logs, for a
62
62
  * caller that already owns the effect a check would otherwise race — a decision made synchronously
63
- * inside a `useLayoutEffect` (e.g. `ChartFrame`'s header-slot claim, P2-9) has no business waiting a
63
+ * inside a `useLayoutEffect` (e.g. a card's header-slot claim, P2-9) has no business waiting a
64
64
  * further render for a REACTIVE check on state that effect itself just set: that state update lags
65
65
  * one commit behind the decision, and a passive-effect check racing it warns about instances that
66
66
  * are about to win in the very next render.
@@ -83,7 +83,7 @@ export function resetValidatedProps(): void {
83
83
  *
84
84
  * This is the F-ERR-1 remedy, and the reason it is not dev-gated: the component was going to crash
85
85
  * either way (`undefined is not an object (evaluating 'field.use')`), so the only thing in question
86
- * is whether the stack reaching `BasaltErrorBoundary` names the component and the prop. It does
86
+ * is whether the stack reaching `RootBoundary` names the component and the prop. It does
87
87
  * now. A prop that is merely questionable belongs in `useValidateProps`, not here.
88
88
  *
89
89
  * @example
@@ -129,9 +129,9 @@ export function ArticleLayout({
129
129
  // THIS component, not the Popover, so crossing back below the breakpoint would otherwise remount
130
130
  // it already open with no user action. Adjusted during render (React's own pattern for resetting
131
131
  // state when a derived value changes), not an effect, so there is no open-then-close flash.
132
- const prevShowTocRailRef = useRef(showTocRail)
133
- if (prevShowTocRailRef.current !== showTocRail) {
134
- prevShowTocRailRef.current = showTocRail
132
+ const [prevShowTocRail, setPrevShowTocRail] = useState(showTocRail)
133
+ if (prevShowTocRail !== showTocRail) {
134
+ setPrevShowTocRail(showTocRail)
135
135
  if (tocOpen) setTocOpen(false)
136
136
  }
137
137
 
@@ -167,41 +167,40 @@ export function ArticleLayout({
167
167
  </div>
168
168
  )}
169
169
 
170
- {toc &&
171
- !showTocRail && (
172
- // `.tocTrigger`'s `grid-row: 2` (article-layout.module.css) is EXPLICIT, matching
173
- // `.content`'s own row — not left to CSS Grid's auto-placement, which used to land this
174
- // in its own row below the content instead of at its top (both are `grid-column: 1`, and
175
- // the auto-placement cursor moves past row 2 once `.content` claims it).
176
- <Popover
177
- opened={tocOpen}
178
- onChange={setTocOpen}
179
- onDismiss={() => setTocOpen(false)}
180
- position="bottom-end"
181
- withinPortal
182
- shadow="md"
183
- radius="sm"
184
- trapFocus
185
- >
186
- <Popover.Target>
187
- <Button
188
- variant="subtle"
189
- color="gray"
190
- size="compact-xs"
191
- className={classes.tocTrigger}
192
- classNames={{ label: classes.tocTriggerLabel }}
193
- onClick={() => setTocOpen((current) => !current)}
194
- >
195
- On this page
196
- </Button>
197
- </Popover.Target>
198
- <Popover.Dropdown className={classes.tocDropdown}>
199
- <ScrollArea.Autosize mah="calc(100vh - 108px)" type="hover">
200
- <TableOfContents containerRef={articleRef} onNavigate={() => setTocOpen(false)} />
201
- </ScrollArea.Autosize>
202
- </Popover.Dropdown>
203
- </Popover>
204
- )}
170
+ {toc && !showTocRail && (
171
+ // `.tocTrigger`'s `grid-row: 2` (article-layout.module.css) is EXPLICIT, matching
172
+ // `.content`'s own row — not left to CSS Grid's auto-placement, which used to land this
173
+ // in its own row below the content instead of at its top (both are `grid-column: 1`, and
174
+ // the auto-placement cursor moves past row 2 once `.content` claims it).
175
+ <Popover
176
+ opened={tocOpen}
177
+ onChange={setTocOpen}
178
+ onDismiss={() => setTocOpen(false)}
179
+ position="bottom-end"
180
+ withinPortal
181
+ shadow="md"
182
+ radius="sm"
183
+ trapFocus
184
+ >
185
+ <Popover.Target>
186
+ <Button
187
+ variant="subtle"
188
+ color="gray"
189
+ size="compact-xs"
190
+ className={classes.tocTrigger}
191
+ classNames={{ label: classes.tocTriggerLabel }}
192
+ onClick={() => setTocOpen((current) => !current)}
193
+ >
194
+ On this page
195
+ </Button>
196
+ </Popover.Target>
197
+ <Popover.Dropdown className={classes.tocDropdown}>
198
+ <ScrollArea.Autosize mah="calc(100vh - 108px)" type="hover">
199
+ <TableOfContents containerRef={articleRef} onNavigate={() => setTocOpen(false)} />
200
+ </ScrollArea.Autosize>
201
+ </Popover.Dropdown>
202
+ </Popover>
203
+ )}
205
204
 
206
205
  {(prev !== undefined || next !== undefined) && (
207
206
  <footer className={classes.footer}>
@@ -1,87 +1,4 @@
1
- /**
2
- * Article — the structured data model behind `ArticleCard`/`ArticleLayout` (docs/CONTENT-SPEC.md).
3
- * Pure data + pure functions: no React, no `@mantine/*`. Sortable/filterable article metadata
4
- * replaces the old preformatted `meta` string so a consumer can build a filter bar or a Spotlight
5
- * projector on top of it (both are a later stage — this module only ships the model).
6
- */
7
-
8
- export type Article<C extends string = string, T extends string = string> = {
9
- readonly slug: string
10
- readonly title: string
11
- readonly description?: string
12
- /** ISO 8601 — sortable. Articles without a date sort last regardless of `ArticleOrder`. */
13
- readonly date?: string
14
- readonly category?: C
15
- readonly tags?: readonly T[]
16
- /** Minutes. */
17
- readonly readingTime?: number
18
- }
19
-
20
- export type ArticleOrder = 'date-desc' | 'date-asc' | 'title'
21
-
22
- /**
23
- * Sorts articles. Pure — never mutates `articles`, always returns a new array.
24
- *
25
- * - `'date-desc'` (default) / `'date-asc'` — compares `date` lexicographically (ISO 8601 sorts
26
- * chronologically as a string, so no `Date` parsing is needed). Articles missing a `date` sort
27
- * LAST in both directions — a missing date is not "oldest", it's unranked.
28
- * - `'title'` — `localeCompare` with a PINNED `'en-US'` locale, not the runtime default, so sort
29
- * order doesn't drift between environments.
30
- *
31
- * Stable: articles that compare equal keep their input order (native `toSorted` is a stable sort).
32
- */
33
- export function sortArticles<A extends Article>(
34
- articles: readonly A[],
35
- order: ArticleOrder = 'date-desc',
36
- ): readonly A[] {
37
- if (order === 'title') {
38
- return articles.toSorted((a, b) => a.title.localeCompare(b.title, 'en-US'))
39
- }
40
-
41
- const direction = order === 'date-asc' ? 1 : -1
42
- return articles.toSorted((a, b) => {
43
- if (a.date === undefined && b.date === undefined) return 0
44
- if (a.date === undefined) return 1
45
- if (b.date === undefined) return -1
46
- if (a.date === b.date) return 0
47
- return a.date < b.date ? -direction : direction
48
- })
49
- }
50
-
51
- export type ArticleFilterQuery = {
52
- readonly category?: string
53
- readonly tags?: readonly string[]
54
- }
55
-
56
- /**
57
- * Filters articles. Pure — never mutates `articles`.
58
- *
59
- * - `category` — exact match. `undefined`/`''` applies no constraint.
60
- * - `tags` — ANY-OF (OR): an article matches if it carries at least one queried tag.
61
- * `undefined`/`[]` applies no constraint.
62
- * - Both axes given: AND between category and tags, OR within tags — matches the multi-facet
63
- * `filterFn` semantics in `data/data-table.tsx`.
64
- *
65
- * An empty query (`{}`, or a query where both axes are unset) returns `articles` unchanged.
66
- */
67
- export function filterArticles<A extends Article>(
68
- articles: readonly A[],
69
- query: ArticleFilterQuery,
70
- ): readonly A[] {
71
- const { category, tags } = query
72
- const hasCategory = category !== undefined && category !== ''
73
- const hasTags = tags !== undefined && tags.length > 0
74
-
75
- if (!hasCategory && !hasTags) return articles
76
-
77
- return articles.filter((article) => {
78
- if (hasCategory && article.category !== category) return false
79
- if (hasTags && tags !== undefined && !tags.some((tag) => article.tags?.includes(tag))) {
80
- return false
81
- }
82
- return true
83
- })
84
- }
1
+ /** Article date formatting for `ArticleLayout` — pure, no React, no `@mantine/*`. */
85
2
 
86
3
  /**
87
4
  * Formats an ISO 8601 date string via `Intl.DateTimeFormat` → `'Jul 16, 2026'`.
@@ -1,91 +1,20 @@
1
1
  /**
2
- * `basalt-ui/content` — the content/prose surface (docs/CONTENT-SPEC.md).
2
+ * `basalt-ui/content` — prose, markdown and the docs-page frame (docs/CONTENT-SPEC.md).
3
3
  *
4
- * Mantine-coupled (like `./forms`/`./notifications`/`./data`): prose typography, a shiki-backed
5
- * code block (optional peer, lazy singleton), a semantic callout, a scroll-spy TOC rail, a
6
- * scroll-driven reading-progress bar, a streaming-aware `Markdown` renderer (react-markdown +
7
- * remark-gfm + rehype-sanitize + remend, all optional peers) with its fence-renderer registry,
8
- * `MermaidDiagram` (beautiful-mermaid, optional peer), the MDX
9
- * component map, the docs-page frame (`ArticleLayout`), overview cards (`ArticleCard`/
10
- * `ArticleGrid`), the contextual-help drawer (`GuideLink`/`GuideDrawer`), and a re-export of the
11
- * three `basalt-ui/controls` filters an article list needs (`FilterSet`/`ViewTabs`/
12
- * `MultiSelectFilter`, which replaced the controlled `ArticleFilterBar`). See
13
- * `agent/rules/basalt-content.md` for the full doctrine + the content-collections recipe.
4
+ * Mantine-coupled. `Markdown` renders code and mermaid fences itself (`CodeBlock` and
5
+ * `MermaidDiagram` are internal); `fenceRenderers` is the extension point. Optional peers
6
+ * (shiki, react-markdown stack, beautiful-mermaid) load lazily; the sanitizer is always on.
14
7
  */
15
- export { Prose } from './prose'
16
- export type { ProseDensity, ProseProps } from './prose'
17
-
18
- export { CodeBlock } from './code-block'
19
- export type { CodeBlockProps } from './code-block'
20
8
 
9
+ export { Prose } from './prose'
21
10
  export { Callout } from './callout'
22
- export type { CalloutKind, CalloutProps } from './callout'
23
-
11
+ export type { CalloutKind } from './callout'
24
12
  export { TableOfContents } from './toc'
25
- export type { TableOfContentsProps, TocItem } from './toc'
26
-
27
- export { ReadingProgress } from './reading-progress'
28
- export type { ReadingProgressProps } from './reading-progress'
29
-
30
- // `SlugTracker` is a PascalCase utility class, not a component — see its own JSDoc `@remarks`
31
- // (isomorphic harness finding F-DET-1). `new SlugTracker()`, never `<SlugTracker />`.
32
- export { headingSlug, readingTime, SlugTracker } from './slug'
33
- export type { ReadingTime } from './slug'
34
-
35
- export { HeadingAnchor } from './heading-anchor'
36
- export type { HeadingAnchorProps } from './heading-anchor'
37
-
13
+ export type { TocItem } from './toc'
38
14
  export { Markdown, settledOnly } from './markdown'
39
- export type {
40
- FenceRenderContext,
41
- FenceRenderer,
42
- FenceRenderers,
43
- MarkdownComponents,
44
- MarkdownContentTrust,
45
- MarkdownProps,
46
- } from './markdown'
47
-
48
- export { BASALT_SANITIZE_SCHEMA, mergeSanitizeSchema } from './sanitize'
49
- export type {
50
- SanitizePropertyDefinition,
51
- SanitizeSchema,
52
- SanitizeSchemaExtension,
53
- SanitizeSchemaInput,
54
- } from './sanitize'
55
-
56
- export { MermaidDiagram } from './mermaid'
57
- export type { MermaidDiagramProps } from './mermaid'
58
-
59
- export { blockSplit } from './block-split'
60
-
61
- export { createMdxComponents, mdxComponents } from './mdx'
62
- export type { CreateMdxComponentsOptions } from './mdx'
63
-
15
+ export type { FenceRenderer, FenceRenderers, MarkdownComponents, MarkdownProps } from './markdown'
16
+ export { mergeSanitizeSchema } from './sanitize'
17
+ export type { SanitizeSchemaExtension, SanitizeSchemaInput } from './sanitize'
64
18
  export { ArticleLayout } from './article-layout'
65
- export type { ArticleLayoutMeta, ArticleLayoutProps, ArticleNavTarget } from './article-layout'
66
-
67
- export { ArticleCard, ArticleGrid } from './article-card'
68
- export type { ArticleCardProps, ArticleGridProps } from './article-card'
69
-
70
- export { filterArticles, formatArticleDate, sortArticles } from './article-model'
71
- export type { Article, ArticleFilterQuery, ArticleOrder } from './article-model'
72
-
73
- export { toArticleActions } from './article-actions'
74
- export type { ToArticleActionsOptions } from './article-actions'
75
-
76
- // The article filter UI is no longer content's own: `ArticleFilterBar` (controlled,
77
- // `value`/`onChange`, its own responsive twin) was replaced by the store-bound controls of
78
- // `basalt-ui/controls` (`docs/CONTROLS-SPEC.md` §3, C2/C9). Re-exported here — not merely
79
- // documented as moved — so a content-only consumer that never imports `./controls` still gets the
80
- // three it needs from the surface it was already using. Both spellings are the same module: one
81
- // component, two import paths.
82
- export { FilterSet, MultiSelectFilter, ViewTabs } from '../controls'
83
- export type {
84
- FilterSetProps,
85
- MultiSelectFilterProps,
86
- ViewTabsOption,
87
- ViewTabsProps,
88
- } from '../controls'
89
-
90
- export { GuideDrawer, GuideLink } from './guide'
91
- export type { GuideDrawerProps, GuideLinkProps } from './guide'
19
+ export type { ArticleLayoutMeta } from './article-layout'
20
+ export { GuideLink } from './guide'