@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,276 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
import type { IntervalScheduler, PausableControls } from "./use-interval.ts";
|
|
5
|
+
import { useTimestamp } from "./use-now.ts";
|
|
6
|
+
|
|
7
|
+
/** Calendar units {@link formatTimeAgo} can express a distance in. */
|
|
8
|
+
export type TimeAgoUnit = "second" | "minute" | "hour" | "day" | "week" | "month" | "year";
|
|
9
|
+
|
|
10
|
+
/** Date input accepted by the time formatting helpers. */
|
|
11
|
+
export type TimeAgoInput = Date | number | string;
|
|
12
|
+
|
|
13
|
+
/** Options for {@link formatTimeAgo}. */
|
|
14
|
+
export interface FormatTimeAgoOptions {
|
|
15
|
+
/**
|
|
16
|
+
* BCP 47 locale(s) for `Intl.RelativeTimeFormat`. Defaults to a fixed
|
|
17
|
+
* locale (not the host default) so server and client output agree.
|
|
18
|
+
*
|
|
19
|
+
* @default "en"
|
|
20
|
+
*/
|
|
21
|
+
readonly locale?: string | readonly string[];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* `"auto"` allows phrases such as "yesterday" and "now"; `"always"` keeps
|
|
25
|
+
* numeric output such as "1 day ago".
|
|
26
|
+
*
|
|
27
|
+
* @default "auto"
|
|
28
|
+
*/
|
|
29
|
+
readonly numeric?: "always" | "auto";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Length of the unit wording.
|
|
33
|
+
*
|
|
34
|
+
* @default "long"
|
|
35
|
+
*/
|
|
36
|
+
readonly style?: "long" | "short" | "narrow";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Units allowed in the output, in any order. The largest allowed unit
|
|
40
|
+
* that fits the distance wins; smaller distances use the smallest unit.
|
|
41
|
+
*
|
|
42
|
+
* @default all units from second to year
|
|
43
|
+
*/
|
|
44
|
+
readonly units?: readonly TimeAgoUnit[];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* How a fractional unit count becomes an integer.
|
|
48
|
+
*
|
|
49
|
+
* @default "round"
|
|
50
|
+
*/
|
|
51
|
+
readonly rounding?: "round" | "floor" | "ceil";
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Distances below this many milliseconds are reported as zero of the
|
|
55
|
+
* smallest unit ("now" with `numeric: "auto"`).
|
|
56
|
+
*
|
|
57
|
+
* @default 0
|
|
58
|
+
*/
|
|
59
|
+
readonly justNowMs?: number;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Distances of at least this many milliseconds are delegated to
|
|
63
|
+
* {@link FormatTimeAgoOptions.fullDateFormatter}.
|
|
64
|
+
*
|
|
65
|
+
* @default Number.POSITIVE_INFINITY
|
|
66
|
+
*/
|
|
67
|
+
readonly maxMs?: number;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Formats dates beyond {@link FormatTimeAgoOptions.maxMs}.
|
|
71
|
+
*
|
|
72
|
+
* @default medium date style in UTC for the configured locale
|
|
73
|
+
*/
|
|
74
|
+
readonly fullDateFormatter?: (date: Date) => string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Options for {@link useTimeAgo}. */
|
|
78
|
+
export interface UseTimeAgoOptions<Controls extends boolean = false> extends Omit<
|
|
79
|
+
FormatTimeAgoOptions,
|
|
80
|
+
"locale"
|
|
81
|
+
> {
|
|
82
|
+
/**
|
|
83
|
+
* Reactive BCP 47 locale(s). Pair with `useLocale()` to follow the user.
|
|
84
|
+
*
|
|
85
|
+
* @default "en"
|
|
86
|
+
*/
|
|
87
|
+
readonly locale?: MaybeRefOrGetter<string | readonly string[]>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* How often the relative phrase is recomputed, in milliseconds.
|
|
91
|
+
*
|
|
92
|
+
* @default 30000
|
|
93
|
+
*/
|
|
94
|
+
readonly updateIntervalMs?: MaybeRefOrGetter<number>;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Clock source returning Unix epoch milliseconds.
|
|
98
|
+
*
|
|
99
|
+
* @default Date.now
|
|
100
|
+
*/
|
|
101
|
+
readonly now?: () => number;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Hydration-stable "now" used for the first render on server and client.
|
|
105
|
+
*
|
|
106
|
+
* @default undefined (read the clock immediately)
|
|
107
|
+
*/
|
|
108
|
+
readonly initialNow?: number;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Starts host timers when no browser `window` is available.
|
|
112
|
+
*
|
|
113
|
+
* @default false
|
|
114
|
+
*/
|
|
115
|
+
readonly runOnServer?: boolean;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Repeating timer host.
|
|
119
|
+
*
|
|
120
|
+
* @default globalThis timer functions
|
|
121
|
+
*/
|
|
122
|
+
readonly scheduler?: IntervalScheduler;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Return the full control object instead of the bare phrase ref.
|
|
126
|
+
*
|
|
127
|
+
* @default false
|
|
128
|
+
*/
|
|
129
|
+
readonly controls?: Controls;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Phrase and controls returned by `useTimeAgo(time, { controls: true })`. */
|
|
133
|
+
export interface TimeAgoControls extends PausableControls {
|
|
134
|
+
/** Localized relative phrase such as "3 minutes ago". */
|
|
135
|
+
readonly timeAgo: ComputedRef<string>;
|
|
136
|
+
|
|
137
|
+
/** The reference "now" in Unix epoch milliseconds. */
|
|
138
|
+
readonly now: Readonly<ShallowRef<number>>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const unitMs: Readonly<Record<TimeAgoUnit, number>> = {
|
|
142
|
+
second: 1_000,
|
|
143
|
+
minute: 60_000,
|
|
144
|
+
hour: 3_600_000,
|
|
145
|
+
day: 86_400_000,
|
|
146
|
+
week: 604_800_000,
|
|
147
|
+
month: 2_592_000_000,
|
|
148
|
+
year: 31_536_000_000,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const allUnits: readonly TimeAgoUnit[] = [
|
|
152
|
+
"second",
|
|
153
|
+
"minute",
|
|
154
|
+
"hour",
|
|
155
|
+
"day",
|
|
156
|
+
"week",
|
|
157
|
+
"month",
|
|
158
|
+
"year",
|
|
159
|
+
];
|
|
160
|
+
|
|
161
|
+
function toEpochMs(input: TimeAgoInput): number {
|
|
162
|
+
const value = input instanceof Date ? input.getTime() : new Date(input).getTime();
|
|
163
|
+
if (Number.isNaN(value)) {
|
|
164
|
+
throw new RangeError(
|
|
165
|
+
`[VIZE_COMPOSE_TIME_AGO_INVALID_DATE] expected a valid date; received ${String(input)}`,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Format the distance between two instants as a localized relative phrase.
|
|
173
|
+
*
|
|
174
|
+
* Pure and deterministic: the output depends only on the arguments (the
|
|
175
|
+
* locale defaults to `"en"`, never the host default), which makes it safe
|
|
176
|
+
* for server rendering and hydration.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* formatTimeAgo(Date.UTC(2026, 0, 1), Date.UTC(2026, 0, 2)); // "yesterday"
|
|
181
|
+
* formatTimeAgo(0, 90_000, { numeric: "always" }); // "2 minutes ago"
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @param time Instant being described.
|
|
185
|
+
* @param now Reference instant.
|
|
186
|
+
* @param options Locale, wording, unit, and threshold policy.
|
|
187
|
+
* @default options {}
|
|
188
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_TIME_AGO_INVALID_DATE` when
|
|
189
|
+
* either input is not a valid date, and `RangeError` from `Intl` for invalid
|
|
190
|
+
* locales.
|
|
191
|
+
* @returns The localized phrase.
|
|
192
|
+
*/
|
|
193
|
+
export function formatTimeAgo(
|
|
194
|
+
time: TimeAgoInput,
|
|
195
|
+
now: TimeAgoInput,
|
|
196
|
+
options: FormatTimeAgoOptions = {},
|
|
197
|
+
): string {
|
|
198
|
+
const target = toEpochMs(time);
|
|
199
|
+
const diff = target - toEpochMs(now);
|
|
200
|
+
const distance = Math.abs(diff);
|
|
201
|
+
const locales =
|
|
202
|
+
typeof options.locale === "string" ? options.locale : [...(options.locale ?? ["en"])];
|
|
203
|
+
|
|
204
|
+
if (distance >= (options.maxMs ?? Number.POSITIVE_INFINITY)) {
|
|
205
|
+
const date = new Date(target);
|
|
206
|
+
return options.fullDateFormatter === undefined
|
|
207
|
+
? new Intl.DateTimeFormat(locales, { dateStyle: "medium", timeZone: "UTC" }).format(date)
|
|
208
|
+
: options.fullDateFormatter(date);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const allowed = allUnits.filter((unit) => (options.units ?? allUnits).includes(unit));
|
|
212
|
+
const smallest = allowed[0] ?? "second";
|
|
213
|
+
let unit = smallest;
|
|
214
|
+
for (const candidate of allowed) if (distance >= unitMs[candidate]) unit = candidate;
|
|
215
|
+
|
|
216
|
+
// Zero distance counts as past (`-0`), so "0 seconds ago" rather than "in 0 seconds".
|
|
217
|
+
const round = Math[options.rounding ?? "round"];
|
|
218
|
+
const magnitude = distance < (options.justNowMs ?? 0) ? 0 : round(distance / unitMs[unit]);
|
|
219
|
+
const formatter = new Intl.RelativeTimeFormat(locales, {
|
|
220
|
+
numeric: options.numeric ?? "auto",
|
|
221
|
+
style: options.style ?? "long",
|
|
222
|
+
});
|
|
223
|
+
return formatter.format(diff <= 0 ? -magnitude : magnitude, magnitude === 0 ? smallest : unit);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Reactive localized "time ago" phrase that refreshes on an interval.
|
|
228
|
+
*
|
|
229
|
+
* Combines {@link formatTimeAgo} with a pausable clock. For SSR, inject
|
|
230
|
+
* `initialNow` (the server render time) and a fixed `locale`: both sides
|
|
231
|
+
* then produce the same phrase and the client clock takes over on its first
|
|
232
|
+
* tick. No timer runs on the server; the timer stops with the owning scope.
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* const phrase = useTimeAgo(() => post.value.createdAt, { locale: useLocale().locale });
|
|
237
|
+
* ```
|
|
238
|
+
*
|
|
239
|
+
* @param time Reactive instant being described.
|
|
240
|
+
* @param options Formatting, cadence, clock, and SSR policy.
|
|
241
|
+
* @default options {}
|
|
242
|
+
* @throws `RangeError` on read for invalid dates or locales, and for invalid
|
|
243
|
+
* update intervals at creation.
|
|
244
|
+
* @returns The phrase ref, or the full controls when `controls` is `true`.
|
|
245
|
+
*/
|
|
246
|
+
export function useTimeAgo(
|
|
247
|
+
time: MaybeRefOrGetter<TimeAgoInput>,
|
|
248
|
+
options?: UseTimeAgoOptions<false>,
|
|
249
|
+
): ComputedRef<string>;
|
|
250
|
+
export function useTimeAgo(
|
|
251
|
+
time: MaybeRefOrGetter<TimeAgoInput>,
|
|
252
|
+
options: UseTimeAgoOptions<true>,
|
|
253
|
+
): TimeAgoControls;
|
|
254
|
+
export function useTimeAgo(
|
|
255
|
+
time: MaybeRefOrGetter<TimeAgoInput>,
|
|
256
|
+
options: UseTimeAgoOptions<boolean> = {},
|
|
257
|
+
): ComputedRef<string> | TimeAgoControls {
|
|
258
|
+
const { timestamp, pause, resume, isActive } = useTimestamp({
|
|
259
|
+
interval: options.updateIntervalMs ?? 30_000,
|
|
260
|
+
controls: true,
|
|
261
|
+
runOnServer: options.runOnServer ?? false,
|
|
262
|
+
...(options.now === undefined ? {} : { now: options.now }),
|
|
263
|
+
...(options.initialNow === undefined ? {} : { initial: options.initialNow }),
|
|
264
|
+
...(options.scheduler === undefined ? {} : { scheduler: options.scheduler }),
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
const timeAgo = computed(() =>
|
|
268
|
+
formatTimeAgo(toValue(time), timestamp.value, {
|
|
269
|
+
...options,
|
|
270
|
+
locale: toValue(options.locale) ?? "en",
|
|
271
|
+
}),
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
if (options.controls !== true) return timeAgo;
|
|
275
|
+
return { timeAgo, now: timestamp, pause, resume, isActive };
|
|
276
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { computed, shallowRef, toValue } from "vue";
|
|
2
|
+
import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
5
|
+
import type { TimeoutScheduler } from "./timeout-scheduler.ts";
|
|
6
|
+
|
|
7
|
+
/** Options for {@link useTimeoutFn}. */
|
|
8
|
+
export interface UseTimeoutFnOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Start the timer as soon as the composable is created. Only available
|
|
11
|
+
* for callbacks without arguments; pass `false` to schedule a callback
|
|
12
|
+
* that takes arguments through {@link TimeoutFnControls.start}.
|
|
13
|
+
*
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
readonly immediate?: boolean;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Starts host timers when no browser `window` is available.
|
|
20
|
+
*
|
|
21
|
+
* Keep this disabled during server rendering: `isPending` then reports the
|
|
22
|
+
* requested state but no timer is created and the callback never runs.
|
|
23
|
+
*
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
readonly runOnServer?: boolean;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Owns the single-shot timer.
|
|
30
|
+
*
|
|
31
|
+
* @default globalThis timer functions
|
|
32
|
+
*/
|
|
33
|
+
readonly scheduler?: TimeoutScheduler;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Controls returned by {@link useTimeoutFn}. */
|
|
37
|
+
export interface TimeoutFnControls<Args extends readonly unknown[]> {
|
|
38
|
+
/** Whether a call is scheduled and has not fired or been stopped yet. */
|
|
39
|
+
readonly isPending: Readonly<ShallowRef<boolean>>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* (Re)start the timer. A pending call is replaced, and the callback later
|
|
43
|
+
* receives exactly these arguments.
|
|
44
|
+
*/
|
|
45
|
+
readonly start: (...args: Args) => void;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Cancel the pending call.
|
|
49
|
+
*
|
|
50
|
+
* @returns Whether a pending call was cancelled.
|
|
51
|
+
*/
|
|
52
|
+
readonly stop: () => boolean;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Options for {@link useTimeout}. */
|
|
56
|
+
export interface UseTimeoutOptions<Controls extends boolean = false> extends UseTimeoutFnOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Return the full control object instead of the bare readiness ref.
|
|
59
|
+
*
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
62
|
+
readonly controls?: Controls;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Invoked when the timeout elapses.
|
|
66
|
+
*
|
|
67
|
+
* @default undefined
|
|
68
|
+
*/
|
|
69
|
+
readonly callback?: () => void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Readiness and controls returned by `useTimeout(ms, { controls: true })`. */
|
|
73
|
+
export interface TimeoutControls extends TimeoutFnControls<[]> {
|
|
74
|
+
/** `true` once the timer elapsed or was stopped, `false` while pending. */
|
|
75
|
+
readonly ready: ComputedRef<boolean>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const defaultScheduler: TimeoutScheduler = {
|
|
79
|
+
setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
|
|
80
|
+
clearTimeout: (handle) => {
|
|
81
|
+
globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>);
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
function resolveDelayMs(value: number): number {
|
|
86
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
87
|
+
throw new RangeError(
|
|
88
|
+
`[VIZE_COMPOSE_TIMEOUT_INVALID_DELAY] delayMs must be finite and at least zero; received ${String(value)}`,
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return Math.trunc(value);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Call a function once after a delay, with restart and cancel controls.
|
|
96
|
+
*
|
|
97
|
+
* The typing is arity-aware: a zero-argument callback may start
|
|
98
|
+
* immediately, while a callback with parameters requires
|
|
99
|
+
* `{ immediate: false }` so it can only ever run with arguments supplied to
|
|
100
|
+
* `start(...)`. `delayMs` is reactive and read on every `start`.
|
|
101
|
+
*
|
|
102
|
+
* Server rendering is hydration-stable: without a browser `window` (and with
|
|
103
|
+
* {@link UseTimeoutFnOptions.runOnServer} disabled) `isPending` reports the
|
|
104
|
+
* requested state but no timer is created. A pending timer is cleared when
|
|
105
|
+
* the owning reactive scope stops.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const { start, stop } = useTimeoutFn((id: string) => save(id), 500, { immediate: false });
|
|
110
|
+
* start("draft-1");
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* @param callback Invoked once the delay elapses.
|
|
114
|
+
* @param delayMs Reactive delay in milliseconds; finite and at least zero.
|
|
115
|
+
* @param options Start, server, and scheduler policy.
|
|
116
|
+
* @default options {}
|
|
117
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_TIMEOUT_INVALID_DELAY` for invalid
|
|
118
|
+
* delays, synchronously at creation and on every `start`.
|
|
119
|
+
* @returns Pending flag and start/stop controls.
|
|
120
|
+
*/
|
|
121
|
+
export function useTimeoutFn(
|
|
122
|
+
callback: () => void,
|
|
123
|
+
delayMs: MaybeRefOrGetter<number>,
|
|
124
|
+
options?: UseTimeoutFnOptions,
|
|
125
|
+
): TimeoutFnControls<[]>;
|
|
126
|
+
export function useTimeoutFn<Args extends readonly unknown[]>(
|
|
127
|
+
callback: (...args: Args) => void,
|
|
128
|
+
delayMs: MaybeRefOrGetter<number>,
|
|
129
|
+
options: UseTimeoutFnOptions & { readonly immediate: false },
|
|
130
|
+
): TimeoutFnControls<Args>;
|
|
131
|
+
export function useTimeoutFn(
|
|
132
|
+
callback: (...args: readonly unknown[]) => void,
|
|
133
|
+
delayMs: MaybeRefOrGetter<number>,
|
|
134
|
+
options: UseTimeoutFnOptions = {},
|
|
135
|
+
): TimeoutFnControls<readonly unknown[]> {
|
|
136
|
+
const scheduler = options.scheduler ?? defaultScheduler;
|
|
137
|
+
const isPending = shallowRef(false);
|
|
138
|
+
let handle: unknown;
|
|
139
|
+
let scheduled = false;
|
|
140
|
+
|
|
141
|
+
resolveDelayMs(toValue(delayMs));
|
|
142
|
+
|
|
143
|
+
const clear = (): void => {
|
|
144
|
+
if (!scheduled) return;
|
|
145
|
+
scheduled = false;
|
|
146
|
+
scheduler.clearTimeout(handle);
|
|
147
|
+
handle = undefined;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const stop = (): boolean => {
|
|
151
|
+
const wasPending = isPending.value;
|
|
152
|
+
isPending.value = false;
|
|
153
|
+
clear();
|
|
154
|
+
return wasPending;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const start = (...args: readonly unknown[]): void => {
|
|
158
|
+
const delay = resolveDelayMs(toValue(delayMs));
|
|
159
|
+
clear();
|
|
160
|
+
isPending.value = true;
|
|
161
|
+
if (typeof window === "undefined" && !(options.runOnServer ?? false)) return;
|
|
162
|
+
scheduled = true;
|
|
163
|
+
handle = scheduler.setTimeout(() => {
|
|
164
|
+
scheduled = false;
|
|
165
|
+
handle = undefined;
|
|
166
|
+
isPending.value = false;
|
|
167
|
+
callback(...args);
|
|
168
|
+
}, delay);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// Only the zero-argument overload may start immediately.
|
|
172
|
+
if (options.immediate ?? true) start();
|
|
173
|
+
|
|
174
|
+
tryOnScopeDispose(() => {
|
|
175
|
+
stop();
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
return { isPending, start, stop };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Reactive "has the delay elapsed yet?" flag.
|
|
183
|
+
*
|
|
184
|
+
* A wrapper over {@link useTimeoutFn}. Pass `{ controls: true }` to receive
|
|
185
|
+
* start/stop alongside the flag; the return type follows the literal flag.
|
|
186
|
+
* Stopping a pending timer marks it ready.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* const ready = useTimeout(300); // ComputedRef<boolean>
|
|
191
|
+
* const { ready: done, start } = useTimeout(300, { controls: true, immediate: false });
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @param delayMs Reactive delay in milliseconds.
|
|
195
|
+
* @param options Timeout options plus the `controls` flag.
|
|
196
|
+
* @default delayMs 1000
|
|
197
|
+
* @default options {}
|
|
198
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_TIMEOUT_INVALID_DELAY` for invalid
|
|
199
|
+
* delays (see {@link useTimeoutFn}).
|
|
200
|
+
* @returns The readiness ref, or the full controls when `controls` is `true`.
|
|
201
|
+
*/
|
|
202
|
+
export function useTimeout(
|
|
203
|
+
delayMs?: MaybeRefOrGetter<number>,
|
|
204
|
+
options?: UseTimeoutOptions<false>,
|
|
205
|
+
): ComputedRef<boolean>;
|
|
206
|
+
export function useTimeout(
|
|
207
|
+
delayMs: MaybeRefOrGetter<number>,
|
|
208
|
+
options: UseTimeoutOptions<true>,
|
|
209
|
+
): TimeoutControls;
|
|
210
|
+
export function useTimeout(
|
|
211
|
+
delayMs: MaybeRefOrGetter<number> = 1_000,
|
|
212
|
+
options: UseTimeoutOptions<boolean> = {},
|
|
213
|
+
): ComputedRef<boolean> | TimeoutControls {
|
|
214
|
+
const controls = useTimeoutFn(() => options.callback?.(), delayMs, options);
|
|
215
|
+
const ready = computed(() => !controls.isPending.value);
|
|
216
|
+
if (options.controls !== true) return ready;
|
|
217
|
+
return { ...controls, ready };
|
|
218
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { shallowRef } from "vue";
|
|
2
|
+
import type { Ref } from "vue";
|
|
3
|
+
|
|
4
|
+
/** Reactive controls returned by {@link useToggle}. */
|
|
5
|
+
export interface ToggleControls {
|
|
6
|
+
/**
|
|
7
|
+
* Owned boolean state.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately writable: unlike the derived views elsewhere in this
|
|
10
|
+
* package, the toggle owns its state, so assigning the ref directly (for
|
|
11
|
+
* example through `v-model`) is equivalent to calling
|
|
12
|
+
* {@link ToggleControls.toggle} with a forced value.
|
|
13
|
+
*/
|
|
14
|
+
readonly state: Ref<boolean>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Invert the state, or force it to `force` when the argument is given.
|
|
18
|
+
* Passing an explicit `undefined` behaves like passing no argument.
|
|
19
|
+
*
|
|
20
|
+
* @param force Value assigned instead of inverting.
|
|
21
|
+
* @returns The state after the change.
|
|
22
|
+
*/
|
|
23
|
+
readonly toggle: (force?: boolean) => boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Create owned boolean state with an inverting control.
|
|
28
|
+
*
|
|
29
|
+
* Purely synchronous state: safe during server rendering (no browser
|
|
30
|
+
* globals, no timers) and nothing to dispose, so it works inside and
|
|
31
|
+
* outside reactive scopes alike.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const { state: open, toggle } = useToggle();
|
|
36
|
+
* toggle(); // true
|
|
37
|
+
* toggle(false); // false
|
|
38
|
+
* open.value; // false
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param initial State before the first toggle.
|
|
42
|
+
* @default initial false
|
|
43
|
+
* @returns The writable state and its toggle control.
|
|
44
|
+
*/
|
|
45
|
+
export function useToggle(initial = false): ToggleControls {
|
|
46
|
+
const state = shallowRef(initial);
|
|
47
|
+
|
|
48
|
+
const toggle = (force?: boolean): boolean => {
|
|
49
|
+
state.value = force ?? !state.value;
|
|
50
|
+
return state.value;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return { state, toggle };
|
|
54
|
+
}
|