@krizaka/ui 3.22.0 → 3.23.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 (447) hide show
  1. package/README.md +4 -0
  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-3IN6TOPM.js → chunk-6ZYRUOTA.js} +6 -3
  30. package/dist/chunk-6ZYRUOTA.js.map +1 -0
  31. package/dist/chunk-APNIVNIX.js +54 -0
  32. package/dist/chunk-APNIVNIX.js.map +1 -0
  33. package/dist/{chunk-FKBHWS4N.js → chunk-CEJDH6SA.js} +2 -2
  34. package/dist/{chunk-OWC2LZD2.js → chunk-CHOJUCVE.js} +6 -3
  35. package/dist/chunk-CHOJUCVE.js.map +1 -0
  36. package/dist/{chunk-3BC4XQ6C.js → chunk-DZU6RMYD.js} +6 -3
  37. package/dist/chunk-DZU6RMYD.js.map +1 -0
  38. package/dist/{chunk-R6NK6ZNY.js → chunk-F7FVPPBB.js} +4 -4
  39. package/dist/{chunk-5Z7FWCV2.js → chunk-HBZPJ3EP.js} +2 -2
  40. package/dist/{chunk-C2BRIFJG.js → chunk-HJFRHYCI.js} +2 -2
  41. package/dist/{chunk-ZNMFG62E.js → chunk-KH3JOEPY.js} +3 -2
  42. package/dist/chunk-KH3JOEPY.js.map +1 -0
  43. package/dist/{chunk-BTMFZ66D.js → chunk-KM6VAKIE.js} +2 -2
  44. package/dist/{chunk-DGQMDJXK.js → chunk-LZNZLCOE.js} +2 -2
  45. package/dist/{chunk-AQSZJJAJ.js → chunk-MQPC3P4T.js} +2 -2
  46. package/dist/{chunk-2FRWNSRO.js → chunk-NSLXEDIS.js} +3 -2
  47. package/dist/chunk-NSLXEDIS.js.map +1 -0
  48. package/dist/{chunk-4LOMIQVX.js → chunk-W675RFOA.js} +3 -2
  49. package/dist/chunk-W675RFOA.js.map +1 -0
  50. package/dist/{chunk-G3ETON2A.js → chunk-WU4VLSEA.js} +3 -2
  51. package/dist/chunk-WU4VLSEA.js.map +1 -0
  52. package/dist/{chunk-IZ7MV6HM.js → chunk-XVFQZ3ZG.js} +3 -2
  53. package/dist/chunk-XVFQZ3ZG.js.map +1 -0
  54. package/dist/cn.js +1 -1
  55. package/dist/code-block.js +2 -2
  56. package/dist/code-block.js.map +1 -1
  57. package/dist/command.js +3 -3
  58. package/dist/comparison-table.js +1 -1
  59. package/dist/confirm-button.js +2 -2
  60. package/dist/continue-prompt.js +3 -3
  61. package/dist/continue-prompt.js.map +1 -1
  62. package/dist/cta-panel.js +1 -1
  63. package/dist/data-table.js +4 -4
  64. package/dist/date-picker.js +2 -2
  65. package/dist/decision-list.js +1 -1
  66. package/dist/dialog.js +3 -2
  67. package/dist/dialog.js.map +1 -1
  68. package/dist/docs-nav.d.ts +36 -0
  69. package/dist/docs-nav.js +44 -0
  70. package/dist/docs-nav.js.map +1 -0
  71. package/dist/dropdown-menu.js +1 -1
  72. package/dist/error-page.js +1 -1
  73. package/dist/field.js +1 -1
  74. package/dist/filter-bar.js +2 -2
  75. package/dist/force-update-screen.js +2 -1
  76. package/dist/force-update-screen.js.map +1 -1
  77. package/dist/gallery-page.js +1 -1
  78. package/dist/genui.d.ts +3 -1
  79. package/dist/genui.js +33 -6
  80. package/dist/genui.js.map +1 -1
  81. package/dist/glow-card.js +1 -1
  82. package/dist/goal-gauge.js +1 -1
  83. package/dist/how-it-works-page.js +1 -1
  84. package/dist/image-cropper.js +3 -3
  85. package/dist/index.js +3 -3
  86. package/dist/landscape.js +1 -1
  87. package/dist/link-card.d.ts +9 -2
  88. package/dist/link-card.js +5 -44
  89. package/dist/link-card.js.map +1 -1
  90. package/dist/longform-page.js +1 -1
  91. package/dist/maintenance-screen.js +2 -1
  92. package/dist/maintenance-screen.js.map +1 -1
  93. package/dist/map.js +3 -3
  94. package/dist/map.js.map +1 -1
  95. package/dist/markdown.js +2 -1
  96. package/dist/markdown.js.map +1 -1
  97. package/dist/marquee.js +1 -1
  98. package/dist/mascot-quote.js +1 -1
  99. package/dist/match-dialog.js +2 -1
  100. package/dist/match-dialog.js.map +1 -1
  101. package/dist/media-grid.d.ts +26 -4
  102. package/dist/media-grid.js +144 -77
  103. package/dist/media-grid.js.map +1 -1
  104. package/dist/native/map.js +3 -3
  105. package/dist/native/map.js.map +1 -1
  106. package/dist/native.d.ts +18 -1
  107. package/dist/native.js +105 -24
  108. package/dist/native.js.map +1 -1
  109. package/dist/nav-bar.js +1 -1
  110. package/dist/page-hero.js +6 -6
  111. package/dist/page.js +2 -2
  112. package/dist/popover.js +1 -1
  113. package/dist/pricing-page.js +1 -1
  114. package/dist/product-page.js +1 -1
  115. package/dist/profile-card.js +1 -1
  116. package/dist/promise-card.js +1 -1
  117. package/dist/radio-group.js +2 -2
  118. package/dist/rail-nav.d.ts +149 -0
  119. package/dist/rail-nav.js +177 -0
  120. package/dist/rail-nav.js.map +1 -0
  121. package/dist/scroll-stage.js +1 -1
  122. package/dist/settings-layout.d.ts +75 -62
  123. package/dist/settings-layout.js +39 -6
  124. package/dist/settings-layout.js.map +1 -1
  125. package/dist/showcase.js +1 -1
  126. package/dist/site-footer.d.ts +48 -67
  127. package/dist/site-footer.js +34 -10
  128. package/dist/site-footer.js.map +1 -1
  129. package/dist/slider.js +2 -2
  130. package/dist/stage-banner.js +1 -1
  131. package/dist/step-showcase.js +1 -1
  132. package/dist/tabs.js +1 -1
  133. package/dist/tabs.js.map +1 -1
  134. package/dist/terminal-replay.js +1 -1
  135. package/dist/theme.js +2 -1
  136. package/dist/theme.js.map +1 -1
  137. package/dist/toast.js +1 -1
  138. package/dist/toc.js +1 -1
  139. package/dist/tooltip.js +1 -1
  140. package/dist/update-prompt.js +2 -1
  141. package/dist/update-prompt.js.map +1 -1
  142. package/dist/vertical-video.js +2 -2
  143. package/dist/video-player.js +3 -3
  144. package/dist/waveform.d.ts +93 -0
  145. package/dist/waveform.js +95 -0
  146. package/dist/waveform.js.map +1 -0
  147. package/package.json +81 -10
  148. package/registry/achievement.json +1 -1
  149. package/registry/action-bar.json +1 -1
  150. package/registry/activity-feed.json +1 -1
  151. package/registry/alert.json +1 -1
  152. package/registry/app-header.json +202 -0
  153. package/registry/app-shell.json +33 -9
  154. package/registry/argument-card.json +37 -5
  155. package/registry/audio-player.json +5 -3
  156. package/registry/auth-layout.json +1 -1
  157. package/registry/avatar.json +1 -1
  158. package/registry/badge.json +1 -1
  159. package/registry/button.json +3 -2
  160. package/registry/captcha.json +300 -0
  161. package/registry/card-grid.json +27 -3
  162. package/registry/card.json +1 -1
  163. package/registry/catalogue-page.json +1 -1
  164. package/registry/changelog-page.json +11 -7
  165. package/registry/chat.json +1 -1
  166. package/registry/checkbox.json +1 -1
  167. package/registry/chip-link.json +1 -1
  168. package/registry/chip.json +1 -1
  169. package/registry/choice-grid.json +1 -1
  170. package/registry/cn.json +1 -1
  171. package/registry/code-block.json +1 -1
  172. package/registry/combobox.json +1 -1
  173. package/registry/command.json +1 -1
  174. package/registry/comparison-table.json +1 -1
  175. package/registry/component-page.json +1 -1
  176. package/registry/confirm-button.json +1 -1
  177. package/registry/contact-page.json +1 -1
  178. package/registry/continue-prompt.json +1 -1
  179. package/registry/countdown.json +1 -1
  180. package/registry/cta-panel.json +1 -1
  181. package/registry/dashboard-layout.json +1 -1
  182. package/registry/data-table.json +1 -1
  183. package/registry/date-picker.json +1 -1
  184. package/registry/decision-list.json +1 -1
  185. package/registry/description-list.json +1 -1
  186. package/registry/detail-layout.json +1 -1
  187. package/registry/dialog.json +1 -1
  188. package/registry/docs-article-page.json +1 -1
  189. package/registry/docs-hub-page.json +1 -1
  190. package/registry/docs-layout.json +1 -1
  191. package/registry/docs-nav.json +177 -0
  192. package/registry/document-viewer.json +1 -1
  193. package/registry/dropdown-menu.json +1 -1
  194. package/registry/empty-state.json +1 -1
  195. package/registry/error-page.json +1 -1
  196. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  197. package/registry/examples/app-header/basic.d.ts +4 -0
  198. package/registry/examples/app-header/basic.js +23 -0
  199. package/registry/examples/app-header/basic.tsx +17 -0
  200. package/registry/examples/app-shell/desktop.d.ts +4 -0
  201. package/registry/examples/app-shell/desktop.js +41 -0
  202. package/registry/examples/app-shell/desktop.tsx +37 -0
  203. package/registry/examples/argument-card/hover-light.d.ts +4 -0
  204. package/registry/examples/argument-card/hover-light.js +17 -0
  205. package/registry/examples/argument-card/hover-light.tsx +19 -0
  206. package/registry/examples/argument-card/hover-quiet.d.ts +4 -0
  207. package/registry/examples/argument-card/hover-quiet.js +17 -0
  208. package/registry/examples/argument-card/hover-quiet.tsx +19 -0
  209. package/registry/examples/avatar/native/group.light.png +0 -0
  210. package/registry/examples/avatar/native/presence.light.png +0 -0
  211. package/registry/examples/avatar/native/sizes.light.png +0 -0
  212. package/registry/examples/badge/native/tones.light.png +0 -0
  213. package/registry/examples/button/native/ghost.light.png +0 -0
  214. package/registry/examples/captcha/disclosure.d.ts +4 -0
  215. package/registry/examples/captcha/disclosure.js +14 -0
  216. package/registry/examples/captcha/disclosure.tsx +11 -0
  217. package/registry/examples/captcha/form.d.ts +4 -0
  218. package/registry/examples/captcha/form.js +18 -0
  219. package/registry/examples/captcha/form.tsx +17 -0
  220. package/registry/examples/card/native/body.light.png +0 -0
  221. package/registry/examples/card/native/default.light.png +0 -0
  222. package/registry/examples/card/native/elevated.light.png +0 -0
  223. package/registry/examples/card/native/pressable.light.png +0 -0
  224. package/registry/examples/card-grid/hover-quiet.d.ts +4 -0
  225. package/registry/examples/card-grid/hover-quiet.js +18 -0
  226. package/registry/examples/card-grid/hover-quiet.tsx +20 -0
  227. package/registry/examples/changelog-page/releases.js +1 -1
  228. package/registry/examples/changelog-page/releases.tsx +1 -1
  229. package/registry/examples/chat/native/conversation.light.png +0 -0
  230. package/registry/examples/chat/native/inbox.light.png +0 -0
  231. package/registry/examples/chip/native/multiple.light.png +0 -0
  232. package/registry/examples/chip/native/removable.light.png +0 -0
  233. package/registry/examples/chip/native/single.light.png +0 -0
  234. package/registry/examples/chip/native/toggle.light.png +0 -0
  235. package/registry/examples/combobox/native/multiple.light.png +0 -0
  236. package/registry/examples/combobox/native/search.light.png +0 -0
  237. package/registry/examples/countdown/native/days.light.png +0 -0
  238. package/registry/examples/countdown/native/hours.light.png +0 -0
  239. package/registry/examples/countdown/native/sizes.light.png +0 -0
  240. package/registry/examples/countdown/native/urgent.light.png +0 -0
  241. package/registry/examples/countdown/native/with-label.light.png +0 -0
  242. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  243. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  244. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  245. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  246. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  247. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  248. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  249. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  250. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  251. package/registry/examples/description-list/native/job-details.light.png +0 -0
  252. package/registry/examples/docs-nav/groups.d.ts +4 -0
  253. package/registry/examples/docs-nav/groups.js +21 -0
  254. package/registry/examples/docs-nav/groups.tsx +15 -0
  255. package/registry/examples/empty-state/native/default.light.png +0 -0
  256. package/registry/examples/field/native/default.light.png +0 -0
  257. package/registry/examples/field/native/select.light.png +0 -0
  258. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  259. package/registry/examples/form/native/amount.light.png +0 -0
  260. package/registry/examples/form/native/audience.light.png +0 -0
  261. package/registry/examples/form/native/profile.light.png +0 -0
  262. package/registry/examples/form/native/settings.light.png +0 -0
  263. package/registry/examples/form/native/sign-up.light.png +0 -0
  264. package/registry/examples/form/native/upload.dark.png +0 -0
  265. package/registry/examples/form/native/upload.light.png +0 -0
  266. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  267. package/registry/examples/header/native/large-title.light.png +0 -0
  268. package/registry/examples/link-card/hover-light.d.ts +4 -0
  269. package/registry/examples/link-card/hover-light.js +18 -0
  270. package/registry/examples/link-card/hover-light.tsx +20 -0
  271. package/registry/examples/link-card/hover-quiet.d.ts +4 -0
  272. package/registry/examples/link-card/hover-quiet.js +18 -0
  273. package/registry/examples/link-card/hover-quiet.tsx +20 -0
  274. package/registry/examples/loader/native/job-wait.light.png +0 -0
  275. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  276. package/registry/examples/map/native/places.light.png +0 -0
  277. package/registry/examples/markdown/native/basic.light.png +0 -0
  278. package/registry/examples/mascot-state/native/default.light.png +0 -0
  279. package/registry/examples/media-picker/native/story.light.png +0 -0
  280. package/registry/examples/meta-row/native/video.light.png +0 -0
  281. package/registry/examples/meter/native/credits.light.png +0 -0
  282. package/registry/examples/meter/native/split-ring.light.png +0 -0
  283. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  284. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  285. package/registry/examples/otp-input/native/verify.light.png +0 -0
  286. package/registry/examples/pagination/native/cursor.light.png +0 -0
  287. package/registry/examples/pagination/native/pages.light.png +0 -0
  288. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  289. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  290. package/registry/examples/profile-card/native/default.light.png +0 -0
  291. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  292. package/registry/examples/radio-group/native/cards.light.png +0 -0
  293. package/registry/examples/radio-group/native/list.light.png +0 -0
  294. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  295. package/registry/examples/rail-nav/expandable.d.ts +4 -0
  296. package/registry/examples/rail-nav/expandable.js +34 -0
  297. package/registry/examples/rail-nav/expandable.tsx +28 -0
  298. package/registry/examples/rail-nav/studio.d.ts +4 -0
  299. package/registry/examples/rail-nav/studio.js +43 -0
  300. package/registry/examples/rail-nav/studio.tsx +38 -0
  301. package/registry/examples/screen/native/app-shell.light.png +0 -0
  302. package/registry/examples/screen/native/auth.light.png +0 -0
  303. package/registry/examples/screen/native/map.light.png +0 -0
  304. package/registry/examples/screen/native/notifications.light.png +0 -0
  305. package/registry/examples/screen/native/profile.light.png +0 -0
  306. package/registry/examples/segmented/native/default.light.png +0 -0
  307. package/registry/examples/segmented/native/small.light.png +0 -0
  308. package/registry/examples/settings-layout/flat.d.ts +4 -0
  309. package/registry/examples/settings-layout/flat.js +26 -0
  310. package/registry/examples/settings-layout/flat.tsx +30 -0
  311. package/registry/examples/showcase/native/slides.light.png +0 -0
  312. package/registry/examples/site-footer/app.d.ts +4 -0
  313. package/registry/examples/site-footer/app.js +25 -0
  314. package/registry/examples/site-footer/app.tsx +22 -0
  315. package/registry/examples/site-footer/docs.d.ts +4 -0
  316. package/registry/examples/site-footer/docs.js +31 -0
  317. package/registry/examples/site-footer/docs.tsx +24 -0
  318. package/registry/examples/slider/native/default.light.png +0 -0
  319. package/registry/examples/slider/native/stepped.light.png +0 -0
  320. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  321. package/registry/examples/stepper/native/run.light.png +0 -0
  322. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  323. package/registry/examples/switch/native/settings.light.png +0 -0
  324. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  325. package/registry/examples/tabs/native/sections.light.png +0 -0
  326. package/registry/examples/tabs/native/segmented.light.png +0 -0
  327. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  328. package/registry/examples/toast/native/tones.light.png +0 -0
  329. package/registry/examples/txt/native/tones.dark.png +0 -0
  330. package/registry/examples/txt/native/tones.light.png +0 -0
  331. package/registry/examples/update-prompt/native/default.light.png +0 -0
  332. package/registry/examples/waveform/card.d.ts +4 -0
  333. package/registry/examples/waveform/card.js +18 -0
  334. package/registry/examples/waveform/card.tsx +16 -0
  335. package/registry/examples/waveform/native/card.d.ts +4 -0
  336. package/registry/examples/waveform/native/card.dark.png +0 -0
  337. package/registry/examples/waveform/native/card.js +19 -0
  338. package/registry/examples/waveform/native/card.light.png +0 -0
  339. package/registry/examples/waveform/native/card.tsx +19 -0
  340. package/registry/examples/waveform/sizes.d.ts +4 -0
  341. package/registry/examples/waveform/sizes.js +16 -0
  342. package/registry/examples/waveform/sizes.tsx +14 -0
  343. package/registry/field.json +1 -1
  344. package/registry/file-upload.json +1 -1
  345. package/registry/filter-bar.json +1 -1
  346. package/registry/force-update-screen.json +1 -1
  347. package/registry/form.json +1 -1
  348. package/registry/gallery-page.json +1 -1
  349. package/registry/genui.json +3 -3
  350. package/registry/glow-card.json +1 -1
  351. package/registry/goal-gauge.json +1 -1
  352. package/registry/how-it-works-page.json +1 -1
  353. package/registry/image-cropper.json +1 -1
  354. package/registry/index.json +197 -14
  355. package/registry/iso.json +1 -1
  356. package/registry/kanban.json +1 -1
  357. package/registry/kbd.json +1 -1
  358. package/registry/landing-page.json +1 -1
  359. package/registry/landscape.json +1 -1
  360. package/registry/legal-page.json +1 -1
  361. package/registry/link-card.json +38 -6
  362. package/registry/list.json +1 -1
  363. package/registry/loader.json +1 -1
  364. package/registry/longform-page.json +1 -1
  365. package/registry/maintenance-screen.json +1 -1
  366. package/registry/map.json +2 -2
  367. package/registry/markdown.json +1 -1
  368. package/registry/marketing-layout.json +1 -1
  369. package/registry/marquee.json +1 -1
  370. package/registry/mascot-quote.json +1 -1
  371. package/registry/mascot-state.json +1 -1
  372. package/registry/mascots.json +1 -1
  373. package/registry/match-dialog.json +1 -1
  374. package/registry/media-capture.json +1 -1
  375. package/registry/media-grid.json +92 -6
  376. package/registry/meta-row.json +1 -1
  377. package/registry/meter.json +1 -1
  378. package/registry/nav-bar.json +2 -2
  379. package/registry/number-ticker.json +1 -1
  380. package/registry/page-header.json +1 -1
  381. package/registry/page-hero.json +1 -1
  382. package/registry/page.json +1 -1
  383. package/registry/pagination.json +1 -1
  384. package/registry/photo-grid.json +1 -1
  385. package/registry/pointer-light.json +1 -1
  386. package/registry/popover.json +1 -1
  387. package/registry/pricing-page.json +1 -1
  388. package/registry/product-page.json +1 -1
  389. package/registry/profile-card.json +1 -1
  390. package/registry/progress.json +1 -1
  391. package/registry/promise-card.json +1 -1
  392. package/registry/radio-group.json +1 -1
  393. package/registry/rail-nav.json +493 -0
  394. package/registry/recipes.json +1 -1
  395. package/registry/scroll-stage.json +1 -1
  396. package/registry/search-field.json +1 -1
  397. package/registry/section-backdrop.json +1 -1
  398. package/registry/separator.json +1 -1
  399. package/registry/settings-layout.json +104 -9
  400. package/registry/showcase.json +1 -1
  401. package/registry/site-footer.json +38 -6
  402. package/registry/sites.json +1 -1
  403. package/registry/skeleton.json +1 -1
  404. package/registry/skip-link.json +1 -1
  405. package/registry/slider.json +1 -1
  406. package/registry/slot.json +1 -1
  407. package/registry/spinner.json +1 -1
  408. package/registry/split-view.json +1 -1
  409. package/registry/stage-banner.json +1 -1
  410. package/registry/stat.json +1 -1
  411. package/registry/status-page.json +1 -1
  412. package/registry/step-progress.json +1 -1
  413. package/registry/step-showcase.json +1 -1
  414. package/registry/stepper.json +1 -1
  415. package/registry/swipe-deck.json +1 -1
  416. package/registry/switch.json +1 -1
  417. package/registry/tabs.json +2 -2
  418. package/registry/tag-input.json +1 -1
  419. package/registry/tag-selector.json +1 -1
  420. package/registry/terminal-replay.json +1 -1
  421. package/registry/theme.json +1 -1
  422. package/registry/toast.json +1 -1
  423. package/registry/toc.json +1 -1
  424. package/registry/tooltip.json +1 -1
  425. package/registry/tree-view.json +1 -1
  426. package/registry/update-prompt.json +1 -1
  427. package/registry/verified-badge.json +1 -1
  428. package/registry/vertical-video.json +1 -1
  429. package/registry/video-player.json +1 -1
  430. package/registry/video-trimmer.json +1 -1
  431. package/registry/virtual.json +1 -1
  432. package/registry/waveform.json +296 -0
  433. package/dist/chunk-2FRWNSRO.js.map +0 -1
  434. package/dist/chunk-3BC4XQ6C.js.map +0 -1
  435. package/dist/chunk-3IN6TOPM.js.map +0 -1
  436. package/dist/chunk-4LOMIQVX.js.map +0 -1
  437. package/dist/chunk-G3ETON2A.js.map +0 -1
  438. package/dist/chunk-IZ7MV6HM.js.map +0 -1
  439. package/dist/chunk-OWC2LZD2.js.map +0 -1
  440. package/dist/chunk-ZNMFG62E.js.map +0 -1
  441. /package/dist/{chunk-FKBHWS4N.js.map → chunk-CEJDH6SA.js.map} +0 -0
  442. /package/dist/{chunk-R6NK6ZNY.js.map → chunk-F7FVPPBB.js.map} +0 -0
  443. /package/dist/{chunk-5Z7FWCV2.js.map → chunk-HBZPJ3EP.js.map} +0 -0
  444. /package/dist/{chunk-C2BRIFJG.js.map → chunk-HJFRHYCI.js.map} +0 -0
  445. /package/dist/{chunk-BTMFZ66D.js.map → chunk-KM6VAKIE.js.map} +0 -0
  446. /package/dist/{chunk-DGQMDJXK.js.map → chunk-LZNZLCOE.js.map} +0 -0
  447. /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