@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,188 @@
1
+ import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref, WatchHandle } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** Options for {@link useEventListener}. */
7
+ export interface UseEventListenerOptions {
8
+ /**
9
+ * Invoke the listener during the capture phase.
10
+ *
11
+ * @default false
12
+ */
13
+ readonly capture?: boolean;
14
+
15
+ /**
16
+ * Stop listening after the first event.
17
+ *
18
+ * @default false
19
+ */
20
+ readonly once?: boolean;
21
+
22
+ /**
23
+ * Declare that the listener does not cancel the event's default action.
24
+ *
25
+ * @default false
26
+ */
27
+ readonly passive?: boolean;
28
+
29
+ /**
30
+ * Stop listening when this signal is aborted. An already-aborted signal
31
+ * prevents listening from ever starting.
32
+ *
33
+ * @default undefined
34
+ */
35
+ readonly signal?: AbortSignal;
36
+
37
+ /**
38
+ * Start listening during composable creation.
39
+ *
40
+ * @default true
41
+ */
42
+ readonly immediate?: boolean;
43
+
44
+ /**
45
+ * Reactive target update timing.
46
+ *
47
+ * @default "pre"
48
+ */
49
+ readonly flush?: "pre" | "post" | "sync";
50
+ }
51
+
52
+ /** Reactive controls returned by {@link useEventListener}. */
53
+ export interface EventListenerControls {
54
+ /** Whether a concrete target currently owns the listener. */
55
+ readonly isListening: Readonly<Ref<boolean>>;
56
+
57
+ /**
58
+ * Begin listening.
59
+ *
60
+ * @returns Whether a new reactive watcher was started. `false` while the
61
+ * watcher is already active (including a null-target watcher with no
62
+ * listener attached), after the abort signal has fired, and after the
63
+ * owning reactive scope has been disposed.
64
+ */
65
+ readonly start: () => boolean;
66
+
67
+ /** Stop listening. Repeated calls are safe. */
68
+ readonly stop: () => void;
69
+ }
70
+
71
+ /**
72
+ * Attach an event listener to a reactive target and clean it up with the
73
+ * current reactive scope. Missing targets are valid during server rendering:
74
+ * a `null`/`undefined` target keeps the listener detached until a concrete
75
+ * target appears, so no browser globals are required.
76
+ *
77
+ * The listener is re-attached whenever the reactive target changes and is
78
+ * removed when the owning reactive scope stops, when
79
+ * {@link EventListenerControls.stop} is called, or when the abort signal
80
+ * fires. Outside an active scope, teardown ownership stays with the caller,
81
+ * who must call `stop` explicitly. Errors thrown by a custom target's
82
+ * add/remove methods propagate to the active watcher run.
83
+ *
84
+ * @param target Reactive event target.
85
+ * @param event Event name.
86
+ * @param listener Typed event listener.
87
+ * @param options Listener lifecycle and scheduling options.
88
+ * @default options {}
89
+ * @returns Controls to observe and change the listening state.
90
+ */
91
+ export function useEventListener<Key extends keyof WindowEventMap>(
92
+ target: MaybeRefOrGetter<Window | null | undefined>,
93
+ event: Key,
94
+ listener: (event: WindowEventMap[Key]) => void,
95
+ options?: UseEventListenerOptions,
96
+ ): EventListenerControls;
97
+ export function useEventListener<Key extends keyof DocumentEventMap>(
98
+ target: MaybeRefOrGetter<Document | null | undefined>,
99
+ event: Key,
100
+ listener: (event: DocumentEventMap[Key]) => void,
101
+ options?: UseEventListenerOptions,
102
+ ): EventListenerControls;
103
+ export function useEventListener<Key extends keyof HTMLElementEventMap>(
104
+ target: MaybeRefOrGetter<HTMLElement | null | undefined>,
105
+ event: Key,
106
+ listener: (event: HTMLElementEventMap[Key]) => void,
107
+ options?: UseEventListenerOptions,
108
+ ): EventListenerControls;
109
+ export function useEventListener(
110
+ target: MaybeRefOrGetter<EventTarget | null | undefined>,
111
+ event: string,
112
+ listener: EventListener,
113
+ options?: UseEventListenerOptions,
114
+ ): EventListenerControls;
115
+ export function useEventListener(
116
+ target: MaybeRefOrGetter<EventTarget | null | undefined>,
117
+ event: string,
118
+ listener: EventListener,
119
+ options: UseEventListenerOptions = {},
120
+ ): EventListenerControls {
121
+ const {
122
+ capture = false,
123
+ once = false,
124
+ passive = false,
125
+ signal,
126
+ immediate = true,
127
+ flush = "pre",
128
+ } = options;
129
+ const isListening = ref(false);
130
+ const eventOptions: AddEventListenerOptions = {
131
+ capture,
132
+ passive,
133
+ ...(signal ? { signal } : {}),
134
+ };
135
+ let disposed = false;
136
+ // Inside a component the target is attached once it has mounted, so a hydrating
137
+ // client renders `isListening: false` exactly like the server. `hasInjectionContext`
138
+ // also detects Vapor components (unlike `getCurrentInstance`).
139
+ const mounted = shallowRef(!hasInjectionContext());
140
+ if (!mounted.value) {
141
+ onMounted(() => {
142
+ mounted.value = true;
143
+ });
144
+ }
145
+ let stopWatch: WatchHandle | undefined;
146
+
147
+ const stop = (): void => {
148
+ stopWatch?.stop();
149
+ stopWatch = undefined;
150
+ isListening.value = false;
151
+ };
152
+ const start = (): boolean => {
153
+ if (disposed || stopWatch || signal?.aborted) return false;
154
+
155
+ stopWatch = watch(
156
+ () => (mounted.value ? toValue(target) : null),
157
+ (next, _previous, onCleanup) => {
158
+ isListening.value = false;
159
+ if (!next || signal?.aborted) return;
160
+
161
+ const invoke: EventListener = (nativeEvent) => {
162
+ if (once) stop();
163
+ listener(nativeEvent);
164
+ };
165
+ const onAbort = (): void => stop();
166
+ next.addEventListener(event, invoke, eventOptions);
167
+ signal?.addEventListener("abort", onAbort, { once: true });
168
+ isListening.value = true;
169
+
170
+ onCleanup(() => {
171
+ next.removeEventListener(event, invoke, { capture });
172
+ signal?.removeEventListener("abort", onAbort);
173
+ isListening.value = false;
174
+ });
175
+ },
176
+ { flush, immediate: true },
177
+ );
178
+ return true;
179
+ };
180
+
181
+ tryOnScopeDispose(() => {
182
+ disposed = true;
183
+ stop();
184
+ });
185
+ if (immediate) start();
186
+
187
+ return { isListening: readonly(isListening), start, stop };
188
+ }
@@ -0,0 +1,181 @@
1
+ import { computed, readonly, ref, watch } from "vue";
2
+ import type { Ref, WritableComputedRef } from "vue";
3
+
4
+ import { resolveElement } from "./element-target.ts";
5
+ import type { MaybeElementTarget } from "./element-target.ts";
6
+ import { tryOnScopeDispose } from "./scope.ts";
7
+
8
+ /** Element that can receive programmatic focus (`HTMLElement`, `SVGElement`, `MathMLElement`). */
9
+ export type FocusableElement = Element & HTMLOrSVGElement;
10
+
11
+ /** Options for {@link useFocus}. */
12
+ export interface UseFocusOptions {
13
+ /**
14
+ * Focus the element as soon as it resolves.
15
+ *
16
+ * @default false
17
+ */
18
+ readonly initialValue?: boolean;
19
+
20
+ /**
21
+ * Only report focus when the user agent would show a focus ring
22
+ * (`:focus-visible`).
23
+ *
24
+ * @default false
25
+ */
26
+ readonly focusVisible?: boolean;
27
+
28
+ /**
29
+ * Avoid scrolling the element into view when focusing programmatically.
30
+ *
31
+ * @default false
32
+ */
33
+ readonly preventScroll?: boolean;
34
+ }
35
+
36
+ /** Reactive focus state returned by {@link useFocus}. */
37
+ export interface FocusControls {
38
+ /** Whether the element is focused. Assign `true`/`false` to focus/blur it. */
39
+ readonly focused: WritableComputedRef<boolean>;
40
+ /** Stop tracking. Idempotent. */
41
+ readonly stop: () => void;
42
+ }
43
+
44
+ /**
45
+ * Track and control focus of a single element.
46
+ *
47
+ * Listens for `focus`/`blur` on the resolved element and re-syncs when the
48
+ * target changes. Assigning `focused` calls `focus()`/`blur()`. Server renders
49
+ * always report `false`; `initialValue` is applied only after the element
50
+ * resolves on the client, so hydration output is unaffected.
51
+ *
52
+ * @param target Reactive element target.
53
+ * @param options Initial focus, focus-visible filtering, and scroll behavior.
54
+ * @default options {}
55
+ * @returns Writable focus ref and stop control.
56
+ */
57
+ export function useFocus(target: MaybeElementTarget, options: UseFocusOptions = {}): FocusControls {
58
+ const inner = ref(false);
59
+ const element = computed(() => {
60
+ const resolved = resolveElement(target);
61
+ return resolved && isFocusable(resolved) ? resolved : null;
62
+ });
63
+
64
+ const read = (el: FocusableElement): boolean => {
65
+ const active = el.ownerDocument.activeElement === el;
66
+ if (!active || !options.focusVisible) return active;
67
+ return safeMatches(el, ":focus-visible");
68
+ };
69
+
70
+ const stopWatch = watch(
71
+ element,
72
+ (el, _previous, onCleanup) => {
73
+ if (!el) {
74
+ inner.value = false;
75
+ return;
76
+ }
77
+ const onFocus = (): void => {
78
+ inner.value = read(el);
79
+ };
80
+ const onBlur = (): void => {
81
+ inner.value = false;
82
+ };
83
+ el.addEventListener("focus", onFocus);
84
+ el.addEventListener("blur", onBlur);
85
+ inner.value = read(el);
86
+ if (options.initialValue && !inner.value) {
87
+ el.focus({ preventScroll: options.preventScroll ?? false });
88
+ }
89
+ onCleanup(() => {
90
+ el.removeEventListener("focus", onFocus);
91
+ el.removeEventListener("blur", onBlur);
92
+ });
93
+ },
94
+ { immediate: true, flush: "post" },
95
+ );
96
+ const stop = (): void => stopWatch.stop();
97
+ tryOnScopeDispose(stop);
98
+
99
+ const focused = computed({
100
+ get: () => inner.value,
101
+ set: (next: boolean) => {
102
+ const el = element.value;
103
+ if (!el) return;
104
+ if (next) el.focus({ preventScroll: options.preventScroll ?? false });
105
+ else el.blur();
106
+ },
107
+ });
108
+
109
+ return { focused, stop };
110
+ }
111
+
112
+ /** Reactive state returned by {@link useFocusWithin}. */
113
+ export interface FocusWithinControls {
114
+ /** Whether the element or any descendant has focus. */
115
+ readonly focused: Readonly<Ref<boolean>>;
116
+ /** Stop tracking. Idempotent. */
117
+ readonly stop: () => void;
118
+ }
119
+
120
+ /**
121
+ * Track whether focus is inside an element (the `:focus-within` state).
122
+ *
123
+ * Uses bubbling `focusin`/`focusout` and checks the `relatedTarget` so moving
124
+ * focus between descendants never flickers to `false`. Server renders report
125
+ * `false`.
126
+ *
127
+ * @param target Reactive element target.
128
+ * @returns Readonly focus-within ref and stop control.
129
+ */
130
+ export function useFocusWithin(target: MaybeElementTarget): FocusWithinControls {
131
+ const focused = ref(false);
132
+ const stopWatch = watch(
133
+ () => resolveElement(target),
134
+ (el, _previous, onCleanup) => {
135
+ if (!el) {
136
+ focused.value = false;
137
+ return;
138
+ }
139
+ const onFocusIn = (): void => {
140
+ focused.value = true;
141
+ };
142
+ const onFocusOut = (event: Event): void => {
143
+ const next = "relatedTarget" in event ? event.relatedTarget : null;
144
+ focused.value = isNode(next) && el.contains(next);
145
+ };
146
+ el.addEventListener("focusin", onFocusIn);
147
+ el.addEventListener("focusout", onFocusOut);
148
+ const active = el.ownerDocument.activeElement;
149
+ focused.value = active !== null && el.contains(active);
150
+ onCleanup(() => {
151
+ el.removeEventListener("focusin", onFocusIn);
152
+ el.removeEventListener("focusout", onFocusOut);
153
+ });
154
+ },
155
+ { immediate: true, flush: "post" },
156
+ );
157
+ const stop = (): void => stopWatch.stop();
158
+ tryOnScopeDispose(stop);
159
+ return { focused: readonly(focused), stop };
160
+ }
161
+
162
+ function isFocusable(element: Element): element is FocusableElement {
163
+ return (
164
+ "focus" in element &&
165
+ typeof element.focus === "function" &&
166
+ "blur" in element &&
167
+ typeof element.blur === "function"
168
+ );
169
+ }
170
+
171
+ function isNode(value: unknown): value is Node {
172
+ return typeof value === "object" && value !== null && "nodeType" in value;
173
+ }
174
+
175
+ function safeMatches(element: Element, selector: string): boolean {
176
+ try {
177
+ return element.matches(selector);
178
+ } catch {
179
+ return true;
180
+ }
181
+ }
@@ -0,0 +1,133 @@
1
+ import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** Frame scheduling capability used by {@link useFps}. */
7
+ export interface AnimationFrameHost {
8
+ /** Schedule a callback before the next repaint. */
9
+ readonly requestAnimationFrame: (callback: FrameRequestCallback) => number;
10
+ /** Cancel a scheduled frame. */
11
+ readonly cancelAnimationFrame: (handle: number) => void;
12
+ }
13
+
14
+ /** Options for {@link useFps}. */
15
+ export interface UseFpsOptions {
16
+ /**
17
+ * Number of frames averaged per update.
18
+ *
19
+ * @default 10
20
+ */
21
+ readonly every?: number;
22
+
23
+ /**
24
+ * Start measuring during composable creation.
25
+ *
26
+ * @default true
27
+ */
28
+ readonly immediate?: boolean;
29
+
30
+ /**
31
+ * Reactive frame-scheduling capability for alternate runtimes and tests.
32
+ *
33
+ * @default globalThis.window when available
34
+ */
35
+ readonly host?: MaybeRefOrGetter<AnimationFrameHost | null | undefined>;
36
+ }
37
+
38
+ /** Reactive frame-rate state returned by {@link useFps}. */
39
+ export interface FpsControls {
40
+ /** Frames per second averaged over the last `every` frames; `0` until measured. */
41
+ readonly fps: Readonly<Ref<number>>;
42
+ /** Whether a frame-scheduling capability is attached. `false` during server rendering. */
43
+ readonly isSupported: Readonly<Ref<boolean>>;
44
+ /** Whether the frame loop is running. */
45
+ readonly isActive: Readonly<Ref<boolean>>;
46
+ /** Stop the frame loop. */
47
+ readonly pause: () => void;
48
+ /** Restart the frame loop. */
49
+ readonly resume: () => void;
50
+ }
51
+
52
+ /**
53
+ * Measure the rendering frame rate with `requestAnimationFrame`.
54
+ *
55
+ * Uses the frame timestamps passed to the callback (no extra clock) and
56
+ * publishes a rounded average every `every` frames. No frames are requested
57
+ * during server rendering (`fps` stays `0`), and the pending frame is
58
+ * cancelled when paused or when the owning reactive scope stops.
59
+ *
60
+ * @param options Averaging window, start mode, and frame capability.
61
+ * @default options {}
62
+ * @returns Reactive frame rate plus pause/resume controls.
63
+ */
64
+ export function useFps(options: UseFpsOptions = {}): FpsControls {
65
+ const every = Math.max(1, Math.floor(options.every ?? 10));
66
+ const fps = ref(0);
67
+ const isSupported = ref(false);
68
+ const isActive = ref(options.immediate ?? true);
69
+ // Inside a component the host is read once it has mounted, so a hydrating
70
+ // client first renders the same fallback as the server. `hasInjectionContext`
71
+ // also detects Vapor components (unlike `getCurrentInstance`).
72
+ const mounted = shallowRef(!hasInjectionContext());
73
+ if (!mounted.value) {
74
+ onMounted(() => {
75
+ mounted.value = true;
76
+ });
77
+ }
78
+
79
+ const stop = watch(
80
+ [
81
+ () =>
82
+ !mounted.value
83
+ ? undefined
84
+ : options.host === undefined
85
+ ? browserFrameHost()
86
+ : toValue(options.host),
87
+ isActive,
88
+ ],
89
+ ([host, active], _previous, onCleanup) => {
90
+ isSupported.value = Boolean(host);
91
+ if (!host || !active) return;
92
+ let handle = 0;
93
+ let first: number | undefined;
94
+ let frames = 0;
95
+ const tick = (time: number): void => {
96
+ if (first === undefined) {
97
+ first = time;
98
+ } else {
99
+ frames += 1;
100
+ if (frames >= every) {
101
+ const elapsed = time - first;
102
+ if (elapsed > 0) fps.value = Math.round((1000 * frames) / elapsed);
103
+ first = time;
104
+ frames = 0;
105
+ }
106
+ }
107
+ handle = host.requestAnimationFrame(tick);
108
+ };
109
+ handle = host.requestAnimationFrame(tick);
110
+ onCleanup(() => host.cancelAnimationFrame(handle));
111
+ },
112
+ { immediate: true },
113
+ );
114
+ tryOnScopeDispose(() => stop.stop());
115
+
116
+ return {
117
+ fps: readonly(fps),
118
+ isSupported: readonly(isSupported),
119
+ isActive: readonly(isActive),
120
+ pause: () => {
121
+ isActive.value = false;
122
+ },
123
+ resume: () => {
124
+ isActive.value = true;
125
+ },
126
+ };
127
+ }
128
+
129
+ function browserFrameHost(): AnimationFrameHost | undefined {
130
+ return typeof window !== "undefined" && typeof window.requestAnimationFrame === "function"
131
+ ? window
132
+ : undefined;
133
+ }