@nanisoft/prism-ui 0.10.1 → 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 +49 -17
  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
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Card, CardDescription, CardHeader, CardTitle } from '../../components/ui/card';
3
- import { Section, SectionHeading } from '../../components/ui/section';
2
+ import { Card, CardDescription, CardHeader, CardTitle } from '../../components/ui/card.js';
3
+ import { Section, SectionHeading, childLevel } from '../../components/ui/section.js';
4
4
  /**
5
5
  * A grid of short feature blurbs.
6
6
  *
@@ -11,14 +11,45 @@ import { Section, SectionHeading } from '../../components/ui/section';
11
11
  * The `icon` variant renders a tile per feature and requires an icon per feature.
12
12
  * The `bare` variant renders no tile and requires no icon, and the type says so
13
13
  * rather than the renderer finding out.
14
+ *
15
+ * **The section heading is aligned left, and that is this Block joining the other
16
+ * eight rather than inventing an answer.** `SectionHeading` states its own rule:
17
+ * `center` is right for a band that is only a heading, and `left` is right for a
18
+ * section with content under it, because a centred title above a left-aligned
19
+ * grid reads as two unrelated pieces. A grid of cards is content under its
20
+ * heading, so the rule says left. `NoteGrid01`, `StackGrid01`, `StatusLedger01`,
21
+ * `ProductGrid01`, `LogoStrip01`, `Stats01`, `ProcessRail01` and `ProcessFlow01`
22
+ * all pass `align="left"` for that reason, and this one did not, so it was one of
23
+ * only two Blocks in the package that centred a heading over content.
24
+ *
25
+ * The cost was not visible in this repository, which previews one Block at a time
26
+ * and so never put a centred title next to a left-aligned one. It was visible in
27
+ * the consumer: the Nexus landing is composed from seven of these Blocks and put
28
+ * two centred section titles among five left ones, and the page's own rhythm read
29
+ * as an accident rather than as a decision. A page's composition is the consumer's,
30
+ * but a Block that is the only one of its kind answering a shared question is not a
31
+ * composition the consumer can correct without restyling a catalogue item, which
32
+ * the no-override-path rule does not allow.
33
+ *
34
+ * `Hero01` is the deliberate exception and keeps its own `align`, and `Cta01` draws
35
+ * no section heading at all: a centred hero is a band that is only a heading, the
36
+ * two-column form puts its figure beside the copy rather than under it, and the
37
+ * closing band is a title and two actions on a filled panel with nothing underneath.
38
+ * `test/section-heading-align.test.tsx` holds the whole list, which is the
39
+ * assertion, so a Block that opens with a heading and content under it cannot be
40
+ * added answering this question a second way.
14
41
  */
15
42
  export function FeatureGrid01(props) {
16
43
  const { eyebrow, title, description, numbered = false, headingLevel = 'h2' } = props;
44
+ // A card title is a heading one step below the section that introduces the set,
45
+ // derived rather than written, so a Block embedded one level deeper carries its
46
+ // five headings with it instead of announcing five siblings of the section.
47
+ const Title = childLevel(headingLevel);
17
48
  // Read off `props` rather than destructured, so the two stay one value: taking
18
49
  // `variant` and `features` apart is what would let the arm the type checked
19
50
  // and the arm the renderer followed come to be two different ones.
20
51
  const variant = props.variant ?? 'icon';
21
52
  const { features } = props;
22
- return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("div", { className: "grid gap-6 sm:grid-cols-2", children: features.map((feature, index) => (_jsx(Card, { className: "gap-4 py-6", children: _jsxs(CardHeader, { children: [numbered ? (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: String(index + 1).padStart(2, '0') })) : null, variant === 'icon' && 'icon' in feature ? (_jsx("span", { className: "bg-accent text-accent-foreground mb-2 flex size-10 items-center justify-center rounded-lg", children: _jsx(feature.icon, { className: "size-5" }) })) : null, _jsx(CardTitle, { children: feature.title }), _jsx(CardDescription, { children: feature.body })] }) }, feature.title))) })] }));
53
+ return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("div", { className: "grid gap-6 sm:grid-cols-2", children: features.map((feature, index) => (_jsx(Card, { className: "gap-4 py-6", children: _jsxs(CardHeader, { children: [numbered ? (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: String(index + 1).padStart(2, '0') })) : null, variant === 'icon' && 'icon' in feature ? (_jsx("span", { className: "bg-accent text-accent-foreground mb-2 flex size-10 items-center justify-center rounded-lg", children: _jsx(feature.icon, { className: "size-5" }) })) : null, _jsx(CardTitle, { children: _jsx(Title, { children: feature.title }) }), _jsx(CardDescription, { children: feature.body })] }) }, feature.title))) })] }));
23
54
  }
24
55
  export default FeatureGrid01;
@@ -1,3 +1,3 @@
1
- export { FeatureGrid01, default } from './feature-grid';
2
- export type { BareFeature, Feature, FeatureGrid01Props, IconFeature, } from './feature-grid';
1
+ export { FeatureGrid01, default } from './feature-grid.js';
2
+ export type { BareFeature, Feature, FeatureGrid01Props, IconFeature, } from './feature-grid.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { FeatureGrid01, default } from './feature-grid';
1
+ export { FeatureGrid01, default } from './feature-grid.js';
@@ -1,24 +1,44 @@
1
1
  import type { ReactNode } from 'react';
2
- import { type HeadingLevel } from '../../components/ui/section';
2
+ import { type HeadingLevel } from '../../components/ui/section.js';
3
+ /**
4
+ * One action in a hero's action row.
5
+ *
6
+ * **The two arms are two elements, and a caller should not be able to reach the
7
+ * wrong one by accident.** An action that names a destination is an anchor and
8
+ * navigates; an action that does not is a button, and a Block ships no behaviour,
9
+ * so that button is inert by design rather than by accident. The arms are a union
10
+ * rather than one shape with an optional `href` because an optional `href` makes
11
+ * both mistakes silent:
12
+ *
13
+ * - `{ label: 'Start free' }` compiles and renders a primary button that goes
14
+ * nowhere. A hero's first action is almost always a link, so this is the likely
15
+ * mistake and it looks correct on the page.
16
+ * - `{ label: 'Start free', href: maybeUrl }` compiles today and renders a button
17
+ * whenever `maybeUrl` is `undefined`, which is a runtime branch the type said
18
+ * nothing about.
19
+ *
20
+ * So the link arm *requires* `href` and the button arm *forbids* it, as
21
+ * `href?: never`. The second of those is the one worth having: a value that is
22
+ * sometimes a string and sometimes `undefined` is now a type error rather than a
23
+ * button, which is the whole of "a caller should not be able to get it wrong
24
+ * silently".
25
+ */
3
26
  export type HeroAction = {
4
27
  label: string;
5
- /**
6
- * Where the action goes. Required for an action that navigates, which is what
7
- * an action in a hero almost always is.
8
- *
9
- * It was optional here and the Component ignored it, which meant an action
10
- * with a destination rendered as a `<button>` that went nowhere: a control
11
- * that looks like a link and is not one, and a dead end for a reader who
12
- * pressed it. An action now renders as a real anchor whenever it names a
13
- * destination, and falls back to a button only when it genuinely is one. A
14
- * Block ships no behaviour, so a button here is inert by design rather than by
15
- * accident, and the two shapes are told apart by exactly this.
16
- */
17
- href?: string;
18
28
  variant?: 'default' | 'outline' | 'secondary' | 'ghost';
29
+ } & ({
30
+ /** Where the action goes. Present makes the action an anchor. */
31
+ href: string;
19
32
  /** Opens the destination in a new tab, with the matching `rel`. */
20
33
  newTab?: boolean;
21
- };
34
+ } | {
35
+ /**
36
+ * Forbidden, so that "a link whose address happens to be undefined" is a
37
+ * type error rather than a button. Omit the key entirely to mean a button.
38
+ */
39
+ href?: never;
40
+ newTab?: never;
41
+ });
22
42
  export type Hero01Props = {
23
43
  /**
24
44
  * Optional label above the headline. Intentionally has no default: an earlier
@@ -27,8 +47,20 @@ export type Hero01Props = {
27
47
  * about their product. Pass one if you mean it.
28
48
  */
29
49
  eyebrow?: string;
30
- title: string;
31
- description?: string;
50
+ /**
51
+ * The headline.
52
+ *
53
+ * A `ReactNode` rather than a `string`, because `SectionHeading` already takes
54
+ * one and a Block that narrowed it would have been the odd one out. Three of the
55
+ * five product sites set the emphasised word in their own mark rather than in a
56
+ * wrapper, so a `string` here would have forced each of them to drop the
57
+ * emphasis or reach for a second component. Every string a site renders is
58
+ * still the site's, and `check-block-copy.mjs` still holds this Block to
59
+ * shipping none.
60
+ */
61
+ title: ReactNode;
62
+ /** The supporting line. A node for the same reason the title is one. */
63
+ description?: ReactNode;
32
64
  actions?: HeroAction[];
33
65
  /**
34
66
  * Whether the copy is centered in the band or set flush to the left edge of
@@ -1 +1 @@
1
- {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAGxF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;IACvD,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAY,EACZ,KAAgB,EAChB,UAAU,EACV,KAAK,EACL,YAAmB,EACnB,SAAS,GACV,EAAE,WAAW,+BA+Fb;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAGxF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;CACxD,GAAG,CACA;IACE,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,GACD;IACE;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,KAAK,CAAA;CACf,CACJ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;;;;;OAUG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB,wEAAwE;IACxE,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAY,EACZ,KAAgB,EAChB,UAAU,EACV,KAAK,EACL,YAAmB,EACnB,SAAS,GACV,EAAE,WAAW,+BAoGb;AAED,eAAe,MAAM,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ArrowRight } from 'lucide-react';
3
- import { Button } from '../../components/ui/button';
4
- import { CtaLink } from '../../components/ui/cta-link';
5
- import { Section, SectionHeading } from '../../components/ui/section';
6
- import { cn } from '../../lib/utils';
3
+ import { Button } from '../../components/ui/button.js';
4
+ import { CtaLink } from '../../components/ui/cta-link.js';
5
+ import { Section, SectionHeading } from '../../components/ui/section.js';
6
+ import { cn } from '../../lib/utils.js';
7
7
  /**
8
8
  * A marketing hero with a headline, a supporting line, up to two actions, and
9
9
  * an optional live figure beside them.
@@ -43,11 +43,16 @@ export function Hero01({ eyebrow, title, description, actions = [], align = 'cen
43
43
  const twoColumn = split ?? instrument !== undefined;
44
44
  const copy = (_jsxs("div", { "data-slot": "hero-01-copy", className: cn('flex flex-col gap-10', twoColumn ? 'items-start text-left' : align === 'center' ? 'items-center text-center' : 'items-start text-left'), children: [eyebrow ? (_jsx("span", { className: "bg-muted text-muted-foreground rounded-full px-3 py-1 text-xs font-medium", children: eyebrow })) : null, _jsx(SectionHeading, { as: headingLevel, align: twoColumn ? 'left' : align, title: title, description: description }), actions.length ? (_jsx("div", { className: "flex flex-col gap-3 sm:flex-row", children: actions.map((action, index) => {
45
45
  const variant = action.variant ?? (index === 0 ? 'default' : 'outline');
46
- // Positional, for the same reason as `pricing-01`'s feature list: the
47
- // label is display content, and two actions may share one. Safe here
48
- // because the list is static and never reordered.
49
- const content = (_jsxs(_Fragment, { children: [action.label, index === 0 ? (_jsx(ArrowRight, { className: "motion-safe:transition-transform size-4 group-hover:translate-x-0.5" })) : null] }));
50
- return action.href ? (_jsx(CtaLink, { href: action.href, newTab: action.newTab, size: "lg", variant: variant, className: "group", children: content }, index)) : (_jsx(Button, { size: "lg", variant: variant, className: "group", children: content }, index));
46
+ // The arrow is a link affordance, so it follows the element and not the
47
+ // position. It was `index === 0`, which put a "goes forward" arrow on an
48
+ // inert button: the one control in the row that cannot be followed wore
49
+ // the mark that says it can. A first action that is genuinely a button
50
+ // gets no arrow, and a second action that is a link still gets none,
51
+ // because the arrow marks the row's primary destination and only one
52
+ // thing is that.
53
+ const isLink = action.href !== undefined;
54
+ const content = (_jsxs(_Fragment, { children: [action.label, index === 0 && isLink ? (_jsx(ArrowRight, { className: "motion-safe:transition-transform size-4 group-hover:translate-x-0.5" })) : null] }));
55
+ return isLink ? (_jsx(CtaLink, { href: action.href, newTab: action.newTab, size: "lg", variant: variant, className: "group", children: content }, index)) : (_jsx(Button, { size: "lg", variant: variant, className: "group", children: content }, index));
51
56
  }) })) : null] }));
52
57
  return (_jsxs(Section, { className: cn('relative overflow-hidden', className), children: [_jsx("div", { "aria-hidden": true, className: "from-primary/5 pointer-events-none absolute inset-0 -z-10 bg-gradient-to-b to-transparent" }), _jsxs("div", { "data-slot": "hero-01-band", className: cn(twoColumn
53
58
  ? 'grid items-center gap-10 lg:grid-cols-[5fr_6fr] lg:gap-14'
@@ -1,2 +1,3 @@
1
- export { Hero01, default } from './hero';
1
+ export { Hero01, default } from './hero.js';
2
+ export type { HeroAction, Hero01Props } from './hero.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAIxC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA"}
@@ -1 +1 @@
1
- export { Hero01, default } from './hero';
1
+ export { Hero01, default } from './hero.js';
@@ -5,24 +5,24 @@
5
5
  * content as props and never fetches application data (ticket 07). The `-NN`
6
6
  * suffix is the block-family variant ordinal.
7
7
  */
8
- export { Hero01 } from './hero-01';
9
- export { FeatureGrid01 } from './feature-grid-01';
10
- export { Stats01 } from './stats-01';
11
- export { Pricing01 } from './pricing-01';
12
- export { Cta01 } from './cta-01';
13
- export { PageHeader01 } from './page-header-01';
14
- export { DataTable01 } from './data-table-01';
15
- export { SettingsPanel01 } from './settings-panel-01';
16
- export { AuthForm01 } from './auth-form-01';
17
- export { AppShell01 } from './app-shell-01';
18
- export { ProcessRail01 } from './process-rail-01';
19
- export { StatusLedger01, STATUS_TIERS } from './status-ledger-01';
20
- export type { StatusTier } from './status-ledger-01';
21
- export { ProductGrid01 } from './product-grid-01';
22
- export { StackGrid01 } from './stack-grid-01';
23
- export { LogoStrip01 } from './logo-strip-01';
24
- export { NoteGrid01 } from './note-grid-01';
25
- export { InstrumentPanel01 } from './instrument-panel-01';
26
- export { SiteHeader } from './site-header';
27
- export { SiteFooter } from './site-footer';
8
+ export { Hero01 } from './hero-01/index.js';
9
+ export { FeatureGrid01 } from './feature-grid-01/index.js';
10
+ export { Stats01 } from './stats-01/index.js';
11
+ export { Pricing01 } from './pricing-01/index.js';
12
+ export { Cta01 } from './cta-01/index.js';
13
+ export { PageHeader01 } from './page-header-01/index.js';
14
+ export { DataTable01 } from './data-table-01/index.js';
15
+ export { SettingsPanel01 } from './settings-panel-01/index.js';
16
+ export { AuthForm01 } from './auth-form-01/index.js';
17
+ export { AppShell01 } from './app-shell-01/index.js';
18
+ export { ProcessRail01 } from './process-rail-01/index.js';
19
+ export { StatusLedger01, STATUS_TIERS } from './status-ledger-01/index.js';
20
+ export type { StatusTier } from './status-ledger-01/index.js';
21
+ export { ProductGrid01 } from './product-grid-01/index.js';
22
+ export { StackGrid01 } from './stack-grid-01/index.js';
23
+ export { LogoStrip01 } from './logo-strip-01/index.js';
24
+ export { NoteGrid01 } from './note-grid-01/index.js';
25
+ export { InstrumentPanel01 } from './instrument-panel-01/index.js';
26
+ export { SiteHeader } from './site-header/index.js';
27
+ export { SiteFooter } from './site-footer/index.js';
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -5,22 +5,22 @@
5
5
  * content as props and never fetches application data (ticket 07). The `-NN`
6
6
  * suffix is the block-family variant ordinal.
7
7
  */
8
- export { Hero01 } from './hero-01';
9
- export { FeatureGrid01 } from './feature-grid-01';
10
- export { Stats01 } from './stats-01';
11
- export { Pricing01 } from './pricing-01';
12
- export { Cta01 } from './cta-01';
13
- export { PageHeader01 } from './page-header-01';
14
- export { DataTable01 } from './data-table-01';
15
- export { SettingsPanel01 } from './settings-panel-01';
16
- export { AuthForm01 } from './auth-form-01';
17
- export { AppShell01 } from './app-shell-01';
18
- export { ProcessRail01 } from './process-rail-01';
19
- export { StatusLedger01, STATUS_TIERS } from './status-ledger-01';
20
- export { ProductGrid01 } from './product-grid-01';
21
- export { StackGrid01 } from './stack-grid-01';
22
- export { LogoStrip01 } from './logo-strip-01';
23
- export { NoteGrid01 } from './note-grid-01';
24
- export { InstrumentPanel01 } from './instrument-panel-01';
25
- export { SiteHeader } from './site-header';
26
- export { SiteFooter } from './site-footer';
8
+ export { Hero01 } from './hero-01/index.js';
9
+ export { FeatureGrid01 } from './feature-grid-01/index.js';
10
+ export { Stats01 } from './stats-01/index.js';
11
+ export { Pricing01 } from './pricing-01/index.js';
12
+ export { Cta01 } from './cta-01/index.js';
13
+ export { PageHeader01 } from './page-header-01/index.js';
14
+ export { DataTable01 } from './data-table-01/index.js';
15
+ export { SettingsPanel01 } from './settings-panel-01/index.js';
16
+ export { AuthForm01 } from './auth-form-01/index.js';
17
+ export { AppShell01 } from './app-shell-01/index.js';
18
+ export { ProcessRail01 } from './process-rail-01/index.js';
19
+ export { StatusLedger01, STATUS_TIERS } from './status-ledger-01/index.js';
20
+ export { ProductGrid01 } from './product-grid-01/index.js';
21
+ export { StackGrid01 } from './stack-grid-01/index.js';
22
+ export { LogoStrip01 } from './logo-strip-01/index.js';
23
+ export { NoteGrid01 } from './note-grid-01/index.js';
24
+ export { InstrumentPanel01 } from './instrument-panel-01/index.js';
25
+ export { SiteHeader } from './site-header/index.js';
26
+ export { SiteFooter } from './site-footer/index.js';
@@ -1,3 +1,3 @@
1
- export { InstrumentPanel01, default } from './instrument-panel';
2
- export type { InstrumentPanel01Props, PanelState } from './instrument-panel';
1
+ export { InstrumentPanel01, default } from './instrument-panel.js';
2
+ export type { InstrumentPanel01Props, PanelState } from './instrument-panel.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { InstrumentPanel01, default } from './instrument-panel';
1
+ export { InstrumentPanel01, default } from './instrument-panel.js';
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from '../../lib/utils';
2
+ import { cn } from '../../lib/utils.js';
3
3
  /**
4
4
  * The dot each state draws.
5
5
  *
@@ -1,3 +1,3 @@
1
- export { LogoStrip01, default } from './logo-strip';
2
- export type { LogoStrip01Props, LogoStripItem } from './logo-strip';
1
+ export { LogoStrip01, default } from './logo-strip.js';
2
+ export type { LogoStrip01Props, LogoStripItem } from './logo-strip.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { LogoStrip01, default } from './logo-strip';
1
+ export { LogoStrip01, default } from './logo-strip.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 item of the strip, as a string.
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
  * A single line of short items: the transition band between a hero and the
6
6
  * section that follows it.
@@ -1,3 +1,3 @@
1
- export { NoteGrid01, default } from './note-grid';
2
- export type { NoteGrid01Props, NoteGrid01Note } from './note-grid';
1
+ export { NoteGrid01, default } from './note-grid.js';
2
+ export type { NoteGrid01Props, NoteGrid01Note } from './note-grid.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { NoteGrid01, default } from './note-grid';
1
+ export { NoteGrid01, default } from './note-grid.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 note in the grid: a title and one or two sentences under it.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Section, SectionHeading } from '../../components/ui/section';
2
+ import { Section, SectionHeading } from '../../components/ui/section.js';
3
3
  /**
4
4
  * A grid of short points: a title and a sentence or two, on a hairline above each
5
5
  * one, with no tile and no icon.
@@ -1,3 +1,3 @@
1
- export { PageHeader01, default } from './page-header';
2
- export type { PageHeader01Props, PageHeaderAction, PageHeaderCrumb } from './page-header';
1
+ export { PageHeader01, default } from './page-header.js';
2
+ export type { PageHeader01Props, PageHeaderAction, PageHeaderCrumb } from './page-header.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { PageHeader01, default } from './page-header';
1
+ export { PageHeader01, default } from './page-header.js';
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import { type HeadingElement } from '../../components/ui/typography';
2
+ import { type HeadingElement } from '../../components/ui/typography.js';
3
3
  export type PageHeaderCrumb = {
4
4
  label: ReactNode;
5
5
  /** Renders a native anchor. Omit on the current, final step. */
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment } from 'react';
3
- import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '../../components/ui/breadcrumb';
4
- import { Button } from '../../components/ui/button';
5
- import { Separator } from '../../components/ui/separator';
6
- import { Heading, Text } from '../../components/ui/typography';
3
+ import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '../../components/ui/breadcrumb.js';
4
+ import { Button } from '../../components/ui/button.js';
5
+ import { Separator } from '../../components/ui/separator.js';
6
+ import { Heading, Text } from '../../components/ui/typography.js';
7
7
  /**
8
8
  * A page title band.
9
9
  *
@@ -1,2 +1,2 @@
1
- export { Pricing01, default } from './pricing';
1
+ export { Pricing01, default } from './pricing.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- export { Pricing01, default } from './pricing';
1
+ export { Pricing01, default } from './pricing.js';
@@ -1,4 +1,4 @@
1
- import { type HeadingLevel } from '../../components/ui/section';
1
+ import { type HeadingLevel } from '../../components/ui/section.js';
2
2
  export type Plan = {
3
3
  name: string;
4
4
  price: string;
@@ -29,6 +29,13 @@ export type Pricing01Props = {
29
29
  * plan". A shared library has no plans to sell, so those strings described a
30
30
  * business that does not exist here, and every consumer who installed the block
31
31
  * inherited them.
32
+ *
33
+ * The section heading is aligned left, for the reason `FeatureGrid01` now records
34
+ * in full and `test/section-heading-align.test.tsx` holds: three cards sit under
35
+ * it, and a centred title above a left-aligned grid reads as two unrelated pieces.
36
+ * `Pricing01` and `FeatureGrid01` were the only two Blocks that left the heading
37
+ * centred over content, and neither had a stated reason for it, so both were
38
+ * taking the default rather than making a decision.
32
39
  */
33
40
  export declare function Pricing01({ eyebrow, title, description, plans, headingLevel, }: Pricing01Props): import("react").JSX.Element;
34
41
  export default Pricing01;
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../../src/blocks/pricing-01/pricing.tsx"],"names":[],"mappings":"AAYA,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExF,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EACL,WAAW,EACX,KAAK,EACL,YAAmB,GACpB,EAAE,cAAc,+BAkEhB;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../../src/blocks/pricing-01/pricing.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAuC,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAEpG,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EACL,WAAW,EACX,KAAK,EACL,YAAmB,GACpB,EAAE,cAAc,+BAwEhB;AAED,eAAe,SAAS,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Check } from 'lucide-react';
3
- import { Badge } from '../../components/ui/badge';
4
- import { Button } from '../../components/ui/button';
5
- import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card';
6
- import { Section, SectionHeading } from '../../components/ui/section';
3
+ import { Badge } from '../../components/ui/badge.js';
4
+ import { Button } from '../../components/ui/button.js';
5
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card.js';
6
+ import { Section, SectionHeading, childLevel } from '../../components/ui/section.js';
7
7
  /**
8
8
  * A three-up plan comparison.
9
9
  *
@@ -13,8 +13,18 @@ import { Section, SectionHeading } from '../../components/ui/section';
13
13
  * plan". A shared library has no plans to sell, so those strings described a
14
14
  * business that does not exist here, and every consumer who installed the block
15
15
  * inherited them.
16
+ *
17
+ * The section heading is aligned left, for the reason `FeatureGrid01` now records
18
+ * in full and `test/section-heading-align.test.tsx` holds: three cards sit under
19
+ * it, and a centred title above a left-aligned grid reads as two unrelated pieces.
20
+ * `Pricing01` and `FeatureGrid01` were the only two Blocks that left the heading
21
+ * centred over content, and neither had a stated reason for it, so both were
22
+ * taking the default rather than making a decision.
16
23
  */
17
24
  export function Pricing01({ eyebrow, title, description, plans, headingLevel = 'h2', }) {
18
- return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("div", { className: "grid gap-6 lg:grid-cols-3", children: plans.map((plan) => (_jsxs(Card, { className: plan.featured ? 'border-primary shadow-md' : undefined, children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(CardTitle, { children: plan.name }), plan.featured && plan.badge ? _jsx(Badge, { children: plan.badge }) : null] }), plan.body ? _jsx(CardDescription, { children: plan.body }) : null, _jsxs("p", { className: "mt-2 text-3xl font-semibold tracking-tight", children: [plan.price, plan.period ? (_jsx("span", { className: "text-muted-foreground text-sm font-normal", children: plan.period })) : null] })] }), _jsx(CardContent, { className: "flex flex-col gap-3", children: plan.features.map((feature, index) => (_jsxs("p", { className: "flex items-start gap-2 text-sm", children: [_jsx(Check, { className: "text-success mt-0.5 size-4 shrink-0" }), feature] }, index))) }), _jsx(CardFooter, { className: "mt-auto", children: _jsx(Button, { className: "w-full", variant: plan.featured ? 'default' : 'outline', children: plan.cta }) })] }, plan.name))) })] }));
25
+ // A plan name is a heading one step below the section that introduces the set,
26
+ // so three plans under one `h2` are three `h3`s and not three competing sections.
27
+ const Title = childLevel(headingLevel);
28
+ return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("div", { className: "grid gap-6 lg:grid-cols-3", children: plans.map((plan) => (_jsxs(Card, { className: plan.featured ? 'border-primary shadow-md' : undefined, children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(CardTitle, { children: _jsx(Title, { children: plan.name }) }), plan.featured && plan.badge ? _jsx(Badge, { children: plan.badge }) : null] }), plan.body ? _jsx(CardDescription, { children: plan.body }) : null, _jsxs("p", { className: "mt-2 text-3xl font-semibold tracking-tight", children: [plan.price, plan.period ? (_jsx("span", { className: "text-muted-foreground text-sm font-normal", children: plan.period })) : null] })] }), _jsx(CardContent, { className: "flex flex-col gap-3", children: plan.features.map((feature, index) => (_jsxs("p", { className: "flex items-start gap-2 text-sm", children: [_jsx(Check, { className: "text-success mt-0.5 size-4 shrink-0" }), feature] }, index))) }), _jsx(CardFooter, { className: "mt-auto", children: _jsx(Button, { className: "w-full", variant: plan.featured ? 'default' : 'outline', children: plan.cta }) })] }, plan.name))) })] }));
19
29
  }
20
30
  export default Pricing01;
@@ -0,0 +1,3 @@
1
+ export { ProcessFlow01, default } from './process-flow.js';
2
+ export type { ProcessFlow01Props, ProcessStage, FlowColumns } from './process-flow.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/process-flow-01/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1 @@
1
+ export { ProcessFlow01, default } from './process-flow.js';