@vizejs/composable 0.426.2 → 0.427.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,206 @@
|
|
|
1
|
+
import { toValue, watch } from "vue";
|
|
2
|
+
import type { MaybeRefOrGetter, WatchCallback, WatchHandle, WatchOptions } from "vue";
|
|
3
|
+
|
|
4
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
5
|
+
import type { TimeoutScheduler } from "./timeout-scheduler.ts";
|
|
6
|
+
import type { WatchCleanupRegistrar, WatchHelperCallback, WatchSources } from "./watch-source.ts";
|
|
7
|
+
|
|
8
|
+
/** Options for {@link watchDebounced}. */
|
|
9
|
+
export interface WatchDebouncedOptions<
|
|
10
|
+
Immediate extends boolean = false,
|
|
11
|
+
> extends WatchOptions<Immediate> {
|
|
12
|
+
/**
|
|
13
|
+
* Quiet period in milliseconds after the last change before the callback
|
|
14
|
+
* runs. Reactive; read whenever a call is scheduled.
|
|
15
|
+
*
|
|
16
|
+
* @default 0
|
|
17
|
+
*/
|
|
18
|
+
readonly debounce?: MaybeRefOrGetter<number>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Longest time a call may be postponed by continuous changes. When it
|
|
22
|
+
* elapses, the newest pending call runs even if changes keep coming.
|
|
23
|
+
*
|
|
24
|
+
* @default undefined (no ceiling)
|
|
25
|
+
*/
|
|
26
|
+
readonly maxWait?: MaybeRefOrGetter<number | undefined>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Applies the timing policy when no browser `window` is available. When
|
|
30
|
+
* disabled, the callback runs synchronously on the server.
|
|
31
|
+
*
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
readonly runOnServer?: boolean;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Owns the single-shot timers.
|
|
38
|
+
*
|
|
39
|
+
* @default globalThis timer functions
|
|
40
|
+
*/
|
|
41
|
+
readonly scheduler?: TimeoutScheduler;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Stop handle plus timing controls returned by the debounced/throttled watchers. */
|
|
45
|
+
export interface TimedWatchHandle {
|
|
46
|
+
/** Stop watching and discard any pending call. */
|
|
47
|
+
readonly stop: () => void;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Run the pending call now instead of waiting.
|
|
51
|
+
*
|
|
52
|
+
* @returns Whether a pending call was run.
|
|
53
|
+
*/
|
|
54
|
+
readonly flush: () => boolean;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Discard the pending call; later changes schedule again.
|
|
58
|
+
*
|
|
59
|
+
* @returns Whether a pending call was discarded.
|
|
60
|
+
*/
|
|
61
|
+
readonly cancel: () => boolean;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const defaultScheduler: TimeoutScheduler = {
|
|
65
|
+
setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
|
|
66
|
+
clearTimeout: (handle) => {
|
|
67
|
+
globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>);
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
function resolveMs(value: number, name: string): number {
|
|
72
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
73
|
+
throw new RangeError(
|
|
74
|
+
`[VIZE_COMPOSE_WATCH_DEBOUNCED_INVALID_DELAY] ${name} must be finite and at least zero; received ${String(value)}`,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
return Math.trunc(value);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Watch sources like Vue's `watch`, but run the callback only after the
|
|
82
|
+
* sources stayed quiet for `debounce` milliseconds.
|
|
83
|
+
*
|
|
84
|
+
* The callback receives the newest value together with the old value from
|
|
85
|
+
* before the first change of the burst, so it always describes the whole
|
|
86
|
+
* settled transition. `onCleanup` registered by a callback runs before the
|
|
87
|
+
* next call, as with `watch`. `maxWait` bounds starvation under continuous
|
|
88
|
+
* changes. Source typing mirrors `watch`, including tuples and the
|
|
89
|
+
* `immediate` flag (an immediate first call is debounced too).
|
|
90
|
+
*
|
|
91
|
+
* Without a browser `window` (and without `runOnServer`) the callback runs
|
|
92
|
+
* synchronously, so server-side effects are not silently dropped. Timers are
|
|
93
|
+
* cleared when the watcher stops or the owning scope is disposed.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* watchDebounced(query, (value) => search(value), { debounce: 300, maxWait: 1_000 });
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @param source Ref, getter, reactive object, or tuple of those.
|
|
101
|
+
* @param callback Debounced watch callback.
|
|
102
|
+
* @param options Watch options plus the debounce policy.
|
|
103
|
+
* @default options {}
|
|
104
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_WATCH_DEBOUNCED_INVALID_DELAY`
|
|
105
|
+
* when `debounce` or `maxWait` resolve to a negative or non-finite value,
|
|
106
|
+
* synchronously at creation and whenever a call is scheduled.
|
|
107
|
+
* @returns Stop, flush, and cancel controls.
|
|
108
|
+
*/
|
|
109
|
+
export function watchDebounced<
|
|
110
|
+
const Sources extends WatchSources,
|
|
111
|
+
Immediate extends Readonly<boolean> = false,
|
|
112
|
+
>(
|
|
113
|
+
source: Sources,
|
|
114
|
+
callback: WatchHelperCallback<Sources, Immediate>,
|
|
115
|
+
options?: WatchDebouncedOptions<Immediate>,
|
|
116
|
+
): TimedWatchHandle;
|
|
117
|
+
export function watchDebounced(
|
|
118
|
+
source: WatchSources,
|
|
119
|
+
callback: WatchCallback<unknown, unknown>,
|
|
120
|
+
options: WatchDebouncedOptions<boolean> = {},
|
|
121
|
+
): TimedWatchHandle {
|
|
122
|
+
const {
|
|
123
|
+
debounce = 0,
|
|
124
|
+
maxWait,
|
|
125
|
+
runOnServer = false,
|
|
126
|
+
scheduler = defaultScheduler,
|
|
127
|
+
...watchOptions
|
|
128
|
+
} = options;
|
|
129
|
+
resolveMs(toValue(debounce), "debounce");
|
|
130
|
+
const initialMaxWait = toValue(maxWait);
|
|
131
|
+
if (initialMaxWait !== undefined) resolveMs(initialMaxWait, "maxWait");
|
|
132
|
+
|
|
133
|
+
let timer: unknown;
|
|
134
|
+
let maxTimer: unknown;
|
|
135
|
+
let pending: (() => void) | undefined;
|
|
136
|
+
let burstOld: unknown;
|
|
137
|
+
let cleanup: (() => void) | undefined;
|
|
138
|
+
|
|
139
|
+
const clearTimers = (): void => {
|
|
140
|
+
if (timer !== undefined) scheduler.clearTimeout(timer);
|
|
141
|
+
if (maxTimer !== undefined) scheduler.clearTimeout(maxTimer);
|
|
142
|
+
timer = undefined;
|
|
143
|
+
maxTimer = undefined;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const invoke = (value: unknown, oldValue: unknown): void => {
|
|
147
|
+
const runCleanup = cleanup;
|
|
148
|
+
cleanup = undefined;
|
|
149
|
+
runCleanup?.();
|
|
150
|
+
const onCleanup: WatchCleanupRegistrar = (fn) => {
|
|
151
|
+
cleanup = fn;
|
|
152
|
+
};
|
|
153
|
+
callback(value, oldValue, onCleanup);
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const flush = (): boolean => {
|
|
157
|
+
const run = pending;
|
|
158
|
+
if (run === undefined) return false;
|
|
159
|
+
clearTimers();
|
|
160
|
+
pending = undefined;
|
|
161
|
+
run();
|
|
162
|
+
return true;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const cancel = (): boolean => {
|
|
166
|
+
if (pending === undefined) return false;
|
|
167
|
+
clearTimers();
|
|
168
|
+
pending = undefined;
|
|
169
|
+
return true;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const handle: WatchHandle = watch(
|
|
173
|
+
source,
|
|
174
|
+
(value, oldValue) => {
|
|
175
|
+
if (typeof window === "undefined" && !runOnServer) {
|
|
176
|
+
invoke(value, oldValue);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (pending === undefined) burstOld = oldValue;
|
|
180
|
+
const settledOld = burstOld;
|
|
181
|
+
pending = () => {
|
|
182
|
+
invoke(value, settledOld);
|
|
183
|
+
};
|
|
184
|
+
const delay = resolveMs(toValue(debounce), "debounce");
|
|
185
|
+
if (timer !== undefined) scheduler.clearTimeout(timer);
|
|
186
|
+
timer = scheduler.setTimeout(flush, delay);
|
|
187
|
+
const ceiling = toValue(maxWait);
|
|
188
|
+
if (ceiling !== undefined && maxTimer === undefined) {
|
|
189
|
+
maxTimer = scheduler.setTimeout(flush, resolveMs(ceiling, "maxWait"));
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
watchOptions,
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
const stop = (): void => {
|
|
196
|
+
handle.stop();
|
|
197
|
+
cancel();
|
|
198
|
+
const runCleanup = cleanup;
|
|
199
|
+
cleanup = undefined;
|
|
200
|
+
runCleanup?.();
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
tryOnScopeDispose(stop);
|
|
204
|
+
|
|
205
|
+
return { stop, flush, cancel };
|
|
206
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { watch } from "vue";
|
|
2
|
+
import type { WatchCallback, WatchOptions } from "vue";
|
|
3
|
+
|
|
4
|
+
import type { WatchHelperCallback, WatchSources } from "./watch-source.ts";
|
|
5
|
+
|
|
6
|
+
/** Controls returned by {@link watchIgnorable}. */
|
|
7
|
+
export interface IgnorableWatchHandle {
|
|
8
|
+
/**
|
|
9
|
+
* Run `updater` so that the source changes it makes synchronously do not
|
|
10
|
+
* trigger the callback.
|
|
11
|
+
*/
|
|
12
|
+
readonly ignoreUpdates: (updater: () => void) => void;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Swallow the changes already queued for the next (non-sync) flush. A
|
|
16
|
+
* no-op for `flush: "sync"` watchers, which have nothing queued.
|
|
17
|
+
*/
|
|
18
|
+
readonly ignorePrevAsyncUpdates: () => void;
|
|
19
|
+
|
|
20
|
+
/** Stop watching permanently. */
|
|
21
|
+
readonly stop: () => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Watch sources like Vue's `watch`, with a way to make changes the callback
|
|
26
|
+
* should not see.
|
|
27
|
+
*
|
|
28
|
+
* Typical use is two-way syncing: writes performed inside `ignoreUpdates`
|
|
29
|
+
* (for example applying a server echo) do not bounce back. Works with every
|
|
30
|
+
* `flush` mode: for `"pre"`/`"post"`, a synchronous side watcher counts
|
|
31
|
+
* changes so that a batch made only of ignored writes is skipped, while a
|
|
32
|
+
* batch that mixes ignored and regular writes is still delivered. Stops
|
|
33
|
+
* with the owning reactive scope; safe during server rendering.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const { ignoreUpdates } = watchIgnorable(draft, (value) => save(value));
|
|
38
|
+
* ignoreUpdates(() => {
|
|
39
|
+
* draft.value = fromServer; // not saved again
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @param source Ref, getter, reactive object, or tuple of those.
|
|
44
|
+
* @param callback Watch callback for non-ignored changes.
|
|
45
|
+
* @param options Vue watch options.
|
|
46
|
+
* @default options {}
|
|
47
|
+
* @returns Ignore helpers and the stop handle.
|
|
48
|
+
*/
|
|
49
|
+
export function watchIgnorable<
|
|
50
|
+
const Sources extends WatchSources,
|
|
51
|
+
Immediate extends Readonly<boolean> = false,
|
|
52
|
+
>(
|
|
53
|
+
source: Sources,
|
|
54
|
+
callback: WatchHelperCallback<Sources, Immediate>,
|
|
55
|
+
options?: WatchOptions<Immediate>,
|
|
56
|
+
): IgnorableWatchHandle;
|
|
57
|
+
export function watchIgnorable(
|
|
58
|
+
source: WatchSources,
|
|
59
|
+
callback: WatchCallback<unknown, unknown>,
|
|
60
|
+
options: WatchOptions<boolean> = {},
|
|
61
|
+
): IgnorableWatchHandle {
|
|
62
|
+
if (options.flush === "sync") {
|
|
63
|
+
let ignoring = false;
|
|
64
|
+
const handle = watch(
|
|
65
|
+
source,
|
|
66
|
+
(value, oldValue, onCleanup) => {
|
|
67
|
+
if (!ignoring) callback(value, oldValue, onCleanup);
|
|
68
|
+
},
|
|
69
|
+
options,
|
|
70
|
+
);
|
|
71
|
+
return {
|
|
72
|
+
ignoreUpdates: (updater) => {
|
|
73
|
+
const previous = ignoring;
|
|
74
|
+
ignoring = true;
|
|
75
|
+
try {
|
|
76
|
+
updater();
|
|
77
|
+
} finally {
|
|
78
|
+
ignoring = previous;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
ignorePrevAsyncUpdates: () => undefined,
|
|
82
|
+
stop: () => {
|
|
83
|
+
handle.stop();
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let ignoredCount = 0;
|
|
89
|
+
let changeCount = 0;
|
|
90
|
+
|
|
91
|
+
const counter = watch(
|
|
92
|
+
source,
|
|
93
|
+
() => {
|
|
94
|
+
changeCount += 1;
|
|
95
|
+
},
|
|
96
|
+
{ ...options, flush: "sync", immediate: false, once: false },
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const handle = watch(
|
|
100
|
+
source,
|
|
101
|
+
(value, oldValue, onCleanup) => {
|
|
102
|
+
const ignore = ignoredCount > 0 && ignoredCount === changeCount;
|
|
103
|
+
ignoredCount = 0;
|
|
104
|
+
changeCount = 0;
|
|
105
|
+
if (options.once === true) counter.stop();
|
|
106
|
+
if (!ignore) callback(value, oldValue, onCleanup);
|
|
107
|
+
},
|
|
108
|
+
options,
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
ignoreUpdates: (updater) => {
|
|
113
|
+
const before = changeCount;
|
|
114
|
+
try {
|
|
115
|
+
updater();
|
|
116
|
+
} finally {
|
|
117
|
+
ignoredCount += changeCount - before;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
ignorePrevAsyncUpdates: () => {
|
|
121
|
+
ignoredCount = changeCount;
|
|
122
|
+
},
|
|
123
|
+
stop: () => {
|
|
124
|
+
counter.stop();
|
|
125
|
+
handle.stop();
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { watch } from "vue";
|
|
2
|
+
import type { WatchCallback, WatchHandle, WatchOptions } from "vue";
|
|
3
|
+
|
|
4
|
+
import type { WatchHelperCallback, WatchSources } from "./watch-source.ts";
|
|
5
|
+
|
|
6
|
+
/** Options for {@link watchOnce}: Vue watch options without `once`. */
|
|
7
|
+
export type WatchOnceOptions<Immediate extends boolean = false> = Omit<
|
|
8
|
+
WatchOptions<Immediate>,
|
|
9
|
+
"once"
|
|
10
|
+
>;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Watch sources like Vue's `watch`, delivering exactly one change and then
|
|
14
|
+
* stopping.
|
|
15
|
+
*
|
|
16
|
+
* A thin, typed shorthand for `watch(source, callback, { once: true })`:
|
|
17
|
+
* with `immediate: true` the single call is the immediate one. The returned
|
|
18
|
+
* handle can stop the watcher before it fires. Safe during server rendering
|
|
19
|
+
* and bound to the owning reactive scope.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* watchOnce(user, (loaded) => track("first-user", loaded.id));
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @param source Ref, getter, reactive object, or tuple of those.
|
|
27
|
+
* @param callback Called at most once.
|
|
28
|
+
* @param options Vue watch options except `once`.
|
|
29
|
+
* @default options {}
|
|
30
|
+
* @returns Vue's watch handle.
|
|
31
|
+
*/
|
|
32
|
+
export function watchOnce<
|
|
33
|
+
const Sources extends WatchSources,
|
|
34
|
+
Immediate extends Readonly<boolean> = false,
|
|
35
|
+
>(
|
|
36
|
+
source: Sources,
|
|
37
|
+
callback: WatchHelperCallback<Sources, Immediate>,
|
|
38
|
+
options?: WatchOnceOptions<Immediate>,
|
|
39
|
+
): WatchHandle;
|
|
40
|
+
export function watchOnce(
|
|
41
|
+
source: WatchSources,
|
|
42
|
+
callback: WatchCallback<unknown, unknown>,
|
|
43
|
+
options: WatchOnceOptions<boolean> = {},
|
|
44
|
+
): WatchHandle {
|
|
45
|
+
return watch(source, callback, { ...options, once: true });
|
|
46
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { shallowRef, watch } from "vue";
|
|
2
|
+
import type { ShallowRef, WatchCallback, WatchOptions } from "vue";
|
|
3
|
+
|
|
4
|
+
import type { WatchHelperCallback, WatchSources } from "./watch-source.ts";
|
|
5
|
+
|
|
6
|
+
/** Controls returned by {@link watchPausable}. */
|
|
7
|
+
export interface PausableWatchHandle {
|
|
8
|
+
/** Whether changes are currently delivered to the callback. */
|
|
9
|
+
readonly isActive: Readonly<ShallowRef<boolean>>;
|
|
10
|
+
|
|
11
|
+
/** Drop changes until {@link PausableWatchHandle.resume}. Idempotent. */
|
|
12
|
+
readonly pause: () => void;
|
|
13
|
+
|
|
14
|
+
/** Deliver changes again. Changes made while paused are not replayed. */
|
|
15
|
+
readonly resume: () => void;
|
|
16
|
+
|
|
17
|
+
/** Stop watching permanently. */
|
|
18
|
+
readonly stop: () => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Options for {@link watchPausable}. */
|
|
22
|
+
export interface WatchPausableOptions<
|
|
23
|
+
Immediate extends boolean = false,
|
|
24
|
+
> extends WatchOptions<Immediate> {
|
|
25
|
+
/**
|
|
26
|
+
* Start in the paused state.
|
|
27
|
+
*
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
readonly initiallyPaused?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Watch sources like Vue's `watch`, with pause and resume.
|
|
35
|
+
*
|
|
36
|
+
* Unlike the `pause()` built into Vue 3.5 watch handles, which delivers one
|
|
37
|
+
* catch-up call on resume, changes made while paused are dropped: the
|
|
38
|
+
* callback only ever sees changes that happened while active. The old value
|
|
39
|
+
* passed after a resume is the value from the most recent change Vue
|
|
40
|
+
* observed, whether or not it was delivered. The watcher follows the owning
|
|
41
|
+
* reactive scope and is safe during server rendering.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const { pause, resume } = watchPausable(form, persist, { deep: true });
|
|
46
|
+
* pause();
|
|
47
|
+
* form.name = "x"; // not persisted
|
|
48
|
+
* resume();
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @param source Ref, getter, reactive object, or tuple of those.
|
|
52
|
+
* @param callback Watch callback, skipped while paused.
|
|
53
|
+
* @param options Watch options plus the initial pause state.
|
|
54
|
+
* @default options {}
|
|
55
|
+
* @returns Pause, resume, and stop controls with the active flag.
|
|
56
|
+
*/
|
|
57
|
+
export function watchPausable<
|
|
58
|
+
const Sources extends WatchSources,
|
|
59
|
+
Immediate extends Readonly<boolean> = false,
|
|
60
|
+
>(
|
|
61
|
+
source: Sources,
|
|
62
|
+
callback: WatchHelperCallback<Sources, Immediate>,
|
|
63
|
+
options?: WatchPausableOptions<Immediate>,
|
|
64
|
+
): PausableWatchHandle;
|
|
65
|
+
export function watchPausable(
|
|
66
|
+
source: WatchSources,
|
|
67
|
+
callback: WatchCallback<unknown, unknown>,
|
|
68
|
+
options: WatchPausableOptions<boolean> = {},
|
|
69
|
+
): PausableWatchHandle {
|
|
70
|
+
const { initiallyPaused = false, ...watchOptions } = options;
|
|
71
|
+
const isActive = shallowRef(!initiallyPaused);
|
|
72
|
+
|
|
73
|
+
const handle = watch(
|
|
74
|
+
source,
|
|
75
|
+
(value, oldValue, onCleanup) => {
|
|
76
|
+
if (isActive.value) callback(value, oldValue, onCleanup);
|
|
77
|
+
},
|
|
78
|
+
watchOptions,
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
isActive,
|
|
83
|
+
pause: () => {
|
|
84
|
+
isActive.value = false;
|
|
85
|
+
},
|
|
86
|
+
resume: () => {
|
|
87
|
+
isActive.value = true;
|
|
88
|
+
},
|
|
89
|
+
stop: () => {
|
|
90
|
+
handle.stop();
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source and callback typing for the watch helpers
|
|
3
|
+
* (`watchDebounced`, `watchThrottled`, `watchPausable`, `watchIgnorable`,
|
|
4
|
+
* `watchOnce`, `whenever`).
|
|
5
|
+
*
|
|
6
|
+
* The helpers accept the same sources as Vue's `watch`: a ref, a getter, a
|
|
7
|
+
* reactive object, or a tuple of those. This module declares types only and
|
|
8
|
+
* contributes no runtime code.
|
|
9
|
+
*/
|
|
10
|
+
import type { WatchCallback, WatchSource } from "vue";
|
|
11
|
+
|
|
12
|
+
/** A single source accepted by Vue's `watch`: ref, getter, or reactive object. */
|
|
13
|
+
export type WatchSourceInput = WatchSource<unknown> | object;
|
|
14
|
+
|
|
15
|
+
/** Every source shape accepted by the watch helpers, including tuples. */
|
|
16
|
+
export type WatchSources = WatchSourceInput | readonly WatchSourceInput[];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Value observed from a single source: the ref/getter value, or the reactive
|
|
20
|
+
* object itself.
|
|
21
|
+
*/
|
|
22
|
+
export type WatchSourceValue<Source> =
|
|
23
|
+
Source extends WatchSource<infer Value> ? Value : Source extends object ? Source : never;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Value delivered to a watch callback for {@link WatchSources}: a tuple
|
|
27
|
+
* source maps element-wise, any other source resolves through
|
|
28
|
+
* {@link WatchSourceValue}.
|
|
29
|
+
*/
|
|
30
|
+
export type WatchValue<Sources> = Sources extends readonly unknown[]
|
|
31
|
+
? { -readonly [Index in keyof Sources]: WatchSourceValue<Sources[Index]> }
|
|
32
|
+
: WatchSourceValue<Sources>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Previous value delivered to a watch callback: `undefined` is added only
|
|
36
|
+
* when the watcher runs immediately (tuples get it per element, as in Vue).
|
|
37
|
+
*/
|
|
38
|
+
export type WatchOldValue<Sources, Immediate> = Immediate extends true
|
|
39
|
+
? Sources extends readonly unknown[]
|
|
40
|
+
? { -readonly [Index in keyof Sources]: WatchSourceValue<Sources[Index]> | undefined }
|
|
41
|
+
: WatchSourceValue<Sources> | undefined
|
|
42
|
+
: WatchValue<Sources>;
|
|
43
|
+
|
|
44
|
+
/** Callback typed from its sources and the `immediate` flag. */
|
|
45
|
+
export type WatchHelperCallback<Sources, Immediate = false> = WatchCallback<
|
|
46
|
+
WatchValue<Sources>,
|
|
47
|
+
WatchOldValue<Sources, Immediate>
|
|
48
|
+
>;
|
|
49
|
+
|
|
50
|
+
/** Cleanup registrar passed as the third argument of a watch callback. */
|
|
51
|
+
export type WatchCleanupRegistrar = Parameters<WatchCallback>[2];
|