@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,96 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter, Ref } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-css-var.d.ts
|
|
4
|
+
/** Style declaration subset used by {@link useCssVar}. */
|
|
5
|
+
interface CssVarStyle {
|
|
6
|
+
/** Read a property value. */
|
|
7
|
+
getPropertyValue(name: string): string;
|
|
8
|
+
/** Write a property value. */
|
|
9
|
+
setProperty(name: string, value: string | null): void;
|
|
10
|
+
/** Remove a property. */
|
|
11
|
+
removeProperty(name: string): string;
|
|
12
|
+
}
|
|
13
|
+
/** Element subset used by {@link useCssVar}. */
|
|
14
|
+
interface CssVarTarget {
|
|
15
|
+
/** Inline style declaration. */
|
|
16
|
+
readonly style: CssVarStyle;
|
|
17
|
+
}
|
|
18
|
+
/** Minimal `MutationObserver` instance. */
|
|
19
|
+
interface CssVarObserver {
|
|
20
|
+
/** Start observing `target`. */
|
|
21
|
+
observe(target: CssVarTarget, options: {
|
|
22
|
+
attributes: true;
|
|
23
|
+
attributeFilter: string[];
|
|
24
|
+
}): void;
|
|
25
|
+
/** Stop observing. */
|
|
26
|
+
disconnect(): void;
|
|
27
|
+
}
|
|
28
|
+
/** Capabilities used by {@link useCssVar}. */
|
|
29
|
+
interface CssVarHost {
|
|
30
|
+
/** Resolved (computed) style of a target. */
|
|
31
|
+
getComputedStyle(target: CssVarTarget): Pick<CssVarStyle, "getPropertyValue">;
|
|
32
|
+
/** Target used when none is given (the document root element). */
|
|
33
|
+
readonly documentElement: CssVarTarget;
|
|
34
|
+
/** Observer factory used when `observe` is enabled. */
|
|
35
|
+
readonly createObserver?: (callback: () => void) => CssVarObserver;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link useCssVar}. */
|
|
38
|
+
interface UseCssVarOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Value used while the variable is unset and during server rendering.
|
|
41
|
+
*
|
|
42
|
+
* @default ""
|
|
43
|
+
*/
|
|
44
|
+
readonly initialValue?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Re-read the variable when the target's `style` or `class` attribute
|
|
47
|
+
* changes (MutationObserver).
|
|
48
|
+
*
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
readonly observe?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Style capability for alternate runtimes and tests.
|
|
54
|
+
*
|
|
55
|
+
* @default window.getComputedStyle, document.documentElement, and MutationObserver
|
|
56
|
+
*/
|
|
57
|
+
readonly host?: MaybeRefOrGetter<CssVarHost | null | undefined>;
|
|
58
|
+
}
|
|
59
|
+
/** Reactive state returned by {@link useCssVar}. */
|
|
60
|
+
interface CssVarControls {
|
|
61
|
+
/** Writable variable value; assignments are written as inline style. */
|
|
62
|
+
readonly value: Ref<string>;
|
|
63
|
+
/** Whether a style capability and target are attached. */
|
|
64
|
+
readonly supported: ComputedRef<boolean>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Read and write a CSS custom property reactively.
|
|
68
|
+
*
|
|
69
|
+
* The value is read from the target's computed style whenever the
|
|
70
|
+
* reactive name, target, or host changes (and, with `observe`, when its
|
|
71
|
+
* `style`/`class` attribute changes). Assigning `value` writes an inline
|
|
72
|
+
* `style.setProperty`; assigning `""` removes the inline declaration. Values
|
|
73
|
+
* read from the element are never written back, so a stylesheet-provided
|
|
74
|
+
* variable is not frozen into inline style.
|
|
75
|
+
*
|
|
76
|
+
* Server rendering: nothing is read or written; `value` holds
|
|
77
|
+
* `initialValue`. Keep server markup and the first client render identical
|
|
78
|
+
* by rendering from `initialValue` until mounted. The observer and
|
|
79
|
+
* watchers are released with the owning reactive scope.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* const accent = useCssVar("--accent", rootRef, { initialValue: "#0af" });
|
|
84
|
+
* accent.value.value = "#f60";
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @param name Reactive custom property name, starting with `--`.
|
|
88
|
+
* @param target Reactive element; defaults to the document root element.
|
|
89
|
+
* @param options Initial value, observation, and capability.
|
|
90
|
+
* @default options {}
|
|
91
|
+
* @returns The writable variable value.
|
|
92
|
+
* @throws {TypeError} `[VIZE_COMPOSE_CSS_VAR_INVALID_NAME]` when the name does not start with `--`.
|
|
93
|
+
*/
|
|
94
|
+
declare function useCssVar(name: MaybeRefOrGetter<string>, target?: MaybeRefOrGetter<CssVarTarget | null | undefined>, options?: UseCssVarOptions): CssVarControls;
|
|
95
|
+
//#endregion
|
|
96
|
+
export { CssVarControls, CssVarHost, CssVarObserver, CssVarStyle, CssVarTarget, UseCssVarOptions, useCssVar };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { computed, ref, toValue, watch } from "vue";
|
|
2
|
+
//#region src/use-css-var.ts
|
|
3
|
+
function browserCssVarHost() {
|
|
4
|
+
if (typeof window === "undefined") return void 0;
|
|
5
|
+
const view = window;
|
|
6
|
+
return {
|
|
7
|
+
getComputedStyle: (target) => target instanceof view.Element ? view.getComputedStyle(target) : target.style,
|
|
8
|
+
documentElement: view.document.documentElement,
|
|
9
|
+
createObserver: (callback) => {
|
|
10
|
+
const observer = new view.MutationObserver(callback);
|
|
11
|
+
return {
|
|
12
|
+
observe: (target, init) => {
|
|
13
|
+
if (target instanceof view.Node) observer.observe(target, init);
|
|
14
|
+
},
|
|
15
|
+
disconnect: () => observer.disconnect()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function assertVariableName(name) {
|
|
21
|
+
if (!name.startsWith("--")) throw new TypeError(`[VIZE_COMPOSE_CSS_VAR_INVALID_NAME] custom property names must start with "--"; received ${JSON.stringify(name)}`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read and write a CSS custom property reactively.
|
|
25
|
+
*
|
|
26
|
+
* The value is read from the target's computed style whenever the
|
|
27
|
+
* reactive name, target, or host changes (and, with `observe`, when its
|
|
28
|
+
* `style`/`class` attribute changes). Assigning `value` writes an inline
|
|
29
|
+
* `style.setProperty`; assigning `""` removes the inline declaration. Values
|
|
30
|
+
* read from the element are never written back, so a stylesheet-provided
|
|
31
|
+
* variable is not frozen into inline style.
|
|
32
|
+
*
|
|
33
|
+
* Server rendering: nothing is read or written; `value` holds
|
|
34
|
+
* `initialValue`. Keep server markup and the first client render identical
|
|
35
|
+
* by rendering from `initialValue` until mounted. The observer and
|
|
36
|
+
* watchers are released with the owning reactive scope.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const accent = useCssVar("--accent", rootRef, { initialValue: "#0af" });
|
|
41
|
+
* accent.value.value = "#f60";
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @param name Reactive custom property name, starting with `--`.
|
|
45
|
+
* @param target Reactive element; defaults to the document root element.
|
|
46
|
+
* @param options Initial value, observation, and capability.
|
|
47
|
+
* @default options {}
|
|
48
|
+
* @returns The writable variable value.
|
|
49
|
+
* @throws {TypeError} `[VIZE_COMPOSE_CSS_VAR_INVALID_NAME]` when the name does not start with `--`.
|
|
50
|
+
*/
|
|
51
|
+
function useCssVar(name, target, options = {}) {
|
|
52
|
+
const initialValue = options.initialValue ?? "";
|
|
53
|
+
assertVariableName(toValue(name));
|
|
54
|
+
const value = ref(initialValue);
|
|
55
|
+
let lastRead;
|
|
56
|
+
const resolveHost = () => options.host === void 0 ? browserCssVarHost() : toValue(options.host) ?? void 0;
|
|
57
|
+
const resolveTarget = (host) => {
|
|
58
|
+
if (!host) return void 0;
|
|
59
|
+
return target === void 0 ? host.documentElement : toValue(target) ?? void 0;
|
|
60
|
+
};
|
|
61
|
+
const read = (host, element, variable) => {
|
|
62
|
+
const current = host.getComputedStyle(element).getPropertyValue(variable).trim();
|
|
63
|
+
const next = current === "" ? initialValue : current;
|
|
64
|
+
lastRead = next;
|
|
65
|
+
value.value = next;
|
|
66
|
+
};
|
|
67
|
+
watch(() => {
|
|
68
|
+
const host = resolveHost();
|
|
69
|
+
return [
|
|
70
|
+
host,
|
|
71
|
+
resolveTarget(host),
|
|
72
|
+
toValue(name)
|
|
73
|
+
];
|
|
74
|
+
}, ([host, element, variable], _previous, onCleanup) => {
|
|
75
|
+
assertVariableName(variable);
|
|
76
|
+
if (!host || !element) return;
|
|
77
|
+
read(host, element, variable);
|
|
78
|
+
if (!(options.observe ?? false) || !host.createObserver) return;
|
|
79
|
+
const observer = host.createObserver(() => read(host, element, variable));
|
|
80
|
+
observer.observe(element, {
|
|
81
|
+
attributes: true,
|
|
82
|
+
attributeFilter: ["style", "class"]
|
|
83
|
+
});
|
|
84
|
+
onCleanup(() => observer.disconnect());
|
|
85
|
+
}, {
|
|
86
|
+
immediate: true,
|
|
87
|
+
flush: "sync"
|
|
88
|
+
});
|
|
89
|
+
watch(value, (next) => {
|
|
90
|
+
if (next === lastRead) return;
|
|
91
|
+
lastRead = void 0;
|
|
92
|
+
const element = resolveTarget(resolveHost());
|
|
93
|
+
if (!element) return;
|
|
94
|
+
const variable = toValue(name);
|
|
95
|
+
if (next === "") element.style.removeProperty(variable);
|
|
96
|
+
else element.style.setProperty(variable, next);
|
|
97
|
+
}, { flush: "sync" });
|
|
98
|
+
return {
|
|
99
|
+
value,
|
|
100
|
+
supported: computed(() => resolveTarget(resolveHost()) !== void 0)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { useCssVar };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { MaybeRefOrGetter, ShallowRef, WritableComputedRef } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-cycle-list.d.ts
|
|
4
|
+
/** Options for {@link useCycleList}. */
|
|
5
|
+
interface UseCycleListOptions<Item> {
|
|
6
|
+
/**
|
|
7
|
+
* Item selected initially.
|
|
8
|
+
*
|
|
9
|
+
* @default the first item
|
|
10
|
+
*/
|
|
11
|
+
readonly initialValue?: Item;
|
|
12
|
+
/**
|
|
13
|
+
* Index used when the current item is not in the list.
|
|
14
|
+
*
|
|
15
|
+
* @default 0
|
|
16
|
+
*/
|
|
17
|
+
readonly fallbackIndex?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Locate an item in the list, for example by id.
|
|
20
|
+
*
|
|
21
|
+
* @default Array.prototype.indexOf
|
|
22
|
+
*/
|
|
23
|
+
readonly getIndexOf?: (item: Item, list: readonly Item[]) => number;
|
|
24
|
+
}
|
|
25
|
+
/** Cursor over a list returned by {@link useCycleList}. */
|
|
26
|
+
interface CycleList<Current, Item> {
|
|
27
|
+
/** Current item. Writable: assigning moves the cursor to that item. */
|
|
28
|
+
readonly state: ShallowRef<Current>;
|
|
29
|
+
/** Current index. Writable: assigning wraps around the list. */
|
|
30
|
+
readonly index: WritableComputedRef<number>;
|
|
31
|
+
/**
|
|
32
|
+
* Move forward `steps` items (default `1`), wrapping around.
|
|
33
|
+
*
|
|
34
|
+
* @returns The new current item.
|
|
35
|
+
*/
|
|
36
|
+
readonly next: (steps?: number) => Current;
|
|
37
|
+
/**
|
|
38
|
+
* Move backward `steps` items (default `1`), wrapping around.
|
|
39
|
+
*
|
|
40
|
+
* @returns The new current item.
|
|
41
|
+
*/
|
|
42
|
+
readonly prev: (steps?: number) => Current;
|
|
43
|
+
/**
|
|
44
|
+
* Jump to `index`, wrapping around.
|
|
45
|
+
*
|
|
46
|
+
* @returns The new current item.
|
|
47
|
+
*/
|
|
48
|
+
readonly go: (index: number) => Current;
|
|
49
|
+
/** The list items, for convenience. */
|
|
50
|
+
readonly list: Readonly<ShallowRef<readonly Item[]>>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Cycle through a list with wrap-around navigation.
|
|
54
|
+
*
|
|
55
|
+
* Non-empty tuple sources (`["light", "dark", "system"] as const`) yield a
|
|
56
|
+
* `state` typed as the element union; general arrays may be empty, so their
|
|
57
|
+
* `state` includes `undefined`. When the list changes, the cursor keeps the
|
|
58
|
+
* current item if it is still present and otherwise moves to
|
|
59
|
+
* `fallbackIndex`. Synchronous state: SSR-safe; the list watcher follows the
|
|
60
|
+
* owning scope.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* const { state, next } = useCycleList(["light", "dark", "system"] as const);
|
|
65
|
+
* next(); // "dark"
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @param list Reactive list to cycle through.
|
|
69
|
+
* @param options Initial item, fallback index, and item lookup.
|
|
70
|
+
* @default options {}
|
|
71
|
+
* @returns The cursor and navigation controls.
|
|
72
|
+
*/
|
|
73
|
+
declare function useCycleList<const List extends readonly [unknown, ...unknown[]]>(list: MaybeRefOrGetter<List>, options?: UseCycleListOptions<List[number]>): CycleList<List[number], List[number]>;
|
|
74
|
+
declare function useCycleList<Item>(list: MaybeRefOrGetter<readonly Item[]>, options?: UseCycleListOptions<Item>): CycleList<Item | undefined, Item>;
|
|
75
|
+
//#endregion
|
|
76
|
+
export { CycleList, UseCycleListOptions, useCycleList };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { computed, shallowRef, toValue, watch } from "vue";
|
|
2
|
+
//#region src/use-cycle-list.ts
|
|
3
|
+
function useCycleList(list, options = {}) {
|
|
4
|
+
const items = computed(() => toValue(list));
|
|
5
|
+
const locate = options.getIndexOf ?? ((item, all) => all.indexOf(item));
|
|
6
|
+
const state = shallowRef("initialValue" in options ? options.initialValue : items.value[0]);
|
|
7
|
+
const wrap = (index) => {
|
|
8
|
+
const length = items.value.length;
|
|
9
|
+
return length === 0 ? 0 : (Math.trunc(index) % length + length) % length;
|
|
10
|
+
};
|
|
11
|
+
const index = computed({
|
|
12
|
+
get: () => {
|
|
13
|
+
const current = state.value;
|
|
14
|
+
const found = current === void 0 ? -1 : locate(current, items.value);
|
|
15
|
+
return found === -1 ? wrap(options.fallbackIndex ?? 0) : found;
|
|
16
|
+
},
|
|
17
|
+
set: (next) => {
|
|
18
|
+
state.value = items.value[wrap(next)];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const go = (target) => {
|
|
22
|
+
index.value = target;
|
|
23
|
+
return state.value;
|
|
24
|
+
};
|
|
25
|
+
watch(items, () => {
|
|
26
|
+
const current = state.value;
|
|
27
|
+
if (current === void 0 || locate(current, items.value) === -1) state.value = items.value[wrap(options.fallbackIndex ?? 0)];
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
state,
|
|
31
|
+
index,
|
|
32
|
+
next: (steps = 1) => go(index.value + steps),
|
|
33
|
+
prev: (steps = 1) => go(index.value - steps),
|
|
34
|
+
go,
|
|
35
|
+
list: items
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { useCycleList };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-date-format.d.ts
|
|
4
|
+
/** Date input accepted by {@link formatDate} and {@link useDateFormat}. */
|
|
5
|
+
type DateFormatInput = Date | number | string;
|
|
6
|
+
/**
|
|
7
|
+
* Tokens understood by the pattern form of {@link formatDate}.
|
|
8
|
+
*
|
|
9
|
+
* | Token | Output | Token | Output |
|
|
10
|
+
* | --- | --- | --- | --- |
|
|
11
|
+
* | `YYYY` | 2026 | `YY` | 26 |
|
|
12
|
+
* | `M` / `MM` | 1 / 01 | `MMM` / `MMMM` | Jan / January (localized) |
|
|
13
|
+
* | `D` / `DD` | 5 / 05 | `d` | 0–6, Sunday is 0 |
|
|
14
|
+
* | `dd` / `ddd` / `dddd` | S / Sun / Sunday (localized) | `H` / `HH` | 0–23 |
|
|
15
|
+
* | `h` / `hh` | 1–12 | `m` / `mm`, `s` / `ss` | minutes, seconds |
|
|
16
|
+
* | `SSS` | milliseconds | `A` / `a` | AM / am (localized) |
|
|
17
|
+
* | `Z` / `ZZ` | +09:00 / +0900 | `[text]` | literal text |
|
|
18
|
+
*/
|
|
19
|
+
type DateFormatToken = "YYYY" | "YY" | "M" | "MM" | "MMM" | "MMMM" | "D" | "DD" | "d" | "dd" | "ddd" | "dddd" | "H" | "HH" | "h" | "hh" | "m" | "mm" | "s" | "ss" | "SSS" | "A" | "a" | "Z" | "ZZ";
|
|
20
|
+
/** Options for {@link formatDate}. */
|
|
21
|
+
interface FormatDateOptions {
|
|
22
|
+
/**
|
|
23
|
+
* BCP 47 locale(s) for names and `Intl` option formats. Defaults to a fixed
|
|
24
|
+
* locale (not the host default) so server and client output agree.
|
|
25
|
+
*
|
|
26
|
+
* @default "en"
|
|
27
|
+
*/
|
|
28
|
+
readonly locale?: string | readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* IANA time zone the date is rendered in. Defaults to UTC (not the host
|
|
31
|
+
* zone) for SSR determinism; pass the user's zone explicitly.
|
|
32
|
+
*
|
|
33
|
+
* @default "UTC"
|
|
34
|
+
*/
|
|
35
|
+
readonly timeZone?: string;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link useDateFormat}. */
|
|
38
|
+
interface UseDateFormatOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Reactive BCP 47 locale(s).
|
|
41
|
+
*
|
|
42
|
+
* @default "en"
|
|
43
|
+
*/
|
|
44
|
+
readonly locale?: MaybeRefOrGetter<string | readonly string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Reactive IANA time zone.
|
|
47
|
+
*
|
|
48
|
+
* @default "UTC"
|
|
49
|
+
*/
|
|
50
|
+
readonly timeZone?: MaybeRefOrGetter<string>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Format a date with a token pattern or `Intl.DateTimeFormat` options.
|
|
54
|
+
*
|
|
55
|
+
* Pure and deterministic: locale and time zone default to fixed values
|
|
56
|
+
* (`"en"`, `"UTC"`) rather than host settings, so the same input renders
|
|
57
|
+
* identically on server and client. Calendar fields are computed in the
|
|
58
|
+
* requested time zone through `Intl`, so no host-zone arithmetic leaks in.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* formatDate(0, "YYYY-MM-DD HH:mm:ss"); // "1970-01-01 00:00:00"
|
|
63
|
+
* formatDate(0, "dddd, MMMM D [at] h:mm A", { locale: "en", timeZone: "Asia/Tokyo" });
|
|
64
|
+
* formatDate(0, { dateStyle: "long" }, { locale: "ja" }); // "1970年1月1日"
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @param input Date to format.
|
|
68
|
+
* @param format Token pattern (see {@link DateFormatToken}) or `Intl` options.
|
|
69
|
+
* @param options Locale and time zone.
|
|
70
|
+
* @default format "HH:mm:ss"
|
|
71
|
+
* @default options {}
|
|
72
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_DATE_FORMAT_INVALID_DATE` for
|
|
73
|
+
* invalid dates, and `RangeError` from `Intl` for invalid locales or zones.
|
|
74
|
+
* @returns The formatted string.
|
|
75
|
+
*/
|
|
76
|
+
declare function formatDate(input: DateFormatInput, format?: string | Intl.DateTimeFormatOptions, options?: FormatDateOptions): string;
|
|
77
|
+
/**
|
|
78
|
+
* Reactive formatted date.
|
|
79
|
+
*
|
|
80
|
+
* Wraps {@link formatDate} in a computed ref; the date, the format, the
|
|
81
|
+
* locale, and the time zone are all reactive. Deterministic defaults (`"en"`,
|
|
82
|
+
* `"UTC"`) keep server and client output identical. No timers, no globals,
|
|
83
|
+
* nothing to dispose.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* const label = useDateFormat(() => event.value.startsAt, "ddd, MMM D HH:mm", {
|
|
88
|
+
* locale: () => locale.value,
|
|
89
|
+
* timeZone: "Europe/Paris",
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @param input Reactive date.
|
|
94
|
+
* @param format Reactive token pattern or `Intl` options.
|
|
95
|
+
* @param options Reactive locale and time zone.
|
|
96
|
+
* @default format "HH:mm:ss"
|
|
97
|
+
* @default options {}
|
|
98
|
+
* @throws `RangeError` on read for invalid dates, locales, or zones.
|
|
99
|
+
* @returns Computed formatted string.
|
|
100
|
+
*/
|
|
101
|
+
declare function useDateFormat(input: MaybeRefOrGetter<DateFormatInput>, format?: MaybeRefOrGetter<string | Intl.DateTimeFormatOptions>, options?: UseDateFormatOptions): ComputedRef<string>;
|
|
102
|
+
//#endregion
|
|
103
|
+
export { DateFormatInput, DateFormatToken, FormatDateOptions, UseDateFormatOptions, formatDate, useDateFormat };
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
//#region src/use-date-format.ts
|
|
3
|
+
const tokenPattern = /\[([^\]]*)]|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;
|
|
4
|
+
const weekdayIndex = {
|
|
5
|
+
Sun: 0,
|
|
6
|
+
Mon: 1,
|
|
7
|
+
Tue: 2,
|
|
8
|
+
Wed: 3,
|
|
9
|
+
Thu: 4,
|
|
10
|
+
Fri: 5,
|
|
11
|
+
Sat: 6
|
|
12
|
+
};
|
|
13
|
+
function toDate(input) {
|
|
14
|
+
const date = input instanceof Date ? new Date(input.getTime()) : new Date(input);
|
|
15
|
+
if (Number.isNaN(date.getTime())) throw new RangeError(`[VIZE_COMPOSE_DATE_FORMAT_INVALID_DATE] expected a valid date; received ${String(input)}`);
|
|
16
|
+
return date;
|
|
17
|
+
}
|
|
18
|
+
function pad(value, length) {
|
|
19
|
+
return String(value).padStart(length, "0");
|
|
20
|
+
}
|
|
21
|
+
function partsOf(formatter, date) {
|
|
22
|
+
return new Map(formatter.formatToParts(date).map((part) => [part.type, part.value]));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Format a date with a token pattern or `Intl.DateTimeFormat` options.
|
|
26
|
+
*
|
|
27
|
+
* Pure and deterministic: locale and time zone default to fixed values
|
|
28
|
+
* (`"en"`, `"UTC"`) rather than host settings, so the same input renders
|
|
29
|
+
* identically on server and client. Calendar fields are computed in the
|
|
30
|
+
* requested time zone through `Intl`, so no host-zone arithmetic leaks in.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* formatDate(0, "YYYY-MM-DD HH:mm:ss"); // "1970-01-01 00:00:00"
|
|
35
|
+
* formatDate(0, "dddd, MMMM D [at] h:mm A", { locale: "en", timeZone: "Asia/Tokyo" });
|
|
36
|
+
* formatDate(0, { dateStyle: "long" }, { locale: "ja" }); // "1970年1月1日"
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @param input Date to format.
|
|
40
|
+
* @param format Token pattern (see {@link DateFormatToken}) or `Intl` options.
|
|
41
|
+
* @param options Locale and time zone.
|
|
42
|
+
* @default format "HH:mm:ss"
|
|
43
|
+
* @default options {}
|
|
44
|
+
* @throws `RangeError` tagged `VIZE_COMPOSE_DATE_FORMAT_INVALID_DATE` for
|
|
45
|
+
* invalid dates, and `RangeError` from `Intl` for invalid locales or zones.
|
|
46
|
+
* @returns The formatted string.
|
|
47
|
+
*/
|
|
48
|
+
function formatDate(input, format = "HH:mm:ss", options = {}) {
|
|
49
|
+
const date = toDate(input);
|
|
50
|
+
const locales = typeof options.locale === "string" ? options.locale : [...options.locale ?? ["en"]];
|
|
51
|
+
const timeZone = options.timeZone ?? "UTC";
|
|
52
|
+
if (typeof format !== "string") return new Intl.DateTimeFormat(locales, {
|
|
53
|
+
...format,
|
|
54
|
+
timeZone
|
|
55
|
+
}).format(date);
|
|
56
|
+
const numeric = partsOf(new Intl.DateTimeFormat("en-US", {
|
|
57
|
+
timeZone,
|
|
58
|
+
hourCycle: "h23",
|
|
59
|
+
year: "numeric",
|
|
60
|
+
month: "numeric",
|
|
61
|
+
day: "numeric",
|
|
62
|
+
hour: "numeric",
|
|
63
|
+
minute: "numeric",
|
|
64
|
+
second: "numeric",
|
|
65
|
+
weekday: "short",
|
|
66
|
+
timeZoneName: "longOffset"
|
|
67
|
+
}), date);
|
|
68
|
+
const field = (type) => Number(numeric.get(type) ?? "0");
|
|
69
|
+
const localized = (formatOptions) => new Intl.DateTimeFormat(locales, {
|
|
70
|
+
...formatOptions,
|
|
71
|
+
timeZone
|
|
72
|
+
}).format(date);
|
|
73
|
+
const year = field("year");
|
|
74
|
+
const month = field("month");
|
|
75
|
+
const day = field("day");
|
|
76
|
+
const hour = field("hour") % 24;
|
|
77
|
+
const minute = field("minute");
|
|
78
|
+
const second = field("second");
|
|
79
|
+
const offset = (numeric.get("timeZoneName") ?? "GMT").replace("GMT", "") || "+00:00";
|
|
80
|
+
const meridiem = () => partsOf(new Intl.DateTimeFormat(locales, {
|
|
81
|
+
hour: "numeric",
|
|
82
|
+
hourCycle: "h12",
|
|
83
|
+
timeZone
|
|
84
|
+
}), date).get("dayPeriod") ?? (hour < 12 ? "AM" : "PM");
|
|
85
|
+
const render = (token) => {
|
|
86
|
+
switch (token) {
|
|
87
|
+
case "YYYY": return pad(year, 4);
|
|
88
|
+
case "YY": return pad(year % 100, 2);
|
|
89
|
+
case "M": return String(month);
|
|
90
|
+
case "MM": return pad(month, 2);
|
|
91
|
+
case "MMM": return localized({ month: "short" });
|
|
92
|
+
case "MMMM": return localized({ month: "long" });
|
|
93
|
+
case "D": return String(day);
|
|
94
|
+
case "DD": return pad(day, 2);
|
|
95
|
+
case "d": return String(weekdayIndex[numeric.get("weekday") ?? "Sun"] ?? 0);
|
|
96
|
+
case "dd": return localized({ weekday: "narrow" });
|
|
97
|
+
case "ddd": return localized({ weekday: "short" });
|
|
98
|
+
case "dddd": return localized({ weekday: "long" });
|
|
99
|
+
case "H": return String(hour);
|
|
100
|
+
case "HH": return pad(hour, 2);
|
|
101
|
+
case "h": return String(hour % 12 || 12);
|
|
102
|
+
case "hh": return pad(hour % 12 || 12, 2);
|
|
103
|
+
case "m": return String(minute);
|
|
104
|
+
case "mm": return pad(minute, 2);
|
|
105
|
+
case "s": return String(second);
|
|
106
|
+
case "ss": return pad(second, 2);
|
|
107
|
+
case "SSS": return pad(date.getUTCMilliseconds(), 3);
|
|
108
|
+
case "A": return meridiem();
|
|
109
|
+
case "a": return meridiem().toLowerCase();
|
|
110
|
+
case "Z": return offset;
|
|
111
|
+
default: return offset.replace(":", "");
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
return format.replaceAll(tokenPattern, (match, literal) => literal ?? render(match));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Reactive formatted date.
|
|
118
|
+
*
|
|
119
|
+
* Wraps {@link formatDate} in a computed ref; the date, the format, the
|
|
120
|
+
* locale, and the time zone are all reactive. Deterministic defaults (`"en"`,
|
|
121
|
+
* `"UTC"`) keep server and client output identical. No timers, no globals,
|
|
122
|
+
* nothing to dispose.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const label = useDateFormat(() => event.value.startsAt, "ddd, MMM D HH:mm", {
|
|
127
|
+
* locale: () => locale.value,
|
|
128
|
+
* timeZone: "Europe/Paris",
|
|
129
|
+
* });
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @param input Reactive date.
|
|
133
|
+
* @param format Reactive token pattern or `Intl` options.
|
|
134
|
+
* @param options Reactive locale and time zone.
|
|
135
|
+
* @default format "HH:mm:ss"
|
|
136
|
+
* @default options {}
|
|
137
|
+
* @throws `RangeError` on read for invalid dates, locales, or zones.
|
|
138
|
+
* @returns Computed formatted string.
|
|
139
|
+
*/
|
|
140
|
+
function useDateFormat(input, format = "HH:mm:ss", options = {}) {
|
|
141
|
+
return computed(() => formatDate(toValue(input), toValue(format), {
|
|
142
|
+
locale: toValue(options.locale) ?? "en",
|
|
143
|
+
timeZone: toValue(options.timeZone) ?? "UTC"
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
export { formatDate, useDateFormat };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/use-date-time-format.d.ts
|
|
4
|
+
/** Values accepted by `Intl.DateTimeFormat`: a `Date` or Unix milliseconds. */
|
|
5
|
+
type FormattableDate = Date | number;
|
|
6
|
+
/** Options for {@link useDateTimeFormat}. */
|
|
7
|
+
interface UseDateTimeFormatOptions extends Intl.DateTimeFormatOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Locale used for formatting. Pass it explicitly (and a `timeZone`) for
|
|
10
|
+
* server rendering: the server falls back to `"en"` and its own time zone.
|
|
11
|
+
*
|
|
12
|
+
* @default the browser language, otherwise "en"
|
|
13
|
+
*/
|
|
14
|
+
readonly locale?: string | Intl.Locale;
|
|
15
|
+
}
|
|
16
|
+
/** Reactive date formatting returned by {@link useDateTimeFormat}. */
|
|
17
|
+
interface DateTimeFormatControls {
|
|
18
|
+
/** Canonical locale in use. */
|
|
19
|
+
readonly locale: ComputedRef<string>;
|
|
20
|
+
/** Cached formatter for the current locale and options. */
|
|
21
|
+
readonly formatter: ComputedRef<Intl.DateTimeFormat>;
|
|
22
|
+
/**
|
|
23
|
+
* Formatted `value`, or `""` while the value is `null`/`undefined` or an
|
|
24
|
+
* invalid date.
|
|
25
|
+
*/
|
|
26
|
+
readonly formatted: ComputedRef<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Format any date with the current formatter.
|
|
29
|
+
*
|
|
30
|
+
* @param value Date or Unix milliseconds.
|
|
31
|
+
* @returns The formatted string.
|
|
32
|
+
* @throws {RangeError} For an invalid date, as `Intl.DateTimeFormat` does.
|
|
33
|
+
*/
|
|
34
|
+
readonly format: (value: FormattableDate) => string;
|
|
35
|
+
/**
|
|
36
|
+
* Format any date into locale-aware parts.
|
|
37
|
+
*
|
|
38
|
+
* @param value Date or Unix milliseconds.
|
|
39
|
+
* @returns The formatted parts.
|
|
40
|
+
*/
|
|
41
|
+
readonly formatToParts: (value: FormattableDate) => Intl.DateTimeFormatPart[];
|
|
42
|
+
/**
|
|
43
|
+
* Format a date range, collapsing shared fields (for example `"Jan 3 – 5, 2026"`).
|
|
44
|
+
*
|
|
45
|
+
* @param start Range start.
|
|
46
|
+
* @param end Range end.
|
|
47
|
+
* @returns The formatted range.
|
|
48
|
+
*/
|
|
49
|
+
readonly formatRange: (start: FormattableDate, end: FormattableDate) => string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Format dates and times reactively with `Intl.DateTimeFormat`.
|
|
53
|
+
*
|
|
54
|
+
* The formatter follows the reactive options (including `locale`) and is
|
|
55
|
+
* cached per locale and option set through {@link useLocale}. For
|
|
56
|
+
* hydration-stable output pass both `locale` and `timeZone`: otherwise the
|
|
57
|
+
* server uses `"en"` and its own zone. Invalid options surface as the
|
|
58
|
+
* platform's `RangeError` on first read; invalid dates render as `""`.
|
|
59
|
+
* No listeners or timers are created — combine with a clock composable for
|
|
60
|
+
* live-updating output.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* const { formatted } = useDateTimeFormat(date, { locale: "en-GB", dateStyle: "long", timeZone: "UTC" });
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @param value Reactive date; `null`/`undefined` format as `""`.
|
|
68
|
+
* @param options Reactive locale and `Intl.DateTimeFormat` options.
|
|
69
|
+
* @default value undefined
|
|
70
|
+
* @default options {}
|
|
71
|
+
* @returns Reactive formatted output and formatter helpers.
|
|
72
|
+
*/
|
|
73
|
+
declare function useDateTimeFormat(value?: MaybeRefOrGetter<FormattableDate | null | undefined>, options?: MaybeRefOrGetter<UseDateTimeFormatOptions>): DateTimeFormatControls;
|
|
74
|
+
//#endregion
|
|
75
|
+
export { DateTimeFormatControls, FormattableDate, UseDateTimeFormatOptions, useDateTimeFormat };
|