@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.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- 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 };
|
package/dist/event-listener.mjs
CHANGED
|
@@ -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
|
});
|
package/dist/focus.d.mts
ADDED
|
@@ -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 };
|