@krizaka/ui 2.0.0-beta.5 → 2.0.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 (688) hide show
  1. package/README.md +44 -28
  2. package/dist/{button-D5aSsmxX.d.ts → button-Cgfkg_3y.d.ts} +5 -1
  3. package/dist/button.d.ts +5 -1
  4. package/dist/button.js +4 -2
  5. package/dist/button.js.map +1 -1
  6. package/dist/card.d.ts +7 -1
  7. package/dist/card.js +2 -2
  8. package/dist/card.js.map +1 -1
  9. package/dist/{chunk-IUGBKMJC.js → chunk-FHYZSO2S.js} +2 -2
  10. package/dist/{chunk-6DJ6SQY3.js → chunk-PESA2R4U.js} +5 -3
  11. package/dist/chunk-PESA2R4U.js.map +1 -0
  12. package/dist/command.d.ts +11 -2
  13. package/dist/command.js +17 -6
  14. package/dist/command.js.map +1 -1
  15. package/dist/confirm-button.d.ts +1 -1
  16. package/dist/confirm-button.js +1 -1
  17. package/dist/countdown.d.ts +7 -6
  18. package/dist/countdown.js +12 -8
  19. package/dist/countdown.js.map +1 -1
  20. package/dist/dialog.js +2 -2
  21. package/dist/dropdown-menu.js +3 -3
  22. package/dist/dropdown-menu.js.map +1 -1
  23. package/dist/field.js +2 -2
  24. package/dist/field.js.map +1 -1
  25. package/dist/native.d.ts +56 -6
  26. package/dist/native.js +129 -85
  27. package/dist/native.js.map +1 -1
  28. package/dist/theme.d.ts +1 -1
  29. package/dist/theme.js +1 -1
  30. package/package.json +11 -11
  31. package/registry/alert.json +141 -3
  32. package/registry/avatar.json +314 -3
  33. package/registry/badge.json +233 -3
  34. package/registry/button.json +522 -8
  35. package/registry/card.json +427 -4
  36. package/registry/checkbox.json +127 -3
  37. package/registry/chip.json +394 -3
  38. package/registry/cn.json +51 -3
  39. package/registry/command.json +246 -5
  40. package/registry/confirm-button.json +172 -5
  41. package/registry/countdown.json +318 -7
  42. package/registry/dialog.json +310 -3
  43. package/registry/dropdown-menu.json +117 -4
  44. package/registry/empty-state.json +170 -3
  45. package/registry/examples/alert/danger.d.ts +4 -0
  46. package/registry/examples/alert/danger.js +22 -0
  47. package/registry/examples/alert/danger.tsx +25 -0
  48. package/registry/examples/alert/info.d.ts +4 -0
  49. package/registry/{demos/alert.js → examples/alert/info.js} +3 -3
  50. package/registry/{demos/alert.tsx → examples/alert/info.tsx} +1 -1
  51. package/registry/examples/alert/success.d.ts +4 -0
  52. package/registry/examples/alert/success.js +12 -0
  53. package/registry/examples/alert/success.tsx +15 -0
  54. package/registry/examples/alert/title-only.d.ts +4 -0
  55. package/registry/examples/alert/title-only.js +11 -0
  56. package/registry/examples/alert/title-only.tsx +5 -0
  57. package/registry/examples/alert/warning.d.ts +4 -0
  58. package/registry/examples/alert/warning.js +13 -0
  59. package/registry/examples/alert/warning.tsx +17 -0
  60. package/registry/examples/avatar/fallback.d.ts +4 -0
  61. package/registry/examples/avatar/fallback.js +11 -0
  62. package/registry/examples/avatar/fallback.tsx +6 -0
  63. package/registry/examples/avatar/group.d.ts +4 -0
  64. package/registry/examples/avatar/group.js +20 -0
  65. package/registry/examples/avatar/group.tsx +21 -0
  66. package/registry/examples/avatar/native/group.d.ts +4 -0
  67. package/registry/examples/avatar/native/group.dark.png +0 -0
  68. package/registry/examples/avatar/native/group.js +17 -0
  69. package/registry/examples/avatar/native/group.light.png +0 -0
  70. package/registry/examples/avatar/native/group.tsx +13 -0
  71. package/registry/examples/avatar/native/sizes.d.ts +4 -0
  72. package/registry/examples/avatar/native/sizes.dark.png +0 -0
  73. package/registry/examples/avatar/native/sizes.js +18 -0
  74. package/registry/examples/avatar/native/sizes.light.png +0 -0
  75. package/registry/examples/avatar/native/sizes.tsx +15 -0
  76. package/registry/examples/avatar/sizes.d.ts +4 -0
  77. package/registry/examples/avatar/sizes.js +17 -0
  78. package/registry/examples/avatar/sizes.tsx +13 -0
  79. package/registry/examples/avatar/with-image.d.ts +4 -0
  80. package/registry/{demos/avatar.js → examples/avatar/with-image.js} +3 -3
  81. package/registry/{demos/avatar.tsx → examples/avatar/with-image.tsx} +1 -1
  82. package/registry/examples/badge/accent.d.ts +4 -0
  83. package/registry/examples/badge/accent.js +11 -0
  84. package/registry/examples/badge/accent.tsx +9 -0
  85. package/registry/examples/badge/danger.d.ts +4 -0
  86. package/registry/examples/badge/danger.js +11 -0
  87. package/registry/examples/badge/danger.tsx +9 -0
  88. package/registry/examples/badge/medium.d.ts +4 -0
  89. package/registry/examples/badge/medium.js +11 -0
  90. package/registry/examples/badge/medium.tsx +9 -0
  91. package/registry/examples/badge/native/dot.d.ts +4 -0
  92. package/registry/examples/badge/native/dot.dark.png +0 -0
  93. package/registry/examples/badge/native/dot.js +15 -0
  94. package/registry/examples/badge/native/dot.light.png +0 -0
  95. package/registry/examples/badge/native/dot.tsx +16 -0
  96. package/registry/examples/badge/native/scrim.d.ts +4 -0
  97. package/registry/examples/badge/native/scrim.dark.png +0 -0
  98. package/registry/examples/badge/native/scrim.js +13 -0
  99. package/registry/examples/badge/native/scrim.light.png +0 -0
  100. package/registry/examples/badge/native/scrim.tsx +14 -0
  101. package/registry/examples/badge/native/tones.d.ts +4 -0
  102. package/registry/examples/badge/native/tones.dark.png +0 -0
  103. package/registry/examples/badge/native/tones.js +18 -0
  104. package/registry/examples/badge/native/tones.light.png +0 -0
  105. package/registry/examples/badge/native/tones.tsx +14 -0
  106. package/registry/examples/badge/neutral.d.ts +4 -0
  107. package/registry/{demos/badge.js → examples/badge/neutral.js} +3 -3
  108. package/registry/{demos/badge.tsx → examples/badge/neutral.tsx} +1 -1
  109. package/registry/examples/badge/scrim.d.ts +4 -0
  110. package/registry/examples/badge/scrim.js +11 -0
  111. package/registry/examples/badge/scrim.tsx +10 -0
  112. package/registry/examples/badge/success.d.ts +4 -0
  113. package/registry/examples/badge/success.js +11 -0
  114. package/registry/examples/badge/success.tsx +9 -0
  115. package/registry/examples/badge/warning.d.ts +4 -0
  116. package/registry/examples/badge/warning.js +11 -0
  117. package/registry/examples/badge/warning.tsx +9 -0
  118. package/registry/examples/button/as-child-link.d.ts +4 -0
  119. package/registry/examples/button/as-child-link.js +11 -0
  120. package/registry/examples/button/as-child-link.tsx +10 -0
  121. package/registry/examples/button/danger.d.ts +4 -0
  122. package/registry/examples/button/danger.js +11 -0
  123. package/registry/examples/button/danger.tsx +5 -0
  124. package/registry/examples/button/disabled.d.ts +4 -0
  125. package/registry/examples/button/disabled.js +11 -0
  126. package/registry/examples/button/disabled.tsx +9 -0
  127. package/registry/examples/button/ghost.d.ts +4 -0
  128. package/registry/examples/button/ghost.js +11 -0
  129. package/registry/examples/button/ghost.tsx +5 -0
  130. package/registry/examples/button/gradient.d.ts +4 -0
  131. package/registry/examples/button/gradient.js +11 -0
  132. package/registry/examples/button/gradient.tsx +5 -0
  133. package/registry/examples/button/icon.d.ts +4 -0
  134. package/registry/examples/button/icon.js +14 -0
  135. package/registry/examples/button/icon.tsx +18 -0
  136. package/registry/examples/button/loading.d.ts +4 -0
  137. package/registry/examples/button/loading.js +11 -0
  138. package/registry/examples/button/loading.tsx +10 -0
  139. package/registry/examples/button/native/danger.d.ts +4 -0
  140. package/registry/examples/button/native/danger.dark.png +0 -0
  141. package/registry/examples/button/native/danger.js +12 -0
  142. package/registry/examples/button/native/danger.light.png +0 -0
  143. package/registry/examples/button/native/danger.tsx +5 -0
  144. package/registry/examples/button/native/disabled.d.ts +4 -0
  145. package/registry/examples/button/native/disabled.dark.png +0 -0
  146. package/registry/examples/button/native/disabled.js +11 -0
  147. package/registry/examples/button/native/disabled.light.png +0 -0
  148. package/registry/examples/button/native/disabled.tsx +5 -0
  149. package/registry/examples/button/native/ghost.d.ts +4 -0
  150. package/registry/examples/button/native/ghost.dark.png +0 -0
  151. package/registry/examples/button/native/ghost.js +12 -0
  152. package/registry/examples/button/native/ghost.light.png +0 -0
  153. package/registry/examples/button/native/ghost.tsx +5 -0
  154. package/registry/examples/button/native/gradient.d.ts +4 -0
  155. package/registry/examples/button/native/gradient.dark.png +0 -0
  156. package/registry/examples/button/native/gradient.js +12 -0
  157. package/registry/examples/button/native/gradient.light.png +0 -0
  158. package/registry/examples/button/native/gradient.tsx +5 -0
  159. package/registry/examples/button/native/icon-only.d.ts +4 -0
  160. package/registry/examples/button/native/icon-only.dark.png +0 -0
  161. package/registry/examples/button/native/icon-only.js +19 -0
  162. package/registry/examples/button/native/icon-only.light.png +0 -0
  163. package/registry/examples/button/native/icon-only.tsx +21 -0
  164. package/registry/examples/button/native/icon.d.ts +4 -0
  165. package/registry/examples/button/native/icon.dark.png +0 -0
  166. package/registry/examples/button/native/icon.js +16 -0
  167. package/registry/examples/button/native/icon.light.png +0 -0
  168. package/registry/examples/button/native/icon.tsx +15 -0
  169. package/registry/examples/button/native/loading.d.ts +4 -0
  170. package/registry/examples/button/native/loading.dark.png +0 -0
  171. package/registry/examples/button/native/loading.js +11 -0
  172. package/registry/examples/button/native/loading.light.png +0 -0
  173. package/registry/examples/button/native/loading.tsx +6 -0
  174. package/registry/examples/button/native/outline.d.ts +4 -0
  175. package/registry/examples/button/native/outline.dark.png +0 -0
  176. package/registry/examples/button/native/outline.js +12 -0
  177. package/registry/examples/button/native/outline.light.png +0 -0
  178. package/registry/examples/button/native/outline.tsx +5 -0
  179. package/registry/examples/button/native/primary.d.ts +4 -0
  180. package/registry/examples/button/native/primary.dark.png +0 -0
  181. package/registry/examples/button/native/primary.js +12 -0
  182. package/registry/examples/button/native/primary.light.png +0 -0
  183. package/registry/examples/button/native/primary.tsx +5 -0
  184. package/registry/examples/button/native/secondary.d.ts +4 -0
  185. package/registry/examples/button/native/secondary.dark.png +0 -0
  186. package/registry/examples/button/native/secondary.js +12 -0
  187. package/registry/examples/button/native/secondary.light.png +0 -0
  188. package/registry/examples/button/native/secondary.tsx +6 -0
  189. package/registry/examples/button/native/sizes.d.ts +4 -0
  190. package/registry/examples/button/native/sizes.dark.png +0 -0
  191. package/registry/examples/button/native/sizes.js +15 -0
  192. package/registry/examples/button/native/sizes.light.png +0 -0
  193. package/registry/examples/button/native/sizes.tsx +11 -0
  194. package/registry/examples/button/outline.d.ts +4 -0
  195. package/registry/examples/button/outline.js +11 -0
  196. package/registry/examples/button/outline.tsx +5 -0
  197. package/registry/examples/button/pill.d.ts +4 -0
  198. package/registry/examples/button/pill.js +11 -0
  199. package/registry/examples/button/pill.tsx +9 -0
  200. package/registry/examples/button/primary.d.ts +4 -0
  201. package/registry/{demos/button.js → examples/button/primary.js} +3 -3
  202. package/registry/{demos/button.tsx → examples/button/primary.tsx} +1 -1
  203. package/registry/examples/button/secondary.d.ts +4 -0
  204. package/registry/examples/button/secondary.js +11 -0
  205. package/registry/examples/button/secondary.tsx +6 -0
  206. package/registry/examples/button/sizes.d.ts +4 -0
  207. package/registry/examples/button/sizes.js +15 -0
  208. package/registry/examples/button/sizes.tsx +17 -0
  209. package/registry/examples/card/interactive-link.d.ts +4 -0
  210. package/registry/examples/card/interactive-link.js +15 -0
  211. package/registry/examples/card/interactive-link.tsx +16 -0
  212. package/registry/examples/card/media-card.d.ts +4 -0
  213. package/registry/{demos/card.js → examples/card/media-card.js} +3 -3
  214. package/registry/{demos/card.tsx → examples/card/media-card.tsx} +1 -1
  215. package/registry/examples/card/media-fallback.d.ts +4 -0
  216. package/registry/examples/card/media-fallback.js +18 -0
  217. package/registry/examples/card/media-fallback.tsx +22 -0
  218. package/registry/examples/card/native/body.d.ts +4 -0
  219. package/registry/examples/card/native/body.dark.png +0 -0
  220. package/registry/examples/card/native/body.js +15 -0
  221. package/registry/examples/card/native/body.light.png +0 -0
  222. package/registry/examples/card/native/body.tsx +13 -0
  223. package/registry/examples/card/native/default.d.ts +4 -0
  224. package/registry/examples/card/native/default.dark.png +0 -0
  225. package/registry/examples/card/native/default.js +24 -0
  226. package/registry/examples/card/native/default.light.png +0 -0
  227. package/registry/examples/card/native/default.tsx +28 -0
  228. package/registry/examples/card/native/elevated.d.ts +4 -0
  229. package/registry/examples/card/native/elevated.dark.png +0 -0
  230. package/registry/examples/card/native/elevated.js +24 -0
  231. package/registry/examples/card/native/elevated.light.png +0 -0
  232. package/registry/examples/card/native/elevated.tsx +28 -0
  233. package/registry/examples/card/native/pressable.d.ts +4 -0
  234. package/registry/examples/card/native/pressable.dark.png +0 -0
  235. package/registry/examples/card/native/pressable.js +15 -0
  236. package/registry/examples/card/native/pressable.light.png +0 -0
  237. package/registry/examples/card/native/pressable.tsx +13 -0
  238. package/registry/examples/card/reveal-grid.d.ts +4 -0
  239. package/registry/examples/card/reveal-grid.js +28 -0
  240. package/registry/examples/card/reveal-grid.tsx +31 -0
  241. package/registry/examples/card/stat-card.d.ts +4 -0
  242. package/registry/examples/card/stat-card.js +18 -0
  243. package/registry/examples/card/stat-card.tsx +17 -0
  244. package/registry/examples/checkbox/checked.d.ts +4 -0
  245. package/registry/examples/checkbox/checked.js +11 -0
  246. package/registry/examples/checkbox/checked.tsx +5 -0
  247. package/registry/examples/checkbox/disabled.d.ts +4 -0
  248. package/registry/examples/checkbox/disabled.js +14 -0
  249. package/registry/examples/checkbox/disabled.tsx +12 -0
  250. package/registry/examples/checkbox/indeterminate.d.ts +4 -0
  251. package/registry/examples/checkbox/indeterminate.js +11 -0
  252. package/registry/examples/checkbox/indeterminate.tsx +6 -0
  253. package/registry/examples/checkbox/invalid.d.ts +4 -0
  254. package/registry/examples/checkbox/invalid.js +15 -0
  255. package/registry/examples/checkbox/invalid.tsx +14 -0
  256. package/registry/examples/checkbox/unchecked.d.ts +4 -0
  257. package/registry/{demos/checkbox.js → examples/checkbox/unchecked.js} +3 -3
  258. package/registry/{demos/checkbox.tsx → examples/checkbox/unchecked.tsx} +2 -1
  259. package/registry/examples/chip/multiple.d.ts +4 -0
  260. package/registry/examples/chip/multiple.js +16 -0
  261. package/registry/examples/chip/multiple.tsx +12 -0
  262. package/registry/examples/chip/native/multiple.d.ts +4 -0
  263. package/registry/examples/chip/native/multiple.dark.png +0 -0
  264. package/registry/examples/chip/native/multiple.js +18 -0
  265. package/registry/examples/chip/native/multiple.light.png +0 -0
  266. package/registry/examples/chip/native/multiple.tsx +17 -0
  267. package/registry/examples/chip/native/removable.d.ts +4 -0
  268. package/registry/examples/chip/native/removable.dark.png +0 -0
  269. package/registry/examples/chip/native/removable.js +17 -0
  270. package/registry/examples/chip/native/removable.light.png +0 -0
  271. package/registry/examples/chip/native/removable.tsx +15 -0
  272. package/registry/examples/chip/native/single.d.ts +4 -0
  273. package/registry/examples/chip/native/single.dark.png +0 -0
  274. package/registry/examples/chip/native/single.js +15 -0
  275. package/registry/examples/chip/native/single.light.png +0 -0
  276. package/registry/examples/chip/native/single.tsx +11 -0
  277. package/registry/examples/chip/native/toggle.d.ts +4 -0
  278. package/registry/examples/chip/native/toggle.dark.png +0 -0
  279. package/registry/examples/chip/native/toggle.js +17 -0
  280. package/registry/examples/chip/native/toggle.light.png +0 -0
  281. package/registry/examples/chip/native/toggle.tsx +16 -0
  282. package/registry/examples/chip/removable.d.ts +4 -0
  283. package/registry/examples/chip/removable.js +16 -0
  284. package/registry/examples/chip/removable.tsx +15 -0
  285. package/registry/examples/chip/single.d.ts +4 -0
  286. package/registry/examples/chip/single.js +16 -0
  287. package/registry/examples/chip/single.tsx +13 -0
  288. package/registry/examples/chip/small.d.ts +4 -0
  289. package/registry/examples/chip/small.js +16 -0
  290. package/registry/examples/chip/small.tsx +12 -0
  291. package/registry/examples/chip/toggle.d.ts +4 -0
  292. package/registry/{demos/chip.js → examples/chip/toggle.js} +3 -3
  293. package/registry/{demos/chip.tsx → examples/chip/toggle.tsx} +2 -1
  294. package/registry/examples/cn/merge.d.ts +4 -0
  295. package/registry/{demos/cn.js → examples/cn/merge.js} +3 -3
  296. package/registry/{demos/cn.tsx → examples/cn/merge.tsx} +1 -1
  297. package/registry/examples/command/dialog.d.ts +4 -0
  298. package/registry/examples/command/dialog.js +39 -0
  299. package/registry/examples/command/dialog.tsx +35 -0
  300. package/registry/examples/command/inline.d.ts +4 -0
  301. package/registry/{demos/command.js → examples/command/inline.js} +4 -5
  302. package/registry/{demos/command.tsx → examples/command/inline.tsx} +2 -3
  303. package/registry/examples/command/no-results.d.ts +4 -0
  304. package/registry/examples/command/no-results.js +19 -0
  305. package/registry/examples/command/no-results.tsx +20 -0
  306. package/registry/examples/confirm-button/armed.d.ts +4 -0
  307. package/registry/examples/confirm-button/armed.js +12 -0
  308. package/registry/examples/confirm-button/armed.tsx +14 -0
  309. package/registry/examples/confirm-button/idle.d.ts +4 -0
  310. package/registry/{demos/confirm-button.js → examples/confirm-button/idle.js} +3 -3
  311. package/registry/{demos/confirm-button.tsx → examples/confirm-button/idle.tsx} +1 -1
  312. package/registry/examples/confirm-button/with-text.d.ts +4 -0
  313. package/registry/examples/confirm-button/with-text.js +12 -0
  314. package/registry/examples/confirm-button/with-text.tsx +12 -0
  315. package/registry/examples/countdown/days.d.ts +4 -0
  316. package/registry/examples/countdown/days.js +13 -0
  317. package/registry/examples/countdown/days.tsx +10 -0
  318. package/registry/examples/countdown/ended.d.ts +4 -0
  319. package/registry/examples/countdown/ended.js +13 -0
  320. package/registry/examples/countdown/ended.tsx +10 -0
  321. package/registry/examples/countdown/hours.d.ts +4 -0
  322. package/registry/{demos/countdown.js → examples/countdown/hours.js} +3 -3
  323. package/registry/{demos/countdown.tsx → examples/countdown/hours.tsx} +1 -1
  324. package/registry/examples/countdown/native/days.d.ts +4 -0
  325. package/registry/examples/countdown/native/days.dark.png +0 -0
  326. package/registry/examples/countdown/native/days.js +13 -0
  327. package/registry/examples/countdown/native/days.light.png +0 -0
  328. package/registry/examples/countdown/native/days.tsx +7 -0
  329. package/registry/examples/countdown/native/hours.d.ts +4 -0
  330. package/registry/examples/countdown/native/hours.dark.png +0 -0
  331. package/registry/examples/countdown/native/hours.js +13 -0
  332. package/registry/examples/countdown/native/hours.light.png +0 -0
  333. package/registry/examples/countdown/native/hours.tsx +7 -0
  334. package/registry/examples/countdown/native/sizes.d.ts +4 -0
  335. package/registry/examples/countdown/native/sizes.dark.png +0 -0
  336. package/registry/examples/countdown/native/sizes.js +18 -0
  337. package/registry/examples/countdown/native/sizes.light.png +0 -0
  338. package/registry/examples/countdown/native/sizes.tsx +15 -0
  339. package/registry/examples/countdown/native/urgent.d.ts +4 -0
  340. package/registry/examples/countdown/native/urgent.dark.png +0 -0
  341. package/registry/examples/countdown/native/urgent.js +13 -0
  342. package/registry/examples/countdown/native/urgent.light.png +0 -0
  343. package/registry/examples/countdown/native/urgent.tsx +7 -0
  344. package/registry/examples/countdown/native/with-label.d.ts +4 -0
  345. package/registry/examples/countdown/native/with-label.dark.png +0 -0
  346. package/registry/examples/countdown/native/with-label.js +13 -0
  347. package/registry/examples/countdown/native/with-label.light.png +0 -0
  348. package/registry/examples/countdown/native/with-label.tsx +7 -0
  349. package/registry/examples/countdown/sizes.d.ts +4 -0
  350. package/registry/examples/countdown/sizes.js +18 -0
  351. package/registry/examples/countdown/sizes.tsx +17 -0
  352. package/registry/examples/countdown/urgent.d.ts +4 -0
  353. package/registry/examples/countdown/urgent.js +13 -0
  354. package/registry/examples/countdown/urgent.tsx +10 -0
  355. package/registry/examples/countdown/with-label.d.ts +4 -0
  356. package/registry/examples/countdown/with-label.js +13 -0
  357. package/registry/examples/countdown/with-label.tsx +10 -0
  358. package/registry/examples/dialog/alert-destructive.d.ts +4 -0
  359. package/registry/examples/dialog/alert-destructive.js +24 -0
  360. package/registry/examples/dialog/alert-destructive.tsx +20 -0
  361. package/registry/examples/dialog/bottom.d.ts +4 -0
  362. package/registry/examples/dialog/bottom.js +29 -0
  363. package/registry/examples/dialog/bottom.tsx +32 -0
  364. package/registry/examples/dialog/center.d.ts +4 -0
  365. package/registry/{demos/dialog.js → examples/dialog/center.js} +3 -3
  366. package/registry/{demos/dialog.tsx → examples/dialog/center.tsx} +1 -1
  367. package/registry/examples/dialog/gate.d.ts +4 -0
  368. package/registry/examples/dialog/gate.js +24 -0
  369. package/registry/examples/dialog/gate.tsx +27 -0
  370. package/registry/examples/dialog/right.d.ts +4 -0
  371. package/registry/examples/dialog/right.js +29 -0
  372. package/registry/examples/dialog/right.tsx +32 -0
  373. package/registry/examples/dialog/sheet-form.d.ts +4 -0
  374. package/registry/examples/dialog/sheet-form.js +35 -0
  375. package/registry/examples/dialog/sheet-form.tsx +36 -0
  376. package/registry/examples/dropdown-menu/actions.d.ts +4 -0
  377. package/registry/{demos/dropdown-menu.js → examples/dropdown-menu/actions.js} +3 -3
  378. package/registry/{demos/dropdown-menu.tsx → examples/dropdown-menu/actions.tsx} +1 -1
  379. package/registry/examples/empty-state/default.d.ts +4 -0
  380. package/registry/{demos/empty-state.js → examples/empty-state/default.js} +3 -3
  381. package/registry/{demos/empty-state.tsx → examples/empty-state/default.tsx} +1 -1
  382. package/registry/examples/empty-state/native/default.d.ts +4 -0
  383. package/registry/examples/empty-state/native/default.dark.png +0 -0
  384. package/registry/examples/empty-state/native/default.js +25 -0
  385. package/registry/examples/empty-state/native/default.light.png +0 -0
  386. package/registry/examples/empty-state/native/default.tsx +25 -0
  387. package/registry/examples/empty-state/title-only.d.ts +4 -0
  388. package/registry/examples/empty-state/title-only.js +11 -0
  389. package/registry/examples/empty-state/title-only.tsx +5 -0
  390. package/registry/examples/empty-state/with-action.d.ts +4 -0
  391. package/registry/examples/empty-state/with-action.js +24 -0
  392. package/registry/examples/empty-state/with-action.tsx +25 -0
  393. package/registry/examples/field/default.d.ts +4 -0
  394. package/registry/{demos/field.js → examples/field/default.js} +3 -3
  395. package/registry/{demos/field.tsx → examples/field/default.tsx} +1 -1
  396. package/registry/examples/field/disabled.d.ts +4 -0
  397. package/registry/examples/field/disabled.js +14 -0
  398. package/registry/examples/field/disabled.tsx +10 -0
  399. package/registry/examples/field/invalid.d.ts +4 -0
  400. package/registry/examples/field/invalid.js +15 -0
  401. package/registry/examples/field/invalid.tsx +12 -0
  402. package/registry/examples/field/select.d.ts +4 -0
  403. package/registry/examples/field/select.js +18 -0
  404. package/registry/examples/field/select.tsx +15 -0
  405. package/registry/examples/field/textarea.d.ts +4 -0
  406. package/registry/examples/field/textarea.js +14 -0
  407. package/registry/examples/field/textarea.tsx +10 -0
  408. package/registry/examples/kbd/key.d.ts +4 -0
  409. package/registry/{demos/kbd.js → examples/kbd/key.js} +3 -3
  410. package/registry/{demos/kbd.tsx → examples/kbd/key.tsx} +1 -1
  411. package/registry/examples/kbd/shortcut.d.ts +4 -0
  412. package/registry/examples/kbd/shortcut.js +15 -0
  413. package/registry/examples/kbd/shortcut.tsx +11 -0
  414. package/registry/examples/kbd/small.d.ts +4 -0
  415. package/registry/examples/kbd/small.js +11 -0
  416. package/registry/examples/kbd/small.tsx +5 -0
  417. package/registry/examples/page-header/default.d.ts +4 -0
  418. package/registry/{demos/page-header.js → examples/page-header/default.js} +3 -3
  419. package/registry/{demos/page-header.tsx → examples/page-header/default.tsx} +1 -1
  420. package/registry/examples/page-header/with-actions.d.ts +4 -0
  421. package/registry/examples/page-header/with-actions.js +22 -0
  422. package/registry/examples/page-header/with-actions.tsx +17 -0
  423. package/registry/examples/page-header/with-breadcrumb.d.ts +4 -0
  424. package/registry/examples/page-header/with-breadcrumb.js +24 -0
  425. package/registry/examples/page-header/with-breadcrumb.tsx +26 -0
  426. package/registry/examples/popover/form.d.ts +4 -0
  427. package/registry/{demos/popover.js → examples/popover/form.js} +3 -3
  428. package/registry/{demos/popover.tsx → examples/popover/form.tsx} +1 -1
  429. package/registry/examples/progress/bar-indeterminate.d.ts +4 -0
  430. package/registry/examples/progress/bar-indeterminate.js +11 -0
  431. package/registry/examples/progress/bar-indeterminate.tsx +6 -0
  432. package/registry/examples/progress/bar-sizes.d.ts +4 -0
  433. package/registry/examples/progress/bar-sizes.js +15 -0
  434. package/registry/examples/progress/bar-sizes.tsx +11 -0
  435. package/registry/examples/progress/bar.d.ts +4 -0
  436. package/registry/{demos/progress.js → examples/progress/bar.js} +3 -3
  437. package/registry/{demos/progress.tsx → examples/progress/bar.tsx} +1 -1
  438. package/registry/examples/progress/native/bar.d.ts +4 -0
  439. package/registry/examples/progress/native/bar.dark.png +0 -0
  440. package/registry/examples/progress/native/bar.js +16 -0
  441. package/registry/examples/progress/native/bar.light.png +0 -0
  442. package/registry/examples/progress/native/bar.tsx +12 -0
  443. package/registry/examples/progress/native/indeterminate.d.ts +4 -0
  444. package/registry/examples/progress/native/indeterminate.dark.png +0 -0
  445. package/registry/examples/progress/native/indeterminate.js +15 -0
  446. package/registry/examples/progress/native/indeterminate.light.png +0 -0
  447. package/registry/examples/progress/native/indeterminate.tsx +12 -0
  448. package/registry/examples/progress/native/ring.d.ts +4 -0
  449. package/registry/examples/progress/native/ring.dark.png +0 -0
  450. package/registry/examples/progress/native/ring.js +19 -0
  451. package/registry/examples/progress/native/ring.light.png +0 -0
  452. package/registry/examples/progress/native/ring.tsx +19 -0
  453. package/registry/examples/progress/ring-indeterminate.d.ts +4 -0
  454. package/registry/examples/progress/ring-indeterminate.js +11 -0
  455. package/registry/examples/progress/ring-indeterminate.tsx +5 -0
  456. package/registry/examples/progress/ring.d.ts +4 -0
  457. package/registry/examples/progress/ring.js +18 -0
  458. package/registry/examples/progress/ring.tsx +17 -0
  459. package/registry/examples/radio-group/cards.d.ts +4 -0
  460. package/registry/examples/radio-group/cards.js +19 -0
  461. package/registry/examples/radio-group/cards.tsx +21 -0
  462. package/registry/examples/radio-group/horizontal.d.ts +4 -0
  463. package/registry/examples/radio-group/horizontal.js +15 -0
  464. package/registry/examples/radio-group/horizontal.tsx +12 -0
  465. package/registry/examples/radio-group/items.d.ts +4 -0
  466. package/registry/{demos/radio-group.js → examples/radio-group/items.js} +3 -3
  467. package/registry/{demos/radio-group.tsx → examples/radio-group/items.tsx} +1 -1
  468. package/registry/examples/section-backdrop/depth-of-field.d.ts +4 -0
  469. package/registry/examples/section-backdrop/depth-of-field.js +18 -0
  470. package/registry/examples/section-backdrop/depth-of-field.tsx +13 -0
  471. package/registry/examples/section-backdrop/hero.d.ts +4 -0
  472. package/registry/{demos/section-backdrop.js → examples/section-backdrop/hero.js} +3 -3
  473. package/registry/{demos/section-backdrop.tsx → examples/section-backdrop/hero.tsx} +1 -1
  474. package/registry/examples/section-backdrop/plain.d.ts +4 -0
  475. package/registry/examples/section-backdrop/plain.js +11 -0
  476. package/registry/examples/section-backdrop/plain.tsx +10 -0
  477. package/registry/examples/section-backdrop/sequence.d.ts +4 -0
  478. package/registry/examples/section-backdrop/sequence.js +14 -0
  479. package/registry/examples/section-backdrop/sequence.tsx +15 -0
  480. package/registry/examples/section-backdrop/up.d.ts +4 -0
  481. package/registry/examples/section-backdrop/up.js +11 -0
  482. package/registry/examples/section-backdrop/up.tsx +10 -0
  483. package/registry/examples/segmented/native/default.d.ts +4 -0
  484. package/registry/examples/segmented/native/default.dark.png +0 -0
  485. package/registry/examples/segmented/native/default.js +19 -0
  486. package/registry/examples/segmented/native/default.light.png +0 -0
  487. package/registry/examples/segmented/native/default.tsx +19 -0
  488. package/registry/examples/segmented/native/small.d.ts +4 -0
  489. package/registry/examples/segmented/native/small.dark.png +0 -0
  490. package/registry/examples/segmented/native/small.js +19 -0
  491. package/registry/examples/segmented/native/small.light.png +0 -0
  492. package/registry/examples/segmented/native/small.tsx +19 -0
  493. package/registry/examples/separator/horizontal.d.ts +4 -0
  494. package/registry/{demos/separator.js → examples/separator/horizontal.js} +3 -3
  495. package/registry/{demos/separator.tsx → examples/separator/horizontal.tsx} +1 -1
  496. package/registry/examples/separator/vertical.d.ts +4 -0
  497. package/registry/examples/separator/vertical.js +17 -0
  498. package/registry/examples/separator/vertical.tsx +14 -0
  499. package/registry/examples/skeleton/circle.d.ts +4 -0
  500. package/registry/examples/skeleton/circle.js +11 -0
  501. package/registry/examples/skeleton/circle.tsx +5 -0
  502. package/registry/examples/skeleton/composition.d.ts +4 -0
  503. package/registry/{demos/skeleton.js → examples/skeleton/composition.js} +3 -3
  504. package/registry/{demos/skeleton.tsx → examples/skeleton/composition.tsx} +1 -1
  505. package/registry/examples/skeleton/native/shapes.d.ts +4 -0
  506. package/registry/examples/skeleton/native/shapes.dark.png +0 -0
  507. package/registry/examples/skeleton/native/shapes.js +21 -0
  508. package/registry/examples/skeleton/native/shapes.light.png +0 -0
  509. package/registry/examples/skeleton/native/shapes.tsx +18 -0
  510. package/registry/examples/skeleton/rect.d.ts +4 -0
  511. package/registry/examples/skeleton/rect.js +11 -0
  512. package/registry/examples/skeleton/rect.tsx +5 -0
  513. package/registry/examples/skeleton/text.d.ts +4 -0
  514. package/registry/examples/skeleton/text.js +11 -0
  515. package/registry/examples/skeleton/text.tsx +5 -0
  516. package/registry/examples/slider/centred.d.ts +4 -0
  517. package/registry/examples/slider/centred.js +11 -0
  518. package/registry/examples/slider/centred.tsx +8 -0
  519. package/registry/examples/slider/default.d.ts +4 -0
  520. package/registry/{demos/slider.js → examples/slider/default.js} +3 -3
  521. package/registry/{demos/slider.tsx → examples/slider/default.tsx} +1 -1
  522. package/registry/examples/slider/disabled.d.ts +4 -0
  523. package/registry/examples/slider/disabled.js +11 -0
  524. package/registry/examples/slider/disabled.tsx +5 -0
  525. package/registry/examples/slider/range.d.ts +4 -0
  526. package/registry/examples/slider/range.js +22 -0
  527. package/registry/examples/slider/range.tsx +18 -0
  528. package/registry/examples/slider/with-label.d.ts +4 -0
  529. package/registry/examples/slider/with-label.js +11 -0
  530. package/registry/examples/slider/with-label.tsx +8 -0
  531. package/registry/examples/slot/as-child.d.ts +4 -0
  532. package/registry/{demos/slot.js → examples/slot/as-child.js} +3 -3
  533. package/registry/{demos/slot.tsx → examples/slot/as-child.tsx} +1 -1
  534. package/registry/examples/slot/visually-hidden.d.ts +4 -0
  535. package/registry/examples/slot/visually-hidden.js +14 -0
  536. package/registry/examples/slot/visually-hidden.tsx +13 -0
  537. package/registry/examples/spinner/default.d.ts +4 -0
  538. package/registry/{demos/spinner.js → examples/spinner/default.js} +3 -3
  539. package/registry/{demos/spinner.tsx → examples/spinner/default.tsx} +1 -1
  540. package/registry/examples/spinner/muted.d.ts +4 -0
  541. package/registry/examples/spinner/muted.js +11 -0
  542. package/registry/examples/spinner/muted.tsx +6 -0
  543. package/registry/examples/spinner/native/sizes.d.ts +4 -0
  544. package/registry/examples/spinner/native/sizes.dark.png +0 -0
  545. package/registry/examples/spinner/native/sizes.js +16 -0
  546. package/registry/examples/spinner/native/sizes.light.png +0 -0
  547. package/registry/examples/spinner/native/sizes.tsx +13 -0
  548. package/registry/examples/spinner/sizes.d.ts +4 -0
  549. package/registry/examples/spinner/sizes.js +15 -0
  550. package/registry/examples/spinner/sizes.tsx +11 -0
  551. package/registry/examples/stat/down.d.ts +4 -0
  552. package/registry/examples/stat/down.js +11 -0
  553. package/registry/examples/stat/down.tsx +5 -0
  554. package/registry/examples/stat/flat.d.ts +4 -0
  555. package/registry/examples/stat/flat.js +11 -0
  556. package/registry/examples/stat/flat.tsx +5 -0
  557. package/registry/examples/stat/plain.d.ts +4 -0
  558. package/registry/examples/stat/plain.js +11 -0
  559. package/registry/examples/stat/plain.tsx +5 -0
  560. package/registry/examples/stat/row.d.ts +4 -0
  561. package/registry/examples/stat/row.js +15 -0
  562. package/registry/examples/stat/row.tsx +12 -0
  563. package/registry/examples/stat/up.d.ts +4 -0
  564. package/registry/{demos/stat.js → examples/stat/up.js} +3 -3
  565. package/registry/{demos/stat.tsx → examples/stat/up.tsx} +1 -1
  566. package/registry/examples/switch/disabled.d.ts +4 -0
  567. package/registry/examples/switch/disabled.js +14 -0
  568. package/registry/examples/switch/disabled.tsx +10 -0
  569. package/registry/examples/switch/off.d.ts +4 -0
  570. package/registry/{demos/switch.js → examples/switch/off.js} +3 -3
  571. package/registry/{demos/switch.tsx → examples/switch/off.tsx} +1 -1
  572. package/registry/examples/switch/on.d.ts +4 -0
  573. package/registry/examples/switch/on.js +11 -0
  574. package/registry/examples/switch/on.tsx +5 -0
  575. package/registry/examples/switch/small.d.ts +4 -0
  576. package/registry/examples/switch/small.js +11 -0
  577. package/registry/examples/switch/small.tsx +5 -0
  578. package/registry/examples/switch/with-label.d.ts +4 -0
  579. package/registry/examples/switch/with-label.js +18 -0
  580. package/registry/examples/switch/with-label.tsx +17 -0
  581. package/registry/examples/tabs/pills.d.ts +4 -0
  582. package/registry/examples/tabs/pills.js +20 -0
  583. package/registry/examples/tabs/pills.tsx +23 -0
  584. package/registry/examples/tabs/segmented.d.ts +4 -0
  585. package/registry/examples/tabs/segmented.js +20 -0
  586. package/registry/examples/tabs/segmented.tsx +23 -0
  587. package/registry/examples/tabs/underline.d.ts +4 -0
  588. package/registry/{demos/tabs.js → examples/tabs/underline.js} +3 -3
  589. package/registry/{demos/tabs.tsx → examples/tabs/underline.tsx} +1 -1
  590. package/registry/examples/tabs/vertical.d.ts +4 -0
  591. package/registry/examples/tabs/vertical.js +20 -0
  592. package/registry/examples/tabs/vertical.tsx +23 -0
  593. package/registry/examples/theme/native/provider.d.ts +4 -0
  594. package/registry/examples/theme/native/provider.js +23 -0
  595. package/registry/examples/theme/native/provider.tsx +21 -0
  596. package/registry/examples/theme/secondary.d.ts +4 -0
  597. package/registry/examples/theme/secondary.js +11 -0
  598. package/registry/examples/theme/secondary.tsx +10 -0
  599. package/registry/examples/theme/toggle.d.ts +4 -0
  600. package/registry/{demos/theme.js → examples/theme/toggle.js} +3 -3
  601. package/registry/{demos/theme.tsx → examples/theme/toggle.tsx} +1 -1
  602. package/registry/examples/toast/custom.d.ts +4 -0
  603. package/registry/examples/toast/custom.js +30 -0
  604. package/registry/examples/toast/custom.tsx +35 -0
  605. package/registry/examples/toast/native/notification.d.ts +4 -0
  606. package/registry/examples/toast/native/notification.dark.png +0 -0
  607. package/registry/examples/toast/native/notification.js +29 -0
  608. package/registry/examples/toast/native/notification.light.png +0 -0
  609. package/registry/examples/toast/native/notification.tsx +30 -0
  610. package/registry/examples/toast/native/tones.d.ts +4 -0
  611. package/registry/examples/toast/native/tones.dark.png +0 -0
  612. package/registry/examples/toast/native/tones.js +28 -0
  613. package/registry/examples/toast/native/tones.light.png +0 -0
  614. package/registry/examples/toast/native/tones.tsx +25 -0
  615. package/registry/examples/toast/tones.d.ts +4 -0
  616. package/registry/{demos/toast.js → examples/toast/tones.js} +3 -3
  617. package/registry/{demos/toast.tsx → examples/toast/tones.tsx} +1 -1
  618. package/registry/examples/tooltip/right.d.ts +4 -0
  619. package/registry/examples/tooltip/right.js +15 -0
  620. package/registry/examples/tooltip/right.tsx +15 -0
  621. package/registry/examples/tooltip/top.d.ts +4 -0
  622. package/registry/{demos/tooltip.js → examples/tooltip/top.js} +3 -3
  623. package/registry/{demos/tooltip.tsx → examples/tooltip/top.tsx} +1 -1
  624. package/registry/examples/txt/native/tones.d.ts +4 -0
  625. package/registry/examples/txt/native/tones.dark.png +0 -0
  626. package/registry/examples/txt/native/tones.js +16 -0
  627. package/registry/examples/txt/native/tones.light.png +0 -0
  628. package/registry/examples/txt/native/tones.tsx +17 -0
  629. package/registry/examples/txt/native/variants.d.ts +4 -0
  630. package/registry/examples/txt/native/variants.dark.png +0 -0
  631. package/registry/examples/txt/native/variants.js +18 -0
  632. package/registry/examples/txt/native/variants.light.png +0 -0
  633. package/registry/examples/txt/native/variants.tsx +15 -0
  634. package/registry/field.json +142 -4
  635. package/registry/index.json +353 -33
  636. package/registry/kbd.json +90 -3
  637. package/registry/page-header.json +121 -3
  638. package/registry/popover.json +90 -3
  639. package/registry/progress.json +265 -3
  640. package/registry/radio-group.json +136 -3
  641. package/registry/section-backdrop.json +144 -3
  642. package/registry/segmented.json +125 -0
  643. package/registry/separator.json +67 -3
  644. package/registry/skeleton.json +166 -3
  645. package/registry/slider.json +177 -3
  646. package/registry/slot.json +79 -3
  647. package/registry/spinner.json +144 -3
  648. package/registry/stat.json +140 -3
  649. package/registry/switch.json +130 -3
  650. package/registry/tabs.json +117 -3
  651. package/registry/theme.json +190 -4
  652. package/registry/toast.json +190 -3
  653. package/registry/tooltip.json +143 -3
  654. package/registry/txt.json +97 -0
  655. package/dist/chunk-6DJ6SQY3.js.map +0 -1
  656. package/registry/demos/alert.d.ts +0 -5
  657. package/registry/demos/avatar.d.ts +0 -5
  658. package/registry/demos/badge.d.ts +0 -5
  659. package/registry/demos/button.d.ts +0 -5
  660. package/registry/demos/card.d.ts +0 -5
  661. package/registry/demos/checkbox.d.ts +0 -5
  662. package/registry/demos/chip.d.ts +0 -5
  663. package/registry/demos/cn.d.ts +0 -7
  664. package/registry/demos/command.d.ts +0 -5
  665. package/registry/demos/confirm-button.d.ts +0 -5
  666. package/registry/demos/countdown.d.ts +0 -5
  667. package/registry/demos/dialog.d.ts +0 -7
  668. package/registry/demos/dropdown-menu.d.ts +0 -7
  669. package/registry/demos/empty-state.d.ts +0 -5
  670. package/registry/demos/field.d.ts +0 -5
  671. package/registry/demos/kbd.d.ts +0 -5
  672. package/registry/demos/page-header.d.ts +0 -5
  673. package/registry/demos/popover.d.ts +0 -7
  674. package/registry/demos/progress.d.ts +0 -5
  675. package/registry/demos/radio-group.d.ts +0 -5
  676. package/registry/demos/section-backdrop.d.ts +0 -5
  677. package/registry/demos/separator.d.ts +0 -5
  678. package/registry/demos/skeleton.d.ts +0 -5
  679. package/registry/demos/slider.d.ts +0 -5
  680. package/registry/demos/slot.d.ts +0 -5
  681. package/registry/demos/spinner.d.ts +0 -5
  682. package/registry/demos/stat.d.ts +0 -5
  683. package/registry/demos/switch.d.ts +0 -5
  684. package/registry/demos/tabs.d.ts +0 -5
  685. package/registry/demos/theme.d.ts +0 -5
  686. package/registry/demos/toast.d.ts +0 -8
  687. package/registry/demos/tooltip.d.ts +0 -7
  688. /package/dist/{chunk-IUGBKMJC.js.map → chunk-FHYZSO2S.js.map} +0 -0
@@ -1,12 +1,153 @@
1
1
  {
2
2
  "name": "section-backdrop",
3
3
  "type": "primitive",
4
- "description": "`SectionBackdrop`, `sectionBackdropVariants`. Server-safe.",
4
+ "title": "Section backdrop",
5
+ "summary": "The backdrop of a page section: the brand's gradient, a light dome, an optional perspective grid and a blurred foreground.",
6
+ "description": "The backdrop of a page section: the brand's gradient, a light dome, an optional perspective grid and a blurred foreground.",
7
+ "status": "beta",
8
+ "category": "layout",
9
+ "platforms": "web",
10
+ "whenToUse": [
11
+ "Behind the hero of a marketing page (`grid`, the dome).",
12
+ "Behind a closing call to action (`direction=\"up\"`).",
13
+ "To chain sections: each one ends on the page surface where the next begins."
14
+ ],
15
+ "whenNotToUse": [
16
+ {
17
+ "when": "Inside an app's screens: a working view needs a calm surface.",
18
+ "use": "page-header"
19
+ },
20
+ {
21
+ "when": "To frame one item.",
22
+ "use": "card"
23
+ }
24
+ ],
25
+ "bestPractices": [
26
+ "One strong backdrop per screen: the hero, or the closing call to action — not every section.",
27
+ "The colours come from the brand theme (`.brand-*`): never pass a colour.",
28
+ "Keep text on it in the text roles (`text-fg`, `text-fg-secondary`)."
29
+ ],
30
+ "accessibility": {
31
+ "keyboard": [],
32
+ "notes": [
33
+ "Every layer is decorative and hidden from assistive technology; `media` too.",
34
+ "The drift of the light stops under `prefers-reduced-motion`."
35
+ ]
36
+ },
37
+ "related": [
38
+ "page-header",
39
+ "card"
40
+ ],
41
+ "web": {
42
+ "entry": "@krizaka/ui/section-backdrop",
43
+ "import": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";",
44
+ "props": [
45
+ {
46
+ "component": "SectionBackdrop",
47
+ "description": "A section of a page in the Krizaka visual language: the brand's section gradient (`--kz-brand-gradient-*`, so it\nfollows the brand theme and dark/light), a light dome, an optional perspective grid and a blurred foreground. Every\nsection ends on the page surface, so consecutive sections glide from one tint to the next. Text on it reads at AA\n(tested in",
48
+ "props": [
49
+ {
50
+ "name": "animated",
51
+ "type": "boolean",
52
+ "default": "true",
53
+ "description": "The very slow drift of the light (40 s); always still under prefers-reduced-motion. Default true.",
54
+ "required": false
55
+ },
56
+ {
57
+ "name": "as",
58
+ "type": "\"div\" | \"footer\" | \"header\" | \"section\"",
59
+ "default": "section",
60
+ "description": "The element: `section` (default), `header`, `footer` or `div`.",
61
+ "required": false
62
+ },
63
+ {
64
+ "name": "direction",
65
+ "type": "\"down\" | \"up\"",
66
+ "default": "down",
67
+ "description": "Where the brand tint sits: `down` (default) starts tinted and ends on the page surface; `up` ends tinted (a closing call to action).",
68
+ "required": false
69
+ },
70
+ {
71
+ "name": "dome",
72
+ "type": "boolean",
73
+ "default": "true",
74
+ "description": "The light dome above the content (the halo of a hero). Default true.",
75
+ "required": false
76
+ },
77
+ {
78
+ "name": "grid",
79
+ "type": "boolean",
80
+ "default": "false",
81
+ "description": "A floor of perspective lines under the content. Default false.",
82
+ "required": false
83
+ },
84
+ {
85
+ "name": "media",
86
+ "type": "ReactNode",
87
+ "default": null,
88
+ "description": "A foreground illustration or image, blurred for depth of field, behind the content (decorative: hidden from assistive technology).",
89
+ "required": false
90
+ }
91
+ ]
92
+ }
93
+ ],
94
+ "examples": [
95
+ {
96
+ "name": "hero",
97
+ "title": "Hero",
98
+ "description": "The gradient, the dome and the grid behind a headline.",
99
+ "path": "examples/section-backdrop/hero.tsx",
100
+ "module": "@krizaka/ui/registry/examples/section-backdrop/hero",
101
+ "code": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\nexport default function SectionBackdropHero() {\n return (\n <SectionBackdrop grid className=\"rounded-xl px-8 py-16\">\n <h2 className=\"font-display text-3xl font-semibold text-fg\">Sovereign by design</h2>\n <p className=\"mt-2 max-w-md text-fg-secondary\">Your models, your data, your servers.</p>\n </SectionBackdrop>\n );\n}\n"
102
+ },
103
+ {
104
+ "name": "plain",
105
+ "title": "Plain",
106
+ "description": "The gradient alone.",
107
+ "path": "examples/section-backdrop/plain.tsx",
108
+ "module": "@krizaka/ui/registry/examples/section-backdrop/plain",
109
+ "code": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\n// Without the grid nor the dome: the gradient alone, ending on the page surface.\nexport default function SectionBackdropPlain() {\n return (\n <SectionBackdrop dome={false} className=\"px-8 py-12\">\n <p className=\"text-fg\">The gradient alone, ending on the page surface.</p>\n </SectionBackdrop>\n );\n}\n"
110
+ },
111
+ {
112
+ "name": "up",
113
+ "title": "Closing call to action",
114
+ "description": "`direction=\"up\"`: the tint at the bottom.",
115
+ "path": "examples/section-backdrop/up.tsx",
116
+ "module": "@krizaka/ui/registry/examples/section-backdrop/up",
117
+ "code": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\n// `direction=\"up\"`: the tint at the bottom, for a closing call to action.\nexport default function SectionBackdropUp() {\n return (\n <SectionBackdrop direction=\"up\" className=\"px-8 py-12\">\n <p className=\"text-fg\">Start in minutes.</p>\n </SectionBackdrop>\n );\n}\n"
118
+ },
119
+ {
120
+ "name": "sequence",
121
+ "title": "Sequence",
122
+ "description": "Two sections in a row.",
123
+ "path": "examples/section-backdrop/sequence.tsx",
124
+ "module": "@krizaka/ui/registry/examples/section-backdrop/sequence",
125
+ "code": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\n// Two sections in a row: the first ends where the second begins.\nexport default function SectionBackdropSequence() {\n return (\n <div>\n <SectionBackdrop grid className=\"px-8 py-14\">\n <p className=\"text-xl font-semibold text-fg\">One section</p>\n </SectionBackdrop>\n <SectionBackdrop dome={false} className=\"px-8 py-14\">\n <p className=\"text-xl font-semibold text-fg\">The next one</p>\n </SectionBackdrop>\n </div>\n );\n}\n"
126
+ },
127
+ {
128
+ "name": "depth-of-field",
129
+ "title": "Depth of field",
130
+ "description": "A blurred foreground behind the content (`media`).",
131
+ "path": "examples/section-backdrop/depth-of-field.tsx",
132
+ "module": "@krizaka/ui/registry/examples/section-backdrop/depth-of-field",
133
+ "code": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\n// `media`: a foreground blurred for depth of field, decorative, behind the content.\nexport default function SectionBackdropDepthOfField() {\n return (\n <SectionBackdrop\n className=\"px-8 py-16\"\n media={<div className=\"absolute -bottom-10 left-6 h-40 w-40 rounded-xl border border-border-strong bg-accent-soft\" />}\n >\n <p className=\"text-xl font-semibold text-fg\">Depth of field</p>\n </SectionBackdrop>\n );\n}\n"
134
+ }
135
+ ]
136
+ },
137
+ "native": null,
5
138
  "files": [
139
+ {
140
+ "path": "meta.ts",
141
+ "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"kbd\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
142
+ },
6
143
  {
7
144
  "path": "section-backdrop/index.ts",
8
145
  "content": "/** @krizaka/ui/section-backdrop — `SectionBackdrop`, `sectionBackdropVariants`. Server-safe. */\nexport { SectionBackdrop, type SectionBackdropProps, sectionBackdropVariants } from \"./section-backdrop\";\n"
9
146
  },
147
+ {
148
+ "path": "section-backdrop/meta.ts",
149
+ "content": "import type { ComponentMeta } from \"../meta\";\n\nexport const meta = {\n title: \"Section backdrop\",\n summary: \"The backdrop of a page section: the brand's gradient, a light dome, an optional perspective grid and a blurred foreground.\",\n status: \"beta\",\n category: \"layout\",\n platforms: \"web\",\n whenToUse: [\n \"Behind the hero of a marketing page (`grid`, the dome).\",\n \"Behind a closing call to action (`direction=\\\"up\\\"`).\",\n \"To chain sections: each one ends on the page surface where the next begins.\",\n ],\n whenNotToUse: [\n { when: \"Inside an app's screens: a working view needs a calm surface.\", use: \"page-header\" },\n { when: \"To frame one item.\", use: \"card\" },\n ],\n bestPractices: [\n \"One strong backdrop per screen: the hero, or the closing call to action — not every section.\",\n \"The colours come from the brand theme (`.brand-*`): never pass a colour.\",\n \"Keep text on it in the text roles (`text-fg`, `text-fg-secondary`).\",\n ],\n accessibility: {\n keyboard: [],\n notes: [\"Every layer is decorative and hidden from assistive technology; `media` too.\", \"The drift of the light stops under `prefers-reduced-motion`.\"],\n },\n related: [\"page-header\", \"card\"],\n web: {\n imports: [\"SectionBackdrop\"],\n examples: [\n { name: \"hero\", title: \"Hero\", description: \"The gradient, the dome and the grid behind a headline.\" },\n { name: \"plain\", title: \"Plain\", description: \"The gradient alone.\" },\n { name: \"up\", title: \"Closing call to action\", description: \"`direction=\\\"up\\\"`: the tint at the bottom.\" },\n { name: \"sequence\", title: \"Sequence\", description: \"Two sections in a row.\" },\n { name: \"depth-of-field\", title: \"Depth of field\", description: \"A blurred foreground behind the content (`media`).\" },\n ],\n },\n} satisfies ComponentMeta;\n"
150
+ },
10
151
  {
11
152
  "path": "section-backdrop/section-backdrop.tsx",
12
153
  "content": "// Server-safe. The backdrop of a page section in the brand's visual language (packages/tokens/BRAND.md).\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const sectionBackdropVariants = tv({\n slots: {\n root: \"kz-backdrop\",\n drift: \"kz-backdrop-drift\",\n dome: \"kz-backdrop-dome\",\n grid: \"kz-backdrop-grid\",\n media: \"kz-backdrop-media\",\n },\n});\n\nexport interface SectionBackdropProps extends React.HTMLAttributes<HTMLElement> {\n /** The element: `section` (default), `header`, `footer` or `div`. */\n as?: \"section\" | \"header\" | \"footer\" | \"div\";\n /** Where the brand tint sits: `down` (default) starts tinted and ends on the page surface; `up` ends tinted (a closing call to action). */\n direction?: \"down\" | \"up\";\n /** The light dome above the content (the halo of a hero). Default true. */\n dome?: boolean;\n /** A floor of perspective lines under the content. Default false. */\n grid?: boolean;\n /** A foreground illustration or image, blurred for depth of field, behind the content (decorative: hidden from assistive technology). */\n media?: React.ReactNode;\n /** The very slow drift of the light (40 s); always still under prefers-reduced-motion. Default true. */\n animated?: boolean;\n}\n\n/**\n * A section of a page in the Krizaka visual language: the brand's section gradient (`--kz-brand-gradient-*`, so it\n * follows the brand theme and dark/light), a light dome, an optional perspective grid and a blurred foreground. Every\n * section ends on the page surface, so consecutive sections glide from one tint to the next. Text on it reads at AA\n * (tested in @krizaka/tokens).\n */\nexport function SectionBackdrop({ as: Tag = \"section\", direction = \"down\", dome = true, grid = false, media, animated = true, className, children, ...props }: SectionBackdropProps) {\n const s = sectionBackdropVariants();\n return (\n <Tag className={s.root({ className })} data-direction={direction} {...props}>\n {animated ? <div data-backdrop-layer aria-hidden className={s.drift()} /> : null}\n {dome ? <div data-backdrop-layer aria-hidden className={s.dome()} /> : null}\n {grid ? <div data-backdrop-layer aria-hidden className={s.grid()} /> : null}\n {media ? (\n <div data-backdrop-layer aria-hidden className={s.media()}>\n {media}\n </div>\n ) : null}\n {children}\n </Tag>\n );\n}\n"
@@ -17,8 +158,8 @@
17
158
  ],
18
159
  "registryDependencies": [],
19
160
  "demo": {
20
- "path": "demos/section-backdrop.tsx",
21
- "content": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\nexport default function SectionBackdropDemo() {\n return (\n <SectionBackdrop grid className=\"rounded-xl px-8 py-16\">\n <h2 className=\"font-display text-3xl font-semibold text-fg\">Sovereign by design</h2>\n <p className=\"mt-2 max-w-md text-fg-secondary\">Your models, your data, your servers.</p>\n </SectionBackdrop>\n );\n}\n"
161
+ "path": "examples/section-backdrop/hero.tsx",
162
+ "content": "import { SectionBackdrop } from \"@krizaka/ui/section-backdrop\";\n\nexport default function SectionBackdropHero() {\n return (\n <SectionBackdrop grid className=\"rounded-xl px-8 py-16\">\n <h2 className=\"font-display text-3xl font-semibold text-fg\">Sovereign by design</h2>\n <p className=\"mt-2 max-w-md text-fg-secondary\">Your models, your data, your servers.</p>\n </SectionBackdrop>\n );\n}\n"
22
163
  },
23
164
  "props": [
24
165
  {
@@ -0,0 +1,125 @@
1
+ {
2
+ "name": "segmented",
3
+ "type": "native",
4
+ "title": "Segmented",
5
+ "summary": "A segmented control that switches between views of a screen — the native counterpart of the web's segmented tabs.",
6
+ "description": "A segmented control that switches between views of a screen — the native counterpart of the web's segmented tabs.",
7
+ "status": "beta",
8
+ "category": "navigation",
9
+ "platforms": "native",
10
+ "whenToUse": [
11
+ "At the top of a screen, to switch between two to four views of the same content: feed, auctions, challenges."
12
+ ],
13
+ "whenNotToUse": [
14
+ {
15
+ "when": "To filter a list.",
16
+ "use": "chip"
17
+ },
18
+ {
19
+ "when": "On the web.",
20
+ "use": "tabs"
21
+ }
22
+ ],
23
+ "bestPractices": [
24
+ "Controlled: keep `value` in the screen's state (or the route).",
25
+ "One or two words per segment, passed translated."
26
+ ],
27
+ "accessibility": {
28
+ "keyboard": [],
29
+ "notes": [
30
+ "A tab list named by `aria-label`; each segment is a tab with its selected state.",
31
+ "An option with `disabled` is announced as disabled and cannot be pressed."
32
+ ]
33
+ },
34
+ "related": [
35
+ "tabs",
36
+ "chip"
37
+ ],
38
+ "web": null,
39
+ "native": {
40
+ "entry": "@krizaka/ui/native",
41
+ "import": "import { Segmented } from \"@krizaka/ui/native\";",
42
+ "differences": [],
43
+ "props": [
44
+ {
45
+ "component": "Segmented",
46
+ "description": "Switches between views of one screen: equal segments on a track, the chosen one raised — the web\n`Tabs variant=\"segmented\"`. A tab list for screen readers. To filter a list, use `Chip.Group`.",
47
+ "props": [
48
+ {
49
+ "name": "onValueChange",
50
+ "type": "(value: T) => void",
51
+ "default": null,
52
+ "description": "Called with the view pressed.",
53
+ "required": true
54
+ },
55
+ {
56
+ "name": "options",
57
+ "type": "readonly SegmentedOption<T>[]",
58
+ "default": null,
59
+ "description": "The views, in order; `label` passed translated.",
60
+ "required": true
61
+ },
62
+ {
63
+ "name": "value",
64
+ "type": "string",
65
+ "default": null,
66
+ "description": "The selected view (controlled).",
67
+ "required": true
68
+ },
69
+ {
70
+ "name": "aria-label",
71
+ "type": "string",
72
+ "default": null,
73
+ "description": "The accessible name of the tab list — passed translated.",
74
+ "required": false
75
+ },
76
+ {
77
+ "name": "size",
78
+ "type": "\"sm\" | \"md\"",
79
+ "default": "md",
80
+ "description": "sm · md (default).",
81
+ "required": false
82
+ },
83
+ {
84
+ "name": "style",
85
+ "type": "StyleProp<ViewStyle>",
86
+ "default": null,
87
+ "description": "Styles merged last.",
88
+ "required": false
89
+ }
90
+ ]
91
+ }
92
+ ],
93
+ "examples": [
94
+ {
95
+ "name": "default",
96
+ "title": "Default",
97
+ "description": "Controlled, three views.",
98
+ "path": "examples/segmented/native/default.tsx",
99
+ "module": "@krizaka/ui/registry/examples/segmented/native/default",
100
+ "code": "import { Segmented } from \"@krizaka/ui/native\";\nimport { useState } from \"react\";\nimport { View } from \"react-native\";\n\nconst OPTIONS = [\n { value: \"feed\", label: \"Feed\" },\n { value: \"auctions\", label: \"Auctions\" },\n { value: \"challenges\", label: \"Challenges\" },\n] as const;\n\n// Controlled: the screen holds the value and shows the matching view.\nexport default function NativeSegmentedDefault() {\n const [value, setValue] = useState<(typeof OPTIONS)[number][\"value\"]>(\"auctions\");\n return (\n <View style={{ width: 320 }}>\n <Segmented aria-label=\"View\" options={OPTIONS} value={value} onValueChange={setValue} />\n </View>\n );\n}\n",
101
+ "screenshots": {
102
+ "dark": "examples/segmented/native/default.dark.png",
103
+ "light": "examples/segmented/native/default.light.png"
104
+ }
105
+ },
106
+ {
107
+ "name": "small",
108
+ "title": "Small",
109
+ "description": "`size=\"sm\"`.",
110
+ "path": "examples/segmented/native/small.tsx",
111
+ "module": "@krizaka/ui/registry/examples/segmented/native/small",
112
+ "code": "import { Segmented } from \"@krizaka/ui/native\";\nimport { useState } from \"react\";\nimport { View } from \"react-native\";\n\nconst OPTIONS = [\n { value: \"feed\", label: \"Feed\" },\n { value: \"auctions\", label: \"Auctions\" },\n { value: \"challenges\", label: \"Challenges\" },\n] as const;\n\n// `size=\"sm\"`: in a header or a sheet.\nexport default function NativeSegmentedSmall() {\n const [value, setValue] = useState<(typeof OPTIONS)[number][\"value\"]>(\"auctions\");\n return (\n <View style={{ width: 320 }}>\n <Segmented aria-label=\"View\" options={OPTIONS} value={value} onValueChange={setValue} size=\"sm\" />\n </View>\n );\n}\n",
113
+ "screenshots": {
114
+ "dark": "examples/segmented/native/small.dark.png",
115
+ "light": "examples/segmented/native/small.light.png"
116
+ }
117
+ }
118
+ ]
119
+ },
120
+ "files": [],
121
+ "dependencies": [],
122
+ "registryDependencies": [],
123
+ "demo": null,
124
+ "props": []
125
+ }
@@ -1,12 +1,76 @@
1
1
  {
2
2
  "name": "separator",
3
3
  "type": "primitive",
4
- "description": "`Separator`, `separatorVariants` (Radix). Server-safe.",
4
+ "title": "Separator",
5
+ "summary": "A line between groups of content, horizontal or vertical, decorative by default.",
6
+ "description": "A line between groups of content, horizontal or vertical, decorative by default.",
7
+ "status": "stable",
8
+ "category": "layout",
9
+ "platforms": "web",
10
+ "whenToUse": [
11
+ "Between groups of a list or a menu.",
12
+ "Between items of a toolbar or a row of links (`orientation=\"vertical\"`)."
13
+ ],
14
+ "whenNotToUse": [
15
+ {
16
+ "when": "To separate every item of a list: use spacing."
17
+ },
18
+ {
19
+ "when": "To separate items of a menu.",
20
+ "use": "dropdown-menu"
21
+ }
22
+ ],
23
+ "bestPractices": [
24
+ "Prefer space to lines; a separator marks a change of group.",
25
+ "`decorative={false}` only when the separation means something to a screen-reader user."
26
+ ],
27
+ "accessibility": {
28
+ "keyboard": [],
29
+ "notes": [
30
+ "Radix Separator: decorative by default (`role=\"none\"`); `decorative={false}` gives `role=\"separator\"` and its orientation."
31
+ ]
32
+ },
33
+ "related": [
34
+ "dropdown-menu",
35
+ "card"
36
+ ],
37
+ "web": {
38
+ "entry": "@krizaka/ui/separator",
39
+ "import": "import { Separator } from \"@krizaka/ui/separator\";",
40
+ "props": [],
41
+ "examples": [
42
+ {
43
+ "name": "horizontal",
44
+ "title": "Horizontal",
45
+ "description": "Between two groups.",
46
+ "path": "examples/separator/horizontal.tsx",
47
+ "module": "@krizaka/ui/registry/examples/separator/horizontal",
48
+ "code": "import { Separator } from \"@krizaka/ui/separator\";\n\nexport default function SeparatorHorizontal() {\n return (\n <div className=\"flex w-72 flex-col gap-3 text-sm text-fg\">\n <p>Account</p>\n <Separator />\n <p className=\"text-fg-secondary\">Notifications</p>\n </div>\n );\n}\n"
49
+ },
50
+ {
51
+ "name": "vertical",
52
+ "title": "Vertical",
53
+ "description": "Between items of a row, as real separators.",
54
+ "path": "examples/separator/vertical.tsx",
55
+ "module": "@krizaka/ui/registry/examples/separator/vertical",
56
+ "code": "import { Separator } from \"@krizaka/ui/separator\";\n\n// `decorative={false}`: a real separator, read by assistive technology.\nexport default function SeparatorVertical() {\n return (\n <div className=\"flex h-6 items-center gap-3 text-sm text-fg-secondary\">\n <span>Videos</span>\n <Separator orientation=\"vertical\" decorative={false} />\n <span>Live</span>\n <Separator orientation=\"vertical\" decorative={false} />\n <span>Shop</span>\n </div>\n );\n}\n"
57
+ }
58
+ ]
59
+ },
60
+ "native": null,
5
61
  "files": [
62
+ {
63
+ "path": "meta.ts",
64
+ "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"kbd\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
65
+ },
6
66
  {
7
67
  "path": "separator/index.ts",
8
68
  "content": "/** @krizaka/ui/separator — `Separator`, `separatorVariants` (Radix). Server-safe. */\nexport { Separator, type SeparatorProps, separatorVariants } from \"./separator\";\n"
9
69
  },
70
+ {
71
+ "path": "separator/meta.ts",
72
+ "content": "import type { ComponentMeta } from \"../meta\";\n\nexport const meta = {\n title: \"Separator\",\n summary: \"A line between groups of content, horizontal or vertical, decorative by default.\",\n status: \"stable\",\n category: \"layout\",\n platforms: \"web\",\n whenToUse: [\"Between groups of a list or a menu.\", \"Between items of a toolbar or a row of links (`orientation=\\\"vertical\\\"`).\"],\n whenNotToUse: [\n { when: \"To separate every item of a list: use spacing.\" },\n { when: \"To separate items of a menu.\", use: \"dropdown-menu\" },\n ],\n bestPractices: [\"Prefer space to lines; a separator marks a change of group.\", \"`decorative={false}` only when the separation means something to a screen-reader user.\"],\n accessibility: {\n keyboard: [],\n notes: [\"Radix Separator: decorative by default (`role=\\\"none\\\"`); `decorative={false}` gives `role=\\\"separator\\\"` and its orientation.\"],\n },\n related: [\"dropdown-menu\", \"card\"],\n web: {\n imports: [\"Separator\"],\n examples: [\n { name: \"horizontal\", title: \"Horizontal\", description: \"Between two groups.\" },\n { name: \"vertical\", title: \"Vertical\", description: \"Between items of a row, as real separators.\" },\n ],\n },\n} satisfies ComponentMeta;\n"
73
+ },
10
74
  {
11
75
  "path": "separator/separator.tsx",
12
76
  "content": "// Server-safe. A line between groups: decorative by default (hidden from assistive technology), or a real\n// `role=\"separator\"` with `decorative={false}`.\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const separatorVariants = tv({\n base: \"shrink-0 bg-border-default\",\n variants: { orientation: { horizontal: \"h-px w-full\", vertical: \"h-full w-px self-stretch\" } },\n defaultVariants: { orientation: \"horizontal\" },\n});\n\nexport type SeparatorProps = React.ComponentProps<typeof SeparatorPrimitive.Root>;\n\nexport function Separator({ orientation = \"horizontal\", decorative = true, className, ...props }: SeparatorProps) {\n return <SeparatorPrimitive.Root orientation={orientation} decorative={decorative} className={separatorVariants({ orientation, className })} {...props} />;\n}\n"
@@ -18,8 +82,8 @@
18
82
  ],
19
83
  "registryDependencies": [],
20
84
  "demo": {
21
- "path": "demos/separator.tsx",
22
- "content": "import { Separator } from \"@krizaka/ui/separator\";\n\nexport default function SeparatorDemo() {\n return (\n <div className=\"flex w-72 flex-col gap-3 text-sm text-fg\">\n <p>Account</p>\n <Separator />\n <p className=\"text-fg-secondary\">Notifications</p>\n </div>\n );\n}\n"
85
+ "path": "examples/separator/horizontal.tsx",
86
+ "content": "import { Separator } from \"@krizaka/ui/separator\";\n\nexport default function SeparatorHorizontal() {\n return (\n <div className=\"flex w-72 flex-col gap-3 text-sm text-fg\">\n <p>Account</p>\n <Separator />\n <p className=\"text-fg-secondary\">Notifications</p>\n </div>\n );\n}\n"
23
87
  },
24
88
  "props": []
25
89
  }
@@ -1,12 +1,175 @@
1
1
  {
2
2
  "name": "skeleton",
3
3
  "type": "primitive",
4
- "description": "`Skeleton`, `skeletonVariants`. Server-safe.",
4
+ "title": "Skeleton",
5
+ "summary": "A placeholder the shape of what is loading: a line, a circle or a block.",
6
+ "description": "A placeholder the shape of what is loading: a line, a circle or a block.",
7
+ "status": "stable",
8
+ "category": "feedback",
9
+ "platforms": "both",
10
+ "whenToUse": [
11
+ "While a list, a card or a profile loads, in its final layout: the page does not jump when it arrives."
12
+ ],
13
+ "whenNotToUse": [
14
+ {
15
+ "when": "For an action the user is waiting on (a save).",
16
+ "use": "spinner"
17
+ },
18
+ {
19
+ "when": "When there is nothing to load.",
20
+ "use": "empty-state"
21
+ },
22
+ {
23
+ "when": "For the progress of a task.",
24
+ "use": "progress"
25
+ }
26
+ ],
27
+ "bestPractices": [
28
+ "Compose the shapes like the content: an avatar circle, two lines, a media block.",
29
+ "Show skeletons only after a short delay on fast connections, and never for more than a few seconds without a message."
30
+ ],
31
+ "accessibility": {
32
+ "keyboard": [],
33
+ "notes": [
34
+ "Decorative and hidden from assistive technology: announce the wait elsewhere (`aria-busy` on the region, a `Spinner`).",
35
+ "The pulse stops under `prefers-reduced-motion`."
36
+ ]
37
+ },
38
+ "related": [
39
+ "spinner",
40
+ "empty-state",
41
+ "card"
42
+ ],
43
+ "web": {
44
+ "entry": "@krizaka/ui/skeleton",
45
+ "import": "import { Skeleton } from \"@krizaka/ui/skeleton\";",
46
+ "props": [
47
+ {
48
+ "component": "Skeleton",
49
+ "description": "A pulsing shape the size of what is loading. Announce the wait elsewhere (aria-busy on the region, a Spinner).",
50
+ "props": [
51
+ {
52
+ "name": "shape",
53
+ "type": "\"circle\" | \"rect\" | \"text\"",
54
+ "default": "text",
55
+ "description": "text (a line) · circle (an avatar; give it a height) · rect (a media; give it a height).",
56
+ "required": false
57
+ }
58
+ ]
59
+ }
60
+ ],
61
+ "examples": [
62
+ {
63
+ "name": "text",
64
+ "title": "Text",
65
+ "description": "A line of text.",
66
+ "path": "examples/skeleton/text.tsx",
67
+ "module": "@krizaka/ui/registry/examples/skeleton/text",
68
+ "code": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonText() {\n return <Skeleton />;\n}\n"
69
+ },
70
+ {
71
+ "name": "circle",
72
+ "title": "Circle",
73
+ "description": "An avatar.",
74
+ "path": "examples/skeleton/circle.tsx",
75
+ "module": "@krizaka/ui/registry/examples/skeleton/circle",
76
+ "code": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonCircle() {\n return <Skeleton shape=\"circle\" />;\n}\n"
77
+ },
78
+ {
79
+ "name": "rect",
80
+ "title": "Rect",
81
+ "description": "A media or a block.",
82
+ "path": "examples/skeleton/rect.tsx",
83
+ "module": "@krizaka/ui/registry/examples/skeleton/rect",
84
+ "code": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonRect() {\n return <Skeleton shape=\"rect\" />;\n}\n"
85
+ },
86
+ {
87
+ "name": "composition",
88
+ "title": "Composition",
89
+ "description": "Shapes composed into a card being loaded.",
90
+ "path": "examples/skeleton/composition.tsx",
91
+ "module": "@krizaka/ui/registry/examples/skeleton/composition",
92
+ "code": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonComposition() {\n return (\n <div className=\"flex flex-col gap-3 rounded-xl border border-border-default bg-surface-1 p-4\">\n <Skeleton shape=\"rect\" className=\"h-32\" />\n <div className=\"flex items-center gap-3\">\n <Skeleton shape=\"circle\" className=\"h-8\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <Skeleton />\n <Skeleton className=\"w-2/3\" />\n </div>\n </div>\n </div>\n );\n}\n"
93
+ }
94
+ ]
95
+ },
96
+ "native": {
97
+ "entry": "@krizaka/ui/native",
98
+ "import": "import { Skeleton } from \"@krizaka/ui/native\";",
99
+ "differences": [
100
+ "`width` and `height` are props (points or a percentage), not classes."
101
+ ],
102
+ "props": [
103
+ {
104
+ "component": "Skeleton",
105
+ "description": "A pulsing placeholder the size of what is loading — hidden from screen readers; still when the system reduces motion.",
106
+ "props": [
107
+ {
108
+ "name": "height",
109
+ "type": "DimensionValue",
110
+ "default": null,
111
+ "description": "Points or a percentage; default: the shape's.",
112
+ "required": false
113
+ },
114
+ {
115
+ "name": "shape",
116
+ "type": "\"text\" | \"circle\" | \"rect\"",
117
+ "default": "text",
118
+ "description": "`text` (a line), `circle` (an avatar), `rect` (a media, a card).",
119
+ "required": false
120
+ },
121
+ {
122
+ "name": "style",
123
+ "type": "StyleProp<ViewStyle>",
124
+ "default": null,
125
+ "description": "Styles merged last.",
126
+ "required": false
127
+ },
128
+ {
129
+ "name": "testID",
130
+ "type": "string",
131
+ "default": null,
132
+ "description": "The id the tests find it by.",
133
+ "required": false
134
+ },
135
+ {
136
+ "name": "width",
137
+ "type": "DimensionValue",
138
+ "default": null,
139
+ "description": "Points or a percentage; default: the shape's.",
140
+ "required": false
141
+ }
142
+ ]
143
+ }
144
+ ],
145
+ "examples": [
146
+ {
147
+ "name": "shapes",
148
+ "title": "Shapes",
149
+ "description": "`text`, `circle` and `rect`, composed.",
150
+ "path": "examples/skeleton/native/shapes.tsx",
151
+ "module": "@krizaka/ui/registry/examples/skeleton/native/shapes",
152
+ "code": "import { Skeleton } from \"@krizaka/ui/native\";\nimport { View } from \"react-native\";\n\n// text · circle · rect, composed into what is loading; hidden from screen readers.\nexport default function NativeSkeletonShapes() {\n return (\n <View style={{ width: 320, gap: 12 }}>\n <View style={{ flexDirection: \"row\", gap: 12, alignItems: \"center\" }}>\n <Skeleton shape=\"circle\" />\n <View style={{ flex: 1, gap: 8 }}>\n <Skeleton shape=\"text\" width=\"60%\" />\n <Skeleton shape=\"text\" width=\"40%\" />\n </View>\n </View>\n <Skeleton shape=\"rect\" />\n </View>\n );\n}\n",
153
+ "screenshots": {
154
+ "dark": "examples/skeleton/native/shapes.dark.png",
155
+ "light": "examples/skeleton/native/shapes.light.png"
156
+ }
157
+ }
158
+ ]
159
+ },
5
160
  "files": [
161
+ {
162
+ "path": "meta.ts",
163
+ "content": "// The documentation of a component, carried by its code: each primitive has a `meta.ts` beside its source\n// (`src/<name>/meta.ts`; a component that exists only in React Native: `src/native/meta/<name>.ts`). Never built into\n// the package: `scripts/build-registry.mjs` reads them into `registry/<name>.json`, which krizaka.com renders as\n// /docs/ui/<name>, and `scripts/registry.test.mjs` fails when one is missing or incomplete.\n//\n// Why a typed module and not JSDoc tags: the fields are lists and links (`related`, `whenNotToUse[].use`, examples),\n// which a type checks and a comment does not; the file is plain data (erasable TypeScript), so Node reads it without a\n// compiler, and an editor completes it.\n\n/** Every documented component: the web primitives (one entry of the package each) and the native-only ones. */\nexport type ComponentName =\n | \"alert\"\n | \"avatar\"\n | \"badge\"\n | \"button\"\n | \"card\"\n | \"checkbox\"\n | \"chip\"\n | \"cn\"\n | \"command\"\n | \"confirm-button\"\n | \"countdown\"\n | \"dialog\"\n | \"dropdown-menu\"\n | \"empty-state\"\n | \"field\"\n | \"kbd\"\n | \"page-header\"\n | \"popover\"\n | \"progress\"\n | \"radio-group\"\n | \"section-backdrop\"\n | \"segmented\"\n | \"separator\"\n | \"skeleton\"\n | \"slider\"\n | \"slot\"\n | \"spinner\"\n | \"stat\"\n | \"switch\"\n | \"tabs\"\n | \"theme\"\n | \"toast\"\n | \"tooltip\"\n | \"txt\";\n\n/** Where a component exists: `@krizaka/ui/<name>` (web), `@krizaka/ui/native` (React Native), or both. */\nexport type Platform = \"web\" | \"native\" | \"both\";\n\n/** `stable`: its API only changes in a major. `beta`: it may still change in a minor. */\nexport type Status = \"stable\" | \"beta\";\n\n/** The group of the catalogue. */\nexport type Category = \"actions\" | \"forms\" | \"navigation\" | \"overlays\" | \"feedback\" | \"data-display\" | \"layout\" | \"foundations\";\n\n/**\n * A named example: the file `registry/examples/<component>/<name>.tsx` (web) or\n * `registry/examples/<component>/native/<name>.tsx` (React Native) — at most 40 lines, imported by the stories and\n * shown (live, with its code) by the documentation.\n */\nexport interface Example {\n /** The file name, kebab-case (`primary`, `icon-button`). */\n readonly name: string;\n /** A short title (`Primary`, `Icon button`). */\n readonly title: string;\n /** One or two sentences: when this variant is the right one. */\n readonly description: string;\n}\n\n/** One platform's side of a component. */\nexport interface PlatformDocs {\n /** The names to import (`[\"Button\", \"IconButton\"]`): from `@krizaka/ui/<name>` on the web, `@krizaka/ui/native` in React Native. */\n readonly imports: readonly string[];\n /** The examples, in reading order; the first one is the component's preview. */\n readonly examples: readonly Example[];\n}\n\n/** The React Native side: the same concept, and what differs from the web API. */\nexport interface NativeDocs extends PlatformDocs {\n /** What differs from the web API (`label` instead of children…); empty for a native-only component. */\n readonly differences: readonly string[];\n}\n\nexport interface KeyboardInteraction {\n /** The keys, as written on a keyboard: `Space`, `Enter`, `Arrow keys`, `Esc`, `Tab`. */\n readonly keys: string;\n /** What they do. */\n readonly action: string;\n}\n\nexport interface ComponentMeta {\n /** The display name: `Button`, `Dropdown menu`. */\n readonly title: string;\n /** One sentence: what it is. */\n readonly summary: string;\n readonly status: Status;\n readonly category: Category;\n /** Must match the sides below: `both` ⇔ `web` and `native`. */\n readonly platforms: Platform;\n /** When to reach for it: concrete situations, one per item. */\n readonly whenToUse: readonly string[];\n /** When not to — and what to use instead (`use`), when another component is the answer. */\n readonly whenNotToUse: readonly { readonly when: string; readonly use?: ComponentName }[];\n /** How to use it well: wording, placement, composition. */\n readonly bestPractices: readonly string[];\n readonly accessibility: {\n /** The keyboard, when it does more than Tab and Enter. */\n readonly keyboard: readonly KeyboardInteraction[];\n /** Roles, names and announcements: what the component does, what the app must provide. */\n readonly notes: readonly string[];\n };\n /** The components a reader of this page should know about. */\n readonly related: readonly ComponentName[];\n readonly web?: PlatformDocs;\n readonly native?: NativeDocs;\n}\n"
164
+ },
6
165
  {
7
166
  "path": "skeleton/index.ts",
8
167
  "content": "/** @krizaka/ui/skeleton — `Skeleton`, `skeletonVariants`. Server-safe. */\nexport { Skeleton, type SkeletonProps, skeletonVariants } from \"./skeleton\";\n"
9
168
  },
169
+ {
170
+ "path": "skeleton/meta.ts",
171
+ "content": "import type { ComponentMeta } from \"../meta\";\n\nexport const meta = {\n title: \"Skeleton\",\n summary: \"A placeholder the shape of what is loading: a line, a circle or a block.\",\n status: \"stable\",\n category: \"feedback\",\n platforms: \"both\",\n whenToUse: [\"While a list, a card or a profile loads, in its final layout: the page does not jump when it arrives.\"],\n whenNotToUse: [\n { when: \"For an action the user is waiting on (a save).\", use: \"spinner\" },\n { when: \"When there is nothing to load.\", use: \"empty-state\" },\n { when: \"For the progress of a task.\", use: \"progress\" },\n ],\n bestPractices: [\n \"Compose the shapes like the content: an avatar circle, two lines, a media block.\",\n \"Show skeletons only after a short delay on fast connections, and never for more than a few seconds without a message.\",\n ],\n accessibility: {\n keyboard: [],\n notes: [\n \"Decorative and hidden from assistive technology: announce the wait elsewhere (`aria-busy` on the region, a `Spinner`).\",\n \"The pulse stops under `prefers-reduced-motion`.\",\n ],\n },\n related: [\"spinner\", \"empty-state\", \"card\"],\n web: {\n imports: [\"Skeleton\"],\n examples: [\n { name: \"text\", title: \"Text\", description: \"A line of text.\" },\n { name: \"circle\", title: \"Circle\", description: \"An avatar.\" },\n { name: \"rect\", title: \"Rect\", description: \"A media or a block.\" },\n { name: \"composition\", title: \"Composition\", description: \"Shapes composed into a card being loaded.\" },\n ],\n },\n native: {\n imports: [\"Skeleton\"],\n differences: [\"`width` and `height` are props (points or a percentage), not classes.\"],\n examples: [{ name: \"shapes\", title: \"Shapes\", description: \"`text`, `circle` and `rect`, composed.\" }],\n },\n} satisfies ComponentMeta;\n"
172
+ },
10
173
  {
11
174
  "path": "skeleton/skeleton.tsx",
12
175
  "content": "// Server-safe. A placeholder for content on its way: decorative, so hidden from assistive technology.\nimport type * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nexport const skeletonVariants = tv({\n base: \"block bg-surface-3 motion-safe:animate-pulse\",\n variants: {\n shape: { text: \"h-3 w-full rounded-sm\", circle: \"aspect-square h-10 rounded-full\", rect: \"h-24 w-full rounded-lg\" },\n },\n defaultVariants: { shape: \"text\" },\n});\n\nexport type SkeletonProps = React.ComponentProps<\"span\"> & {\n /**\n * text (a line) · circle (an avatar; give it a height) · rect (a media; give it a height).\n * @default \"text\"\n */\n shape?: VariantProps<typeof skeletonVariants>[\"shape\"];\n};\n\n/** A pulsing shape the size of what is loading. Announce the wait elsewhere (aria-busy on the region, a Spinner). */\nexport function Skeleton({ shape, className, ...props }: SkeletonProps) {\n return <span aria-hidden data-shape={shape ?? \"text\"} className={skeletonVariants({ shape, className })} {...props} />;\n}\n"
@@ -17,8 +180,8 @@
17
180
  ],
18
181
  "registryDependencies": [],
19
182
  "demo": {
20
- "path": "demos/skeleton.tsx",
21
- "content": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonDemo() {\n return (\n <div className=\"flex flex-col gap-3 rounded-xl border border-border-default bg-surface-1 p-4\">\n <Skeleton shape=\"rect\" className=\"h-32\" />\n <div className=\"flex items-center gap-3\">\n <Skeleton shape=\"circle\" className=\"h-8\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <Skeleton />\n <Skeleton className=\"w-2/3\" />\n </div>\n </div>\n </div>\n );\n}\n"
183
+ "path": "examples/skeleton/text.tsx",
184
+ "content": "import { Skeleton } from \"@krizaka/ui/skeleton\";\n\nexport default function SkeletonText() {\n return <Skeleton />;\n}\n"
22
185
  },
23
186
  "props": [
24
187
  {