@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,62 @@
1
+ import * as React from 'react';
2
+
3
+ interface PricingPlan {
4
+ /** A stable key. */
5
+ id: string;
6
+ /** Its name. */
7
+ name: React.ReactNode;
8
+ /** Its price (`€29`, `Free`, `Custom`). */
9
+ price: React.ReactNode;
10
+ /** Under the price: the unit (`per month · 12,000 credits`). */
11
+ unit?: React.ReactNode;
12
+ /** What it includes, a few lines. */
13
+ features: readonly React.ReactNode[];
14
+ /** Its action (a cut Button or link; the featured one primary). */
15
+ action: React.ReactNode;
16
+ /** The plan most people choose: lifted and lit. */
17
+ featured?: boolean;
18
+ /** Its badge (`Most chosen`). */
19
+ badge?: React.ReactNode;
20
+ }
21
+ type PricingPageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
22
+ /** The brand the page wears (`.brand-<id>`). */
23
+ brand?: string;
24
+ /** A mono line above the title. */
25
+ eyebrow?: React.ReactNode;
26
+ /** The page's `h1`. */
27
+ title: React.ReactNode;
28
+ /** One sentence under it. */
29
+ lead?: React.ReactNode;
30
+ /** Above the plans: a period switch (monthly · yearly), a currency. */
31
+ toolbar?: React.ReactNode;
32
+ /** The plans' accessible name (`Plans`). */
33
+ plansLabel: string;
34
+ /** The plans. */
35
+ plans: readonly PricingPlan[];
36
+ /** The comparison: its caption, columns (the plans' names) and rows (a feature and a cell per plan). */
37
+ compare?: {
38
+ caption: React.ReactNode;
39
+ columns: readonly React.ReactNode[];
40
+ rows: readonly {
41
+ feature: React.ReactNode;
42
+ cells: readonly React.ReactNode[];
43
+ }[];
44
+ };
45
+ /** What a credit buys, the credits left: a Meter, a sentence. */
46
+ credits?: {
47
+ title: React.ReactNode;
48
+ children: React.ReactNode;
49
+ };
50
+ /** The questions, folded. */
51
+ faq?: {
52
+ title: React.ReactNode;
53
+ items: readonly {
54
+ question: React.ReactNode;
55
+ answer: React.ReactNode;
56
+ }[];
57
+ };
58
+ };
59
+ /** A pricing page: plans (the featured one lifted), the comparison, credits, the questions. */
60
+ declare function PricingPage({ brand, eyebrow, title, lead, toolbar, plansLabel, plans, compare, credits, faq, className, ...props }: PricingPageProps): React.JSX.Element;
61
+
62
+ export { PricingPage, type PricingPageProps, type PricingPlan };
@@ -0,0 +1,71 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-KNBYZGSQ.js";
4
+
5
+ // src/pricing-page/pricing-page.tsx
6
+ import { Section } from "@krizaka/ui/page";
7
+ import { PageHero } from "@krizaka/ui/page-hero";
8
+
9
+ // src/glyphs.tsx
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function Glyph({ className = "h-4 w-4", fill, children }) {
12
+ return /* @__PURE__ */ jsx(
13
+ "svg",
14
+ {
15
+ viewBox: "0 0 24 24",
16
+ className,
17
+ fill: fill ? "currentColor" : "none",
18
+ stroke: fill ? "none" : "currentColor",
19
+ strokeWidth: "2",
20
+ strokeLinecap: "round",
21
+ strokeLinejoin: "round",
22
+ "aria-hidden": true,
23
+ focusable: "false",
24
+ children
25
+ }
26
+ );
27
+ }
28
+ var CheckGlyph = (p) => /* @__PURE__ */ jsx(Glyph, { ...p, children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" }) });
29
+
30
+ // src/pricing-page/pricing-page.tsx
31
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
32
+ function PricingPage({ brand, eyebrow, title, lead, toolbar, plansLabel, plans, compare, credits, faq, className, ...props }) {
33
+ return /* @__PURE__ */ jsxs2("div", { className: cn(brand && "brand-" + brand, className), ...props, children: [
34
+ /* @__PURE__ */ jsx2(PageHero, { eyebrow, title, lead, align: "center", backdrop: "plain", children: toolbar }),
35
+ /* @__PURE__ */ jsx2(Section, { "aria-label": plansLabel, spacing: "sm", children: /* @__PURE__ */ jsx2("ul", { className: "kz-tpl-plans", children: plans.map((p) => /* @__PURE__ */ jsx2("li", { children: /* @__PURE__ */ jsxs2("div", { className: "kz-tpl-plan", "data-featured": p.featured ? "" : void 0, children: [
36
+ /* @__PURE__ */ jsxs2("div", { className: "kz-tpl-collection-head", children: [
37
+ /* @__PURE__ */ jsx2("h2", { children: p.name }),
38
+ p.badge && /* @__PURE__ */ jsx2("span", { className: "kz-fact", "data-tone": "ok", children: p.badge })
39
+ ] }),
40
+ /* @__PURE__ */ jsxs2("p", { className: "kz-tpl-price", children: [
41
+ p.price,
42
+ p.unit && /* @__PURE__ */ jsx2("small", { children: p.unit })
43
+ ] }),
44
+ /* @__PURE__ */ jsx2("ul", { children: p.features.map((f, i) => /* @__PURE__ */ jsxs2("li", { children: [
45
+ /* @__PURE__ */ jsx2(CheckGlyph, { className: "h-4 w-4" }),
46
+ /* @__PURE__ */ jsx2("span", { children: f })
47
+ ] }, i)) }),
48
+ /* @__PURE__ */ jsx2("div", { children: p.action })
49
+ ] }) }, p.id)) }) }),
50
+ compare && /* @__PURE__ */ jsx2(Section, { "aria-label": typeof compare.caption === "string" ? compare.caption : void 0, spacing: "sm", divider: true, children: /* @__PURE__ */ jsx2("div", { className: "kz-tpl-scroll", tabIndex: 0, children: /* @__PURE__ */ jsxs2("table", { className: "kz-tpl-compare", children: [
51
+ /* @__PURE__ */ jsx2("caption", { className: "kz-label kz-tpl-caption", children: compare.caption }),
52
+ /* @__PURE__ */ jsx2("thead", { children: /* @__PURE__ */ jsxs2("tr", { children: [
53
+ /* @__PURE__ */ jsx2("td", {}),
54
+ compare.columns.map((c, i) => /* @__PURE__ */ jsx2("th", { scope: "col", children: c }, i))
55
+ ] }) }),
56
+ /* @__PURE__ */ jsx2("tbody", { children: compare.rows.map((r, i) => /* @__PURE__ */ jsxs2("tr", { children: [
57
+ /* @__PURE__ */ jsx2("th", { scope: "row", children: r.feature }),
58
+ r.cells.map((cell, j) => /* @__PURE__ */ jsx2("td", { children: cell }, j))
59
+ ] }, i)) })
60
+ ] }) }) }),
61
+ credits && /* @__PURE__ */ jsx2(Section, { id: "credits", title: credits.title, headingSize: "sm", spacing: "sm", divider: true, children: credits.children }),
62
+ faq && /* @__PURE__ */ jsx2(Section, { id: "faq", title: faq.title, headingSize: "sm", spacing: "sm", divider: true, children: /* @__PURE__ */ jsx2("div", { className: "kz-tpl-faq", children: faq.items.map((q, i) => /* @__PURE__ */ jsxs2("details", { children: [
63
+ /* @__PURE__ */ jsx2("summary", { children: q.question }),
64
+ /* @__PURE__ */ jsx2("div", { children: q.answer })
65
+ ] }, i)) }) })
66
+ ] });
67
+ }
68
+ export {
69
+ PricingPage
70
+ };
71
+ //# sourceMappingURL=pricing-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pricing-page/pricing-page.tsx","../src/glyphs.tsx"],"sourcesContent":["// Server-safe. Plans and what they cost (blocks.css `.kz-tpl-plans`, `.kz-tpl-compare`, `.kz-tpl-faq`): the hero, the\n// plans side by side — the featured one lifted, lit by the brand — the comparison as a table that scrolls on a phone,\n// what a credit buys, and the questions people ask, folded.\nimport { Section } from \"@krizaka/ui/page\";\nimport { PageHero } from \"@krizaka/ui/page-hero\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport { CheckGlyph } from \"../glyphs\";\n\nexport interface PricingPlan {\n /** A stable key. */\n id: string;\n /** Its name. */\n name: React.ReactNode;\n /** Its price (`€29`, `Free`, `Custom`). */\n price: React.ReactNode;\n /** Under the price: the unit (`per month · 12,000 credits`). */\n unit?: React.ReactNode;\n /** What it includes, a few lines. */\n features: readonly React.ReactNode[];\n /** Its action (a cut Button or link; the featured one primary). */\n action: React.ReactNode;\n /** The plan most people choose: lifted and lit. */\n featured?: boolean;\n /** Its badge (`Most chosen`). */\n badge?: React.ReactNode;\n}\n\nexport type PricingPageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The brand the page wears (`.brand-<id>`). */\n brand?: string;\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 /** Above the plans: a period switch (monthly · yearly), a currency. */\n toolbar?: React.ReactNode;\n /** The plans' accessible name (`Plans`). */\n plansLabel: string;\n /** The plans. */\n plans: readonly PricingPlan[];\n /** The comparison: its caption, columns (the plans' names) and rows (a feature and a cell per plan). */\n compare?: { caption: React.ReactNode; columns: readonly React.ReactNode[]; rows: readonly { feature: React.ReactNode; cells: readonly React.ReactNode[] }[] };\n /** What a credit buys, the credits left: a Meter, a sentence. */\n credits?: { title: React.ReactNode; children: React.ReactNode };\n /** The questions, folded. */\n faq?: { title: React.ReactNode; items: readonly { question: React.ReactNode; answer: React.ReactNode }[] };\n};\n\n/** A pricing page: plans (the featured one lifted), the comparison, credits, the questions. */\nexport function PricingPage({ brand, eyebrow, title, lead, toolbar, plansLabel, plans, compare, credits, faq, className, ...props }: PricingPageProps) {\n return (\n <div className={cn(brand && \"brand-\" + brand, className)} {...props}>\n <PageHero eyebrow={eyebrow} title={title} lead={lead} align=\"center\" backdrop=\"plain\">\n {toolbar}\n </PageHero>\n <Section aria-label={plansLabel} spacing=\"sm\">\n <ul className=\"kz-tpl-plans\">\n {plans.map((p) => (\n <li key={p.id}>\n <div className=\"kz-tpl-plan\" data-featured={p.featured ? \"\" : undefined}>\n <div className=\"kz-tpl-collection-head\">\n <h2>{p.name}</h2>\n {p.badge && <span className=\"kz-fact\" data-tone=\"ok\">{p.badge}</span>}\n </div>\n <p className=\"kz-tpl-price\">\n {p.price}\n {p.unit && <small>{p.unit}</small>}\n </p>\n <ul>\n {p.features.map((f, i) => (\n <li key={i}>\n <CheckGlyph className=\"h-4 w-4\" />\n <span>{f}</span>\n </li>\n ))}\n </ul>\n <div>{p.action}</div>\n </div>\n </li>\n ))}\n </ul>\n </Section>\n {compare && (\n <Section aria-label={typeof compare.caption === \"string\" ? compare.caption : undefined} spacing=\"sm\" divider>\n <div className=\"kz-tpl-scroll\" tabIndex={0}>\n <table className=\"kz-tpl-compare\">\n <caption className=\"kz-label kz-tpl-caption\">{compare.caption}</caption>\n <thead>\n <tr>\n <td />\n {compare.columns.map((c, i) => (\n <th key={i} scope=\"col\">\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {compare.rows.map((r, i) => (\n <tr key={i}>\n <th scope=\"row\">{r.feature}</th>\n {r.cells.map((cell, j) => (\n <td key={j}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </Section>\n )}\n {credits && (\n <Section id=\"credits\" title={credits.title} headingSize=\"sm\" spacing=\"sm\" divider>\n {credits.children}\n </Section>\n )}\n {faq && (\n <Section id=\"faq\" title={faq.title} headingSize=\"sm\" spacing=\"sm\" divider>\n <div className=\"kz-tpl-faq\">\n {faq.items.map((q, i) => (\n <details key={i}>\n <summary>{q.question}</summary>\n <div>{q.answer}</div>\n </details>\n ))}\n </div>\n </Section>\n )}\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":";;;;;AAGA,SAAS,eAAe;AACxB,SAAS,gBAAgB;;;ACKrB,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;AAoDO,IAAM,aAAa,CAAC,MACzB,oBAAC,SAAO,GAAG,GACT,8BAAC,UAAK,GAAE,mBAAkB,GAC5B;;;ADtBI,gBAAAA,MAQU,QAAAC,aARV;AAHC,SAAS,YAAY,EAAE,OAAO,SAAS,OAAO,MAAM,SAAS,YAAY,OAAO,SAAS,SAAS,KAAK,WAAW,GAAG,MAAM,GAAqB;AACrJ,SACE,gBAAAA,MAAC,SAAI,WAAW,GAAG,SAAS,WAAW,OAAO,SAAS,GAAI,GAAG,OAC5D;AAAA,oBAAAD,KAAC,YAAS,SAAkB,OAAc,MAAY,OAAM,UAAS,UAAS,SAC3E,mBACH;AAAA,IACA,gBAAAA,KAAC,WAAQ,cAAY,YAAY,SAAQ,MACvC,0BAAAA,KAAC,QAAG,WAAU,gBACX,gBAAM,IAAI,CAAC,MACV,gBAAAA,KAAC,QACC,0BAAAC,MAAC,SAAI,WAAU,eAAc,iBAAe,EAAE,WAAW,KAAK,QAC5D;AAAA,sBAAAA,MAAC,SAAI,WAAU,0BACb;AAAA,wBAAAD,KAAC,QAAI,YAAE,MAAK;AAAA,QACX,EAAE,SAAS,gBAAAA,KAAC,UAAK,WAAU,WAAU,aAAU,MAAM,YAAE,OAAM;AAAA,SAChE;AAAA,MACA,gBAAAC,MAAC,OAAE,WAAU,gBACV;AAAA,UAAE;AAAA,QACF,EAAE,QAAQ,gBAAAD,KAAC,WAAO,YAAE,MAAK;AAAA,SAC5B;AAAA,MACA,gBAAAA,KAAC,QACE,YAAE,SAAS,IAAI,CAAC,GAAG,MAClB,gBAAAC,MAAC,QACC;AAAA,wBAAAD,KAAC,cAAW,WAAU,WAAU;AAAA,QAChC,gBAAAA,KAAC,UAAM,aAAE;AAAA,WAFF,CAGT,CACD,GACH;AAAA,MACA,gBAAAA,KAAC,SAAK,YAAE,QAAO;AAAA,OACjB,KAnBO,EAAE,EAoBX,CACD,GACH,GACF;AAAA,IACC,WACC,gBAAAA,KAAC,WAAQ,cAAY,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,QAAW,SAAQ,MAAK,SAAO,MAC1G,0BAAAA,KAAC,SAAI,WAAU,iBAAgB,UAAU,GACvC,0BAAAC,MAAC,WAAM,WAAU,kBACf;AAAA,sBAAAD,KAAC,aAAQ,WAAU,2BAA2B,kBAAQ,SAAQ;AAAA,MAC9D,gBAAAA,KAAC,WACC,0BAAAC,MAAC,QACC;AAAA,wBAAAD,KAAC,QAAG;AAAA,QACH,QAAQ,QAAQ,IAAI,CAAC,GAAG,MACvB,gBAAAA,KAAC,QAAW,OAAM,OACf,eADM,CAET,CACD;AAAA,SACH,GACF;AAAA,MACA,gBAAAA,KAAC,WACE,kBAAQ,KAAK,IAAI,CAAC,GAAG,MACpB,gBAAAC,MAAC,QACC;AAAA,wBAAAD,KAAC,QAAG,OAAM,OAAO,YAAE,SAAQ;AAAA,QAC1B,EAAE,MAAM,IAAI,CAAC,MAAM,MAClB,gBAAAA,KAAC,QAAY,kBAAJ,CAAS,CACnB;AAAA,WAJM,CAKT,CACD,GACH;AAAA,OACF,GACF,GACF;AAAA,IAED,WACC,gBAAAA,KAAC,WAAQ,IAAG,WAAU,OAAO,QAAQ,OAAO,aAAY,MAAK,SAAQ,MAAK,SAAO,MAC9E,kBAAQ,UACX;AAAA,IAED,OACC,gBAAAA,KAAC,WAAQ,IAAG,OAAM,OAAO,IAAI,OAAO,aAAY,MAAK,SAAQ,MAAK,SAAO,MACvE,0BAAAA,KAAC,SAAI,WAAU,cACZ,cAAI,MAAM,IAAI,CAAC,GAAG,MACjB,gBAAAC,MAAC,aACC;AAAA,sBAAAD,KAAC,aAAS,YAAE,UAAS;AAAA,MACrB,gBAAAA,KAAC,SAAK,YAAE,QAAO;AAAA,SAFH,CAGd,CACD,GACH,GACF;AAAA,KAEJ;AAEJ;","names":["jsx","jsxs"]}
@@ -0,0 +1,83 @@
1
+ import { Decision } from '@krizaka/ui/decision-list';
2
+ import { MascotBird } from '@krizaka/ui/mascots';
3
+ import { Fact } from '@krizaka/ui/page';
4
+ import { LinkComponent } from '@krizaka/ui/page-hero';
5
+ import * as React from 'react';
6
+
7
+ interface ProductReason {
8
+ /** A stable key (the card's anchor). */
9
+ id: string;
10
+ /** Its name. */
11
+ title: React.ReactNode;
12
+ /** The trap elsewhere, in one line. */
13
+ trap: React.ReactNode;
14
+ /** The signature icon. */
15
+ icon?: React.ReactNode;
16
+ /** The bird in the corner (whose rule it is). */
17
+ mark?: React.ReactNode;
18
+ /** Where the long version lives (a page) — or nothing, and the card stays its face. */
19
+ href?: string;
20
+ }
21
+ type ProductPageProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
22
+ /** The product's brand (`orazaka`, `orochia`…): the page wears `.brand-<id>`. */
23
+ brand?: string;
24
+ /** The product's mark and name, above the title. */
25
+ mark?: React.ReactNode;
26
+ /** The promise: the page's `h1`. */
27
+ title: React.ReactNode;
28
+ /** One or two sentences under it. */
29
+ lead?: React.ReactNode;
30
+ /** Facts under the lead (open source, a law it keeps). */
31
+ facts?: readonly Fact[];
32
+ /** The hero's actions. */
33
+ actions?: React.ReactNode;
34
+ /** The product alive, in a window beside the words. */
35
+ visual?: React.ReactNode;
36
+ /** The window's caption. */
37
+ visualLabel?: React.ReactNode;
38
+ /** The reasons' section heading. */
39
+ reasonsHeading: {
40
+ eyebrow?: React.ReactNode;
41
+ title: React.ReactNode;
42
+ lead?: React.ReactNode;
43
+ };
44
+ /** The words of the cards: the trap's label (read, not shown) and the way in. */
45
+ reasonLabels: {
46
+ trap: string;
47
+ more: React.ReactNode;
48
+ };
49
+ /** The traps it removes. */
50
+ reasons: readonly ProductReason[];
51
+ /** The decisions' section: heading, decisions and their four labels. */
52
+ decisions?: {
53
+ eyebrow?: React.ReactNode;
54
+ title: React.ReactNode;
55
+ items: readonly Decision[];
56
+ labels: {
57
+ chose: React.ReactNode;
58
+ refused: React.ReactNode;
59
+ because: React.ReactNode;
60
+ cost: React.ReactNode;
61
+ };
62
+ };
63
+ /** The promise a bird keeps, under the decisions. */
64
+ promise?: {
65
+ bird: MascotBird;
66
+ label: React.ReactNode;
67
+ text: React.ReactNode;
68
+ };
69
+ /** More sections between the decisions and the closing call (the tour, the platform, a comparison). */
70
+ children?: React.ReactNode;
71
+ /** The closing call. */
72
+ closing?: {
73
+ title: React.ReactNode;
74
+ body?: React.ReactNode;
75
+ actions: React.ReactNode;
76
+ };
77
+ /** The app's link component (Next's `Link`). */
78
+ linkAs?: LinkComponent;
79
+ };
80
+ /** A product's overview: split hero, traps as compact cards, decisions with their cost, the bird's promise, closing call. */
81
+ declare function ProductPage({ brand, mark, title, lead, facts, actions, visual, visualLabel, reasonsHeading, reasonLabels, reasons, decisions, promise, closing, linkAs, className, children, ...props }: ProductPageProps): React.JSX.Element;
82
+
83
+ export { ProductPage, type ProductPageProps, type ProductReason };
@@ -0,0 +1,60 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-KNBYZGSQ.js";
4
+
5
+ // src/product-page/product-page.tsx
6
+ import { ArgumentCard } from "@krizaka/ui/argument-card";
7
+ import { CardGrid } from "@krizaka/ui/card-grid";
8
+ import { CtaPanel } from "@krizaka/ui/cta-panel";
9
+ import { DecisionList } from "@krizaka/ui/decision-list";
10
+ import { MascotQuote } from "@krizaka/ui/mascot-quote";
11
+ import { Facts, Page, Section } from "@krizaka/ui/page";
12
+ import { SectionBackdrop } from "@krizaka/ui/section-backdrop";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ function ProductPage({ brand, mark, title, lead, facts, actions, visual, visualLabel, reasonsHeading, reasonLabels, reasons, decisions, promise, closing, linkAs, className, children, ...props }) {
15
+ return /* @__PURE__ */ jsxs("div", { className: cn(brand && "brand-" + brand, className), ...props, children: [
16
+ /* @__PURE__ */ jsx(SectionBackdrop, { as: "header", grid: true, className: "kz-hero", children: /* @__PURE__ */ jsx(Page, { children: /* @__PURE__ */ jsxs("div", { className: visual ? "kz-tpl-split" : void 0, children: [
17
+ /* @__PURE__ */ jsxs("div", { className: "kz-hero-text", children: [
18
+ mark && /* @__PURE__ */ jsx("p", { className: "kz-eyebrow", children: mark }),
19
+ /* @__PURE__ */ jsx("h1", { className: "kz-hero-title", children: title }),
20
+ lead && /* @__PURE__ */ jsx("p", { className: "kz-hero-lead", children: lead }),
21
+ (facts || actions) && /* @__PURE__ */ jsxs("div", { className: "kz-hero-extra", children: [
22
+ facts && /* @__PURE__ */ jsx(Facts, { items: facts }),
23
+ actions && /* @__PURE__ */ jsx("div", { className: "kz-tpl-actions", children: actions })
24
+ ] })
25
+ ] }),
26
+ visual && /* @__PURE__ */ jsxs("figure", { className: "kz-tpl-stage", children: [
27
+ /* @__PURE__ */ jsxs("div", { className: "kz-tpl-stage-bar", "aria-hidden": true, children: [
28
+ /* @__PURE__ */ jsx("i", {}),
29
+ /* @__PURE__ */ jsx("i", {}),
30
+ /* @__PURE__ */ jsx("i", {}),
31
+ visualLabel && /* @__PURE__ */ jsx("span", { children: visualLabel })
32
+ ] }),
33
+ visual
34
+ ] })
35
+ ] }) }) }),
36
+ /* @__PURE__ */ jsx(Section, { id: "why", eyebrow: reasonsHeading.eyebrow, title: reasonsHeading.title, lead: reasonsHeading.lead, reveal: true, children: /* @__PURE__ */ jsx(CardGrid, { min: 260, fit: "fit", children: reasons.map((r) => /* @__PURE__ */ jsx(
37
+ ArgumentCard,
38
+ {
39
+ id: `why-${r.id}`,
40
+ icon: r.icon,
41
+ title: r.title,
42
+ mark: r.mark,
43
+ hook: { label: reasonLabels.trap, text: r.trap },
44
+ more: r.href ? { href: r.href, label: reasonLabels.more } : void 0,
45
+ linkAs
46
+ },
47
+ r.id
48
+ )) }) }),
49
+ decisions && /* @__PURE__ */ jsxs(Section, { id: "decisions", eyebrow: decisions.eyebrow, title: decisions.title, divider: true, reveal: true, children: [
50
+ /* @__PURE__ */ jsx(DecisionList, { decisions: decisions.items, labels: decisions.labels }),
51
+ promise && /* @__PURE__ */ jsx("div", { className: "kz-tpl-promise", children: /* @__PURE__ */ jsx(MascotQuote, { variant: "callout", bird: promise.bird, mood: "welcome", label: promise.label, children: promise.text }) })
52
+ ] }),
53
+ children,
54
+ closing && /* @__PURE__ */ jsx(Section, { spacing: "sm", "aria-labelledby": "product-closing", children: /* @__PURE__ */ jsx(CtaPanel, { id: "product-closing", title: closing.title, body: closing.body, reveal: true, children: closing.actions }) })
55
+ ] });
56
+ }
57
+ export {
58
+ ProductPage
59
+ };
60
+ //# sourceMappingURL=product-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/product-page/product-page.tsx"],"sourcesContent":["// Server-safe. A product's overview: the hero with the product's mark, its promise, facts and main action beside a live\n// window of the product; the traps it removes as compact argument cards; its decisions with their cost; the promise a\n// bird keeps; the closing call. Under the product's brand (`brand` → `.brand-<id>`).\nimport { ArgumentCard } from \"@krizaka/ui/argument-card\";\nimport { CardGrid } from \"@krizaka/ui/card-grid\";\nimport { CtaPanel } from \"@krizaka/ui/cta-panel\";\nimport { type Decision, DecisionList } from \"@krizaka/ui/decision-list\";\nimport { MascotQuote } from \"@krizaka/ui/mascot-quote\";\nimport type { MascotBird } from \"@krizaka/ui/mascots\";\nimport { type Fact, Facts, Page, Section } from \"@krizaka/ui/page\";\nimport type { LinkComponent } from \"@krizaka/ui/page-hero\";\nimport { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\n\nexport interface ProductReason {\n /** A stable key (the card's anchor). */\n id: string;\n /** Its name. */\n title: React.ReactNode;\n /** The trap elsewhere, in one line. */\n trap: React.ReactNode;\n /** The signature icon. */\n icon?: React.ReactNode;\n /** The bird in the corner (whose rule it is). */\n mark?: React.ReactNode;\n /** Where the long version lives (a page) — or nothing, and the card stays its face. */\n href?: string;\n}\n\nexport type ProductPageProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The product's brand (`orazaka`, `orochia`…): the page wears `.brand-<id>`. */\n brand?: string;\n /** The product's mark and name, above the title. */\n mark?: React.ReactNode;\n /** The promise: the page's `h1`. */\n title: React.ReactNode;\n /** One or two sentences under it. */\n lead?: React.ReactNode;\n /** Facts under the lead (open source, a law it keeps). */\n facts?: readonly Fact[];\n /** The hero's actions. */\n actions?: React.ReactNode;\n /** The product alive, in a window beside the words. */\n visual?: React.ReactNode;\n /** The window's caption. */\n visualLabel?: React.ReactNode;\n /** The reasons' section heading. */\n reasonsHeading: { eyebrow?: React.ReactNode; title: React.ReactNode; lead?: React.ReactNode };\n /** The words of the cards: the trap's label (read, not shown) and the way in. */\n reasonLabels: { trap: string; more: React.ReactNode };\n /** The traps it removes. */\n reasons: readonly ProductReason[];\n /** The decisions' section: heading, decisions and their four labels. */\n decisions?: { eyebrow?: React.ReactNode; title: React.ReactNode; items: readonly Decision[]; labels: { chose: React.ReactNode; refused: React.ReactNode; because: React.ReactNode; cost: React.ReactNode } };\n /** The promise a bird keeps, under the decisions. */\n promise?: { bird: MascotBird; label: React.ReactNode; text: React.ReactNode };\n /** More sections between the decisions and the closing call (the tour, the platform, a comparison). */\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 product's overview: split hero, traps as compact cards, decisions with their cost, the bird's promise, closing call. */\nexport function ProductPage({ brand, mark, title, lead, facts, actions, visual, visualLabel, reasonsHeading, reasonLabels, reasons, decisions, promise, closing, linkAs, className, children, ...props }: ProductPageProps) {\n return (\n <div className={cn(brand && \"brand-\" + brand, className)} {...props}>\n <SectionBackdrop as=\"header\" grid className=\"kz-hero\">\n <Page>\n <div className={visual ? \"kz-tpl-split\" : undefined}>\n <div className=\"kz-hero-text\">\n {mark && <p className=\"kz-eyebrow\">{mark}</p>}\n <h1 className=\"kz-hero-title\">{title}</h1>\n {lead && <p className=\"kz-hero-lead\">{lead}</p>}\n {(facts || actions) && (\n <div className=\"kz-hero-extra\">\n {facts && <Facts items={facts} />}\n {actions && <div className=\"kz-tpl-actions\">{actions}</div>}\n </div>\n )}\n </div>\n {visual && (\n <figure className=\"kz-tpl-stage\">\n <div className=\"kz-tpl-stage-bar\" aria-hidden>\n <i />\n <i />\n <i />\n {visualLabel && <span>{visualLabel}</span>}\n </div>\n {visual}\n </figure>\n )}\n </div>\n </Page>\n </SectionBackdrop>\n <Section id=\"why\" eyebrow={reasonsHeading.eyebrow} title={reasonsHeading.title} lead={reasonsHeading.lead} reveal>\n <CardGrid min={260} fit=\"fit\">\n {reasons.map((r) => (\n <ArgumentCard\n key={r.id}\n id={`why-${r.id}`}\n icon={r.icon}\n title={r.title}\n mark={r.mark}\n hook={{ label: reasonLabels.trap, text: r.trap }}\n more={r.href ? { href: r.href, label: reasonLabels.more } : undefined}\n linkAs={linkAs}\n />\n ))}\n </CardGrid>\n </Section>\n {decisions && (\n <Section id=\"decisions\" eyebrow={decisions.eyebrow} title={decisions.title} divider reveal>\n <DecisionList decisions={decisions.items} labels={decisions.labels} />\n {promise && (\n <div className=\"kz-tpl-promise\">\n <MascotQuote variant=\"callout\" bird={promise.bird} mood=\"welcome\" label={promise.label}>\n {promise.text}\n </MascotQuote>\n </div>\n )}\n </Section>\n )}\n {children}\n {closing && (\n <Section spacing=\"sm\" aria-labelledby=\"product-closing\">\n <CtaPanel id=\"product-closing\" title={closing.title} body={closing.body} reveal>\n {closing.actions}\n </CtaPanel>\n </Section>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAGA,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAwB,oBAAoB;AAC5C,SAAS,mBAAmB;AAE5B,SAAoB,OAAO,MAAM,eAAe;AAEhD,SAAS,uBAAuB;AA+DT,cAIP,YAJO;AAPhB,SAAS,YAAY,EAAE,OAAO,MAAM,OAAO,MAAM,OAAO,SAAS,QAAQ,aAAa,gBAAgB,cAAc,SAAS,WAAW,SAAS,SAAS,QAAQ,WAAW,UAAU,GAAG,MAAM,GAAqB;AAC1N,SACE,qBAAC,SAAI,WAAW,GAAG,SAAS,WAAW,OAAO,SAAS,GAAI,GAAG,OAC5D;AAAA,wBAAC,mBAAgB,IAAG,UAAS,MAAI,MAAC,WAAU,WAC1C,8BAAC,QACC,+BAAC,SAAI,WAAW,SAAS,iBAAiB,QACxC;AAAA,2BAAC,SAAI,WAAU,gBACZ;AAAA,gBAAQ,oBAAC,OAAE,WAAU,cAAc,gBAAK;AAAA,QACzC,oBAAC,QAAG,WAAU,iBAAiB,iBAAM;AAAA,QACpC,QAAQ,oBAAC,OAAE,WAAU,gBAAgB,gBAAK;AAAA,SACzC,SAAS,YACT,qBAAC,SAAI,WAAU,iBACZ;AAAA,mBAAS,oBAAC,SAAM,OAAO,OAAO;AAAA,UAC9B,WAAW,oBAAC,SAAI,WAAU,kBAAkB,mBAAQ;AAAA,WACvD;AAAA,SAEJ;AAAA,MACC,UACC,qBAAC,YAAO,WAAU,gBAChB;AAAA,6BAAC,SAAI,WAAU,oBAAmB,eAAW,MAC3C;AAAA,8BAAC,OAAE;AAAA,UACH,oBAAC,OAAE;AAAA,UACH,oBAAC,OAAE;AAAA,UACF,eAAe,oBAAC,UAAM,uBAAY;AAAA,WACrC;AAAA,QACC;AAAA,SACH;AAAA,OAEJ,GACF,GACF;AAAA,IACA,oBAAC,WAAQ,IAAG,OAAM,SAAS,eAAe,SAAS,OAAO,eAAe,OAAO,MAAM,eAAe,MAAM,QAAM,MAC/G,8BAAC,YAAS,KAAK,KAAK,KAAI,OACrB,kBAAQ,IAAI,CAAC,MACZ;AAAA,MAAC;AAAA;AAAA,QAEC,IAAI,OAAO,EAAE,EAAE;AAAA,QACf,MAAM,EAAE;AAAA,QACR,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,QACR,MAAM,EAAE,OAAO,aAAa,MAAM,MAAM,EAAE,KAAK;AAAA,QAC/C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,aAAa,KAAK,IAAI;AAAA,QAC5D;AAAA;AAAA,MAPK,EAAE;AAAA,IAQT,CACD,GACH,GACF;AAAA,IACC,aACC,qBAAC,WAAQ,IAAG,aAAY,SAAS,UAAU,SAAS,OAAO,UAAU,OAAO,SAAO,MAAC,QAAM,MACxF;AAAA,0BAAC,gBAAa,WAAW,UAAU,OAAO,QAAQ,UAAU,QAAQ;AAAA,MACnE,WACC,oBAAC,SAAI,WAAU,kBACb,8BAAC,eAAY,SAAQ,WAAU,MAAM,QAAQ,MAAM,MAAK,WAAU,OAAO,QAAQ,OAC9E,kBAAQ,MACX,GACF;AAAA,OAEJ;AAAA,IAED;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":[]}
@@ -0,0 +1,85 @@
1
+ import * as React from 'react';
2
+ import { S as StoryVariant } from './story-variant-CLn4H5Nt.js';
3
+
4
+ interface ProfileStat {
5
+ /** What it measures (“Response rate”) — passed translated. */
6
+ label: string;
7
+ /** The value, between 0 and `max`. */
8
+ value: number;
9
+ /** The top of the range (default 100). */
10
+ max?: number;
11
+ /** The value in words (“92 %”, “4.8 / 5”); default: the percentage. */
12
+ valueText?: string;
13
+ }
14
+ type ProfileCardProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
15
+ /** The portrait: an image, an avatar, a mark. Decorative — the name carries the meaning. */
16
+ visual: React.ReactNode;
17
+ /** The name (the card's heading). */
18
+ name: React.ReactNode;
19
+ /**
20
+ * The level of the name.
21
+ * @default "h3"
22
+ */
23
+ nameAs?: "h2" | "h3" | "h4" | "p";
24
+ /** A small glyph before the name (decorative): a verified mark, an emblem. */
25
+ icon?: React.ReactNode;
26
+ /** The headline gauge's label (“Profile complete”, arcade “Power”); without it, no headline gauge. */
27
+ statLabel?: string;
28
+ /**
29
+ * The headline gauge's value, 0–100.
30
+ * @default 100
31
+ */
32
+ value?: number;
33
+ /** The headline value in words; default: the percentage. */
34
+ valueText?: string;
35
+ /** What shows as the headline figure instead of `valueText`: a `NumberTicker` that climbs. Decorative. */
36
+ figure?: React.ReactNode;
37
+ /** More gauges under the headline one: two to four, each with its value in words. */
38
+ stats?: readonly ProfileStat[];
39
+ /** One line under the gauges: where they come from, what they do. */
40
+ caption?: React.ReactNode;
41
+ /** Under everything: actions (follow, message), chips. */
42
+ children?: React.ReactNode;
43
+ /**
44
+ * The diameter of the portrait, in pixels.
45
+ * @default 132 (arcade 196)
46
+ */
47
+ visualSize?: number;
48
+ /**
49
+ * `default`: a sober card. `arcade`: the fighter card — the brand's light, a ring and a breathing aura, a skewed gauge.
50
+ * @default "default"
51
+ */
52
+ variant?: StoryVariant;
53
+ /** A brand scope (`orochia` → `.brand-orochia`): the accent and gradient become that brand's. */
54
+ brand?: string;
55
+ };
56
+ /** A profile at a glance: portrait, name, a headline gauge, stats with their values in words, a line and actions. */
57
+ declare function ProfileCard({ visual, name, nameAs: Name, icon, statLabel, value, valueText, figure, stats, caption, children, visualSize, variant, brand, className, style, ...props }: ProfileCardProps): React.JSX.Element;
58
+
59
+ type StatGaugeProps = Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
60
+ /** What it measures (“Profile complete”, “Creator share”) — passed translated; the meter's accessible name. */
61
+ label: string;
62
+ /**
63
+ * The value, between 0 and `max`.
64
+ * @default 100
65
+ */
66
+ value?: number;
67
+ /**
68
+ * The top of the range.
69
+ * @default 100
70
+ */
71
+ max?: number;
72
+ /** The value in words (“12 of 15”); default: the percentage. Read by assistive technology, shown without `figure`. */
73
+ valueText?: string;
74
+ /** What shows as the figure instead of `valueText`: a `NumberTicker` that climbs, a formatted amount. Decorative. */
75
+ figure?: React.ReactNode;
76
+ /**
77
+ * Hides the label and the figure (the bar alone, named for assistive technology).
78
+ * @default false
79
+ */
80
+ hideLabel?: boolean;
81
+ };
82
+ /** A measured strength: label, figure and bar; `role="meter"` with `aria-valuetext`. */
83
+ declare function StatGauge({ label, value, max, valueText, figure, hideLabel, className, style, ...props }: StatGaugeProps): React.JSX.Element;
84
+
85
+ export { ProfileCard, type ProfileCardProps, type ProfileStat, StatGauge, type StatGaugeProps };
@@ -0,0 +1,87 @@
1
+ import {
2
+ brandClass,
3
+ cn,
4
+ storyVariantClass
5
+ } from "./chunk-VCAAHCHL.js";
6
+
7
+ // src/profile-card/stat-gauge.tsx
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ var clamp = (n) => Math.min(1, Math.max(0, n));
10
+ function StatGauge({ label, value = 100, max = 100, valueText, figure, hideLabel, className, style, ...props }) {
11
+ const ratio = clamp(value / (max || 1));
12
+ const words = valueText ?? `${Math.round(ratio * 100)} %`;
13
+ return /* @__PURE__ */ jsxs(
14
+ "div",
15
+ {
16
+ role: "meter",
17
+ "aria-label": label,
18
+ "aria-valuemin": 0,
19
+ "aria-valuemax": 100,
20
+ "aria-valuenow": Math.round(ratio * 100),
21
+ "aria-valuetext": words,
22
+ className: cn("kzs-stat", className),
23
+ style: { "--kzs-ratio": ratio, ...style },
24
+ ...props,
25
+ children: [
26
+ !hideLabel && /* @__PURE__ */ jsxs("span", { className: "kzs-stat-head", "aria-hidden": true, children: [
27
+ /* @__PURE__ */ jsx("span", { className: "kzs-stat-label", children: label }),
28
+ /* @__PURE__ */ jsx("span", { className: "kzs-stat-value", children: figure ?? words })
29
+ ] }),
30
+ /* @__PURE__ */ jsx("span", { className: "kzs-bar", "aria-hidden": true, children: /* @__PURE__ */ jsx("span", { className: "kzs-bar-fill" }) })
31
+ ]
32
+ }
33
+ );
34
+ }
35
+
36
+ // src/profile-card/profile-card.tsx
37
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
38
+ function ProfileCard({
39
+ visual,
40
+ name,
41
+ nameAs: Name = "h3",
42
+ icon,
43
+ statLabel,
44
+ value = 100,
45
+ valueText,
46
+ figure,
47
+ stats,
48
+ caption,
49
+ children,
50
+ visualSize,
51
+ variant,
52
+ brand,
53
+ className,
54
+ style,
55
+ ...props
56
+ }) {
57
+ return /* @__PURE__ */ jsxs2(
58
+ "article",
59
+ {
60
+ className: cn("kzs-profile", storyVariantClass(variant), brandClass(brand), className),
61
+ style: visualSize ? { "--kzs-disc": `${visualSize}px`, ...style } : style,
62
+ ...props,
63
+ children: [
64
+ /* @__PURE__ */ jsx2("span", { className: "kzs-texture", "aria-hidden": true }),
65
+ /* @__PURE__ */ jsxs2("div", { className: "kzs-profile-disc", "aria-hidden": true, children: [
66
+ /* @__PURE__ */ jsx2("span", { className: "kzs-profile-ring" }),
67
+ /* @__PURE__ */ jsx2("span", { className: "kzs-profile-aura kzs-loop" }),
68
+ /* @__PURE__ */ jsx2("span", { className: "kzs-profile-flash" }),
69
+ /* @__PURE__ */ jsx2("span", { className: "kzs-profile-visual", children: visual })
70
+ ] }),
71
+ /* @__PURE__ */ jsxs2(Name, { className: "kzs-profile-name", children: [
72
+ icon && /* @__PURE__ */ jsx2("span", { "aria-hidden": true, children: icon }),
73
+ name
74
+ ] }),
75
+ statLabel && /* @__PURE__ */ jsx2(StatGauge, { label: statLabel, value, valueText, figure }),
76
+ stats && stats.length > 0 && /* @__PURE__ */ jsx2("ul", { className: "kzs-profile-stats", children: stats.map((s) => /* @__PURE__ */ jsx2("li", { children: /* @__PURE__ */ jsx2(StatGauge, { label: s.label, value: s.value, max: s.max, valueText: s.valueText }) }, s.label)) }),
77
+ caption && /* @__PURE__ */ jsx2("p", { className: "kzs-profile-caption", children: caption }),
78
+ children && /* @__PURE__ */ jsx2("div", { className: "kzs-profile-extra", children })
79
+ ]
80
+ }
81
+ );
82
+ }
83
+ export {
84
+ ProfileCard,
85
+ StatGauge
86
+ };
87
+ //# sourceMappingURL=profile-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/profile-card/stat-gauge.tsx","../src/profile-card/profile-card.tsx"],"sourcesContent":["// Server-safe. One measured strength: a label, its figure, a bar (story.css) — the gauge of a ProfileCard, also usable\n// alone (in a ChoiceGrid tile, a list). A `meter` with its value in words.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\n\nexport type StatGaugeProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> & {\n /** What it measures (“Profile complete”, “Creator share”) — passed translated; the meter's accessible name. */\n label: string;\n /**\n * The value, between 0 and `max`.\n * @default 100\n */\n value?: number;\n /**\n * The top of the range.\n * @default 100\n */\n max?: number;\n /** The value in words (“12 of 15”); default: the percentage. Read by assistive technology, shown without `figure`. */\n valueText?: string;\n /** What shows as the figure instead of `valueText`: a `NumberTicker` that climbs, a formatted amount. Decorative. */\n figure?: React.ReactNode;\n /**\n * Hides the label and the figure (the bar alone, named for assistive technology).\n * @default false\n */\n hideLabel?: boolean;\n};\n\nconst clamp = (n: number) => Math.min(1, Math.max(0, n));\n\n/** A measured strength: label, figure and bar; `role=\"meter\"` with `aria-valuetext`. */\nexport function StatGauge({ label, value = 100, max = 100, valueText, figure, hideLabel, className, style, ...props }: StatGaugeProps) {\n const ratio = clamp(value / (max || 1));\n const words = valueText ?? `${Math.round(ratio * 100)} %`;\n return (\n <div\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(ratio * 100)}\n aria-valuetext={words}\n className={cn(\"kzs-stat\", className)}\n style={{ \"--kzs-ratio\": ratio, ...style } as React.CSSProperties}\n {...props}\n >\n {!hideLabel && (\n <span className=\"kzs-stat-head\" aria-hidden>\n <span className=\"kzs-stat-label\">{label}</span>\n <span className=\"kzs-stat-value\">{figure ?? words}</span>\n </span>\n )}\n <span className=\"kzs-bar\" aria-hidden>\n <span className=\"kzs-bar-fill\" />\n </span>\n </div>\n );\n}\n","// Server-safe. A profile at a glance (story.css): a portrait, a name, one headline gauge, a few stats, a line — a creator,\n// a match, a plan, a team member. In a `Scene` of a `ScrollStage` the card arrives and its gauges fill, once.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport { brandClass, type StoryVariant, storyVariantClass } from \"../story-variant\";\nimport { StatGauge } from \"./stat-gauge\";\n\nexport interface ProfileStat {\n /** What it measures (“Response rate”) — passed translated. */\n label: string;\n /** The value, between 0 and `max`. */\n value: number;\n /** The top of the range (default 100). */\n max?: number;\n /** The value in words (“92 %”, “4.8 / 5”); default: the percentage. */\n valueText?: string;\n}\n\nexport type ProfileCardProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The portrait: an image, an avatar, a mark. Decorative — the name carries the meaning. */\n visual: React.ReactNode;\n /** The name (the card's heading). */\n name: React.ReactNode;\n /**\n * The level of the name.\n * @default \"h3\"\n */\n nameAs?: \"h2\" | \"h3\" | \"h4\" | \"p\";\n /** A small glyph before the name (decorative): a verified mark, an emblem. */\n icon?: React.ReactNode;\n /** The headline gauge's label (“Profile complete”, arcade “Power”); without it, no headline gauge. */\n statLabel?: string;\n /**\n * The headline gauge's value, 0–100.\n * @default 100\n */\n value?: number;\n /** The headline value in words; default: the percentage. */\n valueText?: string;\n /** What shows as the headline figure instead of `valueText`: a `NumberTicker` that climbs. Decorative. */\n figure?: React.ReactNode;\n /** More gauges under the headline one: two to four, each with its value in words. */\n stats?: readonly ProfileStat[];\n /** One line under the gauges: where they come from, what they do. */\n caption?: React.ReactNode;\n /** Under everything: actions (follow, message), chips. */\n children?: React.ReactNode;\n /**\n * The diameter of the portrait, in pixels.\n * @default 132 (arcade 196)\n */\n visualSize?: number;\n /**\n * `default`: a sober card. `arcade`: the fighter card — the brand's light, a ring and a breathing aura, a skewed gauge.\n * @default \"default\"\n */\n variant?: StoryVariant;\n /** A brand scope (`orochia` → `.brand-orochia`): the accent and gradient become that brand's. */\n brand?: string;\n};\n\n/** A profile at a glance: portrait, name, a headline gauge, stats with their values in words, a line and actions. */\nexport function ProfileCard({\n visual,\n name,\n nameAs: Name = \"h3\",\n icon,\n statLabel,\n value = 100,\n valueText,\n figure,\n stats,\n caption,\n children,\n visualSize,\n variant,\n brand,\n className,\n style,\n ...props\n}: ProfileCardProps) {\n return (\n <article\n className={cn(\"kzs-profile\", storyVariantClass(variant), brandClass(brand), className)}\n style={visualSize ? ({ \"--kzs-disc\": `${visualSize}px`, ...style } as React.CSSProperties) : style}\n {...props}\n >\n <span className=\"kzs-texture\" aria-hidden />\n <div className=\"kzs-profile-disc\" aria-hidden>\n <span className=\"kzs-profile-ring\" />\n <span className=\"kzs-profile-aura kzs-loop\" />\n <span className=\"kzs-profile-flash\" />\n <span className=\"kzs-profile-visual\">{visual}</span>\n </div>\n <Name className=\"kzs-profile-name\">\n {icon && <span aria-hidden>{icon}</span>}\n {name}\n </Name>\n {statLabel && <StatGauge label={statLabel} value={value} valueText={valueText} figure={figure} />}\n {stats && stats.length > 0 && (\n <ul className=\"kzs-profile-stats\">\n {stats.map((s) => (\n <li key={s.label}>\n <StatGauge label={s.label} value={s.value} max={s.max} valueText={s.valueText} />\n </li>\n ))}\n </ul>\n )}\n {caption && <p className=\"kzs-profile-caption\">{caption}</p>}\n {children && <div className=\"kzs-profile-extra\">{children}</div>}\n </article>\n );\n}\n"],"mappings":";;;;;;;AAiDQ,SACE,KADF;AAnBR,IAAM,QAAQ,CAAC,MAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAGhD,SAAS,UAAU,EAAE,OAAO,QAAQ,KAAK,MAAM,KAAK,WAAW,QAAQ,WAAW,WAAW,OAAO,GAAG,MAAM,GAAmB;AACrI,QAAM,QAAQ,MAAM,SAAS,OAAO,EAAE;AACtC,QAAM,QAAQ,aAAa,GAAG,KAAK,MAAM,QAAQ,GAAG,CAAC;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe,KAAK,MAAM,QAAQ,GAAG;AAAA,MACrC,kBAAgB;AAAA,MAChB,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,OAAO,EAAE,eAAe,OAAO,GAAG,MAAM;AAAA,MACvC,GAAG;AAAA,MAEH;AAAA,SAAC,aACA,qBAAC,UAAK,WAAU,iBAAgB,eAAW,MACzC;AAAA,8BAAC,UAAK,WAAU,kBAAkB,iBAAM;AAAA,UACxC,oBAAC,UAAK,WAAU,kBAAkB,oBAAU,OAAM;AAAA,WACpD;AAAA,QAEF,oBAAC,UAAK,WAAU,WAAU,eAAW,MACnC,8BAAC,UAAK,WAAU,gBAAe,GACjC;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC6BM,gBAAAA,MACA,QAAAC,aADA;AAzBC,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,QAAQ,OAAO;AAAA,EACf;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,eAAe,kBAAkB,OAAO,GAAG,WAAW,KAAK,GAAG,SAAS;AAAA,MACrF,OAAO,aAAc,EAAE,cAAc,GAAG,UAAU,MAAM,GAAG,MAAM,IAA4B;AAAA,MAC5F,GAAG;AAAA,MAEJ;AAAA,wBAAAD,KAAC,UAAK,WAAU,eAAc,eAAW,MAAC;AAAA,QAC1C,gBAAAC,MAAC,SAAI,WAAU,oBAAmB,eAAW,MAC3C;AAAA,0BAAAD,KAAC,UAAK,WAAU,oBAAmB;AAAA,UACnC,gBAAAA,KAAC,UAAK,WAAU,6BAA4B;AAAA,UAC5C,gBAAAA,KAAC,UAAK,WAAU,qBAAoB;AAAA,UACpC,gBAAAA,KAAC,UAAK,WAAU,sBAAsB,kBAAO;AAAA,WAC/C;AAAA,QACA,gBAAAC,MAAC,QAAK,WAAU,oBACb;AAAA,kBAAQ,gBAAAD,KAAC,UAAK,eAAW,MAAE,gBAAK;AAAA,UAChC;AAAA,WACH;AAAA,QACC,aAAa,gBAAAA,KAAC,aAAU,OAAO,WAAW,OAAc,WAAsB,QAAgB;AAAA,QAC9F,SAAS,MAAM,SAAS,KACvB,gBAAAA,KAAC,QAAG,WAAU,qBACX,gBAAM,IAAI,CAAC,MACV,gBAAAA,KAAC,QACC,0BAAAA,KAAC,aAAU,OAAO,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK,EAAE,KAAK,WAAW,EAAE,WAAW,KADxE,EAAE,KAEX,CACD,GACH;AAAA,QAED,WAAW,gBAAAA,KAAC,OAAE,WAAU,uBAAuB,mBAAQ;AAAA,QACvD,YAAY,gBAAAA,KAAC,SAAI,WAAU,qBAAqB,UAAS;AAAA;AAAA;AAAA,EAC5D;AAEJ;","names":["jsx","jsxs"]}
@@ -0,0 +1,28 @@
1
+ import * as React from 'react';
2
+ import { S as StoryVariant } from './story-variant-CLn4H5Nt.js';
3
+
4
+ type PromiseCardProps = Omit<React.HTMLAttributes<HTMLDivElement>, "title"> & {
5
+ /** What kind of promise (“Our promise”, “Shortcut”, arcade “Special move”). */
6
+ label: React.ReactNode;
7
+ /** The promise itself, in a few words. */
8
+ promise: React.ReactNode;
9
+ /** The keys that call it, in order (`["⌘", "K"]`); in a stage they light one by one before the promise lands. Decorative. */
10
+ keys?: readonly string[];
11
+ /** Who carries it: a bird of the flock (`Mascot`, 48 px), an avatar. Decorative. */
12
+ bearer?: React.ReactNode;
13
+ /** Above the bearer's name (“In the corner”, “Kept by”). */
14
+ bearerLabel?: React.ReactNode;
15
+ /** The bearer's name and role. */
16
+ bearerName?: React.ReactNode;
17
+ /**
18
+ * `default`: a calm card with its keys as key-caps. `arcade`: the combo card — the keys pressed one by one, a flash.
19
+ * @default "default"
20
+ */
21
+ variant?: StoryVariant;
22
+ /** A brand scope (`orazaka` → `.brand-orazaka`). */
23
+ brand?: string;
24
+ };
25
+ /** A promise, the keys that call it and who carries it. */
26
+ declare function PromiseCard({ label, promise, keys, bearer, bearerLabel, bearerName, variant, brand, className, ...props }: PromiseCardProps): React.JSX.Element;
27
+
28
+ export { PromiseCard, type PromiseCardProps };
@@ -0,0 +1,29 @@
1
+ import {
2
+ brandClass,
3
+ cn,
4
+ storyVariantClass
5
+ } from "./chunk-VCAAHCHL.js";
6
+
7
+ // src/promise-card/promise-card.tsx
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function PromiseCard({ label, promise, keys, bearer, bearerLabel, bearerName, variant, brand, className, ...props }) {
10
+ return /* @__PURE__ */ jsxs("div", { className: cn("kzs-promise", storyVariantClass(variant), brandClass(brand), className), ...props, children: [
11
+ /* @__PURE__ */ jsx("span", { className: "kzs-promise-flash", "aria-hidden": true }),
12
+ /* @__PURE__ */ jsxs("div", { className: "kzs-promise-head", children: [
13
+ /* @__PURE__ */ jsx("span", { className: "kzs-promise-label", children: label }),
14
+ keys && keys.length > 0 && /* @__PURE__ */ jsx("span", { className: "kzs-promise-keys", "aria-hidden": true, children: keys.map((k, i) => /* @__PURE__ */ jsx("kbd", { className: "kzs-key", style: { "--k": i }, children: k }, i)) })
15
+ ] }),
16
+ /* @__PURE__ */ jsx("p", { className: "kzs-promise-text", children: promise }),
17
+ (bearer || bearerName) && /* @__PURE__ */ jsxs("div", { className: "kzs-promise-bearer", children: [
18
+ bearer && /* @__PURE__ */ jsx("span", { className: "kzs-promise-bird", "aria-hidden": true, children: bearer }),
19
+ /* @__PURE__ */ jsxs("span", { className: "kzs-promise-who", children: [
20
+ bearerLabel && /* @__PURE__ */ jsx("span", { className: "kzs-promise-bearer-label", children: bearerLabel }),
21
+ bearerName && /* @__PURE__ */ jsx("span", { className: "kzs-promise-name", children: bearerName })
22
+ ] })
23
+ ] })
24
+ ] });
25
+ }
26
+ export {
27
+ PromiseCard
28
+ };
29
+ //# sourceMappingURL=promise-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/promise-card/promise-card.tsx"],"sourcesContent":["// Server-safe. A promise, the keys that call it, and who carries it (story.css): a product's guarantee, a shortcut and\n// what it does, a rule of the house — “Your data never leaves home”, called by ← ↙ ↓ ↘ → K, carried by the owl.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport { brandClass, type StoryVariant, storyVariantClass } from \"../story-variant\";\n\nexport type PromiseCardProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> & {\n /** What kind of promise (“Our promise”, “Shortcut”, arcade “Special move”). */\n label: React.ReactNode;\n /** The promise itself, in a few words. */\n promise: React.ReactNode;\n /** The keys that call it, in order (`[\"⌘\", \"K\"]`); in a stage they light one by one before the promise lands. Decorative. */\n keys?: readonly string[];\n /** Who carries it: a bird of the flock (`Mascot`, 48 px), an avatar. Decorative. */\n bearer?: React.ReactNode;\n /** Above the bearer's name (“In the corner”, “Kept by”). */\n bearerLabel?: React.ReactNode;\n /** The bearer's name and role. */\n bearerName?: React.ReactNode;\n /**\n * `default`: a calm card with its keys as key-caps. `arcade`: the combo card — the keys pressed one by one, a flash.\n * @default \"default\"\n */\n variant?: StoryVariant;\n /** A brand scope (`orazaka` → `.brand-orazaka`). */\n brand?: string;\n};\n\n/** A promise, the keys that call it and who carries it. */\nexport function PromiseCard({ label, promise, keys, bearer, bearerLabel, bearerName, variant, brand, className, ...props }: PromiseCardProps) {\n return (\n <div className={cn(\"kzs-promise\", storyVariantClass(variant), brandClass(brand), className)} {...props}>\n <span className=\"kzs-promise-flash\" aria-hidden />\n <div className=\"kzs-promise-head\">\n <span className=\"kzs-promise-label\">{label}</span>\n {keys && keys.length > 0 && (\n <span className=\"kzs-promise-keys\" aria-hidden>\n {keys.map((k, i) => (\n <kbd key={i} className=\"kzs-key\" style={{ \"--k\": i } as React.CSSProperties}>\n {k}\n </kbd>\n ))}\n </span>\n )}\n </div>\n <p className=\"kzs-promise-text\">{promise}</p>\n {(bearer || bearerName) && (\n <div className=\"kzs-promise-bearer\">\n {bearer && (\n <span className=\"kzs-promise-bird\" aria-hidden>\n {bearer}\n </span>\n )}\n <span className=\"kzs-promise-who\">\n {bearerLabel && <span className=\"kzs-promise-bearer-label\">{bearerLabel}</span>}\n {bearerName && <span className=\"kzs-promise-name\">{bearerName}</span>}\n </span>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAiCM,cACA,YADA;AAHC,SAAS,YAAY,EAAE,OAAO,SAAS,MAAM,QAAQ,aAAa,YAAY,SAAS,OAAO,WAAW,GAAG,MAAM,GAAqB;AAC5I,SACE,qBAAC,SAAI,WAAW,GAAG,eAAe,kBAAkB,OAAO,GAAG,WAAW,KAAK,GAAG,SAAS,GAAI,GAAG,OAC/F;AAAA,wBAAC,UAAK,WAAU,qBAAoB,eAAW,MAAC;AAAA,IAChD,qBAAC,SAAI,WAAU,oBACb;AAAA,0BAAC,UAAK,WAAU,qBAAqB,iBAAM;AAAA,MAC1C,QAAQ,KAAK,SAAS,KACrB,oBAAC,UAAK,WAAU,oBAAmB,eAAW,MAC3C,eAAK,IAAI,CAAC,GAAG,MACZ,oBAAC,SAAY,WAAU,WAAU,OAAO,EAAE,OAAO,EAAE,GAChD,eADO,CAEV,CACD,GACH;AAAA,OAEJ;AAAA,IACA,oBAAC,OAAE,WAAU,oBAAoB,mBAAQ;AAAA,KACvC,UAAU,eACV,qBAAC,SAAI,WAAU,sBACZ;AAAA,gBACC,oBAAC,UAAK,WAAU,oBAAmB,eAAW,MAC3C,kBACH;AAAA,MAEF,qBAAC,UAAK,WAAU,mBACb;AAAA,uBAAe,oBAAC,UAAK,WAAU,4BAA4B,uBAAY;AAAA,QACvE,cAAc,oBAAC,UAAK,WAAU,oBAAoB,sBAAW;AAAA,SAChE;AAAA,OACF;AAAA,KAEJ;AAEJ;","names":[]}