@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,190 @@
|
|
|
1
|
+
import { computed, shallowRef } from "vue";
|
|
2
|
+
import type { ComputedRef, Ref, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
5
|
+
|
|
6
|
+
/** Lifecycle state of an asynchronous resource. */
|
|
7
|
+
export type AsyncResourceStatus = "idle" | "pending" | "success" | "error" | "cancelled";
|
|
8
|
+
|
|
9
|
+
/** Context supplied to an asynchronous resource loader. */
|
|
10
|
+
export interface AsyncResourceContext {
|
|
11
|
+
/** Signal aborted by cancellation, reset, scope disposal, or a newer execution. */
|
|
12
|
+
readonly signal: AbortSignal;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Explicit result of one asynchronous resource execution. */
|
|
16
|
+
export type AsyncResourceExecution<Data, Failure> =
|
|
17
|
+
| { readonly status: "success"; readonly data: Data }
|
|
18
|
+
| { readonly status: "error"; readonly error: Failure }
|
|
19
|
+
| { readonly status: "cancelled"; readonly reason: unknown }
|
|
20
|
+
| { readonly status: "superseded" };
|
|
21
|
+
|
|
22
|
+
/** Options for {@link useAsyncResource}. */
|
|
23
|
+
export interface UseAsyncResourceOptions<Data> {
|
|
24
|
+
/**
|
|
25
|
+
* Initial data restored by {@link AsyncResource.reset}.
|
|
26
|
+
*
|
|
27
|
+
* @default undefined
|
|
28
|
+
*/
|
|
29
|
+
readonly initialData?: Data;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Abort the active execution when a newer execution starts.
|
|
33
|
+
*
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
readonly cancelPrevious?: boolean;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Retain the current data while a new execution is pending.
|
|
40
|
+
*
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
readonly keepData?: boolean;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Cancel an active execution when the current reactive scope is disposed.
|
|
47
|
+
*
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
readonly scope?: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Reactive state and controls for an asynchronous loader. */
|
|
54
|
+
export interface AsyncResource<Data, Arguments extends readonly unknown[], Failure> {
|
|
55
|
+
/** Data of the newest successful execution, retained according to `keepData`. */
|
|
56
|
+
readonly data: Readonly<ShallowRef<Data | undefined>>;
|
|
57
|
+
|
|
58
|
+
/** Failure of the newest settled execution, cleared when a new one starts. */
|
|
59
|
+
readonly error: Readonly<ShallowRef<Failure | undefined>>;
|
|
60
|
+
|
|
61
|
+
/** Current lifecycle status, driven only by the newest execution. */
|
|
62
|
+
readonly status: Readonly<Ref<AsyncResourceStatus>>;
|
|
63
|
+
|
|
64
|
+
/** Whether an execution is currently pending. */
|
|
65
|
+
readonly pending: ComputedRef<boolean>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Run the loader. The returned promise never rejects: loader failures,
|
|
69
|
+
* cancellation, and supersession are reported as the discriminated result,
|
|
70
|
+
* and stale executions leave the reactive state untouched.
|
|
71
|
+
*/
|
|
72
|
+
readonly execute: (...arguments_: Arguments) => Promise<AsyncResourceExecution<Data, Failure>>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Abort the active execution and mark the resource cancelled.
|
|
76
|
+
*
|
|
77
|
+
* @param reason Abort reason forwarded to the loader's signal.
|
|
78
|
+
* @default reason DOMException("AbortError")
|
|
79
|
+
* @returns Whether an active execution was cancelled.
|
|
80
|
+
*/
|
|
81
|
+
readonly cancel: (reason?: unknown) => boolean;
|
|
82
|
+
|
|
83
|
+
/** Cancel any active execution and restore the initial idle state. */
|
|
84
|
+
readonly reset: () => void;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
interface ActiveExecution {
|
|
88
|
+
readonly generation: number;
|
|
89
|
+
readonly controller: AbortController;
|
|
90
|
+
superseded: boolean;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Create a scoped, abortable asynchronous resource with latest-result-wins
|
|
95
|
+
* state. Every execution returns a discriminated result, so cancellation,
|
|
96
|
+
* supersession, loader failure, and successful `undefined` data stay distinct.
|
|
97
|
+
*
|
|
98
|
+
* When created inside an active reactive scope (and `scope` is enabled), the
|
|
99
|
+
* active execution is aborted when that scope stops; outside a scope,
|
|
100
|
+
* cancellation ownership stays with the caller. The execute promise never
|
|
101
|
+
* rejects — synchronous and asynchronous loader failures both settle into
|
|
102
|
+
* the `"error"` result. Safe during server rendering: no browser globals are
|
|
103
|
+
* read and abort reasons use the runtime-native `DOMException`.
|
|
104
|
+
*
|
|
105
|
+
* @param loader Asynchronous loader receiving the abort context first.
|
|
106
|
+
* @param options Data retention, supersession, and scope behavior.
|
|
107
|
+
* @default options {}
|
|
108
|
+
* @returns Reactive state and controls for the loader.
|
|
109
|
+
*/
|
|
110
|
+
export function useAsyncResource<Data, Arguments extends readonly unknown[], Failure = unknown>(
|
|
111
|
+
loader: (context: AsyncResourceContext, ...arguments_: Arguments) => Promise<Data>,
|
|
112
|
+
options: UseAsyncResourceOptions<Data> = {},
|
|
113
|
+
): AsyncResource<Data, Arguments, Failure> {
|
|
114
|
+
const data = shallowRef<Data | undefined>(options.initialData);
|
|
115
|
+
const error = shallowRef<Failure | undefined>(undefined);
|
|
116
|
+
const status = shallowRef<AsyncResourceStatus>("idle");
|
|
117
|
+
const pending = computed(() => status.value === "pending");
|
|
118
|
+
let generation = 0;
|
|
119
|
+
let active: ActiveExecution | undefined;
|
|
120
|
+
|
|
121
|
+
const cancel = (reason: unknown = createAbortReason("The execution was cancelled.")) => {
|
|
122
|
+
if (active === undefined) return false;
|
|
123
|
+
generation += 1;
|
|
124
|
+
active.controller.abort(reason);
|
|
125
|
+
active = undefined;
|
|
126
|
+
status.value = "cancelled";
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const execute = async (
|
|
131
|
+
...arguments_: Arguments
|
|
132
|
+
): Promise<AsyncResourceExecution<Data, Failure>> => {
|
|
133
|
+
if ((options.cancelPrevious ?? true) && active !== undefined) {
|
|
134
|
+
active.superseded = true;
|
|
135
|
+
active.controller.abort(createAbortReason("A newer execution started."));
|
|
136
|
+
}
|
|
137
|
+
const record: ActiveExecution = {
|
|
138
|
+
generation: ++generation,
|
|
139
|
+
controller: new AbortController(),
|
|
140
|
+
superseded: false,
|
|
141
|
+
};
|
|
142
|
+
active = record;
|
|
143
|
+
error.value = undefined;
|
|
144
|
+
status.value = "pending";
|
|
145
|
+
if (!(options.keepData ?? true)) data.value = undefined;
|
|
146
|
+
|
|
147
|
+
try {
|
|
148
|
+
const result = await loader({ signal: record.controller.signal }, ...arguments_);
|
|
149
|
+
if (record.generation !== generation) return executionAfterInvalidation(record);
|
|
150
|
+
data.value = result;
|
|
151
|
+
status.value = "success";
|
|
152
|
+
return { status: "success", data: result } as const;
|
|
153
|
+
} catch (cause) {
|
|
154
|
+
if (record.generation !== generation || record.controller.signal.aborted) {
|
|
155
|
+
return executionAfterInvalidation(record);
|
|
156
|
+
}
|
|
157
|
+
error.value = cause as Failure;
|
|
158
|
+
status.value = "error";
|
|
159
|
+
return { status: "error", error: cause as Failure } as const;
|
|
160
|
+
} finally {
|
|
161
|
+
if (active === record) active = undefined;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const reset = () => {
|
|
166
|
+
cancel(createAbortReason("The resource was reset."));
|
|
167
|
+
data.value = options.initialData;
|
|
168
|
+
error.value = undefined;
|
|
169
|
+
status.value = "idle";
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
if (options.scope ?? true) {
|
|
173
|
+
tryOnScopeDispose(() => cancel(createAbortReason("The reactive scope was disposed.")));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return { data, error, status, pending, execute, cancel, reset };
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function executionAfterInvalidation<Data, Failure>(
|
|
180
|
+
execution: ActiveExecution,
|
|
181
|
+
): AsyncResourceExecution<Data, Failure> {
|
|
182
|
+
if (execution.superseded || !execution.controller.signal.aborted) {
|
|
183
|
+
return { status: "superseded" };
|
|
184
|
+
}
|
|
185
|
+
return { status: "cancelled", reason: execution.controller.signal.reason };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function createAbortReason(message: string): DOMException {
|
|
189
|
+
return new DOMException(message, "AbortError");
|
|
190
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
|
|
2
|
+
import type { MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
3
|
+
|
|
4
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
5
|
+
|
|
6
|
+
/** Subset of the Battery Status API `BatteryManager`. */
|
|
7
|
+
export interface BatteryManagerLike extends EventTarget {
|
|
8
|
+
/** Whether the battery is charging. */
|
|
9
|
+
readonly charging: boolean;
|
|
10
|
+
/** Seconds until fully charged (`Infinity` when discharging). */
|
|
11
|
+
readonly chargingTime: number;
|
|
12
|
+
/** Seconds until empty (`Infinity` when charging). */
|
|
13
|
+
readonly dischargingTime: number;
|
|
14
|
+
/** Charge level in `[0, 1]`. */
|
|
15
|
+
readonly level: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Navigator-like capability used by {@link useBattery}. */
|
|
19
|
+
export interface BatteryHost {
|
|
20
|
+
/** Resolve the battery manager, where supported. */
|
|
21
|
+
readonly getBattery?: () => Promise<BatteryManagerLike>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Options for {@link useBattery}. */
|
|
25
|
+
export interface UseBatteryOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Reactive navigator capability for alternate runtimes and tests.
|
|
28
|
+
*
|
|
29
|
+
* @default globalThis.window.navigator when available
|
|
30
|
+
*/
|
|
31
|
+
readonly host?: MaybeRefOrGetter<BatteryHost | null | undefined>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Reactive battery state returned by {@link useBattery}. */
|
|
35
|
+
export interface BatteryControls {
|
|
36
|
+
/** Whether the host exposes `getBattery`. `false` during server rendering. */
|
|
37
|
+
readonly isSupported: Readonly<Ref<boolean>>;
|
|
38
|
+
/** Whether the battery manager has resolved. */
|
|
39
|
+
readonly isReady: Readonly<Ref<boolean>>;
|
|
40
|
+
/** Whether the battery is charging. */
|
|
41
|
+
readonly charging: Readonly<Ref<boolean>>;
|
|
42
|
+
/** Seconds until fully charged. */
|
|
43
|
+
readonly chargingTime: Readonly<Ref<number>>;
|
|
44
|
+
/** Seconds until empty. */
|
|
45
|
+
readonly dischargingTime: Readonly<Ref<number>>;
|
|
46
|
+
/** Charge level in `[0, 1]`. */
|
|
47
|
+
readonly level: Readonly<Ref<number>>;
|
|
48
|
+
/** Rejection from `getBattery`, if any (for example a permissions policy). */
|
|
49
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const batteryEvents = [
|
|
53
|
+
"chargingchange",
|
|
54
|
+
"chargingtimechange",
|
|
55
|
+
"dischargingtimechange",
|
|
56
|
+
"levelchange",
|
|
57
|
+
] as const;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Track the device battery with the Battery Status API.
|
|
61
|
+
*
|
|
62
|
+
* Server renders (and unsupported browsers) expose a full, charging battery
|
|
63
|
+
* (`level: 1`, `charging: true`, times `0`/`Infinity`), which is the
|
|
64
|
+
* least alarming deterministic default. Late resolutions after the host
|
|
65
|
+
* changed or the scope stopped are ignored, and listeners are removed with
|
|
66
|
+
* the owning reactive scope.
|
|
67
|
+
*
|
|
68
|
+
* @param options Navigator capability.
|
|
69
|
+
* @default options {}
|
|
70
|
+
* @returns Reactive battery state.
|
|
71
|
+
*/
|
|
72
|
+
export function useBattery(options: UseBatteryOptions = {}): BatteryControls {
|
|
73
|
+
const isSupported = ref(false);
|
|
74
|
+
const isReady = ref(false);
|
|
75
|
+
const charging = ref(true);
|
|
76
|
+
const chargingTime = ref(0);
|
|
77
|
+
const dischargingTime = ref(Number.POSITIVE_INFINITY);
|
|
78
|
+
const level = ref(1);
|
|
79
|
+
const error = shallowRef<unknown>(undefined);
|
|
80
|
+
// Inside a component the host is read once it has mounted, so a hydrating
|
|
81
|
+
// client first renders the same fallback as the server. `hasInjectionContext`
|
|
82
|
+
// also detects Vapor components (unlike `getCurrentInstance`).
|
|
83
|
+
const mounted = shallowRef(!hasInjectionContext());
|
|
84
|
+
if (!mounted.value) {
|
|
85
|
+
onMounted(() => {
|
|
86
|
+
mounted.value = true;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const stop = watch(
|
|
91
|
+
() =>
|
|
92
|
+
!mounted.value
|
|
93
|
+
? undefined
|
|
94
|
+
: options.host === undefined
|
|
95
|
+
? browserBatteryHost()
|
|
96
|
+
: toValue(options.host),
|
|
97
|
+
(host, _previous, onCleanup) => {
|
|
98
|
+
const getBattery = host?.getBattery;
|
|
99
|
+
isSupported.value = typeof getBattery === "function";
|
|
100
|
+
isReady.value = false;
|
|
101
|
+
if (!host || typeof getBattery !== "function") return;
|
|
102
|
+
let cancelled = false;
|
|
103
|
+
let release = (): void => undefined;
|
|
104
|
+
onCleanup(() => {
|
|
105
|
+
cancelled = true;
|
|
106
|
+
release();
|
|
107
|
+
});
|
|
108
|
+
getBattery.call(host).then(
|
|
109
|
+
(battery) => {
|
|
110
|
+
if (cancelled) return;
|
|
111
|
+
const update = (): void => {
|
|
112
|
+
charging.value = battery.charging;
|
|
113
|
+
chargingTime.value = battery.chargingTime;
|
|
114
|
+
dischargingTime.value = battery.dischargingTime;
|
|
115
|
+
level.value = battery.level;
|
|
116
|
+
};
|
|
117
|
+
update();
|
|
118
|
+
isReady.value = true;
|
|
119
|
+
for (const type of batteryEvents) battery.addEventListener(type, update);
|
|
120
|
+
release = () => {
|
|
121
|
+
for (const type of batteryEvents) battery.removeEventListener(type, update);
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
(cause: unknown) => {
|
|
125
|
+
if (!cancelled) error.value = cause;
|
|
126
|
+
},
|
|
127
|
+
);
|
|
128
|
+
},
|
|
129
|
+
{ immediate: true },
|
|
130
|
+
);
|
|
131
|
+
tryOnScopeDispose(() => stop.stop());
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
isSupported: readonly(isSupported),
|
|
135
|
+
isReady: readonly(isReady),
|
|
136
|
+
charging: readonly(charging),
|
|
137
|
+
chargingTime: readonly(chargingTime),
|
|
138
|
+
dischargingTime: readonly(dischargingTime),
|
|
139
|
+
level: readonly(level),
|
|
140
|
+
error,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function browserBatteryHost(): BatteryHost | undefined {
|
|
145
|
+
if (typeof window === "undefined") return undefined;
|
|
146
|
+
const navigator: object = window.navigator;
|
|
147
|
+
if (!("getBattery" in navigator) || typeof navigator.getBattery !== "function") return {};
|
|
148
|
+
const request = navigator.getBattery;
|
|
149
|
+
return {
|
|
150
|
+
getBattery: async () => {
|
|
151
|
+
const battery: unknown = await Reflect.apply(request, navigator, []);
|
|
152
|
+
if (isBatteryManager(battery)) return battery;
|
|
153
|
+
throw new TypeError("navigator.getBattery() resolved to an unexpected value.");
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function isBatteryManager(value: unknown): value is BatteryManagerLike {
|
|
159
|
+
return (
|
|
160
|
+
typeof value === "object" &&
|
|
161
|
+
value !== null &&
|
|
162
|
+
"level" in value &&
|
|
163
|
+
"charging" in value &&
|
|
164
|
+
"addEventListener" in value
|
|
165
|
+
);
|
|
166
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
import type { ComputedRef, Ref } from "vue";
|
|
3
|
+
|
|
4
|
+
import { useMediaQuery } from "./media-query.ts";
|
|
5
|
+
import type { UseMediaQueryOptions } from "./media-query.ts";
|
|
6
|
+
|
|
7
|
+
/** Breakpoint width: pixels as a number, or a CSS length in `px`, `rem`, or `em`. */
|
|
8
|
+
export type BreakpointValue = number | `${number}px` | `${number}rem` | `${number}em`;
|
|
9
|
+
|
|
10
|
+
/** Named breakpoint map. */
|
|
11
|
+
export type Breakpoints<Name extends string = string> = Readonly<Record<Name, BreakpointValue>>;
|
|
12
|
+
|
|
13
|
+
/** Tailwind CSS default breakpoints. */
|
|
14
|
+
export const breakpointsTailwind = {
|
|
15
|
+
sm: 640,
|
|
16
|
+
md: 768,
|
|
17
|
+
lg: 1024,
|
|
18
|
+
xl: 1280,
|
|
19
|
+
"2xl": 1536,
|
|
20
|
+
} as const satisfies Breakpoints;
|
|
21
|
+
|
|
22
|
+
/** Bootstrap 5 default breakpoints. */
|
|
23
|
+
export const breakpointsBootstrapV5 = {
|
|
24
|
+
xs: 0,
|
|
25
|
+
sm: 576,
|
|
26
|
+
md: 768,
|
|
27
|
+
lg: 992,
|
|
28
|
+
xl: 1200,
|
|
29
|
+
xxl: 1400,
|
|
30
|
+
} as const satisfies Breakpoints;
|
|
31
|
+
|
|
32
|
+
/** Names reserved for the helper methods returned by {@link useBreakpoints}. */
|
|
33
|
+
export type ReservedBreakpointName =
|
|
34
|
+
| "greaterOrEqual"
|
|
35
|
+
| "greater"
|
|
36
|
+
| "smaller"
|
|
37
|
+
| "smallerOrEqual"
|
|
38
|
+
| "between"
|
|
39
|
+
| "current"
|
|
40
|
+
| "active";
|
|
41
|
+
|
|
42
|
+
/** Options for {@link useBreakpoints}. */
|
|
43
|
+
export interface UseBreakpointsOptions extends Omit<UseMediaQueryOptions, "ssrValue"> {
|
|
44
|
+
/**
|
|
45
|
+
* Viewport width assumed during server rendering (and whenever no media
|
|
46
|
+
* capability exists). Queries are evaluated against it arithmetically, so
|
|
47
|
+
* the server output matches a client of that width.
|
|
48
|
+
*
|
|
49
|
+
* @default undefined (every query is `false` on the server)
|
|
50
|
+
*/
|
|
51
|
+
readonly ssrWidth?: number;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Root font size used to convert `rem`/`em` values for `ssrWidth`.
|
|
55
|
+
*
|
|
56
|
+
* @default 16
|
|
57
|
+
*/
|
|
58
|
+
readonly rootFontSize?: number;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Reactive breakpoint helpers returned by {@link useBreakpoints}. */
|
|
62
|
+
export type BreakpointsControls<Name extends string> = {
|
|
63
|
+
/** `true` when the viewport is at least this breakpoint (mobile-first). */
|
|
64
|
+
readonly [Key in Name]: Readonly<Ref<boolean>>;
|
|
65
|
+
} & {
|
|
66
|
+
/** Viewport width ≥ breakpoint. */
|
|
67
|
+
readonly greaterOrEqual: (name: Name) => Readonly<Ref<boolean>>;
|
|
68
|
+
/** Viewport width > breakpoint. */
|
|
69
|
+
readonly greater: (name: Name) => Readonly<Ref<boolean>>;
|
|
70
|
+
/** Viewport width < breakpoint. */
|
|
71
|
+
readonly smaller: (name: Name) => Readonly<Ref<boolean>>;
|
|
72
|
+
/** Viewport width ≤ breakpoint. */
|
|
73
|
+
readonly smallerOrEqual: (name: Name) => Readonly<Ref<boolean>>;
|
|
74
|
+
/** `lower` ≤ width < `upper`. */
|
|
75
|
+
readonly between: (lower: Name, upper: Name) => ComputedRef<boolean>;
|
|
76
|
+
/** Every breakpoint currently matched (mobile-first), in ascending order. */
|
|
77
|
+
readonly current: ComputedRef<readonly Name[]>;
|
|
78
|
+
/** Largest matched breakpoint, or `null` below the smallest one. */
|
|
79
|
+
readonly active: ComputedRef<Name | null>;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Reactive, typed breakpoint helpers built on media queries.
|
|
84
|
+
*
|
|
85
|
+
* Breakpoint names are inferred from the map, so typos are compile errors.
|
|
86
|
+
* `greater` and `smaller` use fractional offsets (`width > 767.98px`) so
|
|
87
|
+
* adjacent breakpoints never overlap. With `ssrWidth`, the server evaluates
|
|
88
|
+
* each query arithmetically for deterministic, hydration-stable output.
|
|
89
|
+
* Subscriptions are released with the owning reactive scope.
|
|
90
|
+
*
|
|
91
|
+
* @param breakpoints Named breakpoint map, e.g. {@link breakpointsTailwind}.
|
|
92
|
+
* @param options SSR width, font size, and media capability.
|
|
93
|
+
* @default options {}
|
|
94
|
+
* @returns Per-breakpoint refs plus comparison helpers.
|
|
95
|
+
*/
|
|
96
|
+
export function useBreakpoints<const Name extends string>(
|
|
97
|
+
breakpoints: Breakpoints<Name> & { readonly [Reserved in ReservedBreakpointName]?: never },
|
|
98
|
+
options: UseBreakpointsOptions = {},
|
|
99
|
+
): BreakpointsControls<Name> {
|
|
100
|
+
const rootFontSize = options.rootFontSize ?? 16;
|
|
101
|
+
const isName = (key: string): key is Name => Object.hasOwn(breakpoints, key);
|
|
102
|
+
const names = Object.keys(breakpoints).filter(isName);
|
|
103
|
+
names.sort(
|
|
104
|
+
(left, right) =>
|
|
105
|
+
toPixels(breakpoints[left], rootFontSize) - toPixels(breakpoints[right], rootFontSize),
|
|
106
|
+
);
|
|
107
|
+
const cache = new Map<string, Readonly<Ref<boolean>>>();
|
|
108
|
+
|
|
109
|
+
const query = (feature: "min-width" | "max-width", pixels: number): Readonly<Ref<boolean>> => {
|
|
110
|
+
const text = `(${feature}: ${pixels}px)`;
|
|
111
|
+
const cached = cache.get(text);
|
|
112
|
+
if (cached) return cached;
|
|
113
|
+
const ssrWidth = options.ssrWidth;
|
|
114
|
+
const ssrValue =
|
|
115
|
+
ssrWidth === undefined
|
|
116
|
+
? false
|
|
117
|
+
: feature === "min-width"
|
|
118
|
+
? ssrWidth >= pixels
|
|
119
|
+
: ssrWidth <= pixels;
|
|
120
|
+
const matches = useMediaQuery(
|
|
121
|
+
text,
|
|
122
|
+
options.host === undefined ? { ssrValue } : { ssrValue, host: options.host },
|
|
123
|
+
);
|
|
124
|
+
cache.set(text, matches);
|
|
125
|
+
return matches;
|
|
126
|
+
};
|
|
127
|
+
const px = (name: Name): number => toPixels(breakpoints[name], rootFontSize);
|
|
128
|
+
const greaterOrEqual = (name: Name): Readonly<Ref<boolean>> => query("min-width", px(name));
|
|
129
|
+
const greater = (name: Name): Readonly<Ref<boolean>> => query("min-width", px(name) + 0.02);
|
|
130
|
+
const smaller = (name: Name): Readonly<Ref<boolean>> => query("max-width", px(name) - 0.02);
|
|
131
|
+
const smallerOrEqual = (name: Name): Readonly<Ref<boolean>> => query("max-width", px(name));
|
|
132
|
+
|
|
133
|
+
// Every key is assigned by the loop below before the record is read.
|
|
134
|
+
const perName = {} as Record<Name, Readonly<Ref<boolean>>>;
|
|
135
|
+
for (const name of names) perName[name] = greaterOrEqual(name);
|
|
136
|
+
const current = computed<readonly Name[]>(() => names.filter((name) => perName[name].value));
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
...perName,
|
|
140
|
+
greaterOrEqual,
|
|
141
|
+
greater,
|
|
142
|
+
smaller,
|
|
143
|
+
smallerOrEqual,
|
|
144
|
+
between: (lower, upper) => {
|
|
145
|
+
const above = greaterOrEqual(lower);
|
|
146
|
+
const below = smaller(upper);
|
|
147
|
+
return computed(() => above.value && below.value);
|
|
148
|
+
},
|
|
149
|
+
current,
|
|
150
|
+
active: computed(() => current.value.at(-1) ?? null),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Convert a {@link BreakpointValue} to CSS pixels.
|
|
156
|
+
*
|
|
157
|
+
* @param value Number of pixels or a `px`/`rem`/`em` length.
|
|
158
|
+
* @param rootFontSize Pixels per `rem`/`em`.
|
|
159
|
+
* @default rootFontSize 16
|
|
160
|
+
* @returns Width in CSS pixels.
|
|
161
|
+
*/
|
|
162
|
+
export function toPixels(value: BreakpointValue, rootFontSize = 16): number {
|
|
163
|
+
if (typeof value === "number") return value;
|
|
164
|
+
const amount = Number.parseFloat(value);
|
|
165
|
+
return value.endsWith("px") ? amount : amount * rootFontSize;
|
|
166
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/** Runtime families understood by composable capability metadata and adapters. */
|
|
2
|
+
export type CapabilityTarget = "web" | "server" | "worker" | "native" | "desktop" | "terminal";
|
|
3
|
+
|
|
4
|
+
/** Built-in origins from which a capability value can be resolved. */
|
|
5
|
+
export type CapabilitySource = "runtime" | "adapter" | "fallback";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Standard reasons why a capability cannot currently provide a value.
|
|
9
|
+
*
|
|
10
|
+
* Adapters may extend this vocabulary with a narrower string-literal union;
|
|
11
|
+
* consumers should preserve unknown extension reasons when crossing process
|
|
12
|
+
* or version boundaries.
|
|
13
|
+
*/
|
|
14
|
+
export type CapabilityUnavailableReason =
|
|
15
|
+
| "unsupported"
|
|
16
|
+
| "unavailable"
|
|
17
|
+
| "permission-denied"
|
|
18
|
+
| "insecure-context"
|
|
19
|
+
| "not-active"
|
|
20
|
+
| "not-ready"
|
|
21
|
+
| "cancelled"
|
|
22
|
+
| "adapter-missing"
|
|
23
|
+
| "adapter-error";
|
|
24
|
+
|
|
25
|
+
/** A capability value that is ready for use. */
|
|
26
|
+
export interface AvailableCapability<Value, Source extends string = CapabilitySource> {
|
|
27
|
+
/** Stable discriminant for serialization and exhaustive matching. */
|
|
28
|
+
readonly status: "available";
|
|
29
|
+
|
|
30
|
+
/** Boolean discriminant for ergonomic guards in templates and JavaScript. */
|
|
31
|
+
readonly available: true;
|
|
32
|
+
|
|
33
|
+
/** Resolved capability implementation or value. */
|
|
34
|
+
readonly value: Value;
|
|
35
|
+
|
|
36
|
+
/** Origin that supplied the value, preserved as a string literal. */
|
|
37
|
+
readonly source: Source;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** A capability that cannot currently provide a value. */
|
|
41
|
+
export interface UnavailableCapability<
|
|
42
|
+
Reason extends string = CapabilityUnavailableReason,
|
|
43
|
+
Details = undefined,
|
|
44
|
+
> {
|
|
45
|
+
/** Stable discriminant for serialization and exhaustive matching. */
|
|
46
|
+
readonly status: "unavailable";
|
|
47
|
+
|
|
48
|
+
/** Boolean discriminant for ergonomic guards in templates and JavaScript. */
|
|
49
|
+
readonly available: false;
|
|
50
|
+
|
|
51
|
+
/** Typed, machine-readable explanation of the unavailable state. */
|
|
52
|
+
readonly reason: Reason;
|
|
53
|
+
|
|
54
|
+
/** Structured diagnostic or recovery information supplied by the adapter. */
|
|
55
|
+
readonly details: Details;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Explicit result of capability discovery or adapter negotiation. */
|
|
59
|
+
export type CapabilityResult<
|
|
60
|
+
Value,
|
|
61
|
+
Reason extends string = CapabilityUnavailableReason,
|
|
62
|
+
Details = undefined,
|
|
63
|
+
Source extends string = CapabilitySource,
|
|
64
|
+
> = AvailableCapability<Value, Source> | UnavailableCapability<Reason, Details>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Create an available capability supplied directly by the current runtime.
|
|
68
|
+
*
|
|
69
|
+
* The value and source retain literal types. The helper performs no global
|
|
70
|
+
* access and is safe during server rendering and module evaluation.
|
|
71
|
+
*
|
|
72
|
+
* @param value Resolved capability implementation or value.
|
|
73
|
+
* @returns An available result whose source is `"runtime"`.
|
|
74
|
+
*/
|
|
75
|
+
export function availableCapability<const Value>(
|
|
76
|
+
value: Value,
|
|
77
|
+
): AvailableCapability<Value, "runtime">;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create an available capability with an explicit, literal-preserving source.
|
|
81
|
+
*
|
|
82
|
+
* @param value Resolved capability implementation or value.
|
|
83
|
+
* @param source Runtime, adapter, fallback, or adapter-specific source name.
|
|
84
|
+
* @returns An available capability result.
|
|
85
|
+
*/
|
|
86
|
+
export function availableCapability<const Value, const Source extends string>(
|
|
87
|
+
value: Value,
|
|
88
|
+
source: Source,
|
|
89
|
+
): AvailableCapability<Value, Source>;
|
|
90
|
+
|
|
91
|
+
export function availableCapability<const Value, const Source extends string>(
|
|
92
|
+
value: Value,
|
|
93
|
+
source?: Source,
|
|
94
|
+
): AvailableCapability<Value, Source | "runtime"> {
|
|
95
|
+
return {
|
|
96
|
+
status: "available",
|
|
97
|
+
available: true,
|
|
98
|
+
value,
|
|
99
|
+
source: source ?? "runtime",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Create an unavailable capability without additional details.
|
|
105
|
+
*
|
|
106
|
+
* The reason retains its string-literal type. Capability absence is returned
|
|
107
|
+
* as data rather than thrown, making unsupported server, worker, native,
|
|
108
|
+
* desktop, and terminal environments deterministic.
|
|
109
|
+
*
|
|
110
|
+
* @param reason Machine-readable unavailability reason.
|
|
111
|
+
* @returns An unavailable result with `undefined` details.
|
|
112
|
+
*/
|
|
113
|
+
export function unavailableCapability<const Reason extends string>(
|
|
114
|
+
reason: Reason,
|
|
115
|
+
): UnavailableCapability<Reason, undefined>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Create an unavailable capability with typed recovery or diagnostic details.
|
|
119
|
+
*
|
|
120
|
+
* Passing `undefined` explicitly is distinct at the call boundary and still
|
|
121
|
+
* preserves the exact `undefined` details type.
|
|
122
|
+
*
|
|
123
|
+
* @param reason Machine-readable unavailability reason.
|
|
124
|
+
* @param details Structured diagnostic or recovery information.
|
|
125
|
+
* @returns An unavailable capability result.
|
|
126
|
+
*/
|
|
127
|
+
export function unavailableCapability<const Reason extends string, const Details>(
|
|
128
|
+
reason: Reason,
|
|
129
|
+
details: Details,
|
|
130
|
+
): UnavailableCapability<Reason, Details>;
|
|
131
|
+
|
|
132
|
+
export function unavailableCapability<const Reason extends string, const Details>(
|
|
133
|
+
reason: Reason,
|
|
134
|
+
details?: Details,
|
|
135
|
+
): UnavailableCapability<Reason, Details | undefined> {
|
|
136
|
+
return {
|
|
137
|
+
status: "unavailable",
|
|
138
|
+
available: false,
|
|
139
|
+
reason,
|
|
140
|
+
details,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Narrow a capability result to its available branch.
|
|
146
|
+
*
|
|
147
|
+
* @param result Capability discovery or negotiation result.
|
|
148
|
+
* @returns Whether `result.value` is ready for use.
|
|
149
|
+
*/
|
|
150
|
+
export function isCapabilityAvailable<Value, Reason extends string, Details, Source extends string>(
|
|
151
|
+
result: CapabilityResult<Value, Reason, Details, Source>,
|
|
152
|
+
): result is AvailableCapability<Value, Source> {
|
|
153
|
+
return result.available;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Narrow a capability result to its unavailable branch.
|
|
158
|
+
*
|
|
159
|
+
* @param result Capability discovery or negotiation result.
|
|
160
|
+
* @returns Whether the capability has a typed unavailability reason.
|
|
161
|
+
*/
|
|
162
|
+
export function isCapabilityUnavailable<
|
|
163
|
+
Value,
|
|
164
|
+
Reason extends string,
|
|
165
|
+
Details,
|
|
166
|
+
Source extends string,
|
|
167
|
+
>(
|
|
168
|
+
result: CapabilityResult<Value, Reason, Details, Source>,
|
|
169
|
+
): result is UnavailableCapability<Reason, Details> {
|
|
170
|
+
return !result.available;
|
|
171
|
+
}
|