@krizaka/ui 3.22.0 → 3.24.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 (453) hide show
  1. package/README.md +6 -1
  2. package/dist/achievement.js +1 -1
  3. package/dist/action-bar.js +4 -4
  4. package/dist/app-header.d.ts +79 -0
  5. package/dist/app-header.js +32 -0
  6. package/dist/app-header.js.map +1 -0
  7. package/dist/app-shell.d.ts +20 -2
  8. package/dist/app-shell.js +34 -19
  9. package/dist/app-shell.js.map +1 -1
  10. package/dist/argument-card.d.ts +4 -1
  11. package/dist/argument-card.js +10 -7
  12. package/dist/argument-card.js.map +1 -1
  13. package/dist/audio-player.d.ts +3 -2
  14. package/dist/audio-player.js +14 -10
  15. package/dist/audio-player.js.map +1 -1
  16. package/dist/blocks.css +28 -0
  17. package/dist/button.js +2 -1
  18. package/dist/captcha.d.ts +81 -0
  19. package/dist/captcha.js +162 -0
  20. package/dist/captcha.js.map +1 -0
  21. package/dist/card-grid.d.ts +10 -1
  22. package/dist/card-grid.js +3 -2
  23. package/dist/card-grid.js.map +1 -1
  24. package/dist/card.js +3 -3
  25. package/dist/changelog-page.d.ts +57 -3
  26. package/dist/changelog-page.js +117 -1
  27. package/dist/changelog-page.js.map +1 -1
  28. package/dist/choice-grid.js +1 -1
  29. package/dist/{chunk-YCIBJ6OQ.js → chunk-4DH2HW3D.js} +3 -1
  30. package/dist/{chunk-3IN6TOPM.js → chunk-6ZYRUOTA.js} +6 -3
  31. package/dist/chunk-6ZYRUOTA.js.map +1 -0
  32. package/dist/chunk-APNIVNIX.js +54 -0
  33. package/dist/chunk-APNIVNIX.js.map +1 -0
  34. package/dist/{chunk-FKBHWS4N.js → chunk-CEJDH6SA.js} +2 -2
  35. package/dist/{chunk-OWC2LZD2.js → chunk-CHOJUCVE.js} +6 -3
  36. package/dist/chunk-CHOJUCVE.js.map +1 -0
  37. package/dist/{chunk-3BC4XQ6C.js → chunk-DZU6RMYD.js} +6 -3
  38. package/dist/chunk-DZU6RMYD.js.map +1 -0
  39. package/dist/{chunk-R6NK6ZNY.js → chunk-F7FVPPBB.js} +4 -4
  40. package/dist/{chunk-2L67YTNV.js → chunk-FTX66XZY.js} +2 -2
  41. package/dist/{chunk-5Z7FWCV2.js → chunk-HBZPJ3EP.js} +2 -2
  42. package/dist/{chunk-C2BRIFJG.js → chunk-HJFRHYCI.js} +2 -2
  43. package/dist/{chunk-ZNMFG62E.js → chunk-KH3JOEPY.js} +3 -2
  44. package/dist/chunk-KH3JOEPY.js.map +1 -0
  45. package/dist/{chunk-BTMFZ66D.js → chunk-KM6VAKIE.js} +2 -2
  46. package/dist/{chunk-DGQMDJXK.js → chunk-LZNZLCOE.js} +2 -2
  47. package/dist/{chunk-AQSZJJAJ.js → chunk-MQPC3P4T.js} +2 -2
  48. package/dist/{chunk-2FRWNSRO.js → chunk-NSLXEDIS.js} +3 -2
  49. package/dist/chunk-NSLXEDIS.js.map +1 -0
  50. package/dist/{chunk-4LOMIQVX.js → chunk-W675RFOA.js} +3 -2
  51. package/dist/chunk-W675RFOA.js.map +1 -0
  52. package/dist/{chunk-G3ETON2A.js → chunk-WU4VLSEA.js} +3 -2
  53. package/dist/chunk-WU4VLSEA.js.map +1 -0
  54. package/dist/{chunk-IZ7MV6HM.js → chunk-XVFQZ3ZG.js} +3 -2
  55. package/dist/chunk-XVFQZ3ZG.js.map +1 -0
  56. package/dist/cn.js +1 -1
  57. package/dist/code-block.js +2 -2
  58. package/dist/code-block.js.map +1 -1
  59. package/dist/command.js +3 -3
  60. package/dist/comparison-table.js +1 -1
  61. package/dist/confirm-button.js +2 -2
  62. package/dist/continue-prompt.js +3 -3
  63. package/dist/continue-prompt.js.map +1 -1
  64. package/dist/cta-panel.js +1 -1
  65. package/dist/data-table.js +4 -4
  66. package/dist/date-picker.js +2 -2
  67. package/dist/decision-list.js +1 -1
  68. package/dist/dialog.js +3 -2
  69. package/dist/dialog.js.map +1 -1
  70. package/dist/docs-nav.d.ts +36 -0
  71. package/dist/docs-nav.js +44 -0
  72. package/dist/docs-nav.js.map +1 -0
  73. package/dist/dropdown-menu.js +1 -1
  74. package/dist/error-page.js +1 -1
  75. package/dist/field.js +1 -1
  76. package/dist/filter-bar.js +2 -2
  77. package/dist/force-update-screen.js +2 -1
  78. package/dist/force-update-screen.js.map +1 -1
  79. package/dist/gallery-page.js +1 -1
  80. package/dist/genui.d.ts +3 -1
  81. package/dist/genui.js +33 -6
  82. package/dist/genui.js.map +1 -1
  83. package/dist/glow-card.js +1 -1
  84. package/dist/goal-gauge.js +1 -1
  85. package/dist/how-it-works-page.js +1 -1
  86. package/dist/image-cropper.js +3 -3
  87. package/dist/index.d.ts +15 -1
  88. package/dist/index.js +65 -5
  89. package/dist/index.js.map +1 -1
  90. package/dist/landscape.js +1 -1
  91. package/dist/link-card.d.ts +9 -2
  92. package/dist/link-card.js +5 -44
  93. package/dist/link-card.js.map +1 -1
  94. package/dist/longform-page.js +1 -1
  95. package/dist/maintenance-screen.js +2 -1
  96. package/dist/maintenance-screen.js.map +1 -1
  97. package/dist/map.js +3 -3
  98. package/dist/map.js.map +1 -1
  99. package/dist/markdown.js +2 -1
  100. package/dist/markdown.js.map +1 -1
  101. package/dist/marquee.js +1 -1
  102. package/dist/mascot-quote.js +1 -1
  103. package/dist/match-dialog.js +2 -1
  104. package/dist/match-dialog.js.map +1 -1
  105. package/dist/media-grid.d.ts +26 -4
  106. package/dist/media-grid.js +144 -77
  107. package/dist/media-grid.js.map +1 -1
  108. package/dist/native/map.js +3 -3
  109. package/dist/native/map.js.map +1 -1
  110. package/dist/native.d.ts +18 -1
  111. package/dist/native.js +105 -24
  112. package/dist/native.js.map +1 -1
  113. package/dist/nav-bar.js +3 -3
  114. package/dist/page-hero.js +6 -6
  115. package/dist/page.js +2 -2
  116. package/dist/popover.js +1 -1
  117. package/dist/pricing-page.js +1 -1
  118. package/dist/product-page.js +1 -1
  119. package/dist/profile-card.js +1 -1
  120. package/dist/promise-card.js +1 -1
  121. package/dist/radio-group.js +2 -2
  122. package/dist/rail-nav.d.ts +149 -0
  123. package/dist/rail-nav.js +177 -0
  124. package/dist/rail-nav.js.map +1 -0
  125. package/dist/scroll-stage.js +1 -1
  126. package/dist/settings-layout.d.ts +75 -62
  127. package/dist/settings-layout.js +39 -6
  128. package/dist/settings-layout.js.map +1 -1
  129. package/dist/showcase.js +1 -1
  130. package/dist/site-footer.d.ts +48 -67
  131. package/dist/site-footer.js +36 -12
  132. package/dist/site-footer.js.map +1 -1
  133. package/dist/slider.js +2 -2
  134. package/dist/stage-banner.js +1 -1
  135. package/dist/step-showcase.js +1 -1
  136. package/dist/tabs.js +1 -1
  137. package/dist/tabs.js.map +1 -1
  138. package/dist/terminal-replay.js +1 -1
  139. package/dist/theme.js +2 -1
  140. package/dist/theme.js.map +1 -1
  141. package/dist/toast.js +1 -1
  142. package/dist/toc.js +1 -1
  143. package/dist/tooltip.js +1 -1
  144. package/dist/update-prompt.js +2 -1
  145. package/dist/update-prompt.js.map +1 -1
  146. package/dist/vertical-video.js +2 -2
  147. package/dist/video-player.js +3 -3
  148. package/dist/waveform.d.ts +93 -0
  149. package/dist/waveform.js +95 -0
  150. package/dist/waveform.js.map +1 -0
  151. package/package.json +81 -10
  152. package/registry/achievement.json +1 -1
  153. package/registry/action-bar.json +1 -1
  154. package/registry/activity-feed.json +1 -1
  155. package/registry/alert.json +1 -1
  156. package/registry/app-header.json +202 -0
  157. package/registry/app-shell.json +33 -9
  158. package/registry/argument-card.json +37 -5
  159. package/registry/audio-player.json +5 -3
  160. package/registry/auth-layout.json +1 -1
  161. package/registry/avatar.json +1 -1
  162. package/registry/badge.json +1 -1
  163. package/registry/button.json +3 -2
  164. package/registry/captcha.json +300 -0
  165. package/registry/card-grid.json +27 -3
  166. package/registry/card.json +1 -1
  167. package/registry/catalogue-page.json +1 -1
  168. package/registry/changelog-page.json +11 -7
  169. package/registry/chat.json +1 -1
  170. package/registry/checkbox.json +1 -1
  171. package/registry/chip-link.json +1 -1
  172. package/registry/chip.json +1 -1
  173. package/registry/choice-grid.json +1 -1
  174. package/registry/cn.json +1 -1
  175. package/registry/code-block.json +1 -1
  176. package/registry/combobox.json +1 -1
  177. package/registry/command.json +1 -1
  178. package/registry/comparison-table.json +1 -1
  179. package/registry/component-page.json +1 -1
  180. package/registry/confirm-button.json +1 -1
  181. package/registry/contact-page.json +1 -1
  182. package/registry/continue-prompt.json +1 -1
  183. package/registry/countdown.json +1 -1
  184. package/registry/cta-panel.json +1 -1
  185. package/registry/dashboard-layout.json +1 -1
  186. package/registry/data-table.json +1 -1
  187. package/registry/date-picker.json +1 -1
  188. package/registry/decision-list.json +1 -1
  189. package/registry/description-list.json +1 -1
  190. package/registry/detail-layout.json +1 -1
  191. package/registry/dialog.json +1 -1
  192. package/registry/docs-article-page.json +1 -1
  193. package/registry/docs-hub-page.json +1 -1
  194. package/registry/docs-layout.json +1 -1
  195. package/registry/docs-nav.json +177 -0
  196. package/registry/document-viewer.json +1 -1
  197. package/registry/dropdown-menu.json +1 -1
  198. package/registry/empty-state.json +1 -1
  199. package/registry/error-page.json +1 -1
  200. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  201. package/registry/examples/app-header/basic.d.ts +4 -0
  202. package/registry/examples/app-header/basic.js +23 -0
  203. package/registry/examples/app-header/basic.tsx +17 -0
  204. package/registry/examples/app-shell/desktop.d.ts +4 -0
  205. package/registry/examples/app-shell/desktop.js +41 -0
  206. package/registry/examples/app-shell/desktop.tsx +37 -0
  207. package/registry/examples/argument-card/hover-light.d.ts +4 -0
  208. package/registry/examples/argument-card/hover-light.js +17 -0
  209. package/registry/examples/argument-card/hover-light.tsx +19 -0
  210. package/registry/examples/argument-card/hover-quiet.d.ts +4 -0
  211. package/registry/examples/argument-card/hover-quiet.js +17 -0
  212. package/registry/examples/argument-card/hover-quiet.tsx +19 -0
  213. package/registry/examples/avatar/native/group.light.png +0 -0
  214. package/registry/examples/avatar/native/presence.light.png +0 -0
  215. package/registry/examples/avatar/native/sizes.light.png +0 -0
  216. package/registry/examples/badge/native/tones.light.png +0 -0
  217. package/registry/examples/button/native/ghost.light.png +0 -0
  218. package/registry/examples/captcha/disclosure.d.ts +4 -0
  219. package/registry/examples/captcha/disclosure.js +14 -0
  220. package/registry/examples/captcha/disclosure.tsx +11 -0
  221. package/registry/examples/captcha/form.d.ts +4 -0
  222. package/registry/examples/captcha/form.js +18 -0
  223. package/registry/examples/captcha/form.tsx +17 -0
  224. package/registry/examples/card/native/body.light.png +0 -0
  225. package/registry/examples/card/native/default.light.png +0 -0
  226. package/registry/examples/card/native/elevated.light.png +0 -0
  227. package/registry/examples/card/native/pressable.light.png +0 -0
  228. package/registry/examples/card-grid/hover-quiet.d.ts +4 -0
  229. package/registry/examples/card-grid/hover-quiet.js +18 -0
  230. package/registry/examples/card-grid/hover-quiet.tsx +20 -0
  231. package/registry/examples/changelog-page/releases.js +1 -1
  232. package/registry/examples/changelog-page/releases.tsx +1 -1
  233. package/registry/examples/chat/native/conversation.light.png +0 -0
  234. package/registry/examples/chat/native/inbox.light.png +0 -0
  235. package/registry/examples/chip/native/multiple.light.png +0 -0
  236. package/registry/examples/chip/native/removable.light.png +0 -0
  237. package/registry/examples/chip/native/single.light.png +0 -0
  238. package/registry/examples/chip/native/toggle.light.png +0 -0
  239. package/registry/examples/combobox/native/multiple.light.png +0 -0
  240. package/registry/examples/combobox/native/search.light.png +0 -0
  241. package/registry/examples/countdown/native/days.light.png +0 -0
  242. package/registry/examples/countdown/native/hours.light.png +0 -0
  243. package/registry/examples/countdown/native/sizes.light.png +0 -0
  244. package/registry/examples/countdown/native/urgent.light.png +0 -0
  245. package/registry/examples/countdown/native/with-label.light.png +0 -0
  246. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  247. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  248. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  249. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  250. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  251. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  252. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  253. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  254. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  255. package/registry/examples/description-list/native/job-details.light.png +0 -0
  256. package/registry/examples/docs-nav/groups.d.ts +4 -0
  257. package/registry/examples/docs-nav/groups.js +21 -0
  258. package/registry/examples/docs-nav/groups.tsx +15 -0
  259. package/registry/examples/empty-state/native/default.light.png +0 -0
  260. package/registry/examples/field/native/default.light.png +0 -0
  261. package/registry/examples/field/native/select.light.png +0 -0
  262. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  263. package/registry/examples/form/native/amount.light.png +0 -0
  264. package/registry/examples/form/native/audience.light.png +0 -0
  265. package/registry/examples/form/native/profile.light.png +0 -0
  266. package/registry/examples/form/native/settings.light.png +0 -0
  267. package/registry/examples/form/native/sign-up.light.png +0 -0
  268. package/registry/examples/form/native/upload.dark.png +0 -0
  269. package/registry/examples/form/native/upload.light.png +0 -0
  270. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  271. package/registry/examples/header/native/large-title.light.png +0 -0
  272. package/registry/examples/link-card/hover-light.d.ts +4 -0
  273. package/registry/examples/link-card/hover-light.js +18 -0
  274. package/registry/examples/link-card/hover-light.tsx +20 -0
  275. package/registry/examples/link-card/hover-quiet.d.ts +4 -0
  276. package/registry/examples/link-card/hover-quiet.js +18 -0
  277. package/registry/examples/link-card/hover-quiet.tsx +20 -0
  278. package/registry/examples/loader/native/job-wait.light.png +0 -0
  279. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  280. package/registry/examples/map/native/places.light.png +0 -0
  281. package/registry/examples/markdown/native/basic.light.png +0 -0
  282. package/registry/examples/mascot-state/native/default.light.png +0 -0
  283. package/registry/examples/media-picker/native/story.light.png +0 -0
  284. package/registry/examples/meta-row/native/video.light.png +0 -0
  285. package/registry/examples/meter/native/credits.light.png +0 -0
  286. package/registry/examples/meter/native/split-ring.light.png +0 -0
  287. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  288. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  289. package/registry/examples/otp-input/native/verify.light.png +0 -0
  290. package/registry/examples/pagination/native/cursor.light.png +0 -0
  291. package/registry/examples/pagination/native/pages.light.png +0 -0
  292. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  293. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  294. package/registry/examples/profile-card/native/default.light.png +0 -0
  295. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  296. package/registry/examples/radio-group/native/cards.light.png +0 -0
  297. package/registry/examples/radio-group/native/list.light.png +0 -0
  298. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  299. package/registry/examples/rail-nav/expandable.d.ts +4 -0
  300. package/registry/examples/rail-nav/expandable.js +34 -0
  301. package/registry/examples/rail-nav/expandable.tsx +28 -0
  302. package/registry/examples/rail-nav/studio.d.ts +4 -0
  303. package/registry/examples/rail-nav/studio.js +43 -0
  304. package/registry/examples/rail-nav/studio.tsx +38 -0
  305. package/registry/examples/screen/native/app-shell.light.png +0 -0
  306. package/registry/examples/screen/native/auth.light.png +0 -0
  307. package/registry/examples/screen/native/map.light.png +0 -0
  308. package/registry/examples/screen/native/notifications.light.png +0 -0
  309. package/registry/examples/screen/native/profile.light.png +0 -0
  310. package/registry/examples/segmented/native/default.light.png +0 -0
  311. package/registry/examples/segmented/native/small.light.png +0 -0
  312. package/registry/examples/settings-layout/flat.d.ts +4 -0
  313. package/registry/examples/settings-layout/flat.js +26 -0
  314. package/registry/examples/settings-layout/flat.tsx +30 -0
  315. package/registry/examples/showcase/native/slides.light.png +0 -0
  316. package/registry/examples/site-footer/app.d.ts +4 -0
  317. package/registry/examples/site-footer/app.js +25 -0
  318. package/registry/examples/site-footer/app.tsx +22 -0
  319. package/registry/examples/site-footer/docs.d.ts +4 -0
  320. package/registry/examples/site-footer/docs.js +31 -0
  321. package/registry/examples/site-footer/docs.tsx +24 -0
  322. package/registry/examples/slider/native/default.light.png +0 -0
  323. package/registry/examples/slider/native/stepped.light.png +0 -0
  324. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  325. package/registry/examples/stepper/native/run.light.png +0 -0
  326. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  327. package/registry/examples/switch/native/settings.light.png +0 -0
  328. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  329. package/registry/examples/tabs/native/sections.light.png +0 -0
  330. package/registry/examples/tabs/native/segmented.light.png +0 -0
  331. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  332. package/registry/examples/toast/native/tones.light.png +0 -0
  333. package/registry/examples/txt/native/tones.dark.png +0 -0
  334. package/registry/examples/txt/native/tones.light.png +0 -0
  335. package/registry/examples/update-prompt/native/default.light.png +0 -0
  336. package/registry/examples/waveform/card.d.ts +4 -0
  337. package/registry/examples/waveform/card.js +18 -0
  338. package/registry/examples/waveform/card.tsx +16 -0
  339. package/registry/examples/waveform/native/card.d.ts +4 -0
  340. package/registry/examples/waveform/native/card.dark.png +0 -0
  341. package/registry/examples/waveform/native/card.js +19 -0
  342. package/registry/examples/waveform/native/card.light.png +0 -0
  343. package/registry/examples/waveform/native/card.tsx +19 -0
  344. package/registry/examples/waveform/sizes.d.ts +4 -0
  345. package/registry/examples/waveform/sizes.js +16 -0
  346. package/registry/examples/waveform/sizes.tsx +14 -0
  347. package/registry/field.json +1 -1
  348. package/registry/file-upload.json +1 -1
  349. package/registry/filter-bar.json +1 -1
  350. package/registry/force-update-screen.json +1 -1
  351. package/registry/form.json +1 -1
  352. package/registry/gallery-page.json +1 -1
  353. package/registry/genui.json +3 -3
  354. package/registry/glow-card.json +1 -1
  355. package/registry/goal-gauge.json +1 -1
  356. package/registry/how-it-works-page.json +1 -1
  357. package/registry/image-cropper.json +1 -1
  358. package/registry/index.json +197 -14
  359. package/registry/iso.json +1 -1
  360. package/registry/kanban.json +1 -1
  361. package/registry/kbd.json +1 -1
  362. package/registry/landing-page.json +1 -1
  363. package/registry/landscape.json +1 -1
  364. package/registry/legal-page.json +1 -1
  365. package/registry/link-card.json +38 -6
  366. package/registry/list.json +1 -1
  367. package/registry/loader.json +1 -1
  368. package/registry/longform-page.json +1 -1
  369. package/registry/maintenance-screen.json +1 -1
  370. package/registry/map.json +2 -2
  371. package/registry/markdown.json +1 -1
  372. package/registry/marketing-layout.json +1 -1
  373. package/registry/marquee.json +1 -1
  374. package/registry/mascot-quote.json +1 -1
  375. package/registry/mascot-state.json +1 -1
  376. package/registry/mascots.json +1 -1
  377. package/registry/match-dialog.json +1 -1
  378. package/registry/media-capture.json +1 -1
  379. package/registry/media-grid.json +92 -6
  380. package/registry/meta-row.json +1 -1
  381. package/registry/meter.json +1 -1
  382. package/registry/nav-bar.json +2 -2
  383. package/registry/number-ticker.json +1 -1
  384. package/registry/page-header.json +1 -1
  385. package/registry/page-hero.json +1 -1
  386. package/registry/page.json +1 -1
  387. package/registry/pagination.json +1 -1
  388. package/registry/photo-grid.json +1 -1
  389. package/registry/pointer-light.json +1 -1
  390. package/registry/popover.json +1 -1
  391. package/registry/pricing-page.json +1 -1
  392. package/registry/product-page.json +1 -1
  393. package/registry/profile-card.json +1 -1
  394. package/registry/progress.json +1 -1
  395. package/registry/promise-card.json +1 -1
  396. package/registry/radio-group.json +1 -1
  397. package/registry/rail-nav.json +493 -0
  398. package/registry/recipes.json +1 -1
  399. package/registry/scroll-stage.json +1 -1
  400. package/registry/search-field.json +1 -1
  401. package/registry/section-backdrop.json +1 -1
  402. package/registry/separator.json +1 -1
  403. package/registry/settings-layout.json +104 -9
  404. package/registry/showcase.json +1 -1
  405. package/registry/site-footer.json +38 -6
  406. package/registry/sites.json +1 -1
  407. package/registry/skeleton.json +1 -1
  408. package/registry/skip-link.json +1 -1
  409. package/registry/slider.json +1 -1
  410. package/registry/slot.json +1 -1
  411. package/registry/spinner.json +1 -1
  412. package/registry/split-view.json +1 -1
  413. package/registry/stage-banner.json +1 -1
  414. package/registry/stat.json +1 -1
  415. package/registry/status-page.json +1 -1
  416. package/registry/step-progress.json +1 -1
  417. package/registry/step-showcase.json +1 -1
  418. package/registry/stepper.json +1 -1
  419. package/registry/swipe-deck.json +1 -1
  420. package/registry/switch.json +1 -1
  421. package/registry/tabs.json +2 -2
  422. package/registry/tag-input.json +1 -1
  423. package/registry/tag-selector.json +1 -1
  424. package/registry/terminal-replay.json +1 -1
  425. package/registry/theme.json +1 -1
  426. package/registry/toast.json +1 -1
  427. package/registry/toc.json +1 -1
  428. package/registry/tooltip.json +1 -1
  429. package/registry/tree-view.json +1 -1
  430. package/registry/update-prompt.json +1 -1
  431. package/registry/verified-badge.json +1 -1
  432. package/registry/vertical-video.json +1 -1
  433. package/registry/video-player.json +1 -1
  434. package/registry/video-trimmer.json +1 -1
  435. package/registry/virtual.json +1 -1
  436. package/registry/waveform.json +296 -0
  437. package/dist/chunk-2FRWNSRO.js.map +0 -1
  438. package/dist/chunk-3BC4XQ6C.js.map +0 -1
  439. package/dist/chunk-3IN6TOPM.js.map +0 -1
  440. package/dist/chunk-4LOMIQVX.js.map +0 -1
  441. package/dist/chunk-G3ETON2A.js.map +0 -1
  442. package/dist/chunk-IZ7MV6HM.js.map +0 -1
  443. package/dist/chunk-OWC2LZD2.js.map +0 -1
  444. package/dist/chunk-ZNMFG62E.js.map +0 -1
  445. /package/dist/{chunk-YCIBJ6OQ.js.map → chunk-4DH2HW3D.js.map} +0 -0
  446. /package/dist/{chunk-FKBHWS4N.js.map → chunk-CEJDH6SA.js.map} +0 -0
  447. /package/dist/{chunk-R6NK6ZNY.js.map → chunk-F7FVPPBB.js.map} +0 -0
  448. /package/dist/{chunk-2L67YTNV.js.map → chunk-FTX66XZY.js.map} +0 -0
  449. /package/dist/{chunk-5Z7FWCV2.js.map → chunk-HBZPJ3EP.js.map} +0 -0
  450. /package/dist/{chunk-C2BRIFJG.js.map → chunk-HJFRHYCI.js.map} +0 -0
  451. /package/dist/{chunk-BTMFZ66D.js.map → chunk-KM6VAKIE.js.map} +0 -0
  452. /package/dist/{chunk-DGQMDJXK.js.map → chunk-LZNZLCOE.js.map} +0 -0
  453. /package/dist/{chunk-AQSZJJAJ.js.map → chunk-MQPC3P4T.js.map} +0 -0
@@ -6,16 +6,16 @@ import {
6
6
  import {
7
7
  Card,
8
8
  Skeleton
9
- } from "./chunk-AQSZJJAJ.js";
9
+ } from "./chunk-MQPC3P4T.js";
10
10
  import "./chunk-JXLDUDTD.js";
11
11
  import {
12
12
  Button,
13
13
  LoaderGlyph
14
- } from "./chunk-3BC4XQ6C.js";
14
+ } from "./chunk-DZU6RMYD.js";
15
15
  import "./chunk-D3T54RSL.js";
16
16
  import {
17
17
  cn
18
- } from "./chunk-2FRWNSRO.js";
18
+ } from "./chunk-NSLXEDIS.js";
19
19
 
20
20
  // src/media-grid/load-more.tsx
21
21
  import * as React from "react";
@@ -64,7 +64,10 @@ function LoadMore({ onLoadMore, hasMore, loading = false, failed = false, label,
64
64
  ] });
65
65
  }
66
66
 
67
- // src/media-grid/shorts-shelf.tsx
67
+ // src/media-grid/media-grid.tsx
68
+ import * as React4 from "react";
69
+
70
+ // src/media-grid/section-hint.tsx
68
71
  import * as React2 from "react";
69
72
 
70
73
  // src/block-link.tsx
@@ -82,33 +85,89 @@ function BlockLink({
82
85
  return /* @__PURE__ */ jsx3(Comp, { href, ...props });
83
86
  }
84
87
 
88
+ // src/media-grid/section-hint.tsx
89
+ import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
90
+ function SectionHint({ label, text, link }) {
91
+ const [open, setOpen] = React2.useState(false);
92
+ const id = React2.useId();
93
+ return /* @__PURE__ */ jsxs2(
94
+ "span",
95
+ {
96
+ className: "relative inline-flex",
97
+ onMouseEnter: () => setOpen(true),
98
+ onMouseLeave: () => setOpen(false),
99
+ onBlur: (e) => {
100
+ if (!e.currentTarget.contains(e.relatedTarget)) setOpen(false);
101
+ },
102
+ onKeyDown: (e) => {
103
+ if (e.key === "Escape") setOpen(false);
104
+ },
105
+ children: [
106
+ /* @__PURE__ */ jsx4(
107
+ "button",
108
+ {
109
+ type: "button",
110
+ "aria-label": label,
111
+ "aria-expanded": open,
112
+ "aria-controls": id,
113
+ onClick: () => setOpen((o) => !o),
114
+ className: "inline-flex h-6 w-6 items-center justify-center rounded-full text-fg-muted transition-colors hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
115
+ children: /* @__PURE__ */ jsxs2("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": true, children: [
116
+ /* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "9" }),
117
+ /* @__PURE__ */ jsx4("path", { d: "M12 11v5M12 8h.01" })
118
+ ] })
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsxs2(
122
+ "span",
123
+ {
124
+ id,
125
+ role: "tooltip",
126
+ hidden: !open,
127
+ className: cn("absolute left-0 top-full z-20 mt-1 w-64 max-w-[80vw] rounded-xl border border-border-default bg-surface-1 p-3 text-sm font-normal leading-snug text-fg-secondary shadow-lg"),
128
+ children: [
129
+ text,
130
+ link && /* @__PURE__ */ jsxs2(Fragment, { children: [
131
+ " ",
132
+ /* @__PURE__ */ jsx4(BlockLink, { href: link.href, linkAs: link.linkAs, className: "font-semibold text-fg-accent hover:underline", children: link.label })
133
+ ] })
134
+ ]
135
+ }
136
+ )
137
+ ]
138
+ }
139
+ );
140
+ }
141
+
85
142
  // src/media-grid/shorts-shelf.tsx
86
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
87
- var Chevron = ({ flip }) => /* @__PURE__ */ jsx4("svg", { viewBox: "0 0 24 24", width: "18", height: "18", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, className: flip ? "rotate-180" : void 0, children: /* @__PURE__ */ jsx4("path", { d: "m9 6 6 6-6 6" }) });
143
+ import * as React3 from "react";
144
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
145
+ var Chevron = ({ flip }) => /* @__PURE__ */ jsx5("svg", { viewBox: "0 0 24 24", width: "18", height: "18", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, className: flip ? "rotate-180" : void 0, children: /* @__PURE__ */ jsx5("path", { d: "m9 6 6 6-6 6" }) });
88
146
  var ARROW = "hidden h-9 w-9 items-center justify-center rounded-full border border-border-default bg-surface-1 text-fg shadow-sm transition-colors hover:bg-surface-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 [@media(hover:hover)]:inline-flex";
89
- function ShortsShelf({ label, title, items, getId, renderItem, seeAll, previousLabel, nextLabel, className, ...props }) {
90
- const row = React2.useRef(null);
91
- const [edge, setEdge] = React2.useState({ start: true, end: false });
92
- const measure = React2.useCallback(() => {
147
+ function ShortsShelf({ label, title, hint, items, getId, renderItem, seeAll, previousLabel, nextLabel, className, ...props }) {
148
+ const row = React3.useRef(null);
149
+ const [edge, setEdge] = React3.useState({ start: true, end: false });
150
+ const measure = React3.useCallback(() => {
93
151
  const el = row.current;
94
152
  if (!el) return;
95
153
  setEdge({ start: el.scrollLeft <= 2, end: el.scrollLeft + el.clientWidth >= el.scrollWidth - 2 });
96
154
  }, []);
97
- React2.useEffect(measure, [measure, items.length]);
155
+ React3.useEffect(measure, [measure, items.length]);
98
156
  const page = (dir) => {
99
157
  const el = row.current;
100
158
  if (el) el.scrollBy({ left: dir * el.clientWidth * 0.85, behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth" });
101
159
  };
102
- const headingId = React2.useId();
160
+ const headingId = React3.useId();
103
161
  if (items.length === 0) return null;
104
- return /* @__PURE__ */ jsxs2("section", { "aria-labelledby": headingId, "data-shorts-shelf": true, className: cn("min-w-0", className), ...props, children: [
105
- /* @__PURE__ */ jsxs2("div", { className: "mb-3 flex items-center gap-2", children: [
106
- /* @__PURE__ */ jsx4("h2", { id: headingId, className: "m-0 mr-auto text-base font-bold text-fg", children: title ?? label }),
107
- seeAll && /* @__PURE__ */ jsx4(BlockLink, { href: seeAll.href, linkAs: seeAll.linkAs, className: "text-sm font-semibold text-fg-accent hover:underline", children: seeAll.label }),
108
- /* @__PURE__ */ jsx4("button", { type: "button", "aria-label": previousLabel, disabled: edge.start, onClick: () => page(-1), className: ARROW, children: /* @__PURE__ */ jsx4(Chevron, { flip: true }) }),
109
- /* @__PURE__ */ jsx4("button", { type: "button", "aria-label": nextLabel, disabled: edge.end, onClick: () => page(1), className: ARROW, children: /* @__PURE__ */ jsx4(Chevron, {}) })
162
+ return /* @__PURE__ */ jsxs3("section", { "aria-labelledby": headingId, "data-shorts-shelf": true, className: cn("min-w-0", className), ...props, children: [
163
+ /* @__PURE__ */ jsxs3("div", { className: "mb-3 flex items-center gap-2", children: [
164
+ /* @__PURE__ */ jsx5("h2", { id: headingId, className: "m-0 mr-auto text-base font-bold text-fg", children: title ?? label }),
165
+ hint && /* @__PURE__ */ jsx5(SectionHint, { ...hint }),
166
+ seeAll && /* @__PURE__ */ jsx5(BlockLink, { href: seeAll.href, linkAs: seeAll.linkAs, className: "text-sm font-semibold text-fg-accent hover:underline", children: seeAll.label }),
167
+ /* @__PURE__ */ jsx5("button", { type: "button", "aria-label": previousLabel, disabled: edge.start, onClick: () => page(-1), className: ARROW, children: /* @__PURE__ */ jsx5(Chevron, { flip: true }) }),
168
+ /* @__PURE__ */ jsx5("button", { type: "button", "aria-label": nextLabel, disabled: edge.end, onClick: () => page(1), className: ARROW, children: /* @__PURE__ */ jsx5(Chevron, {}) })
110
169
  ] }),
111
- /* @__PURE__ */ jsx4(
170
+ /* @__PURE__ */ jsx5(
112
171
  "ul",
113
172
  {
114
173
  ref: row,
@@ -116,33 +175,40 @@ function ShortsShelf({ label, title, items, getId, renderItem, seeAll, previousL
116
175
  tabIndex: 0,
117
176
  "aria-labelledby": headingId,
118
177
  className: "m-0 flex list-none snap-x snap-mandatory items-stretch gap-3 overflow-x-auto overflow-y-hidden overscroll-x-contain p-0 pt-1 -mt-1 pb-2 [scrollbar-width:none] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-scrollbar]:hidden",
119
- children: items.map((item, i) => /* @__PURE__ */ jsx4("li", { className: "w-[9.5rem] shrink-0 snap-start sm:w-44", children: renderItem(item, i) }, getId(item)))
178
+ children: items.map((item, i) => /* @__PURE__ */ jsx5("li", { className: "w-[9.5rem] shrink-0 snap-start sm:w-44", children: renderItem(item, i) }, getId(item)))
120
179
  }
121
180
  )
122
181
  ] });
123
182
  }
124
183
 
125
184
  // src/media-grid/media-grid.tsx
126
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
185
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
127
186
  var GRID = {
128
187
  landscape: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",
129
188
  portrait: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 xl:grid-cols-6"
130
189
  };
131
- function MediaGrid({ items, getId, orientationOf, renderItem, mode = "split", frame = "landscape", layout = "grid", shelf, className, ...props }) {
190
+ function MediaGrid({ items, getId, orientationOf, renderItem, mode = "split", frame = "landscape", layout = "grid", shelf, grid, className, ...props }) {
191
+ const gridHeading = React4.useId();
132
192
  const row = layout === "list";
133
193
  const split = mode === "split";
134
194
  const verticals = split ? items.filter((i) => orientationOf(i) === "portrait") : [];
135
195
  const rest = split ? items.filter((i) => orientationOf(i) !== "portrait") : items;
136
196
  const gridFrame = split ? "landscape" : frame;
137
197
  const state = (item, aspect) => ({ aspect, layout: row ? "row" : "stack", mismatch: orientationOf(item) !== aspect });
138
- return /* @__PURE__ */ jsxs3("div", { "data-media-grid": mode, className: cn("flex min-w-0 flex-col gap-8", className), ...props, children: [
139
- verticals.length > 0 && /* @__PURE__ */ jsx5(ShortsShelf, { ...shelf, items: verticals, getId, renderItem: (item) => renderItem(item, { ...state(item, "portrait"), layout: "stack" }) }),
140
- rest.length > 0 && /* @__PURE__ */ jsx5("ul", { "data-grid-frame": gridFrame, className: cn("m-0 grid list-none auto-rows-fr gap-4 p-0", row ? "grid-cols-1" : GRID[gridFrame]), children: rest.map((item) => /* @__PURE__ */ jsx5("li", { className: "min-w-0", children: renderItem(item, state(item, gridFrame)) }, getId(item))) })
198
+ return /* @__PURE__ */ jsxs4("div", { "data-media-grid": mode, className: cn("flex min-w-0 flex-col gap-8", className), ...props, children: [
199
+ verticals.length > 0 && /* @__PURE__ */ jsx6(ShortsShelf, { ...shelf, items: verticals, getId, renderItem: (item) => renderItem(item, { ...state(item, "portrait"), layout: "stack" }) }),
200
+ rest.length > 0 && /* @__PURE__ */ jsxs4("section", { "aria-labelledby": grid ? gridHeading : void 0, "data-media-grid-section": true, className: "min-w-0", children: [
201
+ grid && /* @__PURE__ */ jsxs4("div", { className: "mb-3 flex items-center gap-2", children: [
202
+ /* @__PURE__ */ jsx6("h2", { id: gridHeading, className: "m-0 text-base font-bold text-fg", children: grid.label }),
203
+ grid.hint && /* @__PURE__ */ jsx6(SectionHint, { ...grid.hint })
204
+ ] }),
205
+ /* @__PURE__ */ jsx6("ul", { "data-grid-frame": gridFrame, className: cn("m-0 grid list-none auto-rows-fr gap-4 p-0", row ? "grid-cols-1" : GRID[gridFrame]), children: rest.map((item) => /* @__PURE__ */ jsx6("li", { className: "min-w-0", children: renderItem(item, state(item, gridFrame)) }, getId(item))) })
206
+ ] })
141
207
  ] });
142
208
  }
143
209
 
144
210
  // src/media-grid/video-card.tsx
145
- import * as React3 from "react";
211
+ import * as React5 from "react";
146
212
 
147
213
  // src/media-grid/preview-focus.ts
148
214
  var MIN_RATIO = 0.6;
@@ -185,7 +251,7 @@ var subscribeLeader = (l) => (listeners.add(l), () => void listeners.delete(l));
185
251
  var isLeader = (el) => el !== null && leader === el;
186
252
 
187
253
  // src/media-grid/video-card.tsx
188
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
254
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
189
255
  var FRAME = { landscape: "aspect-video", portrait: "aspect-[9/16]" };
190
256
  function VideoCard({
191
257
  title,
@@ -215,8 +281,8 @@ function VideoCard({
215
281
  ref,
216
282
  ...props
217
283
  }) {
218
- const [node, setNode] = React3.useState(null);
219
- const setRef = React3.useCallback(
284
+ const [node, setNode] = React5.useState(null);
285
+ const setRef = React5.useCallback(
220
286
  (el) => {
221
287
  setNode(el);
222
288
  if (typeof ref === "function") ref(el);
@@ -228,7 +294,7 @@ function VideoCard({
228
294
  const { live, arm, disarm } = usePreviewIntent(node, canPreview, previewDelay);
229
295
  const row = layout === "row";
230
296
  const tall = aspect === "portrait" && !row;
231
- return /* @__PURE__ */ jsx6(
297
+ return /* @__PURE__ */ jsx7(
232
298
  "article",
233
299
  {
234
300
  ref: setRef,
@@ -241,10 +307,10 @@ function VideoCard({
241
307
  onFocus: (e) => (arm("focus"), onFocus?.(e)),
242
308
  onBlur: (e) => (disarm("focus"), onBlur?.(e)),
243
309
  ...props,
244
- children: /* @__PURE__ */ jsxs4(Card.Root, { interactive: true, tone: "glass", className: cn("h-full w-full max-w-full", row ? "flex-row" : "flex-col"), children: [
245
- /* @__PURE__ */ jsxs4(Card.Media, { aspect: "auto", className: cn("shrink-0", FRAME[aspect], row && (aspect === "portrait" ? "w-24 sm:w-28" : "w-40 sm:w-56")), children: [
246
- fit === "contain" && poster && /* @__PURE__ */ jsx6("img", { src: poster, alt: "", "aria-hidden": true, loading: "lazy", className: "absolute inset-0 h-full w-full scale-125 object-cover opacity-70 blur-2xl" }),
247
- /* @__PURE__ */ jsx6(
310
+ children: /* @__PURE__ */ jsxs5(Card.Root, { interactive: true, tone: "glass", className: cn("h-full w-full max-w-full", row ? "flex-row" : "flex-col"), children: [
311
+ /* @__PURE__ */ jsxs5(Card.Media, { aspect: "auto", className: cn("shrink-0", FRAME[aspect], row && (aspect === "portrait" ? "w-24 sm:w-28" : "w-40 sm:w-56")), children: [
312
+ fit === "contain" && poster && /* @__PURE__ */ jsx7("img", { src: poster, alt: "", "aria-hidden": true, loading: "lazy", className: "absolute inset-0 h-full w-full scale-125 object-cover opacity-70 blur-2xl" }),
313
+ /* @__PURE__ */ jsx7(
248
314
  Card.Image,
249
315
  {
250
316
  src: poster,
@@ -254,21 +320,21 @@ function VideoCard({
254
320
  className: cn(fit === "contain" && "relative object-contain", blurred && "scale-110 blur-xl")
255
321
  }
256
322
  ),
257
- live && previewSrc && /* @__PURE__ */ jsx6(PreviewLayer, { src: previewSrc, contain: fit === "contain" }),
258
- overlay && /* @__PURE__ */ jsx6("div", { className: "absolute inset-0 z-20 flex", children: overlay }),
259
- badges && /* @__PURE__ */ jsx6(Card.Overlay, { corner: "top-left", className: "theme-dark pointer-events-none flex-wrap", children: badges }),
260
- duration && /* @__PURE__ */ jsx6(Card.Overlay, { corner: "bottom-right", className: "pointer-events-none", children: /* @__PURE__ */ jsx6("span", { className: "rounded-sm bg-scrim px-1.5 py-0.5 font-mono text-[11px] text-fg-on-media", children: duration }) })
323
+ live && previewSrc && /* @__PURE__ */ jsx7(PreviewLayer, { src: previewSrc, contain: fit === "contain" }),
324
+ overlay && /* @__PURE__ */ jsx7("div", { className: "absolute inset-0 z-20 flex", children: overlay }),
325
+ badges && /* @__PURE__ */ jsx7(Card.Overlay, { corner: "top-left", className: "theme-dark pointer-events-none flex-wrap", children: badges }),
326
+ duration && /* @__PURE__ */ jsx7(Card.Overlay, { corner: "bottom-right", className: "pointer-events-none", children: /* @__PURE__ */ jsx7("span", { className: "rounded-sm bg-scrim px-1.5 py-0.5 font-mono text-[11px] text-fg-on-media", children: duration }) })
261
327
  ] }),
262
- /* @__PURE__ */ jsxs4(Card.Body, { className: "static min-w-0 flex-1 justify-between gap-2 p-3", children: [
263
- /* @__PURE__ */ jsx6("h3", { className: "m-0 min-h-[2.5em] text-sm font-semibold leading-tight text-fg", children: /* @__PURE__ */ jsx6(BlockLink, { href, linkAs, className: "line-clamp-2 outline-none after:absolute after:inset-0 after:z-0 after:content-[''] focus-visible:after:ring-2 focus-visible:after:ring-ring", children: title }) }),
264
- /* @__PURE__ */ jsxs4("div", { className: cn("relative z-10 text-xs text-fg-secondary", tall ? "flex flex-col gap-1" : "flex h-8 items-center gap-2"), children: [
265
- creator && /* @__PURE__ */ jsxs4("div", { className: "flex h-6 min-w-0 items-center gap-2", children: [
266
- /* @__PURE__ */ jsx6(Avatar, { src: creator.avatarSrc, defaultAvatar: creator.defaultAvatar, alt: "", fallback: creator.name.charAt(0), size: "xs", className: "shrink-0" }),
267
- creator.href ? /* @__PURE__ */ jsx6(BlockLink, { href: creator.href, linkAs, className: "min-w-0 truncate hover:text-fg", children: creator.name }) : /* @__PURE__ */ jsx6("span", { className: "min-w-0 truncate", children: creator.name })
328
+ /* @__PURE__ */ jsxs5(Card.Body, { className: "static min-w-0 flex-1 justify-between gap-2 p-3", children: [
329
+ /* @__PURE__ */ jsx7("h3", { className: "m-0 min-h-[2.5em] text-sm font-semibold leading-tight text-fg", children: /* @__PURE__ */ jsx7(BlockLink, { href, linkAs, className: "line-clamp-2 outline-none after:absolute after:inset-0 after:z-0 after:content-[''] focus-visible:after:ring-2 focus-visible:after:ring-ring", children: title }) }),
330
+ /* @__PURE__ */ jsxs5("div", { className: cn("relative z-10 text-xs text-fg-secondary", tall ? "flex flex-col gap-1" : "flex h-8 items-center gap-2"), children: [
331
+ creator && /* @__PURE__ */ jsxs5("div", { className: "flex h-6 min-w-0 items-center gap-2", children: [
332
+ /* @__PURE__ */ jsx7(Avatar, { src: creator.avatarSrc, defaultAvatar: creator.defaultAvatar, alt: "", fallback: creator.name.charAt(0), size: "xs", className: "shrink-0" }),
333
+ creator.href ? /* @__PURE__ */ jsx7(BlockLink, { href: creator.href, linkAs, className: "min-w-0 truncate hover:text-fg", children: creator.name }) : /* @__PURE__ */ jsx7("span", { className: "min-w-0 truncate", children: creator.name })
268
334
  ] }),
269
- (meta || action) && /* @__PURE__ */ jsxs4("div", { className: cn("flex items-center gap-2", tall ? "h-7 justify-between" : "ml-auto shrink-0"), children: [
270
- meta && /* @__PURE__ */ jsx6("span", { className: "shrink-0 font-mono text-[11px] text-fg-muted", children: meta }),
271
- action && /* @__PURE__ */ jsx6("span", { className: "shrink-0", children: action })
335
+ (meta || action) && /* @__PURE__ */ jsxs5("div", { className: cn("flex items-center gap-2", tall ? "h-7 justify-between" : "ml-auto shrink-0"), children: [
336
+ meta && /* @__PURE__ */ jsx7("span", { className: "shrink-0 font-mono text-[11px] text-fg-muted", children: meta }),
337
+ action && /* @__PURE__ */ jsx7("span", { className: "shrink-0", children: action })
272
338
  ] })
273
339
  ] })
274
340
  ] })
@@ -277,8 +343,8 @@ function VideoCard({
277
343
  );
278
344
  }
279
345
  function PreviewLayer({ src, contain }) {
280
- const [ready, setReady] = React3.useState(false);
281
- return /* @__PURE__ */ jsx6(
346
+ const [ready, setReady] = React5.useState(false);
347
+ return /* @__PURE__ */ jsx7(
282
348
  "img",
283
349
  {
284
350
  src,
@@ -296,9 +362,9 @@ var matches = (query) => typeof window !== "undefined" && typeof window.matchMed
296
362
  var hoverCapable = () => matches("(hover: hover)");
297
363
  var saveData = () => typeof navigator !== "undefined" && navigator.connection?.saveData === true;
298
364
  function usePreviewIntent(node, enabled, delay) {
299
- const [causes, setCauses] = React3.useState(/* @__PURE__ */ new Set());
300
- const timers = React3.useRef(/* @__PURE__ */ new Map());
301
- const arm = React3.useCallback(
365
+ const [causes, setCauses] = React5.useState(/* @__PURE__ */ new Set());
366
+ const timers = React5.useRef(/* @__PURE__ */ new Map());
367
+ const arm = React5.useCallback(
302
368
  (cause) => {
303
369
  if (!enabled || saveData()) return;
304
370
  if (cause === "pointer" && !hoverCapable()) return;
@@ -310,7 +376,7 @@ function usePreviewIntent(node, enabled, delay) {
310
376
  },
311
377
  [enabled, delay]
312
378
  );
313
- const disarm = React3.useCallback((cause) => {
379
+ const disarm = React5.useCallback((cause) => {
314
380
  clearTimeout(timers.current.get(cause));
315
381
  timers.current.delete(cause);
316
382
  setCauses((c) => {
@@ -320,7 +386,7 @@ function usePreviewIntent(node, enabled, delay) {
320
386
  return next;
321
387
  });
322
388
  }, []);
323
- React3.useEffect(() => {
389
+ React5.useEffect(() => {
324
390
  const pending = timers.current;
325
391
  return () => {
326
392
  for (const t of pending.values()) clearTimeout(t);
@@ -328,23 +394,23 @@ function usePreviewIntent(node, enabled, delay) {
328
394
  };
329
395
  }, []);
330
396
  const touch = enabled && !hoverCapable();
331
- const leading = React3.useSyncExternalStore(
397
+ const leading = React5.useSyncExternalStore(
332
398
  subscribeLeader,
333
399
  () => isLeader(node),
334
400
  () => false
335
401
  );
336
- React3.useEffect(() => {
402
+ React5.useEffect(() => {
337
403
  if (!node || !touch) return;
338
404
  return trackVisibility(node);
339
405
  }, [node, touch]);
340
- const [ready, setReady] = React3.useState(false);
341
- const [wasLeading, setWasLeading] = React3.useState(false);
406
+ const [ready, setReady] = React5.useState(false);
407
+ const [wasLeading, setWasLeading] = React5.useState(false);
342
408
  if (leading !== wasLeading) {
343
409
  setWasLeading(leading);
344
410
  if (!leading) setReady(false);
345
411
  }
346
412
  const wanted = touch && leading && !saveData() && !matches("(prefers-reduced-motion: reduce)");
347
- React3.useEffect(() => {
413
+ React5.useEffect(() => {
348
414
  if (!wanted) return;
349
415
  const t = setTimeout(() => setReady(true), delay);
350
416
  return () => clearTimeout(t);
@@ -353,24 +419,24 @@ function usePreviewIntent(node, enabled, delay) {
353
419
  }
354
420
 
355
421
  // src/media-grid/video-card-skeleton.tsx
356
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
422
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
357
423
  var FRAME2 = { landscape: "aspect-video", portrait: "aspect-[9/16]" };
358
424
  function VideoCardSkeleton({ aspect = "landscape", layout = "stack", className, ...props }) {
359
425
  const row = layout === "row";
360
426
  const tall = aspect === "portrait" && !row;
361
- return /* @__PURE__ */ jsx7("div", { "aria-hidden": true, "data-skeleton": "video-card", "data-aspect": aspect, "data-layout": layout, className: cn("h-full min-w-0", className), ...props, children: /* @__PURE__ */ jsxs5(Card.Root, { tone: "glass", className: cn("h-full w-full max-w-full", row ? "flex-row" : "flex-col"), children: [
362
- /* @__PURE__ */ jsx7(Card.Media, { aspect: "auto", className: cn("shrink-0", FRAME2[aspect], row && (aspect === "portrait" ? "w-24 sm:w-28" : "w-40 sm:w-56")), children: /* @__PURE__ */ jsx7(Skeleton, { shape: "rect", className: "h-full w-full rounded-none" }) }),
363
- /* @__PURE__ */ jsxs5(Card.Body, { className: "static min-w-0 flex-1 justify-between gap-2 p-3", children: [
364
- /* @__PURE__ */ jsxs5("div", { className: "flex min-h-[2.5em] flex-col justify-center gap-1.5", children: [
365
- /* @__PURE__ */ jsx7(Skeleton, { className: "h-3" }),
366
- /* @__PURE__ */ jsx7(Skeleton, { className: "h-3 w-3/5" })
427
+ return /* @__PURE__ */ jsx8("div", { "aria-hidden": true, "data-skeleton": "video-card", "data-aspect": aspect, "data-layout": layout, className: cn("h-full min-w-0", className), ...props, children: /* @__PURE__ */ jsxs6(Card.Root, { tone: "glass", className: cn("h-full w-full max-w-full", row ? "flex-row" : "flex-col"), children: [
428
+ /* @__PURE__ */ jsx8(Card.Media, { aspect: "auto", className: cn("shrink-0", FRAME2[aspect], row && (aspect === "portrait" ? "w-24 sm:w-28" : "w-40 sm:w-56")), children: /* @__PURE__ */ jsx8(Skeleton, { shape: "rect", className: "h-full w-full rounded-none" }) }),
429
+ /* @__PURE__ */ jsxs6(Card.Body, { className: "static min-w-0 flex-1 justify-between gap-2 p-3", children: [
430
+ /* @__PURE__ */ jsxs6("div", { className: "flex min-h-[2.5em] flex-col justify-center gap-1.5", children: [
431
+ /* @__PURE__ */ jsx8(Skeleton, { className: "h-3" }),
432
+ /* @__PURE__ */ jsx8(Skeleton, { className: "h-3 w-3/5" })
367
433
  ] }),
368
- /* @__PURE__ */ jsxs5("div", { className: cn("flex text-xs", tall ? "flex-col gap-1" : "h-8 items-center gap-2"), children: [
369
- /* @__PURE__ */ jsxs5("div", { className: "flex h-6 min-w-0 items-center gap-2", children: [
370
- /* @__PURE__ */ jsx7(Skeleton, { shape: "circle", className: "h-6 w-6 shrink-0" }),
371
- /* @__PURE__ */ jsx7(Skeleton, { className: "h-2.5 w-20" })
434
+ /* @__PURE__ */ jsxs6("div", { className: cn("flex text-xs", tall ? "flex-col gap-1" : "h-8 items-center gap-2"), children: [
435
+ /* @__PURE__ */ jsxs6("div", { className: "flex h-6 min-w-0 items-center gap-2", children: [
436
+ /* @__PURE__ */ jsx8(Skeleton, { shape: "circle", className: "h-6 w-6 shrink-0" }),
437
+ /* @__PURE__ */ jsx8(Skeleton, { className: "h-2.5 w-20" })
372
438
  ] }),
373
- /* @__PURE__ */ jsx7("div", { className: cn("flex items-center", tall ? "h-7" : "ml-auto"), children: /* @__PURE__ */ jsx7(Skeleton, { className: "h-2.5 w-14" }) })
439
+ /* @__PURE__ */ jsx8("div", { className: cn("flex items-center", tall ? "h-7" : "ml-auto"), children: /* @__PURE__ */ jsx8(Skeleton, { className: "h-2.5 w-14" }) })
374
440
  ] })
375
441
  ] })
376
442
  ] }) });
@@ -381,19 +447,20 @@ var GRID2 = {
381
447
  };
382
448
  function MediaGridSkeleton({ label, count = 8, shelfCount = 0, layout = "grid", frame = "landscape", className, ...props }) {
383
449
  const row = layout === "list";
384
- return /* @__PURE__ */ jsxs5("div", { role: "status", "aria-busy": "true", "data-media-grid-skeleton": "", className: cn("flex min-w-0 flex-col gap-8", className), ...props, children: [
385
- /* @__PURE__ */ jsx7("span", { className: "sr-only", children: label }),
386
- shelfCount > 0 && /* @__PURE__ */ jsxs5("div", { "aria-hidden": true, className: "min-w-0", children: [
387
- /* @__PURE__ */ jsx7(Skeleton, { className: "mb-3 h-4 w-24" }),
388
- /* @__PURE__ */ jsx7("ul", { className: "m-0 flex list-none items-stretch gap-3 overflow-hidden p-0", children: Array.from({ length: shelfCount }, (_, i) => /* @__PURE__ */ jsx7("li", { className: "w-[9.5rem] shrink-0 sm:w-44", children: /* @__PURE__ */ jsx7(VideoCardSkeleton, { aspect: "portrait" }) }, i)) })
450
+ return /* @__PURE__ */ jsxs6("div", { role: "status", "aria-busy": "true", "data-media-grid-skeleton": "", className: cn("flex min-w-0 flex-col gap-8", className), ...props, children: [
451
+ /* @__PURE__ */ jsx8("span", { className: "sr-only", children: label }),
452
+ shelfCount > 0 && /* @__PURE__ */ jsxs6("div", { "aria-hidden": true, className: "min-w-0", children: [
453
+ /* @__PURE__ */ jsx8(Skeleton, { className: "mb-3 h-4 w-24" }),
454
+ /* @__PURE__ */ jsx8("ul", { className: "m-0 flex list-none items-stretch gap-3 overflow-hidden p-0", children: Array.from({ length: shelfCount }, (_, i) => /* @__PURE__ */ jsx8("li", { className: "w-[9.5rem] shrink-0 sm:w-44", children: /* @__PURE__ */ jsx8(VideoCardSkeleton, { aspect: "portrait" }) }, i)) })
389
455
  ] }),
390
- /* @__PURE__ */ jsx7("ul", { "aria-hidden": true, className: cn("m-0 grid list-none auto-rows-fr gap-4 p-0", row ? "grid-cols-1" : GRID2[frame]), children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx7("li", { className: "min-w-0", children: /* @__PURE__ */ jsx7(VideoCardSkeleton, { aspect: frame, layout: row ? "row" : "stack" }) }, i)) })
456
+ /* @__PURE__ */ jsx8("ul", { "aria-hidden": true, className: cn("m-0 grid list-none auto-rows-fr gap-4 p-0", row ? "grid-cols-1" : GRID2[frame]), children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx8("li", { className: "min-w-0", children: /* @__PURE__ */ jsx8(VideoCardSkeleton, { aspect: frame, layout: row ? "row" : "stack" }) }, i)) })
391
457
  ] });
392
458
  }
393
459
  export {
394
460
  LoadMore,
395
461
  MediaGrid,
396
462
  MediaGridSkeleton,
463
+ SectionHint,
397
464
  ShortsShelf,
398
465
  VideoCard,
399
466
  VideoCardSkeleton