@vizejs/composable 0.426.2 → 0.427.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
hasInjectionContext,
|
|
4
|
+
readonly,
|
|
5
|
+
shallowRef,
|
|
6
|
+
toValue,
|
|
7
|
+
watch,
|
|
8
|
+
watchPostEffect,
|
|
9
|
+
} from "vue";
|
|
10
|
+
import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
|
|
11
|
+
|
|
12
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
13
|
+
import type { TimeoutScheduler } from "./timeout-scheduler.ts";
|
|
14
|
+
|
|
15
|
+
/** Deadline handed to idle callbacks. */
|
|
16
|
+
export interface IdleDeadlineLike {
|
|
17
|
+
/** Whether the callback runs because its `timeout` elapsed. */
|
|
18
|
+
readonly didTimeout: boolean;
|
|
19
|
+
/** Milliseconds left in the current idle period. */
|
|
20
|
+
timeRemaining(): number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Minimal `requestIdleCallback` capability. */
|
|
24
|
+
export interface IdleCallbackHost {
|
|
25
|
+
/** Schedule `callback` for the next idle period. */
|
|
26
|
+
requestIdleCallback(
|
|
27
|
+
callback: (deadline: IdleDeadlineLike) => void,
|
|
28
|
+
options?: { readonly timeout?: number },
|
|
29
|
+
): number;
|
|
30
|
+
/** Cancel a scheduled callback. */
|
|
31
|
+
cancelIdleCallback(handle: number): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Scheduling options shared by {@link useRequestIdleCallback} and {@link idle}. */
|
|
35
|
+
export interface IdleSchedulingOptions {
|
|
36
|
+
/**
|
|
37
|
+
* `requestIdleCallback` capability for alternate runtimes and tests.
|
|
38
|
+
*
|
|
39
|
+
* @default window when it implements requestIdleCallback
|
|
40
|
+
*/
|
|
41
|
+
readonly host?: MaybeRefOrGetter<IdleCallbackHost | null | undefined>;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Timers used by the fallback when `host` is missing. Without timers
|
|
45
|
+
* (server rendering) nothing is scheduled.
|
|
46
|
+
*
|
|
47
|
+
* @default window.setTimeout and window.clearTimeout when a window exists
|
|
48
|
+
*/
|
|
49
|
+
readonly timers?: MaybeRefOrGetter<TimeoutScheduler | null | undefined>;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Run the callback after this many milliseconds even when the browser is
|
|
53
|
+
* never idle (`deadline.didTimeout` is then true).
|
|
54
|
+
*
|
|
55
|
+
* @default undefined (no timeout)
|
|
56
|
+
*/
|
|
57
|
+
readonly timeout?: number;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Clock used by the fallback deadline, in milliseconds.
|
|
61
|
+
*
|
|
62
|
+
* @default Date.now
|
|
63
|
+
*/
|
|
64
|
+
readonly now?: () => number;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Options for {@link useRequestIdleCallback}. */
|
|
68
|
+
export interface UseRequestIdleCallbackOptions extends IdleSchedulingOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Schedule the callback as soon as the composable is created.
|
|
71
|
+
*
|
|
72
|
+
* @default true
|
|
73
|
+
*/
|
|
74
|
+
readonly immediate?: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Options for {@link idle}. */
|
|
78
|
+
export interface IdleOptions extends IdleSchedulingOptions {
|
|
79
|
+
/**
|
|
80
|
+
* Cancels the wait; the promise rejects with `signal.reason`.
|
|
81
|
+
*
|
|
82
|
+
* @default undefined
|
|
83
|
+
*/
|
|
84
|
+
readonly signal?: AbortSignal;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Reactive state and actions returned by {@link useRequestIdleCallback}. */
|
|
88
|
+
export interface RequestIdleCallbackControls {
|
|
89
|
+
/** Whether the native `requestIdleCallback` API is available. */
|
|
90
|
+
readonly supported: ComputedRef<boolean>;
|
|
91
|
+
|
|
92
|
+
/** Whether a callback is scheduled and has not run yet. */
|
|
93
|
+
readonly isPending: Readonly<ShallowRef<boolean>>;
|
|
94
|
+
|
|
95
|
+
/** Schedule the callback, replacing a pending one. No-op on the server. */
|
|
96
|
+
readonly start: () => void;
|
|
97
|
+
|
|
98
|
+
/** Cancel the pending callback. Repeated calls are safe. */
|
|
99
|
+
readonly cancel: () => void;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Idle period length fabricated by the fallback, in milliseconds (the spec maximum). */
|
|
103
|
+
const FALLBACK_IDLE_PERIOD = 50;
|
|
104
|
+
|
|
105
|
+
function browserIdleHost(): IdleCallbackHost | undefined {
|
|
106
|
+
return typeof window !== "undefined" && typeof window.requestIdleCallback === "function"
|
|
107
|
+
? window
|
|
108
|
+
: undefined;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function browserTimers(): TimeoutScheduler | undefined {
|
|
112
|
+
if (typeof window === "undefined") return undefined;
|
|
113
|
+
const target = window;
|
|
114
|
+
return {
|
|
115
|
+
setTimeout: (callback, delayMs) => target.setTimeout(callback, delayMs),
|
|
116
|
+
clearTimeout: (handle) => {
|
|
117
|
+
if (typeof handle === "number") target.clearTimeout(handle);
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function validateTimeout(timeout: number | undefined): void {
|
|
123
|
+
if (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {
|
|
124
|
+
throw new RangeError(
|
|
125
|
+
`[VIZE_COMPOSE_IDLE_CALLBACK_INVALID_TIMEOUT] timeout must be a finite, non-negative number, received ${String(timeout)}`,
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Schedule once; returns a canceller, or undefined when nothing could be scheduled. */
|
|
131
|
+
function scheduleIdle(
|
|
132
|
+
options: IdleSchedulingOptions,
|
|
133
|
+
callback: (deadline: IdleDeadlineLike) => void,
|
|
134
|
+
): (() => void) | undefined {
|
|
135
|
+
const host = options.host === undefined ? browserIdleHost() : toValue(options.host);
|
|
136
|
+
if (host) {
|
|
137
|
+
const handle = host.requestIdleCallback(
|
|
138
|
+
callback,
|
|
139
|
+
options.timeout === undefined ? undefined : { timeout: options.timeout },
|
|
140
|
+
);
|
|
141
|
+
return () => host.cancelIdleCallback(handle);
|
|
142
|
+
}
|
|
143
|
+
const timers = options.timers === undefined ? browserTimers() : toValue(options.timers);
|
|
144
|
+
if (!timers) return undefined;
|
|
145
|
+
const now = options.now ?? Date.now;
|
|
146
|
+
const handle = timers.setTimeout(() => {
|
|
147
|
+
const start = now();
|
|
148
|
+
callback({
|
|
149
|
+
didTimeout: false,
|
|
150
|
+
timeRemaining: () => Math.max(0, FALLBACK_IDLE_PERIOD - (now() - start)),
|
|
151
|
+
});
|
|
152
|
+
}, 1);
|
|
153
|
+
return () => timers.clearTimeout(handle);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Run a callback in the next idle period with `requestIdleCallback`.
|
|
158
|
+
*
|
|
159
|
+
* When the API is missing, a `setTimeout` fallback fabricates a deadline
|
|
160
|
+
* with a 50 ms budget and `didTimeout: false`. The pending callback is
|
|
161
|
+
* cancelled when the owning reactive scope stops; outside a scope the
|
|
162
|
+
* caller owns `cancel()`.
|
|
163
|
+
*
|
|
164
|
+
* Server rendering: nothing is scheduled, `isPending` and `supported` are
|
|
165
|
+
* false. Inside a component the first callback is scheduled after mounting,
|
|
166
|
+
* so hydration renders the server state first.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```ts
|
|
170
|
+
* const { start } = useRequestIdleCallback((deadline) => {
|
|
171
|
+
* while (deadline.timeRemaining() > 1 && queue.length) queue.shift()?.();
|
|
172
|
+
* }, { timeout: 2000, immediate: false });
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* @param callback Receives the idle deadline.
|
|
176
|
+
* @param options Hosts, timeout and start policy.
|
|
177
|
+
* @default options {}
|
|
178
|
+
* @returns Scheduling state and actions.
|
|
179
|
+
*/
|
|
180
|
+
export function useRequestIdleCallback(
|
|
181
|
+
callback: (deadline: IdleDeadlineLike) => void,
|
|
182
|
+
options: UseRequestIdleCallbackOptions = {},
|
|
183
|
+
): RequestIdleCallbackControls {
|
|
184
|
+
validateTimeout(options.timeout);
|
|
185
|
+
const isPending = shallowRef(false);
|
|
186
|
+
let cancelPending: (() => void) | undefined;
|
|
187
|
+
|
|
188
|
+
const cancel = (): void => {
|
|
189
|
+
cancelPending?.();
|
|
190
|
+
cancelPending = undefined;
|
|
191
|
+
isPending.value = false;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
const start = (): void => {
|
|
195
|
+
cancel();
|
|
196
|
+
cancelPending = scheduleIdle(options, (deadline) => {
|
|
197
|
+
cancelPending = undefined;
|
|
198
|
+
isPending.value = false;
|
|
199
|
+
callback(deadline);
|
|
200
|
+
});
|
|
201
|
+
isPending.value = cancelPending !== undefined;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Inside a component the first callback is scheduled (and support is
|
|
205
|
+
// reported) only after mounting, so a hydrating client renders the same
|
|
206
|
+
// idle state as the server. Outside components it starts synchronously.
|
|
207
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
208
|
+
if (hydrated.value) {
|
|
209
|
+
if (options.immediate ?? true) start();
|
|
210
|
+
} else {
|
|
211
|
+
const stopReady = watch(
|
|
212
|
+
hydrated,
|
|
213
|
+
(ready) => {
|
|
214
|
+
if (!ready) return;
|
|
215
|
+
stopReady();
|
|
216
|
+
if (options.immediate ?? true) start();
|
|
217
|
+
},
|
|
218
|
+
{ flush: "sync" },
|
|
219
|
+
);
|
|
220
|
+
watchPostEffect(() => {
|
|
221
|
+
hydrated.value = true;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
tryOnScopeDispose(cancel);
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
supported: computed(
|
|
228
|
+
() =>
|
|
229
|
+
hydrated.value &&
|
|
230
|
+
(options.host === undefined
|
|
231
|
+
? browserIdleHost() !== undefined
|
|
232
|
+
: Boolean(toValue(options.host))),
|
|
233
|
+
),
|
|
234
|
+
isPending: readonly(isPending),
|
|
235
|
+
start,
|
|
236
|
+
cancel,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Resolve in the next idle period (or after `timeout`).
|
|
242
|
+
*
|
|
243
|
+
* Uses the same hosts and fallback as {@link useRequestIdleCallback}. When
|
|
244
|
+
* neither an idle host nor timers resolve (server rendering) it resolves on
|
|
245
|
+
* the next microtask with an exhausted deadline instead of hanging.
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```ts
|
|
249
|
+
* await idle({ timeout: 1000 });
|
|
250
|
+
* ```
|
|
251
|
+
*
|
|
252
|
+
* @param options Hosts, timeout and abort signal.
|
|
253
|
+
* @default options {}
|
|
254
|
+
* @returns The idle deadline; rejects with `signal.reason` when aborted.
|
|
255
|
+
*/
|
|
256
|
+
export function idle(options: IdleOptions = {}): Promise<IdleDeadlineLike> {
|
|
257
|
+
validateTimeout(options.timeout);
|
|
258
|
+
const { signal } = options;
|
|
259
|
+
return new Promise((resolve, reject) => {
|
|
260
|
+
if (signal?.aborted) {
|
|
261
|
+
reject(signal.reason);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const onAbort = (): void => {
|
|
265
|
+
cancel?.();
|
|
266
|
+
reject(signal?.reason);
|
|
267
|
+
};
|
|
268
|
+
const cancel = scheduleIdle(options, (deadline) => {
|
|
269
|
+
signal?.removeEventListener("abort", onAbort);
|
|
270
|
+
resolve(deadline);
|
|
271
|
+
});
|
|
272
|
+
if (!cancel) {
|
|
273
|
+
resolve({ didTimeout: false, timeRemaining: () => 0 });
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
277
|
+
});
|
|
278
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { computed, toValue } from "vue";
|
|
2
|
+
import type { ComputedRef, MaybeRefOrGetter, WritableComputedRef } from "vue";
|
|
3
|
+
|
|
4
|
+
/** Raw query value: repeated keys become arrays, absent keys are `undefined`. */
|
|
5
|
+
export type RawQueryValue = string | readonly string[] | undefined;
|
|
6
|
+
|
|
7
|
+
/** Query record as produced by `@vizejs/router` (`RouteMatch["query"]`). */
|
|
8
|
+
export type RouteQueryRecord = Readonly<Record<string, string | readonly string[]>>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Structural subset of a matched route. `@vizejs/router`'s `RouteMatch`
|
|
12
|
+
* satisfies it, so its inferred `params` type flows through without this
|
|
13
|
+
* package depending on the router.
|
|
14
|
+
*/
|
|
15
|
+
export interface RouteLocationLike {
|
|
16
|
+
/** Decoded path params. */
|
|
17
|
+
readonly params: object;
|
|
18
|
+
/** Parsed query. */
|
|
19
|
+
readonly query: RouteQueryRecord;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Converts a raw query value; `undefined` selects the default. */
|
|
23
|
+
export type QueryParser<Value> = (raw: RawQueryValue) => Value | undefined;
|
|
24
|
+
|
|
25
|
+
/** Converts a value back to a raw query value; `undefined` removes the key. */
|
|
26
|
+
export type QuerySerializer<Value> = (value: Value) => string | readonly string[] | undefined;
|
|
27
|
+
|
|
28
|
+
/** Built-in {@link QueryParser}s. */
|
|
29
|
+
export const queryParsers = {
|
|
30
|
+
/** First value as a string. */
|
|
31
|
+
string: (raw: RawQueryValue): string | undefined => (typeof raw === "string" ? raw : raw?.[0]),
|
|
32
|
+
/** First value as a finite number. */
|
|
33
|
+
number: (raw: RawQueryValue): number | undefined => {
|
|
34
|
+
const text = typeof raw === "string" ? raw : raw?.[0];
|
|
35
|
+
if (text === undefined || text.trim() === "") return undefined;
|
|
36
|
+
const value = Number(text);
|
|
37
|
+
return Number.isFinite(value) ? value : undefined;
|
|
38
|
+
},
|
|
39
|
+
/** First value as a safe integer. */
|
|
40
|
+
integer: (raw: RawQueryValue): number | undefined => {
|
|
41
|
+
const text = typeof raw === "string" ? raw : raw?.[0];
|
|
42
|
+
return text !== undefined && /^-?\d+$/.test(text) && Number.isSafeInteger(Number(text))
|
|
43
|
+
? Number(text)
|
|
44
|
+
: undefined;
|
|
45
|
+
},
|
|
46
|
+
/** `"true"`/`"1"`/`""` (present flag) → `true`, `"false"`/`"0"` → `false`. */
|
|
47
|
+
boolean: (raw: RawQueryValue): boolean | undefined => {
|
|
48
|
+
const text = typeof raw === "string" ? raw : raw?.[0];
|
|
49
|
+
if (text === undefined) return undefined;
|
|
50
|
+
if (text === "true" || text === "1" || text === "") return true;
|
|
51
|
+
if (text === "false" || text === "0") return false;
|
|
52
|
+
return undefined;
|
|
53
|
+
},
|
|
54
|
+
/** Every value as a string array. */
|
|
55
|
+
array: (raw: RawQueryValue): string[] | undefined =>
|
|
56
|
+
raw === undefined ? undefined : typeof raw === "string" ? [raw] : [...raw],
|
|
57
|
+
} as const;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Parser accepting only the given literal values.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* useRouteQuery(route, "sort", { parse: oneOf(["new", "top"]), default: "new" });
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @param values Allowed values.
|
|
68
|
+
* @returns A parser narrowing to the literal union.
|
|
69
|
+
*/
|
|
70
|
+
export function oneOf<const Values extends readonly string[]>(
|
|
71
|
+
values: Values,
|
|
72
|
+
): QueryParser<Values[number]> {
|
|
73
|
+
const allowed = new Set<string>(values);
|
|
74
|
+
const isAllowed = (text: string): text is Values[number] => allowed.has(text);
|
|
75
|
+
return (raw) => {
|
|
76
|
+
const text = typeof raw === "string" ? raw : raw?.[0];
|
|
77
|
+
return text !== undefined && isAllowed(text) ? text : undefined;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Options for {@link useRouteQuery}. */
|
|
82
|
+
export interface UseRouteQueryOptions<Value> {
|
|
83
|
+
/**
|
|
84
|
+
* Converts the raw value.
|
|
85
|
+
*
|
|
86
|
+
* @default queryParsers.string
|
|
87
|
+
*/
|
|
88
|
+
readonly parse?: QueryParser<Value>;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Converts a written value back into the query.
|
|
92
|
+
*
|
|
93
|
+
* @default strings and string arrays unchanged, other values via `String`
|
|
94
|
+
*/
|
|
95
|
+
readonly serialize?: QuerySerializer<Value>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Performs the navigation for a write, receiving the complete next query.
|
|
99
|
+
* Without it the returned ref is read-only.
|
|
100
|
+
*
|
|
101
|
+
* @default undefined
|
|
102
|
+
*/
|
|
103
|
+
readonly navigate?: (query: RouteQueryRecord) => void;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Remove the key instead of writing it when the value equals the default.
|
|
107
|
+
*
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
readonly omitDefault?: boolean;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Implementation view of every overload's options. Method syntax keeps the
|
|
115
|
+
* serializer parameter bivariant so each typed overload is compatible.
|
|
116
|
+
*/
|
|
117
|
+
interface ErasedQueryOptions {
|
|
118
|
+
readonly parse?: QueryParser<unknown> | undefined;
|
|
119
|
+
serialize?(value: unknown): string | readonly string[] | undefined;
|
|
120
|
+
readonly navigate?: (query: RouteQueryRecord) => void;
|
|
121
|
+
readonly omitDefault?: boolean;
|
|
122
|
+
readonly default?: unknown;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Options of a string query parameter (no parser). */
|
|
126
|
+
export type StringQueryOptions = Omit<UseRouteQueryOptions<string>, "parse"> & {
|
|
127
|
+
/** Must be omitted: string parameters use {@link queryParsers.string}. */
|
|
128
|
+
readonly parse?: undefined;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
function defaultSerialize(value: unknown): string | readonly string[] | undefined {
|
|
132
|
+
if (value === undefined || value === null) return undefined;
|
|
133
|
+
if (typeof value === "string") return value;
|
|
134
|
+
if (Array.isArray(value))
|
|
135
|
+
return value.map((item) => (typeof item === "string" ? item : JSON.stringify(item)));
|
|
136
|
+
return typeof value === "number" || typeof value === "boolean" || typeof value === "bigint"
|
|
137
|
+
? value.toString()
|
|
138
|
+
: JSON.stringify(value);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function sameRaw(left: RawQueryValue, right: RawQueryValue): boolean {
|
|
142
|
+
if (typeof left === "string" || typeof right === "string" || !left || !right) {
|
|
143
|
+
return left === right;
|
|
144
|
+
}
|
|
145
|
+
return left.length === right.length && left.every((item, index) => item === right[index]);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Typed, optionally writable view of one query parameter.
|
|
150
|
+
*
|
|
151
|
+
* The value type is inferred from `parse` and `default`: with a default the
|
|
152
|
+
* ref never holds `undefined`. Pass `navigate` to make the ref writable;
|
|
153
|
+
* writes build the next query (keeping every other key), drop the key when
|
|
154
|
+
* the value equals the default, and hand it to `navigate`, which is where
|
|
155
|
+
* the router integration pushes or replaces the URL. Works with any route
|
|
156
|
+
* object exposing `query`, including `@vizejs/router`'s `RouteMatch`.
|
|
157
|
+
* Pure derived state: SSR-safe and hydration-stable (it reads the matched
|
|
158
|
+
* route only).
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* const page = useRouteQuery(match, "page", {
|
|
163
|
+
* parse: queryParsers.integer,
|
|
164
|
+
* default: 1,
|
|
165
|
+
* navigate: (query) => navigateTo(router.resolve(match.value.name, match.value.params, { query })),
|
|
166
|
+
* });
|
|
167
|
+
* page.value += 1;
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @param route Reactive matched route.
|
|
171
|
+
* @param key Query key.
|
|
172
|
+
* @param options Parser, default, serializer, and navigation.
|
|
173
|
+
* @default options {}
|
|
174
|
+
* @returns A computed ref (writable when `navigate` is given).
|
|
175
|
+
*/
|
|
176
|
+
export function useRouteQuery(
|
|
177
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
178
|
+
key: string,
|
|
179
|
+
options: StringQueryOptions & {
|
|
180
|
+
readonly default: string;
|
|
181
|
+
readonly navigate: (query: RouteQueryRecord) => void;
|
|
182
|
+
},
|
|
183
|
+
): WritableComputedRef<string>;
|
|
184
|
+
export function useRouteQuery(
|
|
185
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
186
|
+
key: string,
|
|
187
|
+
options: StringQueryOptions & { readonly navigate: (query: RouteQueryRecord) => void },
|
|
188
|
+
): WritableComputedRef<string | undefined, string | undefined>;
|
|
189
|
+
export function useRouteQuery(
|
|
190
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
191
|
+
key: string,
|
|
192
|
+
options: StringQueryOptions & { readonly default: string },
|
|
193
|
+
): ComputedRef<string>;
|
|
194
|
+
export function useRouteQuery(
|
|
195
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
196
|
+
key: string,
|
|
197
|
+
options?: StringQueryOptions,
|
|
198
|
+
): ComputedRef<string | undefined>;
|
|
199
|
+
export function useRouteQuery<Value>(
|
|
200
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
201
|
+
key: string,
|
|
202
|
+
options: UseRouteQueryOptions<Value> & {
|
|
203
|
+
readonly default: NoInfer<Value>;
|
|
204
|
+
readonly navigate: (query: RouteQueryRecord) => void;
|
|
205
|
+
},
|
|
206
|
+
): WritableComputedRef<Value>;
|
|
207
|
+
export function useRouteQuery<Value>(
|
|
208
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
209
|
+
key: string,
|
|
210
|
+
options: UseRouteQueryOptions<Value> & { readonly navigate: (query: RouteQueryRecord) => void },
|
|
211
|
+
): WritableComputedRef<Value | undefined, Value | undefined>;
|
|
212
|
+
export function useRouteQuery<Value>(
|
|
213
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
214
|
+
key: string,
|
|
215
|
+
options: UseRouteQueryOptions<Value> & { readonly default: NoInfer<Value> },
|
|
216
|
+
): ComputedRef<Value>;
|
|
217
|
+
export function useRouteQuery<Value>(
|
|
218
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
219
|
+
key: string,
|
|
220
|
+
options: UseRouteQueryOptions<Value>,
|
|
221
|
+
): ComputedRef<Value | undefined>;
|
|
222
|
+
export function useRouteQuery(
|
|
223
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
224
|
+
key: string,
|
|
225
|
+
options: ErasedQueryOptions = {},
|
|
226
|
+
): ComputedRef<unknown> | WritableComputedRef<unknown> {
|
|
227
|
+
const parse = options.parse ?? queryParsers.string;
|
|
228
|
+
const read = (): unknown => parse(toValue(route).query[key]) ?? options.default;
|
|
229
|
+
const navigate = options.navigate;
|
|
230
|
+
if (navigate === undefined) return computed(read);
|
|
231
|
+
|
|
232
|
+
const serialize = (value: unknown): string | readonly string[] | undefined =>
|
|
233
|
+
options.serialize === undefined ? defaultSerialize(value) : options.serialize(value);
|
|
234
|
+
return computed({
|
|
235
|
+
get: read,
|
|
236
|
+
set: (value) => {
|
|
237
|
+
const current = toValue(route).query;
|
|
238
|
+
const raw =
|
|
239
|
+
(options.omitDefault ?? true) &&
|
|
240
|
+
"default" in options &&
|
|
241
|
+
sameRaw(serialize(value), serialize(options.default))
|
|
242
|
+
? undefined
|
|
243
|
+
: serialize(value);
|
|
244
|
+
if (sameRaw(raw, current[key])) return;
|
|
245
|
+
const next: Record<string, string | readonly string[]> = { ...current };
|
|
246
|
+
if (raw === undefined) Reflect.deleteProperty(next, key);
|
|
247
|
+
else next[key] = raw;
|
|
248
|
+
navigate(next);
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Params object of a route location. */
|
|
254
|
+
export type RouteParamsOf<Route extends RouteLocationLike> = Route["params"];
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Typed view of the matched route's path params.
|
|
258
|
+
*
|
|
259
|
+
* Without a key, returns all params (typed from the route table when the
|
|
260
|
+
* route comes from `@vizejs/router`). With a key, returns that param; with
|
|
261
|
+
* a parser, the parsed value. Pure derived state: SSR-safe.
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* ```ts
|
|
265
|
+
* const params = useRouteParams(match); // ComputedRef<{ readonly id: string }>
|
|
266
|
+
* const id = useRouteParams(match, "id", Number); // ComputedRef<number>
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* @param route Reactive matched route.
|
|
270
|
+
* @param key Param name.
|
|
271
|
+
* @param parse Converts the raw param.
|
|
272
|
+
* @returns Computed params, param, or parsed param.
|
|
273
|
+
*/
|
|
274
|
+
export function useRouteParams<Route extends RouteLocationLike>(
|
|
275
|
+
route: MaybeRefOrGetter<Route>,
|
|
276
|
+
): ComputedRef<RouteParamsOf<Route>>;
|
|
277
|
+
export function useRouteParams<Route extends RouteLocationLike, Key extends keyof Route["params"]>(
|
|
278
|
+
route: MaybeRefOrGetter<Route>,
|
|
279
|
+
key: Key,
|
|
280
|
+
): ComputedRef<Route["params"][Key]>;
|
|
281
|
+
export function useRouteParams<
|
|
282
|
+
Route extends RouteLocationLike,
|
|
283
|
+
Key extends keyof Route["params"],
|
|
284
|
+
Value,
|
|
285
|
+
>(
|
|
286
|
+
route: MaybeRefOrGetter<Route>,
|
|
287
|
+
key: Key,
|
|
288
|
+
parse: (raw: Route["params"][Key]) => Value,
|
|
289
|
+
): ComputedRef<Value>;
|
|
290
|
+
export function useRouteParams(
|
|
291
|
+
route: MaybeRefOrGetter<RouteLocationLike>,
|
|
292
|
+
...args: readonly [] | readonly [PropertyKey] | readonly [PropertyKey, (raw: unknown) => unknown]
|
|
293
|
+
): ComputedRef<unknown> {
|
|
294
|
+
return computed(() => {
|
|
295
|
+
const { params } = toValue(route);
|
|
296
|
+
if (args.length === 0) return params;
|
|
297
|
+
const raw: unknown = Reflect.get(params, args[0]);
|
|
298
|
+
return args.length === 2 ? args[1](raw) : raw;
|
|
299
|
+
});
|
|
300
|
+
}
|