@vizejs/composable 0.426.3 → 0.428.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { computed, shallowRef } from "vue";
|
|
2
|
+
//#region src/use-stack.ts
|
|
3
|
+
function validateCapacity(capacity) {
|
|
4
|
+
if (capacity === Number.POSITIVE_INFINITY) return capacity;
|
|
5
|
+
if (!Number.isSafeInteger(capacity) || capacity < 1) throw new RangeError(`[VIZE_COMPOSE_STACK_INVALID_CAPACITY] capacity must be a positive integer or Infinity; received ${String(capacity)}`);
|
|
6
|
+
return capacity;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Create a typed reactive LIFO stack.
|
|
10
|
+
*
|
|
11
|
+
* `push` and `pop` are O(1). A bounded stack either drops its bottom item
|
|
12
|
+
* or rejects new pushes when full. Reactivity is driven by a version
|
|
13
|
+
* counter, so `items`, `size`, `isEmpty`, and `peek` re-evaluate after
|
|
14
|
+
* every mutation.
|
|
15
|
+
*
|
|
16
|
+
* Purely synchronous state: safe during server rendering (no host globals,
|
|
17
|
+
* no timers) and nothing to dispose.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const breadcrumbs = useStack<string>(["home"]);
|
|
22
|
+
* breadcrumbs.push("settings");
|
|
23
|
+
* breadcrumbs.pop(); // "settings"
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @typeParam Item Stacked item type, inferred from `initial` when given.
|
|
27
|
+
* @param initial Items pushed at creation, bottom first (overflow applies).
|
|
28
|
+
* @param options Capacity and overflow policy.
|
|
29
|
+
* @default initial []
|
|
30
|
+
* @default options {}
|
|
31
|
+
* @throws {RangeError} `[VIZE_COMPOSE_STACK_INVALID_CAPACITY]` when `capacity`
|
|
32
|
+
* is not a positive integer or `Infinity`.
|
|
33
|
+
* @returns The reactive stack and its controls.
|
|
34
|
+
*/
|
|
35
|
+
function useStack(initial = [], options = {}) {
|
|
36
|
+
const capacity = validateCapacity(options.capacity ?? Number.POSITIVE_INFINITY);
|
|
37
|
+
const overflow = options.overflow ?? "drop-oldest";
|
|
38
|
+
let buffer = [];
|
|
39
|
+
const version = shallowRef(0);
|
|
40
|
+
const touch = () => {
|
|
41
|
+
version.value += 1;
|
|
42
|
+
};
|
|
43
|
+
const append = (items) => {
|
|
44
|
+
let accepted = 0;
|
|
45
|
+
let dropped = 0;
|
|
46
|
+
for (const item of items) {
|
|
47
|
+
if (buffer.length - dropped >= capacity) {
|
|
48
|
+
if (overflow === "reject") continue;
|
|
49
|
+
dropped += 1;
|
|
50
|
+
}
|
|
51
|
+
buffer.push(item);
|
|
52
|
+
accepted += 1;
|
|
53
|
+
}
|
|
54
|
+
if (dropped > 0) buffer = buffer.slice(dropped);
|
|
55
|
+
return accepted;
|
|
56
|
+
};
|
|
57
|
+
append([...initial]);
|
|
58
|
+
const items = computed(() => {
|
|
59
|
+
version.value;
|
|
60
|
+
return buffer.slice();
|
|
61
|
+
});
|
|
62
|
+
const size = computed(() => {
|
|
63
|
+
version.value;
|
|
64
|
+
return buffer.length;
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
items,
|
|
68
|
+
size,
|
|
69
|
+
isEmpty: computed(() => size.value === 0),
|
|
70
|
+
peek: () => {
|
|
71
|
+
version.value;
|
|
72
|
+
return buffer.at(-1);
|
|
73
|
+
},
|
|
74
|
+
push: (...added) => {
|
|
75
|
+
const accepted = append(added);
|
|
76
|
+
if (accepted > 0) touch();
|
|
77
|
+
return accepted;
|
|
78
|
+
},
|
|
79
|
+
pop: () => {
|
|
80
|
+
if (buffer.length === 0) return void 0;
|
|
81
|
+
const item = buffer.pop();
|
|
82
|
+
touch();
|
|
83
|
+
return item;
|
|
84
|
+
},
|
|
85
|
+
clear: () => {
|
|
86
|
+
if (buffer.length === 0) return;
|
|
87
|
+
buffer = [];
|
|
88
|
+
touch();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//#endregion
|
|
93
|
+
export { useStack };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ComputedRef, ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-stepper.d.ts
|
|
4
|
+
/** Step values keyed by step name. */
|
|
5
|
+
type StepValues<Name extends string> = { readonly [Step in Name]: unknown };
|
|
6
|
+
/** Stepper state and navigation returned by {@link useStepper}. */
|
|
7
|
+
interface Stepper<Name extends string, Values extends StepValues<Name>> {
|
|
8
|
+
/** Step names in order. */
|
|
9
|
+
readonly stepNames: readonly Name[];
|
|
10
|
+
/** Zero-based index of the current step. */
|
|
11
|
+
readonly index: Readonly<ShallowRef<number>>;
|
|
12
|
+
/** Name of the current step. */
|
|
13
|
+
readonly current: ComputedRef<Name>;
|
|
14
|
+
/** Value of the current step (the name itself for array steps). */
|
|
15
|
+
readonly currentValue: ComputedRef<Values[Name]>;
|
|
16
|
+
/** Name of the next step, or `undefined` on the last. */
|
|
17
|
+
readonly next: ComputedRef<Name | undefined>;
|
|
18
|
+
/** Name of the previous step, or `undefined` on the first. */
|
|
19
|
+
readonly previous: ComputedRef<Name | undefined>;
|
|
20
|
+
/** Whether the current step is the first. */
|
|
21
|
+
readonly isFirst: ComputedRef<boolean>;
|
|
22
|
+
/** Whether the current step is the last. */
|
|
23
|
+
readonly isLast: ComputedRef<boolean>;
|
|
24
|
+
/** Step name at `index`, or `undefined`. */
|
|
25
|
+
readonly at: (index: number) => Name | undefined;
|
|
26
|
+
/** Value of a step. */
|
|
27
|
+
readonly get: <Step extends Name>(step: Step) => Values[Step];
|
|
28
|
+
/** Jump to a step. */
|
|
29
|
+
readonly goTo: (step: Name) => void;
|
|
30
|
+
/** Advance one step (no-op on the last). */
|
|
31
|
+
readonly goToNext: () => void;
|
|
32
|
+
/** Go back one step (no-op on the first). */
|
|
33
|
+
readonly goToPrevious: () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Go back to an earlier step; later or current steps are ignored.
|
|
36
|
+
*
|
|
37
|
+
* @returns Whether the cursor moved.
|
|
38
|
+
*/
|
|
39
|
+
readonly goBackTo: (step: Name) => boolean;
|
|
40
|
+
/** Whether `step` is the current step. */
|
|
41
|
+
readonly isCurrent: (step: Name) => boolean;
|
|
42
|
+
/** Whether `step` is the step right after the current one. */
|
|
43
|
+
readonly isNext: (step: Name) => boolean;
|
|
44
|
+
/** Whether `step` is the step right before the current one. */
|
|
45
|
+
readonly isPrevious: (step: Name) => boolean;
|
|
46
|
+
/** Whether `step` comes before the current step. */
|
|
47
|
+
readonly isBefore: (step: Name) => boolean;
|
|
48
|
+
/** Whether `step` comes after the current step. */
|
|
49
|
+
readonly isAfter: (step: Name) => boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Linear multi-step flow (wizards, onboarding, checkout) with typed step
|
|
53
|
+
* names.
|
|
54
|
+
*
|
|
55
|
+
* Pass a tuple of names (`["account", "billing", "review"] as const`, or a
|
|
56
|
+
* plain array literal thanks to `const` inference) or an object whose keys
|
|
57
|
+
* are the names and whose values carry per-step data; every navigation
|
|
58
|
+
* method only accepts declared names. Synchronous state: SSR-safe and
|
|
59
|
+
* nothing to dispose.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const wizard = useStepper(["account", "billing", "review"]);
|
|
64
|
+
* wizard.goTo("billing");
|
|
65
|
+
* wizard.goTo("shipping"); // type error
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @param steps Step names, or step values keyed by name.
|
|
69
|
+
* @param initial Step to start on.
|
|
70
|
+
* @default initial the first step
|
|
71
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_STEPPER_EMPTY` when there are no
|
|
72
|
+
* steps, and `RangeError` tagged `VIZE_COMPOSE_STEPPER_UNKNOWN_STEP` for an
|
|
73
|
+
* unknown step name at runtime.
|
|
74
|
+
* @returns Stepper state and navigation.
|
|
75
|
+
*/
|
|
76
|
+
declare function useStepper<const Steps extends readonly string[]>(steps: Steps, initial?: NoInfer<Steps[number]>): Stepper<Steps[number], { readonly [Step in Steps[number]]: Step }>;
|
|
77
|
+
declare function useStepper<Steps extends Readonly<Record<string, unknown>>>(steps: Steps, initial?: NoInfer<keyof Steps & string>): Stepper<keyof Steps & string, Steps>;
|
|
78
|
+
//#endregion
|
|
79
|
+
export { StepValues, Stepper, useStepper };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { computed, shallowRef } from "vue";
|
|
2
|
+
//#region src/use-stepper.ts
|
|
3
|
+
function useStepper(steps, initial) {
|
|
4
|
+
const names = isNameList(steps) ? [...steps] : Object.keys(steps);
|
|
5
|
+
const values = isNameList(steps) ? Object.fromEntries(steps.map((name) => [name, name])) : steps;
|
|
6
|
+
if (names.length === 0) throw new RangeError("[VIZE_COMPOSE_STEPPER_EMPTY] useStepper needs at least one step");
|
|
7
|
+
const indexOf = (step) => {
|
|
8
|
+
const found = names.indexOf(step);
|
|
9
|
+
if (found === -1) throw new RangeError(`[VIZE_COMPOSE_STEPPER_UNKNOWN_STEP] unknown step "${step}"`);
|
|
10
|
+
return found;
|
|
11
|
+
};
|
|
12
|
+
const index = shallowRef(initial === void 0 ? 0 : indexOf(initial));
|
|
13
|
+
const at = (position) => names[position];
|
|
14
|
+
const current = computed(() => names[index.value] ?? "");
|
|
15
|
+
return {
|
|
16
|
+
stepNames: names,
|
|
17
|
+
index,
|
|
18
|
+
current,
|
|
19
|
+
currentValue: computed(() => values[current.value]),
|
|
20
|
+
next: computed(() => at(index.value + 1)),
|
|
21
|
+
previous: computed(() => at(index.value - 1)),
|
|
22
|
+
isFirst: computed(() => index.value === 0),
|
|
23
|
+
isLast: computed(() => index.value === names.length - 1),
|
|
24
|
+
at,
|
|
25
|
+
get: (step) => values[step],
|
|
26
|
+
goTo: (step) => {
|
|
27
|
+
index.value = indexOf(step);
|
|
28
|
+
},
|
|
29
|
+
goToNext: () => {
|
|
30
|
+
if (index.value < names.length - 1) index.value += 1;
|
|
31
|
+
},
|
|
32
|
+
goToPrevious: () => {
|
|
33
|
+
if (index.value > 0) index.value -= 1;
|
|
34
|
+
},
|
|
35
|
+
goBackTo: (step) => {
|
|
36
|
+
const target = indexOf(step);
|
|
37
|
+
if (target >= index.value) return false;
|
|
38
|
+
index.value = target;
|
|
39
|
+
return true;
|
|
40
|
+
},
|
|
41
|
+
isCurrent: (step) => indexOf(step) === index.value,
|
|
42
|
+
isNext: (step) => indexOf(step) === index.value + 1,
|
|
43
|
+
isPrevious: (step) => indexOf(step) === index.value - 1,
|
|
44
|
+
isBefore: (step) => indexOf(step) < index.value,
|
|
45
|
+
isAfter: (step) => indexOf(step) > index.value
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function isNameList(steps) {
|
|
49
|
+
return Array.isArray(steps);
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { useStepper };
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { n as IntervalScheduler } from "./use-interval-BA55gTHT.mjs";
|
|
2
|
+
import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
//#region src/use-storage-estimate.d.ts
|
|
5
|
+
/** Result of `navigator.storage.estimate()`. */
|
|
6
|
+
interface StorageEstimateLike {
|
|
7
|
+
/** Bytes used by the origin. */
|
|
8
|
+
readonly usage?: number | undefined;
|
|
9
|
+
/** Bytes available to the origin. */
|
|
10
|
+
readonly quota?: number | undefined;
|
|
11
|
+
/** Per-storage-system usage in bytes (Chromium only). */
|
|
12
|
+
readonly usageDetails?: Readonly<Record<string, number>> | undefined;
|
|
13
|
+
}
|
|
14
|
+
/** Minimal `StorageManager` (`navigator.storage`) used by this module. */
|
|
15
|
+
interface StorageManagerLike {
|
|
16
|
+
/** Estimate usage and quota. */
|
|
17
|
+
estimate?(): Promise<StorageEstimateLike>;
|
|
18
|
+
/** Whether storage is already persistent. */
|
|
19
|
+
persisted?(): Promise<boolean>;
|
|
20
|
+
/** Request persistent storage. */
|
|
21
|
+
persist?(): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
/** Options for {@link useStorageEstimate}. */
|
|
24
|
+
interface UseStorageEstimateOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Storage manager for alternate runtimes and tests.
|
|
27
|
+
*
|
|
28
|
+
* @default window.navigator.storage when it exists
|
|
29
|
+
*/
|
|
30
|
+
readonly storage?: MaybeRefOrGetter<StorageManagerLike | null | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Estimate as soon as the composable is created (browser only).
|
|
33
|
+
*
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
readonly immediate?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Re-estimate every `interval` milliseconds; `0` disables polling.
|
|
39
|
+
*
|
|
40
|
+
* @default 0
|
|
41
|
+
*/
|
|
42
|
+
readonly interval?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Owns the polling timer.
|
|
45
|
+
*
|
|
46
|
+
* @default window timer functions (no timer without a browser window)
|
|
47
|
+
*/
|
|
48
|
+
readonly scheduler?: IntervalScheduler;
|
|
49
|
+
}
|
|
50
|
+
/** Reactive state and actions returned by {@link useStorageEstimate}. */
|
|
51
|
+
interface StorageEstimateControls {
|
|
52
|
+
/** Whether `navigator.storage.estimate` is available. */
|
|
53
|
+
readonly supported: ComputedRef<boolean>;
|
|
54
|
+
/** Bytes used, or `null` before the first estimate. */
|
|
55
|
+
readonly usage: Readonly<Ref<number | null>>;
|
|
56
|
+
/** Bytes available, or `null` before the first estimate. */
|
|
57
|
+
readonly quota: Readonly<Ref<number | null>>;
|
|
58
|
+
/** Per-storage-system usage, or `null` when the browser does not report it. */
|
|
59
|
+
readonly usageDetails: Readonly<ShallowRef<Readonly<Record<string, number>> | null>>;
|
|
60
|
+
/** Usage as a percentage (0..100) of quota, or `null` when unknown. */
|
|
61
|
+
readonly percentUsed: ComputedRef<number | null>;
|
|
62
|
+
/** Most recent estimate failure, cleared on success. */
|
|
63
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
64
|
+
/**
|
|
65
|
+
* Re-read the estimate.
|
|
66
|
+
*
|
|
67
|
+
* @returns Whether a fresh estimate was stored.
|
|
68
|
+
*/
|
|
69
|
+
readonly refresh: () => Promise<boolean>;
|
|
70
|
+
}
|
|
71
|
+
/** Options for {@link usePersistentStorage}. */
|
|
72
|
+
interface UsePersistentStorageOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Storage manager for alternate runtimes and tests.
|
|
75
|
+
*
|
|
76
|
+
* @default window.navigator.storage when it exists
|
|
77
|
+
*/
|
|
78
|
+
readonly storage?: MaybeRefOrGetter<StorageManagerLike | null | undefined>;
|
|
79
|
+
/**
|
|
80
|
+
* Read `persisted()` as soon as the composable is created (browser only).
|
|
81
|
+
*
|
|
82
|
+
* @default true
|
|
83
|
+
*/
|
|
84
|
+
readonly immediate?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** Reactive state and actions returned by {@link usePersistentStorage}. */
|
|
87
|
+
interface PersistentStorageControls {
|
|
88
|
+
/** Whether `navigator.storage.persist` is available. */
|
|
89
|
+
readonly supported: ComputedRef<boolean>;
|
|
90
|
+
/** Whether the origin's storage is persistent (`false` until known). */
|
|
91
|
+
readonly persisted: Readonly<Ref<boolean>>;
|
|
92
|
+
/** Most recent failure, cleared on success. */
|
|
93
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
94
|
+
/**
|
|
95
|
+
* Request persistent storage.
|
|
96
|
+
*
|
|
97
|
+
* @returns Whether storage is persistent afterwards; `false` when unsupported.
|
|
98
|
+
*/
|
|
99
|
+
readonly persist: () => Promise<boolean>;
|
|
100
|
+
/**
|
|
101
|
+
* Re-read `persisted()`.
|
|
102
|
+
*
|
|
103
|
+
* @returns The current persistence state.
|
|
104
|
+
*/
|
|
105
|
+
readonly check: () => Promise<boolean>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Track the origin's storage usage and quota with `navigator.storage.estimate()`.
|
|
109
|
+
*
|
|
110
|
+
* The estimate is read on creation (unless `immediate` is false), whenever a
|
|
111
|
+
* reactive `storage` host changes, on `refresh()`, and every `interval`
|
|
112
|
+
* milliseconds through the injectable `scheduler`. The polling timer stops
|
|
113
|
+
* with the owning reactive scope; outside a scope, polling runs until the
|
|
114
|
+
* page unloads, so leave `interval` at `0` there.
|
|
115
|
+
*
|
|
116
|
+
* Server rendering: nothing is read, no timer starts, `supported` is false
|
|
117
|
+
* and every value is `null`.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* const { usage, quota, percentUsed } = useStorageEstimate({ interval: 60_000 });
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @param options Storage host, polling interval and scheduler.
|
|
125
|
+
* @default options {}
|
|
126
|
+
* @returns Storage usage state and a refresh action.
|
|
127
|
+
*/
|
|
128
|
+
declare function useStorageEstimate(options?: UseStorageEstimateOptions): StorageEstimateControls;
|
|
129
|
+
/**
|
|
130
|
+
* Read and request persistent storage with `navigator.storage.persist()`.
|
|
131
|
+
*
|
|
132
|
+
* Persistent storage is not evicted under storage pressure. `persist()` may
|
|
133
|
+
* show a prompt or be decided silently by the browser; the result is stored
|
|
134
|
+
* in `persisted`. Nothing needs cleanup; a pending read is ignored after the
|
|
135
|
+
* owning reactive scope stops.
|
|
136
|
+
*
|
|
137
|
+
* Server rendering: nothing is read, `supported` and `persisted` are false.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```ts
|
|
141
|
+
* const storage = usePersistentStorage();
|
|
142
|
+
* const keepOfflineData = () => storage.persist();
|
|
143
|
+
* ```
|
|
144
|
+
*
|
|
145
|
+
* @param options Storage host and initial read policy.
|
|
146
|
+
* @default options {}
|
|
147
|
+
* @returns Persistence state and actions.
|
|
148
|
+
*/
|
|
149
|
+
declare function usePersistentStorage(options?: UsePersistentStorageOptions): PersistentStorageControls;
|
|
150
|
+
//#endregion
|
|
151
|
+
export { PersistentStorageControls, StorageEstimateControls, StorageEstimateLike, StorageManagerLike, UsePersistentStorageOptions, UseStorageEstimateOptions, usePersistentStorage, useStorageEstimate };
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { tryOnScopeDispose } from "./scope.mjs";
|
|
2
|
+
import { computed, hasInjectionContext, readonly, ref, shallowRef, toValue, watch, watchPostEffect } from "vue";
|
|
3
|
+
//#region src/use-storage-estimate.ts
|
|
4
|
+
function browserStorage() {
|
|
5
|
+
if (typeof window === "undefined") return void 0;
|
|
6
|
+
const { navigator } = window;
|
|
7
|
+
return "storage" in navigator && navigator.storage ? navigator.storage : void 0;
|
|
8
|
+
}
|
|
9
|
+
function browserScheduler() {
|
|
10
|
+
if (typeof window === "undefined") return void 0;
|
|
11
|
+
return {
|
|
12
|
+
setInterval: (callback, intervalMs) => window.setInterval(callback, intervalMs),
|
|
13
|
+
clearInterval: (handle) => {
|
|
14
|
+
if (typeof handle === "number") window.clearInterval(handle);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function resolver(source) {
|
|
19
|
+
return () => source === void 0 ? browserStorage() : toValue(source) ?? void 0;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Track the origin's storage usage and quota with `navigator.storage.estimate()`.
|
|
23
|
+
*
|
|
24
|
+
* The estimate is read on creation (unless `immediate` is false), whenever a
|
|
25
|
+
* reactive `storage` host changes, on `refresh()`, and every `interval`
|
|
26
|
+
* milliseconds through the injectable `scheduler`. The polling timer stops
|
|
27
|
+
* with the owning reactive scope; outside a scope, polling runs until the
|
|
28
|
+
* page unloads, so leave `interval` at `0` there.
|
|
29
|
+
*
|
|
30
|
+
* Server rendering: nothing is read, no timer starts, `supported` is false
|
|
31
|
+
* and every value is `null`.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const { usage, quota, percentUsed } = useStorageEstimate({ interval: 60_000 });
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param options Storage host, polling interval and scheduler.
|
|
39
|
+
* @default options {}
|
|
40
|
+
* @returns Storage usage state and a refresh action.
|
|
41
|
+
*/
|
|
42
|
+
function useStorageEstimate(options = {}) {
|
|
43
|
+
const { immediate = true, interval = 0 } = options;
|
|
44
|
+
if (!Number.isFinite(interval) || interval < 0) throw new RangeError(`[VIZE_COMPOSE_STORAGE_ESTIMATE_INVALID_INTERVAL] interval must be a non-negative finite number; received ${interval}.`);
|
|
45
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
46
|
+
if (!hydrated.value) watchPostEffect(() => {
|
|
47
|
+
hydrated.value = true;
|
|
48
|
+
});
|
|
49
|
+
const resolveStorageNow = resolver(options.storage);
|
|
50
|
+
const resolveStorage = () => hydrated.value ? resolveStorageNow() : void 0;
|
|
51
|
+
const usage = ref(null);
|
|
52
|
+
const quota = ref(null);
|
|
53
|
+
const usageDetails = shallowRef(null);
|
|
54
|
+
const error = shallowRef(void 0);
|
|
55
|
+
let generation = 0;
|
|
56
|
+
const refresh = async () => {
|
|
57
|
+
const storage = resolveStorage();
|
|
58
|
+
if (!storage?.estimate) return false;
|
|
59
|
+
const current = ++generation;
|
|
60
|
+
try {
|
|
61
|
+
const estimate = await storage.estimate();
|
|
62
|
+
if (current !== generation) return false;
|
|
63
|
+
usage.value = estimate.usage ?? null;
|
|
64
|
+
quota.value = estimate.quota ?? null;
|
|
65
|
+
usageDetails.value = estimate.usageDetails ?? null;
|
|
66
|
+
error.value = void 0;
|
|
67
|
+
return true;
|
|
68
|
+
} catch (cause) {
|
|
69
|
+
if (current === generation) error.value = cause;
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
watch(resolveStorage, (storage, _previous, onCleanup) => {
|
|
74
|
+
generation += 1;
|
|
75
|
+
usage.value = null;
|
|
76
|
+
quota.value = null;
|
|
77
|
+
usageDetails.value = null;
|
|
78
|
+
error.value = void 0;
|
|
79
|
+
if (!storage?.estimate) return;
|
|
80
|
+
if (immediate) refresh();
|
|
81
|
+
const scheduler = options.scheduler ?? browserScheduler();
|
|
82
|
+
if (interval === 0 || !scheduler) return;
|
|
83
|
+
const handle = scheduler.setInterval(() => void refresh(), interval);
|
|
84
|
+
onCleanup(() => scheduler.clearInterval(handle));
|
|
85
|
+
}, { immediate: true });
|
|
86
|
+
tryOnScopeDispose(() => {
|
|
87
|
+
generation += 1;
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
supported: computed(() => resolveStorage()?.estimate !== void 0),
|
|
91
|
+
usage: readonly(usage),
|
|
92
|
+
quota: readonly(quota),
|
|
93
|
+
usageDetails: readonly(usageDetails),
|
|
94
|
+
percentUsed: computed(() => usage.value === null || quota.value === null || quota.value <= 0 ? null : usage.value / quota.value * 100),
|
|
95
|
+
error: readonly(error),
|
|
96
|
+
refresh
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read and request persistent storage with `navigator.storage.persist()`.
|
|
101
|
+
*
|
|
102
|
+
* Persistent storage is not evicted under storage pressure. `persist()` may
|
|
103
|
+
* show a prompt or be decided silently by the browser; the result is stored
|
|
104
|
+
* in `persisted`. Nothing needs cleanup; a pending read is ignored after the
|
|
105
|
+
* owning reactive scope stops.
|
|
106
|
+
*
|
|
107
|
+
* Server rendering: nothing is read, `supported` and `persisted` are false.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* const storage = usePersistentStorage();
|
|
112
|
+
* const keepOfflineData = () => storage.persist();
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @param options Storage host and initial read policy.
|
|
116
|
+
* @default options {}
|
|
117
|
+
* @returns Persistence state and actions.
|
|
118
|
+
*/
|
|
119
|
+
function usePersistentStorage(options = {}) {
|
|
120
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
121
|
+
if (!hydrated.value) watchPostEffect(() => {
|
|
122
|
+
hydrated.value = true;
|
|
123
|
+
});
|
|
124
|
+
const resolveStorageNow = resolver(options.storage);
|
|
125
|
+
const resolveStorage = () => hydrated.value ? resolveStorageNow() : void 0;
|
|
126
|
+
const persisted = ref(false);
|
|
127
|
+
const error = shallowRef(void 0);
|
|
128
|
+
let active = true;
|
|
129
|
+
const call = async (method) => {
|
|
130
|
+
const storage = resolveStorage();
|
|
131
|
+
const read = storage?.[method];
|
|
132
|
+
if (!read) return false;
|
|
133
|
+
try {
|
|
134
|
+
const value = await read.call(storage);
|
|
135
|
+
if (active) {
|
|
136
|
+
persisted.value = value;
|
|
137
|
+
error.value = void 0;
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
} catch (cause) {
|
|
141
|
+
if (active) error.value = cause;
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const check = () => call("persisted");
|
|
146
|
+
const persist = () => call("persist");
|
|
147
|
+
if (options.immediate ?? true) {
|
|
148
|
+
let checked = false;
|
|
149
|
+
watch(() => resolveStorage() !== void 0, (ready) => {
|
|
150
|
+
if (!ready || checked) return;
|
|
151
|
+
checked = true;
|
|
152
|
+
check();
|
|
153
|
+
}, {
|
|
154
|
+
immediate: true,
|
|
155
|
+
flush: "sync"
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
tryOnScopeDispose(() => {
|
|
159
|
+
active = false;
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
supported: computed(() => resolveStorage()?.persist !== void 0),
|
|
163
|
+
persisted: readonly(persisted),
|
|
164
|
+
error: readonly(error),
|
|
165
|
+
persist,
|
|
166
|
+
check
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//#endregion
|
|
170
|
+
export { usePersistentStorage, useStorageEstimate };
|