@vizejs/composable 0.426.3 → 0.428.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,83 @@
1
+ import { n as IntervalScheduler } from "./use-interval-BA55gTHT.mjs";
2
+ import { ComputedRef, MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ //#region src/use-user-activation.d.ts
5
+ /** Minimal `navigator.userActivation` (`UserActivation`). */
6
+ interface UserActivationLike {
7
+ /** Whether the page ever had sticky activation. */
8
+ readonly hasBeenActive: boolean;
9
+ /** Whether the page currently has transient activation. */
10
+ readonly isActive: boolean;
11
+ }
12
+ /** Options for {@link useUserActivation}. */
13
+ interface UseUserActivationOptions {
14
+ /**
15
+ * User activation state for alternate runtimes and tests.
16
+ *
17
+ * @default window.navigator.userActivation when it exists
18
+ */
19
+ readonly userActivation?: MaybeRefOrGetter<UserActivationLike | null | undefined>;
20
+ /**
21
+ * Target whose activation-triggering events refresh the state.
22
+ *
23
+ * @default window
24
+ */
25
+ readonly target?: MaybeRefOrGetter<EventTarget | null | undefined>;
26
+ /**
27
+ * Events that refresh the state.
28
+ *
29
+ * @default ["keydown", "mousedown", "pointerdown", "pointerup", "touchend"]
30
+ */
31
+ readonly events?: readonly string[];
32
+ /**
33
+ * Poll interval in milliseconds while `isActive` is true, so its expiry is
34
+ * observed. `0` disables polling.
35
+ *
36
+ * @default 1000
37
+ */
38
+ readonly interval?: number;
39
+ /**
40
+ * Timer host for polling.
41
+ *
42
+ * @default window timer functions
43
+ */
44
+ readonly scheduler?: IntervalScheduler;
45
+ }
46
+ /** Reactive state returned by {@link useUserActivation}. */
47
+ interface UserActivationControls {
48
+ /** Whether the User Activation API is available. */
49
+ readonly supported: ComputedRef<boolean>;
50
+ /** Sticky activation: the user interacted with the page at least once. */
51
+ readonly hasBeenActive: Readonly<Ref<boolean>>;
52
+ /** Transient activation: a gated API (popup, fullscreen, clipboard) may be called now. */
53
+ readonly isActive: Readonly<Ref<boolean>>;
54
+ /** Re-read the activation state. */
55
+ readonly refresh: () => void;
56
+ /** Remove listeners and timers. Idempotent. */
57
+ readonly stop: () => void;
58
+ }
59
+ /**
60
+ * Track sticky and transient user activation with the User Activation API.
61
+ *
62
+ * The state is refreshed on activation-triggering events of `target`
63
+ * (immediately and again after a microtask) and polled while `isActive` is
64
+ * true so its expiry is observed. Listeners and the timer are removed when
65
+ * the owning reactive scope stops; outside a scope call `stop()`.
66
+ *
67
+ * Server rendering: no listeners or timers, `supported`, `hasBeenActive`,
68
+ * and `isActive` are false.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * const { isActive } = useUserActivation();
73
+ * const canOpenPopup = computed(() => isActive.value);
74
+ * ```
75
+ *
76
+ * @param options Capability host, event target, and polling policy.
77
+ * @default options {}
78
+ * @throws `RangeError` tagged `VIZE_COMPOSE_USER_ACTIVATION_INVALID_INTERVAL` when `interval` is negative or not finite.
79
+ * @returns Activation state.
80
+ */
81
+ declare function useUserActivation(options?: UseUserActivationOptions): UserActivationControls;
82
+ //#endregion
83
+ export { UseUserActivationOptions, UserActivationControls, UserActivationLike, useUserActivation };
@@ -0,0 +1,113 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, hasInjectionContext, readonly, ref, shallowRef, toValue, watch, watchPostEffect } from "vue";
3
+ //#region src/use-user-activation.ts
4
+ const defaultEvents = [
5
+ "keydown",
6
+ "mousedown",
7
+ "pointerdown",
8
+ "pointerup",
9
+ "touchend"
10
+ ];
11
+ function isUserActivation(candidate) {
12
+ return typeof candidate === "object" && candidate !== null && "isActive" in candidate;
13
+ }
14
+ function browserUserActivation() {
15
+ if (typeof window === "undefined") return void 0;
16
+ const candidate = Reflect.get(window.navigator, "userActivation");
17
+ return isUserActivation(candidate) ? candidate : void 0;
18
+ }
19
+ function browserScheduler() {
20
+ if (typeof window === "undefined") return void 0;
21
+ return {
22
+ setInterval: (callback, intervalMs) => window.setInterval(callback, intervalMs),
23
+ clearInterval: (handle) => {
24
+ if (typeof handle === "number") window.clearInterval(handle);
25
+ }
26
+ };
27
+ }
28
+ /**
29
+ * Track sticky and transient user activation with the User Activation API.
30
+ *
31
+ * The state is refreshed on activation-triggering events of `target`
32
+ * (immediately and again after a microtask) and polled while `isActive` is
33
+ * true so its expiry is observed. Listeners and the timer are removed when
34
+ * the owning reactive scope stops; outside a scope call `stop()`.
35
+ *
36
+ * Server rendering: no listeners or timers, `supported`, `hasBeenActive`,
37
+ * and `isActive` are false.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const { isActive } = useUserActivation();
42
+ * const canOpenPopup = computed(() => isActive.value);
43
+ * ```
44
+ *
45
+ * @param options Capability host, event target, and polling policy.
46
+ * @default options {}
47
+ * @throws `RangeError` tagged `VIZE_COMPOSE_USER_ACTIVATION_INVALID_INTERVAL` when `interval` is negative or not finite.
48
+ * @returns Activation state.
49
+ */
50
+ function useUserActivation(options = {}) {
51
+ const interval = options.interval ?? 1e3;
52
+ if (!Number.isFinite(interval) || interval < 0) throw new RangeError(`[VIZE_COMPOSE_USER_ACTIVATION_INVALID_INTERVAL] interval must be a finite, non-negative number; received ${String(interval)}`);
53
+ const hasBeenActive = ref(false);
54
+ const isActive = ref(false);
55
+ let timer;
56
+ const hydrated = shallowRef(!hasInjectionContext());
57
+ if (!hydrated.value) watchPostEffect(() => {
58
+ hydrated.value = true;
59
+ });
60
+ const resolveHost = () => !hydrated.value ? void 0 : options.userActivation === void 0 ? browserUserActivation() : toValue(options.userActivation) ?? void 0;
61
+ const stopPolling = () => {
62
+ timer?.scheduler.clearInterval(timer.handle);
63
+ timer = void 0;
64
+ };
65
+ const refresh = () => {
66
+ const host = resolveHost();
67
+ hasBeenActive.value = host?.hasBeenActive ?? false;
68
+ isActive.value = host?.isActive ?? false;
69
+ if (!isActive.value) {
70
+ stopPolling();
71
+ return;
72
+ }
73
+ if (timer || interval === 0) return;
74
+ const scheduler = options.scheduler ?? browserScheduler();
75
+ if (scheduler) timer = {
76
+ scheduler,
77
+ handle: scheduler.setInterval(refresh, interval)
78
+ };
79
+ };
80
+ const onEvent = () => {
81
+ refresh();
82
+ Promise.resolve().then(refresh);
83
+ };
84
+ const stopWatch = watch(() => [options.target === void 0 ? typeof window === "undefined" ? void 0 : window : toValue(options.target) ?? void 0, resolveHost()], ([target, host], _previous, onCleanup) => {
85
+ if (host) refresh();
86
+ if (!target || !host) return;
87
+ const events = options.events ?? defaultEvents;
88
+ for (const type of events) target.addEventListener(type, onEvent, {
89
+ capture: true,
90
+ passive: true
91
+ });
92
+ onCleanup(() => {
93
+ for (const type of events) target.removeEventListener(type, onEvent, { capture: true });
94
+ });
95
+ }, {
96
+ immediate: true,
97
+ flush: "sync"
98
+ });
99
+ const stop = () => {
100
+ stopWatch();
101
+ stopPolling();
102
+ };
103
+ tryOnScopeDispose(stop);
104
+ return {
105
+ supported: computed(() => resolveHost() !== void 0),
106
+ hasBeenActive: readonly(hasBeenActive),
107
+ isActive: readonly(isActive),
108
+ refresh,
109
+ stop
110
+ };
111
+ }
112
+ //#endregion
113
+ export { useUserActivation };
@@ -0,0 +1,194 @@
1
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
+
3
+ //#region src/use-user-media.d.ts
4
+ /** Minimal `MediaStreamTrack`. */
5
+ interface MediaStreamTrackLike extends EventTarget {
6
+ /** `"audio"` or `"video"`. */
7
+ readonly kind: string;
8
+ /** `"live"` or `"ended"`. */
9
+ readonly readyState: string;
10
+ /** Stop the track and release its device. */
11
+ stop(): void;
12
+ }
13
+ /** Minimal `MediaStream`. */
14
+ interface MediaStreamLike {
15
+ /** Every track of the stream. */
16
+ getTracks(): readonly MediaStreamTrackLike[];
17
+ }
18
+ /** Anything that can asynchronously produce a media stream. */
19
+ interface MediaStreamSource<Constraints> {
20
+ /** Acquire a stream; rejects with a DOMException on failure. */
21
+ request(constraints: Constraints): Promise<MediaStreamLike>;
22
+ }
23
+ /** Lifecycle state of a managed media stream. */
24
+ type MediaStreamStatus = "idle" | "requesting" | "active" | "error";
25
+ /** Normalized reason why a stream could not be acquired. */
26
+ type MediaStreamErrorCode = "aborted" | "failed" | "invalid-constraints" | "not-found" | "not-readable" | "overconstrained" | "permission-denied" | "unsupported";
27
+ /** Stream acquisition failure. */
28
+ interface MediaStreamFailure {
29
+ /** Normalized reason. */
30
+ readonly code: MediaStreamErrorCode;
31
+ /** Exact error thrown by the source, when one was thrown. */
32
+ readonly cause: unknown;
33
+ }
34
+ /** Options for {@link useMediaStream}. */
35
+ interface UseMediaStreamOptions<Constraints> {
36
+ /** Reactive stream source; `null`/`undefined` means unsupported. */
37
+ readonly source: MaybeRefOrGetter<MediaStreamSource<Constraints> | null | undefined>;
38
+ /** Reactive constraints passed to the source. */
39
+ readonly constraints: MaybeRefOrGetter<Constraints>;
40
+ /**
41
+ * Start while `true`, stop while `false`.
42
+ *
43
+ * @default false
44
+ */
45
+ readonly enabled?: MaybeRefOrGetter<boolean>;
46
+ /**
47
+ * Restart an active stream when the constraints change.
48
+ *
49
+ * @default true
50
+ */
51
+ readonly autoSwitch?: boolean;
52
+ }
53
+ /** Reactive state and actions of a managed media stream. */
54
+ interface MediaStreamControls {
55
+ /** Whether a stream source is available. */
56
+ readonly supported: ComputedRef<boolean>;
57
+ /** The active stream, if any. */
58
+ readonly stream: Readonly<ShallowRef<MediaStreamLike | undefined>>;
59
+ /** Lifecycle state. */
60
+ readonly status: Readonly<Ref<MediaStreamStatus>>;
61
+ /** Most recent acquisition failure, cleared by the next request. */
62
+ readonly error: Readonly<ShallowRef<MediaStreamFailure | undefined>>;
63
+ /**
64
+ * Acquire a stream unless one is active. Overlapping calls resolve to the
65
+ * newest stream; superseded streams are stopped immediately.
66
+ *
67
+ * @returns The active stream, or `undefined` on failure or supersession.
68
+ */
69
+ readonly start: () => Promise<MediaStreamLike | undefined>;
70
+ /** Stop every track and release the stream. Repeated calls are safe. */
71
+ readonly stop: () => void;
72
+ /**
73
+ * Stop and acquire a fresh stream with the current constraints.
74
+ *
75
+ * @returns The new stream, or `undefined` on failure or supersession.
76
+ */
77
+ readonly restart: () => Promise<MediaStreamLike | undefined>;
78
+ }
79
+ /**
80
+ * Manage the lifecycle of a media stream from any asynchronous source.
81
+ *
82
+ * This is the engine behind {@link useUserMedia} and `useDisplayMedia`, and
83
+ * can wrap any other stream producer (canvas capture, WebRTC). Acquisition
84
+ * failures are classified into {@link MediaStreamErrorCode}s; the stream
85
+ * returns to `"idle"` once all of its tracks ended (device unplugged, the
86
+ * user stopped screen sharing). Latest-wins: a stream that resolves after a
87
+ * newer request or a `stop` is stopped immediately. All tracks are stopped
88
+ * when the owning reactive scope stops.
89
+ *
90
+ * Server rendering: without a browser window a missing source keeps the
91
+ * status `"idle"` (no error), so server markup matches the first client
92
+ * render.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const canvasStream = useMediaStream({
97
+ * source: { request: async (fps: number) => canvas.captureStream(fps) },
98
+ * constraints: 30,
99
+ * });
100
+ * ```
101
+ *
102
+ * @typeParam Constraints Constraint type accepted by the source.
103
+ * @param options Source, constraints, and activation.
104
+ * @returns Stream state and actions.
105
+ */
106
+ declare function useMediaStream<Constraints>(options: UseMediaStreamOptions<Constraints>): MediaStreamControls;
107
+ /** Minimal `MediaDeviceInfo`. */
108
+ interface MediaDeviceInfoLike {
109
+ /** Device identifier. */
110
+ readonly deviceId: string;
111
+ /** `"audioinput"`, `"audiooutput"`, or `"videoinput"`. */
112
+ readonly kind: string;
113
+ /** Human-readable label (empty until permission is granted). */
114
+ readonly label: string;
115
+ /** Identifier shared by devices of one physical unit. */
116
+ readonly groupId: string;
117
+ }
118
+ /** Minimal `MediaDevices` consumed by {@link useUserMedia}. */
119
+ interface UserMediaHost extends EventTarget {
120
+ /** Request camera/microphone access. */
121
+ getUserMedia(constraints?: MediaStreamConstraints): Promise<MediaStreamLike>;
122
+ /** List media devices. */
123
+ enumerateDevices?(): Promise<readonly MediaDeviceInfoLike[]>;
124
+ }
125
+ /** Options for {@link useUserMedia}. */
126
+ interface UseUserMediaOptions {
127
+ /**
128
+ * Reactive constraints for `getUserMedia`.
129
+ *
130
+ * @default { audio: true, video: true }
131
+ */
132
+ readonly constraints?: MaybeRefOrGetter<MediaStreamConstraints>;
133
+ /**
134
+ * Start while `true`, stop while `false`.
135
+ *
136
+ * @default false
137
+ */
138
+ readonly enabled?: MaybeRefOrGetter<boolean>;
139
+ /**
140
+ * Restart an active stream when the constraints change.
141
+ *
142
+ * @default true
143
+ */
144
+ readonly autoSwitch?: boolean;
145
+ /**
146
+ * Keep `devices` current via `enumerateDevices` and `devicechange`.
147
+ *
148
+ * @default false
149
+ */
150
+ readonly listDevices?: boolean;
151
+ /**
152
+ * `MediaDevices` capability for alternate runtimes and tests.
153
+ *
154
+ * @default window.navigator.mediaDevices
155
+ */
156
+ readonly host?: MaybeRefOrGetter<UserMediaHost | null | undefined>;
157
+ }
158
+ /** Reactive state and actions returned by {@link useUserMedia}. */
159
+ interface UserMediaControls extends MediaStreamControls {
160
+ /** Media devices, populated when `listDevices` is enabled. */
161
+ readonly devices: Readonly<ShallowRef<readonly MediaDeviceInfoLike[]>>;
162
+ /**
163
+ * Re-enumerate media devices.
164
+ *
165
+ * @returns The device list, empty when unsupported or on failure.
166
+ */
167
+ readonly refreshDevices: () => Promise<readonly MediaDeviceInfoLike[]>;
168
+ }
169
+ /**
170
+ * Access the camera and microphone with `getUserMedia`.
171
+ *
172
+ * Built on {@link useMediaStream}: reactive constraints (restarting an
173
+ * active stream when they change), `enabled` activation, classified
174
+ * failures such as `"permission-denied"`, and latest-wins requests. With
175
+ * `listDevices`, `devices` follows `devicechange`. Tracks and listeners are
176
+ * released when the owning reactive scope stops.
177
+ *
178
+ * Server rendering: no device is touched; `status` is `"idle"`, `stream` is
179
+ * undefined, and `supported` is false.
180
+ *
181
+ * @example
182
+ * ```ts
183
+ * const camera = useUserMedia({ constraints: { video: true, audio: false } });
184
+ * await camera.start();
185
+ * video.srcObject = camera.stream.value;
186
+ * ```
187
+ *
188
+ * @param options Constraints, activation, device listing, and capability.
189
+ * @default options {}
190
+ * @returns Stream state, device list, and actions.
191
+ */
192
+ declare function useUserMedia(options?: UseUserMediaOptions): UserMediaControls;
193
+ //#endregion
194
+ export { MediaDeviceInfoLike, MediaStreamControls, MediaStreamErrorCode, MediaStreamFailure, MediaStreamLike, MediaStreamSource, MediaStreamStatus, MediaStreamTrackLike, UseMediaStreamOptions, UseUserMediaOptions, UserMediaControls, UserMediaHost, useMediaStream, useUserMedia };
@@ -0,0 +1,214 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, readonly, ref, shallowRef, toValue, watch } from "vue";
3
+ //#region src/use-user-media.ts
4
+ function errorName(error) {
5
+ return typeof error === "object" && error !== null && "name" in error ? String(error.name) : void 0;
6
+ }
7
+ function classify(error) {
8
+ switch (errorName(error)) {
9
+ case "NotAllowedError":
10
+ case "SecurityError": return "permission-denied";
11
+ case "NotFoundError": return "not-found";
12
+ case "NotReadableError": return "not-readable";
13
+ case "OverconstrainedError": return "overconstrained";
14
+ case "AbortError": return "aborted";
15
+ case "TypeError": return "invalid-constraints";
16
+ default: return "failed";
17
+ }
18
+ }
19
+ function stopTracks(stream) {
20
+ for (const track of stream.getTracks()) track.stop();
21
+ }
22
+ /**
23
+ * Manage the lifecycle of a media stream from any asynchronous source.
24
+ *
25
+ * This is the engine behind {@link useUserMedia} and `useDisplayMedia`, and
26
+ * can wrap any other stream producer (canvas capture, WebRTC). Acquisition
27
+ * failures are classified into {@link MediaStreamErrorCode}s; the stream
28
+ * returns to `"idle"` once all of its tracks ended (device unplugged, the
29
+ * user stopped screen sharing). Latest-wins: a stream that resolves after a
30
+ * newer request or a `stop` is stopped immediately. All tracks are stopped
31
+ * when the owning reactive scope stops.
32
+ *
33
+ * Server rendering: without a browser window a missing source keeps the
34
+ * status `"idle"` (no error), so server markup matches the first client
35
+ * render.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const canvasStream = useMediaStream({
40
+ * source: { request: async (fps: number) => canvas.captureStream(fps) },
41
+ * constraints: 30,
42
+ * });
43
+ * ```
44
+ *
45
+ * @typeParam Constraints Constraint type accepted by the source.
46
+ * @param options Source, constraints, and activation.
47
+ * @returns Stream state and actions.
48
+ */
49
+ function useMediaStream(options) {
50
+ const stream = shallowRef(void 0);
51
+ const status = ref("idle");
52
+ const error = shallowRef(void 0);
53
+ let generation = 0;
54
+ let detach;
55
+ const resolveSource = () => toValue(options.source) ?? void 0;
56
+ const stop = () => {
57
+ generation += 1;
58
+ detach?.();
59
+ detach = void 0;
60
+ const current = stream.value;
61
+ stream.value = void 0;
62
+ if (current) stopTracks(current);
63
+ status.value = "idle";
64
+ };
65
+ const attach = (next) => {
66
+ const tracks = next.getTracks();
67
+ const onEnded = () => {
68
+ if (stream.value === next && tracks.every((track) => track.readyState === "ended")) stop();
69
+ };
70
+ for (const track of tracks) track.addEventListener("ended", onEnded);
71
+ detach = () => {
72
+ for (const track of tracks) track.removeEventListener("ended", onEnded);
73
+ };
74
+ };
75
+ const start = async () => {
76
+ if (status.value === "active" && stream.value) return stream.value;
77
+ const current = ++generation;
78
+ const source = resolveSource();
79
+ if (!source) {
80
+ if (typeof window !== "undefined") {
81
+ error.value = {
82
+ code: "unsupported",
83
+ cause: void 0
84
+ };
85
+ status.value = "error";
86
+ }
87
+ return;
88
+ }
89
+ error.value = void 0;
90
+ status.value = "requesting";
91
+ let next;
92
+ try {
93
+ next = await source.request(toValue(options.constraints));
94
+ } catch (cause) {
95
+ if (current === generation) {
96
+ error.value = {
97
+ code: classify(cause),
98
+ cause
99
+ };
100
+ status.value = "error";
101
+ }
102
+ return;
103
+ }
104
+ if (current !== generation) {
105
+ stopTracks(next);
106
+ return;
107
+ }
108
+ detach?.();
109
+ const previous = stream.value;
110
+ if (previous && previous !== next) stopTracks(previous);
111
+ stream.value = next;
112
+ attach(next);
113
+ status.value = "active";
114
+ return next;
115
+ };
116
+ const restart = async () => {
117
+ stop();
118
+ return start();
119
+ };
120
+ watch(() => toValue(options.enabled) ?? false, (enabled) => {
121
+ if (enabled) start();
122
+ else if (status.value !== "idle") stop();
123
+ }, { immediate: true });
124
+ watch(() => toValue(options.constraints), () => {
125
+ if ((options.autoSwitch ?? true) && status.value === "active") restart();
126
+ }, { deep: true });
127
+ tryOnScopeDispose(stop);
128
+ return {
129
+ supported: computed(() => resolveSource() !== void 0),
130
+ stream,
131
+ status: readonly(status),
132
+ error,
133
+ start,
134
+ stop,
135
+ restart
136
+ };
137
+ }
138
+ function browserUserMediaHost() {
139
+ if (typeof window === "undefined") return void 0;
140
+ return window.navigator.mediaDevices ?? void 0;
141
+ }
142
+ /**
143
+ * Access the camera and microphone with `getUserMedia`.
144
+ *
145
+ * Built on {@link useMediaStream}: reactive constraints (restarting an
146
+ * active stream when they change), `enabled` activation, classified
147
+ * failures such as `"permission-denied"`, and latest-wins requests. With
148
+ * `listDevices`, `devices` follows `devicechange`. Tracks and listeners are
149
+ * released when the owning reactive scope stops.
150
+ *
151
+ * Server rendering: no device is touched; `status` is `"idle"`, `stream` is
152
+ * undefined, and `supported` is false.
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * const camera = useUserMedia({ constraints: { video: true, audio: false } });
157
+ * await camera.start();
158
+ * video.srcObject = camera.stream.value;
159
+ * ```
160
+ *
161
+ * @param options Constraints, activation, device listing, and capability.
162
+ * @default options {}
163
+ * @returns Stream state, device list, and actions.
164
+ */
165
+ function useUserMedia(options = {}) {
166
+ const resolveHost = () => options.host === void 0 ? browserUserMediaHost() : toValue(options.host) ?? void 0;
167
+ const devices = shallowRef([]);
168
+ const controls = useMediaStream({
169
+ source: () => {
170
+ const host = resolveHost();
171
+ return host ? { request: (constraints) => host.getUserMedia(constraints) } : void 0;
172
+ },
173
+ constraints: () => toValue(options.constraints) ?? {
174
+ audio: true,
175
+ video: true
176
+ },
177
+ enabled: () => toValue(options.enabled) ?? false,
178
+ autoSwitch: options.autoSwitch ?? true
179
+ });
180
+ const refreshDevices = async () => {
181
+ const host = resolveHost();
182
+ if (!host?.enumerateDevices) return devices.value = [];
183
+ try {
184
+ devices.value = [...await host.enumerateDevices()];
185
+ } catch {
186
+ devices.value = [];
187
+ }
188
+ return devices.value;
189
+ };
190
+ if (options.listDevices ?? false) {
191
+ watch(resolveHost, (host, _previous, onCleanup) => {
192
+ if (!host) return;
193
+ const update = () => {
194
+ refreshDevices();
195
+ };
196
+ update();
197
+ host.addEventListener("devicechange", update);
198
+ onCleanup(() => host.removeEventListener("devicechange", update));
199
+ }, {
200
+ immediate: true,
201
+ flush: "sync"
202
+ });
203
+ watch(controls.status, (status) => {
204
+ if (status === "active") refreshDevices();
205
+ });
206
+ }
207
+ return {
208
+ ...controls,
209
+ devices,
210
+ refreshDevices
211
+ };
212
+ }
213
+ //#endregion
214
+ export { useMediaStream, useUserMedia };