@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,70 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { resolveElement } from "./element-target.mjs";
3
+ import { readonly, ref, watch } from "vue";
4
+ //#region src/element-hover.ts
5
+ const defaultScheduler = {
6
+ setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
7
+ clearTimeout: (handle) => {
8
+ globalThis.clearTimeout(handle);
9
+ }
10
+ };
11
+ /**
12
+ * Track whether the pointer hovers an element.
13
+ *
14
+ * Uses `pointerenter`/`pointerleave` (which ignore descendants) with optional
15
+ * enter/leave delays; a pending delay is cancelled by the opposite event.
16
+ * Server renders report `false`; listeners and timers are released with the
17
+ * owning reactive scope.
18
+ *
19
+ * @param target Reactive element target.
20
+ * @param options Enter/leave delays and timer scheduler.
21
+ * @default options {}
22
+ * @returns Readonly hover flag.
23
+ */
24
+ function useElementHover(target, options = {}) {
25
+ const { delayEnter = 0, delayLeave = 0, scheduler = defaultScheduler } = options;
26
+ const hovered = ref(false);
27
+ let handle;
28
+ let pending = false;
29
+ const cancel = () => {
30
+ if (!pending) return;
31
+ scheduler.clearTimeout(handle);
32
+ pending = false;
33
+ };
34
+ const set = (next) => {
35
+ cancel();
36
+ const delay = next ? delayEnter : delayLeave;
37
+ if (delay <= 0) {
38
+ hovered.value = next;
39
+ return;
40
+ }
41
+ pending = true;
42
+ handle = scheduler.setTimeout(() => {
43
+ pending = false;
44
+ hovered.value = next;
45
+ }, delay);
46
+ };
47
+ const onEnter = () => set(true);
48
+ const onLeave = () => set(false);
49
+ const stop = watch(() => resolveElement(target), (element, _previous, onCleanup) => {
50
+ if (!element) return;
51
+ element.addEventListener("pointerenter", onEnter, { passive: true });
52
+ element.addEventListener("pointerleave", onLeave, { passive: true });
53
+ onCleanup(() => {
54
+ element.removeEventListener("pointerenter", onEnter);
55
+ element.removeEventListener("pointerleave", onLeave);
56
+ cancel();
57
+ hovered.value = false;
58
+ });
59
+ }, {
60
+ immediate: true,
61
+ flush: "post"
62
+ });
63
+ tryOnScopeDispose(() => {
64
+ stop.stop();
65
+ cancel();
66
+ });
67
+ return readonly(hovered);
68
+ }
69
+ //#endregion
70
+ export { useElementHover };
@@ -0,0 +1,34 @@
1
+ import { ComponentPublicInstance, ShallowRef } from "vue";
2
+
3
+ //#region src/element-ref.d.ts
4
+ /** Function ref accepted by `:ref` on elements and components. */
5
+ type ElementRefSetter = (value: Element | ComponentPublicInstance | null) => void;
6
+ /** State returned by {@link useElementRef}. */
7
+ interface ElementRefControls<TargetElement extends Element> {
8
+ /** Resolved element (component roots are unwrapped); `null` while unmounted. */
9
+ readonly element: Readonly<ShallowRef<TargetElement | null>>;
10
+ /** Bind with `:ref="setRef"` on an element or component. */
11
+ readonly setRef: ElementRefSetter;
12
+ }
13
+ /**
14
+ * Capture a template element through a function ref.
15
+ *
16
+ * An instance-free alternative to "current element" helpers: it never reads
17
+ * `getCurrentInstance()`, so it works in Vapor components, render functions,
18
+ * and plain effect scopes. Inside a component the element is published after
19
+ * mounting (Vapor sets function refs during render), keeping hydration stable. Component refs are unwrapped to their root
20
+ * element, and an optional guard narrows the element type (elements failing
21
+ * it resolve to `null`). The ref is `null` during server rendering.
22
+ *
23
+ * @returns Reactive element plus the function ref to bind.
24
+ */
25
+ declare function useElementRef(): ElementRefControls<Element>;
26
+ /**
27
+ * Capture a template element narrowed by a type guard.
28
+ *
29
+ * @param guard Type guard; elements failing it resolve to `null`.
30
+ * @returns Reactive narrowed element plus the function ref to bind.
31
+ */
32
+ declare function useElementRef<TargetElement extends Element>(guard: (element: Element) => element is TargetElement): ElementRefControls<TargetElement>;
33
+ //#endregion
34
+ export { ElementRefControls, ElementRefSetter, useElementRef };
@@ -0,0 +1,23 @@
1
+ import { resolveElement } from "./element-target.mjs";
2
+ import { hasInjectionContext, onMounted, shallowRef } from "vue";
3
+ //#region src/element-ref.ts
4
+ function useElementRef(guard) {
5
+ const element = shallowRef(null);
6
+ let mounted = !hasInjectionContext();
7
+ let pending = null;
8
+ if (!mounted) onMounted(() => {
9
+ mounted = true;
10
+ element.value = pending;
11
+ });
12
+ const setRef = (value) => {
13
+ const resolved = resolveElement(value);
14
+ pending = resolved && (!guard || guard(resolved)) ? resolved : null;
15
+ if (mounted) element.value = pending;
16
+ };
17
+ return {
18
+ element,
19
+ setRef
20
+ };
21
+ }
22
+ //#endregion
23
+ export { useElementRef };
@@ -0,0 +1,60 @@
1
+ import { ComponentPublicInstance, MaybeRefOrGetter } from "vue";
2
+
3
+ //#region src/element-target.d.ts
4
+ /**
5
+ * A concrete value that can identify a DOM element.
6
+ *
7
+ * Template refs on native elements resolve to the element itself, while refs
8
+ * on components resolve to the component's public instance whose root node
9
+ * is exposed as `$el`. `null` and `undefined` represent a target that is not
10
+ * mounted yet (including every server render).
11
+ */
12
+ type ElementTargetValue<TargetElement extends Element = Element> = TargetElement | ComponentPublicInstance | null | undefined;
13
+ /**
14
+ * Reactive element target accepted by every element-based composable.
15
+ *
16
+ * Accepts a plain value, a ref (such as `useTemplateRef()`), or a getter.
17
+ */
18
+ type MaybeElementTarget<TargetElement extends Element = Element> = MaybeRefOrGetter<ElementTargetValue<TargetElement>>;
19
+ /**
20
+ * Reactive list of element targets for observers that watch several nodes.
21
+ *
22
+ * Each item follows {@link MaybeElementTarget} semantics; unresolved items
23
+ * are skipped.
24
+ */
25
+ type MaybeElementTargets<TargetElement extends Element = Element> = MaybeElementTarget<TargetElement> | MaybeRefOrGetter<readonly ElementTargetValue<TargetElement>[]>;
26
+ /**
27
+ * Whether a value is a DOM element node.
28
+ *
29
+ * Uses the `nodeType` contract instead of `instanceof Element`, so the check
30
+ * reads no browser globals and works across realms (iframes, happy-dom,
31
+ * jsdom).
32
+ *
33
+ * @param value Candidate value.
34
+ * @returns Whether `value` is an element node.
35
+ */
36
+ declare function isElementNode(value: unknown): value is Element;
37
+ /**
38
+ * Resolve a reactive element target to its concrete element.
39
+ *
40
+ * Reads the reactive source once (tracking it when called inside an effect).
41
+ * Component instances resolve to their root element; fragment or text roots
42
+ * resolve to `null`. Never throws and reads no browser globals, so it is safe
43
+ * during server rendering, where it always returns `null`.
44
+ *
45
+ * @param target Reactive element target.
46
+ * @returns The resolved element, or `null` while unresolved.
47
+ */
48
+ declare function resolveElement(target: MaybeElementTarget): Element | null;
49
+ /**
50
+ * Resolve a reactive list (or single) element target to its concrete elements.
51
+ *
52
+ * Unresolved entries are dropped and duplicates are removed while keeping the
53
+ * first-seen order, so observers never register the same node twice.
54
+ *
55
+ * @param targets Reactive element target or target list.
56
+ * @returns The resolved, de-duplicated elements.
57
+ */
58
+ declare function resolveElements(targets: MaybeElementTargets): Element[];
59
+ //#endregion
60
+ export { resolveElement as a, isElementNode as i, MaybeElementTarget as n, resolveElements as o, MaybeElementTargets as r, ElementTargetValue as t };
@@ -0,0 +1,2 @@
1
+ import { a as resolveElement, i as isElementNode, n as MaybeElementTarget, o as resolveElements, r as MaybeElementTargets, t as ElementTargetValue } from "./element-target-Crpxl4D9.mjs";
2
+ export { ElementTargetValue, MaybeElementTarget, MaybeElementTargets, isElementNode, resolveElement, resolveElements };
@@ -0,0 +1,58 @@
1
+ import { toValue } from "vue";
2
+ //#region src/element-target.ts
3
+ /**
4
+ * Whether a value is a DOM element node.
5
+ *
6
+ * Uses the `nodeType` contract instead of `instanceof Element`, so the check
7
+ * reads no browser globals and works across realms (iframes, happy-dom,
8
+ * jsdom).
9
+ *
10
+ * @param value Candidate value.
11
+ * @returns Whether `value` is an element node.
12
+ */
13
+ function isElementNode(value) {
14
+ return typeof value === "object" && value !== null && "nodeType" in value && value.nodeType === 1 && "getBoundingClientRect" in value;
15
+ }
16
+ /**
17
+ * Resolve a reactive element target to its concrete element.
18
+ *
19
+ * Reads the reactive source once (tracking it when called inside an effect).
20
+ * Component instances resolve to their root element; fragment or text roots
21
+ * resolve to `null`. Never throws and reads no browser globals, so it is safe
22
+ * during server rendering, where it always returns `null`.
23
+ *
24
+ * @param target Reactive element target.
25
+ * @returns The resolved element, or `null` while unresolved.
26
+ */
27
+ function resolveElement(target) {
28
+ return elementFromValue(toValue(target));
29
+ }
30
+ function elementFromValue(value) {
31
+ if (isElementNode(value)) return value;
32
+ if (typeof value === "object" && value !== null && "$el" in value) {
33
+ const root = value.$el;
34
+ return isElementNode(root) ? root : null;
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Resolve a reactive list (or single) element target to its concrete elements.
40
+ *
41
+ * Unresolved entries are dropped and duplicates are removed while keeping the
42
+ * first-seen order, so observers never register the same node twice.
43
+ *
44
+ * @param targets Reactive element target or target list.
45
+ * @returns The resolved, de-duplicated elements.
46
+ */
47
+ function resolveElements(targets) {
48
+ const value = toValue(targets);
49
+ const items = Array.isArray(value) ? value : [value];
50
+ const elements = [];
51
+ for (const item of items) {
52
+ const element = elementFromValue(item);
53
+ if (element && !elements.includes(element)) elements.push(element);
54
+ }
55
+ return elements;
56
+ }
57
+ //#endregion
58
+ export { isElementNode, resolveElement, resolveElements };
@@ -1,5 +1,5 @@
1
1
  import { tryOnScopeDispose } from "./scope.mjs";
2
- import { readonly, ref, toValue, watch } from "vue";
2
+ import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
3
3
  //#region src/event-listener.ts
4
4
  function useEventListener(target, event, listener, options = {}) {
5
5
  const { capture = false, once = false, passive = false, signal, immediate = true, flush = "pre" } = options;
@@ -10,6 +10,10 @@ function useEventListener(target, event, listener, options = {}) {
10
10
  ...signal ? { signal } : {}
11
11
  };
12
12
  let disposed = false;
13
+ const mounted = shallowRef(!hasInjectionContext());
14
+ if (!mounted.value) onMounted(() => {
15
+ mounted.value = true;
16
+ });
13
17
  let stopWatch;
14
18
  const stop = () => {
15
19
  stopWatch?.stop();
@@ -18,7 +22,7 @@ function useEventListener(target, event, listener, options = {}) {
18
22
  };
19
23
  const start = () => {
20
24
  if (disposed || stopWatch || signal?.aborted) return false;
21
- stopWatch = watch(() => toValue(target), (next, _previous, onCleanup) => {
25
+ stopWatch = watch(() => mounted.value ? toValue(target) : null, (next, _previous, onCleanup) => {
22
26
  isListening.value = false;
23
27
  if (!next || signal?.aborted) return;
24
28
  const invoke = (nativeEvent) => {
@@ -30,7 +34,7 @@ function useEventListener(target, event, listener, options = {}) {
30
34
  signal?.addEventListener("abort", onAbort, { once: true });
31
35
  isListening.value = true;
32
36
  onCleanup(() => {
33
- next.removeEventListener(event, invoke, capture);
37
+ next.removeEventListener(event, invoke, { capture });
34
38
  signal?.removeEventListener("abort", onAbort);
35
39
  isListening.value = false;
36
40
  });
@@ -0,0 +1,69 @@
1
+ import { n as MaybeElementTarget } from "./element-target-Crpxl4D9.mjs";
2
+ import { Ref, WritableComputedRef } from "vue";
3
+
4
+ //#region src/focus.d.ts
5
+ /** Element that can receive programmatic focus (`HTMLElement`, `SVGElement`, `MathMLElement`). */
6
+ type FocusableElement = Element & HTMLOrSVGElement;
7
+ /** Options for {@link useFocus}. */
8
+ interface UseFocusOptions {
9
+ /**
10
+ * Focus the element as soon as it resolves.
11
+ *
12
+ * @default false
13
+ */
14
+ readonly initialValue?: boolean;
15
+ /**
16
+ * Only report focus when the user agent would show a focus ring
17
+ * (`:focus-visible`).
18
+ *
19
+ * @default false
20
+ */
21
+ readonly focusVisible?: boolean;
22
+ /**
23
+ * Avoid scrolling the element into view when focusing programmatically.
24
+ *
25
+ * @default false
26
+ */
27
+ readonly preventScroll?: boolean;
28
+ }
29
+ /** Reactive focus state returned by {@link useFocus}. */
30
+ interface FocusControls {
31
+ /** Whether the element is focused. Assign `true`/`false` to focus/blur it. */
32
+ readonly focused: WritableComputedRef<boolean>;
33
+ /** Stop tracking. Idempotent. */
34
+ readonly stop: () => void;
35
+ }
36
+ /**
37
+ * Track and control focus of a single element.
38
+ *
39
+ * Listens for `focus`/`blur` on the resolved element and re-syncs when the
40
+ * target changes. Assigning `focused` calls `focus()`/`blur()`. Server renders
41
+ * always report `false`; `initialValue` is applied only after the element
42
+ * resolves on the client, so hydration output is unaffected.
43
+ *
44
+ * @param target Reactive element target.
45
+ * @param options Initial focus, focus-visible filtering, and scroll behavior.
46
+ * @default options {}
47
+ * @returns Writable focus ref and stop control.
48
+ */
49
+ declare function useFocus(target: MaybeElementTarget, options?: UseFocusOptions): FocusControls;
50
+ /** Reactive state returned by {@link useFocusWithin}. */
51
+ interface FocusWithinControls {
52
+ /** Whether the element or any descendant has focus. */
53
+ readonly focused: Readonly<Ref<boolean>>;
54
+ /** Stop tracking. Idempotent. */
55
+ readonly stop: () => void;
56
+ }
57
+ /**
58
+ * Track whether focus is inside an element (the `:focus-within` state).
59
+ *
60
+ * Uses bubbling `focusin`/`focusout` and checks the `relatedTarget` so moving
61
+ * focus between descendants never flickers to `false`. Server renders report
62
+ * `false`.
63
+ *
64
+ * @param target Reactive element target.
65
+ * @returns Readonly focus-within ref and stop control.
66
+ */
67
+ declare function useFocusWithin(target: MaybeElementTarget): FocusWithinControls;
68
+ //#endregion
69
+ export { FocusControls, FocusWithinControls, FocusableElement, UseFocusOptions, useFocus, useFocusWithin };
package/dist/focus.mjs ADDED
@@ -0,0 +1,124 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { resolveElement } from "./element-target.mjs";
3
+ import { computed, readonly, ref, watch } from "vue";
4
+ //#region src/focus.ts
5
+ /**
6
+ * Track and control focus of a single element.
7
+ *
8
+ * Listens for `focus`/`blur` on the resolved element and re-syncs when the
9
+ * target changes. Assigning `focused` calls `focus()`/`blur()`. Server renders
10
+ * always report `false`; `initialValue` is applied only after the element
11
+ * resolves on the client, so hydration output is unaffected.
12
+ *
13
+ * @param target Reactive element target.
14
+ * @param options Initial focus, focus-visible filtering, and scroll behavior.
15
+ * @default options {}
16
+ * @returns Writable focus ref and stop control.
17
+ */
18
+ function useFocus(target, options = {}) {
19
+ const inner = ref(false);
20
+ const element = computed(() => {
21
+ const resolved = resolveElement(target);
22
+ return resolved && isFocusable(resolved) ? resolved : null;
23
+ });
24
+ const read = (el) => {
25
+ const active = el.ownerDocument.activeElement === el;
26
+ if (!active || !options.focusVisible) return active;
27
+ return safeMatches(el, ":focus-visible");
28
+ };
29
+ const stopWatch = watch(element, (el, _previous, onCleanup) => {
30
+ if (!el) {
31
+ inner.value = false;
32
+ return;
33
+ }
34
+ const onFocus = () => {
35
+ inner.value = read(el);
36
+ };
37
+ const onBlur = () => {
38
+ inner.value = false;
39
+ };
40
+ el.addEventListener("focus", onFocus);
41
+ el.addEventListener("blur", onBlur);
42
+ inner.value = read(el);
43
+ if (options.initialValue && !inner.value) el.focus({ preventScroll: options.preventScroll ?? false });
44
+ onCleanup(() => {
45
+ el.removeEventListener("focus", onFocus);
46
+ el.removeEventListener("blur", onBlur);
47
+ });
48
+ }, {
49
+ immediate: true,
50
+ flush: "post"
51
+ });
52
+ const stop = () => stopWatch.stop();
53
+ tryOnScopeDispose(stop);
54
+ return {
55
+ focused: computed({
56
+ get: () => inner.value,
57
+ set: (next) => {
58
+ const el = element.value;
59
+ if (!el) return;
60
+ if (next) el.focus({ preventScroll: options.preventScroll ?? false });
61
+ else el.blur();
62
+ }
63
+ }),
64
+ stop
65
+ };
66
+ }
67
+ /**
68
+ * Track whether focus is inside an element (the `:focus-within` state).
69
+ *
70
+ * Uses bubbling `focusin`/`focusout` and checks the `relatedTarget` so moving
71
+ * focus between descendants never flickers to `false`. Server renders report
72
+ * `false`.
73
+ *
74
+ * @param target Reactive element target.
75
+ * @returns Readonly focus-within ref and stop control.
76
+ */
77
+ function useFocusWithin(target) {
78
+ const focused = ref(false);
79
+ const stopWatch = watch(() => resolveElement(target), (el, _previous, onCleanup) => {
80
+ if (!el) {
81
+ focused.value = false;
82
+ return;
83
+ }
84
+ const onFocusIn = () => {
85
+ focused.value = true;
86
+ };
87
+ const onFocusOut = (event) => {
88
+ const next = "relatedTarget" in event ? event.relatedTarget : null;
89
+ focused.value = isNode(next) && el.contains(next);
90
+ };
91
+ el.addEventListener("focusin", onFocusIn);
92
+ el.addEventListener("focusout", onFocusOut);
93
+ const active = el.ownerDocument.activeElement;
94
+ focused.value = active !== null && el.contains(active);
95
+ onCleanup(() => {
96
+ el.removeEventListener("focusin", onFocusIn);
97
+ el.removeEventListener("focusout", onFocusOut);
98
+ });
99
+ }, {
100
+ immediate: true,
101
+ flush: "post"
102
+ });
103
+ const stop = () => stopWatch.stop();
104
+ tryOnScopeDispose(stop);
105
+ return {
106
+ focused: readonly(focused),
107
+ stop
108
+ };
109
+ }
110
+ function isFocusable(element) {
111
+ return "focus" in element && typeof element.focus === "function" && "blur" in element && typeof element.blur === "function";
112
+ }
113
+ function isNode(value) {
114
+ return typeof value === "object" && value !== null && "nodeType" in value;
115
+ }
116
+ function safeMatches(element, selector) {
117
+ try {
118
+ return element.matches(selector);
119
+ } catch {
120
+ return true;
121
+ }
122
+ }
123
+ //#endregion
124
+ export { useFocus, useFocusWithin };
package/dist/fps.d.mts ADDED
@@ -0,0 +1,59 @@
1
+ import { MaybeRefOrGetter, Ref } from "vue";
2
+
3
+ //#region src/fps.d.ts
4
+ /** Frame scheduling capability used by {@link useFps}. */
5
+ interface AnimationFrameHost {
6
+ /** Schedule a callback before the next repaint. */
7
+ readonly requestAnimationFrame: (callback: FrameRequestCallback) => number;
8
+ /** Cancel a scheduled frame. */
9
+ readonly cancelAnimationFrame: (handle: number) => void;
10
+ }
11
+ /** Options for {@link useFps}. */
12
+ interface UseFpsOptions {
13
+ /**
14
+ * Number of frames averaged per update.
15
+ *
16
+ * @default 10
17
+ */
18
+ readonly every?: number;
19
+ /**
20
+ * Start measuring during composable creation.
21
+ *
22
+ * @default true
23
+ */
24
+ readonly immediate?: boolean;
25
+ /**
26
+ * Reactive frame-scheduling capability for alternate runtimes and tests.
27
+ *
28
+ * @default globalThis.window when available
29
+ */
30
+ readonly host?: MaybeRefOrGetter<AnimationFrameHost | null | undefined>;
31
+ }
32
+ /** Reactive frame-rate state returned by {@link useFps}. */
33
+ interface FpsControls {
34
+ /** Frames per second averaged over the last `every` frames; `0` until measured. */
35
+ readonly fps: Readonly<Ref<number>>;
36
+ /** Whether a frame-scheduling capability is attached. `false` during server rendering. */
37
+ readonly isSupported: Readonly<Ref<boolean>>;
38
+ /** Whether the frame loop is running. */
39
+ readonly isActive: Readonly<Ref<boolean>>;
40
+ /** Stop the frame loop. */
41
+ readonly pause: () => void;
42
+ /** Restart the frame loop. */
43
+ readonly resume: () => void;
44
+ }
45
+ /**
46
+ * Measure the rendering frame rate with `requestAnimationFrame`.
47
+ *
48
+ * Uses the frame timestamps passed to the callback (no extra clock) and
49
+ * publishes a rounded average every `every` frames. No frames are requested
50
+ * during server rendering (`fps` stays `0`), and the pending frame is
51
+ * cancelled when paused or when the owning reactive scope stops.
52
+ *
53
+ * @param options Averaging window, start mode, and frame capability.
54
+ * @default options {}
55
+ * @returns Reactive frame rate plus pause/resume controls.
56
+ */
57
+ declare function useFps(options?: UseFpsOptions): FpsControls;
58
+ //#endregion
59
+ export { AnimationFrameHost, FpsControls, UseFpsOptions, useFps };
package/dist/fps.mjs ADDED
@@ -0,0 +1,64 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
3
+ //#region src/fps.ts
4
+ /**
5
+ * Measure the rendering frame rate with `requestAnimationFrame`.
6
+ *
7
+ * Uses the frame timestamps passed to the callback (no extra clock) and
8
+ * publishes a rounded average every `every` frames. No frames are requested
9
+ * during server rendering (`fps` stays `0`), and the pending frame is
10
+ * cancelled when paused or when the owning reactive scope stops.
11
+ *
12
+ * @param options Averaging window, start mode, and frame capability.
13
+ * @default options {}
14
+ * @returns Reactive frame rate plus pause/resume controls.
15
+ */
16
+ function useFps(options = {}) {
17
+ const every = Math.max(1, Math.floor(options.every ?? 10));
18
+ const fps = ref(0);
19
+ const isSupported = ref(false);
20
+ const isActive = ref(options.immediate ?? true);
21
+ const mounted = shallowRef(!hasInjectionContext());
22
+ if (!mounted.value) onMounted(() => {
23
+ mounted.value = true;
24
+ });
25
+ const stop = watch([() => !mounted.value ? void 0 : options.host === void 0 ? browserFrameHost() : toValue(options.host), isActive], ([host, active], _previous, onCleanup) => {
26
+ isSupported.value = Boolean(host);
27
+ if (!host || !active) return;
28
+ let handle = 0;
29
+ let first;
30
+ let frames = 0;
31
+ const tick = (time) => {
32
+ if (first === void 0) first = time;
33
+ else {
34
+ frames += 1;
35
+ if (frames >= every) {
36
+ const elapsed = time - first;
37
+ if (elapsed > 0) fps.value = Math.round(1e3 * frames / elapsed);
38
+ first = time;
39
+ frames = 0;
40
+ }
41
+ }
42
+ handle = host.requestAnimationFrame(tick);
43
+ };
44
+ handle = host.requestAnimationFrame(tick);
45
+ onCleanup(() => host.cancelAnimationFrame(handle));
46
+ }, { immediate: true });
47
+ tryOnScopeDispose(() => stop.stop());
48
+ return {
49
+ fps: readonly(fps),
50
+ isSupported: readonly(isSupported),
51
+ isActive: readonly(isActive),
52
+ pause: () => {
53
+ isActive.value = false;
54
+ },
55
+ resume: () => {
56
+ isActive.value = true;
57
+ }
58
+ };
59
+ }
60
+ function browserFrameHost() {
61
+ return typeof window !== "undefined" && typeof window.requestAnimationFrame === "function" ? window : void 0;
62
+ }
63
+ //#endregion
64
+ export { useFps };