@krizaka/ui 2.8.0 → 2.10.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 (423) hide show
  1. package/README.md +73 -5
  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/blocks.css +247 -0
  12. package/dist/catalogue-page.d.ts +34 -0
  13. package/dist/catalogue-page.js +26 -0
  14. package/dist/catalogue-page.js.map +1 -0
  15. package/dist/changelog-page.d.ts +50 -0
  16. package/dist/changelog-page.js +27 -0
  17. package/dist/changelog-page.js.map +1 -0
  18. package/dist/choice-grid.d.ts +84 -0
  19. package/dist/choice-grid.js +141 -0
  20. package/dist/choice-grid.js.map +1 -0
  21. package/dist/chunk-555LWYIN.js +11 -0
  22. package/dist/chunk-555LWYIN.js.map +1 -0
  23. package/dist/chunk-AZPKXP3O.js +36 -0
  24. package/dist/chunk-AZPKXP3O.js.map +1 -0
  25. package/dist/{chunk-NOVUREEC.js → chunk-JZPVUJIX.js} +25 -3
  26. package/dist/chunk-JZPVUJIX.js.map +1 -0
  27. package/dist/chunk-KNBYZGSQ.js +11 -0
  28. package/dist/chunk-KNBYZGSQ.js.map +1 -0
  29. package/dist/chunk-VCAAHCHL.js +17 -0
  30. package/dist/chunk-VCAAHCHL.js.map +1 -0
  31. package/dist/code-block.js +23 -44
  32. package/dist/code-block.js.map +1 -1
  33. package/dist/component-page.d.ts +41 -0
  34. package/dist/component-page.js +17 -0
  35. package/dist/component-page.js.map +1 -0
  36. package/dist/contact-page.d.ts +31 -0
  37. package/dist/contact-page.js +26 -0
  38. package/dist/contact-page.js.map +1 -0
  39. package/dist/continue-prompt.d.ts +48 -0
  40. package/dist/continue-prompt.js +200 -0
  41. package/dist/continue-prompt.js.map +1 -0
  42. package/dist/dashboard-layout.d.ts +139 -0
  43. package/dist/dashboard-layout.js +68 -0
  44. package/dist/dashboard-layout.js.map +1 -0
  45. package/dist/detail-layout.d.ts +126 -0
  46. package/dist/detail-layout.js +48 -0
  47. package/dist/detail-layout.js.map +1 -0
  48. package/dist/docs-article-page.d.ts +54 -0
  49. package/dist/docs-article-page.js +29 -0
  50. package/dist/docs-article-page.js.map +1 -0
  51. package/dist/docs-hub-page.d.ts +72 -0
  52. package/dist/docs-hub-page.js +45 -0
  53. package/dist/docs-hub-page.js.map +1 -0
  54. package/dist/docs-layout.d.ts +78 -0
  55. package/dist/docs-layout.js +60 -0
  56. package/dist/docs-layout.js.map +1 -0
  57. package/dist/error-page.d.ts +22 -0
  58. package/dist/error-page.js +23 -0
  59. package/dist/error-page.js.map +1 -0
  60. package/dist/gallery-page.d.ts +50 -0
  61. package/dist/gallery-page.js +30 -0
  62. package/dist/gallery-page.js.map +1 -0
  63. package/dist/{geometry-CXrAW34x.d.ts → geometry-CbOU4rtL.d.ts} +4 -4
  64. package/dist/goal-gauge.d.ts +38 -0
  65. package/dist/goal-gauge.js +53 -0
  66. package/dist/goal-gauge.js.map +1 -0
  67. package/dist/how-it-works-page.d.ts +48 -0
  68. package/dist/how-it-works-page.js +28 -0
  69. package/dist/how-it-works-page.js.map +1 -0
  70. package/dist/index.d.ts +16 -6
  71. package/dist/index.js +115 -24
  72. package/dist/index.js.map +1 -1
  73. package/dist/landing-page.d.ts +58 -0
  74. package/dist/landing-page.js +42 -0
  75. package/dist/landing-page.js.map +1 -0
  76. package/dist/landscape.d.ts +41 -0
  77. package/dist/landscape.js +836 -0
  78. package/dist/landscape.js.map +1 -0
  79. package/dist/legal-page.d.ts +34 -0
  80. package/dist/legal-page.js +18 -0
  81. package/dist/legal-page.js.map +1 -0
  82. package/dist/longform-page.d.ts +42 -0
  83. package/dist/longform-page.js +29 -0
  84. package/dist/longform-page.js.map +1 -0
  85. package/dist/marketing-layout.d.ts +60 -0
  86. package/dist/marketing-layout.js +25 -0
  87. package/dist/marketing-layout.js.map +1 -0
  88. package/dist/mascot-quote.d.ts +4 -4
  89. package/dist/mascot-quote.js +23 -1
  90. package/dist/mascot-quote.js.map +1 -1
  91. package/dist/mascot-state.d.ts +2 -2
  92. package/dist/mascot-state.js +1 -1
  93. package/dist/mascot-state.js.map +1 -1
  94. package/dist/mascots.d.ts +18 -5
  95. package/dist/mascots.js +87 -2
  96. package/dist/mascots.js.map +1 -1
  97. package/dist/native.d.ts +88 -11
  98. package/dist/native.js +640 -297
  99. package/dist/native.js.map +1 -1
  100. package/dist/pricing-page.d.ts +62 -0
  101. package/dist/pricing-page.js +71 -0
  102. package/dist/pricing-page.js.map +1 -0
  103. package/dist/product-page.d.ts +83 -0
  104. package/dist/product-page.js +60 -0
  105. package/dist/product-page.js.map +1 -0
  106. package/dist/profile-card.d.ts +85 -0
  107. package/dist/profile-card.js +87 -0
  108. package/dist/profile-card.js.map +1 -0
  109. package/dist/promise-card.d.ts +28 -0
  110. package/dist/promise-card.js +29 -0
  111. package/dist/promise-card.js.map +1 -0
  112. package/dist/scroll-stage.d.ts +603 -0
  113. package/dist/scroll-stage.js +59 -0
  114. package/dist/scroll-stage.js.map +1 -0
  115. package/dist/settings-layout.d.ts +154 -0
  116. package/dist/settings-layout.js +57 -0
  117. package/dist/settings-layout.js.map +1 -0
  118. package/dist/split-view.d.ts +106 -0
  119. package/dist/split-view.js +41 -0
  120. package/dist/split-view.js.map +1 -0
  121. package/dist/stage-banner.d.ts +34 -0
  122. package/dist/stage-banner.js +26 -0
  123. package/dist/stage-banner.js.map +1 -0
  124. package/dist/status-page.d.ts +42 -0
  125. package/dist/status-page.js +28 -0
  126. package/dist/status-page.js.map +1 -0
  127. package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
  128. package/dist/story.css +432 -0
  129. package/package.json +478 -10
  130. package/registry/achievement.json +322 -0
  131. package/registry/action-bar.json +1 -1
  132. package/registry/alert.json +1 -1
  133. package/registry/app-shell.json +451 -0
  134. package/registry/argument-card.json +1 -1
  135. package/registry/audio-player.json +1 -1
  136. package/registry/auth-layout.json +230 -0
  137. package/registry/avatar.json +1 -1
  138. package/registry/badge.json +1 -1
  139. package/registry/button.json +5 -5
  140. package/registry/card-grid.json +5 -5
  141. package/registry/card.json +3 -3
  142. package/registry/catalogue-page.json +240 -0
  143. package/registry/changelog-page.json +226 -0
  144. package/registry/checkbox.json +1 -1
  145. package/registry/chip-link.json +1 -1
  146. package/registry/chip.json +1 -1
  147. package/registry/choice-grid.json +318 -0
  148. package/registry/code-block.json +1 -1
  149. package/registry/combobox.json +1 -1
  150. package/registry/command.json +1 -1
  151. package/registry/component-page.json +227 -0
  152. package/registry/confirm-button.json +3 -3
  153. package/registry/contact-page.json +212 -0
  154. package/registry/continue-prompt.json +312 -0
  155. package/registry/countdown.json +1 -1
  156. package/registry/cta-panel.json +1 -1
  157. package/registry/dashboard-layout.json +273 -0
  158. package/registry/data-table.json +1 -1
  159. package/registry/date-picker.json +1 -1
  160. package/registry/decision-list.json +1 -1
  161. package/registry/detail-layout.json +233 -0
  162. package/registry/dialog.json +1 -1
  163. package/registry/docs-article-page.json +242 -0
  164. package/registry/docs-hub-page.json +270 -0
  165. package/registry/docs-layout.json +148 -0
  166. package/registry/dropdown-menu.json +3 -3
  167. package/registry/empty-state.json +1 -1
  168. package/registry/error-page.json +183 -0
  169. package/registry/examples/achievement/arcade.d.ts +4 -0
  170. package/registry/examples/achievement/arcade.js +15 -0
  171. package/registry/examples/achievement/arcade.tsx +12 -0
  172. package/registry/examples/achievement/milestones.d.ts +4 -0
  173. package/registry/examples/achievement/milestones.js +15 -0
  174. package/registry/examples/achievement/milestones.tsx +12 -0
  175. package/registry/examples/app-shell/admin-console.d.ts +4 -0
  176. package/registry/examples/app-shell/admin-console.js +52 -0
  177. package/registry/examples/app-shell/admin-console.tsx +64 -0
  178. package/registry/examples/app-shell/basic.d.ts +4 -0
  179. package/registry/examples/app-shell/basic.js +37 -0
  180. package/registry/examples/app-shell/basic.tsx +31 -0
  181. package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
  182. package/registry/examples/app-shell/orochia-studio.js +89 -0
  183. package/registry/examples/app-shell/orochia-studio.tsx +101 -0
  184. package/registry/examples/auth-layout/onboarding.d.ts +4 -0
  185. package/registry/examples/auth-layout/onboarding.js +56 -0
  186. package/registry/examples/auth-layout/onboarding.tsx +47 -0
  187. package/registry/examples/auth-layout/sign-in.d.ts +4 -0
  188. package/registry/examples/auth-layout/sign-in.js +55 -0
  189. package/registry/examples/auth-layout/sign-in.tsx +47 -0
  190. package/registry/examples/auth-layout/verify.d.ts +4 -0
  191. package/registry/examples/auth-layout/verify.js +23 -0
  192. package/registry/examples/auth-layout/verify.tsx +19 -0
  193. package/registry/examples/catalogue-page/components.d.ts +4 -0
  194. package/registry/examples/catalogue-page/components.js +33 -0
  195. package/registry/examples/catalogue-page/components.tsx +36 -0
  196. package/registry/examples/changelog-page/releases.d.ts +4 -0
  197. package/registry/examples/changelog-page/releases.js +44 -0
  198. package/registry/examples/changelog-page/releases.tsx +39 -0
  199. package/registry/examples/choice-grid/line-up.d.ts +4 -0
  200. package/registry/examples/choice-grid/line-up.js +37 -0
  201. package/registry/examples/choice-grid/line-up.tsx +32 -0
  202. package/registry/examples/choice-grid/plans.d.ts +4 -0
  203. package/registry/examples/choice-grid/plans.js +28 -0
  204. package/registry/examples/choice-grid/plans.tsx +24 -0
  205. package/registry/examples/component-page/button.d.ts +4 -0
  206. package/registry/examples/component-page/button.js +33 -0
  207. package/registry/examples/component-page/button.tsx +30 -0
  208. package/registry/examples/contact-page/team.d.ts +4 -0
  209. package/registry/examples/contact-page/team.js +39 -0
  210. package/registry/examples/contact-page/team.tsx +38 -0
  211. package/registry/examples/continue-prompt/arcade.d.ts +4 -0
  212. package/registry/examples/continue-prompt/arcade.js +28 -0
  213. package/registry/examples/continue-prompt/arcade.tsx +25 -0
  214. package/registry/examples/continue-prompt/offer.d.ts +4 -0
  215. package/registry/examples/continue-prompt/offer.js +24 -0
  216. package/registry/examples/continue-prompt/offer.tsx +19 -0
  217. package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
  218. package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
  219. package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
  220. package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
  221. package/registry/examples/dashboard-layout/widgets.js +17 -0
  222. package/registry/examples/dashboard-layout/widgets.tsx +22 -0
  223. package/registry/examples/detail-layout/job.d.ts +4 -0
  224. package/registry/examples/detail-layout/job.js +25 -0
  225. package/registry/examples/detail-layout/job.tsx +20 -0
  226. package/registry/examples/detail-layout/video.d.ts +4 -0
  227. package/registry/examples/detail-layout/video.js +44 -0
  228. package/registry/examples/detail-layout/video.tsx +53 -0
  229. package/registry/examples/docs-article-page/cli.d.ts +4 -0
  230. package/registry/examples/docs-article-page/cli.js +33 -0
  231. package/registry/examples/docs-article-page/cli.tsx +38 -0
  232. package/registry/examples/docs-hub-page/krizaka.d.ts +4 -0
  233. package/registry/examples/docs-hub-page/krizaka.js +46 -0
  234. package/registry/examples/docs-hub-page/krizaka.tsx +37 -0
  235. package/registry/examples/docs-layout/page.d.ts +4 -0
  236. package/registry/examples/docs-layout/page.js +26 -0
  237. package/registry/examples/docs-layout/page.tsx +30 -0
  238. package/registry/examples/error-page/not-found.d.ts +4 -0
  239. package/registry/examples/error-page/not-found.js +24 -0
  240. package/registry/examples/error-page/not-found.tsx +19 -0
  241. package/registry/examples/gallery-page/made-here.d.ts +4 -0
  242. package/registry/examples/gallery-page/made-here.js +34 -0
  243. package/registry/examples/gallery-page/made-here.tsx +32 -0
  244. package/registry/examples/goal-gauge/arcade.d.ts +4 -0
  245. package/registry/examples/goal-gauge/arcade.js +11 -0
  246. package/registry/examples/goal-gauge/arcade.tsx +10 -0
  247. package/registry/examples/goal-gauge/challenge.d.ts +4 -0
  248. package/registry/examples/goal-gauge/challenge.js +11 -0
  249. package/registry/examples/goal-gauge/challenge.tsx +10 -0
  250. package/registry/examples/goal-gauge/drain.d.ts +4 -0
  251. package/registry/examples/goal-gauge/drain.js +11 -0
  252. package/registry/examples/goal-gauge/drain.tsx +10 -0
  253. package/registry/examples/goal-gauge/native/default.d.ts +4 -0
  254. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  255. package/registry/examples/goal-gauge/native/default.js +15 -0
  256. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  257. package/registry/examples/goal-gauge/native/default.tsx +12 -0
  258. package/registry/examples/how-it-works-page/orazaka.d.ts +4 -0
  259. package/registry/examples/how-it-works-page/orazaka.js +30 -0
  260. package/registry/examples/how-it-works-page/orazaka.tsx +26 -0
  261. package/registry/examples/landing-page/krizaka.d.ts +4 -0
  262. package/registry/examples/landing-page/krizaka.js +44 -0
  263. package/registry/examples/landing-page/krizaka.tsx +44 -0
  264. package/registry/examples/landscape/backdrop.d.ts +4 -0
  265. package/registry/examples/landscape/backdrop.js +14 -0
  266. package/registry/examples/landscape/backdrop.tsx +11 -0
  267. package/registry/examples/landscape/brand.d.ts +4 -0
  268. package/registry/examples/landscape/brand.js +11 -0
  269. package/registry/examples/landscape/brand.tsx +10 -0
  270. package/registry/examples/legal-page/privacy.d.ts +4 -0
  271. package/registry/examples/legal-page/privacy.js +24 -0
  272. package/registry/examples/legal-page/privacy.tsx +19 -0
  273. package/registry/examples/longform-page/story.d.ts +4 -0
  274. package/registry/examples/longform-page/story.js +38 -0
  275. package/registry/examples/longform-page/story.tsx +35 -0
  276. package/registry/examples/marketing-layout/basic.d.ts +4 -0
  277. package/registry/examples/marketing-layout/basic.js +31 -0
  278. package/registry/examples/marketing-layout/basic.tsx +28 -0
  279. package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
  280. package/registry/examples/marketing-layout/docs-hub.js +37 -0
  281. package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
  282. package/registry/examples/marketing-layout/pricing.d.ts +4 -0
  283. package/registry/examples/marketing-layout/pricing.js +45 -0
  284. package/registry/examples/marketing-layout/pricing.tsx +55 -0
  285. package/registry/examples/marketing-layout/product-page.d.ts +4 -0
  286. package/registry/examples/marketing-layout/product-page.js +79 -0
  287. package/registry/examples/marketing-layout/product-page.tsx +83 -0
  288. package/registry/examples/mascots/crane.d.ts +4 -0
  289. package/registry/examples/mascots/crane.js +19 -0
  290. package/registry/examples/mascots/crane.tsx +18 -0
  291. package/registry/examples/mascots/flock.tsx +2 -1
  292. package/registry/examples/mascots/native/crane.d.ts +4 -0
  293. package/registry/examples/mascots/native/crane.dark.png +0 -0
  294. package/registry/examples/mascots/native/crane.js +21 -0
  295. package/registry/examples/mascots/native/crane.light.png +0 -0
  296. package/registry/examples/mascots/native/crane.tsx +18 -0
  297. package/registry/examples/mascots/native/phoenix.d.ts +4 -0
  298. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  299. package/registry/examples/mascots/native/phoenix.js +21 -0
  300. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  301. package/registry/examples/mascots/native/phoenix.tsx +18 -0
  302. package/registry/examples/mascots/phoenix.d.ts +4 -0
  303. package/registry/examples/mascots/phoenix.js +14 -0
  304. package/registry/examples/mascots/phoenix.tsx +11 -0
  305. package/registry/examples/pricing-page/credits.d.ts +4 -0
  306. package/registry/examples/pricing-page/credits.js +41 -0
  307. package/registry/examples/pricing-page/credits.tsx +33 -0
  308. package/registry/examples/product-page/orazaka.d.ts +4 -0
  309. package/registry/examples/product-page/orazaka.js +44 -0
  310. package/registry/examples/product-page/orazaka.tsx +36 -0
  311. package/registry/examples/profile-card/arcade.d.ts +4 -0
  312. package/registry/examples/profile-card/arcade.js +25 -0
  313. package/registry/examples/profile-card/arcade.tsx +19 -0
  314. package/registry/examples/profile-card/creator.d.ts +4 -0
  315. package/registry/examples/profile-card/creator.js +31 -0
  316. package/registry/examples/profile-card/creator.tsx +26 -0
  317. package/registry/examples/profile-card/match.d.ts +4 -0
  318. package/registry/examples/profile-card/match.js +25 -0
  319. package/registry/examples/profile-card/match.tsx +19 -0
  320. package/registry/examples/profile-card/native/default.d.ts +4 -0
  321. package/registry/examples/profile-card/native/default.dark.png +0 -0
  322. package/registry/examples/profile-card/native/default.js +27 -0
  323. package/registry/examples/profile-card/native/default.light.png +0 -0
  324. package/registry/examples/profile-card/native/default.tsx +22 -0
  325. package/registry/examples/promise-card/arcade.d.ts +4 -0
  326. package/registry/examples/promise-card/arcade.js +25 -0
  327. package/registry/examples/promise-card/arcade.tsx +19 -0
  328. package/registry/examples/promise-card/guarantee.d.ts +4 -0
  329. package/registry/examples/promise-card/guarantee.js +23 -0
  330. package/registry/examples/promise-card/guarantee.tsx +17 -0
  331. package/registry/examples/scroll-stage/arcade.d.ts +4 -0
  332. package/registry/examples/scroll-stage/arcade.js +16 -0
  333. package/registry/examples/scroll-stage/arcade.tsx +15 -0
  334. package/registry/examples/scroll-stage/chapters.d.ts +4 -0
  335. package/registry/examples/scroll-stage/chapters.js +25 -0
  336. package/registry/examples/scroll-stage/chapters.tsx +22 -0
  337. package/registry/examples/settings-layout/account.d.ts +4 -0
  338. package/registry/examples/settings-layout/account.js +51 -0
  339. package/registry/examples/settings-layout/account.tsx +50 -0
  340. package/registry/examples/settings-layout/sections.d.ts +4 -0
  341. package/registry/examples/settings-layout/sections.js +27 -0
  342. package/registry/examples/settings-layout/sections.tsx +24 -0
  343. package/registry/examples/split-view/empty.d.ts +4 -0
  344. package/registry/examples/split-view/empty.js +19 -0
  345. package/registry/examples/split-view/empty.tsx +13 -0
  346. package/registry/examples/split-view/messages.d.ts +4 -0
  347. package/registry/examples/split-view/messages.js +49 -0
  348. package/registry/examples/split-view/messages.tsx +52 -0
  349. package/registry/examples/stage-banner/round.d.ts +4 -0
  350. package/registry/examples/stage-banner/round.js +14 -0
  351. package/registry/examples/stage-banner/round.tsx +11 -0
  352. package/registry/examples/stage-banner/steps.d.ts +4 -0
  353. package/registry/examples/stage-banner/steps.js +14 -0
  354. package/registry/examples/stage-banner/steps.tsx +11 -0
  355. package/registry/examples/status-page/building.d.ts +4 -0
  356. package/registry/examples/status-page/building.js +29 -0
  357. package/registry/examples/status-page/building.tsx +25 -0
  358. package/registry/examples/status-page/operational.d.ts +4 -0
  359. package/registry/examples/status-page/operational.js +26 -0
  360. package/registry/examples/status-page/operational.tsx +20 -0
  361. package/registry/field.json +1 -1
  362. package/registry/file-upload.json +1 -1
  363. package/registry/filter-bar.json +1 -1
  364. package/registry/gallery-page.json +256 -0
  365. package/registry/glow-card.json +1 -1
  366. package/registry/goal-gauge.json +322 -0
  367. package/registry/how-it-works-page.json +242 -0
  368. package/registry/image-cropper.json +1 -1
  369. package/registry/index.json +621 -5
  370. package/registry/iso.json +1 -1
  371. package/registry/kbd.json +1 -1
  372. package/registry/landing-page.json +242 -0
  373. package/registry/landscape.json +189 -0
  374. package/registry/legal-page.json +199 -0
  375. package/registry/link-card.json +1 -1
  376. package/registry/loader.json +1 -1
  377. package/registry/longform-page.json +213 -0
  378. package/registry/marketing-layout.json +172 -0
  379. package/registry/marquee.json +1 -1
  380. package/registry/mascot-quote.json +6 -6
  381. package/registry/mascot-state.json +34 -34
  382. package/registry/mascots.json +140 -23
  383. package/registry/media-capture.json +1 -1
  384. package/registry/meter.json +1 -1
  385. package/registry/nav-bar.json +1 -1
  386. package/registry/number-ticker.json +1 -1
  387. package/registry/page-header.json +1 -1
  388. package/registry/page-hero.json +3 -3
  389. package/registry/page.json +5 -5
  390. package/registry/pagination.json +1 -1
  391. package/registry/pointer-light.json +1 -1
  392. package/registry/popover.json +1 -1
  393. package/registry/pricing-page.json +245 -0
  394. package/registry/product-page.json +319 -0
  395. package/registry/profile-card.json +501 -0
  396. package/registry/progress.json +1 -1
  397. package/registry/promise-card.json +228 -0
  398. package/registry/radio-group.json +1 -1
  399. package/registry/scroll-stage.json +197 -0
  400. package/registry/search-field.json +1 -1
  401. package/registry/section-backdrop.json +1 -1
  402. package/registry/separator.json +1 -1
  403. package/registry/settings-layout.json +231 -0
  404. package/registry/skeleton.json +1 -1
  405. package/registry/slider.json +1 -1
  406. package/registry/slot.json +1 -1
  407. package/registry/spinner.json +1 -1
  408. package/registry/split-view.json +233 -0
  409. package/registry/stage-banner.json +221 -0
  410. package/registry/stat.json +1 -1
  411. package/registry/status-page.json +263 -0
  412. package/registry/stepper.json +1 -1
  413. package/registry/switch.json +1 -1
  414. package/registry/tabs.json +1 -1
  415. package/registry/tag-input.json +1 -1
  416. package/registry/terminal-replay.json +1 -1
  417. package/registry/theme.json +1 -1
  418. package/registry/toast.json +1 -1
  419. package/registry/toc.json +1 -1
  420. package/registry/tooltip.json +1 -1
  421. package/registry/video-player.json +1 -1
  422. package/registry/video-trimmer.json +1 -1
  423. package/dist/chunk-NOVUREEC.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/detail-layout/detail-layout.tsx"],"sourcesContent":["// Server-safe. The page of one object, read from the products' detail screens (a video, a job, an account, a pack):\n// its header — the way back, a media or an avatar, the name, its facts and status, the actions — then its tabs, the\n// content, and a side panel (details, related, activity) that goes under the content on a phone.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const detailLayout = tv({\n slots: {\n root: \"flex w-full flex-col gap-6\",\n back: \"inline-flex w-fit items-center gap-1.5 rounded-md text-sm font-medium text-fg-secondary no-underline hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\",\n header: \"flex flex-col gap-4 border-b border-border-subtle pb-5 sm:flex-row sm:items-start\",\n media: \"shrink-0 overflow-hidden rounded-xl [&>img]:block [&>img]:h-full [&>img]:w-full [&>img]:object-cover\",\n text: \"flex min-w-0 flex-1 flex-col gap-2\",\n eyebrow: \"font-mono text-[11px] font-semibold uppercase tracking-[0.16em] text-fg-accent\",\n titleRow: \"flex flex-wrap items-center gap-2\",\n title: \"min-w-0 font-display text-2xl font-extrabold tracking-tight text-fg break-words\",\n meta: \"flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-fg-secondary\",\n actions: \"flex shrink-0 flex-wrap items-center gap-2\",\n columns: \"grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_20rem] lg:gap-8\",\n main: \"flex min-w-0 flex-col gap-5\",\n aside: \"flex min-w-0 flex-col gap-4 lg:sticky lg:top-20 lg:self-start\",\n },\n});\nconst s = detailLayout();\n\nexport type DetailLayoutProps = Omit<React.ComponentProps<\"div\">, \"title\"> & {\n /** The way back to the list: your router's link (`<Link href=\"/videos\">Videos</Link>`), drawn with its arrow. */\n back?: React.ReactNode;\n /** A thumbnail, a cover or an avatar beside the name. */\n media?: React.ReactNode;\n /** A mono line above the name (the object's kind, its id). */\n eyebrow?: React.ReactNode;\n /** The object's name: the `h1`. */\n title: React.ReactNode;\n /** Beside the name: its status (a Badge). */\n status?: React.ReactNode;\n /** Under the name: its facts (the author, a date, a count — `Facts` or plain text). */\n meta?: React.ReactNode;\n /** The object's actions (edit, publish, a DropdownMenu). */\n actions?: React.ReactNode;\n /** Under the header: the object's tabs (`Tabs.List` of @krizaka/ui/tabs, inside your `Tabs.Root` around the layout). */\n tabs?: React.ReactNode;\n /** The side panel: details, related objects, activity (under the content on a phone). */\n aside?: React.ReactNode;\n /** The content (the current tab). */\n children: React.ReactNode;\n};\n\n/** One object's page: header (back, media, name, status, facts, actions), tabs, content and a side panel. */\nexport function DetailLayout({ back, media, eyebrow, title, status, meta, actions, tabs, aside, className, children, ...props }: DetailLayoutProps) {\n return (\n <div className={s.root({ className })} {...props}>\n {back && <div className={s.back()}>{back}</div>}\n <div className={s.header()}>\n {media && <div className={s.media()}>{media}</div>}\n <div className={s.text()}>\n {eyebrow && <p className={s.eyebrow()}>{eyebrow}</p>}\n <div className={s.titleRow()}>\n <h1 className={s.title()}>{title}</h1>\n {status}\n </div>\n {meta && <div className={s.meta()}>{meta}</div>}\n </div>\n {actions && <div className={s.actions()}>{actions}</div>}\n </div>\n {tabs}\n <div className={aside ? s.columns() : undefined}>\n <div className={s.main()}>{children}</div>\n {aside && <aside className={s.aside()}>{aside}</aside>}\n </div>\n </div>\n );\n}\n"],"mappings":";AAIA,SAAS,UAAU;AAgDJ,cAKL,YALK;AA9CR,IAAM,eAAe,GAAG;AAAA,EAC7B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AACD,IAAM,IAAI,aAAa;AA0BhB,SAAS,aAAa,EAAE,MAAM,OAAO,SAAS,OAAO,QAAQ,MAAM,SAAS,MAAM,OAAO,WAAW,UAAU,GAAG,MAAM,GAAsB;AAClJ,SACE,qBAAC,SAAI,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACxC;AAAA,YAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,IACzC,qBAAC,SAAI,WAAW,EAAE,OAAO,GACtB;AAAA,eAAS,oBAAC,SAAI,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,MAC5C,qBAAC,SAAI,WAAW,EAAE,KAAK,GACpB;AAAA,mBAAW,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,QAChD,qBAAC,SAAI,WAAW,EAAE,SAAS,GACzB;AAAA,8BAAC,QAAG,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,UAChC;AAAA,WACH;AAAA,QACC,QAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,SAC3C;AAAA,MACC,WAAW,oBAAC,SAAI,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,OACpD;AAAA,IACC;AAAA,IACD,qBAAC,SAAI,WAAW,QAAQ,EAAE,QAAQ,IAAI,QACpC;AAAA,0BAAC,SAAI,WAAW,EAAE,KAAK,GAAI,UAAS;AAAA,MACnC,SAAS,oBAAC,WAAM,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,OAChD;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,54 @@
1
+ import { Fact } from '@krizaka/ui/page';
2
+ import { LinkComponent } from '@krizaka/ui/page-hero';
3
+ import * as React from 'react';
4
+
5
+ type DocsArticlePageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
6
+ /** The documentation's pages (a nav of links). */
7
+ sidebar: React.ReactNode;
8
+ /** On a phone, the words that open the pages. */
9
+ sidebarLabel: string;
10
+ /** Where the page sits: `{ href, label }` from the hub down. */
11
+ breadcrumb?: readonly {
12
+ href: string;
13
+ label: string;
14
+ }[];
15
+ /** The breadcrumb's accessible name (`Breadcrumb`). */
16
+ breadcrumbLabel?: string;
17
+ /** The page's `h1`. */
18
+ title: React.ReactNode;
19
+ /** One or two sentences under it. */
20
+ lead?: React.ReactNode;
21
+ /** Facts under the lead: updated on, reading time, the version it documents. */
22
+ facts?: readonly Fact[];
23
+ /** The contents (its `h2`s): `{ id, label }`, and its label (`On this page`). */
24
+ toc?: {
25
+ label: string;
26
+ items: readonly {
27
+ id: string;
28
+ label: string;
29
+ }[];
30
+ };
31
+ /** The previous and next pages, and their labels. */
32
+ pager?: {
33
+ previous?: {
34
+ href: string;
35
+ title: string;
36
+ };
37
+ next?: {
38
+ href: string;
39
+ title: string;
40
+ };
41
+ labels: {
42
+ previous: string;
43
+ next: string;
44
+ };
45
+ };
46
+ /** The article's body (prose, code blocks, diagrams). */
47
+ children: React.ReactNode;
48
+ /** The app's link component (Next's `Link`). */
49
+ linkAs?: LinkComponent;
50
+ };
51
+ /** A documentation article: pages · breadcrumb, title, lead, facts, the reading column · contents; previous and next. */
52
+ declare function DocsArticlePage({ sidebar, sidebarLabel, breadcrumb, breadcrumbLabel, title, lead, facts, toc, pager, linkAs, children, ...props }: DocsArticlePageProps): React.JSX.Element;
53
+
54
+ export { DocsArticlePage, type DocsArticlePageProps };
@@ -0,0 +1,29 @@
1
+ // src/docs-article-page/docs-article-page.tsx
2
+ import { DocsLayout } from "@krizaka/ui/docs-layout";
3
+ import { Facts } from "@krizaka/ui/page";
4
+ import { Toc } from "@krizaka/ui/toc";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function DocsArticlePage({ sidebar, sidebarLabel, breadcrumb, breadcrumbLabel = "Breadcrumb", title, lead, facts, toc, pager, linkAs, children, ...props }) {
7
+ const L = linkAs ?? "a";
8
+ return /* @__PURE__ */ jsxs(DocsLayout, { sidebar, sidebarLabel, toc: toc && /* @__PURE__ */ jsx(Toc, { label: toc.label, items: toc.items }), ...props, children: [
9
+ breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("nav", { "aria-label": breadcrumbLabel, children: /* @__PURE__ */ jsx("ol", { className: "kz-tpl-crumbs", children: breadcrumb.map((c) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(L, { href: c.href, children: c.label }) }, c.href)) }) }),
10
+ /* @__PURE__ */ jsx("h1", { className: "kz-tpl-article-title", children: title }),
11
+ lead && /* @__PURE__ */ jsx("p", { className: "kz-tpl-article-lead", children: lead }),
12
+ facts && facts.length > 0 && /* @__PURE__ */ jsx(Facts, { className: "kz-tpl-article-meta", items: facts }),
13
+ /* @__PURE__ */ jsx("div", { className: "kz-tpl-prose", children }),
14
+ pager && (pager.previous || pager.next) && /* @__PURE__ */ jsxs("nav", { className: "kz-tpl-pager", "aria-label": `${pager.labels.previous} \xB7 ${pager.labels.next}`, children: [
15
+ pager.previous && /* @__PURE__ */ jsxs(L, { href: pager.previous.href, rel: "prev", children: [
16
+ /* @__PURE__ */ jsx("small", { children: pager.labels.previous }),
17
+ pager.previous.title
18
+ ] }),
19
+ pager.next && /* @__PURE__ */ jsxs(L, { href: pager.next.href, rel: "next", children: [
20
+ /* @__PURE__ */ jsx("small", { children: pager.labels.next }),
21
+ pager.next.title
22
+ ] })
23
+ ] })
24
+ ] });
25
+ }
26
+ export {
27
+ DocsArticlePage
28
+ };
29
+ //# sourceMappingURL=docs-article-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs-article-page/docs-article-page.tsx"],"sourcesContent":["// Server-safe. A documentation article in the docs frame (DocsLayout): the pages on the left, the breadcrumb, the\n// title, its lead and facts (updated, reading time), the reading column, the contents on the right, the previous and\n// next pages at the foot. On a phone the pages fold above the article and the contents become chips.\nimport { DocsLayout } from \"@krizaka/ui/docs-layout\";\nimport { type Fact, Facts } from \"@krizaka/ui/page\";\nimport type { LinkComponent } from \"@krizaka/ui/page-hero\";\nimport { Toc } from \"@krizaka/ui/toc\";\nimport type * as React from \"react\";\n\nexport type DocsArticlePageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The documentation's pages (a nav of links). */\n sidebar: React.ReactNode;\n /** On a phone, the words that open the pages. */\n sidebarLabel: string;\n /** Where the page sits: `{ href, label }` from the hub down. */\n breadcrumb?: readonly { href: string; label: string }[];\n /** The breadcrumb's accessible name (`Breadcrumb`). */\n breadcrumbLabel?: string;\n /** The page's `h1`. */\n title: React.ReactNode;\n /** One or two sentences under it. */\n lead?: React.ReactNode;\n /** Facts under the lead: updated on, reading time, the version it documents. */\n facts?: readonly Fact[];\n /** The contents (its `h2`s): `{ id, label }`, and its label (`On this page`). */\n toc?: { label: string; items: readonly { id: string; label: string }[] };\n /** The previous and next pages, and their labels. */\n pager?: { previous?: { href: string; title: string }; next?: { href: string; title: string }; labels: { previous: string; next: string } };\n /** The article's body (prose, code blocks, diagrams). */\n children: React.ReactNode;\n /** The app's link component (Next's `Link`). */\n linkAs?: LinkComponent;\n};\n\n/** A documentation article: pages · breadcrumb, title, lead, facts, the reading column · contents; previous and next. */\nexport function DocsArticlePage({ sidebar, sidebarLabel, breadcrumb, breadcrumbLabel = \"Breadcrumb\", title, lead, facts, toc, pager, linkAs, children, ...props }: DocsArticlePageProps) {\n const L = (linkAs ?? \"a\") as React.ElementType;\n return (\n <DocsLayout sidebar={sidebar} sidebarLabel={sidebarLabel} toc={toc && <Toc label={toc.label} items={toc.items} />} {...props}>\n {breadcrumb && breadcrumb.length > 0 && (\n <nav aria-label={breadcrumbLabel}>\n <ol className=\"kz-tpl-crumbs\">\n {breadcrumb.map((c) => (\n <li key={c.href}>\n <L href={c.href}>{c.label}</L>\n </li>\n ))}\n </ol>\n </nav>\n )}\n <h1 className=\"kz-tpl-article-title\">{title}</h1>\n {lead && <p className=\"kz-tpl-article-lead\">{lead}</p>}\n {facts && facts.length > 0 && <Facts className=\"kz-tpl-article-meta\" items={facts} />}\n <div className=\"kz-tpl-prose\">{children}</div>\n {pager && (pager.previous || pager.next) && (\n <nav className=\"kz-tpl-pager\" aria-label={`${pager.labels.previous} · ${pager.labels.next}`}>\n {pager.previous && (\n <L href={pager.previous.href} rel=\"prev\">\n <small>{pager.labels.previous}</small>\n {pager.previous.title}\n </L>\n )}\n {pager.next && (\n <L href={pager.next.href} rel=\"next\">\n <small>{pager.labels.next}</small>\n {pager.next.title}\n </L>\n )}\n </nav>\n )}\n </DocsLayout>\n );\n}\n"],"mappings":";AAGA,SAAS,kBAAkB;AAC3B,SAAoB,aAAa;AAEjC,SAAS,WAAW;AAgCsD,cAmB9D,YAnB8D;AAHnE,SAAS,gBAAgB,EAAE,SAAS,cAAc,YAAY,kBAAkB,cAAc,OAAO,MAAM,OAAO,KAAK,OAAO,QAAQ,UAAU,GAAG,MAAM,GAAyB;AACvL,QAAM,IAAK,UAAU;AACrB,SACE,qBAAC,cAAW,SAAkB,cAA4B,KAAK,OAAO,oBAAC,OAAI,OAAO,IAAI,OAAO,OAAO,IAAI,OAAO,GAAK,GAAG,OACpH;AAAA,kBAAc,WAAW,SAAS,KACjC,oBAAC,SAAI,cAAY,iBACf,8BAAC,QAAG,WAAU,iBACX,qBAAW,IAAI,CAAC,MACf,oBAAC,QACC,8BAAC,KAAE,MAAM,EAAE,MAAO,YAAE,OAAM,KADnB,EAAE,IAEX,CACD,GACH,GACF;AAAA,IAEF,oBAAC,QAAG,WAAU,wBAAwB,iBAAM;AAAA,IAC3C,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,gBAAK;AAAA,IACjD,SAAS,MAAM,SAAS,KAAK,oBAAC,SAAM,WAAU,uBAAsB,OAAO,OAAO;AAAA,IACnF,oBAAC,SAAI,WAAU,gBAAgB,UAAS;AAAA,IACvC,UAAU,MAAM,YAAY,MAAM,SACjC,qBAAC,SAAI,WAAU,gBAAe,cAAY,GAAG,MAAM,OAAO,QAAQ,SAAM,MAAM,OAAO,IAAI,IACtF;AAAA,YAAM,YACL,qBAAC,KAAE,MAAM,MAAM,SAAS,MAAM,KAAI,QAChC;AAAA,4BAAC,WAAO,gBAAM,OAAO,UAAS;AAAA,QAC7B,MAAM,SAAS;AAAA,SAClB;AAAA,MAED,MAAM,QACL,qBAAC,KAAE,MAAM,MAAM,KAAK,MAAM,KAAI,QAC5B;AAAA,4BAAC,WAAO,gBAAM,OAAO,MAAK;AAAA,QACzB,MAAM,KAAK;AAAA,SACd;AAAA,OAEJ;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,72 @@
1
+ import { LinkComponent } from '@krizaka/ui/page-hero';
2
+ import * as React from 'react';
3
+
4
+ interface DocsCollection {
5
+ /** A stable key. */
6
+ id: string;
7
+ /** The product's brand (`orazaka`…): the panel wears `.brand-<id>`. */
8
+ brand?: string;
9
+ /** The product's mark. */
10
+ mark?: React.ReactNode;
11
+ /** The collection's name: a link to its home. */
12
+ title: string;
13
+ /** Where it starts. */
14
+ href: string;
15
+ /** What it covers, in one sentence. */
16
+ description?: React.ReactNode;
17
+ /** Its most useful pages (three or four). */
18
+ links?: readonly {
19
+ href: string;
20
+ label: string;
21
+ }[];
22
+ }
23
+ interface DocsHubLink {
24
+ /** Where it leads. */
25
+ href: string;
26
+ /** The page's title. */
27
+ title: React.ReactNode;
28
+ /** On the right, in mono: a collection, a version, a date. */
29
+ meta?: React.ReactNode;
30
+ }
31
+ type DocsHubPageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
32
+ /** A mono line above the title. */
33
+ eyebrow?: React.ReactNode;
34
+ /** The page's `h1`. */
35
+ title: React.ReactNode;
36
+ /** One sentence under it. */
37
+ lead?: React.ReactNode;
38
+ /** The search, front and centre (a SearchField, a button that opens the command palette). */
39
+ search?: React.ReactNode;
40
+ /** Under the search: what people look for (a few links or keys). */
41
+ searchHints?: React.ReactNode;
42
+ /** The collections' heading. */
43
+ collectionsTitle: React.ReactNode;
44
+ /** The collections, each in its brand. */
45
+ collections: readonly DocsCollection[];
46
+ /** The quick starts: a title and their samples (CodeBlocks, CodeTabs). */
47
+ quickstarts?: {
48
+ title: React.ReactNode;
49
+ children: React.ReactNode;
50
+ };
51
+ /** The most read pages. */
52
+ popular?: {
53
+ title: React.ReactNode;
54
+ items: readonly DocsHubLink[];
55
+ };
56
+ /** What is new (releases from the registries, published pages). */
57
+ whatsNew?: {
58
+ title: React.ReactNode;
59
+ items: readonly DocsHubLink[];
60
+ };
61
+ /** The owl's promise at the foot: what this documentation guarantees. */
62
+ promise?: {
63
+ label: React.ReactNode;
64
+ text: React.ReactNode;
65
+ };
66
+ /** The app's link component (Next's `Link`) for internal addresses. */
67
+ linkAs?: LinkComponent;
68
+ };
69
+ /** A documentation hub: search first, the collections in their brand, quick starts, popular and new pages. */
70
+ declare function DocsHubPage({ eyebrow, title, lead, search, searchHints, collectionsTitle, collections, quickstarts, popular, whatsNew, promise, linkAs, ...props }: DocsHubPageProps): React.JSX.Element;
71
+
72
+ export { type DocsCollection, type DocsHubLink, DocsHubPage, type DocsHubPageProps };
@@ -0,0 +1,45 @@
1
+ // src/docs-hub-page/docs-hub-page.tsx
2
+ import { MascotQuote } from "@krizaka/ui/mascot-quote";
3
+ import { Section } from "@krizaka/ui/page";
4
+ import { PageHero } from "@krizaka/ui/page-hero";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function List({ items, linkAs: Link = "a" }) {
7
+ const L = Link;
8
+ return /* @__PURE__ */ jsx("ul", { className: "kz-tpl-links", children: items.map((item, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(L, { href: item.href, children: [
9
+ /* @__PURE__ */ jsx("strong", { children: item.title }),
10
+ item.meta && /* @__PURE__ */ jsx("small", { children: item.meta })
11
+ ] }) }, `${i}:${item.href}`)) });
12
+ }
13
+ function DocsHubPage({ eyebrow, title, lead, search, searchHints, collectionsTitle, collections, quickstarts, popular, whatsNew, promise, linkAs, ...props }) {
14
+ const L = linkAs ?? "a";
15
+ return /* @__PURE__ */ jsxs("div", { ...props, children: [
16
+ /* @__PURE__ */ jsx(PageHero, { eyebrow, title, lead, align: "center", backdrop: "grid", children: (search || searchHints) && /* @__PURE__ */ jsxs("div", { className: "kz-tpl-hub-search", children: [
17
+ search,
18
+ searchHints && /* @__PURE__ */ jsx("div", { className: "kz-tpl-hub-hints", children: searchHints })
19
+ ] }) }),
20
+ /* @__PURE__ */ jsx(Section, { id: "collections", title: collectionsTitle, headingSize: "sm", spacing: "sm", children: /* @__PURE__ */ jsx("ul", { className: "kz-tpl-collections", children: collections.map((c) => /* @__PURE__ */ jsx("li", { className: c.brand ? "brand-" + c.brand : void 0, children: /* @__PURE__ */ jsxs("div", { className: "kz-tpl-collection", children: [
21
+ /* @__PURE__ */ jsxs("div", { className: "kz-tpl-collection-head", children: [
22
+ c.mark && /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: c.mark }),
23
+ /* @__PURE__ */ jsx(L, { href: c.href, children: c.title })
24
+ ] }),
25
+ c.description && /* @__PURE__ */ jsx("p", { children: c.description }),
26
+ c.links && c.links.length > 0 && /* @__PURE__ */ jsx("ul", { "aria-label": c.title, children: c.links.map((l) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(L, { href: l.href, children: l.label }) }, l.href)) })
27
+ ] }) }, c.id)) }) }),
28
+ (quickstarts || popular) && /* @__PURE__ */ jsx(Section, { spacing: "sm", divider: true, "aria-label": typeof quickstarts?.title === "string" ? quickstarts.title : void 0, children: /* @__PURE__ */ jsxs("div", { className: "kz-tpl-two", children: [
29
+ quickstarts && /* @__PURE__ */ jsxs("div", { className: "kz-tpl-stack", children: [
30
+ /* @__PURE__ */ jsx("h2", { className: "kz-heading-title kz-tpl-h2", children: quickstarts.title }),
31
+ quickstarts.children
32
+ ] }),
33
+ popular && /* @__PURE__ */ jsxs("div", { className: "kz-tpl-stack", children: [
34
+ /* @__PURE__ */ jsx("h2", { className: "kz-heading-title kz-tpl-h2", children: popular.title }),
35
+ /* @__PURE__ */ jsx(List, { items: popular.items, linkAs })
36
+ ] })
37
+ ] }) }),
38
+ whatsNew && /* @__PURE__ */ jsx(Section, { id: "whats-new", title: whatsNew.title, headingSize: "sm", spacing: "sm", divider: true, children: /* @__PURE__ */ jsx(List, { items: whatsNew.items, linkAs }) }),
39
+ promise && /* @__PURE__ */ jsx(Section, { spacing: "sm", "aria-label": typeof promise.label === "string" ? promise.label : void 0, children: /* @__PURE__ */ jsx(MascotQuote, { variant: "callout", bird: "owl", mood: "welcome", label: promise.label, children: promise.text }) })
40
+ ] });
41
+ }
42
+ export {
43
+ DocsHubPage
44
+ };
45
+ //# sourceMappingURL=docs-hub-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs-hub-page/docs-hub-page.tsx"],"sourcesContent":["// Server-safe. The entry of a documentation (blocks.css `.kz-tpl-hub-*`, `.kz-tpl-collections`): the search in the\n// middle of the hero, the collections each in its product's brand with its quick links, the quick starts beside the\n// most read pages, what is new from the registries, and the owl's promise. One column on a phone, the search first.\nimport { MascotQuote } from \"@krizaka/ui/mascot-quote\";\nimport { Section } from \"@krizaka/ui/page\";\nimport type { LinkComponent } from \"@krizaka/ui/page-hero\";\nimport { PageHero } from \"@krizaka/ui/page-hero\";\nimport * as React from \"react\";\n\nexport interface DocsCollection {\n /** A stable key. */\n id: string;\n /** The product's brand (`orazaka`…): the panel wears `.brand-<id>`. */\n brand?: string;\n /** The product's mark. */\n mark?: React.ReactNode;\n /** The collection's name: a link to its home. */\n title: string;\n /** Where it starts. */\n href: string;\n /** What it covers, in one sentence. */\n description?: React.ReactNode;\n /** Its most useful pages (three or four). */\n links?: readonly { href: string; label: string }[];\n}\n\nexport interface DocsHubLink {\n /** Where it leads. */\n href: string;\n /** The page's title. */\n title: React.ReactNode;\n /** On the right, in mono: a collection, a version, a date. */\n meta?: React.ReactNode;\n}\n\nexport type DocsHubPageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** A mono line above the title. */\n eyebrow?: React.ReactNode;\n /** The page's `h1`. */\n title: React.ReactNode;\n /** One sentence under it. */\n lead?: React.ReactNode;\n /** The search, front and centre (a SearchField, a button that opens the command palette). */\n search?: React.ReactNode;\n /** Under the search: what people look for (a few links or keys). */\n searchHints?: React.ReactNode;\n /** The collections' heading. */\n collectionsTitle: React.ReactNode;\n /** The collections, each in its brand. */\n collections: readonly DocsCollection[];\n /** The quick starts: a title and their samples (CodeBlocks, CodeTabs). */\n quickstarts?: { title: React.ReactNode; children: React.ReactNode };\n /** The most read pages. */\n popular?: { title: React.ReactNode; items: readonly DocsHubLink[] };\n /** What is new (releases from the registries, published pages). */\n whatsNew?: { title: React.ReactNode; items: readonly DocsHubLink[] };\n /** The owl's promise at the foot: what this documentation guarantees. */\n promise?: { label: React.ReactNode; text: React.ReactNode };\n /** The app's link component (Next's `Link`) for internal addresses. */\n linkAs?: LinkComponent;\n};\n\nfunction List({ items, linkAs: Link = \"a\" }: { items: readonly DocsHubLink[]; linkAs?: LinkComponent }) {\n const L = Link as React.ElementType;\n return (\n <ul className=\"kz-tpl-links\">\n {items.map((item, i) => (\n <li key={`${i}:${item.href}`}>\n <L href={item.href}>\n <strong>{item.title}</strong>\n {item.meta && <small>{item.meta}</small>}\n </L>\n </li>\n ))}\n </ul>\n );\n}\n\n/** A documentation hub: search first, the collections in their brand, quick starts, popular and new pages. */\nexport function DocsHubPage({ eyebrow, title, lead, search, searchHints, collectionsTitle, collections, quickstarts, popular, whatsNew, promise, linkAs, ...props }: DocsHubPageProps) {\n const L = (linkAs ?? \"a\") as React.ElementType;\n return (\n <div {...props}>\n <PageHero eyebrow={eyebrow} title={title} lead={lead} align=\"center\" backdrop=\"grid\">\n {(search || searchHints) && (\n <div className=\"kz-tpl-hub-search\">\n {search}\n {searchHints && <div className=\"kz-tpl-hub-hints\">{searchHints}</div>}\n </div>\n )}\n </PageHero>\n <Section id=\"collections\" title={collectionsTitle} headingSize=\"sm\" spacing=\"sm\">\n <ul className=\"kz-tpl-collections\">\n {collections.map((c) => (\n <li key={c.id} className={c.brand ? \"brand-\" + c.brand : undefined}>\n <div className=\"kz-tpl-collection\">\n <div className=\"kz-tpl-collection-head\">\n {c.mark && <span aria-hidden>{c.mark}</span>}\n <L href={c.href}>{c.title}</L>\n </div>\n {c.description && <p>{c.description}</p>}\n {c.links && c.links.length > 0 && (\n <ul aria-label={c.title}>\n {c.links.map((l) => (\n <li key={l.href}>\n <L href={l.href}>{l.label}</L>\n </li>\n ))}\n </ul>\n )}\n </div>\n </li>\n ))}\n </ul>\n </Section>\n {(quickstarts || popular) && (\n <Section spacing=\"sm\" divider aria-label={typeof quickstarts?.title === \"string\" ? quickstarts.title : undefined}>\n <div className=\"kz-tpl-two\">\n {quickstarts && (\n <div className=\"kz-tpl-stack\">\n <h2 className=\"kz-heading-title kz-tpl-h2\">{quickstarts.title}</h2>\n {quickstarts.children}\n </div>\n )}\n {popular && (\n <div className=\"kz-tpl-stack\">\n <h2 className=\"kz-heading-title kz-tpl-h2\">{popular.title}</h2>\n <List items={popular.items} linkAs={linkAs} />\n </div>\n )}\n </div>\n </Section>\n )}\n {whatsNew && (\n <Section id=\"whats-new\" title={whatsNew.title} headingSize=\"sm\" spacing=\"sm\" divider>\n <List items={whatsNew.items} linkAs={linkAs} />\n </Section>\n )}\n {promise && (\n <Section spacing=\"sm\" aria-label={typeof promise.label === \"string\" ? promise.label : undefined}>\n <MascotQuote variant=\"callout\" bird=\"owl\" mood=\"welcome\" label={promise.label}>\n {promise.text}\n </MascotQuote>\n </Section>\n )}\n </div>\n );\n}\n"],"mappings":";AAGA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAExB,SAAS,gBAAgB;AA8Df,SACE,KADF;AANV,SAAS,KAAK,EAAE,OAAO,QAAQ,OAAO,IAAI,GAA8D;AACtG,QAAM,IAAI;AACV,SACE,oBAAC,QAAG,WAAU,gBACX,gBAAM,IAAI,CAAC,MAAM,MAChB,oBAAC,QACC,+BAAC,KAAE,MAAM,KAAK,MACZ;AAAA,wBAAC,YAAQ,eAAK,OAAM;AAAA,IACnB,KAAK,QAAQ,oBAAC,WAAO,eAAK,MAAK;AAAA,KAClC,KAJO,GAAG,CAAC,IAAI,KAAK,IAAI,EAK1B,CACD,GACH;AAEJ;AAGO,SAAS,YAAY,EAAE,SAAS,OAAO,MAAM,QAAQ,aAAa,kBAAkB,aAAa,aAAa,SAAS,UAAU,SAAS,QAAQ,GAAG,MAAM,GAAqB;AACrL,QAAM,IAAK,UAAU;AACrB,SACE,qBAAC,SAAK,GAAG,OACP;AAAA,wBAAC,YAAS,SAAkB,OAAc,MAAY,OAAM,UAAS,UAAS,QAC1E,qBAAU,gBACV,qBAAC,SAAI,WAAU,qBACZ;AAAA;AAAA,MACA,eAAe,oBAAC,SAAI,WAAU,oBAAoB,uBAAY;AAAA,OACjE,GAEJ;AAAA,IACA,oBAAC,WAAQ,IAAG,eAAc,OAAO,kBAAkB,aAAY,MAAK,SAAQ,MAC1E,8BAAC,QAAG,WAAU,sBACX,sBAAY,IAAI,CAAC,MAChB,oBAAC,QAAc,WAAW,EAAE,QAAQ,WAAW,EAAE,QAAQ,QACvD,+BAAC,SAAI,WAAU,qBACb;AAAA,2BAAC,SAAI,WAAU,0BACZ;AAAA,UAAE,QAAQ,oBAAC,UAAK,eAAW,MAAE,YAAE,MAAK;AAAA,QACrC,oBAAC,KAAE,MAAM,EAAE,MAAO,YAAE,OAAM;AAAA,SAC5B;AAAA,MACC,EAAE,eAAe,oBAAC,OAAG,YAAE,aAAY;AAAA,MACnC,EAAE,SAAS,EAAE,MAAM,SAAS,KAC3B,oBAAC,QAAG,cAAY,EAAE,OACf,YAAE,MAAM,IAAI,CAAC,MACZ,oBAAC,QACC,8BAAC,KAAE,MAAM,EAAE,MAAO,YAAE,OAAM,KADnB,EAAE,IAEX,CACD,GACH;AAAA,OAEJ,KAhBO,EAAE,EAiBX,CACD,GACH,GACF;AAAA,KACE,eAAe,YACf,oBAAC,WAAQ,SAAQ,MAAK,SAAO,MAAC,cAAY,OAAO,aAAa,UAAU,WAAW,YAAY,QAAQ,QACrG,+BAAC,SAAI,WAAU,cACZ;AAAA,qBACC,qBAAC,SAAI,WAAU,gBACb;AAAA,4BAAC,QAAG,WAAU,8BAA8B,sBAAY,OAAM;AAAA,QAC7D,YAAY;AAAA,SACf;AAAA,MAED,WACC,qBAAC,SAAI,WAAU,gBACb;AAAA,4BAAC,QAAG,WAAU,8BAA8B,kBAAQ,OAAM;AAAA,QAC1D,oBAAC,QAAK,OAAO,QAAQ,OAAO,QAAgB;AAAA,SAC9C;AAAA,OAEJ,GACF;AAAA,IAED,YACC,oBAAC,WAAQ,IAAG,aAAY,OAAO,SAAS,OAAO,aAAY,MAAK,SAAQ,MAAK,SAAO,MAClF,8BAAC,QAAK,OAAO,SAAS,OAAO,QAAgB,GAC/C;AAAA,IAED,WACC,oBAAC,WAAQ,SAAQ,MAAK,cAAY,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,QACpF,8BAAC,eAAY,SAAQ,WAAU,MAAK,OAAM,MAAK,WAAU,OAAO,QAAQ,OACrE,kBAAQ,MACX,GACF;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,78 @@
1
+ import * as tailwind_variants from 'tailwind-variants';
2
+ import * as React from 'react';
3
+
4
+ declare const docsLayout: tailwind_variants.TVReturnType<{
5
+ [key: string]: {
6
+ [key: string]: tailwind_variants.ClassValue | {
7
+ sidebar?: tailwind_variants.ClassValue;
8
+ mobileNav?: tailwind_variants.ClassValue;
9
+ mobileBody?: tailwind_variants.ClassValue;
10
+ article?: tailwind_variants.ClassValue;
11
+ toc?: tailwind_variants.ClassValue;
12
+ root?: tailwind_variants.ClassValue;
13
+ mobileSummary?: tailwind_variants.ClassValue;
14
+ };
15
+ };
16
+ } | {
17
+ [x: string]: {
18
+ [x: string]: tailwind_variants.ClassValue | {
19
+ sidebar?: tailwind_variants.ClassValue;
20
+ mobileNav?: tailwind_variants.ClassValue;
21
+ mobileBody?: tailwind_variants.ClassValue;
22
+ article?: tailwind_variants.ClassValue;
23
+ toc?: tailwind_variants.ClassValue;
24
+ root?: tailwind_variants.ClassValue;
25
+ mobileSummary?: tailwind_variants.ClassValue;
26
+ };
27
+ };
28
+ } | {}, {
29
+ root: string;
30
+ sidebar: string;
31
+ mobileNav: string;
32
+ mobileSummary: string;
33
+ mobileBody: string;
34
+ article: string;
35
+ toc: string;
36
+ }, undefined, {
37
+ [key: string]: {
38
+ [key: string]: tailwind_variants.ClassValue | {
39
+ sidebar?: tailwind_variants.ClassValue;
40
+ mobileNav?: tailwind_variants.ClassValue;
41
+ mobileBody?: tailwind_variants.ClassValue;
42
+ article?: tailwind_variants.ClassValue;
43
+ toc?: tailwind_variants.ClassValue;
44
+ root?: tailwind_variants.ClassValue;
45
+ mobileSummary?: tailwind_variants.ClassValue;
46
+ };
47
+ };
48
+ } | {}, {
49
+ root: string;
50
+ sidebar: string;
51
+ mobileNav: string;
52
+ mobileSummary: string;
53
+ mobileBody: string;
54
+ article: string;
55
+ toc: string;
56
+ }, tailwind_variants.TVReturnTypeLike<unknown, {
57
+ root: string;
58
+ sidebar: string;
59
+ mobileNav: string;
60
+ mobileSummary: string;
61
+ mobileBody: string;
62
+ article: string;
63
+ toc: string;
64
+ }>>;
65
+ type DocsLayoutProps = React.ComponentProps<"div"> & {
66
+ /** The pages of the documentation (a nav of links, grouped). */
67
+ sidebar: React.ReactNode;
68
+ /** On a phone the sidebar is folded: the words that open it (`Pages of the documentation`). */
69
+ sidebarLabel: string;
70
+ /** The page's table of contents (a `Toc` of @krizaka/ui/toc): beside the article from `xl`. */
71
+ toc?: React.ReactNode;
72
+ /** The article: its title, its body. */
73
+ children: React.ReactNode;
74
+ };
75
+ /** A documentation page: pages · article · contents, in the site's frame. */
76
+ declare function DocsLayout({ sidebar, sidebarLabel, toc, className, children, ...props }: DocsLayoutProps): React.JSX.Element;
77
+
78
+ export { DocsLayout, type DocsLayoutProps, docsLayout };
@@ -0,0 +1,60 @@
1
+ // src/docs-layout/docs-layout.tsx
2
+ import { tv } from "tailwind-variants";
3
+
4
+ // src/glyphs.tsx
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function Glyph({ className = "h-4 w-4", fill, children }) {
7
+ return /* @__PURE__ */ jsx(
8
+ "svg",
9
+ {
10
+ viewBox: "0 0 24 24",
11
+ className,
12
+ fill: fill ? "currentColor" : "none",
13
+ stroke: fill ? "none" : "currentColor",
14
+ strokeWidth: "2",
15
+ strokeLinecap: "round",
16
+ strokeLinejoin: "round",
17
+ "aria-hidden": true,
18
+ focusable: "false",
19
+ children
20
+ }
21
+ );
22
+ }
23
+ var ChevronGlyph = ({ direction = "down", ...p }) => /* @__PURE__ */ jsx(Glyph, { ...p, children: /* @__PURE__ */ jsx("path", { d: { left: "m15 6-6 6 6 6", right: "m9 6 6 6-6 6", up: "m6 15 6-6 6 6", down: "m6 9 6 6 6-6" }[direction] }) });
24
+
25
+ // src/docs-layout/docs-layout.tsx
26
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
27
+ var docsLayout = tv({
28
+ slots: {
29
+ root: "mx-auto grid w-full max-w-[calc(var(--kz-page-max-docs,88rem)+2*var(--kz-page-gutter,24px))] grid-cols-1 gap-8 px-(--kz-page-gutter,16px) pt-(--kz-hero-top,6rem) pb-16 lg:grid-cols-[15rem_minmax(0,1fr)] xl:grid-cols-[15rem_minmax(0,1fr)_13rem]",
30
+ sidebar: "hidden lg:block lg:sticky lg:top-24 lg:max-h-[calc(100dvh-7rem)] lg:self-start lg:overflow-y-auto",
31
+ mobileNav: "rounded-xl border border-border-default bg-surface-1 lg:hidden",
32
+ mobileSummary: "flex min-h-11 cursor-pointer list-none items-center justify-between gap-2 px-4 text-sm font-semibold text-fg [&::-webkit-details-marker]:hidden rounded-xl focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring [[open]>&>svg]:rotate-180",
33
+ mobileBody: "border-t border-border-subtle px-2 py-2",
34
+ article: "min-w-0 max-w-3xl",
35
+ toc: "hidden xl:block xl:sticky xl:top-24 xl:self-start"
36
+ }
37
+ });
38
+ var s = docsLayout();
39
+ function DocsLayout({ sidebar, sidebarLabel, toc, className, children, ...props }) {
40
+ return /* @__PURE__ */ jsxs2("div", { className: s.root({ className }), ...props, children: [
41
+ /* @__PURE__ */ jsx2("div", { className: s.sidebar(), children: sidebar }),
42
+ /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-col gap-6", children: [
43
+ /* @__PURE__ */ jsxs2("details", { className: s.mobileNav(), children: [
44
+ /* @__PURE__ */ jsxs2("summary", { className: s.mobileSummary(), children: [
45
+ sidebarLabel,
46
+ " ",
47
+ /* @__PURE__ */ jsx2(ChevronGlyph, { className: "h-4 w-4 transition-transform motion-reduce:transition-none" })
48
+ ] }),
49
+ /* @__PURE__ */ jsx2("div", { className: s.mobileBody(), children: sidebar })
50
+ ] }),
51
+ /* @__PURE__ */ jsx2("article", { className: s.article(), children })
52
+ ] }),
53
+ toc && /* @__PURE__ */ jsx2("div", { className: s.toc(), children: toc })
54
+ ] });
55
+ }
56
+ export {
57
+ DocsLayout,
58
+ docsLayout
59
+ };
60
+ //# sourceMappingURL=docs-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs-layout/docs-layout.tsx","../src/glyphs.tsx"],"sourcesContent":["// Server-safe. A documentation page in the site's frame (--kz-page-max-docs): the sidebar of pages, the article, the\n// table of contents — the three columns of the frame on a wide screen, the sidebar folded into a disclosure above the\n// article on a phone, the contents under the title as chips (a `Toc`). Its edges are the bar's: no column runs to the\n// window's edge.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nimport { ChevronGlyph } from \"../glyphs\";\n\nexport const docsLayout = tv({\n slots: {\n root:\n \"mx-auto grid w-full max-w-[calc(var(--kz-page-max-docs,88rem)+2*var(--kz-page-gutter,24px))] grid-cols-1 gap-8 px-(--kz-page-gutter,16px) \" +\n \"pt-(--kz-hero-top,6rem) pb-16 lg:grid-cols-[15rem_minmax(0,1fr)] xl:grid-cols-[15rem_minmax(0,1fr)_13rem]\",\n sidebar: \"hidden lg:block lg:sticky lg:top-24 lg:max-h-[calc(100dvh-7rem)] lg:self-start lg:overflow-y-auto\",\n mobileNav: \"rounded-xl border border-border-default bg-surface-1 lg:hidden\",\n mobileSummary:\n \"flex min-h-11 cursor-pointer list-none items-center justify-between gap-2 px-4 text-sm font-semibold text-fg [&::-webkit-details-marker]:hidden \" +\n \"rounded-xl focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring [[open]>&>svg]:rotate-180\",\n mobileBody: \"border-t border-border-subtle px-2 py-2\",\n article: \"min-w-0 max-w-3xl\",\n toc: \"hidden xl:block xl:sticky xl:top-24 xl:self-start\",\n },\n});\nconst s = docsLayout();\n\nexport type DocsLayoutProps = React.ComponentProps<\"div\"> & {\n /** The pages of the documentation (a nav of links, grouped). */\n sidebar: React.ReactNode;\n /** On a phone the sidebar is folded: the words that open it (`Pages of the documentation`). */\n sidebarLabel: string;\n /** The page's table of contents (a `Toc` of @krizaka/ui/toc): beside the article from `xl`. */\n toc?: React.ReactNode;\n /** The article: its title, its body. */\n children: React.ReactNode;\n};\n\n/** A documentation page: pages · article · contents, in the site's frame. */\nexport function DocsLayout({ sidebar, sidebarLabel, toc, className, children, ...props }: DocsLayoutProps) {\n return (\n <div className={s.root({ className })} {...props}>\n <div className={s.sidebar()}>{sidebar}</div>\n <div className=\"flex min-w-0 flex-col gap-6\">\n <details className={s.mobileNav()}>\n <summary className={s.mobileSummary()}>\n {sidebarLabel} <ChevronGlyph className=\"h-4 w-4 transition-transform motion-reduce:transition-none\" />\n </summary>\n <div className={s.mobileBody()}>{sidebar}</div>\n </details>\n <article className={s.article()}>{children}</article>\n </div>\n {toc && <div className={s.toc()}>{toc}</div>}\n </div>\n );\n}\n","// The small line glyphs the data and media primitives draw (play, volume, search, chevrons…): decorative, 24-unit\n// box, `currentColor`, sized by the caller's class. Shared by the entries that need them; never exported on its own —\n// a product draws its own icons with @krizaka/icons.\nimport type * as React from \"react\";\n\ntype GlyphProps = { className?: string };\n\nfunction Glyph({ className = \"h-4 w-4\", fill, children }: GlyphProps & { fill?: boolean; children: React.ReactNode }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n className={className}\n fill={fill ? \"currentColor\" : \"none\"}\n stroke={fill ? \"none\" : \"currentColor\"}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n focusable=\"false\"\n >\n {children}\n </svg>\n );\n}\n\nexport const PlayGlyph = (p: GlyphProps) => (\n <Glyph {...p} fill>\n <path d=\"M8 5.5v13a1 1 0 0 0 1.5.86l10.4-6.5a1 1 0 0 0 0-1.72L9.5 4.64A1 1 0 0 0 8 5.5Z\" />\n </Glyph>\n);\nexport const PauseGlyph = (p: GlyphProps) => (\n <Glyph {...p} fill>\n <rect x=\"6\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n <rect x=\"14\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n </Glyph>\n);\nexport const VolumeGlyph = ({ muted, ...p }: GlyphProps & { muted?: boolean }) => (\n <Glyph {...p}>\n <path d=\"M11 5 6 9H3v6h3l5 4V5Z\" />\n {muted ? <path d=\"m22 9-6 6m0-6 6 6\" /> : <path d=\"M15.5 8.5a5 5 0 0 1 0 7M18.5 5.5a9 9 0 0 1 0 13\" />}\n </Glyph>\n);\nexport const FullscreenGlyph = ({ exit, ...p }: GlyphProps & { exit?: boolean }) => (\n <Glyph {...p}>\n {exit ? <path d=\"M9 4v5H4m11-5v5h5M9 20v-5H4m11 5v-5h5\" /> : <path d=\"M4 9V4h5m6 0h5v5M4 15v5h5m11-5v5h-5\" />}\n </Glyph>\n);\nexport const CaptionsGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"M10 10.5a2 2 0 1 0 0 3M17 10.5a2 2 0 1 0 0 3\" />\n </Glyph>\n);\nexport const PipGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <rect x=\"12\" y=\"12\" width=\"6\" height=\"4\" rx=\"1\" />\n </Glyph>\n);\nexport const SearchGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m20 20-3.5-3.5\" />\n </Glyph>\n);\nexport const CloseGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </Glyph>\n);\nexport const ChevronGlyph = ({ direction = \"down\", ...p }: GlyphProps & { direction?: \"left\" | \"right\" | \"up\" | \"down\" }) => (\n <Glyph {...p}>\n <path d={{ left: \"m15 6-6 6 6 6\", right: \"m9 6 6 6-6 6\", up: \"m6 15 6-6 6 6\", down: \"m6 9 6 6 6-6\" }[direction]} />\n </Glyph>\n);\nexport const CheckGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M20 6 9 17l-5-5\" />\n </Glyph>\n);\nexport const PlusGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M12 5v14M5 12h14\" />\n </Glyph>\n);\nexport const CalendarGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M3 10h18M8 3v4M16 3v4\" />\n </Glyph>\n);\nexport const UploadGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M12 16V4m0 0L7 9m5-5 5 5\" />\n <path d=\"M4 16v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\" />\n </Glyph>\n);\nexport const FileGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8l-5-5Z\" />\n <path d=\"M14 3v5h5\" />\n </Glyph>\n);\nexport const CameraGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M4 8h3l2-3h6l2 3h3a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1Z\" />\n <circle cx=\"12\" cy=\"13.5\" r=\"3.5\" />\n </Glyph>\n);\nexport const FlipGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M4 12a8 8 0 0 1 14-5.3M20 12a8 8 0 0 1-14 5.3\" />\n <path d=\"M18 3v4h-4M6 21v-4h4\" />\n </Glyph>\n);\nexport const RetryGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M4 12a8 8 0 1 0 2.3-5.7L4 8.5\" />\n <path d=\"M4 4v4.5h4.5\" />\n </Glyph>\n);\nexport const SortGlyph = ({ direction, ...p }: GlyphProps & { direction?: \"ascending\" | \"descending\" }) => (\n <Glyph {...p}>\n {direction === \"ascending\" ? <path d=\"m7 14 5-5 5 5\" /> : direction === \"descending\" ? <path d=\"m7 10 5 5 5-5\" /> : <path d=\"m8 9 4-4 4 4M8 15l4 4 4-4\" />}\n </Glyph>\n);\nexport const ArrowGlyph = ({ direction = \"right\", ...p }: GlyphProps & { direction?: \"left\" | \"right\" }) => (\n <Glyph {...p}>\n <path d={direction === \"left\" ? \"M19 12H5m0 0 6-6m-6 6 6 6\" : \"M5 12h14m0 0-6-6m6 6-6 6\"} />\n </Glyph>\n);\nexport const ExternalGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M14 4h6v6M20 4l-9 9\" />\n <path d=\"M18 14v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4\" />\n </Glyph>\n);\nexport const WarningGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <path d=\"M12 4 2.5 20h19L12 4Z\" />\n <path d=\"M12 10v4M12 17.2v.1\" />\n </Glyph>\n);\nexport const CopyGlyph = (p: GlyphProps) => (\n <Glyph {...p}>\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" />\n <path d=\"M15 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3\" />\n </Glyph>\n);\n"],"mappings":";AAKA,SAAS,UAAU;;;ACIf,cAsBF,YAtBE;AAFJ,SAAS,MAAM,EAAE,YAAY,WAAW,MAAM,SAAS,GAA+D;AACpH,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR;AAAA,MACA,MAAM,OAAO,iBAAiB;AAAA,MAC9B,QAAQ,OAAO,SAAS;AAAA,MACxB,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAW;AAAA,MACX,WAAU;AAAA,MAET;AAAA;AAAA,EACH;AAEJ;AA+CO,IAAM,eAAe,CAAC,EAAE,YAAY,QAAQ,GAAG,EAAE,MACtD,oBAAC,SAAO,GAAG,GACT,8BAAC,UAAK,GAAG,EAAE,MAAM,iBAAiB,OAAO,gBAAgB,IAAI,iBAAiB,MAAM,eAAe,EAAE,SAAS,GAAG,GACnH;;;ADhCI,gBAAAA,MAGI,QAAAC,aAHJ;AAhCC,IAAM,aAAa,GAAG;AAAA,EAC3B,OAAO;AAAA,IACL,MACE;AAAA,IAEF,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eACE;AAAA,IAEF,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AACF,CAAC;AACD,IAAM,IAAI,WAAW;AAcd,SAAS,WAAW,EAAE,SAAS,cAAc,KAAK,WAAW,UAAU,GAAG,MAAM,GAAoB;AACzG,SACE,gBAAAA,MAAC,SAAI,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACzC;AAAA,oBAAAD,KAAC,SAAI,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,IACtC,gBAAAC,MAAC,SAAI,WAAU,+BACb;AAAA,sBAAAA,MAAC,aAAQ,WAAW,EAAE,UAAU,GAC9B;AAAA,wBAAAA,MAAC,aAAQ,WAAW,EAAE,cAAc,GACjC;AAAA;AAAA,UAAa;AAAA,UAAC,gBAAAD,KAAC,gBAAa,WAAU,8DAA6D;AAAA,WACtG;AAAA,QACA,gBAAAA,KAAC,SAAI,WAAW,EAAE,WAAW,GAAI,mBAAQ;AAAA,SAC3C;AAAA,MACA,gBAAAA,KAAC,aAAQ,WAAW,EAAE,QAAQ,GAAI,UAAS;AAAA,OAC7C;AAAA,IACC,OAAO,gBAAAA,KAAC,SAAI,WAAW,EAAE,IAAI,GAAI,eAAI;AAAA,KACxC;AAEJ;","names":["jsx","jsxs"]}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+
3
+ type ErrorPageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
4
+ /** The code (`404`, `500`): drawn, not read — the title says it in words. */
5
+ code: string;
6
+ /** The bird beside the code (a Mascot in its `empty` or `error` mood). */
7
+ mascot?: React.ReactNode;
8
+ /** The page's `h1` (`This page took another road`). */
9
+ title: React.ReactNode;
10
+ /** What happened and what to do, in one or two sentences. */
11
+ text?: React.ReactNode;
12
+ /** A search, to find what was meant. */
13
+ search?: React.ReactNode;
14
+ /** The ways back (an ActionBar: home, the docs, contact). */
15
+ actions?: React.ReactNode;
16
+ /** Under the actions: the most visited pages. */
17
+ children?: React.ReactNode;
18
+ };
19
+ /** An error page: the code drawn, the bird, a sentence, a search and the ways back. */
20
+ declare function ErrorPage({ code, mascot, title, text, search, actions, className, children, ...props }: ErrorPageProps): React.JSX.Element;
21
+
22
+ export { ErrorPage, type ErrorPageProps };
@@ -0,0 +1,23 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-KNBYZGSQ.js";
4
+
5
+ // src/error-page/error-page.tsx
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function ErrorPage({ code, mascot, title, text, search, actions, className, children, ...props }) {
8
+ return /* @__PURE__ */ jsxs("div", { className: cn("kz-frame kz-tpl-error", className), ...props, children: [
9
+ /* @__PURE__ */ jsxs("p", { className: "kz-tpl-error-code", "aria-hidden": true, children: [
10
+ code,
11
+ mascot
12
+ ] }),
13
+ /* @__PURE__ */ jsx("h1", { children: title }),
14
+ text && /* @__PURE__ */ jsx("p", { children: text }),
15
+ search && /* @__PURE__ */ jsx("div", { className: "kz-tpl-error-search", children: search }),
16
+ actions,
17
+ children
18
+ ] });
19
+ }
20
+ export {
21
+ ErrorPage
22
+ };
23
+ //# sourceMappingURL=error-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error-page/error-page.tsx"],"sourcesContent":["// Server-safe. When a page is not there (blocks.css `.kz-tpl-error`): the code drawn huge in outline, the bird that\n// lost its way beside it, one sentence, a search, and the ways back — never a dead end. The same frame as every page.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\n\nexport type ErrorPageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The code (`404`, `500`): drawn, not read — the title says it in words. */\n code: string;\n /** The bird beside the code (a Mascot in its `empty` or `error` mood). */\n mascot?: React.ReactNode;\n /** The page's `h1` (`This page took another road`). */\n title: React.ReactNode;\n /** What happened and what to do, in one or two sentences. */\n text?: React.ReactNode;\n /** A search, to find what was meant. */\n search?: React.ReactNode;\n /** The ways back (an ActionBar: home, the docs, contact). */\n actions?: React.ReactNode;\n /** Under the actions: the most visited pages. */\n children?: React.ReactNode;\n};\n\n/** An error page: the code drawn, the bird, a sentence, a search and the ways back. */\nexport function ErrorPage({ code, mascot, title, text, search, actions, className, children, ...props }: ErrorPageProps) {\n return (\n <div className={cn(\"kz-frame kz-tpl-error\", className)} {...props}>\n <p className=\"kz-tpl-error-code\" aria-hidden>\n {code}\n {mascot}\n </p>\n <h1>{title}</h1>\n {text && <p>{text}</p>}\n {search && <div className=\"kz-tpl-error-search\">{search}</div>}\n {actions}\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;AA2BM,SAIA,KAJA;AAHC,SAAS,UAAU,EAAE,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,WAAW,UAAU,GAAG,MAAM,GAAmB;AACvH,SACE,qBAAC,SAAI,WAAW,GAAG,yBAAyB,SAAS,GAAI,GAAG,OAC1D;AAAA,yBAAC,OAAE,WAAU,qBAAoB,eAAW,MACzC;AAAA;AAAA,MACA;AAAA,OACH;AAAA,IACA,oBAAC,QAAI,iBAAM;AAAA,IACV,QAAQ,oBAAC,OAAG,gBAAK;AAAA,IACjB,UAAU,oBAAC,SAAI,WAAU,uBAAuB,kBAAO;AAAA,IACvD;AAAA,IACA;AAAA,KACH;AAEJ;","names":[]}
@@ -0,0 +1,50 @@
1
+ import { LinkComponent } from '@krizaka/ui/page-hero';
2
+ import * as React from 'react';
3
+
4
+ interface GalleryItem {
5
+ /** A stable key. */
6
+ id: string;
7
+ /** The media: an `<img>` with its `alt`, a `<video>` with its label, a VideoPlayer. */
8
+ media: React.ReactNode;
9
+ /** Its title. */
10
+ title: React.ReactNode;
11
+ /** One line: what it shows, how it was made (a prompt, a seed). */
12
+ caption?: React.ReactNode;
13
+ }
14
+ type GalleryPageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
15
+ /** The brand the page wears (`.brand-<id>`). */
16
+ brand?: string;
17
+ /** The way back. */
18
+ back?: {
19
+ href: string;
20
+ label: string;
21
+ };
22
+ /** A mono line above the title. */
23
+ eyebrow?: React.ReactNode;
24
+ /** The page's `h1`. */
25
+ title: React.ReactNode;
26
+ /** One or two sentences under it. */
27
+ lead?: React.ReactNode;
28
+ /** The hero's actions. */
29
+ actions?: React.ReactNode;
30
+ /** Above the pieces: the filters (ChipLink, a Chip group) — the address says which one is on. */
31
+ filters?: React.ReactNode;
32
+ /** The gallery's accessible name. */
33
+ galleryLabel: string;
34
+ /** The pieces, featured first. */
35
+ items: readonly GalleryItem[];
36
+ /** After the gallery: how it was made, the facts. */
37
+ children?: React.ReactNode;
38
+ /** The closing call. */
39
+ closing?: {
40
+ title: React.ReactNode;
41
+ body?: React.ReactNode;
42
+ actions: React.ReactNode;
43
+ };
44
+ /** The app's link component (Next's `Link`). */
45
+ linkAs?: LinkComponent;
46
+ };
47
+ /** A demo or a gallery: hero, filters, media in staggered columns, closing call. */
48
+ declare function GalleryPage({ brand, back, eyebrow, title, lead, actions, filters, galleryLabel, items, closing, linkAs, className, children, ...props }: GalleryPageProps): React.JSX.Element;
49
+
50
+ export { type GalleryItem, GalleryPage, type GalleryPageProps };
@@ -0,0 +1,30 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-KNBYZGSQ.js";
4
+
5
+ // src/gallery-page/gallery-page.tsx
6
+ import { CtaPanel } from "@krizaka/ui/cta-panel";
7
+ import { Section } from "@krizaka/ui/page";
8
+ import { PageHero } from "@krizaka/ui/page-hero";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ function GalleryPage({ brand, back, eyebrow, title, lead, actions, filters, galleryLabel, items, closing, linkAs, className, children, ...props }) {
11
+ return /* @__PURE__ */ jsxs("div", { className: cn(brand && "brand-" + brand, className), ...props, children: [
12
+ /* @__PURE__ */ jsx(PageHero, { back, linkAs, eyebrow, title, lead, align: "center", backdrop: "plain", children: actions }),
13
+ /* @__PURE__ */ jsxs(Section, { "aria-label": galleryLabel, spacing: "sm", children: [
14
+ filters && /* @__PURE__ */ jsx("div", { className: "kz-tpl-filters", children: filters }),
15
+ /* @__PURE__ */ jsx("ul", { className: "kz-tpl-gallery", children: items.map((item) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("figure", { className: "kz-tpl-figure", children: [
16
+ /* @__PURE__ */ jsx("div", { className: "kz-tpl-figure-media", children: item.media }),
17
+ /* @__PURE__ */ jsxs("figcaption", { children: [
18
+ /* @__PURE__ */ jsx("strong", { children: item.title }),
19
+ item.caption && /* @__PURE__ */ jsx("span", { children: item.caption })
20
+ ] })
21
+ ] }) }, item.id)) })
22
+ ] }),
23
+ children,
24
+ closing && /* @__PURE__ */ jsx(Section, { spacing: "sm", "aria-labelledby": "gallery-closing", children: /* @__PURE__ */ jsx(CtaPanel, { id: "gallery-closing", title: closing.title, body: closing.body, reveal: true, children: closing.actions }) })
25
+ ] });
26
+ }
27
+ export {
28
+ GalleryPage
29
+ };
30
+ //# sourceMappingURL=gallery-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gallery-page/gallery-page.tsx"],"sourcesContent":["// Server-safe. A demo or a gallery (blocks.css `.kz-tpl-gallery`): the hero, the filters as chips, then the pieces in\n// columns of different heights — each a framed media with its title and caption (a recording of the real product, an\n// image it generated, with its prompt) — and the closing call.\nimport { CtaPanel } from \"@krizaka/ui/cta-panel\";\nimport { Section } from \"@krizaka/ui/page\";\nimport type { LinkComponent } from \"@krizaka/ui/page-hero\";\nimport { PageHero } from \"@krizaka/ui/page-hero\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\n\nexport interface GalleryItem {\n /** A stable key. */\n id: string;\n /** The media: an `<img>` with its `alt`, a `<video>` with its label, a VideoPlayer. */\n media: React.ReactNode;\n /** Its title. */\n title: React.ReactNode;\n /** One line: what it shows, how it was made (a prompt, a seed). */\n caption?: React.ReactNode;\n}\n\nexport type GalleryPageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The brand the page wears (`.brand-<id>`). */\n brand?: string;\n /** The way back. */\n back?: { href: string; label: string };\n /** A mono line above the title. */\n eyebrow?: React.ReactNode;\n /** The page's `h1`. */\n title: React.ReactNode;\n /** One or two sentences under it. */\n lead?: React.ReactNode;\n /** The hero's actions. */\n actions?: React.ReactNode;\n /** Above the pieces: the filters (ChipLink, a Chip group) — the address says which one is on. */\n filters?: React.ReactNode;\n /** The gallery's accessible name. */\n galleryLabel: string;\n /** The pieces, featured first. */\n items: readonly GalleryItem[];\n /** After the gallery: how it was made, the facts. */\n children?: React.ReactNode;\n /** The closing call. */\n closing?: { title: React.ReactNode; body?: React.ReactNode; actions: React.ReactNode };\n /** The app's link component (Next's `Link`). */\n linkAs?: LinkComponent;\n};\n\n/** A demo or a gallery: hero, filters, media in staggered columns, closing call. */\nexport function GalleryPage({ brand, back, eyebrow, title, lead, actions, filters, galleryLabel, items, closing, linkAs, className, children, ...props }: GalleryPageProps) {\n return (\n <div className={cn(brand && \"brand-\" + brand, className)} {...props}>\n <PageHero back={back} linkAs={linkAs} eyebrow={eyebrow} title={title} lead={lead} align=\"center\" backdrop=\"plain\">\n {actions}\n </PageHero>\n <Section aria-label={galleryLabel} spacing=\"sm\">\n {filters && <div className=\"kz-tpl-filters\">{filters}</div>}\n <ul className=\"kz-tpl-gallery\">\n {items.map((item) => (\n <li key={item.id}>\n <figure className=\"kz-tpl-figure\">\n <div className=\"kz-tpl-figure-media\">{item.media}</div>\n <figcaption>\n <strong>{item.title}</strong>\n {item.caption && <span>{item.caption}</span>}\n </figcaption>\n </figure>\n </li>\n ))}\n </ul>\n </Section>\n {children}\n {closing && (\n <Section spacing=\"sm\" aria-labelledby=\"gallery-closing\">\n <CtaPanel id=\"gallery-closing\" title={closing.title} body={closing.body} reveal>\n {closing.actions}\n </CtaPanel>\n </Section>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAGA,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAExB,SAAS,gBAAgB;AA+CnB,cAUU,YAVV;AAHC,SAAS,YAAY,EAAE,OAAO,MAAM,SAAS,OAAO,MAAM,SAAS,SAAS,cAAc,OAAO,SAAS,QAAQ,WAAW,UAAU,GAAG,MAAM,GAAqB;AAC1K,SACE,qBAAC,SAAI,WAAW,GAAG,SAAS,WAAW,OAAO,SAAS,GAAI,GAAG,OAC5D;AAAA,wBAAC,YAAS,MAAY,QAAgB,SAAkB,OAAc,MAAY,OAAM,UAAS,UAAS,SACvG,mBACH;AAAA,IACA,qBAAC,WAAQ,cAAY,cAAc,SAAQ,MACxC;AAAA,iBAAW,oBAAC,SAAI,WAAU,kBAAkB,mBAAQ;AAAA,MACrD,oBAAC,QAAG,WAAU,kBACX,gBAAM,IAAI,CAAC,SACV,oBAAC,QACC,+BAAC,YAAO,WAAU,iBAChB;AAAA,4BAAC,SAAI,WAAU,uBAAuB,eAAK,OAAM;AAAA,QACjD,qBAAC,gBACC;AAAA,8BAAC,YAAQ,eAAK,OAAM;AAAA,UACnB,KAAK,WAAW,oBAAC,UAAM,eAAK,SAAQ;AAAA,WACvC;AAAA,SACF,KAPO,KAAK,EAQd,CACD,GACH;AAAA,OACF;AAAA,IACC;AAAA,IACA,WACC,oBAAC,WAAQ,SAAQ,MAAK,mBAAgB,mBACpC,8BAAC,YAAS,IAAG,mBAAkB,OAAO,QAAQ,OAAO,MAAM,QAAQ,MAAM,QAAM,MAC5E,kBAAQ,SACX,GACF;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one
3
3
  * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,
4
- * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon) and the lovebird that
5
- * introduces (2026-10, with Yazakia: "l'inséparable présente"), redrawn on one 120 × 120 grid so that any bird can
6
- * wear any mood.
4
+ * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that
5
+ * introduces (2026-10, with Yazakia: "l'inséparable présente") and the crane that listens (2026-10, with Yororis:
6
+ * "la grue écoute"), redrawn on one 120 × 120 grid so that any bird can wear any mood.
7
7
  *
8
8
  * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,
9
9
  * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives
10
10
  * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades
11
11
  * and highlights are black and white at a low opacity over the role, so they hold in both themes.
12
12
  */
13
- declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon", "lovebird"];
13
+ declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon", "lovebird", "crane"];
14
14
  type MascotBird = (typeof MASCOT_BIRDS)[number];
15
15
  declare const MASCOT_MOODS: readonly ["welcome", "thinking", "success", "empty", "error"];
16
16
  type MascotMood = (typeof MASCOT_MOODS)[number];