@vizejs/composable 0.426.3 → 0.427.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-async-state.d.ts
|
|
4
|
+
/** Options for {@link useAsyncState}. */
|
|
5
|
+
interface UseAsyncStateOptions<Data> {
|
|
6
|
+
/**
|
|
7
|
+
* Execute once right away. Only available for producers without
|
|
8
|
+
* parameters; pass `false` to run a producer that takes arguments through
|
|
9
|
+
* {@link AsyncState.execute}.
|
|
10
|
+
*
|
|
11
|
+
* @default true
|
|
12
|
+
*/
|
|
13
|
+
readonly immediate?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Restore the initial state at the start of every execution.
|
|
16
|
+
*
|
|
17
|
+
* @default false
|
|
18
|
+
*/
|
|
19
|
+
readonly resetOnExecute?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Re-throw failures from `execute` in addition to storing them.
|
|
22
|
+
*
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
readonly throwError?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Called with every failure of the newest execution.
|
|
28
|
+
*
|
|
29
|
+
* @default undefined
|
|
30
|
+
*/
|
|
31
|
+
readonly onError?: (error: unknown) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Called with every successful result of the newest execution.
|
|
34
|
+
*
|
|
35
|
+
* @default undefined
|
|
36
|
+
*/
|
|
37
|
+
readonly onSuccess?: (data: Data) => void;
|
|
38
|
+
}
|
|
39
|
+
/** Reactive state and controls returned by {@link useAsyncState}. */
|
|
40
|
+
interface AsyncState<Data, Initial, Parameters extends readonly unknown[]> {
|
|
41
|
+
/** Newest result, or the initial state. */
|
|
42
|
+
readonly state: Readonly<ShallowRef<Data | Initial>>;
|
|
43
|
+
/** Whether at least one execution succeeded. */
|
|
44
|
+
readonly isReady: Readonly<ShallowRef<boolean>>;
|
|
45
|
+
/** Whether an execution is in flight. */
|
|
46
|
+
readonly isLoading: Readonly<ShallowRef<boolean>>;
|
|
47
|
+
/** Failure of the newest execution, cleared when a new one starts. */
|
|
48
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
49
|
+
/**
|
|
50
|
+
* Run the producer. Only the newest execution may update the state.
|
|
51
|
+
*
|
|
52
|
+
* @returns The resulting state (the previous state for failed or
|
|
53
|
+
* superseded executions unless `throwError` is set).
|
|
54
|
+
*/
|
|
55
|
+
readonly execute: (...args: Parameters) => Promise<Data | Initial>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Reactive state for an async producer.
|
|
59
|
+
*
|
|
60
|
+
* Tracks the result, loading, readiness, and error of the newest execution;
|
|
61
|
+
* out-of-order completions of older executions are ignored, so the state
|
|
62
|
+
* always reflects the latest request. The typing is arity-aware: producers
|
|
63
|
+
* with parameters require `{ immediate: false }` and `execute` keeps their
|
|
64
|
+
* parameter tuple. On the server an immediate execution starts but is not
|
|
65
|
+
* awaited, so both sides render the initial state with `isLoading: true`.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const { state, isLoading, execute } = useAsyncState((id: string) => fetchUser(id), null, {
|
|
70
|
+
* immediate: false,
|
|
71
|
+
* });
|
|
72
|
+
* await execute("u-1");
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @param producer Async function producing the data.
|
|
76
|
+
* @param initial State before the first success.
|
|
77
|
+
* @param options Immediate execution, reset, error, and success policy.
|
|
78
|
+
* @default options {}
|
|
79
|
+
* @returns Reactive state and the `execute` control.
|
|
80
|
+
*/
|
|
81
|
+
declare function useAsyncState<Data, Initial>(producer: () => Promise<Data>, initial: Initial, options?: UseAsyncStateOptions<Data>): AsyncState<Data, Initial, []>;
|
|
82
|
+
declare function useAsyncState<Data, Initial, Parameters extends readonly unknown[]>(producer: (...args: Parameters) => Promise<Data>, initial: Initial, options: UseAsyncStateOptions<Data> & {
|
|
83
|
+
readonly immediate: false;
|
|
84
|
+
}): AsyncState<Data, Initial, Parameters>;
|
|
85
|
+
//#endregion
|
|
86
|
+
export { AsyncState, UseAsyncStateOptions, useAsyncState };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { shallowRef } from "vue";
|
|
2
|
+
//#region src/use-async-state.ts
|
|
3
|
+
function useAsyncState(producer, initial, options = {}) {
|
|
4
|
+
const state = shallowRef(initial);
|
|
5
|
+
const isReady = shallowRef(false);
|
|
6
|
+
const isLoading = shallowRef(false);
|
|
7
|
+
const error = shallowRef(void 0);
|
|
8
|
+
let generation = 0;
|
|
9
|
+
const execute = async (...args) => {
|
|
10
|
+
generation += 1;
|
|
11
|
+
const own = generation;
|
|
12
|
+
if (options.resetOnExecute ?? false) state.value = initial;
|
|
13
|
+
error.value = void 0;
|
|
14
|
+
isLoading.value = true;
|
|
15
|
+
try {
|
|
16
|
+
const data = await producer(...args);
|
|
17
|
+
if (own !== generation) return state.value;
|
|
18
|
+
state.value = data;
|
|
19
|
+
isReady.value = true;
|
|
20
|
+
options.onSuccess?.(data);
|
|
21
|
+
} catch (failure) {
|
|
22
|
+
if (own !== generation) return state.value;
|
|
23
|
+
error.value = failure;
|
|
24
|
+
options.onError?.(failure);
|
|
25
|
+
if (options.throwError ?? false) throw failure;
|
|
26
|
+
} finally {
|
|
27
|
+
if (own === generation) isLoading.value = false;
|
|
28
|
+
}
|
|
29
|
+
return state.value;
|
|
30
|
+
};
|
|
31
|
+
if (options.immediate ?? true) execute().catch(() => void 0);
|
|
32
|
+
return {
|
|
33
|
+
state,
|
|
34
|
+
isReady,
|
|
35
|
+
isLoading,
|
|
36
|
+
error,
|
|
37
|
+
execute
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { useAsyncState };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { FrameScheduler } from "./use-raf-fn.mjs";
|
|
2
|
+
import { ComputedRef, MaybeRef, MaybeRefOrGetter, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
//#region src/use-barcode-detector.d.ts
|
|
5
|
+
/** Barcode symbology supported by the Barcode Detection API. */
|
|
6
|
+
type BarcodeFormat = "aztec" | "code_128" | "code_39" | "code_93" | "codabar" | "data_matrix" | "ean_13" | "ean_8" | "itf" | "pdf417" | "qr_code" | "upc_a" | "upc_e" | "unknown";
|
|
7
|
+
/** Axis-aligned bounds of a detected barcode, in source pixels. */
|
|
8
|
+
interface BarcodeBoundingBox {
|
|
9
|
+
/** Left edge. */
|
|
10
|
+
readonly x: number;
|
|
11
|
+
/** Top edge. */
|
|
12
|
+
readonly y: number;
|
|
13
|
+
/** Width. */
|
|
14
|
+
readonly width: number;
|
|
15
|
+
/** Height. */
|
|
16
|
+
readonly height: number;
|
|
17
|
+
}
|
|
18
|
+
/** Corner of a detected barcode, in source pixels. */
|
|
19
|
+
interface BarcodePoint {
|
|
20
|
+
/** Horizontal coordinate. */
|
|
21
|
+
readonly x: number;
|
|
22
|
+
/** Vertical coordinate. */
|
|
23
|
+
readonly y: number;
|
|
24
|
+
}
|
|
25
|
+
/** Normalized detection result. */
|
|
26
|
+
interface DetectedBarcode {
|
|
27
|
+
/** Decoded text. */
|
|
28
|
+
readonly rawValue: string;
|
|
29
|
+
/** Symbology (`"unknown"` for formats this module does not know). */
|
|
30
|
+
readonly format: BarcodeFormat;
|
|
31
|
+
/** Bounding box. */
|
|
32
|
+
readonly boundingBox: BarcodeBoundingBox;
|
|
33
|
+
/** Corner points, clockwise from top-left. */
|
|
34
|
+
readonly cornerPoints: readonly BarcodePoint[];
|
|
35
|
+
}
|
|
36
|
+
/** Raw detection result produced by a host detector. */
|
|
37
|
+
interface DetectedBarcodeLike {
|
|
38
|
+
/** Decoded text. */
|
|
39
|
+
readonly rawValue: string;
|
|
40
|
+
/** Symbology name. */
|
|
41
|
+
readonly format: string;
|
|
42
|
+
/** Bounding box. */
|
|
43
|
+
readonly boundingBox: BarcodeBoundingBox;
|
|
44
|
+
/** Corner points. */
|
|
45
|
+
readonly cornerPoints: readonly BarcodePoint[];
|
|
46
|
+
}
|
|
47
|
+
/** Minimal `BarcodeDetector` instance. */
|
|
48
|
+
interface BarcodeDetectorLike {
|
|
49
|
+
/** Detect barcodes in an image source. */
|
|
50
|
+
detect(source: ImageBitmapSource): Promise<readonly DetectedBarcodeLike[]>;
|
|
51
|
+
}
|
|
52
|
+
/** Minimal `BarcodeDetector` constructor. */
|
|
53
|
+
interface BarcodeDetectorHost {
|
|
54
|
+
/** Create a detector restricted to `formats`. */
|
|
55
|
+
new (options?: {
|
|
56
|
+
formats?: BarcodeFormat[];
|
|
57
|
+
}): BarcodeDetectorLike;
|
|
58
|
+
/** Formats the platform can detect. */
|
|
59
|
+
getSupportedFormats?(): Promise<readonly string[]>;
|
|
60
|
+
}
|
|
61
|
+
/** Options for {@link useBarcodeDetector}. */
|
|
62
|
+
interface UseBarcodeDetectorOptions {
|
|
63
|
+
/**
|
|
64
|
+
* `BarcodeDetector` constructor for alternate runtimes and tests. A ref
|
|
65
|
+
* (not a getter) because the host is a constructor function.
|
|
66
|
+
*
|
|
67
|
+
* @default window.BarcodeDetector when it exists
|
|
68
|
+
*/
|
|
69
|
+
readonly BarcodeDetector?: MaybeRef<BarcodeDetectorHost | null | undefined>;
|
|
70
|
+
/**
|
|
71
|
+
* Formats to detect. Reactive; a new detector is created when it changes.
|
|
72
|
+
*
|
|
73
|
+
* @default undefined (every supported format)
|
|
74
|
+
*/
|
|
75
|
+
readonly formats?: MaybeRefOrGetter<readonly BarcodeFormat[] | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* Source scanned continuously (for example a camera `<video>`). Video
|
|
78
|
+
* frames are skipped until `readyState >= 2`.
|
|
79
|
+
*
|
|
80
|
+
* @default undefined
|
|
81
|
+
*/
|
|
82
|
+
readonly source?: MaybeRefOrGetter<ImageBitmapSource | null | undefined>;
|
|
83
|
+
/**
|
|
84
|
+
* Start continuous detection immediately.
|
|
85
|
+
*
|
|
86
|
+
* @default true when `source` is set
|
|
87
|
+
*/
|
|
88
|
+
readonly immediate?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Maximum continuous detections per second. A frame is also skipped while
|
|
91
|
+
* the previous detection is still running.
|
|
92
|
+
*
|
|
93
|
+
* @default 10
|
|
94
|
+
*/
|
|
95
|
+
readonly fpsLimit?: MaybeRefOrGetter<number | undefined>;
|
|
96
|
+
/**
|
|
97
|
+
* Frame host for continuous detection. An injected scheduler also drives
|
|
98
|
+
* frames without a browser `window` (native or offscreen hosts, tests).
|
|
99
|
+
*
|
|
100
|
+
* @default globalThis animation-frame functions when available
|
|
101
|
+
*/
|
|
102
|
+
readonly scheduler?: FrameScheduler;
|
|
103
|
+
}
|
|
104
|
+
/** Reactive state and actions returned by {@link useBarcodeDetector}. */
|
|
105
|
+
interface BarcodeDetectorControls {
|
|
106
|
+
/** Whether the Barcode Detection API is available. */
|
|
107
|
+
readonly supported: ComputedRef<boolean>;
|
|
108
|
+
/** Barcodes found by the most recent successful detection. */
|
|
109
|
+
readonly barcodes: Readonly<ShallowRef<readonly DetectedBarcode[]>>;
|
|
110
|
+
/** Most recent detection failure, cleared on success. */
|
|
111
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
112
|
+
/** Whether continuous detection is running. */
|
|
113
|
+
readonly isActive: Readonly<ShallowRef<boolean>>;
|
|
114
|
+
/**
|
|
115
|
+
* Detect barcodes once.
|
|
116
|
+
*
|
|
117
|
+
* @param source Image, video, canvas, bitmap, blob, or image data.
|
|
118
|
+
* @returns Detected barcodes; empty when unsupported or failing (see `error`).
|
|
119
|
+
*/
|
|
120
|
+
readonly detect: (source: ImageBitmapSource) => Promise<readonly DetectedBarcode[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Formats the platform supports.
|
|
123
|
+
*
|
|
124
|
+
* @returns Known supported formats; empty when unsupported or failing.
|
|
125
|
+
*/
|
|
126
|
+
readonly getSupportedFormats: () => Promise<BarcodeFormat[]>;
|
|
127
|
+
/** Start continuous detection of `source`. */
|
|
128
|
+
readonly start: () => void;
|
|
129
|
+
/** Stop continuous detection. Idempotent. */
|
|
130
|
+
readonly stop: () => void;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Detect barcodes and QR codes with the Barcode Detection API.
|
|
134
|
+
*
|
|
135
|
+
* `detect(source)` scans once; with a `source` (typically a camera video),
|
|
136
|
+
* detection also runs on animation frames through {@link useRafFn}, throttled
|
|
137
|
+
* by `fpsLimit` and never overlapping. Results are normalized into plain
|
|
138
|
+
* {@link DetectedBarcode} objects. The frame loop stops with the owning
|
|
139
|
+
* reactive scope; outside a scope call `stop()`.
|
|
140
|
+
*
|
|
141
|
+
* Server rendering: nothing is constructed or scheduled, `supported` is
|
|
142
|
+
* false and `barcodes` is empty.
|
|
143
|
+
* Inside a component `supported` turns true only after mounting, so
|
|
144
|
+
* hydration renders this server state first.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* const video = useTemplateRef<HTMLVideoElement>("video");
|
|
149
|
+
* const { barcodes } = useBarcodeDetector({ source: video, formats: ["qr_code"] });
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @param options Constructor host, formats, and continuous-scan policy.
|
|
153
|
+
* @default options {}
|
|
154
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_RAF_INVALID_FPS_LIMIT` for an invalid `fpsLimit`.
|
|
155
|
+
* @returns Detector state and actions.
|
|
156
|
+
*/
|
|
157
|
+
declare function useBarcodeDetector(options?: UseBarcodeDetectorOptions): BarcodeDetectorControls;
|
|
158
|
+
//#endregion
|
|
159
|
+
export { BarcodeBoundingBox, BarcodeDetectorControls, BarcodeDetectorHost, BarcodeDetectorLike, BarcodeFormat, BarcodePoint, DetectedBarcode, DetectedBarcodeLike, UseBarcodeDetectorOptions, useBarcodeDetector };
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { useRafFn } from "./use-raf-fn.mjs";
|
|
2
|
+
import { computed, hasInjectionContext, readonly, shallowRef, toValue, unref, watchPostEffect } from "vue";
|
|
3
|
+
//#region src/use-barcode-detector.ts
|
|
4
|
+
const knownFormats = [
|
|
5
|
+
"aztec",
|
|
6
|
+
"code_128",
|
|
7
|
+
"code_39",
|
|
8
|
+
"code_93",
|
|
9
|
+
"codabar",
|
|
10
|
+
"data_matrix",
|
|
11
|
+
"ean_13",
|
|
12
|
+
"ean_8",
|
|
13
|
+
"itf",
|
|
14
|
+
"pdf417",
|
|
15
|
+
"qr_code",
|
|
16
|
+
"upc_a",
|
|
17
|
+
"upc_e",
|
|
18
|
+
"unknown"
|
|
19
|
+
];
|
|
20
|
+
function isBarcodeFormat(value) {
|
|
21
|
+
return knownFormats.includes(value);
|
|
22
|
+
}
|
|
23
|
+
function isDetectorHost(candidate) {
|
|
24
|
+
return typeof candidate === "function";
|
|
25
|
+
}
|
|
26
|
+
function browserDetector() {
|
|
27
|
+
if (typeof window === "undefined") return void 0;
|
|
28
|
+
const candidate = Reflect.get(window, "BarcodeDetector");
|
|
29
|
+
return isDetectorHost(candidate) ? candidate : void 0;
|
|
30
|
+
}
|
|
31
|
+
function isFrameReady(source) {
|
|
32
|
+
return !("readyState" in source) || typeof source.readyState !== "number" || source.readyState >= 2;
|
|
33
|
+
}
|
|
34
|
+
function normalize(barcode) {
|
|
35
|
+
const { x, y, width, height } = barcode.boundingBox;
|
|
36
|
+
return {
|
|
37
|
+
rawValue: barcode.rawValue,
|
|
38
|
+
format: isBarcodeFormat(barcode.format) ? barcode.format : "unknown",
|
|
39
|
+
boundingBox: {
|
|
40
|
+
x,
|
|
41
|
+
y,
|
|
42
|
+
width,
|
|
43
|
+
height
|
|
44
|
+
},
|
|
45
|
+
cornerPoints: barcode.cornerPoints.map((point) => ({
|
|
46
|
+
x: point.x,
|
|
47
|
+
y: point.y
|
|
48
|
+
}))
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Detect barcodes and QR codes with the Barcode Detection API.
|
|
53
|
+
*
|
|
54
|
+
* `detect(source)` scans once; with a `source` (typically a camera video),
|
|
55
|
+
* detection also runs on animation frames through {@link useRafFn}, throttled
|
|
56
|
+
* by `fpsLimit` and never overlapping. Results are normalized into plain
|
|
57
|
+
* {@link DetectedBarcode} objects. The frame loop stops with the owning
|
|
58
|
+
* reactive scope; outside a scope call `stop()`.
|
|
59
|
+
*
|
|
60
|
+
* Server rendering: nothing is constructed or scheduled, `supported` is
|
|
61
|
+
* false and `barcodes` is empty.
|
|
62
|
+
* Inside a component `supported` turns true only after mounting, so
|
|
63
|
+
* hydration renders this server state first.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const video = useTemplateRef<HTMLVideoElement>("video");
|
|
68
|
+
* const { barcodes } = useBarcodeDetector({ source: video, formats: ["qr_code"] });
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @param options Constructor host, formats, and continuous-scan policy.
|
|
72
|
+
* @default options {}
|
|
73
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_RAF_INVALID_FPS_LIMIT` for an invalid `fpsLimit`.
|
|
74
|
+
* @returns Detector state and actions.
|
|
75
|
+
*/
|
|
76
|
+
function useBarcodeDetector(options = {}) {
|
|
77
|
+
const barcodes = shallowRef([]);
|
|
78
|
+
const error = shallowRef(void 0);
|
|
79
|
+
let cached;
|
|
80
|
+
let busy = false;
|
|
81
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
82
|
+
if (!hydrated.value) watchPostEffect(() => {
|
|
83
|
+
hydrated.value = true;
|
|
84
|
+
});
|
|
85
|
+
const resolveHost = () => options.BarcodeDetector === void 0 ? browserDetector() : unref(options.BarcodeDetector) ?? void 0;
|
|
86
|
+
const resolveDetector = (Host) => {
|
|
87
|
+
const formats = toValue(options.formats);
|
|
88
|
+
const key = formats?.join() ?? "*";
|
|
89
|
+
if (cached?.host !== Host || cached.key !== key) cached = {
|
|
90
|
+
host: Host,
|
|
91
|
+
key,
|
|
92
|
+
detector: new Host(formats ? { formats: [...formats] } : void 0)
|
|
93
|
+
};
|
|
94
|
+
return cached.detector;
|
|
95
|
+
};
|
|
96
|
+
const detect = async (source) => {
|
|
97
|
+
const host = resolveHost();
|
|
98
|
+
if (!host) return [];
|
|
99
|
+
try {
|
|
100
|
+
const found = (await resolveDetector(host).detect(source)).map(normalize);
|
|
101
|
+
barcodes.value = found;
|
|
102
|
+
error.value = void 0;
|
|
103
|
+
return found;
|
|
104
|
+
} catch (cause) {
|
|
105
|
+
error.value = cause;
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const getSupportedFormats = async () => {
|
|
110
|
+
try {
|
|
111
|
+
return [...await resolveHost()?.getSupportedFormats?.() ?? []].filter(isBarcodeFormat);
|
|
112
|
+
} catch {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const loop = useRafFn(() => {
|
|
117
|
+
const source = toValue(options.source);
|
|
118
|
+
if (busy || !source || !isFrameReady(source)) return;
|
|
119
|
+
busy = true;
|
|
120
|
+
detect(source).finally(() => {
|
|
121
|
+
busy = false;
|
|
122
|
+
});
|
|
123
|
+
}, {
|
|
124
|
+
immediate: options.immediate ?? options.source !== void 0,
|
|
125
|
+
fpsLimit: () => toValue(options.fpsLimit) ?? 10,
|
|
126
|
+
...options.scheduler ? {
|
|
127
|
+
scheduler: options.scheduler,
|
|
128
|
+
runOnServer: true
|
|
129
|
+
} : {}
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
supported: computed(() => hydrated.value && resolveHost() !== void 0),
|
|
133
|
+
barcodes: readonly(barcodes),
|
|
134
|
+
error: readonly(error),
|
|
135
|
+
isActive: loop.isActive,
|
|
136
|
+
detect,
|
|
137
|
+
getSupportedFormats,
|
|
138
|
+
start: loop.resume,
|
|
139
|
+
stop: loop.pause
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
export { useBarcodeDetector };
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-bluetooth.d.ts
|
|
4
|
+
/** GATT service or characteristic UUID: a full UUID string, an alias name, or a 16/32-bit number. */
|
|
5
|
+
type BluetoothUUIDLike = string | number;
|
|
6
|
+
/** Scan filter for `requestDevice`. */
|
|
7
|
+
interface BluetoothDeviceFilter {
|
|
8
|
+
/** Services the device must advertise. */
|
|
9
|
+
readonly services?: readonly BluetoothUUIDLike[];
|
|
10
|
+
/** Exact device name. */
|
|
11
|
+
readonly name?: string;
|
|
12
|
+
/** Device name prefix. */
|
|
13
|
+
readonly namePrefix?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Options for `requestDevice`: explicit filters or every nearby device. */
|
|
16
|
+
type BluetoothRequestOptions = {
|
|
17
|
+
/** Accepted device filters. */readonly filters: readonly BluetoothDeviceFilter[]; /** Extra services the page may access. */
|
|
18
|
+
readonly optionalServices?: readonly BluetoothUUIDLike[];
|
|
19
|
+
} | {
|
|
20
|
+
/** Offer every nearby device. */readonly acceptAllDevices: true; /** Extra services the page may access. */
|
|
21
|
+
readonly optionalServices?: readonly BluetoothUUIDLike[];
|
|
22
|
+
};
|
|
23
|
+
/** Minimal `BluetoothRemoteGATTCharacteristic` used by {@link useBluetooth}. */
|
|
24
|
+
interface BluetoothCharacteristicLike extends EventTarget {
|
|
25
|
+
/** Last read or notified value. */
|
|
26
|
+
readonly value?: DataView | null | undefined;
|
|
27
|
+
/** Read the value. */
|
|
28
|
+
readValue(): Promise<DataView>;
|
|
29
|
+
/** Write and wait for the device's acknowledgement. */
|
|
30
|
+
writeValueWithResponse(value: BufferSource): Promise<void>;
|
|
31
|
+
/** Write without acknowledgement. */
|
|
32
|
+
writeValueWithoutResponse(value: BufferSource): Promise<void>;
|
|
33
|
+
/** Start `characteristicvaluechanged` notifications. */
|
|
34
|
+
startNotifications(): Promise<unknown>;
|
|
35
|
+
/** Stop notifications. */
|
|
36
|
+
stopNotifications(): Promise<unknown>;
|
|
37
|
+
}
|
|
38
|
+
/** Minimal `BluetoothRemoteGATTService`. */
|
|
39
|
+
interface BluetoothServiceLike {
|
|
40
|
+
/** Look up a characteristic. */
|
|
41
|
+
getCharacteristic(characteristic: BluetoothUUIDLike): Promise<BluetoothCharacteristicLike>;
|
|
42
|
+
}
|
|
43
|
+
/** Minimal `BluetoothRemoteGATTServer`. */
|
|
44
|
+
interface BluetoothGATTServerLike {
|
|
45
|
+
/** Whether the server is connected. */
|
|
46
|
+
readonly connected: boolean;
|
|
47
|
+
/** Connect to the server. */
|
|
48
|
+
connect(): Promise<unknown>;
|
|
49
|
+
/** Disconnect from the server. */
|
|
50
|
+
disconnect(): void;
|
|
51
|
+
/** Look up a primary service. */
|
|
52
|
+
getPrimaryService(service: BluetoothUUIDLike): Promise<BluetoothServiceLike>;
|
|
53
|
+
}
|
|
54
|
+
/** Minimal `BluetoothDevice` used by {@link useBluetooth}. */
|
|
55
|
+
interface BluetoothDeviceLike extends EventTarget {
|
|
56
|
+
/** Opaque device identifier. */
|
|
57
|
+
readonly id: string;
|
|
58
|
+
/** Advertised name. */
|
|
59
|
+
readonly name?: string | undefined;
|
|
60
|
+
/** GATT server, when the device supports GATT. */
|
|
61
|
+
readonly gatt?: BluetoothGATTServerLike | undefined;
|
|
62
|
+
}
|
|
63
|
+
/** `navigator.bluetooth`-like capability used by {@link useBluetooth}. */
|
|
64
|
+
interface BluetoothHost extends EventTarget {
|
|
65
|
+
/** Whether a Bluetooth adapter is available. */
|
|
66
|
+
getAvailability(): Promise<boolean>;
|
|
67
|
+
/** Prompt the user for a device. */
|
|
68
|
+
requestDevice(options: BluetoothRequestOptions): Promise<BluetoothDeviceLike>;
|
|
69
|
+
}
|
|
70
|
+
/** Options for {@link useBluetooth}. */
|
|
71
|
+
interface UseBluetoothOptions {
|
|
72
|
+
/**
|
|
73
|
+
* `navigator.bluetooth`-like capability.
|
|
74
|
+
*
|
|
75
|
+
* @default window.navigator.bluetooth when it exists
|
|
76
|
+
*/
|
|
77
|
+
readonly host?: MaybeRefOrGetter<BluetoothHost | null | undefined>;
|
|
78
|
+
/**
|
|
79
|
+
* Default options for `requestDevice()`.
|
|
80
|
+
*
|
|
81
|
+
* @default { acceptAllDevices: true }
|
|
82
|
+
*/
|
|
83
|
+
readonly requestOptions?: BluetoothRequestOptions;
|
|
84
|
+
}
|
|
85
|
+
/** Stops a notification subscription created by {@link BluetoothControls.notify}. */
|
|
86
|
+
type BluetoothNotificationStop = () => Promise<void>;
|
|
87
|
+
/** Reactive state and actions returned by {@link useBluetooth}. */
|
|
88
|
+
interface BluetoothControls {
|
|
89
|
+
/** Whether Web Bluetooth is available. */
|
|
90
|
+
readonly supported: ComputedRef<boolean>;
|
|
91
|
+
/** Whether an adapter is available, following `availabilitychanged`. */
|
|
92
|
+
readonly available: Readonly<Ref<boolean>>;
|
|
93
|
+
/** Most recently chosen device. */
|
|
94
|
+
readonly device: Readonly<ShallowRef<BluetoothDeviceLike | undefined>>;
|
|
95
|
+
/** Whether the device's GATT server is connected. */
|
|
96
|
+
readonly connected: Readonly<Ref<boolean>>;
|
|
97
|
+
/** Most recent failure. */
|
|
98
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
99
|
+
/**
|
|
100
|
+
* Prompt the user for a device (requires user activation). Disconnects
|
|
101
|
+
* the previous device.
|
|
102
|
+
*
|
|
103
|
+
* @returns The chosen device, or `undefined` when cancelled or failed.
|
|
104
|
+
*/
|
|
105
|
+
readonly requestDevice: (options?: BluetoothRequestOptions) => Promise<BluetoothDeviceLike | undefined>;
|
|
106
|
+
/**
|
|
107
|
+
* Connect to the device's GATT server.
|
|
108
|
+
*
|
|
109
|
+
* @returns Whether the server is connected.
|
|
110
|
+
*/
|
|
111
|
+
readonly connect: () => Promise<boolean>;
|
|
112
|
+
/** Stop notifications and disconnect the GATT server. Idempotent. */
|
|
113
|
+
readonly disconnect: () => void;
|
|
114
|
+
/**
|
|
115
|
+
* Read a characteristic.
|
|
116
|
+
*
|
|
117
|
+
* @returns The value, or `undefined` on failure.
|
|
118
|
+
*/
|
|
119
|
+
readonly read: (service: BluetoothUUIDLike, characteristic: BluetoothUUIDLike) => Promise<DataView | undefined>;
|
|
120
|
+
/**
|
|
121
|
+
* Write a characteristic, with a response unless `withoutResponse`.
|
|
122
|
+
*
|
|
123
|
+
* @returns Whether the write succeeded.
|
|
124
|
+
*/
|
|
125
|
+
readonly write: (service: BluetoothUUIDLike, characteristic: BluetoothUUIDLike, value: BufferSource, options?: {
|
|
126
|
+
readonly withoutResponse?: boolean;
|
|
127
|
+
}) => Promise<boolean>;
|
|
128
|
+
/**
|
|
129
|
+
* Subscribe to characteristic notifications.
|
|
130
|
+
*
|
|
131
|
+
* @returns A stop function, or `undefined` on failure.
|
|
132
|
+
*/
|
|
133
|
+
readonly notify: (service: BluetoothUUIDLike, characteristic: BluetoothUUIDLike, listener: (value: DataView) => void) => Promise<BluetoothNotificationStop | undefined>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Connect to Bluetooth Low Energy devices with the Web Bluetooth API.
|
|
137
|
+
*
|
|
138
|
+
* `requestDevice()` prompts for a device, `connect()` connects its GATT
|
|
139
|
+
* server, and `read` / `write` / `notify` address characteristics by service
|
|
140
|
+
* and characteristic UUID. `connected` follows `gattserverdisconnected` and
|
|
141
|
+
* `available` follows `availabilitychanged`. Failures land in `error`.
|
|
142
|
+
* Notifications are stopped and the server disconnected when the owning
|
|
143
|
+
* reactive scope stops; outside a scope call `disconnect()`.
|
|
144
|
+
*
|
|
145
|
+
* Server rendering: `supported`, `available` and `connected` are false and
|
|
146
|
+
* nothing is queried.
|
|
147
|
+
* Inside a component the host is resolved after mounting, so hydration
|
|
148
|
+
* renders this server state first.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* const ble = useBluetooth({ requestOptions: { filters: [{ services: ["heart_rate"] }] } });
|
|
153
|
+
* await ble.requestDevice();
|
|
154
|
+
* await ble.connect();
|
|
155
|
+
* await ble.notify("heart_rate", "heart_rate_measurement", (value) => show(value.getUint8(1)));
|
|
156
|
+
* ```
|
|
157
|
+
*
|
|
158
|
+
* @param options Host and default request options.
|
|
159
|
+
* @default options {}
|
|
160
|
+
* @returns Bluetooth state and actions.
|
|
161
|
+
*/
|
|
162
|
+
declare function useBluetooth(options?: UseBluetoothOptions): BluetoothControls;
|
|
163
|
+
//#endregion
|
|
164
|
+
export { BluetoothCharacteristicLike, BluetoothControls, BluetoothDeviceFilter, BluetoothDeviceLike, BluetoothGATTServerLike, BluetoothHost, BluetoothNotificationStop, BluetoothRequestOptions, BluetoothServiceLike, BluetoothUUIDLike, UseBluetoothOptions, useBluetooth };
|