@krizaka/ui 3.34.0 → 3.36.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 (589) hide show
  1. package/dist/account-menu.js +1 -1
  2. package/dist/account-menu.js.map +1 -1
  3. package/dist/activity-feed.js +1 -1
  4. package/dist/activity-feed.js.map +1 -1
  5. package/dist/anatomy-plate.d.ts +26 -0
  6. package/dist/anatomy-plate.js +32 -0
  7. package/dist/anatomy-plate.js.map +1 -0
  8. package/dist/app-header.js +1 -1
  9. package/dist/app-header.js.map +1 -1
  10. package/dist/app-shell.js +3 -3
  11. package/dist/app-shell.js.map +1 -1
  12. package/dist/argument-card.js +1 -1
  13. package/dist/bird-plate.d.ts +38 -0
  14. package/dist/bird-plate.js +39 -0
  15. package/dist/bird-plate.js.map +1 -0
  16. package/dist/blocks.css +243 -46
  17. package/dist/checkbox.js +1 -1
  18. package/dist/checkbox.js.map +1 -1
  19. package/dist/chip-row.js +1 -1
  20. package/dist/chip-row.js.map +1 -1
  21. package/dist/{chunk-3S4GHSPZ.js → chunk-63KCDMX2.js} +3 -3
  22. package/dist/chunk-63KCDMX2.js.map +1 -0
  23. package/dist/{chunk-NJFCSVPT.js → chunk-6EAHUURY.js} +2 -2
  24. package/dist/chunk-6EAHUURY.js.map +1 -0
  25. package/dist/{chunk-REPTKUJ6.js → chunk-7NRSPHAF.js} +2 -2
  26. package/dist/chunk-7NRSPHAF.js.map +1 -0
  27. package/dist/{chunk-2AJ4NJUF.js → chunk-IANSFIVC.js} +5 -1
  28. package/dist/chunk-IANSFIVC.js.map +1 -0
  29. package/dist/chunk-JFJECOZ2.js +338 -0
  30. package/dist/chunk-JFJECOZ2.js.map +1 -0
  31. package/dist/{chunk-KIBICUZK.js → chunk-K2ZYB4HP.js} +4 -4
  32. package/dist/{chunk-7Z4KHPFC.js → chunk-YGIN2YIY.js} +2 -2
  33. package/dist/{chunk-7Z4KHPFC.js.map → chunk-YGIN2YIY.js.map} +1 -1
  34. package/dist/{chunk-LZNZLCOE.js → chunk-YKEIOYJ5.js} +20 -6
  35. package/dist/chunk-YKEIOYJ5.js.map +1 -0
  36. package/dist/{chunk-2PNLHZLT.js → chunk-YOTQD7JD.js} +2 -2
  37. package/dist/chunk-YOTQD7JD.js.map +1 -0
  38. package/dist/command.js +3 -3
  39. package/dist/command.js.map +1 -1
  40. package/dist/comparison-table.js +2 -2
  41. package/dist/comparison-table.js.map +1 -1
  42. package/dist/countdown.js +1 -1
  43. package/dist/countdown.js.map +1 -1
  44. package/dist/cover-hero.js +15 -6
  45. package/dist/cover-hero.js.map +1 -1
  46. package/dist/dashboard-layout.js +1 -1
  47. package/dist/dashboard-layout.js.map +1 -1
  48. package/dist/data-table.js +4 -4
  49. package/dist/date-picker.js +3 -3
  50. package/dist/date-picker.js.map +1 -1
  51. package/dist/description-list.js +1 -1
  52. package/dist/description-list.js.map +1 -1
  53. package/dist/detail-layout.js +1 -1
  54. package/dist/detail-layout.js.map +1 -1
  55. package/dist/dialog.js +1 -1
  56. package/dist/docs-nav.js +1 -1
  57. package/dist/docs-nav.js.map +1 -1
  58. package/dist/dropdown-menu.js +1 -1
  59. package/dist/dropdown-menu.js.map +1 -1
  60. package/dist/filter-bar.js +1 -1
  61. package/dist/footnote.d.ts +32 -0
  62. package/dist/footnote.js +29 -0
  63. package/dist/footnote.js.map +1 -0
  64. package/dist/genui.js +4 -4
  65. package/dist/geometry-DncHaYP8.d.ts +22 -0
  66. package/dist/language-switch.js +1 -1
  67. package/dist/list.js +1 -1
  68. package/dist/loader.js +2 -2
  69. package/dist/loader.js.map +1 -1
  70. package/dist/map.js +95 -83
  71. package/dist/map.js.map +1 -1
  72. package/dist/mascot-quote.d.ts +2 -21
  73. package/dist/mascot-quote.js +9 -338
  74. package/dist/mascot-quote.js.map +1 -1
  75. package/dist/match-dialog.js +1 -1
  76. package/dist/match-dialog.js.map +1 -1
  77. package/dist/meter.js +1 -1
  78. package/dist/meter.js.map +1 -1
  79. package/dist/motion.css +28 -41
  80. package/dist/native/map.js +94 -82
  81. package/dist/native/map.js.map +1 -1
  82. package/dist/native.d.ts +8 -1
  83. package/dist/native.js +53 -41
  84. package/dist/native.js.map +1 -1
  85. package/dist/nav-bar.d.ts +1 -1
  86. package/dist/nav-bar.js +9 -9
  87. package/dist/nav-bar.js.map +1 -1
  88. package/dist/page-hero.js +1 -1
  89. package/dist/page-index.d.ts +30 -0
  90. package/dist/page-index.js +23 -0
  91. package/dist/page-index.js.map +1 -0
  92. package/dist/page.d.ts +19 -7
  93. package/dist/page.js +1 -1
  94. package/dist/photo-grid.js +2 -2
  95. package/dist/photo-grid.js.map +1 -1
  96. package/dist/radio-group.js +1 -1
  97. package/dist/radio-group.js.map +1 -1
  98. package/dist/rail-nav.js +1 -1
  99. package/dist/rail-nav.js.map +1 -1
  100. package/dist/search-field.js +1 -1
  101. package/dist/service-card.js +2 -2
  102. package/dist/service-card.js.map +1 -1
  103. package/dist/site-footer.d.ts +1 -1
  104. package/dist/site-footer.js +3 -3
  105. package/dist/site-footer.js.map +1 -1
  106. package/dist/{sites-B4prB793.d.ts → sites-B4sYlfPQ.d.ts} +1 -1
  107. package/dist/sites.d.ts +1 -1
  108. package/dist/sites.js +4 -0
  109. package/dist/sites.js.map +1 -1
  110. package/dist/specimen-tag.d.ts +52 -0
  111. package/dist/specimen-tag.js +33 -0
  112. package/dist/specimen-tag.js.map +1 -0
  113. package/dist/stat.js +1 -1
  114. package/dist/stat.js.map +1 -1
  115. package/dist/sticky-action.d.ts +1 -1
  116. package/dist/sticky-action.js +1 -1
  117. package/dist/sticky-action.js.map +1 -1
  118. package/dist/swipe-deck.js +1 -1
  119. package/dist/swipe-deck.js.map +1 -1
  120. package/package.json +78 -8
  121. package/registry/account-menu.json +1 -1
  122. package/registry/achievement.json +1 -1
  123. package/registry/action-bar.json +1 -1
  124. package/registry/activity-feed.json +2 -2
  125. package/registry/alert.json +1 -1
  126. package/registry/anatomy-plate.json +168 -0
  127. package/registry/app-header.json +2 -2
  128. package/registry/app-shell.json +2 -2
  129. package/registry/argument-card.json +1 -1
  130. package/registry/audio-player.json +1 -1
  131. package/registry/auth-layout.json +1 -1
  132. package/registry/avatar.json +1 -1
  133. package/registry/badge.json +1 -1
  134. package/registry/bird-plate.json +221 -0
  135. package/registry/button.json +1 -1
  136. package/registry/captcha.json +1 -1
  137. package/registry/card-grid.json +1 -1
  138. package/registry/card.json +1 -1
  139. package/registry/catalogue-page.json +1 -1
  140. package/registry/changelog-page.json +1 -1
  141. package/registry/chat.json +3 -3
  142. package/registry/checkbox.json +2 -2
  143. package/registry/chip-link.json +1 -1
  144. package/registry/chip-row.json +2 -2
  145. package/registry/chip.json +1 -1
  146. package/registry/choice-grid.json +1 -1
  147. package/registry/code-block.json +1 -1
  148. package/registry/combobox.json +1 -1
  149. package/registry/command.json +2 -2
  150. package/registry/comparison-table.json +2 -2
  151. package/registry/component-page.json +1 -1
  152. package/registry/confirm-button.json +1 -1
  153. package/registry/contact-page.json +1 -1
  154. package/registry/continue-prompt.json +1 -1
  155. package/registry/countdown.json +2 -2
  156. package/registry/cover-hero.json +2 -2
  157. package/registry/cta-panel.json +1 -1
  158. package/registry/dashboard-layout.json +2 -2
  159. package/registry/data-table.json +1 -1
  160. package/registry/date-picker.json +4 -4
  161. package/registry/decision-list.json +1 -1
  162. package/registry/description-list.json +2 -2
  163. package/registry/detail-layout.json +2 -2
  164. package/registry/dialog.json +2 -2
  165. package/registry/docs-article-page.json +1 -1
  166. package/registry/docs-hub-page.json +1 -1
  167. package/registry/docs-layout.json +1 -1
  168. package/registry/docs-nav.json +2 -2
  169. package/registry/document-viewer.json +1 -1
  170. package/registry/dropdown-menu.json +2 -2
  171. package/registry/empty-state.json +1 -1
  172. package/registry/engine-flow.json +1 -1
  173. package/registry/error-page.json +1 -1
  174. package/registry/examples/action-sheet/native/video-actions.dark.png +0 -0
  175. package/registry/examples/action-sheet/native/video-actions.light.png +0 -0
  176. package/registry/examples/activity-feed/native/notifications.dark.png +0 -0
  177. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  178. package/registry/examples/anatomy-plate/button.d.ts +4 -0
  179. package/registry/examples/anatomy-plate/button.js +25 -0
  180. package/registry/examples/anatomy-plate/button.tsx +20 -0
  181. package/registry/examples/avatar/native/group.dark.png +0 -0
  182. package/registry/examples/avatar/native/group.light.png +0 -0
  183. package/registry/examples/avatar/native/presence.dark.png +0 -0
  184. package/registry/examples/avatar/native/presence.light.png +0 -0
  185. package/registry/examples/avatar/native/sizes.dark.png +0 -0
  186. package/registry/examples/avatar/native/sizes.light.png +0 -0
  187. package/registry/examples/badge/native/dot.dark.png +0 -0
  188. package/registry/examples/badge/native/dot.light.png +0 -0
  189. package/registry/examples/badge/native/scrim.dark.png +0 -0
  190. package/registry/examples/badge/native/scrim.light.png +0 -0
  191. package/registry/examples/badge/native/tones.dark.png +0 -0
  192. package/registry/examples/badge/native/tones.light.png +0 -0
  193. package/registry/examples/bird-plate/flock.d.ts +4 -0
  194. package/registry/examples/bird-plate/flock.js +24 -0
  195. package/registry/examples/bird-plate/flock.tsx +18 -0
  196. package/registry/examples/bird-plate/single.d.ts +4 -0
  197. package/registry/examples/bird-plate/single.js +19 -0
  198. package/registry/examples/bird-plate/single.tsx +13 -0
  199. package/registry/examples/button/native/danger.dark.png +0 -0
  200. package/registry/examples/button/native/danger.light.png +0 -0
  201. package/registry/examples/button/native/disabled.dark.png +0 -0
  202. package/registry/examples/button/native/disabled.light.png +0 -0
  203. package/registry/examples/button/native/ghost.dark.png +0 -0
  204. package/registry/examples/button/native/ghost.light.png +0 -0
  205. package/registry/examples/button/native/gradient.dark.png +0 -0
  206. package/registry/examples/button/native/gradient.light.png +0 -0
  207. package/registry/examples/button/native/icon-only.dark.png +0 -0
  208. package/registry/examples/button/native/icon-only.light.png +0 -0
  209. package/registry/examples/button/native/icon.dark.png +0 -0
  210. package/registry/examples/button/native/icon.light.png +0 -0
  211. package/registry/examples/button/native/loading.dark.png +0 -0
  212. package/registry/examples/button/native/loading.light.png +0 -0
  213. package/registry/examples/button/native/outline.dark.png +0 -0
  214. package/registry/examples/button/native/outline.light.png +0 -0
  215. package/registry/examples/button/native/primary.dark.png +0 -0
  216. package/registry/examples/button/native/primary.light.png +0 -0
  217. package/registry/examples/button/native/secondary.dark.png +0 -0
  218. package/registry/examples/button/native/secondary.light.png +0 -0
  219. package/registry/examples/button/native/sizes.dark.png +0 -0
  220. package/registry/examples/button/native/sizes.light.png +0 -0
  221. package/registry/examples/card/native/body.dark.png +0 -0
  222. package/registry/examples/card/native/body.light.png +0 -0
  223. package/registry/examples/card/native/default.dark.png +0 -0
  224. package/registry/examples/card/native/default.light.png +0 -0
  225. package/registry/examples/card/native/elevated.dark.png +0 -0
  226. package/registry/examples/card/native/elevated.light.png +0 -0
  227. package/registry/examples/card/native/pressable.dark.png +0 -0
  228. package/registry/examples/card/native/pressable.light.png +0 -0
  229. package/registry/examples/chat/native/assistant.dark.png +0 -0
  230. package/registry/examples/chat/native/assistant.light.png +0 -0
  231. package/registry/examples/chat/native/conversation.dark.png +0 -0
  232. package/registry/examples/chat/native/conversation.light.png +0 -0
  233. package/registry/examples/chat/native/inbox.dark.png +0 -0
  234. package/registry/examples/chat/native/inbox.light.png +0 -0
  235. package/registry/examples/checkbox/native/terms.dark.png +0 -0
  236. package/registry/examples/checkbox/native/terms.light.png +0 -0
  237. package/registry/examples/chip/native/multiple.dark.png +0 -0
  238. package/registry/examples/chip/native/multiple.light.png +0 -0
  239. package/registry/examples/chip/native/removable.dark.png +0 -0
  240. package/registry/examples/chip/native/removable.light.png +0 -0
  241. package/registry/examples/chip/native/single.dark.png +0 -0
  242. package/registry/examples/chip/native/single.light.png +0 -0
  243. package/registry/examples/chip/native/toggle.dark.png +0 -0
  244. package/registry/examples/chip/native/toggle.light.png +0 -0
  245. package/registry/examples/combobox/native/multiple.dark.png +0 -0
  246. package/registry/examples/combobox/native/multiple.light.png +0 -0
  247. package/registry/examples/combobox/native/search.dark.png +0 -0
  248. package/registry/examples/combobox/native/search.light.png +0 -0
  249. package/registry/examples/countdown/native/days.dark.png +0 -0
  250. package/registry/examples/countdown/native/days.light.png +0 -0
  251. package/registry/examples/countdown/native/hours.dark.png +0 -0
  252. package/registry/examples/countdown/native/hours.light.png +0 -0
  253. package/registry/examples/countdown/native/sizes.dark.png +0 -0
  254. package/registry/examples/countdown/native/sizes.light.png +0 -0
  255. package/registry/examples/countdown/native/urgent.dark.png +0 -0
  256. package/registry/examples/countdown/native/urgent.light.png +0 -0
  257. package/registry/examples/countdown/native/with-label.dark.png +0 -0
  258. package/registry/examples/countdown/native/with-label.light.png +0 -0
  259. package/registry/examples/date-picker/native/birth-date-wheel.dark.png +0 -0
  260. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  261. package/registry/examples/date-picker/native/birth-date.dark.png +0 -0
  262. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  263. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  264. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  265. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  266. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  267. package/registry/examples/date-picker/native/month-year.dark.png +0 -0
  268. package/registry/examples/date-picker/native/month-year.light.png +0 -0
  269. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  270. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  271. package/registry/examples/date-picker/native/time-wheel.dark.png +0 -0
  272. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  273. package/registry/examples/description-list/native/job-details.dark.png +0 -0
  274. package/registry/examples/description-list/native/job-details.light.png +0 -0
  275. package/registry/examples/dialog/native/sheet.dark.png +0 -0
  276. package/registry/examples/dialog/native/sheet.light.png +0 -0
  277. package/registry/examples/empty-state/native/default.dark.png +0 -0
  278. package/registry/examples/empty-state/native/default.light.png +0 -0
  279. package/registry/examples/fab/native/extended.dark.png +0 -0
  280. package/registry/examples/fab/native/extended.light.png +0 -0
  281. package/registry/examples/field/native/default.dark.png +0 -0
  282. package/registry/examples/field/native/default.light.png +0 -0
  283. package/registry/examples/field/native/select.dark.png +0 -0
  284. package/registry/examples/field/native/select.light.png +0 -0
  285. package/registry/examples/footnote/notes.d.ts +4 -0
  286. package/registry/examples/footnote/notes.js +24 -0
  287. package/registry/examples/footnote/notes.tsx +19 -0
  288. package/registry/examples/force-update-screen/native/default.dark.png +0 -0
  289. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  290. package/registry/examples/form/native/amount.dark.png +0 -0
  291. package/registry/examples/form/native/amount.light.png +0 -0
  292. package/registry/examples/form/native/audience.dark.png +0 -0
  293. package/registry/examples/form/native/audience.light.png +0 -0
  294. package/registry/examples/form/native/profile.dark.png +0 -0
  295. package/registry/examples/form/native/profile.light.png +0 -0
  296. package/registry/examples/form/native/settings.dark.png +0 -0
  297. package/registry/examples/form/native/settings.light.png +0 -0
  298. package/registry/examples/form/native/sign-up.dark.png +0 -0
  299. package/registry/examples/form/native/sign-up.light.png +0 -0
  300. package/registry/examples/form/native/upload.dark.png +0 -0
  301. package/registry/examples/form/native/upload.light.png +0 -0
  302. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  303. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  304. package/registry/examples/header/native/large-title.dark.png +0 -0
  305. package/registry/examples/header/native/large-title.light.png +0 -0
  306. package/registry/examples/image-viewer/native/gallery.dark.png +0 -0
  307. package/registry/examples/image-viewer/native/gallery.light.png +0 -0
  308. package/registry/examples/list/native/default.dark.png +0 -0
  309. package/registry/examples/list/native/default.light.png +0 -0
  310. package/registry/examples/list/native/infinite.dark.png +0 -0
  311. package/registry/examples/list/native/infinite.light.png +0 -0
  312. package/registry/examples/list/native/states.dark.png +0 -0
  313. package/registry/examples/list/native/states.light.png +0 -0
  314. package/registry/examples/loader/native/block.dark.png +0 -0
  315. package/registry/examples/loader/native/block.light.png +0 -0
  316. package/registry/examples/loader/native/branded.dark.png +0 -0
  317. package/registry/examples/loader/native/branded.light.png +0 -0
  318. package/registry/examples/loader/native/job-wait.dark.png +0 -0
  319. package/registry/examples/loader/native/job-wait.light.png +0 -0
  320. package/registry/examples/maintenance-screen/native/default.dark.png +0 -0
  321. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  322. package/registry/examples/map/native/location-picker.dark.png +0 -0
  323. package/registry/examples/map/native/location-picker.light.png +0 -0
  324. package/registry/examples/map/native/places.dark.png +0 -0
  325. package/registry/examples/map/native/places.light.png +0 -0
  326. package/registry/examples/markdown/native/ai-stream.dark.png +0 -0
  327. package/registry/examples/markdown/native/ai-stream.light.png +0 -0
  328. package/registry/examples/markdown/native/basic.dark.png +0 -0
  329. package/registry/examples/markdown/native/basic.light.png +0 -0
  330. package/registry/examples/mascot-state/native/default.dark.png +0 -0
  331. package/registry/examples/mascot-state/native/default.light.png +0 -0
  332. package/registry/examples/mascots/native/crane.dark.png +0 -0
  333. package/registry/examples/mascots/native/crane.light.png +0 -0
  334. package/registry/examples/mascots/native/default.dark.png +0 -0
  335. package/registry/examples/mascots/native/default.light.png +0 -0
  336. package/registry/examples/mascots/native/lovebird.dark.png +0 -0
  337. package/registry/examples/mascots/native/lovebird.light.png +0 -0
  338. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  339. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  340. package/registry/examples/match-dialog/native/its-a-match.dark.png +0 -0
  341. package/registry/examples/match-dialog/native/its-a-match.light.png +0 -0
  342. package/registry/examples/media-capture/native/photo.dark.png +0 -0
  343. package/registry/examples/media-capture/native/photo.light.png +0 -0
  344. package/registry/examples/media-picker/native/story.dark.png +0 -0
  345. package/registry/examples/media-picker/native/story.light.png +0 -0
  346. package/registry/examples/meta-row/native/video.dark.png +0 -0
  347. package/registry/examples/meta-row/native/video.light.png +0 -0
  348. package/registry/examples/meter/native/credits.dark.png +0 -0
  349. package/registry/examples/meter/native/credits.light.png +0 -0
  350. package/registry/examples/meter/native/split-ring.dark.png +0 -0
  351. package/registry/examples/meter/native/split-ring.light.png +0 -0
  352. package/registry/examples/number-ticker/native/balance.dark.png +0 -0
  353. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  354. package/registry/examples/onboarding/native/first-launch.dark.png +0 -0
  355. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  356. package/registry/examples/otp-input/native/invalid.dark.png +0 -0
  357. package/registry/examples/otp-input/native/invalid.light.png +0 -0
  358. package/registry/examples/otp-input/native/verify.dark.png +0 -0
  359. package/registry/examples/otp-input/native/verify.light.png +0 -0
  360. package/registry/examples/page-index/docs.d.ts +4 -0
  361. package/registry/examples/page-index/docs.js +33 -0
  362. package/registry/examples/page-index/docs.tsx +27 -0
  363. package/registry/examples/pagination/native/cursor.dark.png +0 -0
  364. package/registry/examples/pagination/native/cursor.light.png +0 -0
  365. package/registry/examples/pagination/native/pages.dark.png +0 -0
  366. package/registry/examples/pagination/native/pages.light.png +0 -0
  367. package/registry/examples/permission-prompt/native/blocked.dark.png +0 -0
  368. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  369. package/registry/examples/permission-prompt/native/camera.dark.png +0 -0
  370. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  371. package/registry/examples/photo-grid/native/profile-photos.dark.png +0 -0
  372. package/registry/examples/photo-grid/native/profile-photos.light.png +0 -0
  373. package/registry/examples/profile-card/native/default.dark.png +0 -0
  374. package/registry/examples/profile-card/native/default.light.png +0 -0
  375. package/registry/examples/progress/native/bar.dark.png +0 -0
  376. package/registry/examples/progress/native/bar.light.png +0 -0
  377. package/registry/examples/progress/native/indeterminate.dark.png +0 -0
  378. package/registry/examples/progress/native/indeterminate.light.png +0 -0
  379. package/registry/examples/progress/native/ring.dark.png +0 -0
  380. package/registry/examples/progress/native/ring.light.png +0 -0
  381. package/registry/examples/pull-to-refresh/native/branded.dark.png +0 -0
  382. package/registry/examples/pull-to-refresh/native/branded.light.png +0 -0
  383. package/registry/examples/pull-to-refresh/native/feed.dark.png +0 -0
  384. package/registry/examples/pull-to-refresh/native/feed.light.png +0 -0
  385. package/registry/examples/radio-group/native/buttons.dark.png +0 -0
  386. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  387. package/registry/examples/radio-group/native/cards.dark.png +0 -0
  388. package/registry/examples/radio-group/native/cards.light.png +0 -0
  389. package/registry/examples/radio-group/native/list.dark.png +0 -0
  390. package/registry/examples/radio-group/native/list.light.png +0 -0
  391. package/registry/examples/radio-group/native/segmented.dark.png +0 -0
  392. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  393. package/registry/examples/screen/native/app-shell.dark.png +0 -0
  394. package/registry/examples/screen/native/app-shell.light.png +0 -0
  395. package/registry/examples/screen/native/auth.dark.png +0 -0
  396. package/registry/examples/screen/native/auth.light.png +0 -0
  397. package/registry/examples/screen/native/chat.dark.png +0 -0
  398. package/registry/examples/screen/native/chat.light.png +0 -0
  399. package/registry/examples/screen/native/feed.dark.png +0 -0
  400. package/registry/examples/screen/native/feed.light.png +0 -0
  401. package/registry/examples/screen/native/map.dark.png +0 -0
  402. package/registry/examples/screen/native/map.light.png +0 -0
  403. package/registry/examples/screen/native/notifications.dark.png +0 -0
  404. package/registry/examples/screen/native/notifications.light.png +0 -0
  405. package/registry/examples/screen/native/profile.dark.png +0 -0
  406. package/registry/examples/screen/native/profile.light.png +0 -0
  407. package/registry/examples/screen/native/settings.dark.png +0 -0
  408. package/registry/examples/screen/native/settings.light.png +0 -0
  409. package/registry/examples/search-field/native/cancel.dark.png +0 -0
  410. package/registry/examples/search-field/native/cancel.light.png +0 -0
  411. package/registry/examples/search-field/native/default.dark.png +0 -0
  412. package/registry/examples/search-field/native/default.light.png +0 -0
  413. package/registry/examples/segmented/native/default.dark.png +0 -0
  414. package/registry/examples/segmented/native/default.light.png +0 -0
  415. package/registry/examples/segmented/native/small.dark.png +0 -0
  416. package/registry/examples/segmented/native/small.light.png +0 -0
  417. package/registry/examples/settings-layout/native/account.dark.png +0 -0
  418. package/registry/examples/settings-layout/native/account.light.png +0 -0
  419. package/registry/examples/showcase/native/slides.dark.png +0 -0
  420. package/registry/examples/showcase/native/slides.light.png +0 -0
  421. package/registry/examples/skeleton/native/shapes.dark.png +0 -0
  422. package/registry/examples/skeleton/native/shapes.light.png +0 -0
  423. package/registry/examples/slider/native/default.dark.png +0 -0
  424. package/registry/examples/slider/native/default.light.png +0 -0
  425. package/registry/examples/slider/native/range.dark.png +0 -0
  426. package/registry/examples/slider/native/range.light.png +0 -0
  427. package/registry/examples/slider/native/stepped.dark.png +0 -0
  428. package/registry/examples/slider/native/stepped.light.png +0 -0
  429. package/registry/examples/slider/native/vertical.dark.png +0 -0
  430. package/registry/examples/slider/native/vertical.light.png +0 -0
  431. package/registry/examples/specimen-tag/product.d.ts +4 -0
  432. package/registry/examples/specimen-tag/product.js +28 -0
  433. package/registry/examples/specimen-tag/product.tsx +25 -0
  434. package/registry/examples/specimen-tag/stamps.d.ts +4 -0
  435. package/registry/examples/specimen-tag/stamps.js +16 -0
  436. package/registry/examples/specimen-tag/stamps.tsx +13 -0
  437. package/registry/examples/specimen-tag/wire.d.ts +4 -0
  438. package/registry/examples/specimen-tag/wire.js +16 -0
  439. package/registry/examples/specimen-tag/wire.tsx +20 -0
  440. package/registry/examples/spinner/native/sizes.dark.png +0 -0
  441. package/registry/examples/spinner/native/sizes.light.png +0 -0
  442. package/registry/examples/splash-handoff/native/default.dark.png +0 -0
  443. package/registry/examples/splash-handoff/native/default.light.png +0 -0
  444. package/registry/examples/step-progress/native/sign-up.dark.png +0 -0
  445. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  446. package/registry/examples/stepper/native/run.dark.png +0 -0
  447. package/registry/examples/stepper/native/run.light.png +0 -0
  448. package/registry/examples/swipe-deck/native/discover.dark.png +0 -0
  449. package/registry/examples/swipe-deck/native/discover.light.png +0 -0
  450. package/registry/examples/swipeable-row/native/conversation.dark.png +0 -0
  451. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  452. package/registry/examples/switch/native/default.dark.png +0 -0
  453. package/registry/examples/switch/native/default.light.png +0 -0
  454. package/registry/examples/switch/native/settings.dark.png +0 -0
  455. package/registry/examples/switch/native/settings.light.png +0 -0
  456. package/registry/examples/tab-bar/native/main-sections.dark.png +0 -0
  457. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  458. package/registry/examples/tabs/native/sections.dark.png +0 -0
  459. package/registry/examples/tabs/native/sections.light.png +0 -0
  460. package/registry/examples/tabs/native/segmented.dark.png +0 -0
  461. package/registry/examples/tabs/native/segmented.light.png +0 -0
  462. package/registry/examples/tag-selector/native/interests.dark.png +0 -0
  463. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  464. package/registry/examples/toast/native/notification.dark.png +0 -0
  465. package/registry/examples/toast/native/notification.light.png +0 -0
  466. package/registry/examples/toast/native/snackbar.dark.png +0 -0
  467. package/registry/examples/toast/native/snackbar.light.png +0 -0
  468. package/registry/examples/toast/native/tones.dark.png +0 -0
  469. package/registry/examples/toast/native/tones.light.png +0 -0
  470. package/registry/examples/txt/native/tones.dark.png +0 -0
  471. package/registry/examples/txt/native/tones.light.png +0 -0
  472. package/registry/examples/txt/native/variants.dark.png +0 -0
  473. package/registry/examples/txt/native/variants.light.png +0 -0
  474. package/registry/examples/update-prompt/native/default.dark.png +0 -0
  475. package/registry/examples/update-prompt/native/default.light.png +0 -0
  476. package/registry/examples/verified-badge/native/verified.dark.png +0 -0
  477. package/registry/examples/verified-badge/native/verified.light.png +0 -0
  478. package/registry/examples/vertical-video/native/rail.dark.png +0 -0
  479. package/registry/examples/vertical-video/native/rail.light.png +0 -0
  480. package/registry/examples/video-player/native/default.dark.png +0 -0
  481. package/registry/examples/video-player/native/default.light.png +0 -0
  482. package/registry/examples/waveform/native/card.dark.png +0 -0
  483. package/registry/examples/waveform/native/card.light.png +0 -0
  484. package/registry/field.json +1 -1
  485. package/registry/file-upload.json +1 -1
  486. package/registry/filter-bar.json +1 -1
  487. package/registry/footnote.json +220 -0
  488. package/registry/force-update-screen.json +1 -1
  489. package/registry/form.json +3 -3
  490. package/registry/gallery-page.json +1 -1
  491. package/registry/genui.json +1 -1
  492. package/registry/glow-card.json +1 -1
  493. package/registry/goal-gauge.json +1 -1
  494. package/registry/how-it-works-page.json +1 -1
  495. package/registry/image-cropper.json +1 -1
  496. package/registry/index.json +160 -5
  497. package/registry/iso.json +1 -1
  498. package/registry/kanban.json +1 -1
  499. package/registry/kbd.json +1 -1
  500. package/registry/landing-page.json +1 -1
  501. package/registry/landscape.json +1 -1
  502. package/registry/language-switch.json +2 -2
  503. package/registry/legal-page.json +1 -1
  504. package/registry/link-card.json +1 -1
  505. package/registry/list.json +1 -1
  506. package/registry/loader.json +2 -2
  507. package/registry/longform-page.json +1 -1
  508. package/registry/maintenance-screen.json +1 -1
  509. package/registry/map.json +3 -3
  510. package/registry/markdown.json +1 -1
  511. package/registry/marketing-layout.json +1 -1
  512. package/registry/marquee.json +1 -1
  513. package/registry/mascot-quote.json +1 -1
  514. package/registry/mascot-state.json +1 -1
  515. package/registry/mascots.json +1 -1
  516. package/registry/match-dialog.json +1 -1
  517. package/registry/media-capture.json +1 -1
  518. package/registry/media-gallery.json +1 -1
  519. package/registry/media-grid.json +1 -1
  520. package/registry/meta-row.json +1 -1
  521. package/registry/meter.json +2 -2
  522. package/registry/nav-bar.json +3 -3
  523. package/registry/number-ticker.json +1 -1
  524. package/registry/opening-hours.json +1 -1
  525. package/registry/page-header.json +1 -1
  526. package/registry/page-hero.json +1 -1
  527. package/registry/page-index.json +168 -0
  528. package/registry/page.json +89 -5
  529. package/registry/pagination.json +1 -1
  530. package/registry/photo-grid.json +2 -2
  531. package/registry/pointer-light.json +1 -1
  532. package/registry/popover.json +1 -1
  533. package/registry/pricing-page.json +1 -1
  534. package/registry/product-page.json +1 -1
  535. package/registry/profile-card.json +1 -1
  536. package/registry/progress.json +1 -1
  537. package/registry/promise-card.json +1 -1
  538. package/registry/radio-group.json +2 -2
  539. package/registry/rail-nav.json +3 -3
  540. package/registry/recipes.json +1 -1
  541. package/registry/scroll-stage.json +1 -1
  542. package/registry/search-field.json +2 -2
  543. package/registry/section-backdrop.json +1 -1
  544. package/registry/separator.json +1 -1
  545. package/registry/service-card.json +2 -2
  546. package/registry/settings-layout.json +1 -1
  547. package/registry/showcase.json +1 -1
  548. package/registry/site-footer.json +3 -3
  549. package/registry/sites.json +2 -2
  550. package/registry/skeleton.json +1 -1
  551. package/registry/skip-link.json +1 -1
  552. package/registry/slider.json +1 -1
  553. package/registry/slot-picker.json +1 -1
  554. package/registry/slot.json +1 -1
  555. package/registry/specimen-tag.json +269 -0
  556. package/registry/spinner.json +1 -1
  557. package/registry/split-view.json +1 -1
  558. package/registry/stage-banner.json +1 -1
  559. package/registry/stat.json +2 -2
  560. package/registry/status-page.json +1 -1
  561. package/registry/step-progress.json +1 -1
  562. package/registry/step-showcase.json +1 -1
  563. package/registry/stepper.json +1 -1
  564. package/registry/sticky-action.json +2 -2
  565. package/registry/swipe-deck.json +2 -2
  566. package/registry/switch.json +1 -1
  567. package/registry/tabs.json +1 -1
  568. package/registry/tag-input.json +1 -1
  569. package/registry/tag-selector.json +1 -1
  570. package/registry/terminal-replay.json +1 -1
  571. package/registry/theme.json +1 -1
  572. package/registry/toast.json +1 -1
  573. package/registry/toc.json +1 -1
  574. package/registry/tooltip.json +1 -1
  575. package/registry/tree-view.json +1 -1
  576. package/registry/update-prompt.json +1 -1
  577. package/registry/verified-badge.json +1 -1
  578. package/registry/vertical-video.json +1 -1
  579. package/registry/video-player.json +1 -1
  580. package/registry/video-trimmer.json +1 -1
  581. package/registry/virtual.json +1 -1
  582. package/registry/waveform.json +1 -1
  583. package/dist/chunk-2AJ4NJUF.js.map +0 -1
  584. package/dist/chunk-2PNLHZLT.js.map +0 -1
  585. package/dist/chunk-3S4GHSPZ.js.map +0 -1
  586. package/dist/chunk-LZNZLCOE.js.map +0 -1
  587. package/dist/chunk-NJFCSVPT.js.map +0 -1
  588. package/dist/chunk-REPTKUJ6.js.map +0 -1
  589. /package/dist/{chunk-KIBICUZK.js.map → chunk-K2ZYB4HP.js.map} +0 -0
@@ -21,7 +21,7 @@ var descriptionList = tv({
21
21
  grid: {
22
22
  root: "grid grid-cols-[repeat(auto-fill,minmax(var(--kz-kv-min,10rem),1fr))] gap-3",
23
23
  pair: "rounded-xl border border-border-default bg-surface-1 px-4 py-3",
24
- term: "uppercase tracking-wider",
24
+ term: "",
25
25
  details: "mt-1 font-display text-lg font-bold tabular-nums"
26
26
  }
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/description-list/description-list.tsx"],"sourcesContent":["// Server-safe. Facts about one thing, as term and value: a job's details, a payout's breakdown, a profile. A real\n// `<dl>` (each pair in a `<div>`, as HTML allows): stacked, inline (term beside its value) or a grid of cards\n// (`KeyValueGrid`). Every word is a prop.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const descriptionList = tv({\n slots: {\n root: \"m-0 w-full\",\n pair: \"min-w-0\",\n term: \"text-xs font-semibold text-fg-secondary\",\n details: \"m-0 min-w-0 break-words text-sm text-fg\",\n hint: \"mt-0.5 block text-xs text-fg-secondary\",\n },\n variants: {\n layout: {\n stacked: { root: \"flex flex-col gap-4\", details: \"mt-1\" },\n inline: {\n root: \"divide-y divide-border-subtle\",\n pair: \"flex flex-wrap items-baseline justify-between gap-x-6 gap-y-1 py-2.5 first:pt-0 last:pb-0\",\n term: \"text-sm font-normal\",\n details: \"text-right font-medium tabular-nums\",\n },\n grid: {\n root: \"grid grid-cols-[repeat(auto-fill,minmax(var(--kz-kv-min,10rem),1fr))] gap-3\",\n pair: \"rounded-xl border border-border-default bg-surface-1 px-4 py-3\",\n term: \"uppercase tracking-wider\",\n details: \"mt-1 font-display text-lg font-bold tabular-nums\",\n },\n },\n },\n defaultVariants: { layout: \"stacked\" },\n});\n\nexport type DescriptionItem = {\n /** The term (“Status”, “Credits”) — passed translated. */\n term: React.ReactNode;\n /** The value: text, a `Badge`, a link. */\n details: React.ReactNode;\n /** A line under the value (a date, a unit). */\n hint?: React.ReactNode;\n /** A stable key, when the terms are not unique strings. */\n id?: string;\n};\n\nexport type DescriptionListProps = Omit<React.ComponentProps<\"dl\">, \"children\"> & {\n /** The pairs, in reading order. */\n items: readonly DescriptionItem[];\n /** stacked (default: a details panel) · inline (term left, value right: a receipt, a summary) · grid (cards). */\n layout?: \"stacked\" | \"inline\" | \"grid\";\n};\n\n/** Term and value pairs — a job's details, a payout's breakdown — stacked, inline like a receipt, or as cards. */\nexport function DescriptionList({ items, layout, className, ...props }: DescriptionListProps) {\n const s = descriptionList({ layout });\n return (\n <dl className={s.root({ className })} {...props}>\n {items.map((item, i) => (\n <div key={item.id ?? (typeof item.term === \"string\" ? item.term : i)} className={s.pair()}>\n <dt className={s.term()}>{item.term}</dt>\n <dd className={s.details()}>\n {item.details}\n {item.hint ? <span className={s.hint()}>{item.hint}</span> : null}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\nexport type KeyValueGridProps = Omit<DescriptionListProps, \"layout\"> & {\n /** The narrowest a card may be before the grid wraps, in rem. Default 10. */\n minWidth?: number;\n};\n\n/** Key figures as a grid of cards that wraps with the width: a job's numbers, an account's limits. */\nexport function KeyValueGrid({ minWidth = 10, style, ...props }: KeyValueGridProps) {\n return <DescriptionList layout=\"grid\" style={{ ...style, [\"--kz-kv-min\" as string]: `${minWidth}rem` }} {...props} />;\n}\n"],"mappings":";AAIA,SAAS,UAAU;AAuDT,cACA,YADA;AArDH,IAAM,kBAAkB,GAAG;AAAA,EAChC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,SAAS,EAAE,MAAM,uBAAuB,SAAS,OAAO;AAAA,MACxD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,QAAQ,UAAU;AACvC,CAAC;AAqBM,SAAS,gBAAgB,EAAE,OAAO,QAAQ,WAAW,GAAG,MAAM,GAAyB;AAC5F,QAAM,IAAI,gBAAgB,EAAE,OAAO,CAAC;AACpC,SACE,oBAAC,QAAG,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACvC,gBAAM,IAAI,CAAC,MAAM,MAChB,qBAAC,SAAqE,WAAW,EAAE,KAAK,GACtF;AAAA,wBAAC,QAAG,WAAW,EAAE,KAAK,GAAI,eAAK,MAAK;AAAA,IACpC,qBAAC,QAAG,WAAW,EAAE,QAAQ,GACtB;AAAA,WAAK;AAAA,MACL,KAAK,OAAO,oBAAC,UAAK,WAAW,EAAE,KAAK,GAAI,eAAK,MAAK,IAAU;AAAA,OAC/D;AAAA,OALQ,KAAK,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,EAMlE,CACD,GACH;AAEJ;AAQO,SAAS,aAAa,EAAE,WAAW,IAAI,OAAO,GAAG,MAAM,GAAsB;AAClF,SAAO,oBAAC,mBAAgB,QAAO,QAAO,OAAO,EAAE,GAAG,OAAO,CAAC,aAAuB,GAAG,GAAG,QAAQ,MAAM,GAAI,GAAG,OAAO;AACrH;","names":[]}
1
+ {"version":3,"sources":["../src/description-list/description-list.tsx"],"sourcesContent":["// Server-safe. Facts about one thing, as term and value: a job's details, a payout's breakdown, a profile. A real\n// `<dl>` (each pair in a `<div>`, as HTML allows): stacked, inline (term beside its value) or a grid of cards\n// (`KeyValueGrid`). Every word is a prop.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const descriptionList = tv({\n slots: {\n root: \"m-0 w-full\",\n pair: \"min-w-0\",\n term: \"text-xs font-semibold text-fg-secondary\",\n details: \"m-0 min-w-0 break-words text-sm text-fg\",\n hint: \"mt-0.5 block text-xs text-fg-secondary\",\n },\n variants: {\n layout: {\n stacked: { root: \"flex flex-col gap-4\", details: \"mt-1\" },\n inline: {\n root: \"divide-y divide-border-subtle\",\n pair: \"flex flex-wrap items-baseline justify-between gap-x-6 gap-y-1 py-2.5 first:pt-0 last:pb-0\",\n term: \"text-sm font-normal\",\n details: \"text-right font-medium tabular-nums\",\n },\n grid: {\n root: \"grid grid-cols-[repeat(auto-fill,minmax(var(--kz-kv-min,10rem),1fr))] gap-3\",\n pair: \"rounded-xl border border-border-default bg-surface-1 px-4 py-3\",\n term: \"\",\n details: \"mt-1 font-display text-lg font-bold tabular-nums\",\n },\n },\n },\n defaultVariants: { layout: \"stacked\" },\n});\n\nexport type DescriptionItem = {\n /** The term (“Status”, “Credits”) — passed translated. */\n term: React.ReactNode;\n /** The value: text, a `Badge`, a link. */\n details: React.ReactNode;\n /** A line under the value (a date, a unit). */\n hint?: React.ReactNode;\n /** A stable key, when the terms are not unique strings. */\n id?: string;\n};\n\nexport type DescriptionListProps = Omit<React.ComponentProps<\"dl\">, \"children\"> & {\n /** The pairs, in reading order. */\n items: readonly DescriptionItem[];\n /** stacked (default: a details panel) · inline (term left, value right: a receipt, a summary) · grid (cards). */\n layout?: \"stacked\" | \"inline\" | \"grid\";\n};\n\n/** Term and value pairs — a job's details, a payout's breakdown — stacked, inline like a receipt, or as cards. */\nexport function DescriptionList({ items, layout, className, ...props }: DescriptionListProps) {\n const s = descriptionList({ layout });\n return (\n <dl className={s.root({ className })} {...props}>\n {items.map((item, i) => (\n <div key={item.id ?? (typeof item.term === \"string\" ? item.term : i)} className={s.pair()}>\n <dt className={s.term()}>{item.term}</dt>\n <dd className={s.details()}>\n {item.details}\n {item.hint ? <span className={s.hint()}>{item.hint}</span> : null}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\nexport type KeyValueGridProps = Omit<DescriptionListProps, \"layout\"> & {\n /** The narrowest a card may be before the grid wraps, in rem. Default 10. */\n minWidth?: number;\n};\n\n/** Key figures as a grid of cards that wraps with the width: a job's numbers, an account's limits. */\nexport function KeyValueGrid({ minWidth = 10, style, ...props }: KeyValueGridProps) {\n return <DescriptionList layout=\"grid\" style={{ ...style, [\"--kz-kv-min\" as string]: `${minWidth}rem` }} {...props} />;\n}\n"],"mappings":";AAIA,SAAS,UAAU;AAuDT,cACA,YADA;AArDH,IAAM,kBAAkB,GAAG;AAAA,EAChC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,SAAS,EAAE,MAAM,uBAAuB,SAAS,OAAO;AAAA,MACxD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,QAAQ,UAAU;AACvC,CAAC;AAqBM,SAAS,gBAAgB,EAAE,OAAO,QAAQ,WAAW,GAAG,MAAM,GAAyB;AAC5F,QAAM,IAAI,gBAAgB,EAAE,OAAO,CAAC;AACpC,SACE,oBAAC,QAAG,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACvC,gBAAM,IAAI,CAAC,MAAM,MAChB,qBAAC,SAAqE,WAAW,EAAE,KAAK,GACtF;AAAA,wBAAC,QAAG,WAAW,EAAE,KAAK,GAAI,eAAK,MAAK;AAAA,IACpC,qBAAC,QAAG,WAAW,EAAE,QAAQ,GACtB;AAAA,WAAK;AAAA,MACL,KAAK,OAAO,oBAAC,UAAK,WAAW,EAAE,KAAK,GAAI,eAAK,MAAK,IAAU;AAAA,OAC/D;AAAA,OALQ,KAAK,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,EAMlE,CACD,GACH;AAEJ;AAQO,SAAS,aAAa,EAAE,WAAW,IAAI,OAAO,GAAG,MAAM,GAAsB;AAClF,SAAO,oBAAC,mBAAgB,QAAO,QAAO,OAAO,EAAE,GAAG,OAAO,CAAC,aAAuB,GAAG,GAAG,QAAQ,MAAM,GAAI,GAAG,OAAO;AACrH;","names":[]}
@@ -8,7 +8,7 @@ var detailLayout = tv({
8
8
  header: "flex flex-col gap-4 border-b border-border-subtle pb-5 sm:flex-row sm:items-start",
9
9
  media: "shrink-0 overflow-hidden rounded-xl [&>img]:block [&>img]:h-full [&>img]:w-full [&>img]:object-cover",
10
10
  text: "flex min-w-0 flex-1 flex-col gap-2",
11
- eyebrow: "font-mono text-[11px] font-semibold uppercase tracking-[0.16em] text-fg-accent",
11
+ eyebrow: "font-mono text-[11px] font-semibold text-fg-accent",
12
12
  titleRow: "flex flex-wrap items-center gap-2",
13
13
  title: "min-w-0 font-display text-2xl font-extrabold tracking-tight text-fg break-words",
14
14
  meta: "flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-fg-secondary",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/detail-layout/detail-layout.tsx"],"sourcesContent":["// Server-safe. The page of one object, read from the products' detail screens (a video, a job, an account, a pack):\n// its header — the way back, a media or an avatar, the name, its facts and status, the actions — then its tabs, the\n// content, and a side panel (details, related, activity) that goes under the content on a phone.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const detailLayout = tv({\n slots: {\n root: \"flex w-full flex-col gap-6\",\n back: \"inline-flex w-fit items-center gap-1.5 rounded-md text-sm font-medium text-fg-secondary no-underline hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\",\n header: \"flex flex-col gap-4 border-b border-border-subtle pb-5 sm:flex-row sm:items-start\",\n media: \"shrink-0 overflow-hidden rounded-xl [&>img]:block [&>img]:h-full [&>img]:w-full [&>img]:object-cover\",\n text: \"flex min-w-0 flex-1 flex-col gap-2\",\n eyebrow: \"font-mono text-[11px] font-semibold uppercase tracking-[0.16em] text-fg-accent\",\n titleRow: \"flex flex-wrap items-center gap-2\",\n title: \"min-w-0 font-display text-2xl font-extrabold tracking-tight text-fg break-words\",\n meta: \"flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-fg-secondary\",\n actions: \"flex shrink-0 flex-wrap items-center gap-2\",\n columns: \"grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_20rem] lg:gap-8\",\n main: \"flex min-w-0 flex-col gap-5\",\n aside: \"flex min-w-0 flex-col gap-4 lg:sticky lg:top-20 lg:self-start\",\n },\n});\nconst s = detailLayout();\n\nexport type DetailLayoutProps = Omit<React.ComponentProps<\"div\">, \"title\"> & {\n /** The way back to the list: your router's link (`<Link href=\"/videos\">Videos</Link>`), drawn with its arrow. */\n back?: React.ReactNode;\n /** A thumbnail, a cover or an avatar beside the name. */\n media?: React.ReactNode;\n /** A mono line above the name (the object's kind, its id). */\n eyebrow?: React.ReactNode;\n /** The object's name: the `h1`. */\n title: React.ReactNode;\n /** Beside the name: its status (a Badge). */\n status?: React.ReactNode;\n /** Under the name: its facts (the author, a date, a count — `Facts` or plain text). */\n meta?: React.ReactNode;\n /** The object's actions (edit, publish, a DropdownMenu). */\n actions?: React.ReactNode;\n /** Under the header: the object's tabs (`Tabs.List` of @krizaka/ui/tabs, inside your `Tabs.Root` around the layout). */\n tabs?: React.ReactNode;\n /** The side panel: details, related objects, activity (under the content on a phone). */\n aside?: React.ReactNode;\n /** The content (the current tab). */\n children: React.ReactNode;\n};\n\n/** One object's page: header (back, media, name, status, facts, actions), tabs, content and a side panel. */\nexport function DetailLayout({ back, media, eyebrow, title, status, meta, actions, tabs, aside, className, children, ...props }: DetailLayoutProps) {\n return (\n <div className={s.root({ className })} {...props}>\n {back && <div className={s.back()}>{back}</div>}\n <div className={s.header()}>\n {media && <div className={s.media()}>{media}</div>}\n <div className={s.text()}>\n {eyebrow && <p className={s.eyebrow()}>{eyebrow}</p>}\n <div className={s.titleRow()}>\n <h1 className={s.title()}>{title}</h1>\n {status}\n </div>\n {meta && <div className={s.meta()}>{meta}</div>}\n </div>\n {actions && <div className={s.actions()}>{actions}</div>}\n </div>\n {tabs}\n <div className={aside ? s.columns() : undefined}>\n <div className={s.main()}>{children}</div>\n {aside && <aside className={s.aside()}>{aside}</aside>}\n </div>\n </div>\n );\n}\n"],"mappings":";AAIA,SAAS,UAAU;AAgDJ,cAKL,YALK;AA9CR,IAAM,eAAe,GAAG;AAAA,EAC7B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AACD,IAAM,IAAI,aAAa;AA0BhB,SAAS,aAAa,EAAE,MAAM,OAAO,SAAS,OAAO,QAAQ,MAAM,SAAS,MAAM,OAAO,WAAW,UAAU,GAAG,MAAM,GAAsB;AAClJ,SACE,qBAAC,SAAI,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACxC;AAAA,YAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,IACzC,qBAAC,SAAI,WAAW,EAAE,OAAO,GACtB;AAAA,eAAS,oBAAC,SAAI,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,MAC5C,qBAAC,SAAI,WAAW,EAAE,KAAK,GACpB;AAAA,mBAAW,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,QAChD,qBAAC,SAAI,WAAW,EAAE,SAAS,GACzB;AAAA,8BAAC,QAAG,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,UAChC;AAAA,WACH;AAAA,QACC,QAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,SAC3C;AAAA,MACC,WAAW,oBAAC,SAAI,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,OACpD;AAAA,IACC;AAAA,IACD,qBAAC,SAAI,WAAW,QAAQ,EAAE,QAAQ,IAAI,QACpC;AAAA,0BAAC,SAAI,WAAW,EAAE,KAAK,GAAI,UAAS;AAAA,MACnC,SAAS,oBAAC,WAAM,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,OAChD;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/detail-layout/detail-layout.tsx"],"sourcesContent":["// Server-safe. The page of one object, read from the products' detail screens (a video, a job, an account, a pack):\n// its header — the way back, a media or an avatar, the name, its facts and status, the actions — then its tabs, the\n// content, and a side panel (details, related, activity) that goes under the content on a phone.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const detailLayout = tv({\n slots: {\n root: \"flex w-full flex-col gap-6\",\n back: \"inline-flex w-fit items-center gap-1.5 rounded-md text-sm font-medium text-fg-secondary no-underline hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\",\n header: \"flex flex-col gap-4 border-b border-border-subtle pb-5 sm:flex-row sm:items-start\",\n media: \"shrink-0 overflow-hidden rounded-xl [&>img]:block [&>img]:h-full [&>img]:w-full [&>img]:object-cover\",\n text: \"flex min-w-0 flex-1 flex-col gap-2\",\n eyebrow: \"font-mono text-[11px] font-semibold text-fg-accent\",\n titleRow: \"flex flex-wrap items-center gap-2\",\n title: \"min-w-0 font-display text-2xl font-extrabold tracking-tight text-fg break-words\",\n meta: \"flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-fg-secondary\",\n actions: \"flex shrink-0 flex-wrap items-center gap-2\",\n columns: \"grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_20rem] lg:gap-8\",\n main: \"flex min-w-0 flex-col gap-5\",\n aside: \"flex min-w-0 flex-col gap-4 lg:sticky lg:top-20 lg:self-start\",\n },\n});\nconst s = detailLayout();\n\nexport type DetailLayoutProps = Omit<React.ComponentProps<\"div\">, \"title\"> & {\n /** The way back to the list: your router's link (`<Link href=\"/videos\">Videos</Link>`), drawn with its arrow. */\n back?: React.ReactNode;\n /** A thumbnail, a cover or an avatar beside the name. */\n media?: React.ReactNode;\n /** A mono line above the name (the object's kind, its id). */\n eyebrow?: React.ReactNode;\n /** The object's name: the `h1`. */\n title: React.ReactNode;\n /** Beside the name: its status (a Badge). */\n status?: React.ReactNode;\n /** Under the name: its facts (the author, a date, a count — `Facts` or plain text). */\n meta?: React.ReactNode;\n /** The object's actions (edit, publish, a DropdownMenu). */\n actions?: React.ReactNode;\n /** Under the header: the object's tabs (`Tabs.List` of @krizaka/ui/tabs, inside your `Tabs.Root` around the layout). */\n tabs?: React.ReactNode;\n /** The side panel: details, related objects, activity (under the content on a phone). */\n aside?: React.ReactNode;\n /** The content (the current tab). */\n children: React.ReactNode;\n};\n\n/** One object's page: header (back, media, name, status, facts, actions), tabs, content and a side panel. */\nexport function DetailLayout({ back, media, eyebrow, title, status, meta, actions, tabs, aside, className, children, ...props }: DetailLayoutProps) {\n return (\n <div className={s.root({ className })} {...props}>\n {back && <div className={s.back()}>{back}</div>}\n <div className={s.header()}>\n {media && <div className={s.media()}>{media}</div>}\n <div className={s.text()}>\n {eyebrow && <p className={s.eyebrow()}>{eyebrow}</p>}\n <div className={s.titleRow()}>\n <h1 className={s.title()}>{title}</h1>\n {status}\n </div>\n {meta && <div className={s.meta()}>{meta}</div>}\n </div>\n {actions && <div className={s.actions()}>{actions}</div>}\n </div>\n {tabs}\n <div className={aside ? s.columns() : undefined}>\n <div className={s.main()}>{children}</div>\n {aside && <aside className={s.aside()}>{aside}</aside>}\n </div>\n </div>\n );\n}\n"],"mappings":";AAIA,SAAS,UAAU;AAgDJ,cAKL,YALK;AA9CR,IAAM,eAAe,GAAG;AAAA,EAC7B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AACD,IAAM,IAAI,aAAa;AA0BhB,SAAS,aAAa,EAAE,MAAM,OAAO,SAAS,OAAO,QAAQ,MAAM,SAAS,MAAM,OAAO,WAAW,UAAU,GAAG,MAAM,GAAsB;AAClJ,SACE,qBAAC,SAAI,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OACxC;AAAA,YAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,IACzC,qBAAC,SAAI,WAAW,EAAE,OAAO,GACtB;AAAA,eAAS,oBAAC,SAAI,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,MAC5C,qBAAC,SAAI,WAAW,EAAE,KAAK,GACpB;AAAA,mBAAW,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,QAChD,qBAAC,SAAI,WAAW,EAAE,SAAS,GACzB;AAAA,8BAAC,QAAG,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,UAChC;AAAA,WACH;AAAA,QACC,QAAQ,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,gBAAK;AAAA,SAC3C;AAAA,MACC,WAAW,oBAAC,SAAI,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,OACpD;AAAA,IACC;AAAA,IACD,qBAAC,SAAI,WAAW,QAAQ,EAAE,QAAQ,IAAI,QACpC;AAAA,0BAAC,SAAI,WAAW,EAAE,KAAK,GAAI,UAAS;AAAA,MACnC,SAAS,oBAAC,WAAM,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,OAChD;AAAA,KACF;AAEJ;","names":[]}
package/dist/dialog.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  Sheet,
11
11
  dialog,
12
12
  useReturnFocus
13
- } from "./chunk-NJFCSVPT.js";
13
+ } from "./chunk-6EAHUURY.js";
14
14
  import {
15
15
  Button
16
16
  } from "./chunk-SJS6RJIT.js";
package/dist/docs-nav.js CHANGED
@@ -9,7 +9,7 @@ function DocsNav({ label, groups, current, linkAs, className, ...props }) {
9
9
  return /* @__PURE__ */ jsx("nav", { "aria-label": label, className: cn("flex flex-col gap-1 text-sm", className), ...props, children: groups.map((g) => {
10
10
  const open = g.items.some((i) => i.href === current) || !current;
11
11
  return /* @__PURE__ */ jsxs("details", { open, className: "group py-1", children: [
12
- /* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold uppercase tracking-wider text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
12
+ /* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
13
13
  g.title,
14
14
  /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false", className: "h-3.5 w-3.5 fill-none stroke-current stroke-2 transition-transform group-open:rotate-180 motion-reduce:transition-none", children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6", strokeLinecap: "round", strokeLinejoin: "round" }) })
15
15
  ] }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/docs-nav/docs-nav.tsx"],"sourcesContent":["// Server-safe. The pages of a documentation, grouped: a quiet list of links, each group a native `details` (open when it\n// holds the current page), only the current page marked. No state: the app tells which page is current.\nimport * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport type { LinkComponent } from \"../page-hero\";\n\nexport type DocsNavGroup = {\n /** A stable key. */\n id: string;\n /** The group's name — one word or two. */\n title: React.ReactNode;\n /** Its pages: a short, one-line title each. */\n items: readonly { href: string; label: React.ReactNode }[];\n};\n\nexport type DocsNavProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n /** The navigation's accessible name (`Documentation`). */\n label: string;\n /** The groups, in order. */\n groups: readonly DocsNavGroup[];\n /** The `href` of the page being read. */\n current?: string;\n /** The app's link component (Next's `Link`). */\n linkAs?: LinkComponent;\n};\n\n/** The pages of the documentation in groups; the group of the current page is open, the others fold. */\nexport function DocsNav({ label, groups, current, linkAs, className, ...props }: DocsNavProps) {\n const L = linkAs ?? \"a\";\n return (\n <nav aria-label={label} className={cn(\"flex flex-col gap-1 text-sm\", className)} {...props}>\n {groups.map((g) => {\n const open = g.items.some((i) => i.href === current) || !current;\n return (\n <details key={g.id} open={open} className=\"group py-1\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold uppercase tracking-wider text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden\">\n {g.title}\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" className=\"h-3.5 w-3.5 fill-none stroke-current stroke-2 transition-transform group-open:rotate-180 motion-reduce:transition-none\">\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </summary>\n <ul className=\"mt-1 flex flex-col gap-0.5 border-l border-border-subtle\">\n {g.items.map((i) => (\n <li key={i.href}>\n <L\n href={i.href}\n aria-current={i.href === current ? \"page\" : undefined}\n className=\"-ml-px block truncate border-l border-transparent px-3 py-1.5 text-fg-secondary no-underline transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-ring aria-[current=page]:border-accent aria-[current=page]:font-semibold aria-[current=page]:text-fg\"\n >\n {i.label}\n </L>\n </li>\n ))}\n </ul>\n </details>\n );\n })}\n </nav>\n );\n}\n"],"mappings":";;;;;AAoCY,SAGI,KAHJ;AARL,SAAS,QAAQ,EAAE,OAAO,QAAQ,SAAS,QAAQ,WAAW,GAAG,MAAM,GAAiB;AAC7F,QAAM,IAAI,UAAU;AACpB,SACE,oBAAC,SAAI,cAAY,OAAO,WAAW,GAAG,+BAA+B,SAAS,GAAI,GAAG,OAClF,iBAAO,IAAI,CAAC,MAAM;AACjB,UAAM,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,KAAK,CAAC;AACzD,WACE,qBAAC,aAAmB,MAAY,WAAU,cACxC;AAAA,2BAAC,aAAQ,WAAU,ySAChB;AAAA,UAAE;AAAA,QACH,oBAAC,SAAI,SAAQ,aAAY,eAAY,QAAO,WAAU,SAAQ,WAAU,0HACtE,8BAAC,UAAK,GAAE,gBAAe,eAAc,SAAQ,gBAAe,SAAQ,GACtE;AAAA,SACF;AAAA,MACA,oBAAC,QAAG,WAAU,4DACX,YAAE,MAAM,IAAI,CAAC,MACZ,oBAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,EAAE;AAAA,UACR,gBAAc,EAAE,SAAS,UAAU,SAAS;AAAA,UAC5C,WAAU;AAAA,UAET,YAAE;AAAA;AAAA,MACL,KAPO,EAAE,IAQX,CACD,GACH;AAAA,SAnBY,EAAE,EAoBhB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/docs-nav/docs-nav.tsx"],"sourcesContent":["// Server-safe. The pages of a documentation, grouped: a quiet list of links, each group a native `details` (open when it\n// holds the current page), only the current page marked. No state: the app tells which page is current.\nimport * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport type { LinkComponent } from \"../page-hero\";\n\nexport type DocsNavGroup = {\n /** A stable key. */\n id: string;\n /** The group's name — one word or two. */\n title: React.ReactNode;\n /** Its pages: a short, one-line title each. */\n items: readonly { href: string; label: React.ReactNode }[];\n};\n\nexport type DocsNavProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n /** The navigation's accessible name (`Documentation`). */\n label: string;\n /** The groups, in order. */\n groups: readonly DocsNavGroup[];\n /** The `href` of the page being read. */\n current?: string;\n /** The app's link component (Next's `Link`). */\n linkAs?: LinkComponent;\n};\n\n/** The pages of the documentation in groups; the group of the current page is open, the others fold. */\nexport function DocsNav({ label, groups, current, linkAs, className, ...props }: DocsNavProps) {\n const L = linkAs ?? \"a\";\n return (\n <nav aria-label={label} className={cn(\"flex flex-col gap-1 text-sm\", className)} {...props}>\n {groups.map((g) => {\n const open = g.items.some((i) => i.href === current) || !current;\n return (\n <details key={g.id} open={open} className=\"group py-1\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden\">\n {g.title}\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" className=\"h-3.5 w-3.5 fill-none stroke-current stroke-2 transition-transform group-open:rotate-180 motion-reduce:transition-none\">\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </summary>\n <ul className=\"mt-1 flex flex-col gap-0.5 border-l border-border-subtle\">\n {g.items.map((i) => (\n <li key={i.href}>\n <L\n href={i.href}\n aria-current={i.href === current ? \"page\" : undefined}\n className=\"-ml-px block truncate border-l border-transparent px-3 py-1.5 text-fg-secondary no-underline transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-ring aria-[current=page]:border-accent aria-[current=page]:font-semibold aria-[current=page]:text-fg\"\n >\n {i.label}\n </L>\n </li>\n ))}\n </ul>\n </details>\n );\n })}\n </nav>\n );\n}\n"],"mappings":";;;;;AAoCY,SAGI,KAHJ;AARL,SAAS,QAAQ,EAAE,OAAO,QAAQ,SAAS,QAAQ,WAAW,GAAG,MAAM,GAAiB;AAC7F,QAAM,IAAI,UAAU;AACpB,SACE,oBAAC,SAAI,cAAY,OAAO,WAAW,GAAG,+BAA+B,SAAS,GAAI,GAAG,OAClF,iBAAO,IAAI,CAAC,MAAM;AACjB,UAAM,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,KAAK,CAAC;AACzD,WACE,qBAAC,aAAmB,MAAY,WAAU,cACxC;AAAA,2BAAC,aAAQ,WAAU,gRAChB;AAAA,UAAE;AAAA,QACH,oBAAC,SAAI,SAAQ,aAAY,eAAY,QAAO,WAAU,SAAQ,WAAU,0HACtE,8BAAC,UAAK,GAAE,gBAAe,eAAc,SAAQ,gBAAe,SAAQ,GACtE;AAAA,SACF;AAAA,MACA,oBAAC,QAAG,WAAU,4DACX,YAAE,MAAM,IAAI,CAAC,MACZ,oBAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,EAAE;AAAA,UACR,gBAAc,EAAE,SAAS,UAAU,SAAS;AAAA,UAC5C,WAAU;AAAA,UAET,YAAE;AAAA;AAAA,MACL,KAPO,EAAE,IAQX,CACD,GACH;AAAA,SAnBY,EAAE,EAoBhB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -15,7 +15,7 @@ var menu = tv({
15
15
  content: cn(floating, "min-w-48 max-h-(--radix-dropdown-menu-content-available-height) overflow-y-auto overflow-x-hidden overscroll-contain p-1 origin-(--radix-dropdown-menu-content-transform-origin)"),
16
16
  item: "relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2.5 py-2 text-sm text-fg outline-hidden transition-colors data-highlighted:bg-surface-3 data-disabled:pointer-events-none data-disabled:opacity-40 [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0 [&>svg]:text-fg-secondary",
17
17
  indicator: "ml-auto flex h-4 w-4 items-center justify-center text-fg-accent",
18
- label: "px-2.5 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-wider text-fg-secondary",
18
+ label: "px-2.5 pb-1 pt-2 text-[11px] font-semibold text-fg-secondary",
19
19
  separator: "-mx-1 my-1 h-px bg-border-subtle"
20
20
  },
21
21
  variants: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["// Client (a portal). Radix does the roving focus, the arrows, Home/End, typeahead, Escape and the focus return.\nimport { DropdownMenu as MenuPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nimport { cn } from \"../cn\";\nimport { floating } from \"../floating\";\n\nexport const menu = tv({\n slots: {\n content: cn(floating, \"min-w-48 max-h-(--radix-dropdown-menu-content-available-height) overflow-y-auto overflow-x-hidden overscroll-contain p-1 origin-(--radix-dropdown-menu-content-transform-origin)\"),\n item:\n \"relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2.5 py-2 text-sm text-fg outline-hidden transition-colors \" +\n \"data-highlighted:bg-surface-3 data-disabled:pointer-events-none data-disabled:opacity-40 [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0 \" +\n \"[&>svg]:text-fg-secondary\",\n indicator: \"ml-auto flex h-4 w-4 items-center justify-center text-fg-accent\",\n label: \"px-2.5 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-wider text-fg-secondary\",\n separator: \"-mx-1 my-1 h-px bg-border-subtle\",\n },\n variants: {\n // The label reads in the danger text role (≥ 4.5:1 on the menu surface, both themes); the icon and the highlight\n // carry the danger fill.\n tone: { default: {}, danger: { item: \"text-fg-danger data-highlighted:bg-danger/15 [&>svg]:text-danger\" } },\n },\n defaultVariants: { tone: \"default\" },\n});\nconst s = menu();\n\nexport type DropdownMenuContentProps = React.ComponentProps<typeof MenuPrimitive.Content> & {\n /** The element the portal renders into (default: document.body). */\n container?: HTMLElement | null;\n};\n\nexport function DropdownMenuContent({ sideOffset = 6, align = \"end\", collisionPadding = 8, container, className, ...props }: DropdownMenuContentProps) {\n return (\n <MenuPrimitive.Portal container={container}>\n <MenuPrimitive.Content sideOffset={sideOffset} align={align} collisionPadding={collisionPadding} className={s.content({ className })} {...props} />\n </MenuPrimitive.Portal>\n );\n}\n\nexport type DropdownMenuItemProps = React.ComponentProps<typeof MenuPrimitive.Item> & {\n /** `danger` for a destructive action: the icon and the highlight carry the danger, the label stays legible. */\n tone?: \"default\" | \"danger\";\n};\n\n/** An action. `tone=\"danger\"` for a destructive one; `onSelect` runs it (the menu closes). */\nexport function DropdownMenuItem({ tone, className, ...props }: DropdownMenuItemProps) {\n return <MenuPrimitive.Item data-tone={tone ?? \"default\"} className={menu({ tone }).item({ className })} {...props} />;\n}\n\n/** A toggled option: `checked` + `onCheckedChange`. */\nexport function DropdownMenuCheckboxItem({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.CheckboxItem>) {\n return (\n <MenuPrimitive.CheckboxItem className={s.item({ className })} {...props}>\n {children}\n <MenuPrimitive.ItemIndicator className={s.indicator()}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </MenuPrimitive.ItemIndicator>\n </MenuPrimitive.CheckboxItem>\n );\n}\n\n/** A submenu's trigger: an item that opens `DropdownMenu.SubContent`, with a chevron. */\nexport function DropdownMenuSubTrigger({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.SubTrigger>) {\n return (\n <MenuPrimitive.SubTrigger className={s.item({ className: cn(\"data-[state=open]:bg-surface-3\", className) })} {...props}>\n {children}\n <svg className=\"ml-auto !h-4 !w-4 text-fg-secondary\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </MenuPrimitive.SubTrigger>\n );\n}\n\n/** The submenu's panel (same material as the menu). */\nexport function DropdownMenuSubContent({ sideOffset = 4, collisionPadding = 8, className, ...props }: React.ComponentProps<typeof MenuPrimitive.SubContent>) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.SubContent sideOffset={sideOffset} collisionPadding={collisionPadding} className={s.content({ className: cn(\"max-h-(--radix-dropdown-menu-content-available-height)\", className) })} {...props} />\n </MenuPrimitive.Portal>\n );\n}\n\n/** One choice among several (`DropdownMenu.RadioGroup` holds the value): a language, a sort order. */\nexport function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.RadioItem>) {\n return (\n <MenuPrimitive.RadioItem className={s.item({ className })} {...props}>\n {children}\n <MenuPrimitive.ItemIndicator className={s.indicator()}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </MenuPrimitive.ItemIndicator>\n </MenuPrimitive.RadioItem>\n );\n}\n\nexport function DropdownMenuLabel({ className, ...props }: React.ComponentProps<typeof MenuPrimitive.Label>) {\n return <MenuPrimitive.Label className={s.label({ className })} {...props} />;\n}\n\nexport function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof MenuPrimitive.Separator>) {\n return <MenuPrimitive.Separator className={s.separator({ className })} {...props} />;\n}\n\n/** `DropdownMenu.Root/Trigger/Content/Item/CheckboxItem/Label/Separator/Group`. `open`/`defaultOpen` + `onOpenChange`. */\nexport const DropdownMenu = {\n Root: MenuPrimitive.Root,\n Trigger: MenuPrimitive.Trigger,\n Content: DropdownMenuContent,\n Item: DropdownMenuItem,\n CheckboxItem: DropdownMenuCheckboxItem,\n Label: DropdownMenuLabel,\n Separator: DropdownMenuSeparator,\n Group: MenuPrimitive.Group,\n Sub: MenuPrimitive.Sub,\n SubTrigger: DropdownMenuSubTrigger,\n SubContent: DropdownMenuSubContent,\n RadioGroup: MenuPrimitive.RadioGroup,\n RadioItem: DropdownMenuRadioItem,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["// Client (a portal). Radix does the roving focus, the arrows, Home/End, typeahead, Escape and the focus return.\nimport { DropdownMenu as MenuPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nimport { cn } from \"../cn\";\nimport { floating } from \"../floating\";\n\nexport const menu = tv({\n slots: {\n content: cn(floating, \"min-w-48 max-h-(--radix-dropdown-menu-content-available-height) overflow-y-auto overflow-x-hidden overscroll-contain p-1 origin-(--radix-dropdown-menu-content-transform-origin)\"),\n item:\n \"relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2.5 py-2 text-sm text-fg outline-hidden transition-colors \" +\n \"data-highlighted:bg-surface-3 data-disabled:pointer-events-none data-disabled:opacity-40 [&>svg]:h-4 [&>svg]:w-4 [&>svg]:shrink-0 \" +\n \"[&>svg]:text-fg-secondary\",\n indicator: \"ml-auto flex h-4 w-4 items-center justify-center text-fg-accent\",\n label: \"px-2.5 pb-1 pt-2 text-[11px] font-semibold text-fg-secondary\",\n separator: \"-mx-1 my-1 h-px bg-border-subtle\",\n },\n variants: {\n // The label reads in the danger text role (≥ 4.5:1 on the menu surface, both themes); the icon and the highlight\n // carry the danger fill.\n tone: { default: {}, danger: { item: \"text-fg-danger data-highlighted:bg-danger/15 [&>svg]:text-danger\" } },\n },\n defaultVariants: { tone: \"default\" },\n});\nconst s = menu();\n\nexport type DropdownMenuContentProps = React.ComponentProps<typeof MenuPrimitive.Content> & {\n /** The element the portal renders into (default: document.body). */\n container?: HTMLElement | null;\n};\n\nexport function DropdownMenuContent({ sideOffset = 6, align = \"end\", collisionPadding = 8, container, className, ...props }: DropdownMenuContentProps) {\n return (\n <MenuPrimitive.Portal container={container}>\n <MenuPrimitive.Content sideOffset={sideOffset} align={align} collisionPadding={collisionPadding} className={s.content({ className })} {...props} />\n </MenuPrimitive.Portal>\n );\n}\n\nexport type DropdownMenuItemProps = React.ComponentProps<typeof MenuPrimitive.Item> & {\n /** `danger` for a destructive action: the icon and the highlight carry the danger, the label stays legible. */\n tone?: \"default\" | \"danger\";\n};\n\n/** An action. `tone=\"danger\"` for a destructive one; `onSelect` runs it (the menu closes). */\nexport function DropdownMenuItem({ tone, className, ...props }: DropdownMenuItemProps) {\n return <MenuPrimitive.Item data-tone={tone ?? \"default\"} className={menu({ tone }).item({ className })} {...props} />;\n}\n\n/** A toggled option: `checked` + `onCheckedChange`. */\nexport function DropdownMenuCheckboxItem({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.CheckboxItem>) {\n return (\n <MenuPrimitive.CheckboxItem className={s.item({ className })} {...props}>\n {children}\n <MenuPrimitive.ItemIndicator className={s.indicator()}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </MenuPrimitive.ItemIndicator>\n </MenuPrimitive.CheckboxItem>\n );\n}\n\n/** A submenu's trigger: an item that opens `DropdownMenu.SubContent`, with a chevron. */\nexport function DropdownMenuSubTrigger({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.SubTrigger>) {\n return (\n <MenuPrimitive.SubTrigger className={s.item({ className: cn(\"data-[state=open]:bg-surface-3\", className) })} {...props}>\n {children}\n <svg className=\"ml-auto !h-4 !w-4 text-fg-secondary\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </MenuPrimitive.SubTrigger>\n );\n}\n\n/** The submenu's panel (same material as the menu). */\nexport function DropdownMenuSubContent({ sideOffset = 4, collisionPadding = 8, className, ...props }: React.ComponentProps<typeof MenuPrimitive.SubContent>) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.SubContent sideOffset={sideOffset} collisionPadding={collisionPadding} className={s.content({ className: cn(\"max-h-(--radix-dropdown-menu-content-available-height)\", className) })} {...props} />\n </MenuPrimitive.Portal>\n );\n}\n\n/** One choice among several (`DropdownMenu.RadioGroup` holds the value): a language, a sort order. */\nexport function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof MenuPrimitive.RadioItem>) {\n return (\n <MenuPrimitive.RadioItem className={s.item({ className })} {...props}>\n {children}\n <MenuPrimitive.ItemIndicator className={s.indicator()}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </MenuPrimitive.ItemIndicator>\n </MenuPrimitive.RadioItem>\n );\n}\n\nexport function DropdownMenuLabel({ className, ...props }: React.ComponentProps<typeof MenuPrimitive.Label>) {\n return <MenuPrimitive.Label className={s.label({ className })} {...props} />;\n}\n\nexport function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof MenuPrimitive.Separator>) {\n return <MenuPrimitive.Separator className={s.separator({ className })} {...props} />;\n}\n\n/** `DropdownMenu.Root/Trigger/Content/Item/CheckboxItem/Label/Separator/Group`. `open`/`defaultOpen` + `onOpenChange`. */\nexport const DropdownMenu = {\n Root: MenuPrimitive.Root,\n Trigger: MenuPrimitive.Trigger,\n Content: DropdownMenuContent,\n Item: DropdownMenuItem,\n CheckboxItem: DropdownMenuCheckboxItem,\n Label: DropdownMenuLabel,\n Separator: DropdownMenuSeparator,\n Group: MenuPrimitive.Group,\n Sub: MenuPrimitive.Sub,\n SubTrigger: DropdownMenuSubTrigger,\n SubContent: DropdownMenuSubContent,\n RadioGroup: MenuPrimitive.RadioGroup,\n RadioItem: DropdownMenuRadioItem,\n};\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  filterBar,
6
6
  readFilterParams,
7
7
  writeFilterParams
8
- } from "./chunk-2PNLHZLT.js";
8
+ } from "./chunk-YOTQD7JD.js";
9
9
  import "./chunk-7UCPGXKN.js";
10
10
  import "./chunk-D3T54RSL.js";
11
11
  import "./chunk-J3NC6ER4.js";
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+
3
+ type CaptionProps = React.HTMLAttributes<HTMLElement> & {
4
+ /** The figure's number, typed before the text: `fig. 2`. */
5
+ figure?: React.ReactNode;
6
+ /** `figcaption` inside a `<figure>`, `p` elsewhere. @default "figcaption" */
7
+ as?: "figcaption" | "p";
8
+ };
9
+ /** A caption in the typewriter face: the figure's number, a dash, what it shows. */
10
+ declare function Caption({ figure, as: Tag, className, children, ...props }: CaptionProps): React.JSX.Element;
11
+ type FootnoteRefProps = Omit<React.HTMLAttributes<HTMLElement>, "id"> & {
12
+ /** The note's number. */
13
+ n: number;
14
+ /** The prefix of the ids, when a page has several sets of notes. @default "fn" */
15
+ prefix?: string;
16
+ };
17
+ /** The superscript number in the text, linked to its note (and the note's link back lands here). */
18
+ declare function FootnoteRef({ n, prefix, className, ...props }: FootnoteRefProps): React.JSX.Element;
19
+ type FootnotesProps = Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
20
+ /** The notes, in order: the first is note 1. */
21
+ notes: readonly React.ReactNode[];
22
+ /** The prefix of the ids (the same as the refs'). @default "fn" */
23
+ prefix?: string;
24
+ /** The heading of the notes, for assistive technology (visually a rule). @default "Notes" */
25
+ label?: string;
26
+ /** The label of the way back to the text. @default "Back to the text" */
27
+ backLabel?: string;
28
+ };
29
+ /** The notes at the foot of a page: a short rule, numbered notes in small print, each with its way back to the text. */
30
+ declare function Footnotes({ notes, prefix, label, backLabel, className, ...props }: FootnotesProps): React.JSX.Element;
31
+
32
+ export { Caption, type CaptionProps, FootnoteRef, type FootnoteRefProps, Footnotes, type FootnotesProps };
@@ -0,0 +1,29 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-W675RFOA.js";
4
+
5
+ // src/footnote/footnote.tsx
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function Caption({ figure, as: Tag = "figcaption", className, children, ...props }) {
8
+ return /* @__PURE__ */ jsxs(Tag, { className: cn("kz-caption", className), ...props, children: [
9
+ figure && /* @__PURE__ */ jsx("b", { className: "kz-caption-figure", children: figure }),
10
+ figure && " \u2014 ",
11
+ children
12
+ ] });
13
+ }
14
+ function FootnoteRef({ n, prefix = "fn", className, ...props }) {
15
+ return /* @__PURE__ */ jsx("sup", { id: `${prefix}-ref-${n}`, className: cn("kz-fnref", className), ...props, children: /* @__PURE__ */ jsx("a", { href: `#${prefix}-${n}`, "aria-label": `Note ${n}`, children: n }) });
16
+ }
17
+ function Footnotes({ notes, prefix = "fn", label = "Notes", backLabel = "Back to the text", className, ...props }) {
18
+ return /* @__PURE__ */ jsx("aside", { "aria-label": label, className: cn("kz-footnotes", className), ...props, children: /* @__PURE__ */ jsx("ol", { children: notes.map((note, i) => /* @__PURE__ */ jsxs("li", { id: `${prefix}-${i + 1}`, children: [
19
+ note,
20
+ " ",
21
+ /* @__PURE__ */ jsx("a", { href: `#${prefix}-ref-${i + 1}`, className: "kz-fn-back", "aria-label": `${backLabel} (${i + 1})`, children: "\u21A9" })
22
+ ] }, i)) }) });
23
+ }
24
+ export {
25
+ Caption,
26
+ FootnoteRef,
27
+ Footnotes
28
+ };
29
+ //# sourceMappingURL=footnote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/footnote/footnote.tsx"],"sourcesContent":["// Server-safe. The footnote and the caption of the Cahier (ADR-004, blocks.css): what a page says in small print. A\n// `Caption` names a figure (`fig. 2 — The owl reads every line`); a `FootnoteRef` is the superscript number in the text,\n// linked to its note; `Footnotes` lists the notes at the foot, each with its way back to the text.\nimport type * as React from \"react\";\n\nimport { cn } from \"../cn\";\n\nexport type CaptionProps = React.HTMLAttributes<HTMLElement> & {\n /** The figure's number, typed before the text: `fig. 2`. */\n figure?: React.ReactNode;\n /** `figcaption` inside a `<figure>`, `p` elsewhere. @default \"figcaption\" */\n as?: \"figcaption\" | \"p\";\n};\n\n/** A caption in the typewriter face: the figure's number, a dash, what it shows. */\nexport function Caption({ figure, as: Tag = \"figcaption\", className, children, ...props }: CaptionProps) {\n return (\n <Tag className={cn(\"kz-caption\", className)} {...props}>\n {figure && <b className=\"kz-caption-figure\">{figure}</b>}\n {figure && \" — \"}\n {children}\n </Tag>\n );\n}\n\nexport type FootnoteRefProps = Omit<React.HTMLAttributes<HTMLElement>, \"id\"> & {\n /** The note's number. */\n n: number;\n /** The prefix of the ids, when a page has several sets of notes. @default \"fn\" */\n prefix?: string;\n};\n\n/** The superscript number in the text, linked to its note (and the note's link back lands here). */\nexport function FootnoteRef({ n, prefix = \"fn\", className, ...props }: FootnoteRefProps) {\n return (\n <sup id={`${prefix}-ref-${n}`} className={cn(\"kz-fnref\", className)} {...props}>\n <a href={`#${prefix}-${n}`} aria-label={`Note ${n}`}>\n {n}\n </a>\n </sup>\n );\n}\n\nexport type FootnotesProps = Omit<React.HTMLAttributes<HTMLElement>, \"title\"> & {\n /** The notes, in order: the first is note 1. */\n notes: readonly React.ReactNode[];\n /** The prefix of the ids (the same as the refs'). @default \"fn\" */\n prefix?: string;\n /** The heading of the notes, for assistive technology (visually a rule). @default \"Notes\" */\n label?: string;\n /** The label of the way back to the text. @default \"Back to the text\" */\n backLabel?: string;\n};\n\n/** The notes at the foot of a page: a short rule, numbered notes in small print, each with its way back to the text. */\nexport function Footnotes({ notes, prefix = \"fn\", label = \"Notes\", backLabel = \"Back to the text\", className, ...props }: FootnotesProps) {\n return (\n <aside aria-label={label} className={cn(\"kz-footnotes\", className)} {...props}>\n <ol>\n {notes.map((note, i) => (\n <li key={i} id={`${prefix}-${i + 1}`}>\n {note}{\" \"}\n <a href={`#${prefix}-ref-${i + 1}`} className=\"kz-fn-back\" aria-label={`${backLabel} (${i + 1})`}>\n ↩\n </a>\n </li>\n ))}\n </ol>\n </aside>\n );\n}\n"],"mappings":";;;;;AAiBI,SACa,KADb;AAFG,SAAS,QAAQ,EAAE,QAAQ,IAAI,MAAM,cAAc,WAAW,UAAU,GAAG,MAAM,GAAiB;AACvG,SACE,qBAAC,OAAI,WAAW,GAAG,cAAc,SAAS,GAAI,GAAG,OAC9C;AAAA,cAAU,oBAAC,OAAE,WAAU,qBAAqB,kBAAO;AAAA,IACnD,UAAU;AAAA,IACV;AAAA,KACH;AAEJ;AAUO,SAAS,YAAY,EAAE,GAAG,SAAS,MAAM,WAAW,GAAG,MAAM,GAAqB;AACvF,SACE,oBAAC,SAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OACvE,8BAAC,OAAE,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,cAAY,QAAQ,CAAC,IAC9C,aACH,GACF;AAEJ;AAcO,SAAS,UAAU,EAAE,OAAO,SAAS,MAAM,QAAQ,SAAS,YAAY,oBAAoB,WAAW,GAAG,MAAM,GAAmB;AACxI,SACE,oBAAC,WAAM,cAAY,OAAO,WAAW,GAAG,gBAAgB,SAAS,GAAI,GAAG,OACtE,8BAAC,QACE,gBAAM,IAAI,CAAC,MAAM,MAChB,qBAAC,QAAW,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,IAC/B;AAAA;AAAA,IAAM;AAAA,IACP,oBAAC,OAAE,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,IAAI,WAAU,cAAa,cAAY,GAAG,SAAS,KAAK,IAAI,CAAC,KAAK,oBAElG;AAAA,OAJO,CAKT,CACD,GACH,GACF;AAEJ;","names":[]}
package/dist/genui.js CHANGED
@@ -7,19 +7,19 @@ import {
7
7
  } from "./chunk-2DGLWTPS.js";
8
8
  import {
9
9
  DataTable
10
- } from "./chunk-KIBICUZK.js";
11
- import "./chunk-7Z4KHPFC.js";
10
+ } from "./chunk-K2ZYB4HP.js";
11
+ import "./chunk-YGIN2YIY.js";
12
12
  import "./chunk-JXLDUDTD.js";
13
13
  import "./chunk-3DHNN5V7.js";
14
14
  import "./chunk-KVDB4GXV.js";
15
- import "./chunk-2PNLHZLT.js";
15
+ import "./chunk-YOTQD7JD.js";
16
16
  import "./chunk-7UCPGXKN.js";
17
17
  import "./chunk-D3T54RSL.js";
18
18
  import "./chunk-J3NC6ER4.js";
19
19
  import {
20
20
  cn
21
21
  } from "./chunk-NSLXEDIS.js";
22
- import "./chunk-REPTKUJ6.js";
22
+ import "./chunk-7NRSPHAF.js";
23
23
  import "./chunk-ZIXB33X7.js";
24
24
  import "./chunk-FZBWEDQI.js";
25
25
  import "./chunk-CPA5CF35.js";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one
3
+ * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,
4
+ * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that
5
+ * introduces (2026-10, with Yasakia: "l'inséparable présente") and the crane that listens (2026-10, with Yororis:
6
+ * "la grue écoute"), the magpie that keeps the score (2026-10, with Kachizaka: "la pie compte les points") and the
7
+ * beaver that builds the shop (2026-10, with Akinaza: "le castor artisan" — the one figure of the flock without
8
+ * feathers: its paws are drawn as wings, its paddle tail behind it), redrawn on one 120 × 120 grid so that any figure
9
+ * can wear any mood.
10
+ *
11
+ * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,
12
+ * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives
13
+ * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades
14
+ * and highlights are black and white at a low opacity over the role, so they hold in both themes.
15
+ */
16
+ declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon", "lovebird", "crane", "magpie", "beaver"];
17
+ type MascotBird = (typeof MASCOT_BIRDS)[number];
18
+ declare const MASCOT_MOODS: readonly ["welcome", "thinking", "success", "empty", "error"];
19
+ type MascotMood = (typeof MASCOT_MOODS)[number];
20
+ type MascotTone = "brand" | "own";
21
+
22
+ export type { MascotBird as M, MascotMood as a, MascotTone as b };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  LanguageSwitch,
4
4
  languageSwitch
5
- } from "./chunk-3S4GHSPZ.js";
5
+ } from "./chunk-63KCDMX2.js";
6
6
 
7
7
  // src/language-switch/href.ts
8
8
  var languageNames = {
package/dist/list.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  Checkbox
4
- } from "./chunk-7Z4KHPFC.js";
4
+ } from "./chunk-YGIN2YIY.js";
5
5
  import {
6
6
  useControllable
7
7
  } from "./chunk-FZBWEDQI.js";
package/dist/loader.js CHANGED
@@ -23,13 +23,13 @@ var loader = tv({
23
23
  block: { box: "flex-col justify-center py-10 text-center text-sm", glyph: "h-9 w-9", mark: "h-9 w-9", text: "items-center" },
24
24
  overlay: {
25
25
  root: "absolute inset-0 z-10 flex items-center justify-center rounded-[inherit] empty:hidden",
26
- box: "flex-col rounded-xl border border-border-default bg-surface-1/90 px-6 py-5 text-center text-sm shadow-lg backdrop-blur-sm",
26
+ box: "flex-col rounded-xl border border-border-default bg-surface-1 px-6 py-5 text-center text-sm shadow-lg",
27
27
  glyph: "h-9 w-9",
28
28
  mark: "h-9 w-9",
29
29
  text: "items-center"
30
30
  },
31
31
  page: {
32
- root: "fixed inset-0 z-50 flex items-center justify-center bg-surface-0/80 backdrop-blur-sm empty:hidden",
32
+ root: "fixed inset-0 z-50 flex items-center justify-center bg-surface-0 empty:hidden",
33
33
  box: "flex-col text-center",
34
34
  glyph: "h-14 w-14",
35
35
  mark: "h-14 w-14",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loader/loader.tsx"],"sourcesContent":["// Client (timers). The whole life of a wait, done right once: nothing for the first instants (a fast answer never\n// flashes a spinner), then the Krizaka glyph with its words and an ETA, held long enough to be read, ending on a\n// check or a cross that is drawn and announced. `LoadingRegion` hands a region over from its content to a skeleton of\n// the same shape, then to words when the wait grows long, then back to the content.\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nimport { LoaderGlyph } from \"../spinner/glyph\";\n\nexport const loader = tv({\n slots: {\n root: \"text-fg-secondary\",\n box: \"kz-fade flex items-center gap-3\",\n glyph: \"shrink-0 text-accent\",\n mark: \"block shrink-0 [&>svg]:block [&>svg]:h-full [&>svg]:w-full\",\n text: \"flex min-w-0 flex-col\",\n label: \"font-medium text-fg\",\n detail: \"text-xs text-fg-secondary tabular-nums\",\n },\n variants: {\n variant: {\n inline: { box: \"text-sm\", glyph: \"h-5 w-5\", mark: \"h-5 w-5\" },\n block: { box: \"flex-col justify-center py-10 text-center text-sm\", glyph: \"h-9 w-9\", mark: \"h-9 w-9\", text: \"items-center\" },\n overlay: {\n root: \"absolute inset-0 z-10 flex items-center justify-center rounded-[inherit] empty:hidden\",\n box: \"flex-col rounded-xl border border-border-default bg-surface-1/90 px-6 py-5 text-center text-sm shadow-lg backdrop-blur-sm\",\n glyph: \"h-9 w-9\", mark: \"h-9 w-9\",\n text: \"items-center\",\n },\n page: {\n root: \"fixed inset-0 z-50 flex items-center justify-center bg-surface-0/80 backdrop-blur-sm empty:hidden\",\n box: \"flex-col text-center\",\n glyph: \"h-14 w-14\", mark: \"h-14 w-14\",\n text: \"items-center\",\n label: \"font-display text-lg\",\n },\n },\n ended: {\n success: { glyph: \"text-fg-success\" },\n error: { glyph: \"text-fg-danger\" },\n },\n },\n defaultVariants: { variant: \"inline\" },\n});\n\nexport type LoaderVariants = VariantProps<typeof loader>;\n\n/**\n * `true` once `active` has lasted `delay` ms; then stays `true` at least `minDuration` ms — a wait that ends early never\n * shows, one that shows never blinks.\n */\nexport function useDelayedWait(active: boolean, delay = 250, minDuration = 600): boolean {\n const [shown, setShown] = React.useState(false);\n const since = React.useRef(0);\n React.useEffect(() => {\n if (active === shown) return;\n const wait = active ? delay : Math.max(0, minDuration - (Date.now() - since.current));\n const timer = setTimeout(() => {\n since.current = Date.now();\n setShown(active);\n }, wait);\n return () => clearTimeout(timer);\n }, [active, shown, delay, minDuration]);\n return shown;\n}\n\nexport interface LoaderProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /** What is loading, in words (“Loading your invoices”) — passed translated; shown and announced. */\n label: string;\n /**\n * loading · success · error. When the wait ends, the loader shows how it ended for `endDuration` ms, then disappears.\n * @default \"loading\"\n */\n status?: \"loading\" | \"success\" | \"error\";\n /** The words of a success (“Invoices loaded”) — passed translated. Default: nothing more than the check. */\n successLabel?: string;\n /** The words of a failure (“Could not load the invoices”) — passed translated. */\n errorLabel?: string;\n /** Between 0 and 1: a determinate wait — the trace grows to it and the percentage shows. */\n value?: number | null;\n /** The time left, in words (“About 20 s left”) — passed translated (`@krizaka/intl` formats durations). */\n eta?: string;\n /**\n * Milliseconds before anything shows: a wait shorter than this never flashes.\n * @default 250\n */\n delay?: number;\n /**\n * Once shown, the least milliseconds it stays: it never blinks.\n * @default 600\n */\n minDuration?: number;\n /**\n * Milliseconds the ending (check or cross) stays before the loader disappears; `0` never shows it, `Infinity` keeps it.\n * @default 1600\n */\n endDuration?: number;\n /**\n * inline (beside the content) · block (a region's centre) · overlay (over a `relative` parent, frosted) · page (the\n * whole screen).\n * @default \"inline\"\n */\n variant?: LoaderVariants[\"variant\"];\n /**\n * The product's mark in place of the Krizaka glyph while it waits — `<OrochiaLogo animated />` (or `ProductLogo`) of\n * `@krizaka/ui`; it takes the loader's size. The ending (check or cross) stays the glyph's. Decorative: leave `title` off.\n */\n mark?: React.ReactNode;\n}\n\n/**\n * A wait, from start to end. `role=\"status\"` (polite): its words are announced when it shows and when it ends. Under\n * prefers-reduced-motion the glyph rests on a still frame; the delay and the ending stay.\n */\nexport function Loader({\n label,\n status = \"loading\",\n successLabel,\n errorLabel,\n value,\n eta,\n delay = 250,\n minDuration = 600,\n endDuration = 1600,\n variant,\n mark,\n className,\n ...props\n}: LoaderProps) {\n const waiting = useDelayedWait(status === \"loading\", delay, minDuration);\n // Rendered already ended (a result to show), it shows its ending; otherwise only a wait that was seen ends visibly.\n const [ending, setEnding] = React.useState<\"success\" | \"error\" | null>(() => (status !== \"loading\" && endDuration > 0 ? status : null));\n const wasWaiting = React.useRef(false);\n React.useEffect(() => {\n if (!Number.isFinite(endDuration)) return;\n const hide = setTimeout(() => setEnding((e) => (wasWaiting.current ? e : null)), endDuration);\n return () => clearTimeout(hide);\n // Only the ending a loader was mounted with: later endings have their own timer below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n if (waiting) {\n wasWaiting.current = true;\n return;\n }\n if (!wasWaiting.current || status === \"loading\") return;\n wasWaiting.current = false;\n const end = status;\n const show = setTimeout(() => setEnding(endDuration > 0 ? end : null), 0);\n const hide = Number.isFinite(endDuration) ? setTimeout(() => setEnding(null), endDuration) : undefined;\n return () => {\n clearTimeout(show);\n clearTimeout(hide);\n };\n }, [waiting, status, endDuration]);\n\n const phase = waiting ? \"loading\" : ending;\n const s = loader({ variant, ended: phase === \"success\" || phase === \"error\" ? phase : undefined });\n const known = phase === \"loading\" && typeof value === \"number\" && Number.isFinite(value);\n const words = phase === \"success\" ? (successLabel ?? label) : phase === \"error\" ? (errorLabel ?? label) : label;\n const detail = phase === \"loading\" ? [known ? `${Math.round(Math.min(1, Math.max(0, value)) * 100)} %` : null, eta].filter(Boolean).join(\" · \") : \"\";\n return (\n <div role=\"status\" aria-live=\"polite\" data-phase={phase ?? \"idle\"} className={s.root({ className })} {...props}>\n {phase && (\n <div className={s.box()}>\n {mark && phase === \"loading\" ? (\n <span aria-hidden className={s.mark()} data-mark=\"\">\n {mark}\n </span>\n ) : (\n <LoaderGlyph state={phase} value={known ? value : null} className={s.glyph()} />\n )}\n <span className={s.text()}>\n <span className={s.label()}>{words}</span>\n {detail && <span className={s.detail()}>{detail}</span>}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport interface LoadingRegionProps extends React.ComponentProps<\"div\"> {\n /** Whether the content is on its way. */\n loading: boolean;\n /** What stands in while it loads: skeletons the shape of the content (no layout shift when it arrives). */\n skeleton: React.ReactNode;\n /** What is loading, in words — passed translated; announced when the wait shows. */\n label: string;\n /** The words when the wait grows long (“Still loading — the server is busy”) — passed translated. */\n slowLabel?: string;\n /**\n * Milliseconds of skeleton before the words of a long wait appear over it.\n * @default 4000\n */\n slowAfter?: number;\n /**\n * Milliseconds before the skeleton shows: a fast answer goes straight to the content.\n * @default 200\n */\n delay?: number;\n /**\n * Once shown, the least milliseconds the skeleton stays.\n * @default 500\n */\n minDuration?: number;\n}\n\n/**\n * A region that hands over: its content → (after `delay`) a skeleton of the same shape → (after `slowAfter`) words over\n * the skeleton → its content again, fading in. `aria-busy` while it waits; the wait is announced once.\n */\nexport function LoadingRegion({\n loading,\n skeleton,\n label,\n slowLabel,\n slowAfter = 4000,\n delay = 200,\n minDuration = 500,\n className,\n children,\n ...props\n}: LoadingRegionProps) {\n const waiting = useDelayedWait(loading, delay, minDuration);\n const slow = useDelayedWait(waiting && loading, slowAfter, 0);\n const busy = loading || waiting;\n return (\n <div aria-busy={busy} data-phase={waiting ? (slow ? \"slow\" : \"skeleton\") : busy ? \"pending\" : \"ready\"} className={[\"relative\", className].filter(Boolean).join(\" \")} {...props}>\n <span role=\"status\" className=\"sr-only\">\n {waiting ? (slow ? (slowLabel ?? label) : label) : \"\"}\n </span>\n {waiting ? (\n <div aria-hidden className=\"kz-fade\">\n {skeleton}\n </div>\n ) : busy ? (\n // Within the delay: the skeleton holds the place, invisible — nothing flashes, nothing jumps.\n <div aria-hidden className=\"invisible\">\n {skeleton}\n </div>\n ) : (\n <div className=\"kz-fade\">{children}</div>\n )}\n {waiting && slow && <Loader label={slowLabel ?? label} variant=\"overlay\" delay={0} minDuration={0} endDuration={0} aria-live=\"off\" role=\"presentation\" />}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/loader/loader.tsx"],"sourcesContent":["// Client (timers). The whole life of a wait, done right once: nothing for the first instants (a fast answer never\n// flashes a spinner), then the Krizaka glyph with its words and an ETA, held long enough to be read, ending on a\n// check or a cross that is drawn and announced. `LoadingRegion` hands a region over from its content to a skeleton of\n// the same shape, then to words when the wait grows long, then back to the content.\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nimport { LoaderGlyph } from \"../spinner/glyph\";\n\nexport const loader = tv({\n slots: {\n root: \"text-fg-secondary\",\n box: \"kz-fade flex items-center gap-3\",\n glyph: \"shrink-0 text-accent\",\n mark: \"block shrink-0 [&>svg]:block [&>svg]:h-full [&>svg]:w-full\",\n text: \"flex min-w-0 flex-col\",\n label: \"font-medium text-fg\",\n detail: \"text-xs text-fg-secondary tabular-nums\",\n },\n variants: {\n variant: {\n inline: { box: \"text-sm\", glyph: \"h-5 w-5\", mark: \"h-5 w-5\" },\n block: { box: \"flex-col justify-center py-10 text-center text-sm\", glyph: \"h-9 w-9\", mark: \"h-9 w-9\", text: \"items-center\" },\n overlay: {\n root: \"absolute inset-0 z-10 flex items-center justify-center rounded-[inherit] empty:hidden\",\n box: \"flex-col rounded-xl border border-border-default bg-surface-1 px-6 py-5 text-center text-sm shadow-lg\",\n glyph: \"h-9 w-9\", mark: \"h-9 w-9\",\n text: \"items-center\",\n },\n page: {\n root: \"fixed inset-0 z-50 flex items-center justify-center bg-surface-0 empty:hidden\",\n box: \"flex-col text-center\",\n glyph: \"h-14 w-14\", mark: \"h-14 w-14\",\n text: \"items-center\",\n label: \"font-display text-lg\",\n },\n },\n ended: {\n success: { glyph: \"text-fg-success\" },\n error: { glyph: \"text-fg-danger\" },\n },\n },\n defaultVariants: { variant: \"inline\" },\n});\n\nexport type LoaderVariants = VariantProps<typeof loader>;\n\n/**\n * `true` once `active` has lasted `delay` ms; then stays `true` at least `minDuration` ms — a wait that ends early never\n * shows, one that shows never blinks.\n */\nexport function useDelayedWait(active: boolean, delay = 250, minDuration = 600): boolean {\n const [shown, setShown] = React.useState(false);\n const since = React.useRef(0);\n React.useEffect(() => {\n if (active === shown) return;\n const wait = active ? delay : Math.max(0, minDuration - (Date.now() - since.current));\n const timer = setTimeout(() => {\n since.current = Date.now();\n setShown(active);\n }, wait);\n return () => clearTimeout(timer);\n }, [active, shown, delay, minDuration]);\n return shown;\n}\n\nexport interface LoaderProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /** What is loading, in words (“Loading your invoices”) — passed translated; shown and announced. */\n label: string;\n /**\n * loading · success · error. When the wait ends, the loader shows how it ended for `endDuration` ms, then disappears.\n * @default \"loading\"\n */\n status?: \"loading\" | \"success\" | \"error\";\n /** The words of a success (“Invoices loaded”) — passed translated. Default: nothing more than the check. */\n successLabel?: string;\n /** The words of a failure (“Could not load the invoices”) — passed translated. */\n errorLabel?: string;\n /** Between 0 and 1: a determinate wait — the trace grows to it and the percentage shows. */\n value?: number | null;\n /** The time left, in words (“About 20 s left”) — passed translated (`@krizaka/intl` formats durations). */\n eta?: string;\n /**\n * Milliseconds before anything shows: a wait shorter than this never flashes.\n * @default 250\n */\n delay?: number;\n /**\n * Once shown, the least milliseconds it stays: it never blinks.\n * @default 600\n */\n minDuration?: number;\n /**\n * Milliseconds the ending (check or cross) stays before the loader disappears; `0` never shows it, `Infinity` keeps it.\n * @default 1600\n */\n endDuration?: number;\n /**\n * inline (beside the content) · block (a region's centre) · overlay (over a `relative` parent, frosted) · page (the\n * whole screen).\n * @default \"inline\"\n */\n variant?: LoaderVariants[\"variant\"];\n /**\n * The product's mark in place of the Krizaka glyph while it waits — `<OrochiaLogo animated />` (or `ProductLogo`) of\n * `@krizaka/ui`; it takes the loader's size. The ending (check or cross) stays the glyph's. Decorative: leave `title` off.\n */\n mark?: React.ReactNode;\n}\n\n/**\n * A wait, from start to end. `role=\"status\"` (polite): its words are announced when it shows and when it ends. Under\n * prefers-reduced-motion the glyph rests on a still frame; the delay and the ending stay.\n */\nexport function Loader({\n label,\n status = \"loading\",\n successLabel,\n errorLabel,\n value,\n eta,\n delay = 250,\n minDuration = 600,\n endDuration = 1600,\n variant,\n mark,\n className,\n ...props\n}: LoaderProps) {\n const waiting = useDelayedWait(status === \"loading\", delay, minDuration);\n // Rendered already ended (a result to show), it shows its ending; otherwise only a wait that was seen ends visibly.\n const [ending, setEnding] = React.useState<\"success\" | \"error\" | null>(() => (status !== \"loading\" && endDuration > 0 ? status : null));\n const wasWaiting = React.useRef(false);\n React.useEffect(() => {\n if (!Number.isFinite(endDuration)) return;\n const hide = setTimeout(() => setEnding((e) => (wasWaiting.current ? e : null)), endDuration);\n return () => clearTimeout(hide);\n // Only the ending a loader was mounted with: later endings have their own timer below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n if (waiting) {\n wasWaiting.current = true;\n return;\n }\n if (!wasWaiting.current || status === \"loading\") return;\n wasWaiting.current = false;\n const end = status;\n const show = setTimeout(() => setEnding(endDuration > 0 ? end : null), 0);\n const hide = Number.isFinite(endDuration) ? setTimeout(() => setEnding(null), endDuration) : undefined;\n return () => {\n clearTimeout(show);\n clearTimeout(hide);\n };\n }, [waiting, status, endDuration]);\n\n const phase = waiting ? \"loading\" : ending;\n const s = loader({ variant, ended: phase === \"success\" || phase === \"error\" ? phase : undefined });\n const known = phase === \"loading\" && typeof value === \"number\" && Number.isFinite(value);\n const words = phase === \"success\" ? (successLabel ?? label) : phase === \"error\" ? (errorLabel ?? label) : label;\n const detail = phase === \"loading\" ? [known ? `${Math.round(Math.min(1, Math.max(0, value)) * 100)} %` : null, eta].filter(Boolean).join(\" · \") : \"\";\n return (\n <div role=\"status\" aria-live=\"polite\" data-phase={phase ?? \"idle\"} className={s.root({ className })} {...props}>\n {phase && (\n <div className={s.box()}>\n {mark && phase === \"loading\" ? (\n <span aria-hidden className={s.mark()} data-mark=\"\">\n {mark}\n </span>\n ) : (\n <LoaderGlyph state={phase} value={known ? value : null} className={s.glyph()} />\n )}\n <span className={s.text()}>\n <span className={s.label()}>{words}</span>\n {detail && <span className={s.detail()}>{detail}</span>}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport interface LoadingRegionProps extends React.ComponentProps<\"div\"> {\n /** Whether the content is on its way. */\n loading: boolean;\n /** What stands in while it loads: skeletons the shape of the content (no layout shift when it arrives). */\n skeleton: React.ReactNode;\n /** What is loading, in words — passed translated; announced when the wait shows. */\n label: string;\n /** The words when the wait grows long (“Still loading — the server is busy”) — passed translated. */\n slowLabel?: string;\n /**\n * Milliseconds of skeleton before the words of a long wait appear over it.\n * @default 4000\n */\n slowAfter?: number;\n /**\n * Milliseconds before the skeleton shows: a fast answer goes straight to the content.\n * @default 200\n */\n delay?: number;\n /**\n * Once shown, the least milliseconds the skeleton stays.\n * @default 500\n */\n minDuration?: number;\n}\n\n/**\n * A region that hands over: its content → (after `delay`) a skeleton of the same shape → (after `slowAfter`) words over\n * the skeleton → its content again, fading in. `aria-busy` while it waits; the wait is announced once.\n */\nexport function LoadingRegion({\n loading,\n skeleton,\n label,\n slowLabel,\n slowAfter = 4000,\n delay = 200,\n minDuration = 500,\n className,\n children,\n ...props\n}: LoadingRegionProps) {\n const waiting = useDelayedWait(loading, delay, minDuration);\n const slow = useDelayedWait(waiting && loading, slowAfter, 0);\n const busy = loading || waiting;\n return (\n <div aria-busy={busy} data-phase={waiting ? (slow ? \"slow\" : \"skeleton\") : busy ? \"pending\" : \"ready\"} className={[\"relative\", className].filter(Boolean).join(\" \")} {...props}>\n <span role=\"status\" className=\"sr-only\">\n {waiting ? (slow ? (slowLabel ?? label) : label) : \"\"}\n </span>\n {waiting ? (\n <div aria-hidden className=\"kz-fade\">\n {skeleton}\n </div>\n ) : busy ? (\n // Within the delay: the skeleton holds the place, invisible — nothing flashes, nothing jumps.\n <div aria-hidden className=\"invisible\">\n {skeleton}\n </div>\n ) : (\n <div className=\"kz-fade\">{children}</div>\n )}\n {waiting && slow && <Loader label={slowLabel ?? label} variant=\"overlay\" delay={0} minDuration={0} endDuration={0} aria-live=\"off\" role=\"presentation\" />}\n </div>\n );\n}\n"],"mappings":"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","names":[]}