@krizaka/ui 2.6.0 → 2.9.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 (331) hide show
  1. package/README.md +37 -4
  2. package/dist/achievement.d.ts +54 -0
  3. package/dist/achievement.js +73 -0
  4. package/dist/achievement.js.map +1 -0
  5. package/dist/app-shell.d.ts +203 -0
  6. package/dist/app-shell.js +137 -0
  7. package/dist/app-shell.js.map +1 -0
  8. package/dist/auth-layout.d.ts +136 -0
  9. package/dist/auth-layout.js +75 -0
  10. package/dist/auth-layout.js.map +1 -0
  11. package/dist/choice-grid.d.ts +84 -0
  12. package/dist/choice-grid.js +141 -0
  13. package/dist/choice-grid.js.map +1 -0
  14. package/dist/chunk-555LWYIN.js +11 -0
  15. package/dist/chunk-555LWYIN.js.map +1 -0
  16. package/dist/chunk-AZPKXP3O.js +36 -0
  17. package/dist/chunk-AZPKXP3O.js.map +1 -0
  18. package/dist/chunk-NOVUREEC.js +274 -0
  19. package/dist/chunk-NOVUREEC.js.map +1 -0
  20. package/dist/chunk-VCAAHCHL.js +17 -0
  21. package/dist/chunk-VCAAHCHL.js.map +1 -0
  22. package/dist/code-block.js +23 -44
  23. package/dist/code-block.js.map +1 -1
  24. package/dist/continue-prompt.d.ts +48 -0
  25. package/dist/continue-prompt.js +200 -0
  26. package/dist/continue-prompt.js.map +1 -0
  27. package/dist/dashboard-layout.d.ts +139 -0
  28. package/dist/dashboard-layout.js +68 -0
  29. package/dist/dashboard-layout.js.map +1 -0
  30. package/dist/detail-layout.d.ts +126 -0
  31. package/dist/detail-layout.js +48 -0
  32. package/dist/detail-layout.js.map +1 -0
  33. package/dist/docs-layout.d.ts +78 -0
  34. package/dist/docs-layout.js +60 -0
  35. package/dist/docs-layout.js.map +1 -0
  36. package/dist/geometry-CXrAW34x.d.ts +19 -0
  37. package/dist/goal-gauge.d.ts +38 -0
  38. package/dist/goal-gauge.js +53 -0
  39. package/dist/goal-gauge.js.map +1 -0
  40. package/dist/index.d.ts +11 -2
  41. package/dist/index.js +89 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/landscape.d.ts +41 -0
  44. package/dist/landscape.js +836 -0
  45. package/dist/landscape.js.map +1 -0
  46. package/dist/marketing-layout.d.ts +60 -0
  47. package/dist/marketing-layout.js +25 -0
  48. package/dist/marketing-layout.js.map +1 -0
  49. package/dist/mascot-quote.d.ts +4 -3
  50. package/dist/mascot-quote.js +21 -1
  51. package/dist/mascot-quote.js.map +1 -1
  52. package/dist/mascot-state.d.ts +128 -0
  53. package/dist/mascot-state.js +95 -0
  54. package/dist/mascot-state.js.map +1 -0
  55. package/dist/mascots.d.ts +18 -20
  56. package/dist/mascots.js +65 -221
  57. package/dist/mascots.js.map +1 -1
  58. package/dist/native.d.ts +124 -7
  59. package/dist/native.js +641 -239
  60. package/dist/native.js.map +1 -1
  61. package/dist/profile-card.d.ts +85 -0
  62. package/dist/profile-card.js +87 -0
  63. package/dist/profile-card.js.map +1 -0
  64. package/dist/promise-card.d.ts +28 -0
  65. package/dist/promise-card.js +29 -0
  66. package/dist/promise-card.js.map +1 -0
  67. package/dist/scroll-stage.d.ts +603 -0
  68. package/dist/scroll-stage.js +59 -0
  69. package/dist/scroll-stage.js.map +1 -0
  70. package/dist/settings-layout.d.ts +154 -0
  71. package/dist/settings-layout.js +57 -0
  72. package/dist/settings-layout.js.map +1 -0
  73. package/dist/split-view.d.ts +106 -0
  74. package/dist/split-view.js +41 -0
  75. package/dist/split-view.js.map +1 -0
  76. package/dist/stage-banner.d.ts +34 -0
  77. package/dist/stage-banner.js +26 -0
  78. package/dist/stage-banner.js.map +1 -0
  79. package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
  80. package/dist/story.css +432 -0
  81. package/package.json +267 -10
  82. package/registry/achievement.json +322 -0
  83. package/registry/action-bar.json +1 -1
  84. package/registry/alert.json +1 -1
  85. package/registry/app-shell.json +451 -0
  86. package/registry/argument-card.json +1 -1
  87. package/registry/audio-player.json +1 -1
  88. package/registry/auth-layout.json +230 -0
  89. package/registry/avatar.json +1 -1
  90. package/registry/badge.json +1 -1
  91. package/registry/button.json +5 -5
  92. package/registry/card-grid.json +5 -5
  93. package/registry/card.json +3 -3
  94. package/registry/checkbox.json +1 -1
  95. package/registry/chip-link.json +1 -1
  96. package/registry/chip.json +1 -1
  97. package/registry/choice-grid.json +318 -0
  98. package/registry/code-block.json +1 -1
  99. package/registry/combobox.json +1 -1
  100. package/registry/command.json +1 -1
  101. package/registry/confirm-button.json +3 -3
  102. package/registry/continue-prompt.json +312 -0
  103. package/registry/countdown.json +1 -1
  104. package/registry/cta-panel.json +1 -1
  105. package/registry/dashboard-layout.json +273 -0
  106. package/registry/data-table.json +1 -1
  107. package/registry/date-picker.json +1 -1
  108. package/registry/decision-list.json +1 -1
  109. package/registry/detail-layout.json +233 -0
  110. package/registry/dialog.json +1 -1
  111. package/registry/docs-layout.json +148 -0
  112. package/registry/dropdown-menu.json +3 -3
  113. package/registry/empty-state.json +1 -1
  114. package/registry/examples/achievement/arcade.d.ts +4 -0
  115. package/registry/examples/achievement/arcade.js +15 -0
  116. package/registry/examples/achievement/arcade.tsx +12 -0
  117. package/registry/examples/achievement/milestones.d.ts +4 -0
  118. package/registry/examples/achievement/milestones.js +15 -0
  119. package/registry/examples/achievement/milestones.tsx +12 -0
  120. package/registry/examples/app-shell/admin-console.d.ts +4 -0
  121. package/registry/examples/app-shell/admin-console.js +52 -0
  122. package/registry/examples/app-shell/admin-console.tsx +64 -0
  123. package/registry/examples/app-shell/basic.d.ts +4 -0
  124. package/registry/examples/app-shell/basic.js +37 -0
  125. package/registry/examples/app-shell/basic.tsx +31 -0
  126. package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
  127. package/registry/examples/app-shell/orochia-studio.js +89 -0
  128. package/registry/examples/app-shell/orochia-studio.tsx +101 -0
  129. package/registry/examples/auth-layout/onboarding.d.ts +4 -0
  130. package/registry/examples/auth-layout/onboarding.js +56 -0
  131. package/registry/examples/auth-layout/onboarding.tsx +47 -0
  132. package/registry/examples/auth-layout/sign-in.d.ts +4 -0
  133. package/registry/examples/auth-layout/sign-in.js +55 -0
  134. package/registry/examples/auth-layout/sign-in.tsx +47 -0
  135. package/registry/examples/auth-layout/verify.d.ts +4 -0
  136. package/registry/examples/auth-layout/verify.js +23 -0
  137. package/registry/examples/auth-layout/verify.tsx +19 -0
  138. package/registry/examples/choice-grid/line-up.d.ts +4 -0
  139. package/registry/examples/choice-grid/line-up.js +37 -0
  140. package/registry/examples/choice-grid/line-up.tsx +32 -0
  141. package/registry/examples/choice-grid/plans.d.ts +4 -0
  142. package/registry/examples/choice-grid/plans.js +28 -0
  143. package/registry/examples/choice-grid/plans.tsx +24 -0
  144. package/registry/examples/continue-prompt/arcade.d.ts +4 -0
  145. package/registry/examples/continue-prompt/arcade.js +28 -0
  146. package/registry/examples/continue-prompt/arcade.tsx +25 -0
  147. package/registry/examples/continue-prompt/offer.d.ts +4 -0
  148. package/registry/examples/continue-prompt/offer.js +24 -0
  149. package/registry/examples/continue-prompt/offer.tsx +19 -0
  150. package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
  151. package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
  152. package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
  153. package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
  154. package/registry/examples/dashboard-layout/widgets.js +17 -0
  155. package/registry/examples/dashboard-layout/widgets.tsx +22 -0
  156. package/registry/examples/detail-layout/job.d.ts +4 -0
  157. package/registry/examples/detail-layout/job.js +25 -0
  158. package/registry/examples/detail-layout/job.tsx +20 -0
  159. package/registry/examples/detail-layout/video.d.ts +4 -0
  160. package/registry/examples/detail-layout/video.js +44 -0
  161. package/registry/examples/detail-layout/video.tsx +53 -0
  162. package/registry/examples/docs-layout/page.d.ts +4 -0
  163. package/registry/examples/docs-layout/page.js +26 -0
  164. package/registry/examples/docs-layout/page.tsx +30 -0
  165. package/registry/examples/goal-gauge/arcade.d.ts +4 -0
  166. package/registry/examples/goal-gauge/arcade.js +11 -0
  167. package/registry/examples/goal-gauge/arcade.tsx +10 -0
  168. package/registry/examples/goal-gauge/challenge.d.ts +4 -0
  169. package/registry/examples/goal-gauge/challenge.js +11 -0
  170. package/registry/examples/goal-gauge/challenge.tsx +10 -0
  171. package/registry/examples/goal-gauge/drain.d.ts +4 -0
  172. package/registry/examples/goal-gauge/drain.js +11 -0
  173. package/registry/examples/goal-gauge/drain.tsx +10 -0
  174. package/registry/examples/goal-gauge/native/default.d.ts +4 -0
  175. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  176. package/registry/examples/goal-gauge/native/default.js +15 -0
  177. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  178. package/registry/examples/goal-gauge/native/default.tsx +12 -0
  179. package/registry/examples/landscape/backdrop.d.ts +4 -0
  180. package/registry/examples/landscape/backdrop.js +14 -0
  181. package/registry/examples/landscape/backdrop.tsx +11 -0
  182. package/registry/examples/landscape/brand.d.ts +4 -0
  183. package/registry/examples/landscape/brand.js +11 -0
  184. package/registry/examples/landscape/brand.tsx +10 -0
  185. package/registry/examples/marketing-layout/basic.d.ts +4 -0
  186. package/registry/examples/marketing-layout/basic.js +31 -0
  187. package/registry/examples/marketing-layout/basic.tsx +28 -0
  188. package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
  189. package/registry/examples/marketing-layout/docs-hub.js +37 -0
  190. package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
  191. package/registry/examples/marketing-layout/pricing.d.ts +4 -0
  192. package/registry/examples/marketing-layout/pricing.js +45 -0
  193. package/registry/examples/marketing-layout/pricing.tsx +55 -0
  194. package/registry/examples/marketing-layout/product-page.d.ts +4 -0
  195. package/registry/examples/marketing-layout/product-page.js +79 -0
  196. package/registry/examples/marketing-layout/product-page.tsx +83 -0
  197. package/registry/examples/mascot-state/empty.d.ts +4 -0
  198. package/registry/examples/mascot-state/empty.js +22 -0
  199. package/registry/examples/mascot-state/empty.tsx +20 -0
  200. package/registry/examples/mascot-state/error.d.ts +4 -0
  201. package/registry/examples/mascot-state/error.js +23 -0
  202. package/registry/examples/mascot-state/error.tsx +21 -0
  203. package/registry/examples/mascot-state/loading.d.ts +4 -0
  204. package/registry/examples/mascot-state/loading.js +22 -0
  205. package/registry/examples/mascot-state/loading.tsx +16 -0
  206. package/registry/examples/mascot-state/native/default.d.ts +4 -0
  207. package/registry/examples/mascot-state/native/default.dark.png +0 -0
  208. package/registry/examples/mascot-state/native/default.js +25 -0
  209. package/registry/examples/mascot-state/native/default.light.png +0 -0
  210. package/registry/examples/mascot-state/native/default.tsx +19 -0
  211. package/registry/examples/mascot-state/success.d.ts +4 -0
  212. package/registry/examples/mascot-state/success.js +21 -0
  213. package/registry/examples/mascot-state/success.tsx +19 -0
  214. package/registry/examples/mascot-state/welcome.d.ts +4 -0
  215. package/registry/examples/mascot-state/welcome.js +21 -0
  216. package/registry/examples/mascot-state/welcome.tsx +19 -0
  217. package/registry/examples/mascots/flock.tsx +1 -1
  218. package/registry/examples/mascots/lovebird.d.ts +4 -0
  219. package/registry/examples/mascots/lovebird.js +19 -0
  220. package/registry/examples/mascots/lovebird.tsx +18 -0
  221. package/registry/examples/mascots/native/lovebird.d.ts +4 -0
  222. package/registry/examples/mascots/native/lovebird.dark.png +0 -0
  223. package/registry/examples/mascots/native/lovebird.js +21 -0
  224. package/registry/examples/mascots/native/lovebird.light.png +0 -0
  225. package/registry/examples/mascots/native/lovebird.tsx +18 -0
  226. package/registry/examples/mascots/native/phoenix.d.ts +4 -0
  227. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  228. package/registry/examples/mascots/native/phoenix.js +21 -0
  229. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  230. package/registry/examples/mascots/native/phoenix.tsx +18 -0
  231. package/registry/examples/mascots/phoenix.d.ts +4 -0
  232. package/registry/examples/mascots/phoenix.js +14 -0
  233. package/registry/examples/mascots/phoenix.tsx +11 -0
  234. package/registry/examples/profile-card/arcade.d.ts +4 -0
  235. package/registry/examples/profile-card/arcade.js +25 -0
  236. package/registry/examples/profile-card/arcade.tsx +19 -0
  237. package/registry/examples/profile-card/creator.d.ts +4 -0
  238. package/registry/examples/profile-card/creator.js +31 -0
  239. package/registry/examples/profile-card/creator.tsx +26 -0
  240. package/registry/examples/profile-card/match.d.ts +4 -0
  241. package/registry/examples/profile-card/match.js +25 -0
  242. package/registry/examples/profile-card/match.tsx +19 -0
  243. package/registry/examples/profile-card/native/default.d.ts +4 -0
  244. package/registry/examples/profile-card/native/default.dark.png +0 -0
  245. package/registry/examples/profile-card/native/default.js +27 -0
  246. package/registry/examples/profile-card/native/default.light.png +0 -0
  247. package/registry/examples/profile-card/native/default.tsx +22 -0
  248. package/registry/examples/promise-card/arcade.d.ts +4 -0
  249. package/registry/examples/promise-card/arcade.js +25 -0
  250. package/registry/examples/promise-card/arcade.tsx +19 -0
  251. package/registry/examples/promise-card/guarantee.d.ts +4 -0
  252. package/registry/examples/promise-card/guarantee.js +23 -0
  253. package/registry/examples/promise-card/guarantee.tsx +17 -0
  254. package/registry/examples/scroll-stage/arcade.d.ts +4 -0
  255. package/registry/examples/scroll-stage/arcade.js +16 -0
  256. package/registry/examples/scroll-stage/arcade.tsx +15 -0
  257. package/registry/examples/scroll-stage/chapters.d.ts +4 -0
  258. package/registry/examples/scroll-stage/chapters.js +25 -0
  259. package/registry/examples/scroll-stage/chapters.tsx +22 -0
  260. package/registry/examples/settings-layout/account.d.ts +4 -0
  261. package/registry/examples/settings-layout/account.js +51 -0
  262. package/registry/examples/settings-layout/account.tsx +50 -0
  263. package/registry/examples/settings-layout/sections.d.ts +4 -0
  264. package/registry/examples/settings-layout/sections.js +27 -0
  265. package/registry/examples/settings-layout/sections.tsx +24 -0
  266. package/registry/examples/split-view/empty.d.ts +4 -0
  267. package/registry/examples/split-view/empty.js +19 -0
  268. package/registry/examples/split-view/empty.tsx +13 -0
  269. package/registry/examples/split-view/messages.d.ts +4 -0
  270. package/registry/examples/split-view/messages.js +49 -0
  271. package/registry/examples/split-view/messages.tsx +52 -0
  272. package/registry/examples/stage-banner/round.d.ts +4 -0
  273. package/registry/examples/stage-banner/round.js +14 -0
  274. package/registry/examples/stage-banner/round.tsx +11 -0
  275. package/registry/examples/stage-banner/steps.d.ts +4 -0
  276. package/registry/examples/stage-banner/steps.js +14 -0
  277. package/registry/examples/stage-banner/steps.tsx +11 -0
  278. package/registry/field.json +1 -1
  279. package/registry/file-upload.json +1 -1
  280. package/registry/filter-bar.json +1 -1
  281. package/registry/glow-card.json +1 -1
  282. package/registry/goal-gauge.json +322 -0
  283. package/registry/image-cropper.json +1 -1
  284. package/registry/index.json +337 -5
  285. package/registry/iso.json +1 -1
  286. package/registry/kbd.json +1 -1
  287. package/registry/landscape.json +189 -0
  288. package/registry/link-card.json +1 -1
  289. package/registry/loader.json +1 -1
  290. package/registry/marketing-layout.json +172 -0
  291. package/registry/marquee.json +1 -1
  292. package/registry/mascot-quote.json +6 -6
  293. package/registry/mascot-state.json +1249 -0
  294. package/registry/mascots.json +140 -23
  295. package/registry/media-capture.json +1 -1
  296. package/registry/meter.json +1 -1
  297. package/registry/nav-bar.json +1 -1
  298. package/registry/number-ticker.json +1 -1
  299. package/registry/page-header.json +1 -1
  300. package/registry/page-hero.json +3 -3
  301. package/registry/page.json +5 -5
  302. package/registry/pagination.json +1 -1
  303. package/registry/pointer-light.json +1 -1
  304. package/registry/popover.json +1 -1
  305. package/registry/profile-card.json +501 -0
  306. package/registry/progress.json +1 -1
  307. package/registry/promise-card.json +228 -0
  308. package/registry/radio-group.json +1 -1
  309. package/registry/scroll-stage.json +197 -0
  310. package/registry/search-field.json +1 -1
  311. package/registry/section-backdrop.json +1 -1
  312. package/registry/separator.json +1 -1
  313. package/registry/settings-layout.json +231 -0
  314. package/registry/skeleton.json +1 -1
  315. package/registry/slider.json +1 -1
  316. package/registry/slot.json +1 -1
  317. package/registry/spinner.json +1 -1
  318. package/registry/split-view.json +233 -0
  319. package/registry/stage-banner.json +221 -0
  320. package/registry/stat.json +1 -1
  321. package/registry/stepper.json +1 -1
  322. package/registry/switch.json +1 -1
  323. package/registry/tabs.json +1 -1
  324. package/registry/tag-input.json +1 -1
  325. package/registry/terminal-replay.json +1 -1
  326. package/registry/theme.json +1 -1
  327. package/registry/toast.json +1 -1
  328. package/registry/toc.json +1 -1
  329. package/registry/tooltip.json +1 -1
  330. package/registry/video-player.json +1 -1
  331. package/registry/video-trimmer.json +1 -1
@@ -0,0 +1,20 @@
1
+ import { Badge } from "@krizaka/ui/badge";
2
+ import { Button } from "@krizaka/ui/button";
3
+ import { DetailLayout } from "@krizaka/ui/detail-layout";
4
+
5
+ // Without tabs or side panel: an object's header and its content.
6
+ export default function DetailLayoutJob() {
7
+ return (
8
+ <DetailLayout
9
+ className="w-full"
10
+ back={<a href="#jobs">← Jobs</a>}
11
+ eyebrow="Job · job-4822"
12
+ title="Podcast transcript"
13
+ status={<Badge tone="accent" dot>Running</Badge>}
14
+ meta="Whisper large · started 5 min ago"
15
+ actions={<Button size="sm" variant="danger" shape="cut">Cancel</Button>}
16
+ >
17
+ <p className="text-sm text-fg-secondary">The transcript appears here as it is written.</p>
18
+ </DetailLayout>
19
+ );
20
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+
3
+ // registry/examples/detail-layout/video.tsx
4
+ import { Badge } from "@krizaka/ui/badge";
5
+ import { Button } from "@krizaka/ui/button";
6
+ import { DetailLayout } from "@krizaka/ui/detail-layout";
7
+ import { Facts } from "@krizaka/ui/page";
8
+ import { Stat } from "@krizaka/ui/stat";
9
+ import { Tabs } from "@krizaka/ui/tabs";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ function DetailLayoutVideo() {
12
+ return /* @__PURE__ */ jsx("div", { className: "brand-orochia w-full", children: /* @__PURE__ */ jsx(Tabs.Root, { defaultValue: "overview", children: /* @__PURE__ */ jsxs(
13
+ DetailLayout,
14
+ {
15
+ back: /* @__PURE__ */ jsx("a", { href: "#videos", children: "\u2190 Videos" }),
16
+ media: /* @__PURE__ */ jsx("div", { className: "aspect-video w-40 bg-linear-to-br from-accent to-accent-2" }),
17
+ eyebrow: "Video \xB7 v-2087",
18
+ title: "Night shoot, part 2",
19
+ status: /* @__PURE__ */ jsx(Badge, { tone: "success", dot: true, children: "Published" }),
20
+ meta: /* @__PURE__ */ jsx(Facts, { items: [{ label: "12:48" }, { label: "Unlock \u20AC4.99" }, { label: "18+ checked", tone: "ok" }] }),
21
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
22
+ /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", shape: "cut", children: "Edit" }),
23
+ /* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", shape: "cut", children: "Share" })
24
+ ] }),
25
+ tabs: /* @__PURE__ */ jsxs(Tabs.List, { "aria-label": "Video", children: [
26
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "overview", children: "Overview" }),
27
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "sales", children: "Sales" }),
28
+ /* @__PURE__ */ jsx(Tabs.Trigger, { value: "comments", children: "Comments" })
29
+ ] }),
30
+ aside: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 rounded-xl border border-border-default bg-surface-1 p-4", children: [
31
+ /* @__PURE__ */ jsx(Stat, { label: "Unlocks", value: "146", trend: "up", trendLabel: "+12", hint: "7 days" }),
32
+ /* @__PURE__ */ jsx(Stat, { label: "Earned", value: "\u20AC653", hint: "after the 10 % fee" })
33
+ ] }),
34
+ children: [
35
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "overview", className: "text-sm leading-relaxed text-fg-secondary", children: "The second half of the night shoot in Old Montr\xE9al: the rooftop, the rain, the last take at dawn." }),
36
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "sales", className: "text-sm text-fg-secondary", children: "146 unlocks, 3 tips." }),
37
+ /* @__PURE__ */ jsx(Tabs.Content, { value: "comments", className: "text-sm text-fg-secondary", children: "28 comments, 2 waiting for moderation." })
38
+ ]
39
+ }
40
+ ) }) });
41
+ }
42
+ export {
43
+ DetailLayoutVideo as default
44
+ };
@@ -0,0 +1,53 @@
1
+ "use client";
2
+
3
+ import { Badge } from "@krizaka/ui/badge";
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { DetailLayout } from "@krizaka/ui/detail-layout";
6
+ import { Facts } from "@krizaka/ui/page";
7
+ import { Stat } from "@krizaka/ui/stat";
8
+ import { Tabs } from "@krizaka/ui/tabs";
9
+
10
+ // TEMPLATE — one video in Orochia's studio: the way back to the list, its thumbnail, title and status, its facts, the
11
+ // actions; the tabs (overview · sales · comments); the side panel with the price and the audience — under the content on
12
+ // a phone, where the actions wrap under the title.
13
+ export default function DetailLayoutVideo() {
14
+ return (
15
+ <div className="brand-orochia w-full">
16
+ <Tabs.Root defaultValue="overview">
17
+ <DetailLayout
18
+ back={<a href="#videos">← Videos</a>}
19
+ media={<div className="aspect-video w-40 bg-linear-to-br from-accent to-accent-2" />}
20
+ eyebrow="Video · v-2087"
21
+ title="Night shoot, part 2"
22
+ status={<Badge tone="success" dot>Published</Badge>}
23
+ meta={<Facts items={[{ label: "12:48" }, { label: "Unlock €4.99" }, { label: "18+ checked", tone: "ok" }]} />}
24
+ actions={
25
+ <>
26
+ <Button size="sm" variant="secondary" shape="cut">Edit</Button>
27
+ <Button size="sm" variant="primary" shape="cut">Share</Button>
28
+ </>
29
+ }
30
+ tabs={
31
+ <Tabs.List aria-label="Video">
32
+ <Tabs.Trigger value="overview">Overview</Tabs.Trigger>
33
+ <Tabs.Trigger value="sales">Sales</Tabs.Trigger>
34
+ <Tabs.Trigger value="comments">Comments</Tabs.Trigger>
35
+ </Tabs.List>
36
+ }
37
+ aside={
38
+ <div className="flex flex-col gap-4 rounded-xl border border-border-default bg-surface-1 p-4">
39
+ <Stat label="Unlocks" value="146" trend="up" trendLabel="+12" hint="7 days" />
40
+ <Stat label="Earned" value="€653" hint="after the 10 % fee" />
41
+ </div>
42
+ }
43
+ >
44
+ <Tabs.Content value="overview" className="text-sm leading-relaxed text-fg-secondary">
45
+ The second half of the night shoot in Old Montréal: the rooftop, the rain, the last take at dawn.
46
+ </Tabs.Content>
47
+ <Tabs.Content value="sales" className="text-sm text-fg-secondary">146 unlocks, 3 tips.</Tabs.Content>
48
+ <Tabs.Content value="comments" className="text-sm text-fg-secondary">28 comments, 2 waiting for moderation.</Tabs.Content>
49
+ </DetailLayout>
50
+ </Tabs.Root>
51
+ </div>
52
+ );
53
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,26 @@
1
+ "use client";
2
+
3
+ // registry/examples/docs-layout/page.tsx
4
+ import { DocsLayout } from "@krizaka/ui/docs-layout";
5
+ import { Toc } from "@krizaka/ui/toc";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ var PAGES = ["Getting started", "Architecture", "API reference"];
8
+ function DocsLayoutPage() {
9
+ return /* @__PURE__ */ jsxs(
10
+ DocsLayout,
11
+ {
12
+ className: "pt-6",
13
+ sidebarLabel: "Pages of the documentation",
14
+ sidebar: /* @__PURE__ */ jsx("nav", { "aria-label": "Documentation", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1 text-sm", children: PAGES.map((p, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: `#${i}`, "aria-current": i === 0 ? "page" : void 0, className: "block rounded-md px-3 py-2 text-fg-secondary no-underline hover:bg-surface-2 aria-[current=page]:bg-accent-soft aria-[current=page]:text-fg", children: p }) }, p)) }) }),
15
+ toc: /* @__PURE__ */ jsx(Toc, { label: "On this page", items: [{ id: "install", label: "Install" }, { id: "run", label: "Run" }] }),
16
+ children: [
17
+ /* @__PURE__ */ jsx("h1", { className: "font-display text-3xl font-extrabold text-fg", children: "Getting started" }),
18
+ /* @__PURE__ */ jsx("h2", { id: "install", className: "mt-6 text-xl font-bold text-fg", children: "Install" }),
19
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-fg-secondary", children: "npx orazaka install" })
20
+ ]
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ DocsLayoutPage as default
26
+ };
@@ -0,0 +1,30 @@
1
+ import { DocsLayout } from "@krizaka/ui/docs-layout";
2
+ import { Toc } from "@krizaka/ui/toc";
3
+
4
+ const PAGES = ["Getting started", "Architecture", "API reference"];
5
+
6
+ // A documentation page in the site's frame: pages · article · contents; on a phone the pages fold above the article.
7
+ export default function DocsLayoutPage() {
8
+ return (
9
+ <DocsLayout
10
+ className="pt-6"
11
+ sidebarLabel="Pages of the documentation"
12
+ sidebar={
13
+ <nav aria-label="Documentation">
14
+ <ul className="flex flex-col gap-1 text-sm">
15
+ {PAGES.map((p, i) => (
16
+ <li key={p}>
17
+ <a href={`#${i}`} aria-current={i === 0 ? "page" : undefined} className="block rounded-md px-3 py-2 text-fg-secondary no-underline hover:bg-surface-2 aria-[current=page]:bg-accent-soft aria-[current=page]:text-fg">{p}</a>
18
+ </li>
19
+ ))}
20
+ </ul>
21
+ </nav>
22
+ }
23
+ toc={<Toc label="On this page" items={[{ id: "install", label: "Install" }, { id: "run", label: "Run" }]} />}
24
+ >
25
+ <h1 className="font-display text-3xl font-extrabold text-fg">Getting started</h1>
26
+ <h2 id="install" className="mt-6 text-xl font-bold text-fg">Install</h2>
27
+ <p className="mt-2 text-sm text-fg-secondary">npx orazaka install</p>
28
+ </DocsLayout>
29
+ );
30
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,11 @@
1
+ "use client";
2
+
3
+ // registry/examples/goal-gauge/arcade.tsx
4
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function GoalGaugeArcade() {
7
+ return /* @__PURE__ */ jsx("div", { className: "w-96 brand-orochia", children: /* @__PURE__ */ jsx(GoalGauge, { variant: "arcade", label: "Boss gauge", segments: 8, value: 0, mode: "drain", valueText: "All eight sealed" }) });
8
+ }
9
+ export {
10
+ GoalGaugeArcade as default
11
+ };
@@ -0,0 +1,10 @@
1
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
2
+
3
+ // The boss gauge: a skewed frame, gradient cells, the label centred — every head sealed, the gauge empty.
4
+ export default function GoalGaugeArcade() {
5
+ return (
6
+ <div className="w-96 brand-orochia">
7
+ <GoalGauge variant="arcade" label="Boss gauge" segments={8} value={0} mode="drain" valueText="All eight sealed" />
8
+ </div>
9
+ );
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,11 @@
1
+ "use client";
2
+
3
+ // registry/examples/goal-gauge/challenge.tsx
4
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function GoalGaugeChallenge() {
7
+ return /* @__PURE__ */ jsx("div", { className: "w-80", children: /* @__PURE__ */ jsx(GoalGauge, { label: "Backers", segments: 10, value: 6, valueText: "6 of 10 backers" }) });
8
+ }
9
+ export {
10
+ GoalGaugeChallenge as default
11
+ };
@@ -0,0 +1,10 @@
1
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
2
+
3
+ // A challenge's goal: 6 backers of 10 — the reached steps light one by one when its scene plays.
4
+ export default function GoalGaugeChallenge() {
5
+ return (
6
+ <div className="w-80">
7
+ <GoalGauge label="Backers" segments={10} value={6} valueText="6 of 10 backers" />
8
+ </div>
9
+ );
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,11 @@
1
+ "use client";
2
+
3
+ // registry/examples/goal-gauge/drain.tsx
4
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function GoalGaugeDrain() {
7
+ return /* @__PURE__ */ jsx("div", { className: "w-80", children: /* @__PURE__ */ jsx(GoalGauge, { label: "Seats left", segments: 12, value: 3, mode: "drain", valueText: "3 seats left" }) });
8
+ }
9
+ export {
10
+ GoalGaugeDrain as default
11
+ };
@@ -0,0 +1,10 @@
1
+ import { GoalGauge } from "@krizaka/ui/goal-gauge";
2
+
3
+ // `mode="drain"`: what is left — the spent steps empty one by one (seats, tickets, problems still standing).
4
+ export default function GoalGaugeDrain() {
5
+ return (
6
+ <div className="w-80">
7
+ <GoalGauge label="Seats left" segments={12} value={3} mode="drain" valueText="3 seats left" />
8
+ </div>
9
+ );
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ // registry/examples/goal-gauge/native/default.tsx
4
+ import { GoalGauge } from "@krizaka/ui/native";
5
+ import { View } from "react-native";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function NativeGoalGaugeDefault() {
8
+ return /* @__PURE__ */ jsxs(View, { style: { width: 300, gap: 18 }, children: [
9
+ /* @__PURE__ */ jsx(GoalGauge, { label: "Backers", segments: 10, value: 6, valueText: "6 of 10 backers", animated: false }),
10
+ /* @__PURE__ */ jsx(GoalGauge, { label: "Seats left", segments: 12, value: 3, mode: "drain", valueText: "3 seats left", animated: false })
11
+ ] });
12
+ }
13
+ export {
14
+ NativeGoalGaugeDefault as default
15
+ };
@@ -0,0 +1,12 @@
1
+ import { GoalGauge } from "@krizaka/ui/native";
2
+ import { View } from "react-native";
3
+
4
+ // A challenge's goal and the seats left of a live drop, on mobile.
5
+ export default function NativeGoalGaugeDefault() {
6
+ return (
7
+ <View style={{ width: 300, gap: 18 }}>
8
+ <GoalGauge label="Backers" segments={10} value={6} valueText="6 of 10 backers" animated={false} />
9
+ <GoalGauge label="Seats left" segments={12} value={3} mode="drain" valueText="3 seats left" animated={false} />
10
+ </View>
11
+ );
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,14 @@
1
+ "use client";
2
+
3
+ // registry/examples/landscape/backdrop.tsx
4
+ import { Landscape } from "@krizaka/ui/landscape";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function LandscapeBackdrop() {
7
+ return /* @__PURE__ */ jsxs("div", { className: "relative h-80 w-full max-w-3xl overflow-hidden rounded-2xl border border-border-subtle", children: [
8
+ /* @__PURE__ */ jsx(Landscape, { animated: false }),
9
+ /* @__PURE__ */ jsx("p", { className: "relative z-10 p-6 text-lg font-semibold text-fg", children: "Built in the open, in Montr\xE9al." })
10
+ ] });
11
+ }
12
+ export {
13
+ LandscapeBackdrop as default
14
+ };
@@ -0,0 +1,11 @@
1
+ import { Landscape } from "@krizaka/ui/landscape";
2
+
3
+ // A page's end: the Krizaka valley at dusk behind the last words, faded into the surface.
4
+ export default function LandscapeBackdrop() {
5
+ return (
6
+ <div className="relative h-80 w-full max-w-3xl overflow-hidden rounded-2xl border border-border-subtle">
7
+ <Landscape animated={false} />
8
+ <p className="relative z-10 p-6 text-lg font-semibold text-fg">Built in the open, in Montréal.</p>
9
+ </div>
10
+ );
11
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,11 @@
1
+ "use client";
2
+
3
+ // registry/examples/landscape/brand.tsx
4
+ import { Landscape } from "@krizaka/ui/landscape";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function LandscapeBrand() {
7
+ return /* @__PURE__ */ jsx("div", { className: "brand-orazaka relative h-64 w-full max-w-3xl overflow-hidden rounded-2xl border border-border-subtle", children: /* @__PURE__ */ jsx(Landscape, { tone: "brand", flock: false, animated: false }) });
8
+ }
9
+ export {
10
+ LandscapeBrand as default
11
+ };
@@ -0,0 +1,10 @@
1
+ import { Landscape } from "@krizaka/ui/landscape";
2
+
3
+ // `tone="brand"`: the sky and the peaks in the host brand's accents; without the flock, a calmer backdrop.
4
+ export default function LandscapeBrand() {
5
+ return (
6
+ <div className="brand-orazaka relative h-64 w-full max-w-3xl overflow-hidden rounded-2xl border border-border-subtle">
7
+ <Landscape tone="brand" flock={false} animated={false} />
8
+ </div>
9
+ );
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ // registry/examples/marketing-layout/basic.tsx
4
+ import { MarketingLayout } from "@krizaka/ui/marketing-layout";
5
+ import { NavBar } from "@krizaka/ui/nav-bar";
6
+ import { Section } from "@krizaka/ui/page";
7
+ import { PageHero } from "@krizaka/ui/page-hero";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function MarketingLayoutBasic() {
10
+ return /* @__PURE__ */ jsxs(
11
+ MarketingLayout,
12
+ {
13
+ skipLabel: "Skip to content",
14
+ header: /* @__PURE__ */ jsxs(NavBar.Root, { label: "Main", compactAfter: false, className: "max-w-(--kz-page-max,72rem)", children: [
15
+ /* @__PURE__ */ jsx(NavBar.Brand, { href: "#home", children: "Krizaka" }),
16
+ /* @__PURE__ */ jsxs(NavBar.Items, { children: [
17
+ /* @__PURE__ */ jsx(NavBar.Link, { href: "#products", active: true, children: "Products" }),
18
+ /* @__PURE__ */ jsx(NavBar.Link, { href: "#docs", children: "Docs" })
19
+ ] })
20
+ ] }),
21
+ footer: /* @__PURE__ */ jsx("footer", { className: "border-t border-border-subtle px-6 py-8 text-sm text-fg-secondary", children: "\xA9 Krizaka \xB7 Montr\xE9al" }),
22
+ children: [
23
+ /* @__PURE__ */ jsx(PageHero, { eyebrow: "Products", title: "Two products, one way of building", backdrop: "plain" }),
24
+ /* @__PURE__ */ jsx(Section, { id: "why", title: "Why", spacing: "sm", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "Every page shares the same edges." }) })
25
+ ]
26
+ }
27
+ );
28
+ }
29
+ export {
30
+ MarketingLayoutBasic as default
31
+ };
@@ -0,0 +1,28 @@
1
+ import { MarketingLayout } from "@krizaka/ui/marketing-layout";
2
+ import { NavBar } from "@krizaka/ui/nav-bar";
3
+ import { Section } from "@krizaka/ui/page";
4
+ import { PageHero } from "@krizaka/ui/page-hero";
5
+
6
+ // A site's page: the link that skips to the content, the floating bar, the hero and sections in one frame, the footer.
7
+ export default function MarketingLayoutBasic() {
8
+ return (
9
+ <MarketingLayout
10
+ skipLabel="Skip to content"
11
+ header={
12
+ <NavBar.Root label="Main" compactAfter={false} className="max-w-(--kz-page-max,72rem)">
13
+ <NavBar.Brand href="#home">Krizaka</NavBar.Brand>
14
+ <NavBar.Items>
15
+ <NavBar.Link href="#products" active>Products</NavBar.Link>
16
+ <NavBar.Link href="#docs">Docs</NavBar.Link>
17
+ </NavBar.Items>
18
+ </NavBar.Root>
19
+ }
20
+ footer={<footer className="border-t border-border-subtle px-6 py-8 text-sm text-fg-secondary">© Krizaka · Montréal</footer>}
21
+ >
22
+ <PageHero eyebrow="Products" title="Two products, one way of building" backdrop="plain" />
23
+ <Section id="why" title="Why" spacing="sm">
24
+ <p className="text-sm text-fg-secondary">Every page shares the same edges.</p>
25
+ </Section>
26
+ </MarketingLayout>
27
+ );
28
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ // registry/examples/marketing-layout/docs-hub.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { CardGrid } from "@krizaka/ui/card-grid";
6
+ import { LinkCard } from "@krizaka/ui/link-card";
7
+ import { Section } from "@krizaka/ui/page";
8
+ import { PageHero } from "@krizaka/ui/page-hero";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ var GROUPS = [
11
+ {
12
+ id: "start",
13
+ title: "Start here",
14
+ cards: [
15
+ { id: "cli", logo: "orazaka", title: "The CLI", text: "npx orazaka install, start, dev \u2014 then every command." },
16
+ { id: "packs", logo: "orazaka", title: "Packs & Studios", text: "The business offers Orazaka installs without code." },
17
+ { id: "admin", logo: "orochia", title: "Orochia admin console", text: "Verification, moderation, payouts \u2014 behind four gates." }
18
+ ]
19
+ },
20
+ {
21
+ id: "platform",
22
+ title: "Platform",
23
+ cards: [
24
+ { id: "ui", logo: "krizaka", title: "Krizaka UI", text: "Tokens, a Tailwind preset and the components \u2014 live." },
25
+ { id: "java", logo: "krizaka", title: "Krizaka Java", text: "Parent, BOM, starters, messaging, Problem Details." }
26
+ ]
27
+ }
28
+ ];
29
+ function MarketingLayoutDocsHub() {
30
+ return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
31
+ /* @__PURE__ */ jsx(PageHero, { eyebrow: "Documentation", title: "Build with Krizaka", lead: "The building blocks the products are made of, documented from their source.", backdrop: "plain" }),
32
+ GROUPS.map((g) => /* @__PURE__ */ jsx(Section, { id: `hub-${g.id}`, title: g.title, headingSize: "sm", spacing: "sm", children: /* @__PURE__ */ jsx(CardGrid, { min: 260, reveal: false, children: g.cards.map((c) => /* @__PURE__ */ jsx(LinkCard, { href: `#${c.id}`, icon: /* @__PURE__ */ jsx(ProductLogo, { id: c.logo, size: 24, animated: false }), title: c.title, description: c.text, cta: "Open" }, c.id)) }) }, g.id))
33
+ ] });
34
+ }
35
+ export {
36
+ MarketingLayoutDocsHub as default
37
+ };
@@ -0,0 +1,44 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { CardGrid } from "@krizaka/ui/card-grid";
3
+ import { LinkCard } from "@krizaka/ui/link-card";
4
+ import { Section } from "@krizaka/ui/page";
5
+ import { PageHero } from "@krizaka/ui/page-hero";
6
+
7
+ const GROUPS = [
8
+ {
9
+ id: "start",
10
+ title: "Start here",
11
+ cards: [
12
+ { id: "cli", logo: "orazaka", title: "The CLI", text: "npx orazaka install, start, dev — then every command." },
13
+ { id: "packs", logo: "orazaka", title: "Packs & Studios", text: "The business offers Orazaka installs without code." },
14
+ { id: "admin", logo: "orochia", title: "Orochia admin console", text: "Verification, moderation, payouts — behind four gates." },
15
+ ],
16
+ },
17
+ {
18
+ id: "platform",
19
+ title: "Platform",
20
+ cards: [
21
+ { id: "ui", logo: "krizaka", title: "Krizaka UI", text: "Tokens, a Tailwind preset and the components — live." },
22
+ { id: "java", logo: "krizaka", title: "Krizaka Java", text: "Parent, BOM, starters, messaging, Problem Details." },
23
+ ],
24
+ },
25
+ ] as const;
26
+
27
+ // TEMPLATE — a documentation hub (krizaka.com/docs): the hero, then one section per group, each a grid of compact link
28
+ // cards — the whole card one link, the product's mark, one sentence, the way in. One column on a phone.
29
+ export default function MarketingLayoutDocsHub() {
30
+ return (
31
+ <div className="w-full">
32
+ <PageHero eyebrow="Documentation" title="Build with Krizaka" lead="The building blocks the products are made of, documented from their source." backdrop="plain" />
33
+ {GROUPS.map((g) => (
34
+ <Section key={g.id} id={`hub-${g.id}`} title={g.title} headingSize="sm" spacing="sm">
35
+ <CardGrid min={260} reveal={false}>
36
+ {g.cards.map((c) => (
37
+ <LinkCard key={c.id} href={`#${c.id}`} icon={<ProductLogo id={c.logo} size={24} animated={false} />} title={c.title} description={c.text} cta="Open" />
38
+ ))}
39
+ </CardGrid>
40
+ </Section>
41
+ ))}
42
+ </div>
43
+ );
44
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,45 @@
1
+ "use client";
2
+
3
+ // registry/examples/marketing-layout/pricing.tsx
4
+ import { Badge } from "@krizaka/ui/badge";
5
+ import { Button } from "@krizaka/ui/button";
6
+ import { GlowCard } from "@krizaka/ui/glow-card";
7
+ import { Meter } from "@krizaka/ui/meter";
8
+ import { Section } from "@krizaka/ui/page";
9
+ import { PageHero } from "@krizaka/ui/page-hero";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ var PLANS = [
12
+ { id: "community", name: "Community", price: "Free", unit: "self-hosted", points: ["Every feature", "Your hardware", "Community support"] },
13
+ { id: "workspace", name: "Workspace", price: "\u20AC29", unit: "per month \xB7 12,000 credits", points: ["Packs & Studios", "Shared workspaces", "Email support"], featured: true },
14
+ { id: "sovereign", name: "Sovereign", price: "Custom", unit: "on your servers", points: ["Installation with you", "Law 25 review", "A named engineer"] }
15
+ ];
16
+ function MarketingLayoutPricing() {
17
+ return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
18
+ /* @__PURE__ */ jsx(PageHero, { eyebrow: "Pricing", title: "Pay once for what was done", lead: "Credits buy answers, images and minutes of video \u2014 never a seat you do not use.", align: "center", backdrop: "plain" }),
19
+ /* @__PURE__ */ jsx(Section, { "aria-label": "Plans", spacing: "sm", children: /* @__PURE__ */ jsx("ul", { className: "grid gap-4 md:grid-cols-3", children: PLANS.map((p) => /* @__PURE__ */ jsx("li", { className: "flex", children: /* @__PURE__ */ jsxs(GlowCard, { alive: p.featured, className: "flex w-full flex-col gap-4", children: [
20
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
21
+ /* @__PURE__ */ jsx("h2", { className: "font-display text-lg font-bold text-fg", children: p.name }),
22
+ p.featured && /* @__PURE__ */ jsx(Badge, { tone: "accent", children: "Most chosen" })
23
+ ] }),
24
+ /* @__PURE__ */ jsxs("p", { children: [
25
+ /* @__PURE__ */ jsx("span", { className: "font-display text-4xl font-extrabold text-fg", children: p.price }),
26
+ /* @__PURE__ */ jsx("span", { className: "mt-1 block text-sm text-fg-secondary", children: p.unit })
27
+ ] }),
28
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-2 text-sm text-fg-secondary", children: p.points.map((x) => /* @__PURE__ */ jsxs("li", { children: [
29
+ "\u2014 ",
30
+ x
31
+ ] }, x)) }),
32
+ /* @__PURE__ */ jsxs(Button, { variant: p.featured ? "primary" : "secondary", shape: "cut", className: "mt-auto w-full", children: [
33
+ "Choose ",
34
+ p.name
35
+ ] })
36
+ ] }) }, p.id)) }) }),
37
+ /* @__PURE__ */ jsx(Section, { id: "credits", title: "Your credits", headingSize: "sm", spacing: "sm", divider: true, children: /* @__PURE__ */ jsxs("div", { className: "max-w-md", children: [
38
+ /* @__PURE__ */ jsx(Meter, { label: "Credits this month", value: 3800, max: 12e3, valueText: "3,800 of 12,000 used", thresholds: { low: 0.7, high: 0.9 }, showLabel: true }),
39
+ /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-fg-secondary", children: "One credit \u2248 one chat answer \xB7 4 credits an image \xB7 30 a minute of video." })
40
+ ] }) })
41
+ ] });
42
+ }
43
+ export {
44
+ MarketingLayoutPricing as default
45
+ };