@nanisoft/prism-ui 0.5.0 → 0.6.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/THIRD-PARTY-NOTICES.md +48 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/blocks/app-shell-01/app-shell.d.ts +38 -0
  6. package/dist/blocks/app-shell-01/app-shell.d.ts.map +1 -0
  7. package/dist/blocks/app-shell-01/app-shell.js +27 -0
  8. package/dist/blocks/app-shell-01/index.d.ts +3 -0
  9. package/dist/blocks/app-shell-01/index.d.ts.map +1 -0
  10. package/dist/blocks/app-shell-01/index.js +1 -0
  11. package/dist/blocks/auth-form-01/auth-form.d.ts +52 -0
  12. package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -0
  13. package/dist/blocks/auth-form-01/auth-form.js +23 -0
  14. package/dist/blocks/auth-form-01/index.d.ts +3 -0
  15. package/dist/blocks/auth-form-01/index.d.ts.map +1 -0
  16. package/dist/blocks/auth-form-01/index.js +1 -0
  17. package/dist/blocks/cta-01/cta.d.ts +83 -0
  18. package/dist/blocks/cta-01/cta.d.ts.map +1 -0
  19. package/dist/blocks/cta-01/cta.js +29 -0
  20. package/dist/blocks/cta-01/index.d.ts +3 -0
  21. package/dist/blocks/cta-01/index.d.ts.map +1 -0
  22. package/dist/blocks/cta-01/index.js +1 -0
  23. package/dist/blocks/data-table-01/data-table.d.ts +102 -0
  24. package/dist/blocks/data-table-01/data-table.d.ts.map +1 -0
  25. package/dist/blocks/data-table-01/data-table.js +116 -0
  26. package/dist/blocks/data-table-01/index.d.ts +3 -0
  27. package/dist/blocks/data-table-01/index.d.ts.map +1 -0
  28. package/dist/blocks/data-table-01/index.js +1 -0
  29. package/dist/blocks/feature-grid-01/feature-grid.d.ts +78 -0
  30. package/dist/blocks/feature-grid-01/feature-grid.d.ts.map +1 -0
  31. package/dist/blocks/feature-grid-01/feature-grid.js +24 -0
  32. package/dist/blocks/feature-grid-01/index.d.ts +3 -0
  33. package/dist/blocks/feature-grid-01/index.d.ts.map +1 -0
  34. package/dist/blocks/feature-grid-01/index.js +1 -0
  35. package/dist/blocks/hero-01/hero.d.ts +59 -0
  36. package/dist/blocks/hero-01/hero.d.ts.map +1 -0
  37. package/dist/blocks/hero-01/hero.js +24 -0
  38. package/dist/blocks/hero-01/index.d.ts +2 -0
  39. package/dist/blocks/hero-01/index.d.ts.map +1 -0
  40. package/dist/blocks/hero-01/index.js +1 -0
  41. package/dist/blocks/index.d.ts +28 -0
  42. package/dist/blocks/index.d.ts.map +1 -0
  43. package/dist/blocks/index.js +26 -0
  44. package/dist/blocks/instrument-panel-01/index.d.ts +3 -0
  45. package/dist/blocks/instrument-panel-01/index.d.ts.map +1 -0
  46. package/dist/blocks/instrument-panel-01/index.js +1 -0
  47. package/dist/blocks/instrument-panel-01/instrument-panel.d.ts +114 -0
  48. package/dist/blocks/instrument-panel-01/instrument-panel.d.ts.map +1 -0
  49. package/dist/blocks/instrument-panel-01/instrument-panel.js +64 -0
  50. package/dist/blocks/logo-strip-01/index.d.ts +3 -0
  51. package/dist/blocks/logo-strip-01/index.d.ts.map +1 -0
  52. package/dist/blocks/logo-strip-01/index.js +1 -0
  53. package/dist/blocks/logo-strip-01/logo-strip.d.ts +84 -0
  54. package/dist/blocks/logo-strip-01/logo-strip.d.ts.map +1 -0
  55. package/dist/blocks/logo-strip-01/logo-strip.js +40 -0
  56. package/dist/blocks/note-grid-01/index.d.ts +3 -0
  57. package/dist/blocks/note-grid-01/index.d.ts.map +1 -0
  58. package/dist/blocks/note-grid-01/index.js +1 -0
  59. package/dist/blocks/note-grid-01/note-grid.d.ts +79 -0
  60. package/dist/blocks/note-grid-01/note-grid.d.ts.map +1 -0
  61. package/dist/blocks/note-grid-01/note-grid.js +37 -0
  62. package/dist/blocks/page-header-01/index.d.ts +3 -0
  63. package/dist/blocks/page-header-01/index.d.ts.map +1 -0
  64. package/dist/blocks/page-header-01/index.js +1 -0
  65. package/dist/blocks/page-header-01/page-header.d.ts +48 -0
  66. package/dist/blocks/page-header-01/page-header.d.ts.map +1 -0
  67. package/dist/blocks/page-header-01/page-header.js +27 -0
  68. package/dist/blocks/pricing-01/index.d.ts +2 -0
  69. package/dist/blocks/pricing-01/index.d.ts.map +1 -0
  70. package/dist/blocks/pricing-01/index.js +1 -0
  71. package/dist/blocks/pricing-01/pricing.d.ts +35 -0
  72. package/dist/blocks/pricing-01/pricing.d.ts.map +1 -0
  73. package/dist/blocks/pricing-01/pricing.js +20 -0
  74. package/dist/blocks/process-rail-01/index.d.ts +3 -0
  75. package/dist/blocks/process-rail-01/index.d.ts.map +1 -0
  76. package/dist/blocks/process-rail-01/index.js +1 -0
  77. package/dist/blocks/process-rail-01/process-rail.d.ts +99 -0
  78. package/dist/blocks/process-rail-01/process-rail.d.ts.map +1 -0
  79. package/dist/blocks/process-rail-01/process-rail.js +58 -0
  80. package/dist/blocks/product-grid-01/index.d.ts +3 -0
  81. package/dist/blocks/product-grid-01/index.d.ts.map +1 -0
  82. package/dist/blocks/product-grid-01/index.js +1 -0
  83. package/dist/blocks/product-grid-01/product-grid.d.ts +114 -0
  84. package/dist/blocks/product-grid-01/product-grid.d.ts.map +1 -0
  85. package/dist/blocks/product-grid-01/product-grid.js +51 -0
  86. package/dist/blocks/settings-panel-01/index.d.ts +3 -0
  87. package/dist/blocks/settings-panel-01/index.d.ts.map +1 -0
  88. package/dist/blocks/settings-panel-01/index.js +1 -0
  89. package/dist/blocks/settings-panel-01/settings-panel.d.ts +71 -0
  90. package/dist/blocks/settings-panel-01/settings-panel.d.ts.map +1 -0
  91. package/dist/blocks/settings-panel-01/settings-panel.js +38 -0
  92. package/dist/blocks/site-footer/index.d.ts +3 -0
  93. package/dist/blocks/site-footer/index.d.ts.map +1 -0
  94. package/dist/blocks/site-footer/index.js +1 -0
  95. package/dist/blocks/site-footer/site-footer.d.ts +135 -0
  96. package/dist/blocks/site-footer/site-footer.d.ts.map +1 -0
  97. package/dist/blocks/site-footer/site-footer.js +41 -0
  98. package/dist/blocks/site-header/index.d.ts +3 -0
  99. package/dist/blocks/site-header/index.d.ts.map +1 -0
  100. package/dist/blocks/site-header/index.js +1 -0
  101. package/dist/blocks/site-header/site-header.d.ts +142 -0
  102. package/dist/blocks/site-header/site-header.d.ts.map +1 -0
  103. package/dist/blocks/site-header/site-header.js +46 -0
  104. package/dist/blocks/stack-grid-01/index.d.ts +3 -0
  105. package/dist/blocks/stack-grid-01/index.d.ts.map +1 -0
  106. package/dist/blocks/stack-grid-01/index.js +1 -0
  107. package/dist/blocks/stack-grid-01/stack-grid.d.ts +118 -0
  108. package/dist/blocks/stack-grid-01/stack-grid.d.ts.map +1 -0
  109. package/dist/blocks/stack-grid-01/stack-grid.js +49 -0
  110. package/dist/blocks/stats-01/index.d.ts +2 -0
  111. package/dist/blocks/stats-01/index.d.ts.map +1 -0
  112. package/dist/blocks/stats-01/index.js +1 -0
  113. package/dist/blocks/stats-01/stats.d.ts +28 -0
  114. package/dist/blocks/stats-01/stats.d.ts.map +1 -0
  115. package/dist/blocks/stats-01/stats.js +27 -0
  116. package/dist/blocks/status-ledger-01/index.d.ts +3 -0
  117. package/dist/blocks/status-ledger-01/index.d.ts.map +1 -0
  118. package/dist/blocks/status-ledger-01/index.js +1 -0
  119. package/dist/blocks/status-ledger-01/status-ledger.d.ts +131 -0
  120. package/dist/blocks/status-ledger-01/status-ledger.d.ts.map +1 -0
  121. package/dist/blocks/status-ledger-01/status-ledger.js +80 -0
  122. package/dist/catalog.d.ts +28 -0
  123. package/dist/catalog.d.ts.map +1 -0
  124. package/dist/catalog.js +672 -0
  125. package/dist/components/index.d.ts +64 -0
  126. package/dist/components/index.d.ts.map +1 -0
  127. package/dist/components/index.js +43 -0
  128. package/dist/components/ui/accordion.d.ts +65 -0
  129. package/dist/components/ui/accordion.d.ts.map +1 -0
  130. package/dist/components/ui/accordion.js +30 -0
  131. package/dist/components/ui/alert.d.ts +19 -0
  132. package/dist/components/ui/alert.d.ts.map +1 -0
  133. package/dist/components/ui/alert.js +31 -0
  134. package/dist/components/ui/avatar.d.ts +47 -0
  135. package/dist/components/ui/avatar.d.ts.map +1 -0
  136. package/dist/components/ui/avatar.js +30 -0
  137. package/dist/components/ui/badge.d.ts +14 -0
  138. package/dist/components/ui/badge.d.ts.map +1 -0
  139. package/dist/components/ui/badge.js +26 -0
  140. package/dist/components/ui/breadcrumb.d.ts +35 -0
  141. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  142. package/dist/components/ui/breadcrumb.js +48 -0
  143. package/dist/components/ui/button.d.ts +16 -0
  144. package/dist/components/ui/button.d.ts.map +1 -0
  145. package/dist/components/ui/button.js +63 -0
  146. package/dist/components/ui/card.d.ts +41 -0
  147. package/dist/components/ui/card.d.ts.map +1 -0
  148. package/dist/components/ui/card.js +53 -0
  149. package/dist/components/ui/checkbox.d.ts +43 -0
  150. package/dist/components/ui/checkbox.d.ts.map +1 -0
  151. package/dist/components/ui/checkbox.js +18 -0
  152. package/dist/components/ui/cta-link.d.ts +45 -0
  153. package/dist/components/ui/cta-link.d.ts.map +1 -0
  154. package/dist/components/ui/cta-link.js +81 -0
  155. package/dist/components/ui/diagram.d.ts +154 -0
  156. package/dist/components/ui/diagram.d.ts.map +1 -0
  157. package/dist/components/ui/diagram.js +150 -0
  158. package/dist/components/ui/dialog.d.ts +81 -0
  159. package/dist/components/ui/dialog.d.ts.map +1 -0
  160. package/dist/components/ui/dialog.js +60 -0
  161. package/dist/components/ui/dropdown-menu.d.ts +189 -0
  162. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  163. package/dist/components/ui/dropdown-menu.js +67 -0
  164. package/dist/components/ui/fact-list.d.ts +90 -0
  165. package/dist/components/ui/fact-list.d.ts.map +1 -0
  166. package/dist/components/ui/fact-list.js +38 -0
  167. package/dist/components/ui/field.d.ts +36 -0
  168. package/dist/components/ui/field.d.ts.map +1 -0
  169. package/dist/components/ui/field.js +46 -0
  170. package/dist/components/ui/input.d.ts +12 -0
  171. package/dist/components/ui/input.d.ts.map +1 -0
  172. package/dist/components/ui/input.js +14 -0
  173. package/dist/components/ui/kbd.d.ts +10 -0
  174. package/dist/components/ui/kbd.d.ts.map +1 -0
  175. package/dist/components/ui/kbd.js +12 -0
  176. package/dist/components/ui/pagination.d.ts +40 -0
  177. package/dist/components/ui/pagination.d.ts.map +1 -0
  178. package/dist/components/ui/pagination.js +49 -0
  179. package/dist/components/ui/popover.d.ts +56 -0
  180. package/dist/components/ui/popover.d.ts.map +1 -0
  181. package/dist/components/ui/popover.js +25 -0
  182. package/dist/components/ui/product-mark.d.ts +115 -0
  183. package/dist/components/ui/product-mark.d.ts.map +1 -0
  184. package/dist/components/ui/product-mark.js +82 -0
  185. package/dist/components/ui/product-switcher.d.ts +108 -0
  186. package/dist/components/ui/product-switcher.d.ts.map +1 -0
  187. package/dist/components/ui/product-switcher.js +47 -0
  188. package/dist/components/ui/progress.d.ts +38 -0
  189. package/dist/components/ui/progress.d.ts.map +1 -0
  190. package/dist/components/ui/progress.js +17 -0
  191. package/dist/components/ui/prose.d.ts +88 -0
  192. package/dist/components/ui/prose.d.ts.map +1 -0
  193. package/dist/components/ui/prose.js +53 -0
  194. package/dist/components/ui/radio-group.d.ts +66 -0
  195. package/dist/components/ui/radio-group.d.ts.map +1 -0
  196. package/dist/components/ui/radio-group.js +30 -0
  197. package/dist/components/ui/section.d.ts +60 -0
  198. package/dist/components/ui/section.d.ts.map +1 -0
  199. package/dist/components/ui/section.js +21 -0
  200. package/dist/components/ui/select.d.ts +124 -0
  201. package/dist/components/ui/select.d.ts.map +1 -0
  202. package/dist/components/ui/select.js +47 -0
  203. package/dist/components/ui/separator.d.ts +16 -0
  204. package/dist/components/ui/separator.d.ts.map +1 -0
  205. package/dist/components/ui/separator.js +15 -0
  206. package/dist/components/ui/skeleton.d.ts +12 -0
  207. package/dist/components/ui/skeleton.d.ts.map +1 -0
  208. package/dist/components/ui/skeleton.js +14 -0
  209. package/dist/components/ui/slider.d.ts +43 -0
  210. package/dist/components/ui/slider.d.ts.map +1 -0
  211. package/dist/components/ui/slider.js +23 -0
  212. package/dist/components/ui/switch.d.ts +42 -0
  213. package/dist/components/ui/switch.d.ts.map +1 -0
  214. package/dist/components/ui/switch.js +16 -0
  215. package/dist/components/ui/table.d.ts +27 -0
  216. package/dist/components/ui/table.d.ts.map +1 -0
  217. package/dist/components/ui/table.js +43 -0
  218. package/dist/components/ui/tabs.d.ts +66 -0
  219. package/dist/components/ui/tabs.d.ts.map +1 -0
  220. package/dist/components/ui/tabs.js +29 -0
  221. package/dist/components/ui/textarea.d.ts +11 -0
  222. package/dist/components/ui/textarea.d.ts.map +1 -0
  223. package/dist/components/ui/textarea.js +13 -0
  224. package/dist/components/ui/tooltip.d.ts +63 -0
  225. package/dist/components/ui/tooltip.d.ts.map +1 -0
  226. package/dist/components/ui/tooltip.js +25 -0
  227. package/dist/components/ui/typography.d.ts +32 -0
  228. package/dist/components/ui/typography.d.ts.map +1 -0
  229. package/dist/components/ui/typography.js +51 -0
  230. package/dist/index.d.ts +79 -0
  231. package/dist/index.d.ts.map +1 -0
  232. package/dist/index.js +68 -0
  233. package/dist/lib/utils.d.ts +3 -0
  234. package/dist/lib/utils.d.ts.map +1 -0
  235. package/dist/lib/utils.js +5 -0
  236. package/dist/pages/auth-page/index.d.ts +36 -0
  237. package/dist/pages/auth-page/index.d.ts.map +1 -0
  238. package/dist/pages/auth-page/index.js +23 -0
  239. package/dist/pages/blog-post-page/index.d.ts +174 -0
  240. package/dist/pages/blog-post-page/index.d.ts.map +1 -0
  241. package/dist/pages/blog-post-page/index.js +49 -0
  242. package/dist/pages/dashboard-page/index.d.ts +36 -0
  243. package/dist/pages/dashboard-page/index.d.ts.map +1 -0
  244. package/dist/pages/dashboard-page/index.js +24 -0
  245. package/dist/pages/index.d.ts +21 -0
  246. package/dist/pages/index.d.ts.map +1 -0
  247. package/dist/pages/index.js +14 -0
  248. package/dist/pages/marketing-page/index.d.ts +43 -0
  249. package/dist/pages/marketing-page/index.d.ts.map +1 -0
  250. package/dist/pages/marketing-page/index.js +25 -0
  251. package/dist/pages/not-found-page/index.d.ts +112 -0
  252. package/dist/pages/not-found-page/index.d.ts.map +1 -0
  253. package/dist/pages/not-found-page/index.js +46 -0
  254. package/dist/pages/settings-page/index.d.ts +47 -0
  255. package/dist/pages/settings-page/index.d.ts.map +1 -0
  256. package/dist/pages/settings-page/index.js +24 -0
  257. package/dist/provider/index.d.ts +12 -0
  258. package/dist/provider/index.d.ts.map +1 -0
  259. package/dist/provider/index.js +9 -0
  260. package/dist/provider/provider.d.ts +42 -0
  261. package/dist/provider/provider.d.ts.map +1 -0
  262. package/dist/provider/provider.js +178 -0
  263. package/dist/provider/theme-script.d.ts +55 -0
  264. package/dist/provider/theme-script.d.ts.map +1 -0
  265. package/dist/provider/theme-script.js +79 -0
  266. package/dist/styles.css +2894 -0
  267. package/dist/theming/index.d.ts +173 -0
  268. package/dist/theming/index.d.ts.map +1 -0
  269. package/dist/theming/index.js +186 -0
  270. package/package.json +89 -18
  271. package/components.json +0 -21
  272. package/public/r/badge.json +0 -26
  273. package/public/r/button.json +0 -26
  274. package/public/r/card.json +0 -25
  275. package/public/r/cta-01.json +0 -44
  276. package/public/r/feature-grid-01.json +0 -44
  277. package/public/r/hero-01.json +0 -44
  278. package/public/r/pricing-01.json +0 -46
  279. package/public/r/registry.json +0 -294
  280. package/public/r/section.json +0 -25
  281. package/public/r/stats-01.json +0 -44
  282. package/registry.json +0 -294
  283. package/src/components/ds/blocks/cta-01/block.json +0 -8
  284. package/src/components/ds/blocks/cta-01/cta.tsx +0 -62
  285. package/src/components/ds/blocks/cta-01/index.tsx +0 -1
  286. package/src/components/ds/blocks/feature-grid-01/block.json +0 -8
  287. package/src/components/ds/blocks/feature-grid-01/feature-grid.tsx +0 -69
  288. package/src/components/ds/blocks/feature-grid-01/index.tsx +0 -1
  289. package/src/components/ds/blocks/hero-01/block.json +0 -8
  290. package/src/components/ds/blocks/hero-01/hero.tsx +0 -85
  291. package/src/components/ds/blocks/hero-01/index.tsx +0 -1
  292. package/src/components/ds/blocks/pricing-01/block.json +0 -8
  293. package/src/components/ds/blocks/pricing-01/index.tsx +0 -1
  294. package/src/components/ds/blocks/pricing-01/pricing.tsx +0 -122
  295. package/src/components/ds/blocks/section.meta.json +0 -6
  296. package/src/components/ds/blocks/section.tsx +0 -86
  297. package/src/components/ds/blocks/stats-01/block.json +0 -8
  298. package/src/components/ds/blocks/stats-01/index.tsx +0 -1
  299. package/src/components/ds/blocks/stats-01/stats.tsx +0 -92
  300. package/src/components/ui/badge.tsx +0 -37
  301. package/src/components/ui/button.tsx +0 -77
  302. package/src/components/ui/card.tsx +0 -65
  303. package/src/lib/utils.ts +0 -6
@@ -0,0 +1,672 @@
1
+ /**
2
+ * The checked Prism catalogue: the single list of Components, Blocks and Pages.
3
+ *
4
+ * This is the shape fixed by tickets 09 and 19, not the finished 28-item roster.
5
+ * The v1 build grows it one authored entry at a time; `source` and `exports` are
6
+ * the fields the build checks against disk and the emitted declarations, never
7
+ * the reverse, so the internal shadcn registry stays derived rather than
8
+ * authoritative. Tooling only: a consumer's runtime UI must not import this.
9
+ */
10
+ export const CATALOG_KINDS = ['component', 'block', 'page'];
11
+ export const COMPONENT_CATEGORIES = [
12
+ 'Call to action',
13
+ 'Forms and inputs',
14
+ 'Feedback',
15
+ 'Layout',
16
+ 'Data display',
17
+ 'Typography',
18
+ 'Miscellaneous',
19
+ ];
20
+ export const catalog = [
21
+ {
22
+ name: 'Button',
23
+ slug: 'button',
24
+ kind: 'component',
25
+ category: 'Call to action',
26
+ description: 'The action control for commands, links and loading states.',
27
+ source: 'src/components/ui/button.tsx',
28
+ exports: ['Button'],
29
+ status: 'stable',
30
+ },
31
+ {
32
+ name: 'CtaLink',
33
+ slug: 'cta-link',
34
+ kind: 'component',
35
+ category: 'Call to action',
36
+ description: 'The call to action that goes somewhere: a native link carrying the weight of a button.',
37
+ source: 'src/components/ui/cta-link.tsx',
38
+ exports: ['CtaLink'],
39
+ status: 'stable',
40
+ },
41
+ {
42
+ name: 'Badge',
43
+ slug: 'badge',
44
+ kind: 'component',
45
+ category: 'Data display',
46
+ description: 'A compact status or category label.',
47
+ source: 'src/components/ui/badge.tsx',
48
+ exports: ['Badge'],
49
+ status: 'stable',
50
+ },
51
+ {
52
+ name: 'Card',
53
+ slug: 'card',
54
+ kind: 'component',
55
+ category: 'Data display',
56
+ description: 'A bordered surface for a small group of related content.',
57
+ source: 'src/components/ui/card.tsx',
58
+ exports: ['Card', 'CardHeader', 'CardTitle', 'CardDescription', 'CardContent', 'CardFooter'],
59
+ status: 'stable',
60
+ },
61
+ {
62
+ name: 'Section',
63
+ slug: 'section',
64
+ kind: 'component',
65
+ category: 'Layout',
66
+ description: 'The container and heading primitives every Block composes for rhythm.',
67
+ source: 'src/components/ui/section.tsx',
68
+ exports: ['Section', 'SectionHeading'],
69
+ status: 'stable',
70
+ },
71
+ {
72
+ name: 'Breadcrumb',
73
+ slug: 'breadcrumb',
74
+ kind: 'component',
75
+ category: 'Call to action',
76
+ description: 'The trail of ancestor links that shows where the current page sits.',
77
+ source: 'src/components/ui/breadcrumb.tsx',
78
+ exports: [
79
+ 'Breadcrumb',
80
+ 'BreadcrumbList',
81
+ 'BreadcrumbItem',
82
+ 'BreadcrumbLink',
83
+ 'BreadcrumbPage',
84
+ 'BreadcrumbSeparator',
85
+ ],
86
+ status: 'stable',
87
+ },
88
+ {
89
+ name: 'Pagination',
90
+ slug: 'pagination',
91
+ kind: 'component',
92
+ category: 'Call to action',
93
+ description: 'The control that moves between pages of a paged collection.',
94
+ source: 'src/components/ui/pagination.tsx',
95
+ exports: [
96
+ 'Pagination',
97
+ 'PaginationContent',
98
+ 'PaginationItem',
99
+ 'PaginationLink',
100
+ 'PaginationPrevious',
101
+ 'PaginationNext',
102
+ 'PaginationEllipsis',
103
+ ],
104
+ status: 'stable',
105
+ },
106
+ {
107
+ name: 'Field',
108
+ slug: 'field',
109
+ kind: 'component',
110
+ category: 'Forms and inputs',
111
+ description: 'The labelled wrapper that pairs a form control with its label, description and error.',
112
+ source: 'src/components/ui/field.tsx',
113
+ exports: ['Field', 'FieldLabel', 'FieldDescription', 'FieldError', 'FieldGroup'],
114
+ status: 'stable',
115
+ },
116
+ {
117
+ name: 'Input',
118
+ slug: 'input',
119
+ kind: 'component',
120
+ category: 'Forms and inputs',
121
+ description: 'The single-line text control for a form.',
122
+ source: 'src/components/ui/input.tsx',
123
+ exports: ['Input'],
124
+ status: 'stable',
125
+ },
126
+ {
127
+ name: 'Textarea',
128
+ slug: 'textarea',
129
+ kind: 'component',
130
+ category: 'Forms and inputs',
131
+ description: 'The multi-line text control for a form.',
132
+ source: 'src/components/ui/textarea.tsx',
133
+ exports: ['Textarea'],
134
+ status: 'stable',
135
+ },
136
+ {
137
+ name: 'Alert',
138
+ slug: 'alert',
139
+ kind: 'component',
140
+ category: 'Feedback',
141
+ description: 'A static callout that carries an important message to the reader.',
142
+ source: 'src/components/ui/alert.tsx',
143
+ exports: ['Alert', 'AlertTitle', 'AlertDescription'],
144
+ status: 'stable',
145
+ },
146
+ {
147
+ name: 'Skeleton',
148
+ slug: 'skeleton',
149
+ kind: 'component',
150
+ category: 'Feedback',
151
+ description: 'A placeholder surface that mirrors the shape of content while it loads.',
152
+ source: 'src/components/ui/skeleton.tsx',
153
+ exports: ['Skeleton'],
154
+ status: 'stable',
155
+ },
156
+ {
157
+ name: 'Separator',
158
+ slug: 'separator',
159
+ kind: 'component',
160
+ category: 'Layout',
161
+ description: 'A hairline rule that divides content, horizontally or vertically.',
162
+ source: 'src/components/ui/separator.tsx',
163
+ exports: ['Separator'],
164
+ status: 'stable',
165
+ },
166
+ {
167
+ name: 'Table',
168
+ slug: 'table',
169
+ kind: 'component',
170
+ category: 'Data display',
171
+ description: 'The semantic table components for rows, columns and captions.',
172
+ source: 'src/components/ui/table.tsx',
173
+ exports: [
174
+ 'Table',
175
+ 'TableHeader',
176
+ 'TableBody',
177
+ 'TableFooter',
178
+ 'TableRow',
179
+ 'TableHead',
180
+ 'TableCell',
181
+ 'TableCaption',
182
+ ],
183
+ status: 'stable',
184
+ },
185
+ {
186
+ name: 'Typography',
187
+ slug: 'typography',
188
+ kind: 'component',
189
+ category: 'Typography',
190
+ description: 'The text and heading components that apply the type scale.',
191
+ source: 'src/components/ui/typography.tsx',
192
+ exports: ['Text', 'Heading'],
193
+ status: 'stable',
194
+ },
195
+ {
196
+ name: 'Kbd',
197
+ slug: 'kbd',
198
+ kind: 'component',
199
+ category: 'Typography',
200
+ description: 'The inline label for a keyboard key or shortcut.',
201
+ source: 'src/components/ui/kbd.tsx',
202
+ exports: ['Kbd'],
203
+ status: 'stable',
204
+ },
205
+ {
206
+ name: 'Diagram',
207
+ slug: 'diagram',
208
+ kind: 'component',
209
+ category: 'Data display',
210
+ description: 'Named things and the labelled relations between them, drawn as inline vector markup whose every stroke and fill is a token.',
211
+ source: 'src/components/ui/diagram.tsx',
212
+ exports: ['Diagram'],
213
+ status: 'stable',
214
+ },
215
+ {
216
+ name: 'ProductMark',
217
+ slug: 'product-mark',
218
+ kind: 'component',
219
+ category: 'Data display',
220
+ description: "A product's two-part colour mark: a brand-ink ring around the pack's own fill, beside the product's name in the brand ink.",
221
+ source: 'src/components/ui/product-mark.tsx',
222
+ exports: ['ProductMark'],
223
+ status: 'stable',
224
+ },
225
+ {
226
+ name: 'Prose',
227
+ slug: 'prose',
228
+ kind: 'component',
229
+ category: 'Typography',
230
+ description: 'Consumer-authored body copy held to the reading measure and to the block rhythm, so a document does not restate either.',
231
+ source: 'src/components/ui/prose.tsx',
232
+ exports: ['Prose'],
233
+ status: 'stable',
234
+ },
235
+ {
236
+ name: 'FactList',
237
+ slug: 'fact-list',
238
+ kind: 'component',
239
+ category: 'Data display',
240
+ description: 'A short list of named facts as a definition list, where a value may be a link and the term column stays aligned down its length.',
241
+ source: 'src/components/ui/fact-list.tsx',
242
+ exports: ['FactList'],
243
+ status: 'stable',
244
+ },
245
+ {
246
+ name: 'ProductSwitcher',
247
+ slug: 'product-switcher',
248
+ kind: 'component',
249
+ category: 'Layout',
250
+ description: 'A switch between the members of a set of products, each drawn with its own ProductMark and the current one marked aria-current.',
251
+ source: 'src/components/ui/product-switcher.tsx',
252
+ exports: ['ProductSwitcher'],
253
+ status: 'stable',
254
+ },
255
+ {
256
+ name: 'Select',
257
+ slug: 'select',
258
+ kind: 'component',
259
+ category: 'Forms and inputs',
260
+ description: 'The control that chooses one option from a list that opens on demand.',
261
+ source: 'src/components/ui/select.tsx',
262
+ exports: [
263
+ 'Select',
264
+ 'SelectTrigger',
265
+ 'SelectValue',
266
+ 'SelectContent',
267
+ 'SelectItem',
268
+ 'SelectGroup',
269
+ 'SelectLabel',
270
+ 'SelectSeparator',
271
+ ],
272
+ status: 'stable',
273
+ },
274
+ {
275
+ name: 'Checkbox',
276
+ slug: 'checkbox',
277
+ kind: 'component',
278
+ category: 'Forms and inputs',
279
+ description: 'The control for an independent yes-or-no choice, with an optional mixed state.',
280
+ source: 'src/components/ui/checkbox.tsx',
281
+ exports: ['Checkbox'],
282
+ status: 'stable',
283
+ },
284
+ {
285
+ name: 'RadioGroup',
286
+ slug: 'radio-group',
287
+ kind: 'component',
288
+ category: 'Forms and inputs',
289
+ description: 'The control that chooses exactly one option from a small visible set.',
290
+ source: 'src/components/ui/radio-group.tsx',
291
+ exports: ['RadioGroup', 'RadioGroupItem'],
292
+ status: 'stable',
293
+ },
294
+ {
295
+ name: 'Switch',
296
+ slug: 'switch',
297
+ kind: 'component',
298
+ category: 'Forms and inputs',
299
+ description: 'The control that turns a setting on or off immediately.',
300
+ source: 'src/components/ui/switch.tsx',
301
+ exports: ['Switch'],
302
+ status: 'stable',
303
+ },
304
+ {
305
+ name: 'Slider',
306
+ slug: 'slider',
307
+ kind: 'component',
308
+ category: 'Forms and inputs',
309
+ description: 'The control that chooses a number along a range.',
310
+ source: 'src/components/ui/slider.tsx',
311
+ exports: ['Slider'],
312
+ status: 'stable',
313
+ },
314
+ {
315
+ name: 'Progress',
316
+ slug: 'progress',
317
+ kind: 'component',
318
+ category: 'Feedback',
319
+ description: 'The bar that reports how far a task has progressed.',
320
+ source: 'src/components/ui/progress.tsx',
321
+ exports: ['Progress'],
322
+ status: 'stable',
323
+ },
324
+ {
325
+ name: 'Tooltip',
326
+ slug: 'tooltip',
327
+ kind: 'component',
328
+ category: 'Feedback',
329
+ description: 'The short label shown on hover or focus beside a control.',
330
+ source: 'src/components/ui/tooltip.tsx',
331
+ exports: ['Tooltip', 'TooltipTrigger', 'TooltipContent'],
332
+ status: 'stable',
333
+ },
334
+ {
335
+ name: 'Accordion',
336
+ slug: 'accordion',
337
+ kind: 'component',
338
+ category: 'Layout',
339
+ description: 'The stack of headers that each reveal a panel in place.',
340
+ source: 'src/components/ui/accordion.tsx',
341
+ exports: ['Accordion', 'AccordionItem', 'AccordionTrigger', 'AccordionContent'],
342
+ status: 'stable',
343
+ },
344
+ {
345
+ name: 'Dialog',
346
+ slug: 'dialog',
347
+ kind: 'component',
348
+ category: 'Layout',
349
+ description: 'The modal surface for a decision or a short task, with a side-anchored sheet variant.',
350
+ source: 'src/components/ui/dialog.tsx',
351
+ exports: [
352
+ 'Dialog',
353
+ 'DialogTrigger',
354
+ 'DialogContent',
355
+ 'DialogHeader',
356
+ 'DialogFooter',
357
+ 'DialogTitle',
358
+ 'DialogDescription',
359
+ 'DialogClose',
360
+ ],
361
+ status: 'stable',
362
+ },
363
+ {
364
+ name: 'DropdownMenu',
365
+ slug: 'dropdown-menu',
366
+ kind: 'component',
367
+ category: 'Layout',
368
+ description: 'The menu of actions and choices opened from one trigger.',
369
+ source: 'src/components/ui/dropdown-menu.tsx',
370
+ exports: [
371
+ 'DropdownMenu',
372
+ 'DropdownMenuTrigger',
373
+ 'DropdownMenuContent',
374
+ 'DropdownMenuItem',
375
+ 'DropdownMenuCheckboxItem',
376
+ 'DropdownMenuRadioGroup',
377
+ 'DropdownMenuRadioItem',
378
+ 'DropdownMenuLabel',
379
+ 'DropdownMenuSeparator',
380
+ 'DropdownMenuGroup',
381
+ 'DropdownMenuSub',
382
+ 'DropdownMenuSubTrigger',
383
+ 'DropdownMenuSubContent',
384
+ ],
385
+ status: 'stable',
386
+ },
387
+ {
388
+ name: 'Popover',
389
+ slug: 'popover',
390
+ kind: 'component',
391
+ category: 'Layout',
392
+ description: 'The anchored floating surface for content richer than a tooltip.',
393
+ source: 'src/components/ui/popover.tsx',
394
+ exports: ['Popover', 'PopoverTrigger', 'PopoverContent'],
395
+ status: 'stable',
396
+ },
397
+ {
398
+ name: 'Tabs',
399
+ slug: 'tabs',
400
+ kind: 'component',
401
+ category: 'Layout',
402
+ description: 'The set of peer views shown one at a time.',
403
+ source: 'src/components/ui/tabs.tsx',
404
+ exports: ['Tabs', 'TabsList', 'TabsTrigger', 'TabsContent'],
405
+ status: 'stable',
406
+ },
407
+ {
408
+ name: 'Avatar',
409
+ slug: 'avatar',
410
+ kind: 'component',
411
+ category: 'Data display',
412
+ description: 'The person or entity image with an initials fallback.',
413
+ source: 'src/components/ui/avatar.tsx',
414
+ exports: ['Avatar', 'AvatarImage', 'AvatarFallback'],
415
+ status: 'stable',
416
+ },
417
+ {
418
+ name: 'Hero01',
419
+ slug: 'hero-01',
420
+ kind: 'block',
421
+ category: null,
422
+ description: 'A centered marketing hero with an optional eyebrow and one or two actions.',
423
+ source: 'src/blocks/hero-01/index.tsx',
424
+ exports: ['Hero01'],
425
+ status: 'stable',
426
+ },
427
+ {
428
+ name: 'FeatureGrid01',
429
+ slug: 'feature-grid-01',
430
+ kind: 'block',
431
+ category: null,
432
+ description: 'A feature grid with optional icon tiles and a section heading.',
433
+ source: 'src/blocks/feature-grid-01/index.tsx',
434
+ exports: ['FeatureGrid01'],
435
+ status: 'stable',
436
+ },
437
+ {
438
+ name: 'Stats01',
439
+ slug: 'stats-01',
440
+ kind: 'block',
441
+ category: null,
442
+ description: 'A KPI row with optional directional deltas.',
443
+ source: 'src/blocks/stats-01/index.tsx',
444
+ exports: ['Stats01'],
445
+ status: 'stable',
446
+ },
447
+ {
448
+ name: 'Pricing01',
449
+ slug: 'pricing-01',
450
+ kind: 'block',
451
+ category: null,
452
+ description: 'A plan comparison with one highlighted tier.',
453
+ source: 'src/blocks/pricing-01/index.tsx',
454
+ exports: ['Pricing01'],
455
+ status: 'stable',
456
+ },
457
+ {
458
+ name: 'Cta01',
459
+ slug: 'cta-01',
460
+ kind: 'block',
461
+ category: null,
462
+ description: 'A closing call to action on a filled primary surface.',
463
+ source: 'src/blocks/cta-01/index.tsx',
464
+ exports: ['Cta01'],
465
+ status: 'stable',
466
+ },
467
+ {
468
+ name: 'PageHeader01',
469
+ slug: 'page-header-01',
470
+ kind: 'block',
471
+ category: null,
472
+ description: 'A page title band with a breadcrumb trail, a supporting line and a row of actions.',
473
+ source: 'src/blocks/page-header-01/index.tsx',
474
+ exports: ['PageHeader01'],
475
+ status: 'stable',
476
+ },
477
+ {
478
+ name: 'DataTable01',
479
+ slug: 'data-table-01',
480
+ kind: 'block',
481
+ category: null,
482
+ description: 'A table section with a toolbar, filters, row selection and pagination.',
483
+ source: 'src/blocks/data-table-01/index.tsx',
484
+ exports: ['DataTable01'],
485
+ status: 'stable',
486
+ },
487
+ {
488
+ name: 'SettingsPanel01',
489
+ slug: 'settings-panel-01',
490
+ kind: 'block',
491
+ category: null,
492
+ description: 'A settings form grouped into sections of text, select and switch fields.',
493
+ source: 'src/blocks/settings-panel-01/index.tsx',
494
+ exports: ['SettingsPanel01'],
495
+ status: 'stable',
496
+ },
497
+ {
498
+ name: 'AuthForm01',
499
+ slug: 'auth-form-01',
500
+ kind: 'block',
501
+ category: null,
502
+ description: 'A sign-in card with labelled credential fields, a remember control and an error slot.',
503
+ source: 'src/blocks/auth-form-01/index.tsx',
504
+ exports: ['AuthForm01'],
505
+ status: 'stable',
506
+ },
507
+ {
508
+ name: 'AppShell01',
509
+ slug: 'app-shell-01',
510
+ kind: 'block',
511
+ category: null,
512
+ description: 'A navigation shell with a desktop rail, a top bar and a mobile navigation sheet.',
513
+ source: 'src/blocks/app-shell-01/index.tsx',
514
+ exports: ['AppShell01'],
515
+ status: 'stable',
516
+ },
517
+ {
518
+ name: 'ProcessRail01',
519
+ slug: 'process-rail-01',
520
+ kind: 'block',
521
+ category: null,
522
+ description: 'A process drawn as a rail: two, three or four steps on one line, each with an ordinal, a name and one caption.',
523
+ source: 'src/blocks/process-rail-01/index.tsx',
524
+ exports: ['ProcessRail01'],
525
+ status: 'stable',
526
+ },
527
+ {
528
+ name: 'StatusLedger01',
529
+ slug: 'status-ledger-01',
530
+ kind: 'block',
531
+ category: null,
532
+ description: 'A ledger of things and the state each is in: a name, one of four status tiers and the words for that tier.',
533
+ source: 'src/blocks/status-ledger-01/index.tsx',
534
+ exports: ['StatusLedger01'],
535
+ status: 'stable',
536
+ },
537
+ {
538
+ name: 'ProductGrid01',
539
+ slug: 'product-grid-01',
540
+ kind: 'block',
541
+ category: null,
542
+ description: 'A set of products as hairline rows: a two-part ProductMark, a name, one tagline and a destination per row.',
543
+ source: 'src/blocks/product-grid-01/index.tsx',
544
+ exports: ['ProductGrid01'],
545
+ status: 'stable',
546
+ },
547
+ {
548
+ name: 'StackGrid01',
549
+ slug: 'stack-grid-01',
550
+ kind: 'block',
551
+ category: null,
552
+ description: 'A survey of what a product is assembled from, and a second grid of what it built itself.',
553
+ source: 'src/blocks/stack-grid-01/index.tsx',
554
+ exports: ['StackGrid01'],
555
+ status: 'stable',
556
+ },
557
+ {
558
+ name: 'LogoStrip01',
559
+ slug: 'logo-strip-01',
560
+ kind: 'block',
561
+ category: null,
562
+ description: 'A single line of short phrases: the transition band between a hero and the section that follows it.',
563
+ source: 'src/blocks/logo-strip-01/index.tsx',
564
+ exports: ['LogoStrip01'],
565
+ status: 'stable',
566
+ },
567
+ {
568
+ name: 'NoteGrid01',
569
+ slug: 'note-grid-01',
570
+ kind: 'block',
571
+ category: null,
572
+ description: 'A grid of short points: a title and a sentence or two, with no tile and no icon.',
573
+ source: 'src/blocks/note-grid-01/index.tsx',
574
+ exports: ['NoteGrid01'],
575
+ status: 'stable',
576
+ },
577
+ {
578
+ name: 'InstrumentPanel01',
579
+ slug: 'instrument-panel-01',
580
+ kind: 'block',
581
+ category: null,
582
+ description: 'A bordered panel with a titled bar, a state dot with the words beside it, and a slot for the instrument.',
583
+ source: 'src/blocks/instrument-panel-01/index.tsx',
584
+ exports: ['InstrumentPanel01'],
585
+ status: 'stable',
586
+ },
587
+ {
588
+ name: 'SiteHeader',
589
+ slug: 'site-header',
590
+ kind: 'block',
591
+ category: null,
592
+ description: 'The bar at the top of a product site: a brand lockup, an optional product switcher, the site navigation and a slot for application controls.',
593
+ source: 'src/blocks/site-header/index.tsx',
594
+ exports: ['SiteHeader'],
595
+ status: 'stable',
596
+ },
597
+ {
598
+ name: 'SiteFooter',
599
+ slug: 'site-footer',
600
+ kind: 'block',
601
+ category: null,
602
+ description: 'The block at the foot of a product site: a brand lockup, grouped destinations, the links that leave the site and a slot for the legal line.',
603
+ source: 'src/blocks/site-footer/index.tsx',
604
+ exports: ['SiteFooter'],
605
+ status: 'stable',
606
+ },
607
+ {
608
+ name: 'MarketingPage',
609
+ slug: 'marketing-page',
610
+ kind: 'page',
611
+ category: null,
612
+ description: 'A complete marketing page composing a hero, a feature grid, a KPI row, a plan comparison and a closing call to action.',
613
+ source: 'src/pages/marketing-page/index.tsx',
614
+ exports: ['MarketingPage'],
615
+ status: 'stable',
616
+ },
617
+ {
618
+ name: 'DashboardPage',
619
+ slug: 'dashboard-page',
620
+ kind: 'page',
621
+ category: null,
622
+ description: 'A full dashboard screen composing the app shell, a page header, a KPI row and a data table.',
623
+ source: 'src/pages/dashboard-page/index.tsx',
624
+ exports: ['DashboardPage'],
625
+ status: 'stable',
626
+ },
627
+ {
628
+ name: 'SettingsPage',
629
+ slug: 'settings-page',
630
+ kind: 'page',
631
+ category: null,
632
+ description: 'A full settings screen composing the app shell, a page header and tabs of grouped settings forms.',
633
+ source: 'src/pages/settings-page/index.tsx',
634
+ exports: ['SettingsPage'],
635
+ status: 'stable',
636
+ },
637
+ {
638
+ name: 'AuthPage',
639
+ slug: 'auth-page',
640
+ kind: 'page',
641
+ category: null,
642
+ description: 'A full authentication screen composing a sign-in form with an optional supporting card.',
643
+ source: 'src/pages/auth-page/index.tsx',
644
+ exports: ['AuthPage'],
645
+ status: 'stable',
646
+ },
647
+ {
648
+ name: 'NotFoundPage',
649
+ slug: 'not-found-page',
650
+ kind: 'page',
651
+ category: null,
652
+ description: 'A complete not-found screen: the status code as the heading of the page, one sentence about what happened, and the ways out.',
653
+ source: 'src/pages/not-found-page/index.tsx',
654
+ exports: ['NotFoundPage'],
655
+ status: 'stable',
656
+ },
657
+ {
658
+ name: 'BlogPostPage',
659
+ slug: 'blog-post-page',
660
+ kind: 'page',
661
+ category: null,
662
+ description: 'A complete blog post screen: title, standfirst, byline with both the display and the machine date, the body at the measure and the trail to the neighbouring posts.',
663
+ source: 'src/pages/blog-post-page/index.tsx',
664
+ exports: ['BlogPostPage'],
665
+ status: 'stable',
666
+ },
667
+ ];
668
+ /** Returns the catalogue ordered for display and keyed for lookup. */
669
+ export function buildCatalog(items = catalog) {
670
+ return [...items].sort((a, b) => a.name.localeCompare(b.name));
671
+ }
672
+ export const catalogBySlug = new Map(catalog.map((item) => [item.slug, item]));