@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
package/dist/until.d.mts
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { t as TimeoutScheduler } from "./timeout-scheduler-CI8RVLZs.mjs";
|
|
2
|
+
import { MaybeRefOrGetter } from "vue";
|
|
3
|
+
|
|
4
|
+
//#region src/until.d.ts
|
|
5
|
+
/** Options shared by every {@link until} matcher. */
|
|
6
|
+
interface UntilOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Reject when the condition is not met within this many milliseconds.
|
|
9
|
+
* `undefined` waits indefinitely (until the owning scope stops watching).
|
|
10
|
+
*
|
|
11
|
+
* @default undefined
|
|
12
|
+
*/
|
|
13
|
+
readonly timeout?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Abort the wait; the promise rejects with the signal's reason.
|
|
16
|
+
*
|
|
17
|
+
* @default undefined
|
|
18
|
+
*/
|
|
19
|
+
readonly signal?: AbortSignal;
|
|
20
|
+
/**
|
|
21
|
+
* Watch flush timing. `"sync"` also works during server rendering.
|
|
22
|
+
*
|
|
23
|
+
* @default "sync"
|
|
24
|
+
*/
|
|
25
|
+
readonly flush?: "pre" | "post" | "sync";
|
|
26
|
+
/**
|
|
27
|
+
* Watch nested properties of the value.
|
|
28
|
+
*
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
readonly deep?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Owns the timeout timer.
|
|
34
|
+
*
|
|
35
|
+
* @default globalThis timer functions
|
|
36
|
+
*/
|
|
37
|
+
readonly scheduler?: TimeoutScheduler;
|
|
38
|
+
}
|
|
39
|
+
/** Error code carried by the rejection when an {@link until} wait times out. */
|
|
40
|
+
type UntilTimeoutCode = "VIZE_COMPOSE_UNTIL_TIMEOUT";
|
|
41
|
+
/** Rejection reason used when an {@link until} wait times out. */
|
|
42
|
+
interface UntilTimeoutError extends Error {
|
|
43
|
+
/** Stable machine-readable code. */
|
|
44
|
+
readonly code: UntilTimeoutCode;
|
|
45
|
+
}
|
|
46
|
+
/** Values treated as falsy by `toBeTruthy`. */
|
|
47
|
+
type UntilFalsy = false | 0 | 0n | "" | null | undefined;
|
|
48
|
+
/** Matchers that wait for the source to satisfy a condition. */
|
|
49
|
+
interface UntilMatchers<Value> {
|
|
50
|
+
/**
|
|
51
|
+
* Resolve once the value satisfies the type guard, narrowing the result.
|
|
52
|
+
*
|
|
53
|
+
* @returns The narrowed value.
|
|
54
|
+
*/
|
|
55
|
+
toMatch<Narrowed extends Value>(condition: (value: Value) => value is Narrowed, options?: UntilOptions): Promise<Narrowed>;
|
|
56
|
+
/**
|
|
57
|
+
* Resolve once the value satisfies the predicate.
|
|
58
|
+
*
|
|
59
|
+
* @returns The matching value.
|
|
60
|
+
*/
|
|
61
|
+
toMatch(condition: (value: Value) => boolean, options?: UntilOptions): Promise<Value>;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve once the value is `Object.is`-equal to `expected` (itself
|
|
64
|
+
* possibly reactive).
|
|
65
|
+
*
|
|
66
|
+
* @returns The expected value.
|
|
67
|
+
*/
|
|
68
|
+
toBe<const Expected extends Value>(expected: MaybeRefOrGetter<Expected>, options?: UntilOptions): Promise<Expected>;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve once the value is truthy.
|
|
71
|
+
*
|
|
72
|
+
* @returns The value without its falsy members.
|
|
73
|
+
*/
|
|
74
|
+
toBeTruthy(options?: UntilOptions): Promise<Exclude<Value, UntilFalsy>>;
|
|
75
|
+
/**
|
|
76
|
+
* Resolve once the value is `null`.
|
|
77
|
+
*
|
|
78
|
+
* @returns `null`.
|
|
79
|
+
*/
|
|
80
|
+
toBeNull(options?: UntilOptions): Promise<Extract<Value, null>>;
|
|
81
|
+
/**
|
|
82
|
+
* Resolve once the value is `undefined`.
|
|
83
|
+
*
|
|
84
|
+
* @returns `undefined`.
|
|
85
|
+
*/
|
|
86
|
+
toBeUndefined(options?: UntilOptions): Promise<Extract<Value, undefined>>;
|
|
87
|
+
/**
|
|
88
|
+
* Resolve once the value is `NaN`.
|
|
89
|
+
*
|
|
90
|
+
* @returns `NaN`.
|
|
91
|
+
*/
|
|
92
|
+
toBeNaN(options?: UntilOptions): Promise<Value>;
|
|
93
|
+
/**
|
|
94
|
+
* Resolve once an array or string value includes `element`.
|
|
95
|
+
*
|
|
96
|
+
* @returns The containing value.
|
|
97
|
+
*/
|
|
98
|
+
toContain(element: Value extends readonly (infer Element)[] ? Element : Value extends string ? string : never, options?: UntilOptions): Promise<Value>;
|
|
99
|
+
/**
|
|
100
|
+
* Resolve after the value changed once.
|
|
101
|
+
*
|
|
102
|
+
* @returns The new value.
|
|
103
|
+
*/
|
|
104
|
+
changed(options?: UntilOptions): Promise<Value>;
|
|
105
|
+
/**
|
|
106
|
+
* Resolve after the value changed `count` times.
|
|
107
|
+
*
|
|
108
|
+
* @returns The value after the last counted change.
|
|
109
|
+
*/
|
|
110
|
+
changedTimes(count: number, options?: UntilOptions): Promise<Value>;
|
|
111
|
+
}
|
|
112
|
+
/** Negated matchers available through {@link UntilChain.not}. */
|
|
113
|
+
interface UntilNegatedMatchers<Value> {
|
|
114
|
+
/**
|
|
115
|
+
* Resolve once the value is no longer `Object.is`-equal to `unexpected`.
|
|
116
|
+
*
|
|
117
|
+
* @returns The value.
|
|
118
|
+
*/
|
|
119
|
+
toBe(unexpected: MaybeRefOrGetter<Value>, options?: UntilOptions): Promise<Value>;
|
|
120
|
+
/**
|
|
121
|
+
* Resolve once the value is falsy.
|
|
122
|
+
*
|
|
123
|
+
* @returns The falsy value.
|
|
124
|
+
*/
|
|
125
|
+
toBeTruthy(options?: UntilOptions): Promise<Extract<Value, UntilFalsy>>;
|
|
126
|
+
/**
|
|
127
|
+
* Resolve once the value is not `null`.
|
|
128
|
+
*
|
|
129
|
+
* @returns The value without `null`.
|
|
130
|
+
*/
|
|
131
|
+
toBeNull(options?: UntilOptions): Promise<Exclude<Value, null>>;
|
|
132
|
+
/**
|
|
133
|
+
* Resolve once the value is not `undefined`.
|
|
134
|
+
*
|
|
135
|
+
* @returns The value without `undefined`.
|
|
136
|
+
*/
|
|
137
|
+
toBeUndefined(options?: UntilOptions): Promise<Exclude<Value, undefined>>;
|
|
138
|
+
/**
|
|
139
|
+
* Resolve once the value no longer satisfies the predicate.
|
|
140
|
+
*
|
|
141
|
+
* @returns The value.
|
|
142
|
+
*/
|
|
143
|
+
toMatch(condition: (value: Value) => boolean, options?: UntilOptions): Promise<Value>;
|
|
144
|
+
}
|
|
145
|
+
/** Fluent wait builder returned by {@link until}. */
|
|
146
|
+
interface UntilChain<Value> extends UntilMatchers<Value> {
|
|
147
|
+
/** Inverted matchers. */
|
|
148
|
+
readonly not: UntilNegatedMatchers<Value>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Await a reactive source reaching a condition.
|
|
152
|
+
*
|
|
153
|
+
* Every matcher resolves immediately when the current value already
|
|
154
|
+
* satisfies it (except `changed`/`changedTimes`), and otherwise watches the
|
|
155
|
+
* source (`flush: "sync"` by default, which also works inside server-side
|
|
156
|
+
* `setup`). Result types are narrowed by the matcher: `toBeTruthy()` strips
|
|
157
|
+
* falsy members, `not.toBeNull()` strips `null`, `toMatch(guard)` follows the
|
|
158
|
+
* guard. Because a timeout rejects (it never resolves with an unmatched
|
|
159
|
+
* value), the narrowing is always sound. Watchers and timers are released
|
|
160
|
+
* as soon as the promise settles.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* const user = await until(currentUser).not.toBeNull({ timeout: 5_000 });
|
|
165
|
+
* const ready = await until(status).toBe("ready");
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @param source Ref or getter to observe.
|
|
169
|
+
* @throws Returned promises reject with an {@link UntilTimeoutError} on
|
|
170
|
+
* timeout, with the abort reason when the signal aborts, and with a
|
|
171
|
+
* `RangeError` tagged `VIZE_COMPOSE_UNTIL_INVALID_OPTION` for a negative or
|
|
172
|
+
* non-finite timeout or change count.
|
|
173
|
+
* @returns The fluent matcher chain.
|
|
174
|
+
*/
|
|
175
|
+
declare function until<Value>(source: MaybeRefOrGetter<Value>): UntilChain<Value>;
|
|
176
|
+
//#endregion
|
|
177
|
+
export { UntilChain, UntilMatchers, UntilNegatedMatchers, UntilOptions, UntilTimeoutCode, UntilTimeoutError, until };
|
package/dist/until.mjs
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { toValue, watch } from "vue";
|
|
2
|
+
//#region src/until.ts
|
|
3
|
+
const defaultScheduler = {
|
|
4
|
+
setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
|
|
5
|
+
clearTimeout: (handle) => {
|
|
6
|
+
globalThis.clearTimeout(handle);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
function createTimeoutError(timeout) {
|
|
10
|
+
return Object.assign(/* @__PURE__ */ new Error(`[VIZE_COMPOSE_UNTIL_TIMEOUT] condition not met within ${timeout}ms`), { code: "VIZE_COMPOSE_UNTIL_TIMEOUT" });
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Await a reactive source reaching a condition.
|
|
14
|
+
*
|
|
15
|
+
* Every matcher resolves immediately when the current value already
|
|
16
|
+
* satisfies it (except `changed`/`changedTimes`), and otherwise watches the
|
|
17
|
+
* source (`flush: "sync"` by default, which also works inside server-side
|
|
18
|
+
* `setup`). Result types are narrowed by the matcher: `toBeTruthy()` strips
|
|
19
|
+
* falsy members, `not.toBeNull()` strips `null`, `toMatch(guard)` follows the
|
|
20
|
+
* guard. Because a timeout rejects (it never resolves with an unmatched
|
|
21
|
+
* value), the narrowing is always sound. Watchers and timers are released
|
|
22
|
+
* as soon as the promise settles.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const user = await until(currentUser).not.toBeNull({ timeout: 5_000 });
|
|
27
|
+
* const ready = await until(status).toBe("ready");
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param source Ref or getter to observe.
|
|
31
|
+
* @throws Returned promises reject with an {@link UntilTimeoutError} on
|
|
32
|
+
* timeout, with the abort reason when the signal aborts, and with a
|
|
33
|
+
* `RangeError` tagged `VIZE_COMPOSE_UNTIL_INVALID_OPTION` for a negative or
|
|
34
|
+
* non-finite timeout or change count.
|
|
35
|
+
* @returns The fluent matcher chain.
|
|
36
|
+
*/
|
|
37
|
+
function until(source) {
|
|
38
|
+
const wait = (matches, options, checkInitial = true) => new Promise((resolve, reject) => {
|
|
39
|
+
const { timeout, signal, scheduler = defaultScheduler } = options;
|
|
40
|
+
if (timeout !== void 0 && (!Number.isFinite(timeout) || timeout < 0)) {
|
|
41
|
+
reject(/* @__PURE__ */ new RangeError(`[VIZE_COMPOSE_UNTIL_INVALID_OPTION] timeout must be finite and at least zero; received ${String(timeout)}`));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (signal?.aborted === true) {
|
|
45
|
+
reject(signal.reason);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let handle;
|
|
49
|
+
let timer;
|
|
50
|
+
let settled = false;
|
|
51
|
+
const onAbort = () => {
|
|
52
|
+
finish();
|
|
53
|
+
reject(signal?.reason);
|
|
54
|
+
};
|
|
55
|
+
const finish = () => {
|
|
56
|
+
settled = true;
|
|
57
|
+
handle?.stop();
|
|
58
|
+
if (timer !== void 0) scheduler.clearTimeout(timer);
|
|
59
|
+
signal?.removeEventListener("abort", onAbort);
|
|
60
|
+
};
|
|
61
|
+
const accept = (value) => {
|
|
62
|
+
if (settled || !matches(value)) return;
|
|
63
|
+
finish();
|
|
64
|
+
resolve(value);
|
|
65
|
+
};
|
|
66
|
+
if (checkInitial) accept(toValue(source));
|
|
67
|
+
if (settled) return;
|
|
68
|
+
handle = watch(() => toValue(source), accept, {
|
|
69
|
+
flush: options.flush ?? "sync",
|
|
70
|
+
deep: options.deep ?? false
|
|
71
|
+
});
|
|
72
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
73
|
+
if (timeout !== void 0) timer = scheduler.setTimeout(() => {
|
|
74
|
+
finish();
|
|
75
|
+
reject(createTimeoutError(timeout));
|
|
76
|
+
}, timeout);
|
|
77
|
+
});
|
|
78
|
+
const any = (_value) => true;
|
|
79
|
+
const changedTimes = (count, options = {}) => {
|
|
80
|
+
if (!Number.isSafeInteger(count) || count < 1) return Promise.reject(/* @__PURE__ */ new RangeError(`[VIZE_COMPOSE_UNTIL_INVALID_OPTION] count must be a positive integer; received ${String(count)}`));
|
|
81
|
+
let seen = 0;
|
|
82
|
+
return wait((value) => {
|
|
83
|
+
seen += 1;
|
|
84
|
+
return seen >= count && any(value);
|
|
85
|
+
}, options, false);
|
|
86
|
+
};
|
|
87
|
+
const includes = (value, element) => Array.isArray(value) ? value.includes(element) : typeof value === "string" && typeof element === "string" && value.includes(element);
|
|
88
|
+
function toMatch(condition, options = {}) {
|
|
89
|
+
return wait((value) => condition(value), options);
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
toMatch,
|
|
93
|
+
toBe: (expected, options = {}) => wait((value) => Object.is(value, toValue(expected)), options),
|
|
94
|
+
toBeTruthy: (options = {}) => wait((value) => Boolean(value), options),
|
|
95
|
+
toBeNull: (options = {}) => wait((value) => value === null, options),
|
|
96
|
+
toBeUndefined: (options = {}) => wait((value) => value === void 0, options),
|
|
97
|
+
toBeNaN: (options = {}) => wait((value) => Number.isNaN(value), options),
|
|
98
|
+
toContain: (element, options = {}) => wait((value) => includes(value, element), options),
|
|
99
|
+
changed: (options = {}) => changedTimes(1, options),
|
|
100
|
+
changedTimes,
|
|
101
|
+
not: {
|
|
102
|
+
toBe: (unexpected, options = {}) => wait((value) => !Object.is(value, toValue(unexpected)), options),
|
|
103
|
+
toBeTruthy: (options = {}) => wait((value) => !value, options),
|
|
104
|
+
toBeNull: (options = {}) => wait((value) => value !== null, options),
|
|
105
|
+
toBeUndefined: (options = {}) => wait((value) => value !== void 0, options),
|
|
106
|
+
toMatch: (condition, options = {}) => wait((value) => !condition(value), options)
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//#endregion
|
|
111
|
+
export { until };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-array.d.ts
|
|
4
|
+
/** Callback shape shared by the reactive array helpers. */
|
|
5
|
+
type ArrayCallback<Item, Result> = (item: Item, index: number, array: readonly Item[]) => Result;
|
|
6
|
+
/**
|
|
7
|
+
* Reactive `Array.prototype.filter`. A type-guard predicate narrows the
|
|
8
|
+
* element type.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const active = useArrayFilter(users, (user) => user.active);
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @param list Reactive array.
|
|
16
|
+
* @param predicate Keeps items for which it returns `true`.
|
|
17
|
+
* @returns Computed filtered copy.
|
|
18
|
+
*/
|
|
19
|
+
declare function useArrayFilter<Item, Narrowed extends Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: (item: Item, index: number, array: readonly Item[]) => item is Narrowed): ComputedRef<Narrowed[]>;
|
|
20
|
+
declare function useArrayFilter<Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: ArrayCallback<Item, boolean>): ComputedRef<Item[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Reactive `Array.prototype.map`.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const names = useArrayMap(users, (user) => user.name);
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @param list Reactive array.
|
|
30
|
+
* @param mapper Produces the mapped item.
|
|
31
|
+
* @returns Computed mapped copy.
|
|
32
|
+
*/
|
|
33
|
+
declare function useArrayMap<Item, Mapped>(list: MaybeRefOrGetter<readonly Item[]>, mapper: ArrayCallback<Item, Mapped>): ComputedRef<Mapped[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Reactive `Array.prototype.find`. A type-guard predicate narrows the
|
|
36
|
+
* result.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const admin = useArrayFind(users, (user) => user.role === "admin");
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @param list Reactive array.
|
|
44
|
+
* @param predicate Matches the wanted item.
|
|
45
|
+
* @returns Computed first match, or `undefined`.
|
|
46
|
+
*/
|
|
47
|
+
declare function useArrayFind<Item, Narrowed extends Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: (item: Item, index: number, array: readonly Item[]) => item is Narrowed): ComputedRef<Narrowed | undefined>;
|
|
48
|
+
declare function useArrayFind<Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: ArrayCallback<Item, boolean>): ComputedRef<Item | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* Reactive `Array.prototype.reduce`.
|
|
51
|
+
*
|
|
52
|
+
* With an initial value the result has the accumulator type. Without one,
|
|
53
|
+
* the first item seeds the accumulator and an empty array yields
|
|
54
|
+
* `undefined` (instead of throwing like `reduce`).
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const total = useArrayReduce(cart, (sum, line) => sum + line.price, 0);
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @param list Reactive array.
|
|
62
|
+
* @param reducer Folds one item into the accumulator.
|
|
63
|
+
* @param initial Reactive initial accumulator.
|
|
64
|
+
* @returns Computed accumulated value.
|
|
65
|
+
*/
|
|
66
|
+
declare function useArrayReduce<Item, Accumulator>(list: MaybeRefOrGetter<readonly Item[]>, reducer: (accumulator: Accumulator, item: Item, index: number, array: readonly Item[]) => Accumulator, initial: MaybeRefOrGetter<Accumulator>): ComputedRef<Accumulator>;
|
|
67
|
+
declare function useArrayReduce<Item>(list: MaybeRefOrGetter<readonly Item[]>, reducer: (accumulator: Item, item: Item, index: number, array: readonly Item[]) => Item): ComputedRef<Item | undefined>;
|
|
68
|
+
/**
|
|
69
|
+
* Reactive `Array.prototype.some`.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* const hasErrors = useArraySome(fields, (field) => field.error !== null);
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @param list Reactive array.
|
|
77
|
+
* @param predicate Condition tested per item.
|
|
78
|
+
* @returns Computed flag.
|
|
79
|
+
*/
|
|
80
|
+
declare function useArraySome<Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: ArrayCallback<Item, boolean>): ComputedRef<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Reactive `Array.prototype.every`.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const allDone = useArrayEvery(tasks, (task) => task.done);
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @param list Reactive array.
|
|
90
|
+
* @param predicate Condition tested per item.
|
|
91
|
+
* @returns Computed flag.
|
|
92
|
+
*/
|
|
93
|
+
declare function useArrayEvery<Item>(list: MaybeRefOrGetter<readonly Item[]>, predicate: ArrayCallback<Item, boolean>): ComputedRef<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Reactive de-duplication that keeps the first occurrence of each item.
|
|
96
|
+
*
|
|
97
|
+
* Without `isSame`, items are compared with `SameValueZero` (like `Set`) in
|
|
98
|
+
* linear time; with it, pairwise in quadratic time.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const tags = useArrayUnique(allTags);
|
|
103
|
+
* const people = useArrayUnique(rows, (left, right) => left.id === right.id);
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @param list Reactive array.
|
|
107
|
+
* @param isSame Custom equality.
|
|
108
|
+
* @returns Computed de-duplicated copy.
|
|
109
|
+
*/
|
|
110
|
+
declare function useArrayUnique<Item>(list: MaybeRefOrGetter<readonly Item[]>, isSame?: (left: Item, right: Item) => boolean): ComputedRef<Item[]>;
|
|
111
|
+
//#endregion
|
|
112
|
+
export { ArrayCallback, useArrayEvery, useArrayFilter, useArrayFind, useArrayMap, useArrayReduce, useArraySome, useArrayUnique };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
//#region src/use-array.ts
|
|
3
|
+
function useArrayFilter(list, predicate) {
|
|
4
|
+
return computed(() => toValue(list).filter(predicate));
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Reactive `Array.prototype.map`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const names = useArrayMap(users, (user) => user.name);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @param list Reactive array.
|
|
15
|
+
* @param mapper Produces the mapped item.
|
|
16
|
+
* @returns Computed mapped copy.
|
|
17
|
+
*/
|
|
18
|
+
function useArrayMap(list, mapper) {
|
|
19
|
+
return computed(() => toValue(list).map(mapper));
|
|
20
|
+
}
|
|
21
|
+
function useArrayFind(list, predicate) {
|
|
22
|
+
return computed(() => toValue(list).find(predicate));
|
|
23
|
+
}
|
|
24
|
+
function useArrayReduce(list, reducer, ...initial) {
|
|
25
|
+
return computed(() => {
|
|
26
|
+
const items = toValue(list);
|
|
27
|
+
const seeded = initial.length === 1;
|
|
28
|
+
if (!seeded && items.length === 0) return void 0;
|
|
29
|
+
let accumulator = seeded ? toValue(initial[0]) : items[0];
|
|
30
|
+
for (const [index, item] of items.entries()) if (seeded || index > 0) accumulator = reducer(accumulator, item, index, items);
|
|
31
|
+
return accumulator;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Reactive `Array.prototype.some`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const hasErrors = useArraySome(fields, (field) => field.error !== null);
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @param list Reactive array.
|
|
43
|
+
* @param predicate Condition tested per item.
|
|
44
|
+
* @returns Computed flag.
|
|
45
|
+
*/
|
|
46
|
+
function useArraySome(list, predicate) {
|
|
47
|
+
return computed(() => toValue(list).some(predicate));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Reactive `Array.prototype.every`.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* const allDone = useArrayEvery(tasks, (task) => task.done);
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @param list Reactive array.
|
|
58
|
+
* @param predicate Condition tested per item.
|
|
59
|
+
* @returns Computed flag.
|
|
60
|
+
*/
|
|
61
|
+
function useArrayEvery(list, predicate) {
|
|
62
|
+
return computed(() => toValue(list).every(predicate));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Reactive de-duplication that keeps the first occurrence of each item.
|
|
66
|
+
*
|
|
67
|
+
* Without `isSame`, items are compared with `SameValueZero` (like `Set`) in
|
|
68
|
+
* linear time; with it, pairwise in quadratic time.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const tags = useArrayUnique(allTags);
|
|
73
|
+
* const people = useArrayUnique(rows, (left, right) => left.id === right.id);
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @param list Reactive array.
|
|
77
|
+
* @param isSame Custom equality.
|
|
78
|
+
* @returns Computed de-duplicated copy.
|
|
79
|
+
*/
|
|
80
|
+
function useArrayUnique(list, isSame) {
|
|
81
|
+
return computed(() => {
|
|
82
|
+
const items = toValue(list);
|
|
83
|
+
if (isSame === void 0) return [...new Set(items)];
|
|
84
|
+
const unique = [];
|
|
85
|
+
for (const item of items) if (!unique.some((kept) => isSame(kept, item))) unique.push(item);
|
|
86
|
+
return unique;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { useArrayEvery, useArrayFilter, useArrayFind, useArrayMap, useArrayReduce, useArraySome, useArrayUnique };
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ComputedRef, ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-async-queue.d.ts
|
|
4
|
+
/** Lifecycle of one queued task. */
|
|
5
|
+
type AsyncQueueTaskState = "pending" | "running" | "fulfilled" | "rejected" | "aborted";
|
|
6
|
+
/** Outcome record of one queued task. */
|
|
7
|
+
interface AsyncQueueTaskResult<Data> {
|
|
8
|
+
/** Current lifecycle state. */
|
|
9
|
+
readonly state: AsyncQueueTaskState;
|
|
10
|
+
/** Resolved value once fulfilled. */
|
|
11
|
+
readonly data: Data | undefined;
|
|
12
|
+
/** Failure once rejected. */
|
|
13
|
+
readonly error: unknown;
|
|
14
|
+
}
|
|
15
|
+
/** Context passed to every queued task. */
|
|
16
|
+
interface AsyncQueueContext {
|
|
17
|
+
/** Aborted when the queue is aborted. */
|
|
18
|
+
readonly signal: AbortSignal;
|
|
19
|
+
}
|
|
20
|
+
/** Result of the task before position `Index` (`undefined` for the first). */
|
|
21
|
+
type AsyncQueuePrevious<Results extends readonly unknown[], Index> = Index extends keyof [undefined, ...Results] ? [undefined, ...Results][Index] : never;
|
|
22
|
+
/** One queued task: receives the previous result and resolves the next. */
|
|
23
|
+
type AsyncQueueTask<Previous, Result> = (previous: Previous, context: AsyncQueueContext) => Result | Promise<Result>;
|
|
24
|
+
/** Task tuple whose parameters chain the previous task's result. */
|
|
25
|
+
type AsyncQueueTasks<Results extends readonly unknown[]> = { readonly [Index in keyof Results]: (previous: AsyncQueuePrevious<Results, Index>, context: AsyncQueueContext) => Results[Index] | Promise<Results[Index]> };
|
|
26
|
+
/** Options for {@link useAsyncQueue}. */
|
|
27
|
+
interface UseAsyncQueueOptions {
|
|
28
|
+
/**
|
|
29
|
+
* Stop at the first rejection (remaining tasks become `"aborted"`).
|
|
30
|
+
*
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
readonly interrupt?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Start running right away.
|
|
36
|
+
*
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
readonly immediate?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* External cancellation; aborting it aborts the queue.
|
|
42
|
+
*
|
|
43
|
+
* @default undefined
|
|
44
|
+
*/
|
|
45
|
+
readonly signal?: AbortSignal;
|
|
46
|
+
/**
|
|
47
|
+
* Called when a task rejects.
|
|
48
|
+
*
|
|
49
|
+
* @default undefined
|
|
50
|
+
*/
|
|
51
|
+
readonly onError?: (error: unknown, index: number) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Called once the queue settles.
|
|
54
|
+
*
|
|
55
|
+
* @default undefined
|
|
56
|
+
*/
|
|
57
|
+
readonly onFinished?: () => void;
|
|
58
|
+
}
|
|
59
|
+
/** Queue state and controls returned by {@link useAsyncQueue}. */
|
|
60
|
+
interface AsyncQueue<Results extends readonly unknown[]> {
|
|
61
|
+
/** Index of the running task (`-1` before start, `length` when done). */
|
|
62
|
+
readonly activeIndex: Readonly<ShallowRef<number>>;
|
|
63
|
+
/** Per-task outcome records, typed per position. */
|
|
64
|
+
readonly results: Readonly<ShallowRef<{ readonly [Index in keyof Results]: AsyncQueueTaskResult<Results[Index]> }>>;
|
|
65
|
+
/** Whether the queue settled (all done, interrupted, or aborted). */
|
|
66
|
+
readonly isFinished: ComputedRef<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Run the queue (again) from the first task.
|
|
69
|
+
*
|
|
70
|
+
* @returns Settles with the final records.
|
|
71
|
+
*/
|
|
72
|
+
readonly run: () => Promise<{ readonly [Index in keyof Results]: AsyncQueueTaskResult<Results[Index]> }>;
|
|
73
|
+
/** Abort the running queue. */
|
|
74
|
+
readonly abort: (reason?: unknown) => void;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Run async tasks one after another, each receiving the previous result.
|
|
78
|
+
*
|
|
79
|
+
* Result types are inferred per position from the task tuple, and each
|
|
80
|
+
* task's `previous` parameter is contextually typed as the preceding task's
|
|
81
|
+
* result (up to six tasks; longer queues use the mapped-tuple signature with
|
|
82
|
+
* annotated parameters).
|
|
83
|
+
* Every task gets an `AbortSignal`; `abort()` (or the external signal)
|
|
84
|
+
* stops the queue and marks unfinished tasks `"aborted"`. A new `run()`
|
|
85
|
+
* aborts the one in flight. Starts on the server too when `immediate`, but
|
|
86
|
+
* nothing awaits it there, so markup shows the pending state on both sides.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* const { results } = useAsyncQueue([
|
|
91
|
+
* async () => fetchUser(),
|
|
92
|
+
* async (user) => fetchOrders(user.id),
|
|
93
|
+
* ]);
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @param tasks Ordered task tuple.
|
|
97
|
+
* @param options Interruption, start, cancellation, and callbacks.
|
|
98
|
+
* @default options {}
|
|
99
|
+
* @returns Queue state and controls.
|
|
100
|
+
*/
|
|
101
|
+
declare function useAsyncQueue<R1>(tasks: readonly [AsyncQueueTask<undefined, R1>], options?: UseAsyncQueueOptions): AsyncQueue<[R1]>;
|
|
102
|
+
declare function useAsyncQueue<R1, R2>(tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>], options?: UseAsyncQueueOptions): AsyncQueue<[R1, R2]>;
|
|
103
|
+
declare function useAsyncQueue<R1, R2, R3>(tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>, AsyncQueueTask<R2, R3>], options?: UseAsyncQueueOptions): AsyncQueue<[R1, R2, R3]>;
|
|
104
|
+
declare function useAsyncQueue<R1, R2, R3, R4>(tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>, AsyncQueueTask<R2, R3>, AsyncQueueTask<R3, R4>], options?: UseAsyncQueueOptions): AsyncQueue<[R1, R2, R3, R4]>;
|
|
105
|
+
declare function useAsyncQueue<R1, R2, R3, R4, R5>(tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>, AsyncQueueTask<R2, R3>, AsyncQueueTask<R3, R4>, AsyncQueueTask<R4, R5>], options?: UseAsyncQueueOptions): AsyncQueue<[R1, R2, R3, R4, R5]>;
|
|
106
|
+
declare function useAsyncQueue<R1, R2, R3, R4, R5, R6>(tasks: readonly [AsyncQueueTask<undefined, R1>, AsyncQueueTask<R1, R2>, AsyncQueueTask<R2, R3>, AsyncQueueTask<R3, R4>, AsyncQueueTask<R4, R5>, AsyncQueueTask<R5, R6>], options?: UseAsyncQueueOptions): AsyncQueue<[R1, R2, R3, R4, R5, R6]>;
|
|
107
|
+
declare function useAsyncQueue<Results extends readonly unknown[]>(tasks: AsyncQueueTasks<Results>, options?: UseAsyncQueueOptions): AsyncQueue<Results>;
|
|
108
|
+
//#endregion
|
|
109
|
+
export { AsyncQueue, AsyncQueueContext, AsyncQueuePrevious, AsyncQueueTask, AsyncQueueTaskResult, AsyncQueueTaskState, AsyncQueueTasks, UseAsyncQueueOptions, useAsyncQueue };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { computed, shallowRef } from "vue";
|
|
2
|
+
//#region src/use-async-queue.ts
|
|
3
|
+
function useAsyncQueue(tasks, options = {}) {
|
|
4
|
+
const pendingRecords = () => tasks.map(() => ({
|
|
5
|
+
state: "pending",
|
|
6
|
+
data: void 0,
|
|
7
|
+
error: void 0
|
|
8
|
+
}));
|
|
9
|
+
const activeIndex = shallowRef(-1);
|
|
10
|
+
const results = shallowRef(pendingRecords());
|
|
11
|
+
const isFinished = computed(() => activeIndex.value >= tasks.length);
|
|
12
|
+
let controller;
|
|
13
|
+
const update = (index, record) => {
|
|
14
|
+
results.value = results.value.map((current, position) => position === index ? record : current);
|
|
15
|
+
};
|
|
16
|
+
const abortRemaining = (from) => {
|
|
17
|
+
results.value = results.value.map((current, position) => position >= from && (current.state === "pending" || current.state === "running") ? {
|
|
18
|
+
state: "aborted",
|
|
19
|
+
data: void 0,
|
|
20
|
+
error: current.error
|
|
21
|
+
} : current);
|
|
22
|
+
};
|
|
23
|
+
const finish = () => {
|
|
24
|
+
activeIndex.value = tasks.length;
|
|
25
|
+
options.onFinished?.();
|
|
26
|
+
};
|
|
27
|
+
const abortRun = (run, reason) => {
|
|
28
|
+
if (run.signal.aborted) return;
|
|
29
|
+
run.abort(reason);
|
|
30
|
+
if (controller !== run) return;
|
|
31
|
+
abortRemaining(0);
|
|
32
|
+
finish();
|
|
33
|
+
};
|
|
34
|
+
const run = async () => {
|
|
35
|
+
controller?.abort();
|
|
36
|
+
const own = new AbortController();
|
|
37
|
+
controller = own;
|
|
38
|
+
results.value = pendingRecords();
|
|
39
|
+
const external = options.signal;
|
|
40
|
+
const onExternalAbort = () => abortRun(own, external?.reason);
|
|
41
|
+
if (external?.aborted === true) {
|
|
42
|
+
abortRun(own, external.reason);
|
|
43
|
+
return results.value;
|
|
44
|
+
}
|
|
45
|
+
external?.addEventListener("abort", onExternalAbort, { once: true });
|
|
46
|
+
let previous;
|
|
47
|
+
try {
|
|
48
|
+
for (const [index, task] of tasks.entries()) {
|
|
49
|
+
activeIndex.value = index;
|
|
50
|
+
update(index, {
|
|
51
|
+
state: "running",
|
|
52
|
+
data: void 0,
|
|
53
|
+
error: void 0
|
|
54
|
+
});
|
|
55
|
+
try {
|
|
56
|
+
previous = await task(previous, { signal: own.signal });
|
|
57
|
+
if (own.signal.aborted) return results.value;
|
|
58
|
+
update(index, {
|
|
59
|
+
state: "fulfilled",
|
|
60
|
+
data: previous,
|
|
61
|
+
error: void 0
|
|
62
|
+
});
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (own.signal.aborted) return results.value;
|
|
65
|
+
update(index, {
|
|
66
|
+
state: "rejected",
|
|
67
|
+
data: void 0,
|
|
68
|
+
error
|
|
69
|
+
});
|
|
70
|
+
options.onError?.(error, index);
|
|
71
|
+
if (options.interrupt ?? true) {
|
|
72
|
+
abortRemaining(index + 1);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
previous = void 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
finish();
|
|
79
|
+
return results.value;
|
|
80
|
+
} finally {
|
|
81
|
+
external?.removeEventListener("abort", onExternalAbort);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
if (options.immediate ?? true) run();
|
|
85
|
+
return {
|
|
86
|
+
activeIndex,
|
|
87
|
+
results,
|
|
88
|
+
isFinished,
|
|
89
|
+
run,
|
|
90
|
+
abort: (reason) => {
|
|
91
|
+
if (controller !== void 0) abortRun(controller, reason);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
96
|
+
export { useAsyncQueue };
|