@vizejs/composable 0.426.3 → 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,278 @@
|
|
|
1
|
+
import { computed, shallowRef } from "vue";
|
|
2
|
+
import type { ComputedRef, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
/** Lifecycle of one queued task. */
|
|
5
|
+
export type AsyncQueueTaskState = "pending" | "running" | "fulfilled" | "rejected" | "aborted";
|
|
6
|
+
|
|
7
|
+
/** Outcome record of one queued task. */
|
|
8
|
+
export interface AsyncQueueTaskResult<Data> {
|
|
9
|
+
/** Current lifecycle state. */
|
|
10
|
+
readonly state: AsyncQueueTaskState;
|
|
11
|
+
|
|
12
|
+
/** Resolved value once fulfilled. */
|
|
13
|
+
readonly data: Data | undefined;
|
|
14
|
+
|
|
15
|
+
/** Failure once rejected. */
|
|
16
|
+
readonly error: unknown;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Context passed to every queued task. */
|
|
20
|
+
export interface AsyncQueueContext {
|
|
21
|
+
/** Aborted when the queue is aborted. */
|
|
22
|
+
readonly signal: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Result of the task before position `Index` (`undefined` for the first). */
|
|
26
|
+
export type AsyncQueuePrevious<Results extends readonly unknown[], Index> = Index extends keyof [
|
|
27
|
+
undefined,
|
|
28
|
+
...Results,
|
|
29
|
+
]
|
|
30
|
+
? [undefined, ...Results][Index]
|
|
31
|
+
: never;
|
|
32
|
+
|
|
33
|
+
/** One queued task: receives the previous result and resolves the next. */
|
|
34
|
+
export type AsyncQueueTask<Previous, Result> = (
|
|
35
|
+
previous: Previous,
|
|
36
|
+
context: AsyncQueueContext,
|
|
37
|
+
) => Result | Promise<Result>;
|
|
38
|
+
|
|
39
|
+
/** Task tuple whose parameters chain the previous task's result. */
|
|
40
|
+
export type AsyncQueueTasks<Results extends readonly unknown[]> = {
|
|
41
|
+
readonly [Index in keyof Results]: (
|
|
42
|
+
previous: AsyncQueuePrevious<Results, Index>,
|
|
43
|
+
context: AsyncQueueContext,
|
|
44
|
+
) => Results[Index] | Promise<Results[Index]>;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Task with its result chain erased. Declared through a method signature so
|
|
49
|
+
* its parameters are compared bivariantly: every typed task is assignable.
|
|
50
|
+
*/
|
|
51
|
+
type ErasedTask = {
|
|
52
|
+
run(previous: unknown, context: AsyncQueueContext): unknown;
|
|
53
|
+
}["run"];
|
|
54
|
+
|
|
55
|
+
/** Options for {@link useAsyncQueue}. */
|
|
56
|
+
export interface UseAsyncQueueOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Stop at the first rejection (remaining tasks become `"aborted"`).
|
|
59
|
+
*
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
readonly interrupt?: boolean;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Start running right away.
|
|
66
|
+
*
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
69
|
+
readonly immediate?: boolean;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* External cancellation; aborting it aborts the queue.
|
|
73
|
+
*
|
|
74
|
+
* @default undefined
|
|
75
|
+
*/
|
|
76
|
+
readonly signal?: AbortSignal;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Called when a task rejects.
|
|
80
|
+
*
|
|
81
|
+
* @default undefined
|
|
82
|
+
*/
|
|
83
|
+
readonly onError?: (error: unknown, index: number) => void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Called once the queue settles.
|
|
87
|
+
*
|
|
88
|
+
* @default undefined
|
|
89
|
+
*/
|
|
90
|
+
readonly onFinished?: () => void;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Queue state and controls returned by {@link useAsyncQueue}. */
|
|
94
|
+
export interface AsyncQueue<Results extends readonly unknown[]> {
|
|
95
|
+
/** Index of the running task (`-1` before start, `length` when done). */
|
|
96
|
+
readonly activeIndex: Readonly<ShallowRef<number>>;
|
|
97
|
+
|
|
98
|
+
/** Per-task outcome records, typed per position. */
|
|
99
|
+
readonly results: Readonly<
|
|
100
|
+
ShallowRef<{ readonly [Index in keyof Results]: AsyncQueueTaskResult<Results[Index]> }>
|
|
101
|
+
>;
|
|
102
|
+
|
|
103
|
+
/** Whether the queue settled (all done, interrupted, or aborted). */
|
|
104
|
+
readonly isFinished: ComputedRef<boolean>;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Run the queue (again) from the first task.
|
|
108
|
+
*
|
|
109
|
+
* @returns Settles with the final records.
|
|
110
|
+
*/
|
|
111
|
+
readonly run: () => Promise<{
|
|
112
|
+
readonly [Index in keyof Results]: AsyncQueueTaskResult<Results[Index]>;
|
|
113
|
+
}>;
|
|
114
|
+
|
|
115
|
+
/** Abort the running queue. */
|
|
116
|
+
readonly abort: (reason?: unknown) => void;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Run async tasks one after another, each receiving the previous result.
|
|
121
|
+
*
|
|
122
|
+
* Result types are inferred per position from the task tuple, and each
|
|
123
|
+
* task's `previous` parameter is contextually typed as the preceding task's
|
|
124
|
+
* result (up to six tasks; longer queues use the mapped-tuple signature with
|
|
125
|
+
* annotated parameters).
|
|
126
|
+
* Every task gets an `AbortSignal`; `abort()` (or the external signal)
|
|
127
|
+
* stops the queue and marks unfinished tasks `"aborted"`. A new `run()`
|
|
128
|
+
* aborts the one in flight. Starts on the server too when `immediate`, but
|
|
129
|
+
* nothing awaits it there, so markup shows the pending state on both sides.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* const { results } = useAsyncQueue([
|
|
134
|
+
* async () => fetchUser(),
|
|
135
|
+
* async (user) => fetchOrders(user.id),
|
|
136
|
+
* ]);
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @param tasks Ordered task tuple.
|
|
140
|
+
* @param options Interruption, start, cancellation, and callbacks.
|
|
141
|
+
* @default options {}
|
|
142
|
+
* @returns Queue state and controls.
|
|
143
|
+
*/
|
|
144
|
+
export function useAsyncQueue<R1>(
|
|
145
|
+
tasks: readonly [AsyncQueueTask<undefined, R1>],
|
|
146
|
+
options?: UseAsyncQueueOptions,
|
|
147
|
+
): AsyncQueue<[R1]>;
|
|
148
|
+
export function useAsyncQueue<R1, R2>(
|
|
149
|
+
tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>],
|
|
150
|
+
options?: UseAsyncQueueOptions,
|
|
151
|
+
): AsyncQueue<[R1, R2]>;
|
|
152
|
+
export function useAsyncQueue<R1, R2, R3>(
|
|
153
|
+
tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>, AsyncQueueTask<R2, R3>],
|
|
154
|
+
options?: UseAsyncQueueOptions,
|
|
155
|
+
): AsyncQueue<[R1, R2, R3]>;
|
|
156
|
+
export function useAsyncQueue<R1, R2, R3, R4>(
|
|
157
|
+
tasks: readonly [
|
|
158
|
+
AsyncQueueTask<undefined, R1>,
|
|
159
|
+
AsyncQueueTask<R1, R2>,
|
|
160
|
+
AsyncQueueTask<R2, R3>,
|
|
161
|
+
AsyncQueueTask<R3, R4>,
|
|
162
|
+
],
|
|
163
|
+
options?: UseAsyncQueueOptions,
|
|
164
|
+
): AsyncQueue<[R1, R2, R3, R4]>;
|
|
165
|
+
export function useAsyncQueue<R1, R2, R3, R4, R5>(
|
|
166
|
+
tasks: readonly [
|
|
167
|
+
AsyncQueueTask<undefined, R1>,
|
|
168
|
+
AsyncQueueTask<R1, R2>,
|
|
169
|
+
AsyncQueueTask<R2, R3>,
|
|
170
|
+
AsyncQueueTask<R3, R4>,
|
|
171
|
+
AsyncQueueTask<R4, R5>,
|
|
172
|
+
],
|
|
173
|
+
options?: UseAsyncQueueOptions,
|
|
174
|
+
): AsyncQueue<[R1, R2, R3, R4, R5]>;
|
|
175
|
+
export function useAsyncQueue<R1, R2, R3, R4, R5, R6>(
|
|
176
|
+
tasks: readonly [
|
|
177
|
+
AsyncQueueTask<undefined, R1>,
|
|
178
|
+
AsyncQueueTask<R1, R2>,
|
|
179
|
+
AsyncQueueTask<R2, R3>,
|
|
180
|
+
AsyncQueueTask<R3, R4>,
|
|
181
|
+
AsyncQueueTask<R4, R5>,
|
|
182
|
+
AsyncQueueTask<R5, R6>,
|
|
183
|
+
],
|
|
184
|
+
options?: UseAsyncQueueOptions,
|
|
185
|
+
): AsyncQueue<[R1, R2, R3, R4, R5, R6]>;
|
|
186
|
+
export function useAsyncQueue<Results extends readonly unknown[]>(
|
|
187
|
+
tasks: AsyncQueueTasks<Results>,
|
|
188
|
+
options?: UseAsyncQueueOptions,
|
|
189
|
+
): AsyncQueue<Results>;
|
|
190
|
+
export function useAsyncQueue(
|
|
191
|
+
tasks: readonly ErasedTask[],
|
|
192
|
+
options: UseAsyncQueueOptions = {},
|
|
193
|
+
): AsyncQueue<readonly unknown[]> {
|
|
194
|
+
const pendingRecords = (): AsyncQueueTaskResult<unknown>[] =>
|
|
195
|
+
tasks.map(() => ({ state: "pending", data: undefined, error: undefined }));
|
|
196
|
+
const activeIndex = shallowRef(-1);
|
|
197
|
+
const results = shallowRef<readonly AsyncQueueTaskResult<unknown>[]>(pendingRecords());
|
|
198
|
+
const isFinished = computed(() => activeIndex.value >= tasks.length);
|
|
199
|
+
let controller: AbortController | undefined;
|
|
200
|
+
|
|
201
|
+
const update = (index: number, record: AsyncQueueTaskResult<unknown>): void => {
|
|
202
|
+
results.value = results.value.map((current, position) =>
|
|
203
|
+
position === index ? record : current,
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
const abortRemaining = (from: number): void => {
|
|
207
|
+
results.value = results.value.map((current, position) =>
|
|
208
|
+
position >= from && (current.state === "pending" || current.state === "running")
|
|
209
|
+
? { state: "aborted", data: undefined, error: current.error }
|
|
210
|
+
: current,
|
|
211
|
+
);
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const finish = (): void => {
|
|
215
|
+
activeIndex.value = tasks.length;
|
|
216
|
+
options.onFinished?.();
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const abortRun = (run: AbortController, reason?: unknown): void => {
|
|
220
|
+
if (run.signal.aborted) return;
|
|
221
|
+
run.abort(reason);
|
|
222
|
+
if (controller !== run) return;
|
|
223
|
+
abortRemaining(0);
|
|
224
|
+
finish();
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const run = async (): Promise<readonly AsyncQueueTaskResult<unknown>[]> => {
|
|
228
|
+
controller?.abort();
|
|
229
|
+
const own = new AbortController();
|
|
230
|
+
controller = own;
|
|
231
|
+
results.value = pendingRecords();
|
|
232
|
+
const external = options.signal;
|
|
233
|
+
const onExternalAbort = (): void => abortRun(own, external?.reason);
|
|
234
|
+
if (external?.aborted === true) {
|
|
235
|
+
abortRun(own, external.reason);
|
|
236
|
+
return results.value;
|
|
237
|
+
}
|
|
238
|
+
external?.addEventListener("abort", onExternalAbort, { once: true });
|
|
239
|
+
|
|
240
|
+
let previous: unknown;
|
|
241
|
+
try {
|
|
242
|
+
for (const [index, task] of tasks.entries()) {
|
|
243
|
+
activeIndex.value = index;
|
|
244
|
+
update(index, { state: "running", data: undefined, error: undefined });
|
|
245
|
+
try {
|
|
246
|
+
previous = await task(previous, { signal: own.signal });
|
|
247
|
+
if (own.signal.aborted) return results.value;
|
|
248
|
+
update(index, { state: "fulfilled", data: previous, error: undefined });
|
|
249
|
+
} catch (error) {
|
|
250
|
+
if (own.signal.aborted) return results.value;
|
|
251
|
+
update(index, { state: "rejected", data: undefined, error });
|
|
252
|
+
options.onError?.(error, index);
|
|
253
|
+
if (options.interrupt ?? true) {
|
|
254
|
+
abortRemaining(index + 1);
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
previous = undefined;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
finish();
|
|
261
|
+
return results.value;
|
|
262
|
+
} finally {
|
|
263
|
+
external?.removeEventListener("abort", onExternalAbort);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
if (options.immediate ?? true) void run();
|
|
268
|
+
|
|
269
|
+
return {
|
|
270
|
+
activeIndex,
|
|
271
|
+
results,
|
|
272
|
+
isFinished,
|
|
273
|
+
run,
|
|
274
|
+
abort: (reason) => {
|
|
275
|
+
if (controller !== undefined) abortRun(controller, reason);
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { shallowRef } from "vue";
|
|
2
|
+
import type { ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
/** Options for {@link useAsyncState}. */
|
|
5
|
+
export interface UseAsyncStateOptions<Data> {
|
|
6
|
+
/**
|
|
7
|
+
* Execute once right away. Only available for producers without
|
|
8
|
+
* parameters; pass `false` to run a producer that takes arguments through
|
|
9
|
+
* {@link AsyncState.execute}.
|
|
10
|
+
*
|
|
11
|
+
* @default true
|
|
12
|
+
*/
|
|
13
|
+
readonly immediate?: boolean;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Restore the initial state at the start of every execution.
|
|
17
|
+
*
|
|
18
|
+
* @default false
|
|
19
|
+
*/
|
|
20
|
+
readonly resetOnExecute?: boolean;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Re-throw failures from `execute` in addition to storing them.
|
|
24
|
+
*
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
readonly throwError?: boolean;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Called with every failure of the newest execution.
|
|
31
|
+
*
|
|
32
|
+
* @default undefined
|
|
33
|
+
*/
|
|
34
|
+
readonly onError?: (error: unknown) => void;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Called with every successful result of the newest execution.
|
|
38
|
+
*
|
|
39
|
+
* @default undefined
|
|
40
|
+
*/
|
|
41
|
+
readonly onSuccess?: (data: Data) => void;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Reactive state and controls returned by {@link useAsyncState}. */
|
|
45
|
+
export interface AsyncState<Data, Initial, Parameters extends readonly unknown[]> {
|
|
46
|
+
/** Newest result, or the initial state. */
|
|
47
|
+
readonly state: Readonly<ShallowRef<Data | Initial>>;
|
|
48
|
+
|
|
49
|
+
/** Whether at least one execution succeeded. */
|
|
50
|
+
readonly isReady: Readonly<ShallowRef<boolean>>;
|
|
51
|
+
|
|
52
|
+
/** Whether an execution is in flight. */
|
|
53
|
+
readonly isLoading: Readonly<ShallowRef<boolean>>;
|
|
54
|
+
|
|
55
|
+
/** Failure of the newest execution, cleared when a new one starts. */
|
|
56
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Run the producer. Only the newest execution may update the state.
|
|
60
|
+
*
|
|
61
|
+
* @returns The resulting state (the previous state for failed or
|
|
62
|
+
* superseded executions unless `throwError` is set).
|
|
63
|
+
*/
|
|
64
|
+
readonly execute: (...args: Parameters) => Promise<Data | Initial>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Reactive state for an async producer.
|
|
69
|
+
*
|
|
70
|
+
* Tracks the result, loading, readiness, and error of the newest execution;
|
|
71
|
+
* out-of-order completions of older executions are ignored, so the state
|
|
72
|
+
* always reflects the latest request. The typing is arity-aware: producers
|
|
73
|
+
* with parameters require `{ immediate: false }` and `execute` keeps their
|
|
74
|
+
* parameter tuple. On the server an immediate execution starts but is not
|
|
75
|
+
* awaited, so both sides render the initial state with `isLoading: true`.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* const { state, isLoading, execute } = useAsyncState((id: string) => fetchUser(id), null, {
|
|
80
|
+
* immediate: false,
|
|
81
|
+
* });
|
|
82
|
+
* await execute("u-1");
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @param producer Async function producing the data.
|
|
86
|
+
* @param initial State before the first success.
|
|
87
|
+
* @param options Immediate execution, reset, error, and success policy.
|
|
88
|
+
* @default options {}
|
|
89
|
+
* @returns Reactive state and the `execute` control.
|
|
90
|
+
*/
|
|
91
|
+
export function useAsyncState<Data, Initial>(
|
|
92
|
+
producer: () => Promise<Data>,
|
|
93
|
+
initial: Initial,
|
|
94
|
+
options?: UseAsyncStateOptions<Data>,
|
|
95
|
+
): AsyncState<Data, Initial, []>;
|
|
96
|
+
export function useAsyncState<Data, Initial, Parameters extends readonly unknown[]>(
|
|
97
|
+
producer: (...args: Parameters) => Promise<Data>,
|
|
98
|
+
initial: Initial,
|
|
99
|
+
options: UseAsyncStateOptions<Data> & { readonly immediate: false },
|
|
100
|
+
): AsyncState<Data, Initial, Parameters>;
|
|
101
|
+
export function useAsyncState(
|
|
102
|
+
producer: (...args: readonly unknown[]) => Promise<unknown>,
|
|
103
|
+
initial: unknown,
|
|
104
|
+
options: UseAsyncStateOptions<unknown> = {},
|
|
105
|
+
): AsyncState<unknown, unknown, readonly unknown[]> {
|
|
106
|
+
const state = shallowRef(initial);
|
|
107
|
+
const isReady = shallowRef(false);
|
|
108
|
+
const isLoading = shallowRef(false);
|
|
109
|
+
const error = shallowRef<unknown>(undefined);
|
|
110
|
+
let generation = 0;
|
|
111
|
+
|
|
112
|
+
const execute = async (...args: readonly unknown[]): Promise<unknown> => {
|
|
113
|
+
generation += 1;
|
|
114
|
+
const own = generation;
|
|
115
|
+
if (options.resetOnExecute ?? false) state.value = initial;
|
|
116
|
+
error.value = undefined;
|
|
117
|
+
isLoading.value = true;
|
|
118
|
+
try {
|
|
119
|
+
const data = await producer(...args);
|
|
120
|
+
if (own !== generation) return state.value;
|
|
121
|
+
state.value = data;
|
|
122
|
+
isReady.value = true;
|
|
123
|
+
options.onSuccess?.(data);
|
|
124
|
+
} catch (failure) {
|
|
125
|
+
if (own !== generation) return state.value;
|
|
126
|
+
error.value = failure;
|
|
127
|
+
options.onError?.(failure);
|
|
128
|
+
if (options.throwError ?? false) throw failure;
|
|
129
|
+
} finally {
|
|
130
|
+
if (own === generation) isLoading.value = false;
|
|
131
|
+
}
|
|
132
|
+
return state.value;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Only the zero-parameter overload may execute immediately.
|
|
136
|
+
if (options.immediate ?? true) void execute().catch(() => undefined);
|
|
137
|
+
|
|
138
|
+
return { state, isReady, isLoading, error, execute };
|
|
139
|
+
}
|