@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
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
import type { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
3
|
+
|
|
4
|
+
/** Date input accepted by {@link formatDate} and {@link useDateFormat}. */
|
|
5
|
+
export type DateFormatInput = Date | number | string;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Tokens understood by the pattern form of {@link formatDate}.
|
|
9
|
+
*
|
|
10
|
+
* | Token | Output | Token | Output |
|
|
11
|
+
* | --- | --- | --- | --- |
|
|
12
|
+
* | `YYYY` | 2026 | `YY` | 26 |
|
|
13
|
+
* | `M` / `MM` | 1 / 01 | `MMM` / `MMMM` | Jan / January (localized) |
|
|
14
|
+
* | `D` / `DD` | 5 / 05 | `d` | 0–6, Sunday is 0 |
|
|
15
|
+
* | `dd` / `ddd` / `dddd` | S / Sun / Sunday (localized) | `H` / `HH` | 0–23 |
|
|
16
|
+
* | `h` / `hh` | 1–12 | `m` / `mm`, `s` / `ss` | minutes, seconds |
|
|
17
|
+
* | `SSS` | milliseconds | `A` / `a` | AM / am (localized) |
|
|
18
|
+
* | `Z` / `ZZ` | +09:00 / +0900 | `[text]` | literal text |
|
|
19
|
+
*/
|
|
20
|
+
export type DateFormatToken =
|
|
21
|
+
| "YYYY"
|
|
22
|
+
| "YY"
|
|
23
|
+
| "M"
|
|
24
|
+
| "MM"
|
|
25
|
+
| "MMM"
|
|
26
|
+
| "MMMM"
|
|
27
|
+
| "D"
|
|
28
|
+
| "DD"
|
|
29
|
+
| "d"
|
|
30
|
+
| "dd"
|
|
31
|
+
| "ddd"
|
|
32
|
+
| "dddd"
|
|
33
|
+
| "H"
|
|
34
|
+
| "HH"
|
|
35
|
+
| "h"
|
|
36
|
+
| "hh"
|
|
37
|
+
| "m"
|
|
38
|
+
| "mm"
|
|
39
|
+
| "s"
|
|
40
|
+
| "ss"
|
|
41
|
+
| "SSS"
|
|
42
|
+
| "A"
|
|
43
|
+
| "a"
|
|
44
|
+
| "Z"
|
|
45
|
+
| "ZZ";
|
|
46
|
+
|
|
47
|
+
/** Options for {@link formatDate}. */
|
|
48
|
+
export interface FormatDateOptions {
|
|
49
|
+
/**
|
|
50
|
+
* BCP 47 locale(s) for names and `Intl` option formats. Defaults to a fixed
|
|
51
|
+
* locale (not the host default) so server and client output agree.
|
|
52
|
+
*
|
|
53
|
+
* @default "en"
|
|
54
|
+
*/
|
|
55
|
+
readonly locale?: string | readonly string[];
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* IANA time zone the date is rendered in. Defaults to UTC (not the host
|
|
59
|
+
* zone) for SSR determinism; pass the user's zone explicitly.
|
|
60
|
+
*
|
|
61
|
+
* @default "UTC"
|
|
62
|
+
*/
|
|
63
|
+
readonly timeZone?: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Options for {@link useDateFormat}. */
|
|
67
|
+
export interface UseDateFormatOptions {
|
|
68
|
+
/**
|
|
69
|
+
* Reactive BCP 47 locale(s).
|
|
70
|
+
*
|
|
71
|
+
* @default "en"
|
|
72
|
+
*/
|
|
73
|
+
readonly locale?: MaybeRefOrGetter<string | readonly string[]>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Reactive IANA time zone.
|
|
77
|
+
*
|
|
78
|
+
* @default "UTC"
|
|
79
|
+
*/
|
|
80
|
+
readonly timeZone?: MaybeRefOrGetter<string>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const tokenPattern =
|
|
84
|
+
/\[([^\]]*)]|YYYY|YY|MMMM|MMM|MM|M|DD|D|dddd|ddd|dd|d|HH|H|hh|h|mm|m|ss|s|SSS|A|a|ZZ|Z/g;
|
|
85
|
+
|
|
86
|
+
const weekdayIndex: Readonly<Record<string, number>> = {
|
|
87
|
+
Sun: 0,
|
|
88
|
+
Mon: 1,
|
|
89
|
+
Tue: 2,
|
|
90
|
+
Wed: 3,
|
|
91
|
+
Thu: 4,
|
|
92
|
+
Fri: 5,
|
|
93
|
+
Sat: 6,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
function toDate(input: DateFormatInput): Date {
|
|
97
|
+
const date = input instanceof Date ? new Date(input.getTime()) : new Date(input);
|
|
98
|
+
if (Number.isNaN(date.getTime())) {
|
|
99
|
+
throw new RangeError(
|
|
100
|
+
`[VIZE_COMPOSE_DATE_FORMAT_INVALID_DATE] expected a valid date; received ${String(input)}`,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return date;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function pad(value: number, length: number): string {
|
|
107
|
+
return String(value).padStart(length, "0");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function partsOf(formatter: Intl.DateTimeFormat, date: Date): Map<string, string> {
|
|
111
|
+
return new Map(formatter.formatToParts(date).map((part) => [part.type, part.value]));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Format a date with a token pattern or `Intl.DateTimeFormat` options.
|
|
116
|
+
*
|
|
117
|
+
* Pure and deterministic: locale and time zone default to fixed values
|
|
118
|
+
* (`"en"`, `"UTC"`) rather than host settings, so the same input renders
|
|
119
|
+
* identically on server and client. Calendar fields are computed in the
|
|
120
|
+
* requested time zone through `Intl`, so no host-zone arithmetic leaks in.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* formatDate(0, "YYYY-MM-DD HH:mm:ss"); // "1970-01-01 00:00:00"
|
|
125
|
+
* formatDate(0, "dddd, MMMM D [at] h:mm A", { locale: "en", timeZone: "Asia/Tokyo" });
|
|
126
|
+
* formatDate(0, { dateStyle: "long" }, { locale: "ja" }); // "1970年1月1日"
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @param input Date to format.
|
|
130
|
+
* @param format Token pattern (see {@link DateFormatToken}) or `Intl` options.
|
|
131
|
+
* @param options Locale and time zone.
|
|
132
|
+
* @default format "HH:mm:ss"
|
|
133
|
+
* @default options {}
|
|
134
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_DATE_FORMAT_INVALID_DATE` for
|
|
135
|
+
* invalid dates, and `RangeError` from `Intl` for invalid locales or zones.
|
|
136
|
+
* @returns The formatted string.
|
|
137
|
+
*/
|
|
138
|
+
export function formatDate(
|
|
139
|
+
input: DateFormatInput,
|
|
140
|
+
format: string | Intl.DateTimeFormatOptions = "HH:mm:ss",
|
|
141
|
+
options: FormatDateOptions = {},
|
|
142
|
+
): string {
|
|
143
|
+
const date = toDate(input);
|
|
144
|
+
const locales =
|
|
145
|
+
typeof options.locale === "string" ? options.locale : [...(options.locale ?? ["en"])];
|
|
146
|
+
const timeZone = options.timeZone ?? "UTC";
|
|
147
|
+
|
|
148
|
+
if (typeof format !== "string") {
|
|
149
|
+
return new Intl.DateTimeFormat(locales, { ...format, timeZone }).format(date);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const numeric = partsOf(
|
|
153
|
+
new Intl.DateTimeFormat("en-US", {
|
|
154
|
+
timeZone,
|
|
155
|
+
hourCycle: "h23",
|
|
156
|
+
year: "numeric",
|
|
157
|
+
month: "numeric",
|
|
158
|
+
day: "numeric",
|
|
159
|
+
hour: "numeric",
|
|
160
|
+
minute: "numeric",
|
|
161
|
+
second: "numeric",
|
|
162
|
+
weekday: "short",
|
|
163
|
+
timeZoneName: "longOffset",
|
|
164
|
+
}),
|
|
165
|
+
date,
|
|
166
|
+
);
|
|
167
|
+
const field = (type: string): number => Number(numeric.get(type) ?? "0");
|
|
168
|
+
const localized = (formatOptions: Intl.DateTimeFormatOptions): string =>
|
|
169
|
+
new Intl.DateTimeFormat(locales, { ...formatOptions, timeZone }).format(date);
|
|
170
|
+
|
|
171
|
+
const year = field("year");
|
|
172
|
+
const month = field("month");
|
|
173
|
+
const day = field("day");
|
|
174
|
+
const hour = field("hour") % 24;
|
|
175
|
+
const minute = field("minute");
|
|
176
|
+
const second = field("second");
|
|
177
|
+
const offset = (numeric.get("timeZoneName") ?? "GMT").replace("GMT", "") || "+00:00";
|
|
178
|
+
|
|
179
|
+
const meridiem = (): string =>
|
|
180
|
+
partsOf(
|
|
181
|
+
new Intl.DateTimeFormat(locales, { hour: "numeric", hourCycle: "h12", timeZone }),
|
|
182
|
+
date,
|
|
183
|
+
).get("dayPeriod") ?? (hour < 12 ? "AM" : "PM");
|
|
184
|
+
|
|
185
|
+
const render = (token: string): string => {
|
|
186
|
+
switch (token) {
|
|
187
|
+
case "YYYY":
|
|
188
|
+
return pad(year, 4);
|
|
189
|
+
case "YY":
|
|
190
|
+
return pad(year % 100, 2);
|
|
191
|
+
case "M":
|
|
192
|
+
return String(month);
|
|
193
|
+
case "MM":
|
|
194
|
+
return pad(month, 2);
|
|
195
|
+
case "MMM":
|
|
196
|
+
return localized({ month: "short" });
|
|
197
|
+
case "MMMM":
|
|
198
|
+
return localized({ month: "long" });
|
|
199
|
+
case "D":
|
|
200
|
+
return String(day);
|
|
201
|
+
case "DD":
|
|
202
|
+
return pad(day, 2);
|
|
203
|
+
case "d":
|
|
204
|
+
return String(weekdayIndex[numeric.get("weekday") ?? "Sun"] ?? 0);
|
|
205
|
+
case "dd":
|
|
206
|
+
return localized({ weekday: "narrow" });
|
|
207
|
+
case "ddd":
|
|
208
|
+
return localized({ weekday: "short" });
|
|
209
|
+
case "dddd":
|
|
210
|
+
return localized({ weekday: "long" });
|
|
211
|
+
case "H":
|
|
212
|
+
return String(hour);
|
|
213
|
+
case "HH":
|
|
214
|
+
return pad(hour, 2);
|
|
215
|
+
case "h":
|
|
216
|
+
return String(hour % 12 || 12);
|
|
217
|
+
case "hh":
|
|
218
|
+
return pad(hour % 12 || 12, 2);
|
|
219
|
+
case "m":
|
|
220
|
+
return String(minute);
|
|
221
|
+
case "mm":
|
|
222
|
+
return pad(minute, 2);
|
|
223
|
+
case "s":
|
|
224
|
+
return String(second);
|
|
225
|
+
case "ss":
|
|
226
|
+
return pad(second, 2);
|
|
227
|
+
case "SSS":
|
|
228
|
+
return pad(date.getUTCMilliseconds(), 3);
|
|
229
|
+
case "A":
|
|
230
|
+
return meridiem();
|
|
231
|
+
case "a":
|
|
232
|
+
return meridiem().toLowerCase();
|
|
233
|
+
case "Z":
|
|
234
|
+
return offset;
|
|
235
|
+
default:
|
|
236
|
+
return offset.replace(":", "");
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
return format.replaceAll(
|
|
241
|
+
tokenPattern,
|
|
242
|
+
(match: string, literal: string | undefined) => literal ?? render(match),
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Reactive formatted date.
|
|
248
|
+
*
|
|
249
|
+
* Wraps {@link formatDate} in a computed ref; the date, the format, the
|
|
250
|
+
* locale, and the time zone are all reactive. Deterministic defaults (`"en"`,
|
|
251
|
+
* `"UTC"`) keep server and client output identical. No timers, no globals,
|
|
252
|
+
* nothing to dispose.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```ts
|
|
256
|
+
* const label = useDateFormat(() => event.value.startsAt, "ddd, MMM D HH:mm", {
|
|
257
|
+
* locale: () => locale.value,
|
|
258
|
+
* timeZone: "Europe/Paris",
|
|
259
|
+
* });
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* @param input Reactive date.
|
|
263
|
+
* @param format Reactive token pattern or `Intl` options.
|
|
264
|
+
* @param options Reactive locale and time zone.
|
|
265
|
+
* @default format "HH:mm:ss"
|
|
266
|
+
* @default options {}
|
|
267
|
+
* @throws `RangeError` on read for invalid dates, locales, or zones.
|
|
268
|
+
* @returns Computed formatted string.
|
|
269
|
+
*/
|
|
270
|
+
export function useDateFormat(
|
|
271
|
+
input: MaybeRefOrGetter<DateFormatInput>,
|
|
272
|
+
format: MaybeRefOrGetter<string | Intl.DateTimeFormatOptions> = "HH:mm:ss",
|
|
273
|
+
options: UseDateFormatOptions = {},
|
|
274
|
+
): ComputedRef<string> {
|
|
275
|
+
return computed(() =>
|
|
276
|
+
formatDate(toValue(input), toValue(format), {
|
|
277
|
+
locale: toValue(options.locale) ?? "en",
|
|
278
|
+
timeZone: toValue(options.timeZone) ?? "UTC",
|
|
279
|
+
}),
|
|
280
|
+
);
|
|
281
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
import type { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
3
|
+
|
|
4
|
+
import { useLocale } from "./locale.ts";
|
|
5
|
+
|
|
6
|
+
/** Values accepted by `Intl.DateTimeFormat`: a `Date` or Unix milliseconds. */
|
|
7
|
+
export type FormattableDate = Date | number;
|
|
8
|
+
|
|
9
|
+
/** Options for {@link useDateTimeFormat}. */
|
|
10
|
+
export interface UseDateTimeFormatOptions extends Intl.DateTimeFormatOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Locale used for formatting. Pass it explicitly (and a `timeZone`) for
|
|
13
|
+
* server rendering: the server falls back to `"en"` and its own time zone.
|
|
14
|
+
*
|
|
15
|
+
* @default the browser language, otherwise "en"
|
|
16
|
+
*/
|
|
17
|
+
readonly locale?: string | Intl.Locale;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Reactive date formatting returned by {@link useDateTimeFormat}. */
|
|
21
|
+
export interface DateTimeFormatControls {
|
|
22
|
+
/** Canonical locale in use. */
|
|
23
|
+
readonly locale: ComputedRef<string>;
|
|
24
|
+
|
|
25
|
+
/** Cached formatter for the current locale and options. */
|
|
26
|
+
readonly formatter: ComputedRef<Intl.DateTimeFormat>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Formatted `value`, or `""` while the value is `null`/`undefined` or an
|
|
30
|
+
* invalid date.
|
|
31
|
+
*/
|
|
32
|
+
readonly formatted: ComputedRef<string>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Format any date with the current formatter.
|
|
36
|
+
*
|
|
37
|
+
* @param value Date or Unix milliseconds.
|
|
38
|
+
* @returns The formatted string.
|
|
39
|
+
* @throws {RangeError} For an invalid date, as `Intl.DateTimeFormat` does.
|
|
40
|
+
*/
|
|
41
|
+
readonly format: (value: FormattableDate) => string;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Format any date into locale-aware parts.
|
|
45
|
+
*
|
|
46
|
+
* @param value Date or Unix milliseconds.
|
|
47
|
+
* @returns The formatted parts.
|
|
48
|
+
*/
|
|
49
|
+
readonly formatToParts: (value: FormattableDate) => Intl.DateTimeFormatPart[];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Format a date range, collapsing shared fields (for example `"Jan 3 – 5, 2026"`).
|
|
53
|
+
*
|
|
54
|
+
* @param start Range start.
|
|
55
|
+
* @param end Range end.
|
|
56
|
+
* @returns The formatted range.
|
|
57
|
+
*/
|
|
58
|
+
readonly formatRange: (start: FormattableDate, end: FormattableDate) => string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function browserLanguage(): string | undefined {
|
|
62
|
+
return typeof window === "undefined" ? undefined : window.navigator.language;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function isValidDate(value: FormattableDate): boolean {
|
|
66
|
+
return !Number.isNaN(value instanceof Date ? value.getTime() : value);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Format dates and times reactively with `Intl.DateTimeFormat`.
|
|
71
|
+
*
|
|
72
|
+
* The formatter follows the reactive options (including `locale`) and is
|
|
73
|
+
* cached per locale and option set through {@link useLocale}. For
|
|
74
|
+
* hydration-stable output pass both `locale` and `timeZone`: otherwise the
|
|
75
|
+
* server uses `"en"` and its own zone. Invalid options surface as the
|
|
76
|
+
* platform's `RangeError` on first read; invalid dates render as `""`.
|
|
77
|
+
* No listeners or timers are created — combine with a clock composable for
|
|
78
|
+
* live-updating output.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const { formatted } = useDateTimeFormat(date, { locale: "en-GB", dateStyle: "long", timeZone: "UTC" });
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @param value Reactive date; `null`/`undefined` format as `""`.
|
|
86
|
+
* @param options Reactive locale and `Intl.DateTimeFormat` options.
|
|
87
|
+
* @default value undefined
|
|
88
|
+
* @default options {}
|
|
89
|
+
* @returns Reactive formatted output and formatter helpers.
|
|
90
|
+
*/
|
|
91
|
+
export function useDateTimeFormat(
|
|
92
|
+
value?: MaybeRefOrGetter<FormattableDate | null | undefined>,
|
|
93
|
+
options: MaybeRefOrGetter<UseDateTimeFormatOptions> = {},
|
|
94
|
+
): DateTimeFormatControls {
|
|
95
|
+
const localeControls = useLocale(() => toValue(options).locale, { detect: browserLanguage });
|
|
96
|
+
const formatter = computed(() => {
|
|
97
|
+
const { locale: _locale, ...formatOptions } = toValue(options);
|
|
98
|
+
return localeControls.dateTime(formatOptions);
|
|
99
|
+
});
|
|
100
|
+
const formatted = computed(() => {
|
|
101
|
+
const current = value === undefined ? undefined : toValue(value);
|
|
102
|
+
if (current === null || current === undefined || !isValidDate(current)) return "";
|
|
103
|
+
return formatter.value.format(current);
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
locale: localeControls.locale,
|
|
107
|
+
formatter,
|
|
108
|
+
formatted,
|
|
109
|
+
format: (input) => formatter.value.format(input),
|
|
110
|
+
formatToParts: (input) => formatter.value.formatToParts(input),
|
|
111
|
+
formatRange: (start, end) => formatter.value.formatRange(start, end),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { shallowRef, toValue, watch } from "vue";
|
|
2
|
+
import type { MaybeRefOrGetter, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
5
|
+
import type { TimeoutScheduler } from "./timeout-scheduler.ts";
|
|
6
|
+
|
|
7
|
+
/** Options for {@link useDebounced}. */
|
|
8
|
+
export interface UseDebouncedOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Applies the timing policy when no browser `window` is available.
|
|
11
|
+
*
|
|
12
|
+
* Keep this disabled during server rendering, where the debounced view
|
|
13
|
+
* mirrors the source synchronously instead of starting timers. Enable it
|
|
14
|
+
* for native, desktop, worker, and test runtimes whose scheduler is
|
|
15
|
+
* lifecycle-bound.
|
|
16
|
+
*
|
|
17
|
+
* @default false
|
|
18
|
+
*/
|
|
19
|
+
readonly runOnServer?: boolean;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Owns the single-shot timer.
|
|
23
|
+
*
|
|
24
|
+
* @default globalThis timer functions
|
|
25
|
+
*/
|
|
26
|
+
readonly scheduler?: TimeoutScheduler;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Reactive debounced view and controls returned by {@link useDebounced}. */
|
|
30
|
+
export interface DebouncedControls<Value> {
|
|
31
|
+
/** Readonly view of the source that settles `waitMs` after the last change. */
|
|
32
|
+
readonly debounced: Readonly<ShallowRef<Value>>;
|
|
33
|
+
|
|
34
|
+
/** Whether a trailing update is currently scheduled. */
|
|
35
|
+
readonly pending: Readonly<ShallowRef<boolean>>;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Discard the scheduled trailing update and keep the last settled value.
|
|
39
|
+
* Later source changes debounce again as usual.
|
|
40
|
+
*
|
|
41
|
+
* @returns Whether a scheduled update was discarded.
|
|
42
|
+
*/
|
|
43
|
+
readonly cancel: () => boolean;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Apply the current source value immediately instead of waiting out the
|
|
47
|
+
* delay.
|
|
48
|
+
*
|
|
49
|
+
* @returns Whether a scheduled update was applied.
|
|
50
|
+
*/
|
|
51
|
+
readonly flush: () => boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const defaultScheduler: TimeoutScheduler = {
|
|
55
|
+
setTimeout: (callback, delayMs) => globalThis.setTimeout(callback, delayMs),
|
|
56
|
+
clearTimeout: (handle) => {
|
|
57
|
+
globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create a readonly debounced view of a reactive source.
|
|
63
|
+
*
|
|
64
|
+
* The view starts at the current source value. Each source change (observed
|
|
65
|
+
* with `flush: "sync"`, so every synchronous write counts) restarts a
|
|
66
|
+
* single-shot timer of `waitMs` milliseconds; when it fires, the view takes
|
|
67
|
+
* the source value current at that moment. `waitMs` is reactive and is read
|
|
68
|
+
* when a timer is scheduled; changing it does not restart an already-pending
|
|
69
|
+
* timer. A wait of `0` still defers to the next scheduler tick.
|
|
70
|
+
*
|
|
71
|
+
* Server rendering is explicit: without a browser `window` (and with
|
|
72
|
+
* {@link UseDebouncedOptions.runOnServer} disabled) no timer ever starts and
|
|
73
|
+
* the view mirrors the source synchronously, so server-rendered output shows
|
|
74
|
+
* current values and nothing leaks. `pending` stays `false` and the controls
|
|
75
|
+
* report `false` in that mode.
|
|
76
|
+
*
|
|
77
|
+
* Cleanup rule: the watcher and any pending timer are released when the
|
|
78
|
+
* owning reactive scope stops; call inside an active scope. Outside one, the
|
|
79
|
+
* watcher lives as long as the source and `cancel()` only clears the pending
|
|
80
|
+
* timer.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* const query = shallowRef("");
|
|
85
|
+
* const { debounced, flush } = useDebounced(query, 300);
|
|
86
|
+
* query.value = "vize"; // debounced.value still "" for 300ms
|
|
87
|
+
* flush(); // debounced.value === "vize" immediately
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* @param source Reactive source to debounce.
|
|
91
|
+
* @param waitMs Reactive delay in milliseconds; must be finite and at least
|
|
92
|
+
* zero. Fractions are truncated.
|
|
93
|
+
* @param options Runtime scheduling overrides.
|
|
94
|
+
* @default options {}
|
|
95
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_DEBOUNCE_INVALID_WAIT` when the
|
|
96
|
+
* resolved wait is not finite or is negative, both synchronously at creation
|
|
97
|
+
* (even in mirror mode) and again for every scheduled delay.
|
|
98
|
+
* @returns Readonly debounced view, pending flag, and cancel/flush controls.
|
|
99
|
+
*/
|
|
100
|
+
export function useDebounced<Value>(
|
|
101
|
+
source: MaybeRefOrGetter<Value>,
|
|
102
|
+
waitMs: MaybeRefOrGetter<number>,
|
|
103
|
+
options: UseDebouncedOptions = {},
|
|
104
|
+
): DebouncedControls<Value> {
|
|
105
|
+
const scheduler = options.scheduler ?? defaultScheduler;
|
|
106
|
+
const debounced = shallowRef(toValue(source));
|
|
107
|
+
const pending = shallowRef(false);
|
|
108
|
+
let handle: unknown;
|
|
109
|
+
|
|
110
|
+
// Fail synchronously for invalid initial input, even in mirror mode.
|
|
111
|
+
resolveWaitMs(toValue(waitMs));
|
|
112
|
+
|
|
113
|
+
const apply = (): void => {
|
|
114
|
+
handle = undefined;
|
|
115
|
+
pending.value = false;
|
|
116
|
+
debounced.value = toValue(source);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const cancel = (): boolean => {
|
|
120
|
+
if (!pending.value) return false;
|
|
121
|
+
scheduler.clearTimeout(handle);
|
|
122
|
+
handle = undefined;
|
|
123
|
+
pending.value = false;
|
|
124
|
+
return true;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const flush = (): boolean => {
|
|
128
|
+
if (!pending.value) return false;
|
|
129
|
+
scheduler.clearTimeout(handle);
|
|
130
|
+
apply();
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
watch(
|
|
135
|
+
() => toValue(source),
|
|
136
|
+
(next) => {
|
|
137
|
+
if (typeof window === "undefined" && !(options.runOnServer ?? false)) {
|
|
138
|
+
debounced.value = next;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const delayMs = resolveWaitMs(toValue(waitMs));
|
|
142
|
+
if (pending.value) scheduler.clearTimeout(handle);
|
|
143
|
+
pending.value = true;
|
|
144
|
+
handle = scheduler.setTimeout(apply, delayMs);
|
|
145
|
+
},
|
|
146
|
+
{ flush: "sync" },
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
tryOnScopeDispose(() => {
|
|
150
|
+
cancel();
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
return { debounced, pending, cancel, flush };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function resolveWaitMs(value: number): number {
|
|
157
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
158
|
+
throw new RangeError(
|
|
159
|
+
`[VIZE_COMPOSE_DEBOUNCE_INVALID_WAIT] waitMs must be finite and at least zero; received ${String(value)}`,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return Math.trunc(value);
|
|
163
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { toValue } from "vue";
|
|
2
|
+
import type { MaybeRefOrGetter } from "vue";
|
|
3
|
+
|
|
4
|
+
import { useMediaStream } from "./use-user-media.ts";
|
|
5
|
+
import type { MediaStreamControls, MediaStreamLike } from "./use-user-media.ts";
|
|
6
|
+
|
|
7
|
+
/** Minimal `MediaDevices` consumed by {@link useDisplayMedia}. */
|
|
8
|
+
export interface DisplayMediaHost {
|
|
9
|
+
/** Ask the user to pick a screen, window, or tab to capture. */
|
|
10
|
+
getDisplayMedia(options?: DisplayMediaStreamOptions): Promise<MediaStreamLike>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Options for {@link useDisplayMedia}. */
|
|
14
|
+
export interface UseDisplayMediaOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Video capture constraints.
|
|
17
|
+
*
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
readonly video?: MaybeRefOrGetter<boolean | MediaTrackConstraints>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Audio capture constraints (tab or system audio where supported).
|
|
24
|
+
*
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
readonly audio?: MaybeRefOrGetter<boolean | MediaTrackConstraints>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Start while `true`, stop while `false`. Browsers require a user gesture
|
|
31
|
+
* for screen capture, so prefer calling `start` from an event handler.
|
|
32
|
+
*
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
readonly enabled?: MaybeRefOrGetter<boolean>;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* `MediaDevices` capability for alternate runtimes and tests.
|
|
39
|
+
*
|
|
40
|
+
* @default window.navigator.mediaDevices when it implements `getDisplayMedia`
|
|
41
|
+
*/
|
|
42
|
+
readonly host?: MaybeRefOrGetter<DisplayMediaHost | null | undefined>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function browserDisplayMediaHost(): DisplayMediaHost | undefined {
|
|
46
|
+
if (typeof window === "undefined") return undefined;
|
|
47
|
+
// `mediaDevices` is undefined in insecure contexts despite its DOM typing.
|
|
48
|
+
const devices: MediaDevices | undefined = window.navigator.mediaDevices;
|
|
49
|
+
return devices && typeof devices.getDisplayMedia === "function" ? devices : undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Capture a screen, window, or tab with `getDisplayMedia`.
|
|
54
|
+
*
|
|
55
|
+
* Shares the stream lifecycle of `useMediaStream` (from `use-user-media`):
|
|
56
|
+
* classified failures (`"permission-denied"` when the user dismisses the
|
|
57
|
+
* picker), latest-wins requests, and automatic return to `"idle"` when the
|
|
58
|
+
* user ends sharing from the browser UI (every track `ended`). Tracks are
|
|
59
|
+
* stopped when the owning reactive scope stops.
|
|
60
|
+
*
|
|
61
|
+
* Server rendering: nothing is captured; `status` is `"idle"` and
|
|
62
|
+
* `supported` is false.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const screen = useDisplayMedia({ audio: true });
|
|
67
|
+
* const share = () => screen.start();
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @param options Capture constraints, activation, and capability.
|
|
71
|
+
* @default options {}
|
|
72
|
+
* @returns Stream state and actions.
|
|
73
|
+
*/
|
|
74
|
+
export function useDisplayMedia(options: UseDisplayMediaOptions = {}): MediaStreamControls {
|
|
75
|
+
const resolveHost = (): DisplayMediaHost | undefined =>
|
|
76
|
+
options.host === undefined ? browserDisplayMediaHost() : (toValue(options.host) ?? undefined);
|
|
77
|
+
|
|
78
|
+
return useMediaStream<DisplayMediaStreamOptions>({
|
|
79
|
+
source: () => {
|
|
80
|
+
const host = resolveHost();
|
|
81
|
+
return host ? { request: (constraints) => host.getDisplayMedia(constraints) } : undefined;
|
|
82
|
+
},
|
|
83
|
+
constraints: () => ({
|
|
84
|
+
video: toValue(options.video) ?? true,
|
|
85
|
+
audio: toValue(options.audio) ?? false,
|
|
86
|
+
}),
|
|
87
|
+
enabled: () => toValue(options.enabled) ?? false,
|
|
88
|
+
});
|
|
89
|
+
}
|