@nanisoft/prism-ui 0.10.2 → 0.13.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 (334) hide show
  1. package/LICENSE +21 -21
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/blocks/app-shell-01/app-shell.js +4 -4
  4. package/dist/blocks/app-shell-01/index.d.ts +2 -2
  5. package/dist/blocks/app-shell-01/index.js +1 -1
  6. package/dist/blocks/auth-form-01/auth-form.d.ts +11 -1
  7. package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -1
  8. package/dist/blocks/auth-form-01/auth-form.js +11 -8
  9. package/dist/blocks/auth-form-01/index.d.ts +2 -2
  10. package/dist/blocks/auth-form-01/index.js +1 -1
  11. package/dist/blocks/cta-01/cta.d.ts +26 -21
  12. package/dist/blocks/cta-01/cta.d.ts.map +1 -1
  13. package/dist/blocks/cta-01/cta.js +2 -2
  14. package/dist/blocks/cta-01/index.d.ts +2 -2
  15. package/dist/blocks/cta-01/index.js +1 -1
  16. package/dist/blocks/data-table-01/data-table.js +7 -7
  17. package/dist/blocks/data-table-01/index.d.ts +2 -2
  18. package/dist/blocks/data-table-01/index.js +1 -1
  19. package/dist/blocks/empty-state-01/empty-state.d.ts +143 -0
  20. package/dist/blocks/empty-state-01/empty-state.d.ts.map +1 -0
  21. package/dist/blocks/empty-state-01/empty-state.js +104 -0
  22. package/dist/blocks/empty-state-01/index.d.ts +3 -0
  23. package/dist/blocks/empty-state-01/index.d.ts.map +1 -0
  24. package/dist/blocks/empty-state-01/index.js +1 -0
  25. package/dist/blocks/feature-grid-01/feature-grid.d.ts +28 -1
  26. package/dist/blocks/feature-grid-01/feature-grid.d.ts.map +1 -1
  27. package/dist/blocks/feature-grid-01/feature-grid.js +34 -3
  28. package/dist/blocks/feature-grid-01/index.d.ts +2 -2
  29. package/dist/blocks/feature-grid-01/index.js +1 -1
  30. package/dist/blocks/hero-01/hero.d.ts +35 -15
  31. package/dist/blocks/hero-01/hero.d.ts.map +1 -1
  32. package/dist/blocks/hero-01/hero.js +14 -9
  33. package/dist/blocks/hero-01/index.d.ts +2 -1
  34. package/dist/blocks/hero-01/index.d.ts.map +1 -1
  35. package/dist/blocks/hero-01/index.js +1 -1
  36. package/dist/blocks/index.d.ts +20 -20
  37. package/dist/blocks/index.js +19 -19
  38. package/dist/blocks/instrument-panel-01/index.d.ts +2 -2
  39. package/dist/blocks/instrument-panel-01/index.js +1 -1
  40. package/dist/blocks/instrument-panel-01/instrument-panel.js +1 -1
  41. package/dist/blocks/logo-strip-01/index.d.ts +2 -2
  42. package/dist/blocks/logo-strip-01/index.js +1 -1
  43. package/dist/blocks/logo-strip-01/logo-strip.d.ts +1 -1
  44. package/dist/blocks/logo-strip-01/logo-strip.js +2 -2
  45. package/dist/blocks/note-grid-01/index.d.ts +2 -2
  46. package/dist/blocks/note-grid-01/index.js +1 -1
  47. package/dist/blocks/note-grid-01/note-grid.d.ts +1 -1
  48. package/dist/blocks/note-grid-01/note-grid.js +1 -1
  49. package/dist/blocks/page-header-01/index.d.ts +2 -2
  50. package/dist/blocks/page-header-01/index.js +1 -1
  51. package/dist/blocks/page-header-01/page-header.d.ts +1 -1
  52. package/dist/blocks/page-header-01/page-header.js +4 -4
  53. package/dist/blocks/pricing-01/index.d.ts +1 -1
  54. package/dist/blocks/pricing-01/index.js +1 -1
  55. package/dist/blocks/pricing-01/pricing.d.ts +8 -1
  56. package/dist/blocks/pricing-01/pricing.d.ts.map +1 -1
  57. package/dist/blocks/pricing-01/pricing.js +15 -5
  58. package/dist/blocks/process-flow-01/index.d.ts +3 -0
  59. package/dist/blocks/process-flow-01/index.d.ts.map +1 -0
  60. package/dist/blocks/process-flow-01/index.js +1 -0
  61. package/dist/blocks/process-flow-01/process-flow.d.ts +118 -0
  62. package/dist/blocks/process-flow-01/process-flow.d.ts.map +1 -0
  63. package/dist/blocks/process-flow-01/process-flow.js +71 -0
  64. package/dist/blocks/process-rail-01/index.d.ts +2 -2
  65. package/dist/blocks/process-rail-01/index.js +1 -1
  66. package/dist/blocks/process-rail-01/process-rail.d.ts +1 -1
  67. package/dist/blocks/process-rail-01/process-rail.js +2 -2
  68. package/dist/blocks/product-grid-01/index.d.ts +2 -2
  69. package/dist/blocks/product-grid-01/index.js +1 -1
  70. package/dist/blocks/product-grid-01/product-grid.d.ts +37 -5
  71. package/dist/blocks/product-grid-01/product-grid.d.ts.map +1 -1
  72. package/dist/blocks/product-grid-01/product-grid.js +20 -6
  73. package/dist/blocks/run-console-01/index.d.ts +3 -0
  74. package/dist/blocks/run-console-01/index.d.ts.map +1 -0
  75. package/dist/blocks/run-console-01/index.js +1 -0
  76. package/dist/blocks/run-console-01/run-console.d.ts +111 -0
  77. package/dist/blocks/run-console-01/run-console.d.ts.map +1 -0
  78. package/dist/blocks/run-console-01/run-console.js +48 -0
  79. package/dist/blocks/settings-panel-01/index.d.ts +2 -2
  80. package/dist/blocks/settings-panel-01/index.js +1 -1
  81. package/dist/blocks/settings-panel-01/settings-panel.d.ts +11 -1
  82. package/dist/blocks/settings-panel-01/settings-panel.d.ts.map +1 -1
  83. package/dist/blocks/settings-panel-01/settings-panel.js +15 -10
  84. package/dist/blocks/site-footer/index.d.ts +2 -2
  85. package/dist/blocks/site-footer/index.js +1 -1
  86. package/dist/blocks/site-footer/site-footer.d.ts +1 -1
  87. package/dist/blocks/site-footer/site-footer.js +2 -2
  88. package/dist/blocks/site-header/index.d.ts +2 -2
  89. package/dist/blocks/site-header/index.js +1 -1
  90. package/dist/blocks/site-header/site-header.d.ts +2 -2
  91. package/dist/blocks/site-header/site-header.js +3 -3
  92. package/dist/blocks/site-navbar/index.d.ts +3 -0
  93. package/dist/blocks/site-navbar/index.d.ts.map +1 -0
  94. package/dist/blocks/site-navbar/index.js +1 -0
  95. package/dist/blocks/site-navbar/mobile-nav.d.ts +48 -0
  96. package/dist/blocks/site-navbar/mobile-nav.d.ts.map +1 -0
  97. package/dist/blocks/site-navbar/mobile-nav.js +35 -0
  98. package/dist/blocks/site-navbar/mode-toggle.d.ts +39 -0
  99. package/dist/blocks/site-navbar/mode-toggle.d.ts.map +1 -0
  100. package/dist/blocks/site-navbar/mode-toggle.js +39 -0
  101. package/dist/blocks/site-navbar/navbar-controls.d.ts +79 -0
  102. package/dist/blocks/site-navbar/navbar-controls.d.ts.map +1 -0
  103. package/dist/blocks/site-navbar/navbar-controls.js +40 -0
  104. package/dist/blocks/site-navbar/search-entry.d.ts +29 -0
  105. package/dist/blocks/site-navbar/search-entry.d.ts.map +1 -0
  106. package/dist/blocks/site-navbar/search-entry.js +52 -0
  107. package/dist/blocks/site-navbar/site-navbar.d.ts +212 -0
  108. package/dist/blocks/site-navbar/site-navbar.d.ts.map +1 -0
  109. package/dist/blocks/site-navbar/site-navbar.js +61 -0
  110. package/dist/blocks/site-navbar/sites-menu.d.ts +40 -0
  111. package/dist/blocks/site-navbar/sites-menu.d.ts.map +1 -0
  112. package/dist/blocks/site-navbar/sites-menu.js +48 -0
  113. package/dist/blocks/site-navbar/theme-menu.d.ts +47 -0
  114. package/dist/blocks/site-navbar/theme-menu.d.ts.map +1 -0
  115. package/dist/blocks/site-navbar/theme-menu.js +55 -0
  116. package/dist/blocks/stack-grid-01/index.d.ts +2 -2
  117. package/dist/blocks/stack-grid-01/index.js +1 -1
  118. package/dist/blocks/stack-grid-01/stack-grid.d.ts +42 -11
  119. package/dist/blocks/stack-grid-01/stack-grid.d.ts.map +1 -1
  120. package/dist/blocks/stack-grid-01/stack-grid.js +15 -7
  121. package/dist/blocks/stats-01/index.d.ts +9 -1
  122. package/dist/blocks/stats-01/index.d.ts.map +1 -1
  123. package/dist/blocks/stats-01/index.js +8 -1
  124. package/dist/blocks/stats-01/stats.d.ts +1 -1
  125. package/dist/blocks/stats-01/stats.js +2 -2
  126. package/dist/blocks/status-ledger-01/index.d.ts +2 -2
  127. package/dist/blocks/status-ledger-01/index.js +1 -1
  128. package/dist/blocks/status-ledger-01/status-ledger.d.ts +1 -1
  129. package/dist/blocks/status-ledger-01/status-ledger.js +2 -2
  130. package/dist/catalog.d.ts +1 -1
  131. package/dist/catalog.d.ts.map +1 -1
  132. package/dist/catalog.js +473 -1
  133. package/dist/components/index.d.ts +104 -66
  134. package/dist/components/index.d.ts.map +1 -1
  135. package/dist/components/index.js +74 -40
  136. package/dist/components/ui/accordion.js +1 -1
  137. package/dist/components/ui/alert-dialog.d.ts +119 -0
  138. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  139. package/dist/components/ui/alert-dialog.js +82 -0
  140. package/dist/components/ui/alert.js +1 -1
  141. package/dist/components/ui/aspect-ratio.d.ts +60 -0
  142. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  143. package/dist/components/ui/aspect-ratio.js +61 -0
  144. package/dist/components/ui/avatar.js +1 -1
  145. package/dist/components/ui/badge.js +1 -1
  146. package/dist/components/ui/breadcrumb.js +1 -1
  147. package/dist/components/ui/button-group.d.ts +68 -0
  148. package/dist/components/ui/button-group.d.ts.map +1 -0
  149. package/dist/components/ui/button-group.js +54 -0
  150. package/dist/components/ui/button.js +1 -1
  151. package/dist/components/ui/calendar.d.ts +158 -0
  152. package/dist/components/ui/calendar.d.ts.map +1 -0
  153. package/dist/components/ui/calendar.js +216 -0
  154. package/dist/components/ui/card.d.ts +18 -6
  155. package/dist/components/ui/card.d.ts.map +1 -1
  156. package/dist/components/ui/card.js +23 -8
  157. package/dist/components/ui/carousel.d.ts +118 -0
  158. package/dist/components/ui/carousel.d.ts.map +1 -0
  159. package/dist/components/ui/carousel.js +152 -0
  160. package/dist/components/ui/chart-frame.d.ts +216 -0
  161. package/dist/components/ui/chart-frame.d.ts.map +1 -0
  162. package/dist/components/ui/chart-frame.js +286 -0
  163. package/dist/components/ui/checkbox.js +1 -1
  164. package/dist/components/ui/collapsible.d.ts +97 -0
  165. package/dist/components/ui/collapsible.d.ts.map +1 -0
  166. package/dist/components/ui/collapsible.js +54 -0
  167. package/dist/components/ui/combobox.d.ts +141 -0
  168. package/dist/components/ui/combobox.d.ts.map +1 -0
  169. package/dist/components/ui/combobox.js +243 -0
  170. package/dist/components/ui/command-palette.d.ts +106 -0
  171. package/dist/components/ui/command-palette.d.ts.map +1 -0
  172. package/dist/components/ui/command-palette.js +176 -0
  173. package/dist/components/ui/command.d.ts +82 -0
  174. package/dist/components/ui/command.d.ts.map +1 -0
  175. package/dist/components/ui/command.js +37 -0
  176. package/dist/components/ui/context-menu.d.ts +151 -0
  177. package/dist/components/ui/context-menu.d.ts.map +1 -0
  178. package/dist/components/ui/context-menu.js +97 -0
  179. package/dist/components/ui/cta-link.js +1 -1
  180. package/dist/components/ui/date-picker.d.ts +111 -0
  181. package/dist/components/ui/date-picker.d.ts.map +1 -0
  182. package/dist/components/ui/date-picker.js +74 -0
  183. package/dist/components/ui/diagram.d.ts +84 -15
  184. package/dist/components/ui/diagram.d.ts.map +1 -1
  185. package/dist/components/ui/diagram.js +77 -7
  186. package/dist/components/ui/dialog.js +1 -1
  187. package/dist/components/ui/diff.d.ts +105 -0
  188. package/dist/components/ui/diff.d.ts.map +1 -0
  189. package/dist/components/ui/diff.js +113 -0
  190. package/dist/components/ui/dropdown-menu.d.ts +18 -0
  191. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  192. package/dist/components/ui/dropdown-menu.js +1 -1
  193. package/dist/components/ui/fact-list.js +1 -1
  194. package/dist/components/ui/field.js +1 -1
  195. package/dist/components/ui/form.d.ts +151 -0
  196. package/dist/components/ui/form.d.ts.map +1 -0
  197. package/dist/components/ui/form.js +73 -0
  198. package/dist/components/ui/hover-card.d.ts +105 -0
  199. package/dist/components/ui/hover-card.d.ts.map +1 -0
  200. package/dist/components/ui/hover-card.js +49 -0
  201. package/dist/components/ui/input-group.d.ts +99 -0
  202. package/dist/components/ui/input-group.d.ts.map +1 -0
  203. package/dist/components/ui/input-group.js +83 -0
  204. package/dist/components/ui/input.js +1 -1
  205. package/dist/components/ui/item.d.ts +113 -0
  206. package/dist/components/ui/item.d.ts.map +1 -0
  207. package/dist/components/ui/item.js +61 -0
  208. package/dist/components/ui/kbd.js +1 -1
  209. package/dist/components/ui/label.d.ts +58 -0
  210. package/dist/components/ui/label.d.ts.map +1 -0
  211. package/dist/components/ui/label.js +29 -0
  212. package/dist/components/ui/live-region.d.ts +9 -0
  213. package/dist/components/ui/live-region.d.ts.map +1 -1
  214. package/dist/components/ui/live-region.js +10 -2
  215. package/dist/components/ui/mark.js +1 -1
  216. package/dist/components/ui/menubar.d.ts +197 -0
  217. package/dist/components/ui/menubar.d.ts.map +1 -0
  218. package/dist/components/ui/menubar.js +109 -0
  219. package/dist/components/ui/meter.d.ts +121 -0
  220. package/dist/components/ui/meter.d.ts.map +1 -0
  221. package/dist/components/ui/meter.js +82 -0
  222. package/dist/components/ui/native-select.d.ts +72 -0
  223. package/dist/components/ui/native-select.d.ts.map +1 -0
  224. package/dist/components/ui/native-select.js +55 -0
  225. package/dist/components/ui/navigation-menu.d.ts +186 -0
  226. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  227. package/dist/components/ui/navigation-menu.js +94 -0
  228. package/dist/components/ui/number-field.d.ts +111 -0
  229. package/dist/components/ui/number-field.d.ts.map +1 -0
  230. package/dist/components/ui/number-field.js +84 -0
  231. package/dist/components/ui/one-time-code.d.ts +127 -0
  232. package/dist/components/ui/one-time-code.d.ts.map +1 -0
  233. package/dist/components/ui/one-time-code.js +57 -0
  234. package/dist/components/ui/pagination.js +1 -1
  235. package/dist/components/ui/popover.js +1 -1
  236. package/dist/components/ui/product-mark.d.ts +1 -1
  237. package/dist/components/ui/product-mark.js +1 -1
  238. package/dist/components/ui/product-switcher.d.ts +1 -1
  239. package/dist/components/ui/product-switcher.js +2 -2
  240. package/dist/components/ui/progress.js +1 -1
  241. package/dist/components/ui/prose.js +1 -1
  242. package/dist/components/ui/pulse-graph.js +1 -1
  243. package/dist/components/ui/pulse-series.js +1 -1
  244. package/dist/components/ui/radio-group.js +1 -1
  245. package/dist/components/ui/resizable.d.ts +129 -0
  246. package/dist/components/ui/resizable.d.ts.map +1 -0
  247. package/dist/components/ui/resizable.js +205 -0
  248. package/dist/components/ui/scroll-area.d.ts +97 -0
  249. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  250. package/dist/components/ui/scroll-area.js +68 -0
  251. package/dist/components/ui/search-dialog.d.ts +139 -0
  252. package/dist/components/ui/search-dialog.d.ts.map +1 -0
  253. package/dist/components/ui/search-dialog.js +178 -0
  254. package/dist/components/ui/section.d.ts +26 -0
  255. package/dist/components/ui/section.d.ts.map +1 -1
  256. package/dist/components/ui/section.js +32 -1
  257. package/dist/components/ui/select.js +1 -1
  258. package/dist/components/ui/separator.js +1 -1
  259. package/dist/components/ui/sheet.d.ts +103 -0
  260. package/dist/components/ui/sheet.d.ts.map +1 -0
  261. package/dist/components/ui/sheet.js +58 -0
  262. package/dist/components/ui/sidebar.d.ts +228 -0
  263. package/dist/components/ui/sidebar.d.ts.map +1 -0
  264. package/dist/components/ui/sidebar.js +172 -0
  265. package/dist/components/ui/signal-field.js +1 -1
  266. package/dist/components/ui/skeleton.js +1 -1
  267. package/dist/components/ui/slider.js +1 -1
  268. package/dist/components/ui/spinner.d.ts +79 -0
  269. package/dist/components/ui/spinner.d.ts.map +1 -0
  270. package/dist/components/ui/spinner.js +79 -0
  271. package/dist/components/ui/switch.js +1 -1
  272. package/dist/components/ui/table-sort.d.ts +97 -0
  273. package/dist/components/ui/table-sort.d.ts.map +1 -0
  274. package/dist/components/ui/table-sort.js +102 -0
  275. package/dist/components/ui/table.js +1 -1
  276. package/dist/components/ui/tabs.js +1 -1
  277. package/dist/components/ui/textarea.js +1 -1
  278. package/dist/components/ui/timeline.d.ts +106 -0
  279. package/dist/components/ui/timeline.d.ts.map +1 -0
  280. package/dist/components/ui/timeline.js +111 -0
  281. package/dist/components/ui/toast.d.ts +219 -0
  282. package/dist/components/ui/toast.d.ts.map +1 -0
  283. package/dist/components/ui/toast.js +270 -0
  284. package/dist/components/ui/toggle-group.d.ts +118 -0
  285. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  286. package/dist/components/ui/toggle-group.js +194 -0
  287. package/dist/components/ui/toggle.d.ts +73 -0
  288. package/dist/components/ui/toggle.d.ts.map +1 -0
  289. package/dist/components/ui/toggle.js +44 -0
  290. package/dist/components/ui/tooltip.js +1 -1
  291. package/dist/components/ui/tree.js +1 -1
  292. package/dist/components/ui/typography.js +1 -1
  293. package/dist/fonts/Inter-OFL.txt +93 -93
  294. package/dist/index.d.ts +72 -70
  295. package/dist/index.d.ts.map +1 -1
  296. package/dist/index.js +61 -60
  297. package/dist/lib/rank.d.ts +69 -0
  298. package/dist/lib/rank.d.ts.map +1 -0
  299. package/dist/lib/rank.js +77 -0
  300. package/dist/live/index.d.ts +22 -0
  301. package/dist/live/index.d.ts.map +1 -0
  302. package/dist/live/index.js +20 -0
  303. package/dist/live/run-stream-01/index.d.ts +3 -0
  304. package/dist/live/run-stream-01/index.d.ts.map +1 -0
  305. package/dist/live/run-stream-01/index.js +1 -0
  306. package/dist/live/run-stream-01/run-stream.d.ts +125 -0
  307. package/dist/live/run-stream-01/run-stream.d.ts.map +1 -0
  308. package/dist/live/run-stream-01/run-stream.js +111 -0
  309. package/dist/pages/auth-page/index.d.ts +15 -2
  310. package/dist/pages/auth-page/index.d.ts.map +1 -1
  311. package/dist/pages/auth-page/index.js +8 -4
  312. package/dist/pages/blog-post-page/index.js +5 -5
  313. package/dist/pages/dashboard-page/index.d.ts +4 -4
  314. package/dist/pages/dashboard-page/index.js +4 -4
  315. package/dist/pages/docs-shell/docs-shell.d.ts +37 -4
  316. package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
  317. package/dist/pages/docs-shell/docs-shell.js +107 -16
  318. package/dist/pages/docs-shell/index.d.ts +2 -2
  319. package/dist/pages/docs-shell/index.js +1 -1
  320. package/dist/pages/index.d.ts +14 -14
  321. package/dist/pages/index.js +7 -7
  322. package/dist/pages/marketing-page/index.d.ts +6 -6
  323. package/dist/pages/marketing-page/index.js +5 -5
  324. package/dist/pages/not-found-page/index.js +4 -4
  325. package/dist/pages/settings-page/index.d.ts +3 -3
  326. package/dist/pages/settings-page/index.js +4 -4
  327. package/dist/provider/index.d.ts +4 -4
  328. package/dist/provider/index.js +2 -2
  329. package/dist/provider/provider.d.ts +1 -1
  330. package/dist/provider/provider.js +1 -1
  331. package/dist/provider/theme-script.d.ts +1 -1
  332. package/dist/provider/theme-script.js +1 -1
  333. package/dist/styles.css +689 -0
  334. package/package.json +9 -1
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Section, SectionHeading } from '../../components/ui/section.js';
3
+ import { cn } from '../../lib/utils.js';
4
+ /**
5
+ * The grid tracks each column count gets.
6
+ *
7
+ * Spelled out per length, so a flow has exactly as many tracks as it declared and
8
+ * not one empty at the end of a row. The `sm:` step is a narrowing rather than a
9
+ * widening: on a narrow screen a flow becomes one column per line, because a
10
+ * three-up row of stage names at phone width is three columns of two words each.
11
+ */
12
+ const TRACKS = {
13
+ 2: 'sm:grid-cols-2',
14
+ 3: 'sm:grid-cols-2 lg:grid-cols-3',
15
+ 4: 'sm:grid-cols-2 lg:grid-cols-4',
16
+ };
17
+ /**
18
+ * A pipeline drawn as a flow: the stages in order, wrapping across lines.
19
+ *
20
+ * **The rail's refusal of a fifth stage is left standing.** `ProcessRail01` holds
21
+ * two, three or four stages and a five-element array is a compile error, and that is
22
+ * the same decision this Block is built beside rather than against: a rail is a
23
+ * claim about a sequence on one line, and a rail that quietly dropped a stage to fit
24
+ * a width would be a diagram of a process that is not the process. A company site
25
+ * states six stages, and it was drawing them as a grid of short points, where the
26
+ * six ordinals and the terminal label were lost and a sequence read as a set. That
27
+ * gap is a gap in the roster, and the honest repair is a second shape rather than a
28
+ * wider tuple: raising the rail's ceiling to six would make the fourth column
29
+ * unrepresentable as a type error, which is the property that made the original
30
+ * decision good.
31
+ *
32
+ * **It is one `<ol>`, and that is the part the layout is built around.** A flow that
33
+ * wrapped into a row per group would be several lists, and a screen reader would
34
+ * announce it as three lists of two, which is precisely the set-where-a-sequence-was
35
+ * that this Block exists to avoid. So the stages are one ordered list and the
36
+ * wrapping is done by the grid, which means the Block never gets to know where a
37
+ * line broke, and therefore cannot draw something that is only right on the widest
38
+ * screen.
39
+ *
40
+ * **The ordinal is the continuity mechanism, and it is treated as one.** It runs
41
+ * `01` through to the last stage with no restart, in the mono face, at a size a
42
+ * reader can scan down a column rather than read one at a time. That is what makes a
43
+ * wrapped flow legible: a reader who lands on stage four sees `04` and knows it
44
+ * continues stage three, whatever the column count happens to be at the width they
45
+ * are using. Nothing else in this Block is load-bearing for the sequence, and
46
+ * anything that needed to know where the line broke would be.
47
+ *
48
+ * **The thread is a line through the stages, not a box around each one.** Each
49
+ * stage draws a top border and the grid separates them by a single pixel, so a run
50
+ * of stages on one line reads as one line broken by hairline gaps, and the gap
51
+ * between two lines is wider. That is the same technique the rail uses, and it is
52
+ * chosen here for a specific reason: it holds at any column count, including the
53
+ * one-column layout a phone gets, without the Block knowing anything about it. A
54
+ * connector drawn between a stage and its successor would need the column count to
55
+ * be right, and would be wrong at every width the type does not describe.
56
+ *
57
+ * A caption of more than about twelve words wraps under a stage and the line stops
58
+ * reading as a line, so the caption is a line and the detail belongs above the flow
59
+ * in `description`.
60
+ *
61
+ * It is a server Component: no hook, no state and no client code.
62
+ */
63
+ export function ProcessFlow01({ eyebrow, title, description, finalLabel, stages, columns = 3, headingLevel = 'h2', className, }) {
64
+ if (stages.length < 2) {
65
+ throw new Error('ProcessFlow01: a flow of fewer than two stages is a label, not a sequence, and ' +
66
+ 'the Block would be drawing a line through nothing. ComposeProcessRail01 for a ' +
67
+ 'two-stage rail, or pass the stages the pipeline actually has.');
68
+ }
69
+ return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ol", { "data-slot": "process-flow", className: cn('grid gap-y-8 sm:gap-x-px sm:gap-y-10', TRACKS[columns], className), children: stages.map((stage, index) => (_jsxs("li", { "data-slot": "process-stage", "data-ordinal": String(index + 1).padStart(2, '0'), className: "border-border flex flex-col gap-2 border-t pt-4", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("span", { className: "text-muted-foreground font-mono text-xs tabular-nums", children: String(index + 1).padStart(2, '0') }), finalLabel && index === stages.length - 1 ? (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: finalLabel })) : null] }), _jsx("span", { className: "text-sm font-semibold", children: stage.name }), _jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: stage.description })] }, stage.name))) })] }));
70
+ }
71
+ export default ProcessFlow01;
@@ -1,3 +1,3 @@
1
- export { ProcessRail01, default } from './process-rail';
2
- export type { ProcessRail01Props, ProcessRail01Steps, ProcessStep } from './process-rail';
1
+ export { ProcessRail01, default } from './process-rail.js';
2
+ export type { ProcessRail01Props, ProcessRail01Steps, ProcessStep } from './process-rail.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { ProcessRail01, default } from './process-rail';
1
+ export { ProcessRail01, default } from './process-rail.js';
@@ -1,4 +1,4 @@
1
- import { type HeadingLevel } from '../../components/ui/section';
1
+ import { type HeadingLevel } from '../../components/ui/section.js';
2
2
  /**
3
3
  * One step of a process, as the rail draws it.
4
4
  *
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Section, SectionHeading } from '../../components/ui/section';
3
- import { cn } from '../../lib/utils';
2
+ import { Section, SectionHeading } from '../../components/ui/section.js';
3
+ import { cn } from '../../lib/utils.js';
4
4
  /**
5
5
  * The grid tracks each admissible length gets, keyed on the tuple's own length.
6
6
  *
@@ -1,3 +1,3 @@
1
- export { ProductGrid01, default } from './product-grid';
2
- export type { ProductGrid01Props, ProductGrid01Product } from './product-grid';
1
+ export { ProductGrid01, default } from './product-grid.js';
2
+ export type { ProductGrid01Props, ProductGrid01Product } from './product-grid.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { ProductGrid01, default } from './product-grid';
1
+ export { ProductGrid01, default } from './product-grid.js';
@@ -1,5 +1,5 @@
1
- import { type ProductMarkProps } from '../../components/ui/product-mark';
2
- import { type HeadingLevel } from '../../components/ui/section';
1
+ import { type ProductMarkProps } from '../../components/ui/product-mark.js';
2
+ import { type HeadingLevel } from '../../components/ui/section.js';
3
3
  /**
4
4
  * One product in the grid, as the row draws it.
5
5
  *
@@ -27,6 +27,24 @@ export type ProductGrid01Product = {
27
27
  pack?: ProductMarkProps['pack'];
28
28
  /** One line about what the product is. */
29
29
  tagline: string;
30
+ /**
31
+ * A second line, about **this product** rather than about the set.
32
+ *
33
+ * `tagline` and this are different claims and only one of them belongs on the
34
+ * row. A tagline is the shortest true thing about a member, and it reads the
35
+ * same in every row of a set. This is a sentence that is true of *this* product
36
+ * and would be false or vacuous beside its neighbours, which is the test for
37
+ * whether it belongs here. The company site's five products each carried one
38
+ * ("Autonomous software creation, supervised by you."), and folding them into the
39
+ * tagline would have been a copy edit rather than a fix, so they were dropped and
40
+ * reported instead.
41
+ *
42
+ * Rendered only when passed, so a row without one draws exactly what it drew
43
+ * before the field existed. See `ProductGrid01`'s JSDoc for which of the two
44
+ * levels a sentence belongs at, because the answer is a fact about the sentence
45
+ * and not a preference.
46
+ */
47
+ detail?: string;
30
48
  /**
31
49
  * Where the row goes. Rendered as a native anchor's `href`, so the row is a
32
50
  * link with the browser's own affordances rather than a click handler.
@@ -101,9 +119,23 @@ export type ProductGrid01Props = {
101
119
  * it, and middle-click opens it in a new tab. The mark is `aria-hidden` inside
102
120
  * it, so the link is announced once, by name, rather than as a shape and a word.
103
121
  *
104
- * A row carries one line of tagline. A second line is a second paragraph and
105
- * belongs above the grid in `description`, where it applies to the set rather
106
- * than to one member of it.
122
+ * **Which level a sentence belongs at is a fact about the sentence, and this
123
+ * settles it.** There are two levels and both are right, for different claims:
124
+ *
125
+ * - `description` is about **the set**. "Five products, one platform." or "Every
126
+ * one of these runs on the same runtime." A sentence that would be equally true
127
+ * if you deleted any one row belongs here, and nowhere else.
128
+ * - `Product.detail` is about **this member**. "Quantitative trading research for
129
+ * the Indian market, the factory's newest build." A sentence that is false, or
130
+ * vacuous, beside its neighbours belongs on the row.
131
+ *
132
+ * The test is whether the sentence survives its neighbours. A tagline reads the
133
+ * same in every row, so it is a tagline; the company site's five products each
134
+ * carried a sentence true of one and not of the four beside it, and the earlier
135
+ * version of this note told a caller to fold those into `description`, where they
136
+ * would have claimed to be about all five at once. That advice lost three
137
+ * published sentences in a migration rather than stating the choice, so both levels
138
+ * exist and the question above is the one to ask.
107
139
  *
108
140
  * It is a server Component: no hook, no state, no client code and no mode. The
109
141
  * mark resolves its colour through the cascade, so a page that renders this in a
@@ -1 +1 @@
1
- {"version":3,"file":"product-grid.d.ts","sourceRoot":"","sources":["../../../src/blocks/product-grid-01/product-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,YAAmB,GACpB,EAAE,kBAAkB,sCAqCpB;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"product-grid.d.ts","sourceRoot":"","sources":["../../../src/blocks/product-grid-01/product-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,YAAmB,GACpB,EAAE,kBAAkB,sCA8CpB;AAED,eAAe,aAAa,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ProductMark } from '../../components/ui/product-mark';
3
- import { Section, SectionHeading } from '../../components/ui/section';
2
+ import { ProductMark } from '../../components/ui/product-mark.js';
3
+ import { Section, SectionHeading } from '../../components/ui/section.js';
4
4
  /**
5
5
  * A set of products as a stack of hairline rows: a two-part mark, a name, one
6
6
  * tagline and a destination per row.
@@ -35,9 +35,23 @@ import { Section, SectionHeading } from '../../components/ui/section';
35
35
  * it, and middle-click opens it in a new tab. The mark is `aria-hidden` inside
36
36
  * it, so the link is announced once, by name, rather than as a shape and a word.
37
37
  *
38
- * A row carries one line of tagline. A second line is a second paragraph and
39
- * belongs above the grid in `description`, where it applies to the set rather
40
- * than to one member of it.
38
+ * **Which level a sentence belongs at is a fact about the sentence, and this
39
+ * settles it.** There are two levels and both are right, for different claims:
40
+ *
41
+ * - `description` is about **the set**. "Five products, one platform." or "Every
42
+ * one of these runs on the same runtime." A sentence that would be equally true
43
+ * if you deleted any one row belongs here, and nowhere else.
44
+ * - `Product.detail` is about **this member**. "Quantitative trading research for
45
+ * the Indian market, the factory's newest build." A sentence that is false, or
46
+ * vacuous, beside its neighbours belongs on the row.
47
+ *
48
+ * The test is whether the sentence survives its neighbours. A tagline reads the
49
+ * same in every row, so it is a tagline; the company site's five products each
50
+ * carried a sentence true of one and not of the four beside it, and the earlier
51
+ * version of this note told a caller to fold those into `description`, where they
52
+ * would have claimed to be about all five at once. That advice lost three
53
+ * published sentences in a migration rather than stating the choice, so both levels
54
+ * exist and the question above is the one to ask.
41
55
  *
42
56
  * It is a server Component: no hook, no state, no client code and no mode. The
43
57
  * mark resolves its colour through the cascade, so a page that renders this in a
@@ -46,6 +60,6 @@ import { Section, SectionHeading } from '../../components/ui/section';
46
60
  export function ProductGrid01({ eyebrow, title, description, products, caption, headingLevel = 'h2', }) {
47
61
  if (products.length === 0)
48
62
  return null;
49
- return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ul", { "data-slot": "product-grid", className: "flex flex-col", children: products.map((product) => (_jsx("li", { "data-slot": "product-grid-row", className: "border-b first:border-t", children: _jsxs("a", { href: product.href, rel: product.newTab ? 'noopener noreferrer' : undefined, target: product.newTab ? '_blank' : undefined, className: "hover:bg-accent/50 focus-visible:ring-ring flex flex-col gap-1 px-2 py-4 transition-colors duration-fast ease-out sm:flex-row sm:items-baseline sm:gap-6 focus-visible:ring-[3px] focus-visible:outline-none", children: [_jsx("span", { className: "flex shrink-0 items-center sm:w-64", children: _jsx(ProductMark, { id: product.id, name: product.name, pack: product.pack, size: "md" }) }), _jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: product.tagline })] }) }, product.id))) }), caption ? _jsx("p", { className: "text-muted-foreground mt-6 text-pretty text-sm", children: caption }) : null] }));
63
+ return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ul", { "data-slot": "product-grid", className: "flex flex-col", children: products.map((product) => (_jsx("li", { "data-slot": "product-grid-row", className: "border-b first:border-t", children: _jsxs("a", { href: product.href, rel: product.newTab ? 'noopener noreferrer' : undefined, target: product.newTab ? '_blank' : undefined, className: "hover:bg-accent/50 focus-visible:ring-ring flex flex-col gap-1 px-2 py-4 transition-colors duration-fast ease-out sm:flex-row sm:items-baseline sm:gap-6 focus-visible:ring-[3px] focus-visible:outline-none", children: [_jsx("span", { className: "flex shrink-0 items-center sm:w-64", children: _jsx(ProductMark, { id: product.id, name: product.name, pack: product.pack, size: "md" }) }), _jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: product.tagline }), product.detail ? (_jsx("span", { className: "text-pretty text-sm", children: product.detail })) : null] })] }) }, product.id))) }), caption ? _jsx("p", { className: "text-muted-foreground mt-6 text-pretty text-sm", children: caption }) : null] }));
50
64
  }
51
65
  export default ProductGrid01;
@@ -0,0 +1,3 @@
1
+ export { RunConsole01, default } from './run-console.js';
2
+ export type { RunConsole01Props, RunConsole01Copy } from './run-console.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/run-console-01/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1 @@
1
+ export { RunConsole01, default } from './run-console.js';
@@ -0,0 +1,111 @@
1
+ import { type TimelineEntry } from '../../components/ui/timeline.js';
2
+ /**
3
+ * The words the Block does not have.
4
+ *
5
+ * A Block that assembled a run console out of a budget, a run's name and a list of
6
+ * steps would have to ship English for every one of them, and every consumer would
7
+ * inherit it. So all of it arrives here: the names of the two regions, the words
8
+ * beside the budget reading, the empty state, and the word for the whole surface.
9
+ * The structure is this package's; the language is the caller's.
10
+ */
11
+ export type RunConsole01Copy = {
12
+ /** Names the budget region, read before its reading. */
13
+ budgetLabel: string;
14
+ /** The words for the budget's value, given the number and its maximum. */
15
+ budgetValue: (value: number, max: number) => string;
16
+ /** Names the region the steps are in, read before them. */
17
+ stepsLabel: string;
18
+ /** The heading over the whole surface. */
19
+ title: string;
20
+ /** What a reader is told while the run has produced nothing yet. */
21
+ waiting: string;
22
+ };
23
+ /** The props the Run console accepts. */
24
+ export interface RunConsole01Props {
25
+ /**
26
+ * What this run is.
27
+ *
28
+ * The caller's words, and the only thing on the surface that says which run is
29
+ * being looked at. A console showing three runs at once is a table, not a
30
+ * console.
31
+ */
32
+ title: string;
33
+ /** The words this Block does not have. */
34
+ copy: RunConsole01Copy;
35
+ /** The run's events, in the order they happened. */
36
+ steps: readonly TimelineEntry[];
37
+ /**
38
+ * How much of the budget this run has spent, and the budget itself.
39
+ *
40
+ * Optional, because a run with no budget is ordinary: a local run, a test, a
41
+ * command. A Block that drew an empty budget meter for those would be showing a
42
+ * measurement of nothing, which is the thing a Meter exists to avoid.
43
+ */
44
+ budget?: {
45
+ /** What has been spent. */
46
+ value: number;
47
+ /** The ceiling. */
48
+ max: number;
49
+ /** The values the run should be able to see at a glance, if it has any. */
50
+ thresholds?: readonly {
51
+ at: number;
52
+ tone: 'neutral' | 'success' | 'warning' | 'destructive';
53
+ }[];
54
+ };
55
+ /**
56
+ * The line under the heading, usually where the run came from.
57
+ *
58
+ * Optional rather than defaulted, because a Block that invented one would be
59
+ * inventing a fact about the run.
60
+ */
61
+ detail?: string;
62
+ /**
63
+ * Whether the run is still producing events.
64
+ *
65
+ * This is the prop that makes the surface a live one rather than a picture of
66
+ * one, and it does exactly two things: it marks the budget region busy while
67
+ * events are still arriving, and it puts the steps inside a LiveRegion so an
68
+ * append is announced. Both are the caller's decision to make because only the
69
+ * caller knows whether the transport has finished.
70
+ */
71
+ streaming?: boolean;
72
+ /** Layout only. */
73
+ className?: string;
74
+ }
75
+ /**
76
+ * A run, as a heading, a budget and the steps that got there.
77
+ *
78
+ * This is the surface the fourth Kind exists for, and the reason it is a Block
79
+ * rather than a Component is worth stating: a run console is not one thing. It is
80
+ * a measurement beside a sequence beside a stream, and a reader needs all three in
81
+ * the same glance to answer the only question they have, which is whether the run
82
+ * is going to finish and what it is costing. Separating them across three
83
+ * components and asking a consumer to assemble that is the assembly this system
84
+ * exists to remove.
85
+ *
86
+ * **The budget is a Meter and the steps are a Timeline, and neither is
87
+ * reimplemented here.** That is the whole discipline. The budget draws the limits
88
+ * the caller gave it and stays neutral below all of them, because the Component
89
+ * cannot see that a number is a problem. The steps draw their durations to scale
90
+ * against the slowest one, so "where did the time go" is answerable by looking.
91
+ * What this Block contributes is the arrangement and the two facts that belong to
92
+ * neither: that the two belong in one frame, and that a run with no budget should
93
+ * not be given an empty one.
94
+ *
95
+ * **Streaming is one prop doing two things, and both of them are about the same
96
+ * decision.** It marks the region busy, because a caller that has stopped sending
97
+ * events has told assistive technology a stream never ends if it leaves the flag
98
+ * up. And it wraps the steps in a LiveRegion, so an append is announced. Neither
99
+ * is done by default: a run that has finished should not announce anything, and a
100
+ * Block cannot know which kind of run it is looking at. The prop is the caller's
101
+ * knowledge expressed once, and it is the reason the steps and the budget both
102
+ * know about the run rather than each knowing about themselves.
103
+ *
104
+ * **The empty state is the run's first moments, so it is authored.** A console
105
+ * with nothing in it is what a reader sees for the first second of every run, and
106
+ * a blank frame in that moment reads as a broken surface rather than as a run that
107
+ * has not started.
108
+ */
109
+ export declare function RunConsole01({ title, copy, steps, budget, detail, streaming, className, }: RunConsole01Props): import("react").JSX.Element;
110
+ export default RunConsole01;
111
+ //# sourceMappingURL=run-console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-console.d.ts","sourceRoot":"","sources":["../../../src/blocks/run-console-01/run-console.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAG3E;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnD,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAA;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,IAAI,EAAE,gBAAgB,CAAA;IACtB,oDAAoD;IACpD,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QACP,2BAA2B;QAC3B,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,2EAA2E;QAC3E,UAAU,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;SAAE,EAAE,CAAA;KAChG,CAAA;IACD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAiB,EACjB,SAAS,GACV,EAAE,iBAAiB,+BAgFnB;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LiveRegion } from '../../components/ui/live-region.js';
3
+ import { Meter } from '../../components/ui/meter.js';
4
+ import { Timeline } from '../../components/ui/timeline.js';
5
+ import { cn } from '../../lib/utils.js';
6
+ /**
7
+ * A run, as a heading, a budget and the steps that got there.
8
+ *
9
+ * This is the surface the fourth Kind exists for, and the reason it is a Block
10
+ * rather than a Component is worth stating: a run console is not one thing. It is
11
+ * a measurement beside a sequence beside a stream, and a reader needs all three in
12
+ * the same glance to answer the only question they have, which is whether the run
13
+ * is going to finish and what it is costing. Separating them across three
14
+ * components and asking a consumer to assemble that is the assembly this system
15
+ * exists to remove.
16
+ *
17
+ * **The budget is a Meter and the steps are a Timeline, and neither is
18
+ * reimplemented here.** That is the whole discipline. The budget draws the limits
19
+ * the caller gave it and stays neutral below all of them, because the Component
20
+ * cannot see that a number is a problem. The steps draw their durations to scale
21
+ * against the slowest one, so "where did the time go" is answerable by looking.
22
+ * What this Block contributes is the arrangement and the two facts that belong to
23
+ * neither: that the two belong in one frame, and that a run with no budget should
24
+ * not be given an empty one.
25
+ *
26
+ * **Streaming is one prop doing two things, and both of them are about the same
27
+ * decision.** It marks the region busy, because a caller that has stopped sending
28
+ * events has told assistive technology a stream never ends if it leaves the flag
29
+ * up. And it wraps the steps in a LiveRegion, so an append is announced. Neither
30
+ * is done by default: a run that has finished should not announce anything, and a
31
+ * Block cannot know which kind of run it is looking at. The prop is the caller's
32
+ * knowledge expressed once, and it is the reason the steps and the budget both
33
+ * know about the run rather than each knowing about themselves.
34
+ *
35
+ * **The empty state is the run's first moments, so it is authored.** A console
36
+ * with nothing in it is what a reader sees for the first second of every run, and
37
+ * a blank frame in that moment reads as a broken surface rather than as a run that
38
+ * has not started.
39
+ */
40
+ export function RunConsole01({ title, copy, steps, budget, detail, streaming = false, className, }) {
41
+ const waiting = steps.length === 0;
42
+ // Built once and placed in one of two places, so the streaming and the finished
43
+ // rendering cannot drift apart. Two copies of this markup would be two answers
44
+ // to what a run looks like, and the second one is the one that goes stale.
45
+ const body = waiting ? (_jsx("p", { "data-slot": "run-console-01-waiting", className: "text-muted-foreground text-sm", children: copy.waiting })) : (_jsx(Timeline, { entries: steps, label: copy.stepsLabel, empty: copy.waiting }));
46
+ return (_jsxs("div", { "data-slot": "run-console-01", className: cn('border-border bg-card flex flex-col gap-6 rounded-lg border p-5', className), children: [_jsxs("header", { "data-slot": "run-console-01-header", className: "flex flex-col gap-1", children: [_jsx("h2", { className: "text-foreground text-base font-semibold tracking-tight", children: title }), detail === undefined ? null : (_jsx("p", { className: "text-muted-foreground text-sm", children: detail }))] }), budget === undefined ? null : (_jsx("div", { "data-slot": "run-console-01-budget", children: _jsx(Meter, { value: budget.value, max: budget.max, label: copy.budgetLabel, valueText: copy.budgetValue(budget.value, budget.max), thresholds: budget.thresholds, children: _jsx("span", { children: copy.budgetValue(budget.value, budget.max) }) }) })), streaming ? (_jsx(LiveRegion, { busy: true, label: copy.stepsLabel, className: "min-w-0", children: body })) : (body)] }));
47
+ }
48
+ export default RunConsole01;
@@ -1,3 +1,3 @@
1
- export { SettingsPanel01, default } from './settings-panel';
2
- export type { SettingsPanel01Props, SettingsPanelField, SettingsPanelOption, SettingsPanelSection, } from './settings-panel';
1
+ export { SettingsPanel01, default } from './settings-panel.js';
2
+ export type { SettingsPanel01Props, SettingsPanelField, SettingsPanelOption, SettingsPanelSection, } from './settings-panel.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { SettingsPanel01, default } from './settings-panel';
1
+ export { SettingsPanel01, default } from './settings-panel.js';
@@ -1,4 +1,5 @@
1
1
  import { type FormEvent, type ReactNode } from 'react';
2
+ import { type HeadingLevel } from '../../components/ui/section.js';
2
3
  export type SettingsPanelOption = {
3
4
  label: string;
4
5
  value: string;
@@ -44,6 +45,15 @@ export type SettingsPanelSection = {
44
45
  };
45
46
  export type SettingsPanel01Props = {
46
47
  title: string;
48
+ /**
49
+ * Heading level for the card's title. See `HeadingLevel`.
50
+ *
51
+ * This Block draws no Section heading of its own, so the card title is the one
52
+ * heading it renders and takes the level directly rather than a step below one.
53
+ * The groups inside take their level from this one, so moving the panel in a
54
+ * document moves every heading in it together.
55
+ */
56
+ headingLevel?: HeadingLevel;
47
57
  description?: string;
48
58
  /** The settings groups, each rendered with a heading and its own fields. */
49
59
  sections: SettingsPanelSection[];
@@ -66,6 +76,6 @@ export type SettingsPanel01Props = {
66
76
  * block renders the card, the groups and the footer; it owns no values and no
67
77
  * copy, so a consumer wires it to whatever form state or mutation they use.
68
78
  */
69
- export declare function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, }: SettingsPanel01Props): import("react").JSX.Element;
79
+ export declare function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, headingLevel, }: SettingsPanel01Props): import("react").JSX.Element;
70
80
  export default SettingsPanel01;
71
81
  //# sourceMappingURL=settings-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/blocks/settings-panel-01/settings-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AA6BhE,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,KAAK,sBAAsB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAC1B,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC,CAAC,CAAA;AAEN,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACtD,2CAA2C;IAC3C,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACzD,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAyFD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,eAAe,EACf,MAAM,GACP,EAAE,oBAAoB,+BAmDtB;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/blocks/settings-panel-01/settings-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AA2BhE,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAG3E,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,KAAK,sBAAsB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAC1B,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC,CAAC,CAAA;AAEN,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACtD,2CAA2C;IAC3C,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACzD,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAyFD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,eAAe,EACf,MAAM,EACN,YAAmB,GACpB,EAAE,oBAAoB,+BAyDtB;AAED,eAAe,eAAe,CAAA"}
@@ -1,14 +1,15 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Fragment } from 'react';
4
- import { Button } from '../../components/ui/button';
5
- import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card';
6
- import { Field, FieldDescription, FieldGroup, FieldLabel, } from '../../components/ui/field';
7
- import { Input } from '../../components/ui/input';
8
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
9
- import { Separator } from '../../components/ui/separator';
10
- import { Switch } from '../../components/ui/switch';
11
- import { Textarea } from '../../components/ui/textarea';
4
+ import { Button } from '../../components/ui/button.js';
5
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card.js';
6
+ import { Field, FieldDescription, FieldGroup, FieldLabel, } from '../../components/ui/field.js';
7
+ import { Input } from '../../components/ui/input.js';
8
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select.js';
9
+ import { Separator } from '../../components/ui/separator.js';
10
+ import { Switch } from '../../components/ui/switch.js';
11
+ import { childLevel } from '../../components/ui/section.js';
12
+ import { Textarea } from '../../components/ui/textarea.js';
12
13
  function SettingsField({ field }) {
13
14
  if (field.kind === 'switch') {
14
15
  return (_jsxs(Field, { className: "flex-row items-center justify-between gap-4", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(FieldLabel, { htmlFor: field.id, children: field.label }), field.description ? (_jsx(FieldDescription, { children: field.description })) : null] }), _jsx(Switch, { id: field.id, checked: field.checked, defaultChecked: field.defaultChecked, onCheckedChange: field.onCheckedChange, disabled: field.disabled })] }));
@@ -31,8 +32,12 @@ function SettingsField({ field }) {
31
32
  * block renders the card, the groups and the footer; it owns no values and no
32
33
  * copy, so a consumer wires it to whatever form state or mutation they use.
33
34
  */
34
- export function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, }) {
35
+ export function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, headingLevel = 'h2', }) {
36
+ // The panel title is the one heading the panel renders, and a group inside it is
37
+ // one step below, so the whole outline moves together when the panel does.
38
+ const Title = headingLevel;
39
+ const GroupTitle = childLevel(headingLevel);
35
40
  const hasFooter = Boolean(submitLabel || secondaryAction || footer);
36
- return (_jsx("form", { onSubmit: onSubmit, className: "w-full", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: title }), description ? _jsx(CardDescription, { children: description }) : null] }), _jsx(CardContent, { className: "flex flex-col", children: sections.map((section, index) => (_jsxs(Fragment, { children: [index > 0 ? _jsx(Separator, { className: "my-6" }) : null, _jsxs("section", { className: "flex flex-col gap-4", "aria-labelledby": `${section.id}-heading`, children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h3", { id: `${section.id}-heading`, className: "text-lg font-semibold tracking-tight", children: section.title }), section.description ? (_jsx("p", { className: "text-muted-foreground text-sm", children: section.description })) : null] }), _jsx(FieldGroup, { children: section.fields.map((field) => (_jsx(SettingsField, { field: field }, field.id))) })] })] }, section.id))) }), hasFooter ? (_jsxs(CardFooter, { className: "justify-end gap-2", children: [footer, secondaryAction ? (_jsx(Button, { type: "button", variant: "outline", onClick: secondaryAction.onClick, children: secondaryAction.label })) : null, submitLabel ? _jsx(Button, { type: "submit", children: submitLabel }) : null] })) : null] }) }));
41
+ return (_jsx("form", { onSubmit: onSubmit, className: "w-full", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: _jsx(Title, { children: title }) }), description ? _jsx(CardDescription, { children: description }) : null] }), _jsx(CardContent, { className: "flex flex-col", children: sections.map((section, index) => (_jsxs(Fragment, { children: [index > 0 ? _jsx(Separator, { className: "my-6" }) : null, _jsxs("section", { className: "flex flex-col gap-4", "aria-labelledby": `${section.id}-heading`, children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(GroupTitle, { id: `${section.id}-heading`, className: "text-lg font-semibold tracking-tight", children: section.title }), section.description ? (_jsx("p", { className: "text-muted-foreground text-sm", children: section.description })) : null] }), _jsx(FieldGroup, { children: section.fields.map((field) => (_jsx(SettingsField, { field: field }, field.id))) })] })] }, section.id))) }), hasFooter ? (_jsxs(CardFooter, { className: "justify-end gap-2", children: [footer, secondaryAction ? (_jsx(Button, { type: "button", variant: "outline", onClick: secondaryAction.onClick, children: secondaryAction.label })) : null, submitLabel ? _jsx(Button, { type: "submit", children: submitLabel }) : null] })) : null] }) }));
37
42
  }
38
43
  export default SettingsPanel01;
@@ -1,3 +1,3 @@
1
- export { SiteFooter, default } from './site-footer';
2
- export type { SiteFooterProps, SiteFooterColumn, SiteFooterLink, SiteFooterSocial } from './site-footer';
1
+ export { SiteFooter, default } from './site-footer.js';
2
+ export type { SiteFooterProps, SiteFooterColumn, SiteFooterLink, SiteFooterSocial } from './site-footer.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { SiteFooter, default } from './site-footer';
1
+ export { SiteFooter, default } from './site-footer.js';
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- import { type ProductMarkProps } from '../../components/ui/product-mark';
2
+ import { type ProductMarkProps } from '../../components/ui/product-mark.js';
3
3
  /**
4
4
  * One destination in a footer column.
5
5
  *
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ProductMark } from '../../components/ui/product-mark';
3
- import { cn } from '../../lib/utils';
2
+ import { ProductMark } from '../../components/ui/product-mark.js';
3
+ import { cn } from '../../lib/utils.js';
4
4
  /**
5
5
  * The footer of a product site: a brand lockup, grouped destinations, the links
6
6
  * that leave the site, and an optional slot for the legal line.
@@ -1,3 +1,3 @@
1
- export { SiteHeader, default } from './site-header';
2
- export type { SiteHeaderProps, SiteHeaderLink } from './site-header';
1
+ export { SiteHeader, default } from './site-header.js';
2
+ export type { SiteHeaderProps, SiteHeaderLink } from './site-header.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { SiteHeader, default } from './site-header';
1
+ export { SiteHeader, default } from './site-header.js';
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from 'react';
2
- import { type SwitcherProduct } from '../../components/ui/product-switcher';
3
- import { type ProductMarkProps } from '../../components/ui/product-mark';
2
+ import { type SwitcherProduct } from '../../components/ui/product-switcher.js';
3
+ import { type ProductMarkProps } from '../../components/ui/product-mark.js';
4
4
  /**
5
5
  * One destination in the header's own navigation.
6
6
  *
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ProductSwitcher, } from '../../components/ui/product-switcher';
3
- import { ProductMark } from '../../components/ui/product-mark';
4
- import { cn } from '../../lib/utils';
2
+ import { ProductSwitcher, } from '../../components/ui/product-switcher.js';
3
+ import { ProductMark } from '../../components/ui/product-mark.js';
4
+ import { cn } from '../../lib/utils.js';
5
5
  /**
6
6
  * The header of a product site: a brand lockup, an optional product switcher, the
7
7
  * site's own navigation and an optional slot for application controls.
@@ -0,0 +1,3 @@
1
+ export { SiteNavbar, default } from './site-navbar.js';
2
+ export type { SiteNavbarProps, SiteNavLink, SiteNavSearch, SiteNavTheme, SiteNavMode, SiteNavMobileLabels, } from './site-navbar.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-navbar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACnD,YAAY,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,MAAM,eAAe,CAAA"}
@@ -0,0 +1 @@
1
+ export { SiteNavbar, default } from './site-navbar.js';