@vizejs/composable 0.426.2 → 0.427.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
package/dist/use-hid.mjs
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { tryOnScopeDispose } from "./scope.mjs";
|
|
2
|
+
import { computed, hasInjectionContext, readonly, shallowReadonly, shallowRef, toValue, watch, watchPostEffect } from "vue";
|
|
3
|
+
//#region src/use-hid.ts
|
|
4
|
+
function browserHIDHost() {
|
|
5
|
+
if (typeof window === "undefined") return void 0;
|
|
6
|
+
const { navigator } = window;
|
|
7
|
+
const hid = "hid" in navigator ? navigator.hid : void 0;
|
|
8
|
+
return isHIDHost(hid) ? hid : void 0;
|
|
9
|
+
}
|
|
10
|
+
function isHIDHost(value) {
|
|
11
|
+
return typeof value === "object" && value !== null && "getDevices" in value;
|
|
12
|
+
}
|
|
13
|
+
function isInputReport(event) {
|
|
14
|
+
return "reportId" in event && "data" in event;
|
|
15
|
+
}
|
|
16
|
+
function describe(device) {
|
|
17
|
+
return {
|
|
18
|
+
device,
|
|
19
|
+
vendorId: device.vendorId,
|
|
20
|
+
productId: device.productId,
|
|
21
|
+
productName: device.productName,
|
|
22
|
+
opened: device.opened
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Talk to human-interface devices with the WebHID API.
|
|
27
|
+
*
|
|
28
|
+
* `devices` lists granted devices as plain snapshots and follows the host's
|
|
29
|
+
* `connect` / `disconnect` events. Devices opened through `open()` forward
|
|
30
|
+
* `inputreport` events to `onInputReport`. Every action resolves to a
|
|
31
|
+
* boolean or value and records failures in `error`. Report listeners are
|
|
32
|
+
* removed and opened devices closed when the owning reactive scope stops;
|
|
33
|
+
* outside a scope call `close()` per device.
|
|
34
|
+
*
|
|
35
|
+
* Server rendering: `supported` is false and `devices` is empty.
|
|
36
|
+
* Inside a component the host is resolved after mounting, so hydration
|
|
37
|
+
* renders this server state first.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const hid = useHID({ onInputReport: ({ reportId, data }) => read(reportId, data) });
|
|
42
|
+
* const [device] = await hid.requestDevice([{ vendorId: 0x054c }]);
|
|
43
|
+
* if (device) await hid.open(device);
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @param options Host and input report callback.
|
|
47
|
+
* @default options {}
|
|
48
|
+
* @returns HID state and actions.
|
|
49
|
+
*/
|
|
50
|
+
function useHID(options = {}) {
|
|
51
|
+
const devices = shallowRef([]);
|
|
52
|
+
const error = shallowRef(void 0);
|
|
53
|
+
const reportListeners = /* @__PURE__ */ new Map();
|
|
54
|
+
const owned = /* @__PURE__ */ new Set();
|
|
55
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
56
|
+
if (!hydrated.value) watchPostEffect(() => {
|
|
57
|
+
hydrated.value = true;
|
|
58
|
+
});
|
|
59
|
+
const resolveHost = () => {
|
|
60
|
+
if (!hydrated.value) return void 0;
|
|
61
|
+
return options.host === void 0 ? browserHIDHost() : toValue(options.host) ?? void 0;
|
|
62
|
+
};
|
|
63
|
+
const attempt = async (action, clearError = true) => {
|
|
64
|
+
try {
|
|
65
|
+
const value = await action();
|
|
66
|
+
if (clearError) error.value = void 0;
|
|
67
|
+
return value;
|
|
68
|
+
} catch (cause) {
|
|
69
|
+
error.value = cause;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const getDevices = async () => {
|
|
74
|
+
const host = resolveHost();
|
|
75
|
+
const granted = host ? await attempt(() => host.getDevices(), false) : [];
|
|
76
|
+
if (granted) devices.value = granted.map(describe);
|
|
77
|
+
return devices.value;
|
|
78
|
+
};
|
|
79
|
+
const requestDevice = async (filters = []) => {
|
|
80
|
+
const host = resolveHost();
|
|
81
|
+
if (!host) return [];
|
|
82
|
+
const chosen = await attempt(() => host.requestDevice({ filters }));
|
|
83
|
+
await getDevices();
|
|
84
|
+
return chosen ?? [];
|
|
85
|
+
};
|
|
86
|
+
const unlisten = (device) => {
|
|
87
|
+
const listener = reportListeners.get(device);
|
|
88
|
+
if (!listener) return;
|
|
89
|
+
device.removeEventListener("inputreport", listener);
|
|
90
|
+
reportListeners.delete(device);
|
|
91
|
+
};
|
|
92
|
+
const open = async (device) => {
|
|
93
|
+
if (!device.opened && await attempt(() => device.open().then(() => true)) !== true) return false;
|
|
94
|
+
owned.add(device);
|
|
95
|
+
const onInputReport = options.onInputReport;
|
|
96
|
+
if (onInputReport && !reportListeners.has(device)) {
|
|
97
|
+
const listener = (event) => {
|
|
98
|
+
if (isInputReport(event)) onInputReport({
|
|
99
|
+
device,
|
|
100
|
+
reportId: event.reportId,
|
|
101
|
+
data: event.data
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
reportListeners.set(device, listener);
|
|
105
|
+
device.addEventListener("inputreport", listener);
|
|
106
|
+
}
|
|
107
|
+
devices.value = devices.value.map((entry) => describe(entry.device));
|
|
108
|
+
return true;
|
|
109
|
+
};
|
|
110
|
+
const close = async (device) => {
|
|
111
|
+
unlisten(device);
|
|
112
|
+
owned.delete(device);
|
|
113
|
+
const closed = !device.opened || await attempt(() => device.close().then(() => true)) === true;
|
|
114
|
+
devices.value = devices.value.map((entry) => describe(entry.device));
|
|
115
|
+
return closed;
|
|
116
|
+
};
|
|
117
|
+
const sendReport = async (device, reportId, data) => await attempt(() => device.sendReport(reportId, data).then(() => true)) === true;
|
|
118
|
+
const sendFeatureReport = async (device, reportId, data) => await attempt(() => device.sendFeatureReport(reportId, data).then(() => true)) === true;
|
|
119
|
+
const receiveFeatureReport = (device, reportId) => attempt(() => device.receiveFeatureReport(reportId));
|
|
120
|
+
const onConnectionChange = () => {
|
|
121
|
+
getDevices();
|
|
122
|
+
};
|
|
123
|
+
watch(resolveHost, (host, _previous, onCleanup) => {
|
|
124
|
+
if (!host) {
|
|
125
|
+
devices.value = [];
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
host.addEventListener("connect", onConnectionChange);
|
|
129
|
+
host.addEventListener("disconnect", onConnectionChange);
|
|
130
|
+
onCleanup(() => {
|
|
131
|
+
host.removeEventListener("connect", onConnectionChange);
|
|
132
|
+
host.removeEventListener("disconnect", onConnectionChange);
|
|
133
|
+
});
|
|
134
|
+
getDevices();
|
|
135
|
+
}, {
|
|
136
|
+
immediate: true,
|
|
137
|
+
flush: "sync"
|
|
138
|
+
});
|
|
139
|
+
tryOnScopeDispose(() => {
|
|
140
|
+
for (const device of owned) close(device);
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
supported: computed(() => resolveHost() !== void 0),
|
|
144
|
+
devices: shallowReadonly(devices),
|
|
145
|
+
error: readonly(error),
|
|
146
|
+
requestDevice,
|
|
147
|
+
getDevices,
|
|
148
|
+
open,
|
|
149
|
+
close,
|
|
150
|
+
sendReport,
|
|
151
|
+
sendFeatureReport,
|
|
152
|
+
receiveFeatureReport
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
export { useHID };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/use-id-generator.d.ts
|
|
2
|
+
/** Options for {@link useIdGenerator}. */
|
|
3
|
+
interface UseIdGeneratorOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Namespace placed in front of every id.
|
|
6
|
+
*
|
|
7
|
+
* @default "vize"
|
|
8
|
+
*/
|
|
9
|
+
readonly prefix?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Stable seed identifying this generator. Defaults to Vue's `useId()`
|
|
12
|
+
* inside a component (identical on server and hydrating client), or to
|
|
13
|
+
* `"root"` outside one.
|
|
14
|
+
*
|
|
15
|
+
* @default useId() or "root"
|
|
16
|
+
*/
|
|
17
|
+
readonly seed?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Id factory returned by {@link useIdGenerator}. */
|
|
20
|
+
type IdGenerator = (hint?: string) => string;
|
|
21
|
+
/**
|
|
22
|
+
* Create an SSR-stable id factory for one component.
|
|
23
|
+
*
|
|
24
|
+
* Each call to the returned function yields
|
|
25
|
+
* `<prefix>-<seed>-<hint>-<n>` with a per-generator counter, so as long as
|
|
26
|
+
* ids are generated in the same order on the server and the client (for
|
|
27
|
+
* example during `setup`), the markup hydrates without mismatches. The seed
|
|
28
|
+
* comes from Vue's `useId()` inside components, which is itself stable across
|
|
29
|
+
* SSR and hydration; outside components pass an explicit `seed`. Characters
|
|
30
|
+
* outside `[A-Za-z0-9_-]` are replaced so ids are valid in selectors.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const nextId = useIdGenerator({ prefix: "field" });
|
|
35
|
+
* const inputId = nextId("input"); // "field-v-0-input-0"
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param options Prefix and seed.
|
|
39
|
+
* @default options {}
|
|
40
|
+
* @returns The id factory.
|
|
41
|
+
*/
|
|
42
|
+
declare function useIdGenerator(options?: UseIdGeneratorOptions): IdGenerator;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { IdGenerator, UseIdGeneratorOptions, useIdGenerator };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { hasInjectionContext, useId } from "vue";
|
|
2
|
+
//#region src/use-id-generator.ts
|
|
3
|
+
function sanitize(part) {
|
|
4
|
+
return part.replaceAll(/[^\w-]/g, "-");
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Create an SSR-stable id factory for one component.
|
|
8
|
+
*
|
|
9
|
+
* Each call to the returned function yields
|
|
10
|
+
* `<prefix>-<seed>-<hint>-<n>` with a per-generator counter, so as long as
|
|
11
|
+
* ids are generated in the same order on the server and the client (for
|
|
12
|
+
* example during `setup`), the markup hydrates without mismatches. The seed
|
|
13
|
+
* comes from Vue's `useId()` inside components, which is itself stable across
|
|
14
|
+
* SSR and hydration; outside components pass an explicit `seed`. Characters
|
|
15
|
+
* outside `[A-Za-z0-9_-]` are replaced so ids are valid in selectors.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const nextId = useIdGenerator({ prefix: "field" });
|
|
20
|
+
* const inputId = nextId("input"); // "field-v-0-input-0"
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @param options Prefix and seed.
|
|
24
|
+
* @default options {}
|
|
25
|
+
* @returns The id factory.
|
|
26
|
+
*/
|
|
27
|
+
function useIdGenerator(options = {}) {
|
|
28
|
+
const seed = options.seed ?? (hasInjectionContext() ? useId() : "root");
|
|
29
|
+
const base = `${sanitize(options.prefix ?? "vize")}-${sanitize(seed)}`;
|
|
30
|
+
let counter = 0;
|
|
31
|
+
return (hint = "id") => {
|
|
32
|
+
const id = `${base}-${sanitize(hint)}-${counter}`;
|
|
33
|
+
counter += 1;
|
|
34
|
+
return id;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { useIdGenerator };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-image.d.ts
|
|
4
|
+
/** Image attributes accepted by {@link useImage}. */
|
|
5
|
+
interface ImageSource {
|
|
6
|
+
/** Image URL. */
|
|
7
|
+
readonly src: string;
|
|
8
|
+
/** Responsive candidates. */
|
|
9
|
+
readonly srcset?: string;
|
|
10
|
+
/** Responsive layout sizes. */
|
|
11
|
+
readonly sizes?: string;
|
|
12
|
+
/** Alternative text. */
|
|
13
|
+
readonly alt?: string;
|
|
14
|
+
/** CORS mode. */
|
|
15
|
+
readonly crossOrigin?: "anonymous" | "use-credentials";
|
|
16
|
+
/** Referrer policy. */
|
|
17
|
+
readonly referrerPolicy?: ReferrerPolicy;
|
|
18
|
+
/** Loading strategy. */
|
|
19
|
+
readonly loading?: "eager" | "lazy";
|
|
20
|
+
/** Decoding hint. */
|
|
21
|
+
readonly decoding?: "sync" | "async" | "auto";
|
|
22
|
+
/** Fetch priority hint. */
|
|
23
|
+
readonly fetchPriority?: "high" | "low" | "auto";
|
|
24
|
+
/** Intrinsic width. */
|
|
25
|
+
readonly width?: number;
|
|
26
|
+
/** Intrinsic height. */
|
|
27
|
+
readonly height?: number;
|
|
28
|
+
}
|
|
29
|
+
/** `HTMLImageElement` subset used by {@link useImage}. */
|
|
30
|
+
interface ImageLike extends EventTarget {
|
|
31
|
+
/** Image URL. */
|
|
32
|
+
src: string;
|
|
33
|
+
/** Responsive candidates. */
|
|
34
|
+
srcset: string;
|
|
35
|
+
/** Responsive layout sizes. */
|
|
36
|
+
sizes: string;
|
|
37
|
+
/** Alternative text. */
|
|
38
|
+
alt: string;
|
|
39
|
+
/** CORS mode. */
|
|
40
|
+
crossOrigin: string | null;
|
|
41
|
+
/** Referrer policy. */
|
|
42
|
+
referrerPolicy: string;
|
|
43
|
+
/** Loading strategy. */
|
|
44
|
+
loading: string;
|
|
45
|
+
/** Decoding hint. */
|
|
46
|
+
decoding: string;
|
|
47
|
+
/** Fetch priority hint; absent in engines without priority hints. */
|
|
48
|
+
fetchPriority?: string;
|
|
49
|
+
/** Intrinsic width. */
|
|
50
|
+
width: number;
|
|
51
|
+
/** Intrinsic height. */
|
|
52
|
+
height: number;
|
|
53
|
+
}
|
|
54
|
+
/** Image constructor used by {@link useImage}. */
|
|
55
|
+
type ImageHost = new () => ImageLike;
|
|
56
|
+
/** Loading state of the image. */
|
|
57
|
+
type ImageStatus = "idle" | "loading" | "loaded" | "error";
|
|
58
|
+
/** Discriminated outcome of {@link ImageControls.load}. */
|
|
59
|
+
type ImageLoadResult = {
|
|
60
|
+
/** The image loaded. */readonly status: "loaded"; /** Loaded image. */
|
|
61
|
+
readonly image: ImageLike;
|
|
62
|
+
} | {
|
|
63
|
+
/** The image failed to load. */readonly status: "error"; /** Native error event. */
|
|
64
|
+
readonly error: Event;
|
|
65
|
+
} | {
|
|
66
|
+
/** A newer load started, the scope stopped, or no capability exists. */readonly status: "cancelled" | "unsupported";
|
|
67
|
+
};
|
|
68
|
+
/** Options for {@link useImage}. */
|
|
69
|
+
interface UseImageOptions {
|
|
70
|
+
/**
|
|
71
|
+
* Load when created and whenever the source changes.
|
|
72
|
+
*
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
75
|
+
readonly immediate?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Image constructor for alternate runtimes and tests. A ref (not a
|
|
78
|
+
* getter) because the host is a constructor function.
|
|
79
|
+
*
|
|
80
|
+
* @default window.Image when a browser window exists
|
|
81
|
+
*/
|
|
82
|
+
readonly host?: MaybeRef<ImageHost | null | undefined>;
|
|
83
|
+
}
|
|
84
|
+
/** Reactive state and actions returned by {@link useImage}. */
|
|
85
|
+
interface ImageControls {
|
|
86
|
+
/** Loading state of the newest load. */
|
|
87
|
+
readonly status: Readonly<Ref<ImageStatus>>;
|
|
88
|
+
/** Most recently loaded image. */
|
|
89
|
+
readonly image: Readonly<ShallowRef<ImageLike | undefined>>;
|
|
90
|
+
/** Error event of the newest load, cleared when a load starts. */
|
|
91
|
+
readonly error: Readonly<ShallowRef<Event | undefined>>;
|
|
92
|
+
/** Whether the newest load succeeded. */
|
|
93
|
+
readonly ready: ComputedRef<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Load the current source, superseding any pending load.
|
|
96
|
+
*
|
|
97
|
+
* @returns The discriminated outcome; never rejects.
|
|
98
|
+
*/
|
|
99
|
+
readonly load: () => Promise<ImageLoadResult>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Preload an image and track its loading state.
|
|
103
|
+
*
|
|
104
|
+
* A detached image is created for every source; the newest load wins, and
|
|
105
|
+
* superseded images have their listeners removed and their `src` cleared so
|
|
106
|
+
* the browser can abort the download. Use it to show a placeholder until
|
|
107
|
+
* the real image is decoded, or to validate URLs before rendering them.
|
|
108
|
+
*
|
|
109
|
+
* Server rendering: no image is created and `status` stays `"idle"`. The
|
|
110
|
+
* pending load is cancelled when the owning reactive scope stops.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const { ready } = useImage(() => ({ src: avatarUrl.value }));
|
|
115
|
+
* // <img v-if="ready" :src="avatarUrl"> <Skeleton v-else />
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* @param source Reactive image attributes.
|
|
119
|
+
* @param options Timing and capability.
|
|
120
|
+
* @default options {}
|
|
121
|
+
* @returns Image state and actions.
|
|
122
|
+
*/
|
|
123
|
+
declare function useImage(source: MaybeRefOrGetter<ImageSource>, options?: UseImageOptions): ImageControls;
|
|
124
|
+
//#endregion
|
|
125
|
+
export { ImageControls, ImageHost, ImageLike, ImageLoadResult, ImageSource, ImageStatus, UseImageOptions, useImage };
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { tryOnScopeDispose } from "./scope.mjs";
|
|
2
|
+
import { computed, readonly, ref, shallowRef, toValue, unref, watch } from "vue";
|
|
3
|
+
//#region src/use-image.ts
|
|
4
|
+
function browserImageHost() {
|
|
5
|
+
return typeof window === "undefined" ? void 0 : window.Image;
|
|
6
|
+
}
|
|
7
|
+
function applySource(image, source) {
|
|
8
|
+
if (source.crossOrigin !== void 0) image.crossOrigin = source.crossOrigin;
|
|
9
|
+
if (source.referrerPolicy !== void 0) image.referrerPolicy = source.referrerPolicy;
|
|
10
|
+
if (source.loading !== void 0) image.loading = source.loading;
|
|
11
|
+
if (source.decoding !== void 0) image.decoding = source.decoding;
|
|
12
|
+
if (source.fetchPriority !== void 0) image.fetchPriority = source.fetchPriority;
|
|
13
|
+
if (source.alt !== void 0) image.alt = source.alt;
|
|
14
|
+
if (source.width !== void 0) image.width = source.width;
|
|
15
|
+
if (source.height !== void 0) image.height = source.height;
|
|
16
|
+
if (source.sizes !== void 0) image.sizes = source.sizes;
|
|
17
|
+
if (source.srcset !== void 0) image.srcset = source.srcset;
|
|
18
|
+
image.src = source.src;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Preload an image and track its loading state.
|
|
22
|
+
*
|
|
23
|
+
* A detached image is created for every source; the newest load wins, and
|
|
24
|
+
* superseded images have their listeners removed and their `src` cleared so
|
|
25
|
+
* the browser can abort the download. Use it to show a placeholder until
|
|
26
|
+
* the real image is decoded, or to validate URLs before rendering them.
|
|
27
|
+
*
|
|
28
|
+
* Server rendering: no image is created and `status` stays `"idle"`. The
|
|
29
|
+
* pending load is cancelled when the owning reactive scope stops.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const { ready } = useImage(() => ({ src: avatarUrl.value }));
|
|
34
|
+
* // <img v-if="ready" :src="avatarUrl"> <Skeleton v-else />
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @param source Reactive image attributes.
|
|
38
|
+
* @param options Timing and capability.
|
|
39
|
+
* @default options {}
|
|
40
|
+
* @returns Image state and actions.
|
|
41
|
+
*/
|
|
42
|
+
function useImage(source, options = {}) {
|
|
43
|
+
const status = ref("idle");
|
|
44
|
+
const image = shallowRef(void 0);
|
|
45
|
+
const error = shallowRef(void 0);
|
|
46
|
+
let cancelActive;
|
|
47
|
+
const resolveHost = () => options.host === void 0 ? browserImageHost() : unref(options.host) ?? void 0;
|
|
48
|
+
const load = () => {
|
|
49
|
+
cancelActive?.();
|
|
50
|
+
cancelActive = void 0;
|
|
51
|
+
const Host = resolveHost();
|
|
52
|
+
if (!Host) return Promise.resolve({ status: "unsupported" });
|
|
53
|
+
const candidate = new Host();
|
|
54
|
+
status.value = "loading";
|
|
55
|
+
error.value = void 0;
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
const detach = () => {
|
|
58
|
+
candidate.removeEventListener("load", onLoad);
|
|
59
|
+
candidate.removeEventListener("error", onError);
|
|
60
|
+
cancelActive = void 0;
|
|
61
|
+
};
|
|
62
|
+
const onLoad = () => {
|
|
63
|
+
detach();
|
|
64
|
+
image.value = candidate;
|
|
65
|
+
status.value = "loaded";
|
|
66
|
+
resolve({
|
|
67
|
+
status: "loaded",
|
|
68
|
+
image: candidate
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const onError = (event) => {
|
|
72
|
+
detach();
|
|
73
|
+
error.value = event;
|
|
74
|
+
status.value = "error";
|
|
75
|
+
resolve({
|
|
76
|
+
status: "error",
|
|
77
|
+
error: event
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
candidate.addEventListener("load", onLoad);
|
|
81
|
+
candidate.addEventListener("error", onError);
|
|
82
|
+
cancelActive = () => {
|
|
83
|
+
detach();
|
|
84
|
+
candidate.src = "";
|
|
85
|
+
resolve({ status: "cancelled" });
|
|
86
|
+
};
|
|
87
|
+
applySource(candidate, toValue(source));
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
if (options.immediate ?? true) watch(() => toValue(source), () => {
|
|
91
|
+
load();
|
|
92
|
+
}, {
|
|
93
|
+
immediate: true,
|
|
94
|
+
deep: true,
|
|
95
|
+
flush: "sync"
|
|
96
|
+
});
|
|
97
|
+
tryOnScopeDispose(() => {
|
|
98
|
+
cancelActive?.();
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
status: readonly(status),
|
|
102
|
+
image,
|
|
103
|
+
error,
|
|
104
|
+
ready: computed(() => status.value === "loaded"),
|
|
105
|
+
load
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//#endregion
|
|
109
|
+
export { useImage };
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-indexed-db.d.ts
|
|
4
|
+
/** Minimal structural view of an `IDBRequest`. */
|
|
5
|
+
interface IndexedDBRequestLike<Result> extends Pick<EventTarget, "addEventListener"> {
|
|
6
|
+
/** Result available after the `success` event. */
|
|
7
|
+
readonly result: Result;
|
|
8
|
+
/** Failure available after the `error` event. */
|
|
9
|
+
readonly error: unknown;
|
|
10
|
+
}
|
|
11
|
+
/** Minimal structural view of an `IDBObjectStore` using out-of-line keys. */
|
|
12
|
+
interface IndexedDBObjectStoreLike {
|
|
13
|
+
/** Read the value stored under `key`. */
|
|
14
|
+
readonly get: (key: IDBValidKey) => IndexedDBRequestLike<unknown>;
|
|
15
|
+
/** Store `value` under `key`. */
|
|
16
|
+
readonly put: (value: unknown, key: IDBValidKey) => IndexedDBRequestLike<IDBValidKey>;
|
|
17
|
+
/** Delete `key`. */
|
|
18
|
+
readonly delete: (key: IDBValidKey) => IndexedDBRequestLike<undefined>;
|
|
19
|
+
/** List every key. */
|
|
20
|
+
readonly getAllKeys: () => IndexedDBRequestLike<IDBValidKey[]>;
|
|
21
|
+
/** Delete every entry. */
|
|
22
|
+
readonly clear: () => IndexedDBRequestLike<undefined>;
|
|
23
|
+
}
|
|
24
|
+
/** Minimal structural view of an `IDBTransaction` (`complete`/`error`/`abort` events). */
|
|
25
|
+
interface IndexedDBTransactionLike extends Pick<EventTarget, "addEventListener"> {
|
|
26
|
+
/** Access an object store in the transaction scope. */
|
|
27
|
+
readonly objectStore: (name: string) => IndexedDBObjectStoreLike;
|
|
28
|
+
/** Failure available after `error`/`abort`. */
|
|
29
|
+
readonly error: unknown;
|
|
30
|
+
}
|
|
31
|
+
/** Minimal structural view of an `IDBDatabase`. */
|
|
32
|
+
interface IndexedDBDatabaseLike {
|
|
33
|
+
/** Current schema version. */
|
|
34
|
+
readonly version: number;
|
|
35
|
+
/** Names of the existing object stores. */
|
|
36
|
+
readonly objectStoreNames: {
|
|
37
|
+
readonly contains: (name: string) => boolean;
|
|
38
|
+
};
|
|
39
|
+
/** Create an object store; only valid during `upgradeneeded`. */
|
|
40
|
+
readonly createObjectStore: (name: string) => unknown;
|
|
41
|
+
/** Start a transaction on one store. */
|
|
42
|
+
readonly transaction: (store: string, mode: "readonly" | "readwrite") => IndexedDBTransactionLike;
|
|
43
|
+
/** Close the connection. */
|
|
44
|
+
readonly close: () => void;
|
|
45
|
+
}
|
|
46
|
+
/** Minimal structural view of an `IDBFactory`; `window.indexedDB` satisfies it. */
|
|
47
|
+
interface IndexedDBFactoryLike {
|
|
48
|
+
/** Open (and possibly upgrade) a database; fires `upgradeneeded`, `success`, `error`. */
|
|
49
|
+
readonly open: (name: string, version?: number) => IndexedDBRequestLike<IndexedDBDatabaseLike>;
|
|
50
|
+
}
|
|
51
|
+
/** Options for {@link createIndexedDBKeyval}. */
|
|
52
|
+
interface IndexedDBKeyvalOptions {
|
|
53
|
+
/**
|
|
54
|
+
* Database name.
|
|
55
|
+
*
|
|
56
|
+
* @default "vize-keyval"
|
|
57
|
+
*/
|
|
58
|
+
readonly database?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Object store name; created on demand.
|
|
61
|
+
*
|
|
62
|
+
* @default "keyval"
|
|
63
|
+
*/
|
|
64
|
+
readonly store?: string;
|
|
65
|
+
/**
|
|
66
|
+
* IndexedDB implementation.
|
|
67
|
+
*
|
|
68
|
+
* @default window.indexedDB when a browser window exists
|
|
69
|
+
*/
|
|
70
|
+
readonly factory?: IndexedDBFactoryLike | null;
|
|
71
|
+
}
|
|
72
|
+
/** Promise-based key-value store returned by {@link createIndexedDBKeyval}. */
|
|
73
|
+
interface IndexedDBKeyval {
|
|
74
|
+
/** Read a structured-cloned value, or `undefined` when absent. */
|
|
75
|
+
readonly get: (key: IDBValidKey) => Promise<unknown>;
|
|
76
|
+
/** Store a structured-cloneable value. Resolves when the transaction commits. */
|
|
77
|
+
readonly set: (key: IDBValidKey, value: unknown) => Promise<void>;
|
|
78
|
+
/** Delete a key. Resolves when the transaction commits. */
|
|
79
|
+
readonly delete: (key: IDBValidKey) => Promise<void>;
|
|
80
|
+
/** List every key. */
|
|
81
|
+
readonly keys: () => Promise<IDBValidKey[]>;
|
|
82
|
+
/** Delete every entry. */
|
|
83
|
+
readonly clear: () => Promise<void>;
|
|
84
|
+
/** Close the connection; the next operation reopens it. */
|
|
85
|
+
readonly close: () => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a small promise-based key-value store on one IndexedDB object
|
|
89
|
+
* store. The connection opens lazily on the first operation, the store is
|
|
90
|
+
* created on demand, and writes resolve once their transaction commits.
|
|
91
|
+
* Without IndexedDB (server rendering, privacy modes) every operation
|
|
92
|
+
* rejects with a tagged `[VIZE_COMPOSE_INDEXED_DB_UNAVAILABLE]` error.
|
|
93
|
+
*
|
|
94
|
+
* @param options Database, store, and implementation.
|
|
95
|
+
* @default options {}
|
|
96
|
+
* @returns Key-value operations.
|
|
97
|
+
*/
|
|
98
|
+
declare function createIndexedDBKeyval(options?: IndexedDBKeyvalOptions): IndexedDBKeyval;
|
|
99
|
+
/** Stable failure codes reported by {@link useIndexedDB}. */
|
|
100
|
+
type IndexedDBErrorCode = "read-failed" | "invalid-value" | "write-failed";
|
|
101
|
+
/** Failure observed while synchronizing a value with IndexedDB. */
|
|
102
|
+
interface IndexedDBFailure {
|
|
103
|
+
/** Which synchronization step failed. */
|
|
104
|
+
readonly code: IndexedDBErrorCode;
|
|
105
|
+
/** Key involved in the failure. */
|
|
106
|
+
readonly key: IDBValidKey;
|
|
107
|
+
/** Exact rejection, or the rejected candidate for `"invalid-value"`. */
|
|
108
|
+
readonly cause: unknown;
|
|
109
|
+
}
|
|
110
|
+
/** Options for {@link useIndexedDB}. */
|
|
111
|
+
interface UseIndexedDBOptions<Value> {
|
|
112
|
+
/**
|
|
113
|
+
* Database name.
|
|
114
|
+
*
|
|
115
|
+
* @default "vize-keyval"
|
|
116
|
+
*/
|
|
117
|
+
readonly database?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Object store name; created on demand.
|
|
120
|
+
*
|
|
121
|
+
* @default "keyval"
|
|
122
|
+
*/
|
|
123
|
+
readonly store?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Reactive IndexedDB implementation. `null`/`undefined` keeps the default
|
|
126
|
+
* value, which is also what happens during server rendering.
|
|
127
|
+
*
|
|
128
|
+
* @default window.indexedDB when a browser window exists
|
|
129
|
+
*/
|
|
130
|
+
readonly factory?: MaybeRefOrGetter<IndexedDBFactoryLike | null | undefined>;
|
|
131
|
+
/**
|
|
132
|
+
* Validation hook applied to every loaded value.
|
|
133
|
+
*
|
|
134
|
+
* @default a structural check that the value has the default's kind
|
|
135
|
+
*/
|
|
136
|
+
readonly validate?: (candidate: unknown) => candidate is Value;
|
|
137
|
+
/**
|
|
138
|
+
* Persist the default value when the key is absent.
|
|
139
|
+
*
|
|
140
|
+
* @default true
|
|
141
|
+
*/
|
|
142
|
+
readonly writeDefaults?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Watch nested mutations of object values.
|
|
145
|
+
*
|
|
146
|
+
* @default true
|
|
147
|
+
*/
|
|
148
|
+
readonly deep?: boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Write timing relative to component rendering.
|
|
151
|
+
*
|
|
152
|
+
* @default "pre"
|
|
153
|
+
*/
|
|
154
|
+
readonly flush?: "pre" | "post" | "sync";
|
|
155
|
+
/**
|
|
156
|
+
* Observe failures. Failures never reject out of the composable.
|
|
157
|
+
*
|
|
158
|
+
* @default undefined
|
|
159
|
+
*/
|
|
160
|
+
readonly onError?: (failure: IndexedDBFailure) => void;
|
|
161
|
+
}
|
|
162
|
+
/** Reactive state and controls returned by {@link useIndexedDB}. */
|
|
163
|
+
interface IndexedDBControls<Value> {
|
|
164
|
+
/** Writable value; assignments and nested mutations are persisted. */
|
|
165
|
+
readonly state: Ref<Value>;
|
|
166
|
+
/** Whether an IndexedDB implementation is attached. */
|
|
167
|
+
readonly supported: Readonly<Ref<boolean>>;
|
|
168
|
+
/** Whether the stored value for the current key has been loaded. */
|
|
169
|
+
readonly ready: Readonly<Ref<boolean>>;
|
|
170
|
+
/** Most recent failure, cleared by the next success. */
|
|
171
|
+
readonly error: Readonly<ShallowRef<IndexedDBFailure | undefined>>;
|
|
172
|
+
/** Reload the stored value. Never rejects. */
|
|
173
|
+
readonly refresh: () => Promise<void>;
|
|
174
|
+
/** Delete the key and restore the default value. Never rejects. */
|
|
175
|
+
readonly remove: () => Promise<void>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Synchronize a reactive value with one IndexedDB key.
|
|
179
|
+
*
|
|
180
|
+
* Values are stored by structured clone, so objects, arrays, `Map`, `Set`,
|
|
181
|
+
* `Date`, typed arrays, and `Blob`s round-trip without a serializer. The
|
|
182
|
+
* value is loaded asynchronously: `state` holds the default until `ready`
|
|
183
|
+
* becomes `true`. Loaded values pass `validate` before they are accepted.
|
|
184
|
+
* Assignments and nested mutations are written back; changing the reactive
|
|
185
|
+
* `key` loads the new key (stale loads are discarded).
|
|
186
|
+
*
|
|
187
|
+
* Server rendering: without a browser `window` nothing is opened, `state`
|
|
188
|
+
* is the default, and `ready` stays `false`, so server and client first
|
|
189
|
+
* render identically. The connection closes and watchers stop with the
|
|
190
|
+
* owning reactive scope. Failures never reject; they are exposed through
|
|
191
|
+
* `error` and `onError`.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* const { state: draft, ready } = useIndexedDB("draft", { title: "", body: "" });
|
|
196
|
+
* ```
|
|
197
|
+
*
|
|
198
|
+
* @typeParam Value Stored value type, inferred from `defaultValue`.
|
|
199
|
+
* @param key Reactive IndexedDB key.
|
|
200
|
+
* @param defaultValue Value used until loaded, and when absent or invalid.
|
|
201
|
+
* @param options Database, store, implementation, and validation.
|
|
202
|
+
* @default options {}
|
|
203
|
+
* @returns The synchronized value and its controls.
|
|
204
|
+
*/
|
|
205
|
+
declare function useIndexedDB<Value>(key: MaybeRefOrGetter<IDBValidKey>, defaultValue: Value, options?: UseIndexedDBOptions<Value>): IndexedDBControls<Value>;
|
|
206
|
+
//#endregion
|
|
207
|
+
export { IndexedDBControls, IndexedDBDatabaseLike, IndexedDBErrorCode, IndexedDBFactoryLike, IndexedDBFailure, IndexedDBKeyval, IndexedDBKeyvalOptions, IndexedDBObjectStoreLike, IndexedDBRequestLike, IndexedDBTransactionLike, UseIndexedDBOptions, createIndexedDBKeyval, useIndexedDB };
|