@vizejs/composable 0.426.2 → 0.427.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 (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,78 @@
1
+ import { computed, shallowRef } from "vue";
2
+ //#region src/use-machine.ts
3
+ /** Shallow ref typed through an unconstrained parameter, so literal unions stay intact. */
4
+ function ownedRef(value) {
5
+ return shallowRef(value);
6
+ }
7
+ /**
8
+ * Finite state machine with typed states, events, and targets.
9
+ *
10
+ * State names are inferred from the keys of `states`, event names from the
11
+ * keys of every `on` map, and every `target` (and `initial`) must name a
12
+ * declared state, so typos fail to compile. Transitions may carry guards
13
+ * (first passing guard wins) and actions that return the next context;
14
+ * `exit` runs on the old state before `entry` runs on the new one, and a
15
+ * self-transition runs both. Synchronous and free of globals: identical on
16
+ * server and client, nothing to dispose.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const fetcher = useMachine({
21
+ * initial: "idle",
22
+ * context: { retries: 0 },
23
+ * states: {
24
+ * idle: { on: { FETCH: "loading" } },
25
+ * loading: { on: { RESOLVE: "success", REJECT: "failure" } },
26
+ * failure: {
27
+ * on: {
28
+ * RETRY: { target: "loading", guard: (c) => c.retries < 3, action: (c) => ({ retries: c.retries + 1 }) },
29
+ * },
30
+ * },
31
+ * success: {},
32
+ * },
33
+ * });
34
+ * fetcher.send("FETCH");
35
+ * ```
36
+ *
37
+ * @param config States, events, context, and hooks.
38
+ * @returns The reactive machine.
39
+ */
40
+ function useMachine(config) {
41
+ const state = ownedRef(config.initial);
42
+ const context = ownedRef(config.context);
43
+ const isTarget = (option) => typeof option === "string";
44
+ const resolve = (event) => {
45
+ const option = config.states[state.value].on?.[event];
46
+ if (option === void 0) return void 0;
47
+ if (isTarget(option)) return { target: option };
48
+ return (Array.isArray(option) ? option : [option]).find((candidate) => candidate.guard?.(context.value) ?? true);
49
+ };
50
+ const send = (event) => {
51
+ const transition = resolve(event);
52
+ if (transition === void 0) return false;
53
+ config.states[state.value].exit?.(context.value);
54
+ if (transition.action !== void 0) context.value = transition.action(context.value);
55
+ state.value = transition.target;
56
+ config.states[transition.target].entry?.(context.value);
57
+ return true;
58
+ };
59
+ const can = (event) => resolve(event) !== void 0;
60
+ return {
61
+ state,
62
+ context,
63
+ nextEvents: computed(() => {
64
+ const on = config.states[state.value].on ?? {};
65
+ const isEvent = (name) => name in on;
66
+ return Object.keys(on).filter(isEvent).filter(can);
67
+ }),
68
+ send,
69
+ can,
70
+ matches: (...states) => states.some((candidate) => candidate === state.value),
71
+ reset: () => {
72
+ state.value = config.initial;
73
+ context.value = config.context;
74
+ }
75
+ };
76
+ }
77
+ //#endregion
78
+ export { useMachine };
@@ -0,0 +1,90 @@
1
+ import { ComputedRef } from "vue";
2
+
3
+ //#region src/use-map.d.ts
4
+ /** Reactive map wrapper returned by {@link useMap}. */
5
+ interface MapControls<Key, Value> {
6
+ /**
7
+ * Read-only reactive view of the map. `get`, `has`, iteration, and `size`
8
+ * on this view are tracked per key. Values are stored shallowly.
9
+ */
10
+ readonly map: ReadonlyMap<Key, Value>;
11
+ /** Number of entries. */
12
+ readonly size: ComputedRef<number>;
13
+ /** Snapshot of the entries in insertion order. */
14
+ readonly entries: ComputedRef<readonly (readonly [Key, Value])[]>;
15
+ /**
16
+ * Read the value for `key`. Reactive when read inside an effect.
17
+ *
18
+ * @param key Key to read.
19
+ * @returns The value, or `undefined` when absent.
20
+ */
21
+ readonly get: (key: Key) => Value | undefined;
22
+ /**
23
+ * Whether `key` is present. Reactive when read inside an effect.
24
+ *
25
+ * @param key Key to test.
26
+ * @returns Whether the key exists.
27
+ */
28
+ readonly has: (key: Key) => boolean;
29
+ /**
30
+ * Store `value` under `key`.
31
+ *
32
+ * @param key Key to write.
33
+ * @param value Value to store.
34
+ */
35
+ readonly set: (key: Key, value: Value) => void;
36
+ /**
37
+ * Remove `key`.
38
+ *
39
+ * @param key Key to remove.
40
+ * @returns Whether an entry was removed.
41
+ */
42
+ readonly delete: (key: Key) => boolean;
43
+ /** Remove every entry. */
44
+ readonly clear: () => void;
45
+ /**
46
+ * Replace the value under `key` with the result of `updater`.
47
+ *
48
+ * @param key Key to update.
49
+ * @param updater Receives the current value (`undefined` when absent).
50
+ * @returns The stored value.
51
+ */
52
+ readonly update: (key: Key, updater: (previous: Value | undefined) => Value) => Value;
53
+ /**
54
+ * Return the value under `key`, inserting `create(key)` first when absent.
55
+ *
56
+ * @param key Key to read or insert.
57
+ * @param create Factory for a missing value.
58
+ * @returns The existing or inserted value.
59
+ */
60
+ readonly getOrInsert: (key: Key, create: (key: Key) => Value) => Value;
61
+ /** Restore the creation-time entries. */
62
+ readonly reset: () => void;
63
+ }
64
+ /**
65
+ * Create a reactive `Map` with typed helpers.
66
+ *
67
+ * Key and value types are inferred from the initial entries
68
+ * (`useMap([["a", 1]])` is a `Map<string, number>`); pass type arguments
69
+ * for an initially empty map. Reads through `get`, `has`, and `map` are
70
+ * tracked per key, so an effect reading one key does not re-run when an
71
+ * unrelated key changes. Values are stored as-is (not deeply reactive).
72
+ *
73
+ * Purely synchronous state: safe during server rendering (no host globals,
74
+ * no timers) and nothing to dispose.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * const counts = useMap<string, number>();
79
+ * counts.update("clicks", (previous = 0) => previous + 1);
80
+ * ```
81
+ *
82
+ * @typeParam Key Key type, inferred from `initial`.
83
+ * @typeParam Value Value type, inferred from `initial`.
84
+ * @param initial Entries inserted at creation and restored by `reset`.
85
+ * @default initial []
86
+ * @returns The reactive map and its helpers.
87
+ */
88
+ declare function useMap<Key = unknown, Value = unknown>(initial?: Iterable<readonly [Key, Value]>): MapControls<Key, Value>;
89
+ //#endregion
90
+ export { MapControls, useMap };
@@ -0,0 +1,70 @@
1
+ import { computed, shallowReactive, shallowReadonly } from "vue";
2
+ //#region src/use-map.ts
3
+ /**
4
+ * Narrow a `get` result using the matching `has` answer: when the key is
5
+ * present the result is a stored `Value`, even if that value is `undefined`.
6
+ */
7
+ function isStored(value, present) {
8
+ return present;
9
+ }
10
+ /**
11
+ * Create a reactive `Map` with typed helpers.
12
+ *
13
+ * Key and value types are inferred from the initial entries
14
+ * (`useMap([["a", 1]])` is a `Map<string, number>`); pass type arguments
15
+ * for an initially empty map. Reads through `get`, `has`, and `map` are
16
+ * tracked per key, so an effect reading one key does not re-run when an
17
+ * unrelated key changes. Values are stored as-is (not deeply reactive).
18
+ *
19
+ * Purely synchronous state: safe during server rendering (no host globals,
20
+ * no timers) and nothing to dispose.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const counts = useMap<string, number>();
25
+ * counts.update("clicks", (previous = 0) => previous + 1);
26
+ * ```
27
+ *
28
+ * @typeParam Key Key type, inferred from `initial`.
29
+ * @typeParam Value Value type, inferred from `initial`.
30
+ * @param initial Entries inserted at creation and restored by `reset`.
31
+ * @default initial []
32
+ * @returns The reactive map and its helpers.
33
+ */
34
+ function useMap(initial = []) {
35
+ const baseline = [...initial];
36
+ const map = shallowReactive(new Map(baseline));
37
+ const reset = () => {
38
+ map.clear();
39
+ for (const [key, value] of baseline) map.set(key, value);
40
+ };
41
+ return {
42
+ map: shallowReadonly(map),
43
+ size: computed(() => map.size),
44
+ entries: computed(() => [...map.entries()]),
45
+ get: (key) => map.get(key),
46
+ has: (key) => map.has(key),
47
+ set: (key, value) => {
48
+ map.set(key, value);
49
+ },
50
+ delete: (key) => map.delete(key),
51
+ clear: () => {
52
+ map.clear();
53
+ },
54
+ update: (key, updater) => {
55
+ const next = updater(map.get(key));
56
+ map.set(key, next);
57
+ return next;
58
+ },
59
+ getOrInsert: (key, create) => {
60
+ const existing = map.get(key);
61
+ if (isStored(existing, map.has(key))) return existing;
62
+ const created = create(key);
63
+ map.set(key, created);
64
+ return created;
65
+ },
66
+ reset
67
+ };
68
+ }
69
+ //#endregion
70
+ export { useMap };
@@ -0,0 +1,198 @@
1
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
+
3
+ //#region src/use-media-controls.d.ts
4
+ /** Minimal `TimeRanges`. */
5
+ interface TimeRangesLike {
6
+ /** Number of ranges. */
7
+ readonly length: number;
8
+ /** Start of range `index` in seconds. */
9
+ start(index: number): number;
10
+ /** End of range `index` in seconds. */
11
+ end(index: number): number;
12
+ }
13
+ /** Minimal `TextTrack`. */
14
+ interface TextTrackLike {
15
+ /** Track identifier. */
16
+ readonly id: string;
17
+ /** `"subtitles"`, `"captions"`, `"descriptions"`, `"chapters"`, or `"metadata"`. */
18
+ readonly kind: string;
19
+ /** Human-readable label. */
20
+ readonly label: string;
21
+ /** BCP 47 language tag. */
22
+ readonly language: string;
23
+ /** `"disabled"`, `"hidden"`, or `"showing"`. */
24
+ mode: string;
25
+ }
26
+ /** Minimal `TextTrackList`. */
27
+ interface TextTrackListLike extends EventTarget {
28
+ /** Number of tracks. */
29
+ readonly length: number;
30
+ /** Track at `index`. */
31
+ readonly [index: number]: TextTrackLike;
32
+ }
33
+ /** Minimal `HTMLMediaElement` (`<video>` or `<audio>`). */
34
+ interface MediaElementLike extends EventTarget {
35
+ /** Playback position in seconds. */
36
+ currentTime: number;
37
+ /** Volume from 0 to 1. */
38
+ volume: number;
39
+ /** Whether audio is muted. */
40
+ muted: boolean;
41
+ /** Playback speed multiplier. */
42
+ playbackRate: number;
43
+ /** Media source URL. */
44
+ src: string;
45
+ /** Duration in seconds (`NaN` until metadata loaded). */
46
+ readonly duration: number;
47
+ /** Whether playback is paused. */
48
+ readonly paused: boolean;
49
+ /** Whether playback reached the end. */
50
+ readonly ended: boolean;
51
+ /** Whether the element is seeking. */
52
+ readonly seeking: boolean;
53
+ /** Buffered time ranges. */
54
+ readonly buffered: TimeRangesLike;
55
+ /** Text tracks (`<track>` children). */
56
+ readonly textTracks?: TextTrackListLike;
57
+ /** Start playback; rejects when autoplay is blocked. */
58
+ play(): Promise<void>;
59
+ /** Pause playback. */
60
+ pause(): void;
61
+ /** Whether the element can play `type` (`""`, `"maybe"`, `"probably"`). */
62
+ canPlayType?(type: string): string;
63
+ /** Enter picture-in-picture (video only). */
64
+ requestPictureInPicture?(): Promise<unknown>;
65
+ }
66
+ /** Document capabilities used for picture-in-picture. */
67
+ interface PictureInPictureDocumentLike {
68
+ /** Whether picture-in-picture is allowed. */
69
+ readonly pictureInPictureEnabled?: boolean;
70
+ /** Element currently in picture-in-picture. */
71
+ readonly pictureInPictureElement?: unknown;
72
+ /** Leave picture-in-picture. */
73
+ exitPictureInPicture?(): Promise<void>;
74
+ }
75
+ /** One candidate media source. */
76
+ interface MediaSourceCandidate {
77
+ /** Source URL. */
78
+ readonly src: string;
79
+ /** MIME type used to test playability with `canPlayType`. */
80
+ readonly type?: string;
81
+ }
82
+ /** Summary of one text track. */
83
+ interface MediaTextTrack {
84
+ /** Index in the element's `textTracks`. */
85
+ readonly index: number;
86
+ /** Track identifier. */
87
+ readonly id: string;
88
+ /** Track kind. */
89
+ readonly kind: string;
90
+ /** Human-readable label. */
91
+ readonly label: string;
92
+ /** BCP 47 language tag. */
93
+ readonly language: string;
94
+ /** Current mode. */
95
+ readonly mode: string;
96
+ }
97
+ /** Options for {@link useMediaControls}. */
98
+ interface UseMediaControlsOptions {
99
+ /**
100
+ * Media source: a URL, or candidates of which the first playable one (per
101
+ * `canPlayType`) is used. Omit to leave the element's `src` untouched.
102
+ *
103
+ * @default undefined
104
+ */
105
+ readonly src?: MaybeRefOrGetter<string | readonly MediaSourceCandidate[] | undefined>;
106
+ /**
107
+ * Document used for picture-in-picture.
108
+ *
109
+ * @default window.document when a browser window exists
110
+ */
111
+ readonly document?: MaybeRefOrGetter<PictureInPictureDocumentLike | null | undefined>;
112
+ }
113
+ /** Reactive state and actions returned by {@link useMediaControls}. */
114
+ interface MediaControls {
115
+ /** Whether media is playing; assign to play or pause. */
116
+ readonly playing: Ref<boolean>;
117
+ /** Playback position in seconds; assign to seek. */
118
+ readonly currentTime: Ref<number>;
119
+ /** Volume from 0 to 1; assign to change it. */
120
+ readonly volume: Ref<number>;
121
+ /** Whether audio is muted; assign to toggle. */
122
+ readonly muted: Ref<boolean>;
123
+ /** Playback speed; assign to change it. */
124
+ readonly rate: Ref<number>;
125
+ /** Duration in seconds (0 until known). */
126
+ readonly duration: Readonly<Ref<number>>;
127
+ /** Buffered ranges as `[start, end]` pairs. */
128
+ readonly buffered: Readonly<ShallowRef<readonly (readonly [number, number])[]>>;
129
+ /** Whether the element is seeking. */
130
+ readonly seeking: Readonly<Ref<boolean>>;
131
+ /** Whether playback waits for data. */
132
+ readonly waiting: Readonly<Ref<boolean>>;
133
+ /** Whether playback reached the end. */
134
+ readonly ended: Readonly<Ref<boolean>>;
135
+ /** Whether data delivery stalled. */
136
+ readonly stalled: Readonly<Ref<boolean>>;
137
+ /** Most recent `play()` rejection (for example blocked autoplay). */
138
+ readonly error: Readonly<ShallowRef<unknown>>;
139
+ /** Text tracks of the element. */
140
+ readonly tracks: Readonly<ShallowRef<readonly MediaTextTrack[]>>;
141
+ /** Index of the showing text track, or `-1`. */
142
+ readonly selectedTrack: Readonly<Ref<number>>;
143
+ /** Whether picture-in-picture can be requested for the element. */
144
+ readonly supportsPictureInPicture: ComputedRef<boolean>;
145
+ /** Whether the element is in picture-in-picture. */
146
+ readonly isPictureInPicture: Readonly<Ref<boolean>>;
147
+ /**
148
+ * Start playback.
149
+ *
150
+ * @returns Whether playback started.
151
+ */
152
+ readonly play: () => Promise<boolean>;
153
+ /** Pause playback. */
154
+ readonly pause: () => void;
155
+ /**
156
+ * Show text track `index` and hide the others; `-1` hides all.
157
+ *
158
+ * @param index Track index.
159
+ */
160
+ readonly selectTrack: (index: number) => void;
161
+ /**
162
+ * Enter or leave picture-in-picture.
163
+ *
164
+ * @returns Whether the element is in picture-in-picture afterwards.
165
+ */
166
+ readonly togglePictureInPicture: () => Promise<boolean>;
167
+ }
168
+ /**
169
+ * Two-way reactive controls for a `<video>` or `<audio>` element.
170
+ *
171
+ * `playing`, `currentTime`, `volume`, `muted`, and `rate` mirror the
172
+ * element and are writable: assigning them drives the element, while
173
+ * element events update them without echoing the change back. The element
174
+ * is the source of truth whenever a new target attaches. Read-only state
175
+ * covers duration, buffering, seeking, waiting, stalls, text tracks, and
176
+ * picture-in-picture. A rejected `play()` (blocked autoplay) resets
177
+ * `playing` and is exposed through `error`. Listeners are removed when the
178
+ * target changes and when the owning reactive scope stops.
179
+ *
180
+ * Server rendering: the template ref is empty, so every value keeps its
181
+ * neutral default (paused, time 0, volume 1) and nothing is touched.
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * const video = useTemplateRef<HTMLVideoElement>("video");
186
+ * const { playing, currentTime, duration } = useMediaControls(video, {
187
+ * src: [{ src: "/clip.webm", type: "video/webm" }, { src: "/clip.mp4", type: "video/mp4" }],
188
+ * });
189
+ * ```
190
+ *
191
+ * @param target Reactive media element.
192
+ * @param options Source selection and picture-in-picture document.
193
+ * @default options {}
194
+ * @returns Reactive media state and actions.
195
+ */
196
+ declare function useMediaControls(target: MaybeRefOrGetter<MediaElementLike | null | undefined>, options?: UseMediaControlsOptions): MediaControls;
197
+ //#endregion
198
+ export { MediaControls, MediaElementLike, MediaSourceCandidate, MediaTextTrack, PictureInPictureDocumentLike, TextTrackLike, TextTrackListLike, TimeRangesLike, UseMediaControlsOptions, useMediaControls };
@@ -0,0 +1,264 @@
1
+ import { computed, readonly, ref, shallowRef, toValue, watch } from "vue";
2
+ //#region src/use-media-controls.ts
3
+ function browserDocument() {
4
+ return typeof window === "undefined" ? void 0 : window.document;
5
+ }
6
+ function readRanges(ranges) {
7
+ const result = [];
8
+ for (let index = 0; index < ranges.length; index += 1) result.push([ranges.start(index), ranges.end(index)]);
9
+ return result;
10
+ }
11
+ function chooseSource(element, source) {
12
+ if (typeof source === "string") return source;
13
+ for (const candidate of source) {
14
+ if (candidate.type === void 0 || !element.canPlayType) return candidate.src;
15
+ if (element.canPlayType(candidate.type) !== "") return candidate.src;
16
+ }
17
+ }
18
+ /**
19
+ * Two-way reactive controls for a `<video>` or `<audio>` element.
20
+ *
21
+ * `playing`, `currentTime`, `volume`, `muted`, and `rate` mirror the
22
+ * element and are writable: assigning them drives the element, while
23
+ * element events update them without echoing the change back. The element
24
+ * is the source of truth whenever a new target attaches. Read-only state
25
+ * covers duration, buffering, seeking, waiting, stalls, text tracks, and
26
+ * picture-in-picture. A rejected `play()` (blocked autoplay) resets
27
+ * `playing` and is exposed through `error`. Listeners are removed when the
28
+ * target changes and when the owning reactive scope stops.
29
+ *
30
+ * Server rendering: the template ref is empty, so every value keeps its
31
+ * neutral default (paused, time 0, volume 1) and nothing is touched.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const video = useTemplateRef<HTMLVideoElement>("video");
36
+ * const { playing, currentTime, duration } = useMediaControls(video, {
37
+ * src: [{ src: "/clip.webm", type: "video/webm" }, { src: "/clip.mp4", type: "video/mp4" }],
38
+ * });
39
+ * ```
40
+ *
41
+ * @param target Reactive media element.
42
+ * @param options Source selection and picture-in-picture document.
43
+ * @default options {}
44
+ * @returns Reactive media state and actions.
45
+ */
46
+ function useMediaControls(target, options = {}) {
47
+ const playing = ref(false);
48
+ const currentTime = ref(0);
49
+ const volume = ref(1);
50
+ const muted = ref(false);
51
+ const rate = ref(1);
52
+ const duration = ref(0);
53
+ const buffered = shallowRef([]);
54
+ const seeking = ref(false);
55
+ const waiting = ref(false);
56
+ const ended = ref(false);
57
+ const stalled = ref(false);
58
+ const error = shallowRef(void 0);
59
+ const tracks = shallowRef([]);
60
+ const selectedTrack = ref(-1);
61
+ const isPictureInPicture = ref(false);
62
+ let syncing = false;
63
+ const resolveElement = () => toValue(target) ?? void 0;
64
+ const resolveDocument = () => options.document === void 0 ? browserDocument() : toValue(options.document) ?? void 0;
65
+ const fromElement = (update) => {
66
+ syncing = true;
67
+ try {
68
+ update();
69
+ } finally {
70
+ syncing = false;
71
+ }
72
+ };
73
+ const readTracks = (element) => {
74
+ const list = element.textTracks;
75
+ const summary = [];
76
+ let showing = -1;
77
+ for (let index = 0; list && index < list.length; index += 1) {
78
+ const track = list[index];
79
+ if (!track) continue;
80
+ summary.push({
81
+ index,
82
+ id: track.id,
83
+ kind: track.kind,
84
+ label: track.label,
85
+ language: track.language,
86
+ mode: track.mode
87
+ });
88
+ if (track.mode === "showing" && showing === -1) showing = index;
89
+ }
90
+ tracks.value = summary;
91
+ selectedTrack.value = showing;
92
+ };
93
+ const readAll = (element) => {
94
+ fromElement(() => {
95
+ playing.value = !element.paused;
96
+ currentTime.value = element.currentTime;
97
+ volume.value = element.volume;
98
+ muted.value = element.muted;
99
+ rate.value = element.playbackRate;
100
+ });
101
+ duration.value = Number.isFinite(element.duration) ? element.duration : 0;
102
+ buffered.value = readRanges(element.buffered);
103
+ seeking.value = element.seeking;
104
+ ended.value = element.ended;
105
+ readTracks(element);
106
+ const document = resolveDocument();
107
+ isPictureInPicture.value = document?.pictureInPictureElement !== void 0 && document.pictureInPictureElement === element;
108
+ };
109
+ const play = async () => {
110
+ const element = resolveElement();
111
+ if (!element) return false;
112
+ try {
113
+ await element.play();
114
+ error.value = void 0;
115
+ return true;
116
+ } catch (cause) {
117
+ error.value = cause;
118
+ fromElement(() => {
119
+ playing.value = !element.paused;
120
+ });
121
+ return false;
122
+ }
123
+ };
124
+ const pause = () => {
125
+ resolveElement()?.pause();
126
+ };
127
+ watch(resolveElement, (element, _previous, onCleanup) => {
128
+ if (!element) return;
129
+ readAll(element);
130
+ const handlers = {
131
+ timeupdate: () => fromElement(() => currentTime.value = element.currentTime),
132
+ durationchange: () => {
133
+ duration.value = Number.isFinite(element.duration) ? element.duration : 0;
134
+ },
135
+ loadedmetadata: () => readAll(element),
136
+ progress: () => {
137
+ buffered.value = readRanges(element.buffered);
138
+ stalled.value = false;
139
+ },
140
+ seeking: () => seeking.value = true,
141
+ seeked: () => seeking.value = false,
142
+ waiting: () => waiting.value = true,
143
+ canplay: () => waiting.value = false,
144
+ playing: () => {
145
+ waiting.value = false;
146
+ stalled.value = false;
147
+ ended.value = false;
148
+ },
149
+ play: () => fromElement(() => playing.value = true),
150
+ pause: () => fromElement(() => playing.value = false),
151
+ ended: () => {
152
+ ended.value = true;
153
+ fromElement(() => playing.value = false);
154
+ },
155
+ stalled: () => stalled.value = true,
156
+ volumechange: () => fromElement(() => {
157
+ volume.value = element.volume;
158
+ muted.value = element.muted;
159
+ }),
160
+ ratechange: () => fromElement(() => rate.value = element.playbackRate),
161
+ enterpictureinpicture: () => isPictureInPicture.value = true,
162
+ leavepictureinpicture: () => isPictureInPicture.value = false
163
+ };
164
+ for (const [event, handler] of Object.entries(handlers)) element.addEventListener(event, handler);
165
+ const onTracksChange = () => readTracks(element);
166
+ element.textTracks?.addEventListener("change", onTracksChange);
167
+ element.textTracks?.addEventListener("addtrack", onTracksChange);
168
+ element.textTracks?.addEventListener("removetrack", onTracksChange);
169
+ onCleanup(() => {
170
+ for (const [event, handler] of Object.entries(handlers)) element.removeEventListener(event, handler);
171
+ element.textTracks?.removeEventListener("change", onTracksChange);
172
+ element.textTracks?.removeEventListener("addtrack", onTracksChange);
173
+ element.textTracks?.removeEventListener("removetrack", onTracksChange);
174
+ });
175
+ }, {
176
+ immediate: true,
177
+ flush: "sync"
178
+ });
179
+ watch([resolveElement, () => toValue(options.src)], ([element, source]) => {
180
+ if (!element || source === void 0) return;
181
+ const chosen = chooseSource(element, source);
182
+ if (chosen !== void 0 && element.src !== chosen) element.src = chosen;
183
+ }, {
184
+ immediate: true,
185
+ flush: "sync"
186
+ });
187
+ watch(playing, (value) => {
188
+ if (syncing) return;
189
+ if (value) play();
190
+ else pause();
191
+ }, { flush: "sync" });
192
+ watch(currentTime, (value) => {
193
+ const element = resolveElement();
194
+ if (!syncing && element) element.currentTime = value;
195
+ }, { flush: "sync" });
196
+ watch(volume, (value) => {
197
+ const element = resolveElement();
198
+ if (!syncing && element) element.volume = value;
199
+ }, { flush: "sync" });
200
+ watch(muted, (value) => {
201
+ const element = resolveElement();
202
+ if (!syncing && element) element.muted = value;
203
+ }, { flush: "sync" });
204
+ watch(rate, (value) => {
205
+ const element = resolveElement();
206
+ if (!syncing && element) element.playbackRate = value;
207
+ }, { flush: "sync" });
208
+ const selectTrack = (index) => {
209
+ const element = resolveElement();
210
+ const list = element?.textTracks;
211
+ if (!element || !list) return;
212
+ for (let position = 0; position < list.length; position += 1) {
213
+ const track = list[position];
214
+ if (track) track.mode = position === index ? "showing" : "disabled";
215
+ }
216
+ readTracks(element);
217
+ };
218
+ const supportsPictureInPicture = computed(() => {
219
+ const element = resolveElement();
220
+ const document = resolveDocument();
221
+ return typeof element?.requestPictureInPicture === "function" && document?.pictureInPictureEnabled !== false;
222
+ });
223
+ const togglePictureInPicture = async () => {
224
+ const element = resolveElement();
225
+ const document = resolveDocument();
226
+ if (!element) return false;
227
+ try {
228
+ if (isPictureInPicture.value) {
229
+ await document?.exitPictureInPicture?.();
230
+ isPictureInPicture.value = false;
231
+ } else if (element.requestPictureInPicture) {
232
+ await element.requestPictureInPicture();
233
+ isPictureInPicture.value = true;
234
+ }
235
+ } catch (cause) {
236
+ error.value = cause;
237
+ }
238
+ return isPictureInPicture.value;
239
+ };
240
+ return {
241
+ playing,
242
+ currentTime,
243
+ volume,
244
+ muted,
245
+ rate,
246
+ duration: readonly(duration),
247
+ buffered,
248
+ seeking: readonly(seeking),
249
+ waiting: readonly(waiting),
250
+ ended: readonly(ended),
251
+ stalled: readonly(stalled),
252
+ error,
253
+ tracks,
254
+ selectedTrack: readonly(selectedTrack),
255
+ supportsPictureInPicture,
256
+ isPictureInPicture: readonly(isPictureInPicture),
257
+ play,
258
+ pause,
259
+ selectTrack,
260
+ togglePictureInPicture
261
+ };
262
+ }
263
+ //#endregion
264
+ export { useMediaControls };