@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,15 @@
1
+ "use client";
2
+
3
+ // registry/examples/achievement/arcade.tsx
4
+ import { Achievement, AchievementList, Emblem } from "@krizaka/ui/achievement";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function AchievementArcade() {
7
+ return /* @__PURE__ */ jsxs(AchievementList, { variant: "arcade", brand: "orochia", className: "w-full max-w-2xl", children: [
8
+ /* @__PURE__ */ jsx(Achievement, { icon: /* @__PURE__ */ jsx(Emblem, { kind: "sword", size: 14 }), eyebrow: "Head 01", badge: "Sealed", replaced: "Data sent abroad", title: "Everything runs on your machine" }),
9
+ /* @__PURE__ */ jsx(Achievement, { icon: /* @__PURE__ */ jsx(Emblem, { kind: "mirror", size: 14 }), eyebrow: "Head 02", badge: "Sealed", replaced: "A bill per token", title: "One price, no meter" }),
10
+ /* @__PURE__ */ jsx(Achievement, { icon: /* @__PURE__ */ jsx(Emblem, { kind: "jewel", size: 14 }), eyebrow: "Head 03", badge: "Sealed", replaced: "A closed box", title: "Open source, end to end" })
11
+ ] });
12
+ }
13
+ export {
14
+ AchievementArcade as default
15
+ };
@@ -0,0 +1,12 @@
1
+ import { Achievement, AchievementList, Emblem } from "@krizaka/ui/achievement";
2
+
3
+ // The arcade flavour: each card's stamp slams in, one after the other, in time with a GoalGauge in the same scene.
4
+ export default function AchievementArcade() {
5
+ return (
6
+ <AchievementList variant="arcade" brand="orochia" className="w-full max-w-2xl">
7
+ <Achievement icon={<Emblem kind="sword" size={14} />} eyebrow="Head 01" badge="Sealed" replaced="Data sent abroad" title="Everything runs on your machine" />
8
+ <Achievement icon={<Emblem kind="mirror" size={14} />} eyebrow="Head 02" badge="Sealed" replaced="A bill per token" title="One price, no meter" />
9
+ <Achievement icon={<Emblem kind="jewel" size={14} />} eyebrow="Head 03" badge="Sealed" replaced="A closed box" title="Open source, end to end" />
10
+ </AchievementList>
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,15 @@
1
+ "use client";
2
+
3
+ // registry/examples/achievement/milestones.tsx
4
+ import { Achievement, AchievementList } from "@krizaka/ui/achievement";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function AchievementMilestones() {
7
+ return /* @__PURE__ */ jsxs(AchievementList, { className: "w-full max-w-2xl", children: [
8
+ /* @__PURE__ */ jsx(Achievement, { eyebrow: "Milestone 01", badge: "Done", replaced: "Paying 30 % to a platform", title: "90 % of every tip to you" }),
9
+ /* @__PURE__ */ jsx(Achievement, { eyebrow: "Milestone 02", badge: "Done", replaced: "Fans who vanish after a like", title: "Challenges they back with credits" }),
10
+ /* @__PURE__ */ jsx(Achievement, { eyebrow: "Milestone 03", badge: "Locked", locked: true, title: "Your first auction" })
11
+ ] });
12
+ }
13
+ export {
14
+ AchievementMilestones as default
15
+ };
@@ -0,0 +1,12 @@
1
+ import { Achievement, AchievementList } from "@krizaka/ui/achievement";
2
+
3
+ // Milestones: what each one replaced, struck through; the next one locked — said in its badge too.
4
+ export default function AchievementMilestones() {
5
+ return (
6
+ <AchievementList className="w-full max-w-2xl">
7
+ <Achievement eyebrow="Milestone 01" badge="Done" replaced="Paying 30 % to a platform" title="90 % of every tip to you" />
8
+ <Achievement eyebrow="Milestone 02" badge="Done" replaced="Fans who vanish after a like" title="Challenges they back with credits" />
9
+ <Achievement eyebrow="Milestone 03" badge="Locked" locked title="Your first auction" />
10
+ </AchievementList>
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,52 @@
1
+ "use client";
2
+
3
+ // registry/examples/app-shell/admin-console.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { AppShell } from "@krizaka/ui/app-shell";
6
+ import { Badge } from "@krizaka/ui/badge";
7
+ import { Button } from "@krizaka/ui/button";
8
+ import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
9
+ import { DataTable } from "@krizaka/ui/data-table";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ var icon = (d) => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d }) });
12
+ var REQUESTS = [
13
+ { id: "v-1042", creator: "Elena Varga", kind: "Identity check", status: "pending", age: "12 min" },
14
+ { id: "v-1041", creator: "Noah Petit", kind: "Payout account", status: "pending", age: "40 min" },
15
+ { id: "v-1039", creator: "Maya Chen", kind: "Identity check", status: "approved", age: "2 h" },
16
+ { id: "v-1036", creator: "Tom Lebrun", kind: "Age check (18+)", status: "refused", age: "5 h" }
17
+ ];
18
+ var tone = { pending: "warning", approved: "success", refused: "danger" };
19
+ var columns = [
20
+ { id: "creator", header: "Creator", sortable: true, card: "title" },
21
+ { id: "kind", header: "Request" },
22
+ { id: "status", header: "Status", cell: (r) => /* @__PURE__ */ jsx(Badge, { tone: tone[r.status], dot: true, children: r.status }) },
23
+ { id: "age", header: "Waiting", align: "end" }
24
+ ];
25
+ function AppShellAdminConsole() {
26
+ return /* @__PURE__ */ jsxs(AppShell.Root, { children: [
27
+ /* @__PURE__ */ jsxs(AppShell.Sidebar, { label: "Administration", brand: /* @__PURE__ */ jsxs(Fragment, { children: [
28
+ /* @__PURE__ */ jsx(ProductLogo, { id: "orochia", size: 24, animated: false }),
29
+ " Admin"
30
+ ] }), closeLabel: "Close the menu", collapseLabels: ["Collapse", "Expand"], children: [
31
+ /* @__PURE__ */ jsx(AppShell.Group, { children: "Review" }),
32
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#verification", icon: icon("M12 3l8 4v5c0 5-3.5 8-8 9-4.5-1-8-4-8-9V7z"), label: "Verification", current: true, badge: 2 }),
33
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#moderation", icon: icon("M4 5h16v11H9l-5 4z"), label: "Moderation", badge: 5 }),
34
+ /* @__PURE__ */ jsx(AppShell.Group, { children: "Money" }),
35
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#payouts", icon: icon("M3 7h18v10H3zM12 12h.01"), label: "Payouts" }),
36
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#ledger", icon: icon("M5 4h14v16H5zM8 8h8M8 12h8M8 16h5"), label: "Ledger" }),
37
+ /* @__PURE__ */ jsx(AppShell.Group, { children: "System" }),
38
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#backups", icon: icon("M4 7c0-2 16-2 16 0v10c0 2-16 2-16 0zM4 12c0 2 16 2 16 0"), label: "Backups" })
39
+ ] }),
40
+ /* @__PURE__ */ jsxs(AppShell.Body, { children: [
41
+ /* @__PURE__ */ jsx(AppShell.Header, { title: "Verification", menuLabel: "Open the menu", actions: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", shape: "cut", children: "Export" }) }),
42
+ /* @__PURE__ */ jsx(AppShell.Main, { children: /* @__PURE__ */ jsxs(DashboardLayout, { headingAs: "h2", title: "Requests to review", description: "Oldest first. A decision is logged with your name.", children: [
43
+ /* @__PURE__ */ jsx(Widget, { level: 3, title: "Pending", description: "identity and payout", children: /* @__PURE__ */ jsx("p", { className: "font-display text-3xl font-extrabold text-fg", children: "2" }) }),
44
+ /* @__PURE__ */ jsx(Widget, { level: 3, title: "Oldest wait", children: /* @__PURE__ */ jsx("p", { className: "font-display text-3xl font-extrabold text-fg", children: "40 min" }) }),
45
+ /* @__PURE__ */ jsx(Widget, { level: 3, title: "Queue", span: "full", children: /* @__PURE__ */ jsx(DataTable, { caption: "Verification requests", rows: REQUESTS, columns, getRowId: (r) => r.id, rowLabel: (r) => `${r.creator}, ${r.kind}`, selectable: true }) })
46
+ ] }) })
47
+ ] })
48
+ ] });
49
+ }
50
+ export {
51
+ AppShellAdminConsole as default
52
+ };
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ import { ProductLogo } from "@krizaka/ui";
4
+ import { AppShell } from "@krizaka/ui/app-shell";
5
+ import { Badge } from "@krizaka/ui/badge";
6
+ import { Button } from "@krizaka/ui/button";
7
+ import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
8
+ import { DataTable, type DataTableColumn } from "@krizaka/ui/data-table";
9
+
10
+ const icon = (d: string) => (
11
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden>
12
+ <path d={d} />
13
+ </svg>
14
+ );
15
+
16
+ type Request = { id: string; creator: string; kind: string; status: "pending" | "approved" | "refused"; age: string };
17
+ const REQUESTS: Request[] = [
18
+ { id: "v-1042", creator: "Elena Varga", kind: "Identity check", status: "pending", age: "12 min" },
19
+ { id: "v-1041", creator: "Noah Petit", kind: "Payout account", status: "pending", age: "40 min" },
20
+ { id: "v-1039", creator: "Maya Chen", kind: "Identity check", status: "approved", age: "2 h" },
21
+ { id: "v-1036", creator: "Tom Lebrun", kind: "Age check (18+)", status: "refused", age: "5 h" },
22
+ ];
23
+ const tone = { pending: "warning", approved: "success", refused: "danger" } as const;
24
+ const columns: DataTableColumn<Request>[] = [
25
+ { id: "creator", header: "Creator", sortable: true, card: "title" },
26
+ { id: "kind", header: "Request" },
27
+ { id: "status", header: "Status", cell: (r) => <Badge tone={tone[r.status]} dot>{r.status}</Badge> },
28
+ { id: "age", header: "Waiting", align: "end" },
29
+ ];
30
+
31
+ // TEMPLATE — an administration console (Orochia admin): the shell with the console's sections, a queue of requests to
32
+ // review as a sortable table with bulk actions — cards on a phone — and the counts that say how long the queue is.
33
+ export default function AppShellAdminConsole() {
34
+ return (
35
+ <AppShell.Root>
36
+ <AppShell.Sidebar label="Administration" brand={<><ProductLogo id="orochia" size={24} animated={false} /> Admin</>} closeLabel="Close the menu" collapseLabels={["Collapse", "Expand"]}>
37
+ <AppShell.Group>Review</AppShell.Group>
38
+ <AppShell.Item href="#verification" icon={icon("M12 3l8 4v5c0 5-3.5 8-8 9-4.5-1-8-4-8-9V7z")} label="Verification" current badge={2} />
39
+ <AppShell.Item href="#moderation" icon={icon("M4 5h16v11H9l-5 4z")} label="Moderation" badge={5} />
40
+ <AppShell.Group>Money</AppShell.Group>
41
+ <AppShell.Item href="#payouts" icon={icon("M3 7h18v10H3zM12 12h.01")} label="Payouts" />
42
+ <AppShell.Item href="#ledger" icon={icon("M5 4h14v16H5zM8 8h8M8 12h8M8 16h5")} label="Ledger" />
43
+ <AppShell.Group>System</AppShell.Group>
44
+ <AppShell.Item href="#backups" icon={icon("M4 7c0-2 16-2 16 0v10c0 2-16 2-16 0zM4 12c0 2 16 2 16 0")} label="Backups" />
45
+ </AppShell.Sidebar>
46
+ <AppShell.Body>
47
+ <AppShell.Header title="Verification" menuLabel="Open the menu" actions={<Button size="sm" variant="secondary" shape="cut">Export</Button>} />
48
+ <AppShell.Main>
49
+ <DashboardLayout headingAs="h2" title="Requests to review" description="Oldest first. A decision is logged with your name.">
50
+ <Widget level={3} title="Pending" description="identity and payout">
51
+ <p className="font-display text-3xl font-extrabold text-fg">2</p>
52
+ </Widget>
53
+ <Widget level={3} title="Oldest wait">
54
+ <p className="font-display text-3xl font-extrabold text-fg">40 min</p>
55
+ </Widget>
56
+ <Widget level={3} title="Queue" span="full">
57
+ <DataTable caption="Verification requests" rows={REQUESTS} columns={columns} getRowId={(r) => r.id} rowLabel={(r) => `${r.creator}, ${r.kind}`} selectable />
58
+ </Widget>
59
+ </DashboardLayout>
60
+ </AppShell.Main>
61
+ </AppShell.Body>
62
+ </AppShell.Root>
63
+ );
64
+ }
@@ -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/app-shell/basic.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { AppShell } from "@krizaka/ui/app-shell";
6
+ import { Button } from "@krizaka/ui/button";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ var dot = /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": true, children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "7" }) });
9
+ function AppShellBasic() {
10
+ return /* @__PURE__ */ jsxs(AppShell.Root, { className: "min-h-[32rem]", children: [
11
+ /* @__PURE__ */ jsxs(
12
+ AppShell.Sidebar,
13
+ {
14
+ label: "Studio",
15
+ brand: /* @__PURE__ */ jsxs(Fragment, { children: [
16
+ /* @__PURE__ */ jsx(ProductLogo, { id: "orochia", size: 24, animated: false }),
17
+ " Studio"
18
+ ] }),
19
+ collapseLabels: ["Collapse", "Expand"],
20
+ closeLabel: "Close the menu",
21
+ children: [
22
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#home", icon: dot, label: "Home", current: true }),
23
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#videos", icon: dot, label: "Videos", badge: 3 }),
24
+ /* @__PURE__ */ jsx(AppShell.Group, { children: "Money" }),
25
+ /* @__PURE__ */ jsx(AppShell.Item, { href: "#earnings", icon: dot, label: "Earnings" })
26
+ ]
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsxs(AppShell.Body, { children: [
30
+ /* @__PURE__ */ jsx(AppShell.Header, { title: "Home", menuLabel: "Open the menu", actions: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", shape: "cut", children: "Upload" }) }),
31
+ /* @__PURE__ */ jsx(AppShell.Main, { children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "The screen's content." }) })
32
+ ] })
33
+ ] });
34
+ }
35
+ export {
36
+ AppShellBasic as default
37
+ };
@@ -0,0 +1,31 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { AppShell } from "@krizaka/ui/app-shell";
3
+ import { Button } from "@krizaka/ui/button";
4
+
5
+ const dot = <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden><circle cx="12" cy="12" r="7" /></svg>;
6
+
7
+ // The shell alone: the sidebar (it collapses to its icons on a desktop, opens as a drawer on a phone), the header, the
8
+ // content. Your router's links go in `AppShell.Item asChild`.
9
+ export default function AppShellBasic() {
10
+ return (
11
+ <AppShell.Root className="min-h-[32rem]">
12
+ <AppShell.Sidebar
13
+ label="Studio"
14
+ brand={<><ProductLogo id="orochia" size={24} animated={false} /> Studio</>}
15
+ collapseLabels={["Collapse", "Expand"]}
16
+ closeLabel="Close the menu"
17
+ >
18
+ <AppShell.Item href="#home" icon={dot} label="Home" current />
19
+ <AppShell.Item href="#videos" icon={dot} label="Videos" badge={3} />
20
+ <AppShell.Group>Money</AppShell.Group>
21
+ <AppShell.Item href="#earnings" icon={dot} label="Earnings" />
22
+ </AppShell.Sidebar>
23
+ <AppShell.Body>
24
+ <AppShell.Header title="Home" menuLabel="Open the menu" actions={<Button size="sm" variant="primary" shape="cut">Upload</Button>} />
25
+ <AppShell.Main>
26
+ <p className="text-sm text-fg-secondary">The screen's content.</p>
27
+ </AppShell.Main>
28
+ </AppShell.Body>
29
+ </AppShell.Root>
30
+ );
31
+ }
@@ -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,89 @@
1
+ "use client";
2
+
3
+ // registry/examples/app-shell/orochia-studio.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { AppShell } from "@krizaka/ui/app-shell";
6
+ import { Avatar } from "@krizaka/ui/avatar";
7
+ import { Badge } from "@krizaka/ui/badge";
8
+ import { Button } from "@krizaka/ui/button";
9
+ import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
10
+ import { Meter } from "@krizaka/ui/meter";
11
+ import { Stat } from "@krizaka/ui/stat";
12
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+ var icon = (d) => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d }) });
14
+ var NAV = [
15
+ { id: "home", label: "Home", d: "M4 11 12 4l8 7v9H4z", current: true },
16
+ { id: "videos", label: "Videos", d: "M4 6h12v12H4zM16 10l4-2v8l-4-2", badge: 2 },
17
+ { id: "auctions", label: "Auctions", d: "M5 19h10M8 5l6 6M11 2l6 6M6 13l4-4" },
18
+ { id: "challenges", label: "Challenges", d: "M12 3v18M5 7h10l-2 3 2 3H5" }
19
+ ];
20
+ var MONEY = [
21
+ { id: "earnings", label: "Earnings", d: "M4 18h16M7 14l3-3 3 2 5-6" },
22
+ { id: "payouts", label: "Payouts", d: "M3 7h18v10H3zM12 12h.01" }
23
+ ];
24
+ var SALES = [
25
+ { what: "Unlock \xB7 \u201CNight shoot, part 2\u201D", who: "L\xE9a M.", net: "\u20AC4.50" },
26
+ { what: "Tip", who: "Samir K.", net: "\u20AC9.00" },
27
+ { what: "Auction won \xB7 \u201CBackstage cut\u201D", who: "In\xE8s B.", net: "\u20AC61.20" }
28
+ ];
29
+ function AppShellOrochiaStudio() {
30
+ return /* @__PURE__ */ jsx("div", { className: "brand-orochia", children: /* @__PURE__ */ jsxs(AppShell.Root, { children: [
31
+ /* @__PURE__ */ jsxs(
32
+ AppShell.Sidebar,
33
+ {
34
+ label: "Studio",
35
+ brand: /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ /* @__PURE__ */ jsx(ProductLogo, { id: "orochia", size: 24, animated: false }),
37
+ " Orochia"
38
+ ] }),
39
+ collapseLabels: ["Collapse", "Expand"],
40
+ closeLabel: "Close the menu",
41
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5 px-2 py-2 text-sm", children: [
42
+ /* @__PURE__ */ jsx(Avatar, { fallback: "EV", size: "sm" }),
43
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate font-medium", children: "Elena Varga" })
44
+ ] }),
45
+ children: [
46
+ NAV.map((n) => /* @__PURE__ */ jsx(AppShell.Item, { href: `#${n.id}`, icon: icon(n.d), label: n.label, current: n.current, badge: n.badge }, n.id)),
47
+ /* @__PURE__ */ jsx(AppShell.Group, { children: "Money" }),
48
+ MONEY.map((n) => /* @__PURE__ */ jsx(AppShell.Item, { href: `#${n.id}`, icon: icon(n.d), label: n.label }, n.id))
49
+ ]
50
+ }
51
+ ),
52
+ /* @__PURE__ */ jsxs(AppShell.Body, { children: [
53
+ /* @__PURE__ */ jsx(
54
+ AppShell.Header,
55
+ {
56
+ title: "Studio",
57
+ menuLabel: "Open the menu",
58
+ actions: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", shape: "cut", children: "Upload a video" })
59
+ }
60
+ ),
61
+ /* @__PURE__ */ jsx(AppShell.Main, { children: /* @__PURE__ */ jsxs(DashboardLayout, { headingAs: "h2", eyebrow: "This week", title: "Good morning, Elena", description: "Three sales since yesterday \u2014 your auction ends tonight.", children: [
62
+ /* @__PURE__ */ jsx(Widget, { level: 3, title: "Your week", span: "full", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-6 md:grid-cols-4", children: [
63
+ /* @__PURE__ */ jsx(Stat, { label: "Views", value: "12.4k", trend: "up", trendLabel: "+8 %", hint: "7 days" }),
64
+ /* @__PURE__ */ jsx(Stat, { label: "Supporters", value: "318", trend: "up", trendLabel: "+21", hint: "7 days" }),
65
+ /* @__PURE__ */ jsx(Stat, { label: "Earned", value: "\u20AC902", trend: "up", trendLabel: "+14 %", hint: "after the 10 % fee" }),
66
+ /* @__PURE__ */ jsx(Stat, { label: "Unlocks", value: "146", trend: "flat", trendLabel: "\xB10", hint: "7 days" })
67
+ ] }) }),
68
+ /* @__PURE__ */ jsxs(Widget, { level: 3, title: "Next payout", description: "Every Monday, from \u20AC20", span: 2, children: [
69
+ /* @__PURE__ */ jsx(Meter, { label: "Towards your payout", value: 74, max: 100, valueText: "\u20AC74 of \u20AC100 goal", showLabel: true }),
70
+ /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-fg-secondary", children: "\u20AC902 will reach your bank on Monday." })
71
+ ] }),
72
+ /* @__PURE__ */ jsxs(Widget, { level: 3, title: "Auction", description: "\u201CBackstage cut\u201D", span: 2, action: /* @__PURE__ */ jsx(Badge, { tone: "accent", dot: true, children: "Open" }), children: [
73
+ /* @__PURE__ */ jsx("p", { className: "font-display text-3xl font-extrabold text-fg", children: "\u20AC68" }),
74
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "7 bids \xB7 ends tonight at 21:00" })
75
+ ] }),
76
+ /* @__PURE__ */ jsx(Widget, { level: 3, title: "Latest sales", span: "full", action: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", children: "See all" }), children: /* @__PURE__ */ jsx("ul", { className: "divide-y divide-border-subtle", children: SALES.map((s) => /* @__PURE__ */ jsxs("li", { className: "flex items-center justify-between gap-3 py-2.5 text-sm", children: [
77
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
78
+ /* @__PURE__ */ jsx("span", { className: "block truncate font-medium text-fg", children: s.what }),
79
+ /* @__PURE__ */ jsx("span", { className: "text-fg-secondary", children: s.who })
80
+ ] }),
81
+ /* @__PURE__ */ jsx("span", { className: "font-mono font-semibold text-fg-success", children: s.net })
82
+ ] }, s.what)) }) })
83
+ ] }) })
84
+ ] })
85
+ ] }) });
86
+ }
87
+ export {
88
+ AppShellOrochiaStudio as default
89
+ };
@@ -0,0 +1,101 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { AppShell } from "@krizaka/ui/app-shell";
3
+ import { Avatar } from "@krizaka/ui/avatar";
4
+ import { Badge } from "@krizaka/ui/badge";
5
+ import { Button } from "@krizaka/ui/button";
6
+ import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
7
+ import { Meter } from "@krizaka/ui/meter";
8
+ import { Stat } from "@krizaka/ui/stat";
9
+
10
+ const icon = (d: string) => (
11
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden>
12
+ <path d={d} />
13
+ </svg>
14
+ );
15
+ const NAV = [
16
+ { id: "home", label: "Home", d: "M4 11 12 4l8 7v9H4z", current: true },
17
+ { id: "videos", label: "Videos", d: "M4 6h12v12H4zM16 10l4-2v8l-4-2", badge: 2 },
18
+ { id: "auctions", label: "Auctions", d: "M5 19h10M8 5l6 6M11 2l6 6M6 13l4-4" },
19
+ { id: "challenges", label: "Challenges", d: "M12 3v18M5 7h10l-2 3 2 3H5" },
20
+ ];
21
+ const MONEY = [
22
+ { id: "earnings", label: "Earnings", d: "M4 18h16M7 14l3-3 3 2 5-6" },
23
+ { id: "payouts", label: "Payouts", d: "M3 7h18v10H3zM12 12h.01" },
24
+ ];
25
+ const SALES = [
26
+ { what: "Unlock · “Night shoot, part 2”", who: "Léa M.", net: "€4.50" },
27
+ { what: "Tip", who: "Samir K.", net: "€9.00" },
28
+ { what: "Auction won · “Backstage cut”", who: "Inès B.", net: "€61.20" },
29
+ ];
30
+
31
+ // TEMPLATE — Orochia's creator studio, Elena's home: the shell (sidebar of the studio, drawer on a phone) around a
32
+ // dashboard — this week's figures, the payout on its way, the latest sales, the next auction. On a phone the sidebar
33
+ // is a drawer, the stats stack two by two, every widget takes the full width.
34
+ export default function AppShellOrochiaStudio() {
35
+ return (
36
+ <div className="brand-orochia">
37
+ <AppShell.Root>
38
+ <AppShell.Sidebar
39
+ label="Studio"
40
+ brand={<><ProductLogo id="orochia" size={24} animated={false} /> Orochia</>}
41
+ collapseLabels={["Collapse", "Expand"]}
42
+ closeLabel="Close the menu"
43
+ footer={
44
+ <div className="flex items-center gap-2.5 px-2 py-2 text-sm">
45
+ <Avatar fallback="EV" size="sm" />
46
+ <span className="min-w-0 truncate font-medium">Elena Varga</span>
47
+ </div>
48
+ }
49
+ >
50
+ {NAV.map((n) => (
51
+ <AppShell.Item key={n.id} href={`#${n.id}`} icon={icon(n.d)} label={n.label} current={n.current} badge={n.badge} />
52
+ ))}
53
+ <AppShell.Group>Money</AppShell.Group>
54
+ {MONEY.map((n) => (
55
+ <AppShell.Item key={n.id} href={`#${n.id}`} icon={icon(n.d)} label={n.label} />
56
+ ))}
57
+ </AppShell.Sidebar>
58
+ <AppShell.Body>
59
+ <AppShell.Header
60
+ title="Studio"
61
+ menuLabel="Open the menu"
62
+ actions={<Button size="sm" variant="primary" shape="cut">Upload a video</Button>}
63
+ />
64
+ <AppShell.Main>
65
+ <DashboardLayout headingAs="h2" eyebrow="This week" title="Good morning, Elena" description="Three sales since yesterday — your auction ends tonight.">
66
+ <Widget level={3} title="Your week" span="full">
67
+ <div className="grid grid-cols-2 gap-6 md:grid-cols-4">
68
+ <Stat label="Views" value="12.4k" trend="up" trendLabel="+8 %" hint="7 days" />
69
+ <Stat label="Supporters" value="318" trend="up" trendLabel="+21" hint="7 days" />
70
+ <Stat label="Earned" value="€902" trend="up" trendLabel="+14 %" hint="after the 10 % fee" />
71
+ <Stat label="Unlocks" value="146" trend="flat" trendLabel="±0" hint="7 days" />
72
+ </div>
73
+ </Widget>
74
+ <Widget level={3} title="Next payout" description="Every Monday, from €20" span={2}>
75
+ <Meter label="Towards your payout" value={74} max={100} valueText="€74 of €100 goal" showLabel />
76
+ <p className="mt-3 text-sm text-fg-secondary">€902 will reach your bank on Monday.</p>
77
+ </Widget>
78
+ <Widget level={3} title="Auction" description="“Backstage cut”" span={2} action={<Badge tone="accent" dot>Open</Badge>}>
79
+ <p className="font-display text-3xl font-extrabold text-fg">€68</p>
80
+ <p className="text-sm text-fg-secondary">7 bids · ends tonight at 21:00</p>
81
+ </Widget>
82
+ <Widget level={3} title="Latest sales" span="full" action={<Button size="sm" variant="ghost">See all</Button>}>
83
+ <ul className="divide-y divide-border-subtle">
84
+ {SALES.map((s) => (
85
+ <li key={s.what} className="flex items-center justify-between gap-3 py-2.5 text-sm">
86
+ <span className="min-w-0">
87
+ <span className="block truncate font-medium text-fg">{s.what}</span>
88
+ <span className="text-fg-secondary">{s.who}</span>
89
+ </span>
90
+ <span className="font-mono font-semibold text-fg-success">{s.net}</span>
91
+ </li>
92
+ ))}
93
+ </ul>
94
+ </Widget>
95
+ </DashboardLayout>
96
+ </AppShell.Main>
97
+ </AppShell.Body>
98
+ </AppShell.Root>
99
+ </div>
100
+ );
101
+ }
@@ -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,56 @@
1
+ "use client";
2
+
3
+ // registry/examples/auth-layout/onboarding.tsx
4
+ import { ProductLogo } from "@krizaka/ui";
5
+ import { AuthLayout } from "@krizaka/ui/auth-layout";
6
+ import { Button } from "@krizaka/ui/button";
7
+ import { Field, Input } from "@krizaka/ui/field";
8
+ import { Stepper } from "@krizaka/ui/stepper";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ var labels = { done: "Done", current: "Current step", upcoming: "Upcoming", error: "Failed" };
11
+ function AuthLayoutOnboarding() {
12
+ return /* @__PURE__ */ jsx("div", { className: "brand-orochia", children: /* @__PURE__ */ jsxs(
13
+ AuthLayout,
14
+ {
15
+ brand: /* @__PURE__ */ jsxs(Fragment, { children: [
16
+ /* @__PURE__ */ jsx(ProductLogo, { id: "orochia", size: 28, animated: false }),
17
+ " Orochia"
18
+ ] }),
19
+ promise: "Three steps, then your first video.",
20
+ aside: /* @__PURE__ */ jsx("p", { children: "Your identity is checked once, by a person, and never shown to your fans." }),
21
+ asideFooter: "\xA9 Krizaka \xB7 Montr\xE9al",
22
+ title: "Your payout account",
23
+ description: "Where your earnings go every Monday.",
24
+ children: [
25
+ /* @__PURE__ */ jsx(
26
+ Stepper,
27
+ {
28
+ "aria-label": "Onboarding",
29
+ orientation: "horizontal",
30
+ labels,
31
+ current: 1,
32
+ steps: [{ title: "Profile" }, { title: "Payouts" }, { title: "Identity" }]
33
+ }
34
+ ),
35
+ /* @__PURE__ */ jsxs("form", { className: "flex flex-col gap-4", children: [
36
+ /* @__PURE__ */ jsxs(Field.Root, { children: [
37
+ /* @__PURE__ */ jsx(Field.Label, { htmlFor: "onboarding-holder", children: "Account holder" }),
38
+ /* @__PURE__ */ jsx(Input, { id: "onboarding-holder", autoComplete: "name", defaultValue: "Elena Varga" })
39
+ ] }),
40
+ /* @__PURE__ */ jsxs(Field.Root, { children: [
41
+ /* @__PURE__ */ jsx(Field.Label, { htmlFor: "onboarding-iban", children: "IBAN" }),
42
+ /* @__PURE__ */ jsx(Input, { id: "onboarding-iban", inputMode: "text", placeholder: "FR76 \u2026", "aria-describedby": "onboarding-iban-hint" }),
43
+ /* @__PURE__ */ jsx(Field.Hint, { id: "onboarding-iban-hint", children: "Checked before your first payout." })
44
+ ] }),
45
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
46
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", size: "lg", shape: "cut", className: "flex-1", children: "Back" }),
47
+ /* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "lg", shape: "cut", className: "flex-1", children: "Continue" })
48
+ ] })
49
+ ] })
50
+ ]
51
+ }
52
+ ) });
53
+ }
54
+ export {
55
+ AuthLayoutOnboarding as default
56
+ };
@@ -0,0 +1,47 @@
1
+ import { ProductLogo } from "@krizaka/ui";
2
+ import { AuthLayout } from "@krizaka/ui/auth-layout";
3
+ import { Button } from "@krizaka/ui/button";
4
+ import { Field, Input } from "@krizaka/ui/field";
5
+ import { Stepper } from "@krizaka/ui/stepper";
6
+
7
+ const labels = { done: "Done", current: "Current step", upcoming: "Upcoming", error: "Failed" };
8
+
9
+ // TEMPLATE — onboarding a creator (Orochia): the steps said in words above the form of the current one; the brand panel
10
+ // says why it is worth it. On a phone the steps stay horizontal and compact above the fields.
11
+ export default function AuthLayoutOnboarding() {
12
+ return (
13
+ <div className="brand-orochia">
14
+ <AuthLayout
15
+ brand={<><ProductLogo id="orochia" size={28} animated={false} /> Orochia</>}
16
+ promise="Three steps, then your first video."
17
+ aside={<p>Your identity is checked once, by a person, and never shown to your fans.</p>}
18
+ asideFooter="© Krizaka · Montréal"
19
+ title="Your payout account"
20
+ description="Where your earnings go every Monday."
21
+ >
22
+ <Stepper
23
+ aria-label="Onboarding"
24
+ orientation="horizontal"
25
+ labels={labels}
26
+ current={1}
27
+ steps={[{ title: "Profile" }, { title: "Payouts" }, { title: "Identity" }]}
28
+ />
29
+ <form className="flex flex-col gap-4">
30
+ <Field.Root>
31
+ <Field.Label htmlFor="onboarding-holder">Account holder</Field.Label>
32
+ <Input id="onboarding-holder" autoComplete="name" defaultValue="Elena Varga" />
33
+ </Field.Root>
34
+ <Field.Root>
35
+ <Field.Label htmlFor="onboarding-iban">IBAN</Field.Label>
36
+ <Input id="onboarding-iban" inputMode="text" placeholder="FR76 …" aria-describedby="onboarding-iban-hint" />
37
+ <Field.Hint id="onboarding-iban-hint">Checked before your first payout.</Field.Hint>
38
+ </Field.Root>
39
+ <div className="flex gap-2">
40
+ <Button type="button" variant="secondary" size="lg" shape="cut" className="flex-1">Back</Button>
41
+ <Button type="submit" variant="primary" size="lg" shape="cut" className="flex-1">Continue</Button>
42
+ </div>
43
+ </form>
44
+ </AuthLayout>
45
+ </div>
46
+ );
47
+ }
@@ -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;