@krizaka/ui 2.1.0 → 2.3.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 (289) hide show
  1. package/README.md +23 -9
  2. package/dist/{button-Cgfkg_3y.d.ts → button-BMAO7dKF.d.ts} +29 -2
  3. package/dist/button.d.ts +32 -5
  4. package/dist/button.js +62 -9
  5. package/dist/button.js.map +1 -1
  6. package/dist/chip-link.d.ts +53 -0
  7. package/dist/chip-link.js +32 -0
  8. package/dist/chip-link.js.map +1 -0
  9. package/dist/chunk-43PTCDTL.js +31 -0
  10. package/dist/chunk-43PTCDTL.js.map +1 -0
  11. package/dist/chunk-6ISW63JI.js +11 -0
  12. package/dist/chunk-6ISW63JI.js.map +1 -0
  13. package/dist/chunk-HAQWKORZ.js +117 -0
  14. package/dist/chunk-HAQWKORZ.js.map +1 -0
  15. package/dist/{chunk-FHYZSO2S.js → chunk-R6SDS7JM.js} +5 -3
  16. package/dist/chunk-R6SDS7JM.js.map +1 -0
  17. package/dist/chunk-RUPNPMP3.js +103 -0
  18. package/dist/chunk-RUPNPMP3.js.map +1 -0
  19. package/dist/chunk-VDR2EP6K.js +49 -0
  20. package/dist/chunk-VDR2EP6K.js.map +1 -0
  21. package/dist/chunk-WEVYKZIF.js +33 -0
  22. package/dist/chunk-WEVYKZIF.js.map +1 -0
  23. package/dist/command.d.ts +7 -7
  24. package/dist/command.js +3 -2
  25. package/dist/command.js.map +1 -1
  26. package/dist/confirm-button.d.ts +1 -1
  27. package/dist/confirm-button.js +2 -1
  28. package/dist/confirm-button.js.map +1 -1
  29. package/dist/{dialog-GQ4Nvuyf.d.ts → dialog-D42QwYb_.d.ts} +11 -1
  30. package/dist/dialog.d.ts +1 -1
  31. package/dist/dialog.js +3 -2
  32. package/dist/dialog.js.map +1 -1
  33. package/dist/glow-card.d.ts +20 -0
  34. package/dist/glow-card.js +30 -0
  35. package/dist/glow-card.js.map +1 -0
  36. package/dist/index.d.ts +2 -20
  37. package/dist/index.js +7 -64
  38. package/dist/index.js.map +1 -1
  39. package/dist/iso.d.ts +400 -0
  40. package/dist/iso.js +363 -0
  41. package/dist/iso.js.map +1 -0
  42. package/dist/loader.d.ts +206 -0
  43. package/dist/loader.js +138 -0
  44. package/dist/loader.js.map +1 -0
  45. package/dist/marquee.d.ts +33 -0
  46. package/dist/marquee.js +52 -0
  47. package/dist/marquee.js.map +1 -0
  48. package/dist/mascots.d.ts +40 -0
  49. package/dist/mascots.js +253 -0
  50. package/dist/mascots.js.map +1 -0
  51. package/dist/meter.d.ts +146 -0
  52. package/dist/meter.js +107 -0
  53. package/dist/meter.js.map +1 -0
  54. package/dist/motion.css +394 -3
  55. package/dist/motion.d.ts +46 -0
  56. package/dist/motion.js +10 -0
  57. package/dist/motion.js.map +1 -0
  58. package/dist/native.d.ts +40 -1
  59. package/dist/native.js +326 -128
  60. package/dist/native.js.map +1 -1
  61. package/dist/nav-bar.d.ts +178 -0
  62. package/dist/nav-bar.js +157 -0
  63. package/dist/nav-bar.js.map +1 -0
  64. package/dist/number-ticker.d.ts +32 -0
  65. package/dist/number-ticker.js +61 -0
  66. package/dist/number-ticker.js.map +1 -0
  67. package/dist/progress.d.ts +56 -1
  68. package/dist/progress.js +72 -25
  69. package/dist/progress.js.map +1 -1
  70. package/dist/skeleton.d.ts +18 -3
  71. package/dist/skeleton.js +9 -1
  72. package/dist/skeleton.js.map +1 -1
  73. package/dist/spinner.d.ts +21 -5
  74. package/dist/spinner.js +13 -12
  75. package/dist/spinner.js.map +1 -1
  76. package/dist/stepper.d.ts +112 -0
  77. package/dist/stepper.js +67 -0
  78. package/dist/stepper.js.map +1 -0
  79. package/dist/tabs.d.ts +1 -1
  80. package/dist/tabs.js +14 -8
  81. package/dist/tabs.js.map +1 -1
  82. package/dist/theme.d.ts +1 -1
  83. package/dist/theme.js +2 -1
  84. package/dist/theme.js.map +1 -1
  85. package/dist/toast.d.ts +39 -4
  86. package/dist/toast.js +81 -7
  87. package/dist/toast.js.map +1 -1
  88. package/package.json +159 -9
  89. package/registry/alert.json +1 -1
  90. package/registry/avatar.json +1 -1
  91. package/registry/badge.json +1 -1
  92. package/registry/button.json +232 -26
  93. package/registry/card.json +1 -1
  94. package/registry/checkbox.json +1 -1
  95. package/registry/chip-link.json +158 -0
  96. package/registry/chip.json +1 -1
  97. package/registry/command.json +1 -1
  98. package/registry/confirm-button.json +91 -7
  99. package/registry/countdown.json +1 -1
  100. package/registry/dialog.json +15 -7
  101. package/registry/dropdown-menu.json +1 -1
  102. package/registry/empty-state.json +1 -1
  103. package/registry/examples/button/error.js +11 -0
  104. package/registry/examples/button/error.tsx +10 -0
  105. package/registry/examples/button/loading.tsx +1 -1
  106. package/registry/examples/button/save-flow.d.ts +4 -0
  107. package/registry/examples/button/save-flow.js +28 -0
  108. package/registry/examples/button/save-flow.tsx +24 -0
  109. package/registry/examples/button/signature.d.ts +4 -0
  110. package/registry/examples/button/signature.js +17 -0
  111. package/registry/examples/button/signature.tsx +19 -0
  112. package/registry/examples/button/upload-progress.d.ts +4 -0
  113. package/registry/examples/button/upload-progress.js +23 -0
  114. package/registry/examples/button/upload-progress.tsx +26 -0
  115. package/registry/examples/chip-link/filters.d.ts +4 -0
  116. package/registry/examples/chip-link/filters.js +12 -0
  117. package/registry/examples/chip-link/filters.tsx +17 -0
  118. package/registry/examples/dialog/left.d.ts +4 -0
  119. package/registry/examples/dialog/left.js +22 -0
  120. package/registry/examples/dialog/left.tsx +32 -0
  121. package/registry/examples/glow-card/link-card.d.ts +4 -0
  122. package/registry/examples/glow-card/link-card.js +14 -0
  123. package/registry/examples/glow-card/link-card.tsx +13 -0
  124. package/registry/examples/glow-card/plans.d.ts +4 -0
  125. package/registry/examples/glow-card/plans.js +25 -0
  126. package/registry/examples/glow-card/plans.tsx +26 -0
  127. package/registry/examples/glow-card/spotlight.d.ts +4 -0
  128. package/registry/examples/glow-card/spotlight.js +14 -0
  129. package/registry/examples/glow-card/spotlight.tsx +15 -0
  130. package/registry/examples/iso/compose.d.ts +4 -0
  131. package/registry/examples/iso/compose.js +22 -0
  132. package/registry/examples/iso/compose.tsx +19 -0
  133. package/registry/examples/iso/orazaka-hero.d.ts +4 -0
  134. package/registry/examples/iso/orazaka-hero.js +26 -0
  135. package/registry/examples/iso/orazaka-hero.tsx +21 -0
  136. package/registry/examples/iso/orochia-hero.d.ts +4 -0
  137. package/registry/examples/iso/orochia-hero.js +29 -0
  138. package/registry/examples/iso/orochia-hero.tsx +23 -0
  139. package/registry/examples/iso/still.d.ts +4 -0
  140. package/registry/examples/iso/still.js +21 -0
  141. package/registry/examples/iso/still.tsx +15 -0
  142. package/registry/examples/loader/endings.d.ts +4 -0
  143. package/registry/examples/loader/endings.js +14 -0
  144. package/registry/examples/loader/endings.tsx +11 -0
  145. package/registry/examples/loader/fetch-flow.d.ts +4 -0
  146. package/registry/examples/loader/fetch-flow.js +24 -0
  147. package/registry/examples/loader/fetch-flow.tsx +24 -0
  148. package/registry/examples/loader/minimal.d.ts +4 -0
  149. package/registry/examples/loader/minimal.js +11 -0
  150. package/registry/examples/loader/minimal.tsx +6 -0
  151. package/registry/examples/loader/overlay.d.ts +4 -0
  152. package/registry/examples/loader/overlay.js +16 -0
  153. package/registry/examples/loader/overlay.tsx +13 -0
  154. package/registry/examples/loader/region-handover.d.ts +4 -0
  155. package/registry/examples/loader/region-handover.js +42 -0
  156. package/registry/examples/loader/region-handover.tsx +29 -0
  157. package/registry/examples/loader/upload-eta.d.ts +4 -0
  158. package/registry/examples/loader/upload-eta.js +11 -0
  159. package/registry/examples/loader/upload-eta.tsx +10 -0
  160. package/registry/examples/marquee/cards.d.ts +4 -0
  161. package/registry/examples/marquee/cards.js +23 -0
  162. package/registry/examples/marquee/cards.tsx +21 -0
  163. package/registry/examples/marquee/logos.d.ts +4 -0
  164. package/registry/examples/marquee/logos.js +12 -0
  165. package/registry/examples/marquee/logos.tsx +17 -0
  166. package/registry/examples/mascots/empty-state.d.ts +4 -0
  167. package/registry/examples/mascots/empty-state.js +24 -0
  168. package/registry/examples/mascots/empty-state.tsx +18 -0
  169. package/registry/examples/mascots/flock.d.ts +4 -0
  170. package/registry/examples/mascots/flock.js +14 -0
  171. package/registry/examples/mascots/flock.tsx +15 -0
  172. package/registry/examples/mascots/long-task.d.ts +4 -0
  173. package/registry/examples/mascots/long-task.js +18 -0
  174. package/registry/examples/mascots/long-task.tsx +15 -0
  175. package/registry/examples/mascots/moods.d.ts +4 -0
  176. package/registry/examples/mascots/moods.js +14 -0
  177. package/registry/examples/mascots/moods.tsx +15 -0
  178. package/registry/examples/mascots/native/default.d.ts +4 -0
  179. package/registry/examples/mascots/native/default.dark.png +0 -0
  180. package/registry/examples/mascots/native/default.js +25 -0
  181. package/registry/examples/mascots/native/default.light.png +0 -0
  182. package/registry/examples/mascots/native/default.tsx +22 -0
  183. package/registry/examples/mascots/own-tone.d.ts +4 -0
  184. package/registry/examples/mascots/own-tone.js +11 -0
  185. package/registry/examples/mascots/own-tone.tsx +12 -0
  186. package/registry/examples/meter/balance.d.ts +4 -0
  187. package/registry/examples/meter/balance.js +14 -0
  188. package/registry/examples/meter/balance.tsx +15 -0
  189. package/registry/examples/meter/quota.d.ts +4 -0
  190. package/registry/examples/meter/quota.js +15 -0
  191. package/registry/examples/meter/quota.tsx +12 -0
  192. package/registry/examples/meter/split.d.ts +4 -0
  193. package/registry/examples/meter/split.js +18 -0
  194. package/registry/examples/meter/split.tsx +18 -0
  195. package/registry/examples/nav-bar/app-bar.d.ts +4 -0
  196. package/registry/examples/nav-bar/app-bar.js +22 -0
  197. package/registry/examples/nav-bar/app-bar.tsx +21 -0
  198. package/registry/examples/nav-bar/menu-open.d.ts +4 -0
  199. package/registry/examples/nav-bar/menu-open.js +26 -0
  200. package/registry/examples/nav-bar/menu-open.tsx +26 -0
  201. package/registry/examples/nav-bar/site.d.ts +4 -0
  202. package/registry/examples/nav-bar/site.js +31 -0
  203. package/registry/examples/nav-bar/site.tsx +36 -0
  204. package/registry/examples/number-ticker/gradient.d.ts +4 -0
  205. package/registry/examples/number-ticker/gradient.js +11 -0
  206. package/registry/examples/number-ticker/gradient.tsx +10 -0
  207. package/registry/examples/number-ticker/live-total.d.ts +4 -0
  208. package/registry/examples/number-ticker/live-total.js +17 -0
  209. package/registry/examples/number-ticker/live-total.tsx +21 -0
  210. package/registry/examples/number-ticker/stats.d.ts +4 -0
  211. package/registry/examples/number-ticker/stats.js +19 -0
  212. package/registry/examples/number-ticker/stats.tsx +23 -0
  213. package/registry/examples/progress/buffer.d.ts +4 -0
  214. package/registry/examples/progress/buffer.js +11 -0
  215. package/registry/examples/progress/buffer.tsx +10 -0
  216. package/registry/examples/progress/statuses.d.ts +4 -0
  217. package/registry/examples/progress/statuses.js +14 -0
  218. package/registry/examples/progress/statuses.tsx +11 -0
  219. package/registry/examples/progress/steps.d.ts +4 -0
  220. package/registry/examples/progress/steps.js +14 -0
  221. package/registry/examples/progress/steps.tsx +13 -0
  222. package/registry/examples/progress/upload.d.ts +4 -0
  223. package/registry/examples/progress/upload.js +11 -0
  224. package/registry/examples/progress/upload.tsx +10 -0
  225. package/registry/examples/skeleton/paragraph.d.ts +4 -0
  226. package/registry/examples/skeleton/paragraph.js +14 -0
  227. package/registry/examples/skeleton/paragraph.tsx +12 -0
  228. package/registry/examples/skeleton/shape-of-content.d.ts +4 -0
  229. package/registry/examples/skeleton/shape-of-content.js +23 -0
  230. package/registry/examples/skeleton/shape-of-content.tsx +26 -0
  231. package/registry/examples/spinner/default.js +5 -2
  232. package/registry/examples/spinner/default.tsx +7 -1
  233. package/registry/examples/spinner/sizes.js +2 -1
  234. package/registry/examples/spinner/sizes.tsx +2 -0
  235. package/registry/examples/spinner/value.d.ts +4 -0
  236. package/registry/examples/spinner/value.js +11 -0
  237. package/registry/examples/spinner/value.tsx +12 -0
  238. package/registry/examples/stepper/checkout.d.ts +4 -0
  239. package/registry/examples/stepper/checkout.js +22 -0
  240. package/registry/examples/stepper/checkout.tsx +17 -0
  241. package/registry/examples/stepper/failed.d.ts +4 -0
  242. package/registry/examples/stepper/failed.js +26 -0
  243. package/registry/examples/stepper/failed.tsx +21 -0
  244. package/registry/examples/stepper/job.d.ts +4 -0
  245. package/registry/examples/stepper/job.js +32 -0
  246. package/registry/examples/stepper/job.tsx +28 -0
  247. package/registry/examples/toast/grouped.d.ts +4 -0
  248. package/registry/examples/toast/grouped.js +21 -0
  249. package/registry/examples/toast/grouped.tsx +23 -0
  250. package/registry/examples/toast/undo.d.ts +4 -0
  251. package/registry/examples/toast/undo.js +29 -0
  252. package/registry/examples/toast/undo.tsx +30 -0
  253. package/registry/examples/toast/upload-progress.d.ts +4 -0
  254. package/registry/examples/toast/upload-progress.js +29 -0
  255. package/registry/examples/toast/upload-progress.tsx +31 -0
  256. package/registry/field.json +1 -1
  257. package/registry/glow-card.json +162 -0
  258. package/registry/index.json +207 -20
  259. package/registry/iso.json +1355 -0
  260. package/registry/kbd.json +1 -1
  261. package/registry/loader.json +399 -0
  262. package/registry/marquee.json +225 -0
  263. package/registry/mascots.json +314 -0
  264. package/registry/meter.json +324 -0
  265. package/registry/nav-bar.json +480 -0
  266. package/registry/number-ticker.json +219 -0
  267. package/registry/page-header.json +1 -1
  268. package/registry/popover.json +1 -1
  269. package/registry/progress.json +116 -11
  270. package/registry/radio-group.json +1 -1
  271. package/registry/section-backdrop.json +1 -1
  272. package/registry/separator.json +1 -1
  273. package/registry/skeleton.json +69 -13
  274. package/registry/slider.json +1 -1
  275. package/registry/slot.json +1 -1
  276. package/registry/spinner.json +91 -27
  277. package/registry/stat.json +1 -1
  278. package/registry/stepper.json +174 -0
  279. package/registry/switch.json +1 -1
  280. package/registry/tabs.json +11 -7
  281. package/registry/theme.json +3 -3
  282. package/registry/toast.json +41 -13
  283. package/registry/tooltip.json +1 -1
  284. package/dist/chunk-FHYZSO2S.js.map +0 -1
  285. package/dist/chunk-PESA2R4U.js +0 -51
  286. package/dist/chunk-PESA2R4U.js.map +0 -1
  287. package/registry/examples/spinner/muted.js +0 -11
  288. package/registry/examples/spinner/muted.tsx +0 -6
  289. /package/registry/examples/{spinner/muted.d.ts → button/error.d.ts} +0 -0
@@ -126,7 +126,7 @@
126
126
  },
127
127
  {
128
128
  "path": "meta.ts",
129
- "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"kbd\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
129
+ "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"chip-link\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"glow-card\"\n | \"iso\"\n | \"kbd\"\n | \"loader\"\n | \"marquee\"\n | \"mascots\"\n | \"meter\"\n | \"nav-bar\"\n | \"number-ticker\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"stepper\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
130
130
  }
131
131
  ],
132
132
  "dependencies": [
@@ -176,7 +176,7 @@
176
176
  },
177
177
  {
178
178
  "path": "meta.ts",
179
- "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"kbd\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
179
+ "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"chip-link\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"glow-card\"\n | \"iso\"\n | \"kbd\"\n | \"loader\"\n | \"marquee\"\n | \"mascots\"\n | \"meter\"\n | \"nav-bar\"\n | \"number-ticker\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"stepper\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
180
180
  }
181
181
  ],
182
182
  "dependencies": [
@@ -0,0 +1,11 @@
1
+ "use client";
2
+
3
+ // registry/examples/button/error.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function ButtonError() {
7
+ return /* @__PURE__ */ jsx(Button, { variant: "danger", status: "error", announce: "The payment was declined", children: "Payment declined \u2014 retry" });
8
+ }
9
+ export {
10
+ ButtonError as default
11
+ };
@@ -0,0 +1,10 @@
1
+ import { Button } from "@krizaka/ui/button";
2
+
3
+ // A failure, said three ways: a cross draws itself, the button shakes its head once, and the message is announced.
4
+ export default function ButtonError() {
5
+ return (
6
+ <Button variant="danger" status="error" announce="The payment was declined">
7
+ Payment declined — retry
8
+ </Button>
9
+ );
10
+ }
@@ -1,6 +1,6 @@
1
1
  import { Button } from "@krizaka/ui/button";
2
2
 
3
- // Disabled, `aria-busy` and `data-loading`: add your own spinner if you want one.
3
+ // `loading`: disabled (never pressed twice), `aria-busy`, the loader glyph before the label — and its colour kept.
4
4
  export default function ButtonLoading() {
5
5
  return (
6
6
  <Button variant="primary" loading>
@@ -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,28 @@
1
+ "use client";
2
+
3
+ // registry/examples/button/save-flow.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { useState } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function ButtonSaveFlow() {
8
+ const [state, setState] = useState("idle");
9
+ const save = () => {
10
+ setState("saving");
11
+ setTimeout(() => setState("saved"), 1400);
12
+ setTimeout(() => setState("idle"), 3400);
13
+ };
14
+ return /* @__PURE__ */ jsx(
15
+ Button,
16
+ {
17
+ variant: "primary",
18
+ loading: state === "saving",
19
+ status: state === "saved" ? "success" : null,
20
+ announce: state === "saved" ? "Changes saved" : "",
21
+ onClick: save,
22
+ children: state === "saving" ? "Saving\u2026" : state === "saved" ? "Saved" : "Save changes"
23
+ }
24
+ );
25
+ }
26
+ export {
27
+ ButtonSaveFlow as default
28
+ };
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { Button } from "@krizaka/ui/button";
3
+ import { useState } from "react";
4
+
5
+ // A save that runs, then confirms: the glyph traces the wait, a check draws itself, the result is announced.
6
+ export default function ButtonSaveFlow() {
7
+ const [state, setState] = useState<"idle" | "saving" | "saved">("idle");
8
+ const save = () => {
9
+ setState("saving");
10
+ setTimeout(() => setState("saved"), 1400);
11
+ setTimeout(() => setState("idle"), 3400);
12
+ };
13
+ return (
14
+ <Button
15
+ variant="primary"
16
+ loading={state === "saving"}
17
+ status={state === "saved" ? "success" : null}
18
+ announce={state === "saved" ? "Changes saved" : ""}
19
+ onClick={save}
20
+ >
21
+ {state === "saving" ? "Saving…" : state === "saved" ? "Saved" : "Save changes"}
22
+ </Button>
23
+ );
24
+ }
@@ -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,17 @@
1
+ "use client";
2
+
3
+ // registry/examples/button/signature.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function ButtonSignature() {
7
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
8
+ /* @__PURE__ */ jsxs(Button, { variant: "gradient", size: "lg", shape: "cut", shimmer: true, magnetic: true, children: [
9
+ "Start free",
10
+ /* @__PURE__ */ jsx("svg", { "data-kz-icon": "ForwardIcon", viewBox: "0 0 24 24", className: "h-4 w-4", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M5 12h14M13 6l6 6-6 6" }) })
11
+ ] }),
12
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "lg", shape: "cut", children: "Talk to us" })
13
+ ] });
14
+ }
15
+ export {
16
+ ButtonSignature as default
17
+ };
@@ -0,0 +1,19 @@
1
+ import { Button } from "@krizaka/ui/button";
2
+
3
+ // The one action a page is about: cut corners, the brand gradient, a sheen on hover, a lean toward the pointer
4
+ // (`magnetic`, with MotionObserver mounted). The arrow of a signature icon leans forward on hover too.
5
+ export default function ButtonSignature() {
6
+ return (
7
+ <div className="flex flex-wrap items-center gap-3">
8
+ <Button variant="gradient" size="lg" shape="cut" shimmer magnetic>
9
+ Start free
10
+ <svg data-kz-icon="ForwardIcon" viewBox="0 0 24 24" className="h-4 w-4" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden>
11
+ <path d="M5 12h14M13 6l6 6-6 6" />
12
+ </svg>
13
+ </Button>
14
+ <Button variant="outline" size="lg" shape="cut">
15
+ Talk to us
16
+ </Button>
17
+ </div>
18
+ );
19
+ }
@@ -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,23 @@
1
+ "use client";
2
+
3
+ // registry/examples/button/upload-progress.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { useEffect, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function ButtonUploadProgress() {
8
+ const [progress, setProgress] = useState(0.65);
9
+ const [running, setRunning] = useState(false);
10
+ useEffect(() => {
11
+ if (!running || progress >= 1) return;
12
+ const timer = setTimeout(() => setProgress((p) => Math.min(1, p + 0.15)), 700);
13
+ return () => clearTimeout(timer);
14
+ }, [running, progress]);
15
+ const done = progress >= 1;
16
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
17
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", loading: !done, progress, status: done ? "success" : null, children: done ? "Exported" : `Exporting ${Math.round(progress * 100)} %` }),
18
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: () => (setProgress(0.05), setRunning(true)), children: "Run it" })
19
+ ] });
20
+ }
21
+ export {
22
+ ButtonUploadProgress as default
23
+ };
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { Button } from "@krizaka/ui/button";
3
+ import { useEffect, useState } from "react";
4
+
5
+ // An export with a known length: the trace and a light fill grow across the button; it keeps its width and colour.
6
+ // “Run it” plays the export from the start.
7
+ export default function ButtonUploadProgress() {
8
+ const [progress, setProgress] = useState(0.65);
9
+ const [running, setRunning] = useState(false);
10
+ useEffect(() => {
11
+ if (!running || progress >= 1) return;
12
+ const timer = setTimeout(() => setProgress((p) => Math.min(1, p + 0.15)), 700);
13
+ return () => clearTimeout(timer);
14
+ }, [running, progress]);
15
+ const done = progress >= 1;
16
+ return (
17
+ <div className="flex items-center gap-3">
18
+ <Button variant="secondary" loading={!done} progress={progress} status={done ? "success" : null}>
19
+ {done ? "Exported" : `Exporting ${Math.round(progress * 100)} %`}
20
+ </Button>
21
+ <Button variant="ghost" size="sm" onClick={() => (setProgress(0.05), setRunning(true))}>
22
+ Run it
23
+ </Button>
24
+ </div>
25
+ );
26
+ }
@@ -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,12 @@
1
+ "use client";
2
+
3
+ // registry/examples/chip-link/filters.tsx
4
+ import { ChipLink } from "@krizaka/ui/chip-link";
5
+ import { jsx } from "react/jsx-runtime";
6
+ var tags = ["All", "Night", "Street", "Portrait", "Drone"];
7
+ function ChipLinkFilters() {
8
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "Tags", className: "flex flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ jsx(ChipLink, { href: `#tag-${tag.toLowerCase()}`, selected: tag === "Night", children: tag }, tag)) });
9
+ }
10
+ export {
11
+ ChipLinkFilters as default
12
+ };
@@ -0,0 +1,17 @@
1
+ import { ChipLink } from "@krizaka/ui/chip-link";
2
+
3
+ const tags = ["All", "Night", "Street", "Portrait", "Drone"];
4
+
5
+ // Filters that are addresses (`/explore?tag=night`): links with the chip's look, the current one marked — rendered
6
+ // on the server, no client JavaScript. With a router: `<ChipLink asChild><Link href="…" /></ChipLink>`.
7
+ export default function ChipLinkFilters() {
8
+ return (
9
+ <nav aria-label="Tags" className="flex flex-wrap gap-2">
10
+ {tags.map((tag) => (
11
+ <ChipLink key={tag} href={`#tag-${tag.toLowerCase()}`} selected={tag === "Night"}>
12
+ {tag}
13
+ </ChipLink>
14
+ ))}
15
+ </nav>
16
+ );
17
+ }
@@ -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,22 @@
1
+ "use client";
2
+
3
+ // registry/examples/dialog/left.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { Dialog } from "@krizaka/ui/dialog";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ var conversations = ["Pricing questions", "Onboarding Eric", "Weekly report"];
8
+ function DialogLeft({ defaultOpen = false }) {
9
+ return /* @__PURE__ */ jsxs(Dialog.Root, { defaultOpen, children: [
10
+ /* @__PURE__ */ jsx(Dialog.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { children: "Conversations" }) }),
11
+ /* @__PURE__ */ jsxs(Dialog.Content, { closeLabel: "Close", placement: "left", size: "sm", children: [
12
+ /* @__PURE__ */ jsxs(Dialog.Header, { children: [
13
+ /* @__PURE__ */ jsx(Dialog.Title, { children: "Conversations" }),
14
+ /* @__PURE__ */ jsx(Dialog.Description, { children: "Your last three conversations." })
15
+ ] }),
16
+ /* @__PURE__ */ jsx(Dialog.Body, { children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1", children: conversations.map((c) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: "#chat", className: "block rounded-lg px-3 py-2.5 text-sm text-fg hover:bg-surface-2", children: c }) }, c)) }) })
17
+ ] })
18
+ ] });
19
+ }
20
+ export {
21
+ DialogLeft as default
22
+ };
@@ -0,0 +1,32 @@
1
+ import { Button } from "@krizaka/ui/button";
2
+ import { Dialog } from "@krizaka/ui/dialog";
3
+
4
+ const conversations = ["Pricing questions", "Onboarding Eric", "Weekly report"];
5
+
6
+ // `placement="left"`: a navigation drawer — the conversations of a chat app on a phone, sliding in from the left.
7
+ export default function DialogLeft({ defaultOpen = false }: { defaultOpen?: boolean }) {
8
+ return (
9
+ <Dialog.Root defaultOpen={defaultOpen}>
10
+ <Dialog.Trigger asChild>
11
+ <Button>Conversations</Button>
12
+ </Dialog.Trigger>
13
+ <Dialog.Content closeLabel="Close" placement="left" size="sm">
14
+ <Dialog.Header>
15
+ <Dialog.Title>Conversations</Dialog.Title>
16
+ <Dialog.Description>Your last three conversations.</Dialog.Description>
17
+ </Dialog.Header>
18
+ <Dialog.Body>
19
+ <ul className="flex flex-col gap-1">
20
+ {conversations.map((c) => (
21
+ <li key={c}>
22
+ <a href="#chat" className="block rounded-lg px-3 py-2.5 text-sm text-fg hover:bg-surface-2">
23
+ {c}
24
+ </a>
25
+ </li>
26
+ ))}
27
+ </ul>
28
+ </Dialog.Body>
29
+ </Dialog.Content>
30
+ </Dialog.Root>
31
+ );
32
+ }
@@ -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/glow-card/link-card.tsx
4
+ import { GlowCard } from "@krizaka/ui/glow-card";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function GlowCardLink() {
7
+ return /* @__PURE__ */ jsx(GlowCard, { asChild: true, glow: "border", className: "block max-w-sm no-underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring", children: /* @__PURE__ */ jsxs("a", { href: "#docs", children: [
8
+ /* @__PURE__ */ jsx("span", { className: "block font-display text-lg font-semibold text-fg", children: "Read the documentation" }),
9
+ /* @__PURE__ */ jsx("span", { className: "mt-1 block text-sm text-fg-secondary", children: "Every component, its examples and its props \u2014 generated from the code." })
10
+ ] }) });
11
+ }
12
+ export {
13
+ GlowCardLink as default
14
+ };
@@ -0,0 +1,13 @@
1
+ import { GlowCard } from "@krizaka/ui/glow-card";
2
+
3
+ // `asChild`: the card is the link. The focus lights the ring as the pointer does — keyboard readers get the same answer.
4
+ export default function GlowCardLink() {
5
+ return (
6
+ <GlowCard asChild glow="border" className="block max-w-sm no-underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring">
7
+ <a href="#docs">
8
+ <span className="block font-display text-lg font-semibold text-fg">Read the documentation</span>
9
+ <span className="mt-1 block text-sm text-fg-secondary">Every component, its examples and its props — generated from the code.</span>
10
+ </a>
11
+ </GlowCard>
12
+ );
13
+ }
@@ -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,25 @@
1
+ "use client";
2
+
3
+ // registry/examples/glow-card/plans.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { GlowCard } from "@krizaka/ui/glow-card";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ var plans = [
8
+ { name: "Community", price: "Free", line: "Self-hosted, every feature." },
9
+ { name: "Team", price: "\u20AC19", line: "Shared workspaces and roles.", featured: true },
10
+ { name: "Sovereign", price: "Custom", line: "Your servers, our support." }
11
+ ];
12
+ function GlowCardPlans() {
13
+ return /* @__PURE__ */ jsx("div", { className: "grid w-full max-w-3xl gap-4 sm:grid-cols-3", children: plans.map((p) => /* @__PURE__ */ jsxs(GlowCard, { alive: p.featured, className: "flex flex-col gap-3", children: [
14
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-lg font-semibold text-fg", children: p.name }),
15
+ /* @__PURE__ */ jsx("p", { className: "font-display text-3xl font-bold text-fg", children: p.price }),
16
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: p.line }),
17
+ /* @__PURE__ */ jsxs(Button, { variant: p.featured ? "gradient" : "outline", size: "sm", className: "mt-auto", children: [
18
+ "Choose ",
19
+ p.name
20
+ ] })
21
+ ] }, p.name)) });
22
+ }
23
+ export {
24
+ GlowCardPlans as default
25
+ };
@@ -0,0 +1,26 @@
1
+ import { Button } from "@krizaka/ui/button";
2
+ import { GlowCard } from "@krizaka/ui/glow-card";
3
+
4
+ const plans = [
5
+ { name: "Community", price: "Free", line: "Self-hosted, every feature." },
6
+ { name: "Team", price: "€19", line: "Shared workspaces and roles.", featured: true },
7
+ { name: "Sovereign", price: "Custom", line: "Your servers, our support." },
8
+ ];
9
+
10
+ // Plans: move the pointer across them — the light follows, the ring brightens. The featured plan's ring turns at rest.
11
+ export default function GlowCardPlans() {
12
+ return (
13
+ <div className="grid w-full max-w-3xl gap-4 sm:grid-cols-3">
14
+ {plans.map((p) => (
15
+ <GlowCard key={p.name} alive={p.featured} className="flex flex-col gap-3">
16
+ <h3 className="font-display text-lg font-semibold text-fg">{p.name}</h3>
17
+ <p className="font-display text-3xl font-bold text-fg">{p.price}</p>
18
+ <p className="text-sm text-fg-secondary">{p.line}</p>
19
+ <Button variant={p.featured ? "gradient" : "outline"} size="sm" className="mt-auto">
20
+ Choose {p.name}
21
+ </Button>
22
+ </GlowCard>
23
+ ))}
24
+ </div>
25
+ );
26
+ }
@@ -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/glow-card/spotlight.tsx
4
+ import { GlowCard } from "@krizaka/ui/glow-card";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function GlowCardSpotlight() {
7
+ return /* @__PURE__ */ jsx("div", { className: "grid w-full max-w-lg grid-cols-2 gap-3", children: ["Tips", "Unlocks", "Auctions", "Challenges"].map((name) => /* @__PURE__ */ jsxs(GlowCard, { glow: "spotlight", className: "p-4", children: [
8
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-fg", children: name }),
9
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-fg-secondary", children: "90 % to the creator" })
10
+ ] }, name)) });
11
+ }
12
+ export {
13
+ GlowCardSpotlight as default
14
+ };
@@ -0,0 +1,15 @@
1
+ import { GlowCard } from "@krizaka/ui/glow-card";
2
+
3
+ // `glow="spotlight"`: only the bloom under the pointer, for a dense grid where rings would be too much.
4
+ export default function GlowCardSpotlight() {
5
+ return (
6
+ <div className="grid w-full max-w-lg grid-cols-2 gap-3">
7
+ {["Tips", "Unlocks", "Auctions", "Challenges"].map((name) => (
8
+ <GlowCard key={name} glow="spotlight" className="p-4">
9
+ <p className="font-semibold text-fg">{name}</p>
10
+ <p className="text-xs text-fg-secondary">90 % to the creator</p>
11
+ </GlowCard>
12
+ ))}
13
+ </div>
14
+ );
15
+ }
@@ -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,22 @@
1
+ "use client";
2
+
3
+ // registry/examples/iso/compose.tsx
4
+ import { IsoDome, IsoLink, IsoNode, IsoPrism, IsoScene, IsoTile } from "@krizaka/ui/iso";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function IsoCompose() {
7
+ return /* @__PURE__ */ jsxs(IsoScene, { label: "A model served from one node", className: "w-full max-w-md", extent: 230, top: 190, viewBox: "-260 -250 520 360", children: [
8
+ /* @__PURE__ */ jsx(IsoLink, { from: [-40, -190], to: [-40, -60], label: "Prompt" }),
9
+ /* @__PURE__ */ jsx(IsoLink, { from: [60, 0], to: [190, 0], direction: "out", label: "Answer" }),
10
+ /* @__PURE__ */ jsx(IsoDome, { radius: 110, part: "rim" }),
11
+ /* @__PURE__ */ jsx(IsoTile, { at: [-40, -190], z: 70, glyph: "dots", label: "Chat", index: 0 }),
12
+ /* @__PURE__ */ jsx(IsoPrism, { shape: "hex", size: 170, height: 12, index: 1 }),
13
+ /* @__PURE__ */ jsx(IsoPrism, { size: 92, z: 16, height: 34, strip: true, label: "Model", index: 2 }),
14
+ /* @__PURE__ */ jsx(IsoPrism, { shape: "hex", size: 44, z: 54, height: 14, material: "accent", index: 3 }),
15
+ /* @__PURE__ */ jsx(IsoNode, { z: 78, index: 4 }),
16
+ /* @__PURE__ */ jsx(IsoDome, { radius: 110, height: 170, part: "arc" }),
17
+ /* @__PURE__ */ jsx(IsoTile, { at: [190, 0], z: 56, glyph: "lines", material: "glass", label: "Document", index: 5 })
18
+ ] });
19
+ }
20
+ export {
21
+ IsoCompose as default
22
+ };
@@ -0,0 +1,19 @@
1
+ import { IsoDome, IsoLink, IsoNode, IsoPrism, IsoScene, IsoTile } from "@krizaka/ui/iso";
2
+
3
+ // The primitives, composed by hand: painted back to front, each object rising in turn (`index`).
4
+ export default function IsoCompose() {
5
+ return (
6
+ <IsoScene label="A model served from one node" className="w-full max-w-md" extent={230} top={190} viewBox="-260 -250 520 360">
7
+ <IsoLink from={[-40, -190]} to={[-40, -60]} label="Prompt" />
8
+ <IsoLink from={[60, 0]} to={[190, 0]} direction="out" label="Answer" />
9
+ <IsoDome radius={110} part="rim" />
10
+ <IsoTile at={[-40, -190]} z={70} glyph="dots" label="Chat" index={0} />
11
+ <IsoPrism shape="hex" size={170} height={12} index={1} />
12
+ <IsoPrism size={92} z={16} height={34} strip label="Model" index={2} />
13
+ <IsoPrism shape="hex" size={44} z={54} height={14} material="accent" index={3} />
14
+ <IsoNode z={78} index={4} />
15
+ <IsoDome radius={110} height={170} part="arc" />
16
+ <IsoTile at={[190, 0]} z={56} glyph="lines" material="glass" label="Document" index={5} />
17
+ </IsoScene>
18
+ );
19
+ }
@@ -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/iso/orazaka-hero.tsx
4
+ import { IsoHub } from "@krizaka/ui/iso";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function IsoOrazakaHero() {
7
+ return /* @__PURE__ */ jsx(
8
+ IsoHub,
9
+ {
10
+ label: "Your AI runs on your own servers",
11
+ description: "A stack of three servers \u2014 gateway, models, data \u2014 under a dome; chats and documents flow in, answers flow out.",
12
+ className: "w-full max-w-xl",
13
+ dome: "Your infrastructure",
14
+ layers: [{ label: "Data" }, { label: "Models" }, { label: "Gateway" }],
15
+ core: "Orchestrator",
16
+ satellites: [
17
+ { label: "Chats", glyph: "dots", flow: "in" },
18
+ { label: "Documents", glyph: "lines", flow: "in", material: "glass" },
19
+ { label: "Answers", glyph: "arrow", flow: "out" }
20
+ ]
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ IsoOrazakaHero as default
26
+ };
@@ -0,0 +1,21 @@
1
+ import { IsoHub } from "@krizaka/ui/iso";
2
+
3
+ // Sovereign servers under a dome: three stages, a lit core, requests and documents flowing in, answers flowing out.
4
+ // Wrap it in `.brand-orazaka` (or any brand) and the light follows the brand's accent.
5
+ export default function IsoOrazakaHero() {
6
+ return (
7
+ <IsoHub
8
+ label="Your AI runs on your own servers"
9
+ description="A stack of three servers — gateway, models, data — under a dome; chats and documents flow in, answers flow out."
10
+ className="w-full max-w-xl"
11
+ dome="Your infrastructure"
12
+ layers={[{ label: "Data" }, { label: "Models" }, { label: "Gateway" }]}
13
+ core="Orchestrator"
14
+ satellites={[
15
+ { label: "Chats", glyph: "dots", flow: "in" },
16
+ { label: "Documents", glyph: "lines", flow: "in", material: "glass" },
17
+ { label: "Answers", glyph: "arrow", flow: "out" },
18
+ ]}
19
+ />
20
+ );
21
+ }
@@ -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;