@vizejs/composable 0.426.3 → 0.428.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { n as CapabilityResult } from "./capability-Ptkjr_sD.mjs";
|
|
2
|
+
import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
//#region src/geolocation.d.ts
|
|
5
|
+
/** Navigator-like capability used by {@link useGeolocation}. */
|
|
6
|
+
interface GeolocationHost {
|
|
7
|
+
/** Geolocation service, absent in unsupported runtimes. */
|
|
8
|
+
readonly geolocation?: Pick<Geolocation, "watchPosition" | "clearWatch">;
|
|
9
|
+
}
|
|
10
|
+
/** Serializable snapshot of `GeolocationCoordinates`. */
|
|
11
|
+
interface GeolocationCoordinatesSnapshot {
|
|
12
|
+
/** Latitude in decimal degrees. */
|
|
13
|
+
readonly latitude: number;
|
|
14
|
+
/** Longitude in decimal degrees. */
|
|
15
|
+
readonly longitude: number;
|
|
16
|
+
/** Accuracy radius of latitude/longitude in meters. */
|
|
17
|
+
readonly accuracy: number;
|
|
18
|
+
/** Altitude in meters, when available. */
|
|
19
|
+
readonly altitude: number | null;
|
|
20
|
+
/** Altitude accuracy in meters, when available. */
|
|
21
|
+
readonly altitudeAccuracy: number | null;
|
|
22
|
+
/** Heading in degrees clockwise from true north, when available. */
|
|
23
|
+
readonly heading: number | null;
|
|
24
|
+
/** Ground speed in meters per second, when available. */
|
|
25
|
+
readonly speed: number | null;
|
|
26
|
+
}
|
|
27
|
+
/** Why geolocation cannot currently provide a position. */
|
|
28
|
+
type GeolocationUnavailableReason = "unsupported" | "permission-denied" | "unavailable" | "not-ready";
|
|
29
|
+
/** Options for {@link useGeolocation}. */
|
|
30
|
+
interface UseGeolocationOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Ask for the most accurate position the device can provide.
|
|
33
|
+
*
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
readonly enableHighAccuracy?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Maximum age in milliseconds of a cached position.
|
|
39
|
+
*
|
|
40
|
+
* @default 30000
|
|
41
|
+
*/
|
|
42
|
+
readonly maximumAge?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Maximum time in milliseconds to wait for a position.
|
|
45
|
+
*
|
|
46
|
+
* @default 27000
|
|
47
|
+
*/
|
|
48
|
+
readonly timeout?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Start watching during composable creation. When `false`, call `resume`
|
|
51
|
+
* (typically from a user gesture, which some browsers require).
|
|
52
|
+
*
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
55
|
+
readonly immediate?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Reactive navigator capability for alternate runtimes and tests.
|
|
58
|
+
*
|
|
59
|
+
* @default globalThis.window.navigator when available
|
|
60
|
+
*/
|
|
61
|
+
readonly host?: MaybeRefOrGetter<GeolocationHost | null | undefined>;
|
|
62
|
+
}
|
|
63
|
+
/** Reactive position state returned by {@link useGeolocation}. */
|
|
64
|
+
interface GeolocationControls {
|
|
65
|
+
/** Whether the host exposes geolocation. `false` during server rendering. */
|
|
66
|
+
readonly isSupported: Readonly<Ref<boolean>>;
|
|
67
|
+
/** Latest coordinates; `null` until the first fix and during server rendering. */
|
|
68
|
+
readonly coords: Readonly<ShallowRef<GeolocationCoordinatesSnapshot | null>>;
|
|
69
|
+
/** Epoch milliseconds of the latest fix; `null` before the first fix. */
|
|
70
|
+
readonly locatedAt: Readonly<Ref<number | null>>;
|
|
71
|
+
/** Latest platform error; cleared by the next successful fix. */
|
|
72
|
+
readonly error: Readonly<ShallowRef<GeolocationPositionError | null>>;
|
|
73
|
+
/** Capability result combining support, permission, and readiness. */
|
|
74
|
+
readonly capability: ComputedRef<CapabilityResult<GeolocationCoordinatesSnapshot, GeolocationUnavailableReason>>;
|
|
75
|
+
/** Whether a position watch is active. */
|
|
76
|
+
readonly isActive: Readonly<Ref<boolean>>;
|
|
77
|
+
/** Start (or restart) watching. */
|
|
78
|
+
readonly resume: () => void;
|
|
79
|
+
/** Stop watching. Idempotent. */
|
|
80
|
+
readonly pause: () => void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Watch the device position with the Geolocation API.
|
|
84
|
+
*
|
|
85
|
+
* The watch follows the reactive host and is cleared when paused or when the
|
|
86
|
+
* owning reactive scope stops. Coordinates are copied into a plain snapshot
|
|
87
|
+
* so they are serializable. The `capability` result reports
|
|
88
|
+
* `"unsupported"`, `"permission-denied"`, `"unavailable"`, or `"not-ready"`
|
|
89
|
+
* (before the first fix) as data instead of throwing. Server renders expose
|
|
90
|
+
* `null` coordinates.
|
|
91
|
+
*
|
|
92
|
+
* @param options Accuracy, caching, start mode, and navigator capability.
|
|
93
|
+
* @default options {}
|
|
94
|
+
* @returns Reactive position, error, capability, and controls.
|
|
95
|
+
*/
|
|
96
|
+
declare function useGeolocation(options?: UseGeolocationOptions): GeolocationControls;
|
|
97
|
+
//#endregion
|
|
98
|
+
export { GeolocationControls, GeolocationCoordinatesSnapshot, GeolocationHost, GeolocationUnavailableReason, UseGeolocationOptions, useGeolocation };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { tryOnScopeDispose } from "./scope.mjs";
|
|
2
|
+
import { availableCapability, unavailableCapability } from "./capability.mjs";
|
|
3
|
+
import { computed, hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
|
|
4
|
+
//#region src/geolocation.ts
|
|
5
|
+
const PERMISSION_DENIED = 1;
|
|
6
|
+
const POSITION_UNAVAILABLE = 2;
|
|
7
|
+
/**
|
|
8
|
+
* Watch the device position with the Geolocation API.
|
|
9
|
+
*
|
|
10
|
+
* The watch follows the reactive host and is cleared when paused or when the
|
|
11
|
+
* owning reactive scope stops. Coordinates are copied into a plain snapshot
|
|
12
|
+
* so they are serializable. The `capability` result reports
|
|
13
|
+
* `"unsupported"`, `"permission-denied"`, `"unavailable"`, or `"not-ready"`
|
|
14
|
+
* (before the first fix) as data instead of throwing. Server renders expose
|
|
15
|
+
* `null` coordinates.
|
|
16
|
+
*
|
|
17
|
+
* @param options Accuracy, caching, start mode, and navigator capability.
|
|
18
|
+
* @default options {}
|
|
19
|
+
* @returns Reactive position, error, capability, and controls.
|
|
20
|
+
*/
|
|
21
|
+
function useGeolocation(options = {}) {
|
|
22
|
+
const isSupported = ref(false);
|
|
23
|
+
const coords = shallowRef(null);
|
|
24
|
+
const locatedAt = ref(null);
|
|
25
|
+
const error = shallowRef(null);
|
|
26
|
+
const isActive = ref(options.immediate ?? true);
|
|
27
|
+
const mounted = shallowRef(!hasInjectionContext());
|
|
28
|
+
if (!mounted.value) onMounted(() => {
|
|
29
|
+
mounted.value = true;
|
|
30
|
+
});
|
|
31
|
+
const host = () => !mounted.value ? void 0 : options.host === void 0 ? browserGeolocationHost() : toValue(options.host);
|
|
32
|
+
const stopWatch = watch([host, isActive], ([current, active], _previous, onCleanup) => {
|
|
33
|
+
const geolocation = current?.geolocation;
|
|
34
|
+
isSupported.value = geolocation !== void 0;
|
|
35
|
+
if (!geolocation || !active) return;
|
|
36
|
+
const id = geolocation.watchPosition((position) => {
|
|
37
|
+
coords.value = snapshotCoordinates(position.coords);
|
|
38
|
+
locatedAt.value = position.timestamp;
|
|
39
|
+
error.value = null;
|
|
40
|
+
}, (failure) => {
|
|
41
|
+
error.value = failure;
|
|
42
|
+
}, {
|
|
43
|
+
enableHighAccuracy: options.enableHighAccuracy ?? false,
|
|
44
|
+
maximumAge: options.maximumAge ?? 3e4,
|
|
45
|
+
timeout: options.timeout ?? 27e3
|
|
46
|
+
});
|
|
47
|
+
onCleanup(() => geolocation.clearWatch(id));
|
|
48
|
+
}, { immediate: true });
|
|
49
|
+
tryOnScopeDispose(() => stopWatch.stop());
|
|
50
|
+
const capability = computed(() => {
|
|
51
|
+
if (!isSupported.value) return unavailableCapability("unsupported");
|
|
52
|
+
if (error.value?.code === PERMISSION_DENIED) return unavailableCapability("permission-denied");
|
|
53
|
+
if (error.value?.code === POSITION_UNAVAILABLE) return unavailableCapability("unavailable");
|
|
54
|
+
return coords.value ? availableCapability(coords.value) : unavailableCapability("not-ready");
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
isSupported: readonly(isSupported),
|
|
58
|
+
coords,
|
|
59
|
+
locatedAt: readonly(locatedAt),
|
|
60
|
+
error,
|
|
61
|
+
capability,
|
|
62
|
+
isActive: readonly(isActive),
|
|
63
|
+
resume: () => {
|
|
64
|
+
isActive.value = true;
|
|
65
|
+
},
|
|
66
|
+
pause: () => {
|
|
67
|
+
isActive.value = false;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function snapshotCoordinates(coords) {
|
|
72
|
+
return {
|
|
73
|
+
latitude: coords.latitude,
|
|
74
|
+
longitude: coords.longitude,
|
|
75
|
+
accuracy: coords.accuracy,
|
|
76
|
+
altitude: coords.altitude,
|
|
77
|
+
altitudeAccuracy: coords.altitudeAccuracy,
|
|
78
|
+
heading: coords.heading,
|
|
79
|
+
speed: coords.speed
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function browserGeolocationHost() {
|
|
83
|
+
return typeof window !== "undefined" ? window.navigator : void 0;
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { useGeolocation };
|
package/dist/i18n.d.mts
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { FormatMessageOptions, MessageArgument, MessageArguments, ResolveMessageArguments } from "./icu-message.mjs";
|
|
2
|
+
import { LocaleControls, TextDirection } from "./locale.mjs";
|
|
3
|
+
import { App, ComputedRef, InjectionKey, ShallowRef } from "vue";
|
|
4
|
+
|
|
5
|
+
//#region src/i18n.d.ts
|
|
6
|
+
/** A nested message catalog: leaves are ICU message strings. */
|
|
7
|
+
interface MessageTree {
|
|
8
|
+
readonly [key: string]: string | MessageTree;
|
|
9
|
+
}
|
|
10
|
+
/** Catalogs keyed by locale. */
|
|
11
|
+
type MessageCatalogs = Readonly<Record<string, MessageTree>>;
|
|
12
|
+
/** Dotted message keys of one catalog, e.g. `"home.title"`. */
|
|
13
|
+
type MessageKeysOf<Tree> = { [Key in keyof Tree & string]: Tree[Key] extends string ? Key : `${Key}.${MessageKeysOf<Tree[Key]>}` }[keyof Tree & string];
|
|
14
|
+
/** Message literal stored at a dotted key. */
|
|
15
|
+
type MessageAt<Tree, Path extends string> = Path extends `${infer Head}.${infer Rest}` ? Head extends keyof Tree ? MessageAt<Tree[Head], Rest> : never : Path extends keyof Tree ? Tree[Path] extends string ? Tree[Path] : never : never;
|
|
16
|
+
/** Every key present in any locale of a catalog set. */
|
|
17
|
+
type MessageKey<Catalogs> = { [Locale in keyof Catalogs]: MessageKeysOf<Catalogs[Locale]> }[keyof Catalogs];
|
|
18
|
+
/**
|
|
19
|
+
* Parameters `t(key)` needs: the arguments of every translation of `Key`,
|
|
20
|
+
* merged (a typed occurrence in any locale wins over a plain `{name}`).
|
|
21
|
+
*/
|
|
22
|
+
type MessageParamsFor<Catalogs, Key extends string> = ResolveMessageArguments<Extract<{ [Locale in keyof Catalogs]: MessageAt<Catalogs[Locale], Key> extends infer Message extends string ? MessageArguments<Message> : never }[keyof Catalogs], MessageArgument>>;
|
|
23
|
+
/** Keys whose merged parameters contain an impossible (`never`) value. */
|
|
24
|
+
type ConflictingKeys<Catalogs> = { [Key in MessageKey<Catalogs> & string]: { [Param in keyof MessageParamsFor<Catalogs, Key>]: [MessageParamsFor<Catalogs, Key>[Param]] extends [never] ? Param : never }[keyof MessageParamsFor<Catalogs, Key>] extends never ? never : Key }[MessageKey<Catalogs> & string];
|
|
25
|
+
/**
|
|
26
|
+
* Compile-time validation mixed into the `defineMessages` argument. A
|
|
27
|
+
* locale that misses keys other locales define must carry a
|
|
28
|
+
* `__missingTranslations` property (which it cannot), so the compiler
|
|
29
|
+
* reports the missing keys; incompatible parameter types across locales are
|
|
30
|
+
* reported the same way through `__incompatibleParams`.
|
|
31
|
+
*/
|
|
32
|
+
type ValidateCatalogs<Catalogs> = { readonly [Locale in keyof Catalogs]: (Exclude<MessageKey<Catalogs>, MessageKeysOf<Catalogs[Locale]>> extends infer Missing ? [Missing] extends [never] ? unknown : {
|
|
33
|
+
readonly __missingTranslations: Missing;
|
|
34
|
+
} : unknown) & ([ConflictingKeys<Catalogs>] extends [never] ? unknown : {
|
|
35
|
+
readonly __incompatibleParams: ConflictingKeys<Catalogs>;
|
|
36
|
+
}) };
|
|
37
|
+
/** Same key structure as a catalog, with any string as message. */
|
|
38
|
+
type MessageShape<Tree> = { readonly [Key in keyof Tree]: Tree[Key] extends string ? string : MessageShape<Tree[Key]> };
|
|
39
|
+
/** Catalog shape a lazily loaded locale must provide. */
|
|
40
|
+
type LocaleMessages<Catalogs> = MessageShape<Catalogs[keyof Catalogs]>;
|
|
41
|
+
/**
|
|
42
|
+
* Per-key check for {@link defineLocale}: a translation may only use
|
|
43
|
+
* parameters the schema knows, with compatible types.
|
|
44
|
+
*/
|
|
45
|
+
type ValidateTranslation<Catalogs, Tree, Prefix extends string = ""> = { readonly [Key in keyof Tree & string]: Tree[Key] extends infer Message extends string ? keyof ResolveMessageArguments<MessageArguments<Message>> extends keyof MessageParamsFor<Catalogs, `${Prefix}${Key}`> ? MessageParamsFor<Catalogs, `${Prefix}${Key}`> extends ResolveMessageArguments<MessageArguments<Message>> ? Message : `incompatible parameter types for "${Prefix}${Key}"` : `unknown parameter in "${Prefix}${Key}"` : ValidateTranslation<Catalogs, Tree[Key], `${Prefix}${Key}.`> };
|
|
46
|
+
/**
|
|
47
|
+
* Declare typed message catalogs for several locales.
|
|
48
|
+
*
|
|
49
|
+
* The literal messages are preserved, so {@link MessageParamsFor} knows the
|
|
50
|
+
* ICU parameters of every key. The compiler rejects catalogs whose locales
|
|
51
|
+
* do not share the same keys (`__missingTranslations`) or whose
|
|
52
|
+
* translations need incompatible parameter types (`__incompatibleParams`).
|
|
53
|
+
* Returns the catalogs unchanged; the function exists for inference and
|
|
54
|
+
* validation only.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const messages = defineMessages({
|
|
59
|
+
* en: { cart: "{count, plural, one {# item} other {# items}}" },
|
|
60
|
+
* ja: { cart: "{count, plural, other {# 個}}" },
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param catalogs Messages keyed by locale, then by (nested) key.
|
|
65
|
+
* @throws `TypeError` tagged `VIZE_COMPOSE_I18N_INVALID_KEY` when a key
|
|
66
|
+
* contains a dot (dots separate nested keys).
|
|
67
|
+
* @returns The same catalogs.
|
|
68
|
+
*/
|
|
69
|
+
declare function defineMessages<const Catalogs extends MessageCatalogs>(catalogs: Catalogs & ValidateCatalogs<Catalogs>): Catalogs;
|
|
70
|
+
/**
|
|
71
|
+
* Declare one additional locale (typically a lazily loaded module) against
|
|
72
|
+
* the catalogs produced by {@link defineMessages}.
|
|
73
|
+
*
|
|
74
|
+
* The keys must match exactly, and every translation may only use
|
|
75
|
+
* parameters the schema declares, with compatible types.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* // fr.ts
|
|
80
|
+
* export default defineLocale<typeof messages>()({ cart: "{count, plural, one {# article} other {# articles}}" });
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @returns A function that validates and returns the locale catalog.
|
|
84
|
+
*/
|
|
85
|
+
declare function defineLocale<Catalogs extends MessageCatalogs>(): <const Tree extends LocaleMessages<Catalogs>>(catalog: Tree & ValidateTranslation<Catalogs, Tree>) => Tree;
|
|
86
|
+
/** Loader returning the catalog of a lazily loaded locale. */
|
|
87
|
+
type LocaleLoader<Catalogs> = () => Promise<LocaleMessages<Catalogs> | {
|
|
88
|
+
readonly default: LocaleMessages<Catalogs>;
|
|
89
|
+
}>;
|
|
90
|
+
/** Static configuration shared by every request, passed to {@link defineI18n}. */
|
|
91
|
+
interface DefineI18nOptions<Catalogs extends MessageCatalogs, Lazy extends string> extends FormatMessageOptions {
|
|
92
|
+
/** Eagerly bundled catalogs (see {@link defineMessages}). */
|
|
93
|
+
readonly messages: Catalogs;
|
|
94
|
+
/**
|
|
95
|
+
* Locale used when a key is missing in the active locale.
|
|
96
|
+
*
|
|
97
|
+
* @default the first eager locale
|
|
98
|
+
*/
|
|
99
|
+
readonly fallbackLocale?: keyof Catalogs & string;
|
|
100
|
+
/**
|
|
101
|
+
* Loaders for locales fetched on demand.
|
|
102
|
+
*
|
|
103
|
+
* @default {}
|
|
104
|
+
*/
|
|
105
|
+
readonly loaders?: { readonly [Locale in Lazy]: LocaleLoader<Catalogs> };
|
|
106
|
+
/**
|
|
107
|
+
* Called when a key is missing in the active and fallback locales; the
|
|
108
|
+
* key itself is rendered.
|
|
109
|
+
*
|
|
110
|
+
* @default undefined
|
|
111
|
+
*/
|
|
112
|
+
readonly onMissing?: (key: string, locale: string) => void;
|
|
113
|
+
}
|
|
114
|
+
/** Arguments of `t(key, …)`: the params object is optional only when empty. */
|
|
115
|
+
type TranslateArguments<Params> = {} extends Params ? [params?: Params] : [params: Params];
|
|
116
|
+
/** Per-request i18n state and typed translation functions. */
|
|
117
|
+
interface I18n<Catalogs extends MessageCatalogs, Lazy extends string> {
|
|
118
|
+
/** Active locale. Change it with {@link I18n.setLocale}. */
|
|
119
|
+
readonly locale: Readonly<ShallowRef<(keyof Catalogs & string) | Lazy>>;
|
|
120
|
+
/** Every locale this instance can switch to. */
|
|
121
|
+
readonly availableLocales: readonly ((keyof Catalogs & string) | Lazy)[];
|
|
122
|
+
/** Locales whose messages are available right now. */
|
|
123
|
+
readonly loadedLocales: ComputedRef<((keyof Catalogs & string) | Lazy)[]>;
|
|
124
|
+
/** Whether a lazy locale is being loaded. */
|
|
125
|
+
readonly isLoading: Readonly<ShallowRef<boolean>>;
|
|
126
|
+
/** Most recent loader failure, cleared on success. */
|
|
127
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
128
|
+
/** Text direction of the active locale. */
|
|
129
|
+
readonly direction: ComputedRef<TextDirection>;
|
|
130
|
+
/** `Intl` helpers bound to the active locale (from `useLocale`). */
|
|
131
|
+
readonly intl: LocaleControls;
|
|
132
|
+
/** Resolves once the initial locale's messages are loaded. */
|
|
133
|
+
readonly ready: Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Translate a key. Parameters are typed from the ICU messages of every
|
|
136
|
+
* locale. Reactive: reading inside a render re-renders on locale change.
|
|
137
|
+
*
|
|
138
|
+
* @returns The formatted message, or the key when it is missing.
|
|
139
|
+
*/
|
|
140
|
+
readonly t: <Key extends MessageKey<Catalogs> & string>(key: Key, ...params: TranslateArguments<MessageParamsFor<Catalogs, Key>>) => string;
|
|
141
|
+
/** Whether `key` exists in the active locale. */
|
|
142
|
+
readonly te: (key: MessageKey<Catalogs> & string) => boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Load (if needed) and activate a locale.
|
|
145
|
+
*
|
|
146
|
+
* @returns Resolves once the locale is active; rejects when loading fails.
|
|
147
|
+
*/
|
|
148
|
+
readonly setLocale: (locale: (keyof Catalogs & string) | Lazy) => Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* Load a lazy locale without activating it (for example on hover).
|
|
151
|
+
*
|
|
152
|
+
* @returns Resolves once its messages are available.
|
|
153
|
+
*/
|
|
154
|
+
readonly loadLocale: (locale: (keyof Catalogs & string) | Lazy) => Promise<void>;
|
|
155
|
+
/** Vue plugin hook: provides this instance to the app. */
|
|
156
|
+
readonly install: (app: App) => void;
|
|
157
|
+
}
|
|
158
|
+
/** Options for {@link I18nDefinition.create}. */
|
|
159
|
+
interface CreateI18nOptions<Locale extends string> {
|
|
160
|
+
/**
|
|
161
|
+
* Initial locale. Pass the locale resolved for the request (server) and
|
|
162
|
+
* the same value on the client so hydration renders identical text.
|
|
163
|
+
*
|
|
164
|
+
* @default the fallback locale
|
|
165
|
+
*/
|
|
166
|
+
readonly locale?: Locale;
|
|
167
|
+
}
|
|
168
|
+
/** Static i18n definition returned by {@link defineI18n}. */
|
|
169
|
+
interface I18nDefinition<Catalogs extends MessageCatalogs, Lazy extends string> {
|
|
170
|
+
/** Injection key under which instances are provided. */
|
|
171
|
+
readonly key: InjectionKey<I18n<Catalogs, Lazy>>;
|
|
172
|
+
/**
|
|
173
|
+
* Create a per-request (per-app) instance. Never share one instance
|
|
174
|
+
* between server requests.
|
|
175
|
+
*
|
|
176
|
+
* @returns The instance; await `ready` before rendering a lazy locale.
|
|
177
|
+
*/
|
|
178
|
+
readonly create: (options?: CreateI18nOptions<(keyof Catalogs & string) | Lazy>) => I18n<Catalogs, Lazy>;
|
|
179
|
+
/**
|
|
180
|
+
* Inject the instance provided by an ancestor (or `app.use(instance)`).
|
|
181
|
+
*
|
|
182
|
+
* @returns The typed instance.
|
|
183
|
+
*/
|
|
184
|
+
readonly use: () => I18n<Catalogs, Lazy>;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Define the typed i18n setup of an application.
|
|
188
|
+
*
|
|
189
|
+
* The definition holds only static configuration (catalogs, loaders,
|
|
190
|
+
* formats) and an injection key; it has no mutable module state. Call
|
|
191
|
+
* `create()` per request on the server and once on the client, install the
|
|
192
|
+
* instance with `app.use(instance)`, and read it in components with
|
|
193
|
+
* `definition.use()` (or {@link useI18n}). Locale changes are reactive
|
|
194
|
+
* through `setLocale`, which loads lazy locales first; `Intl` formatting
|
|
195
|
+
* follows the locale through the existing `useLocale` composable.
|
|
196
|
+
*
|
|
197
|
+
* Hydration: locale detection is never automatic. Resolve the locale per
|
|
198
|
+
* request, pass it to `create({ locale })` on both sides, and await
|
|
199
|
+
* `instance.ready` before rendering or mounting when it is lazy.
|
|
200
|
+
* `date`/`time` arguments use a fixed time zone (UTC unless configured).
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```ts
|
|
204
|
+
* export const appI18n = defineI18n({
|
|
205
|
+
* messages,
|
|
206
|
+
* loaders: { fr: () => import("./locales/fr.ts") },
|
|
207
|
+
* });
|
|
208
|
+
* // per request / client entry
|
|
209
|
+
* const i18n = appI18n.create({ locale: "fr" });
|
|
210
|
+
* await i18n.ready;
|
|
211
|
+
* app.use(i18n);
|
|
212
|
+
* // component
|
|
213
|
+
* const { t } = appI18n.use();
|
|
214
|
+
* t("cart", { count: 2 });
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @param options Catalogs, fallback, loaders, formats, and missing-key hook.
|
|
218
|
+
* @returns The i18n definition.
|
|
219
|
+
*/
|
|
220
|
+
declare function defineI18n<const Catalogs extends MessageCatalogs, const Lazy extends string = never>(options: DefineI18nOptions<Catalogs, Lazy>): I18nDefinition<Catalogs, Lazy>;
|
|
221
|
+
/**
|
|
222
|
+
* Inject the i18n instance of a definition. Equivalent to
|
|
223
|
+
* `definition.use()`; must run inside `setup` (or `app.runWithContext`).
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```ts
|
|
227
|
+
* const { t, setLocale } = useI18n(appI18n);
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* @param definition Result of {@link defineI18n}.
|
|
231
|
+
* @throws `Error` tagged `VIZE_COMPOSE_I18N_NOT_PROVIDED` when no instance
|
|
232
|
+
* was provided.
|
|
233
|
+
* @returns The typed instance.
|
|
234
|
+
*/
|
|
235
|
+
declare function useI18n<Catalogs extends MessageCatalogs, Lazy extends string>(definition: I18nDefinition<Catalogs, Lazy>): I18n<Catalogs, Lazy>;
|
|
236
|
+
//#endregion
|
|
237
|
+
export { CreateI18nOptions, DefineI18nOptions, I18n, I18nDefinition, LocaleLoader, LocaleMessages, MessageAt, MessageCatalogs, MessageKey, MessageKeysOf, MessageParamsFor, MessageShape, MessageTree, TranslateArguments, ValidateCatalogs, defineI18n, defineLocale, defineMessages, useI18n };
|
package/dist/i18n.mjs
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { createMessageFormatter } from "./icu-message.mjs";
|
|
2
|
+
import { useLocale } from "./locale.mjs";
|
|
3
|
+
import { computed, inject, shallowReactive, shallowRef } from "vue";
|
|
4
|
+
//#region src/i18n.ts
|
|
5
|
+
/**
|
|
6
|
+
* Declare typed message catalogs for several locales.
|
|
7
|
+
*
|
|
8
|
+
* The literal messages are preserved, so {@link MessageParamsFor} knows the
|
|
9
|
+
* ICU parameters of every key. The compiler rejects catalogs whose locales
|
|
10
|
+
* do not share the same keys (`__missingTranslations`) or whose
|
|
11
|
+
* translations need incompatible parameter types (`__incompatibleParams`).
|
|
12
|
+
* Returns the catalogs unchanged; the function exists for inference and
|
|
13
|
+
* validation only.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const messages = defineMessages({
|
|
18
|
+
* en: { cart: "{count, plural, one {# item} other {# items}}" },
|
|
19
|
+
* ja: { cart: "{count, plural, other {# 個}}" },
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @param catalogs Messages keyed by locale, then by (nested) key.
|
|
24
|
+
* @throws `TypeError` tagged `VIZE_COMPOSE_I18N_INVALID_KEY` when a key
|
|
25
|
+
* contains a dot (dots separate nested keys).
|
|
26
|
+
* @returns The same catalogs.
|
|
27
|
+
*/
|
|
28
|
+
function defineMessages(catalogs) {
|
|
29
|
+
for (const tree of Object.values(catalogs)) assertKeys(tree, "");
|
|
30
|
+
return catalogs;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Declare one additional locale (typically a lazily loaded module) against
|
|
34
|
+
* the catalogs produced by {@link defineMessages}.
|
|
35
|
+
*
|
|
36
|
+
* The keys must match exactly, and every translation may only use
|
|
37
|
+
* parameters the schema declares, with compatible types.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* // fr.ts
|
|
42
|
+
* export default defineLocale<typeof messages>()({ cart: "{count, plural, one {# article} other {# articles}}" });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @returns A function that validates and returns the locale catalog.
|
|
46
|
+
*/
|
|
47
|
+
function defineLocale() {
|
|
48
|
+
return (catalog) => {
|
|
49
|
+
assertKeys(catalog, "");
|
|
50
|
+
return catalog;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function assertKeys(tree, prefix) {
|
|
54
|
+
for (const [key, value] of Object.entries(tree)) {
|
|
55
|
+
if (key.includes(".")) throw new TypeError(`[VIZE_COMPOSE_I18N_INVALID_KEY] message keys must not contain "."; received "${prefix}${key}"`);
|
|
56
|
+
if (typeof value !== "string") assertKeys(value, `${prefix}${key}.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function readMessage(tree, key) {
|
|
60
|
+
let node = tree;
|
|
61
|
+
for (const part of key.split(".")) {
|
|
62
|
+
if (node === void 0 || typeof node === "string") return void 0;
|
|
63
|
+
node = node[part];
|
|
64
|
+
}
|
|
65
|
+
return typeof node === "string" ? node : void 0;
|
|
66
|
+
}
|
|
67
|
+
function unwrapModule(loaded) {
|
|
68
|
+
return typeof loaded === "object" && loaded !== null && "default" in loaded ? loaded.default : loaded;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Define the typed i18n setup of an application.
|
|
72
|
+
*
|
|
73
|
+
* The definition holds only static configuration (catalogs, loaders,
|
|
74
|
+
* formats) and an injection key; it has no mutable module state. Call
|
|
75
|
+
* `create()` per request on the server and once on the client, install the
|
|
76
|
+
* instance with `app.use(instance)`, and read it in components with
|
|
77
|
+
* `definition.use()` (or {@link useI18n}). Locale changes are reactive
|
|
78
|
+
* through `setLocale`, which loads lazy locales first; `Intl` formatting
|
|
79
|
+
* follows the locale through the existing `useLocale` composable.
|
|
80
|
+
*
|
|
81
|
+
* Hydration: locale detection is never automatic. Resolve the locale per
|
|
82
|
+
* request, pass it to `create({ locale })` on both sides, and await
|
|
83
|
+
* `instance.ready` before rendering or mounting when it is lazy.
|
|
84
|
+
* `date`/`time` arguments use a fixed time zone (UTC unless configured).
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* export const appI18n = defineI18n({
|
|
89
|
+
* messages,
|
|
90
|
+
* loaders: { fr: () => import("./locales/fr.ts") },
|
|
91
|
+
* });
|
|
92
|
+
* // per request / client entry
|
|
93
|
+
* const i18n = appI18n.create({ locale: "fr" });
|
|
94
|
+
* await i18n.ready;
|
|
95
|
+
* app.use(i18n);
|
|
96
|
+
* // component
|
|
97
|
+
* const { t } = appI18n.use();
|
|
98
|
+
* t("cart", { count: 2 });
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @param options Catalogs, fallback, loaders, formats, and missing-key hook.
|
|
102
|
+
* @returns The i18n definition.
|
|
103
|
+
*/
|
|
104
|
+
function defineI18n(options) {
|
|
105
|
+
const key = Symbol("vize-i18n");
|
|
106
|
+
const eager = Object.keys(options.messages);
|
|
107
|
+
const lazy = Object.keys(options.loaders ?? {});
|
|
108
|
+
const fallbackLocale = options.fallbackLocale ?? eager[0] ?? "en";
|
|
109
|
+
const isLocale = (value) => eager.includes(value) || lazy.includes(value);
|
|
110
|
+
const availableLocales = [...eager, ...lazy].filter(isLocale);
|
|
111
|
+
const create = (createOptions = {}) => {
|
|
112
|
+
const initial = createOptions.locale ?? fallbackLocale;
|
|
113
|
+
if (!isLocale(initial)) throw new RangeError(`[VIZE_COMPOSE_I18N_UNKNOWN_LOCALE] unknown locale "${String(initial)}"`);
|
|
114
|
+
const catalogs = shallowReactive(new Map(Object.entries(options.messages)));
|
|
115
|
+
const pending = /* @__PURE__ */ new Map();
|
|
116
|
+
const formatters = /* @__PURE__ */ new Map();
|
|
117
|
+
const locale = shallowRef(initial);
|
|
118
|
+
const isLoading = shallowRef(false);
|
|
119
|
+
const error = shallowRef(void 0);
|
|
120
|
+
const intl = useLocale(locale, {
|
|
121
|
+
detect: () => void 0,
|
|
122
|
+
fallback: fallbackLocale
|
|
123
|
+
});
|
|
124
|
+
const formatterFor = (localeTag) => {
|
|
125
|
+
let formatter = formatters.get(localeTag);
|
|
126
|
+
if (formatter === void 0) {
|
|
127
|
+
formatter = createMessageFormatter(localeTag, options);
|
|
128
|
+
formatters.set(localeTag, formatter);
|
|
129
|
+
}
|
|
130
|
+
return formatter;
|
|
131
|
+
};
|
|
132
|
+
const loadLocale = (target) => {
|
|
133
|
+
if (catalogs.has(target)) return Promise.resolve();
|
|
134
|
+
const existing = pending.get(target);
|
|
135
|
+
if (existing !== void 0) return existing;
|
|
136
|
+
const loader = (options.loaders ?? {})[target];
|
|
137
|
+
if (loader === void 0) return Promise.reject(/* @__PURE__ */ new RangeError(`[VIZE_COMPOSE_I18N_UNKNOWN_LOCALE] unknown locale "${target}"`));
|
|
138
|
+
isLoading.value = true;
|
|
139
|
+
const task = loader().then((loaded) => {
|
|
140
|
+
assertKeys(unwrapModule(loaded), "");
|
|
141
|
+
catalogs.set(target, unwrapModule(loaded));
|
|
142
|
+
error.value = void 0;
|
|
143
|
+
}).catch((cause) => {
|
|
144
|
+
error.value = cause;
|
|
145
|
+
throw cause;
|
|
146
|
+
}).finally(() => {
|
|
147
|
+
pending.delete(target);
|
|
148
|
+
isLoading.value = pending.size > 0;
|
|
149
|
+
});
|
|
150
|
+
pending.set(target, task);
|
|
151
|
+
return task;
|
|
152
|
+
};
|
|
153
|
+
const setLocale = async (target) => {
|
|
154
|
+
await loadLocale(target);
|
|
155
|
+
locale.value = target;
|
|
156
|
+
};
|
|
157
|
+
const translate = (messageKey, params) => {
|
|
158
|
+
const active = locale.value;
|
|
159
|
+
for (const candidate of [active, fallbackLocale]) {
|
|
160
|
+
const message = readMessage(catalogs.get(candidate), messageKey);
|
|
161
|
+
if (message !== void 0) return formatterFor(candidate === active ? intl.locale.value : candidate).format(message, params);
|
|
162
|
+
}
|
|
163
|
+
options.onMissing?.(messageKey, active);
|
|
164
|
+
return messageKey;
|
|
165
|
+
};
|
|
166
|
+
const instance = {
|
|
167
|
+
locale,
|
|
168
|
+
availableLocales,
|
|
169
|
+
loadedLocales: computed(() => [...catalogs.keys()].filter(isLocale)),
|
|
170
|
+
isLoading,
|
|
171
|
+
error,
|
|
172
|
+
direction: intl.direction,
|
|
173
|
+
intl,
|
|
174
|
+
ready: loadLocale(initial),
|
|
175
|
+
t: (messageKey, ...params) => translate(messageKey, params[0]),
|
|
176
|
+
te: (messageKey) => readMessage(catalogs.get(locale.value), messageKey) !== void 0,
|
|
177
|
+
setLocale,
|
|
178
|
+
loadLocale,
|
|
179
|
+
install: (app) => {
|
|
180
|
+
app.provide(key, instance);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
instance.ready.catch(() => void 0);
|
|
184
|
+
return instance;
|
|
185
|
+
};
|
|
186
|
+
const use = () => {
|
|
187
|
+
const instance = inject(key, null);
|
|
188
|
+
if (instance === null) throw new Error("[VIZE_COMPOSE_I18N_NOT_PROVIDED] no i18n instance was provided; call app.use(definition.create())");
|
|
189
|
+
return instance;
|
|
190
|
+
};
|
|
191
|
+
return {
|
|
192
|
+
key,
|
|
193
|
+
create,
|
|
194
|
+
use
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Inject the i18n instance of a definition. Equivalent to
|
|
199
|
+
* `definition.use()`; must run inside `setup` (or `app.runWithContext`).
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* const { t, setLocale } = useI18n(appI18n);
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @param definition Result of {@link defineI18n}.
|
|
207
|
+
* @throws `Error` tagged `VIZE_COMPOSE_I18N_NOT_PROVIDED` when no instance
|
|
208
|
+
* was provided.
|
|
209
|
+
* @returns The typed instance.
|
|
210
|
+
*/
|
|
211
|
+
function useI18n(definition) {
|
|
212
|
+
return definition.use();
|
|
213
|
+
}
|
|
214
|
+
//#endregion
|
|
215
|
+
export { defineI18n, defineLocale, defineMessages, useI18n };
|