@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,409 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
hasInjectionContext,
|
|
4
|
+
readonly,
|
|
5
|
+
shallowRef,
|
|
6
|
+
toValue,
|
|
7
|
+
watch,
|
|
8
|
+
watchPostEffect,
|
|
9
|
+
} from "vue";
|
|
10
|
+
import type { ComputedRef, MaybeRef, MaybeRefOrGetter, ShallowRef } from "vue";
|
|
11
|
+
|
|
12
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
13
|
+
import { usePerformanceObserver } from "./use-performance-observer.ts";
|
|
14
|
+
import type {
|
|
15
|
+
EventTimingFieldsLike,
|
|
16
|
+
LayoutShiftEntryLike,
|
|
17
|
+
PerformanceObserverHost,
|
|
18
|
+
} from "./use-performance-observer.ts";
|
|
19
|
+
|
|
20
|
+
/** Core Web Vitals and supporting metrics computed by {@link useWebVitals}. */
|
|
21
|
+
export type WebVitalName = "LCP" | "CLS" | "INP" | "FCP" | "TTFB";
|
|
22
|
+
|
|
23
|
+
/** Rating bucket of a metric value. */
|
|
24
|
+
export type WebVitalRating = "good" | "needs-improvement" | "poor";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Standard `[good, poor]` thresholds: values up to the first bound are
|
|
28
|
+
* "good", values above the second are "poor". Times are milliseconds; CLS is
|
|
29
|
+
* unitless.
|
|
30
|
+
*/
|
|
31
|
+
export const WEB_VITALS_THRESHOLDS = {
|
|
32
|
+
LCP: [2500, 4000],
|
|
33
|
+
CLS: [0.1, 0.25],
|
|
34
|
+
INP: [200, 500],
|
|
35
|
+
FCP: [1800, 3000],
|
|
36
|
+
TTFB: [800, 1800],
|
|
37
|
+
} as const satisfies Readonly<Record<WebVitalName, readonly [number, number]>>;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Rate a metric value with {@link WEB_VITALS_THRESHOLDS}.
|
|
41
|
+
*
|
|
42
|
+
* @param name Metric name.
|
|
43
|
+
* @param value Metric value (milliseconds, or the unitless CLS score).
|
|
44
|
+
* @returns The rating bucket.
|
|
45
|
+
*/
|
|
46
|
+
export function rateMetric(name: WebVitalName, value: number): WebVitalRating {
|
|
47
|
+
if (Number.isNaN(value)) {
|
|
48
|
+
throw new RangeError(`[VIZE_COMPOSE_WEB_VITALS_INVALID_VALUE] ${name} value must be a number`);
|
|
49
|
+
}
|
|
50
|
+
const [good, poor] = WEB_VITALS_THRESHOLDS[name];
|
|
51
|
+
if (value > poor) return "poor";
|
|
52
|
+
return value > good ? "needs-improvement" : "good";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Snapshot of one metric. */
|
|
56
|
+
export interface WebVitalMetric {
|
|
57
|
+
/** Metric name. */
|
|
58
|
+
readonly name: WebVitalName;
|
|
59
|
+
/** Current value (milliseconds, or the unitless CLS score). */
|
|
60
|
+
readonly value: number;
|
|
61
|
+
/** Rating of `value`. */
|
|
62
|
+
readonly rating: WebVitalRating;
|
|
63
|
+
/** Change since the value last reported through `onMetric` (the full value before that). */
|
|
64
|
+
readonly delta: number;
|
|
65
|
+
/** Number of performance entries that make up `value`. */
|
|
66
|
+
readonly entries: number;
|
|
67
|
+
/** Identifier stable for this metric during the page load. */
|
|
68
|
+
readonly id?: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Metrics measured so far; a metric is absent until it has a value. */
|
|
72
|
+
export type WebVitalsRecord = Readonly<Partial<Record<WebVitalName, WebVitalMetric>>>;
|
|
73
|
+
|
|
74
|
+
/** Document events used by {@link useWebVitals}. */
|
|
75
|
+
export type WebVitalsDocumentEvent = "visibilitychange" | "keydown" | "click";
|
|
76
|
+
|
|
77
|
+
/** Minimal document consumed by {@link useWebVitals}. */
|
|
78
|
+
export interface WebVitalsDocumentHost {
|
|
79
|
+
/** Current visibility (`"visible"` or `"hidden"`). */
|
|
80
|
+
readonly visibilityState: string;
|
|
81
|
+
/** Subscribe to a document event. */
|
|
82
|
+
addEventListener(
|
|
83
|
+
type: WebVitalsDocumentEvent,
|
|
84
|
+
listener: (event: { readonly timeStamp: number }) => void,
|
|
85
|
+
options?: { readonly capture?: boolean },
|
|
86
|
+
): void;
|
|
87
|
+
/** Unsubscribe from a document event. */
|
|
88
|
+
removeEventListener(
|
|
89
|
+
type: WebVitalsDocumentEvent,
|
|
90
|
+
listener: (event: { readonly timeStamp: number }) => void,
|
|
91
|
+
options?: { readonly capture?: boolean },
|
|
92
|
+
): void;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Options for {@link useWebVitals}. */
|
|
96
|
+
export interface UseWebVitalsOptions {
|
|
97
|
+
/**
|
|
98
|
+
* `PerformanceObserver` constructor for alternate runtimes and tests.
|
|
99
|
+
*
|
|
100
|
+
* @default window.PerformanceObserver when it exists
|
|
101
|
+
*/
|
|
102
|
+
readonly PerformanceObserver?: MaybeRef<PerformanceObserverHost | null | undefined>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Document whose visibility finalizes metrics and whose first input stops LCP.
|
|
106
|
+
*
|
|
107
|
+
* @default window.document when available
|
|
108
|
+
*/
|
|
109
|
+
readonly document?: MaybeRefOrGetter<WebVitalsDocumentHost | null | undefined>;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Report every change through `onMetric` instead of only final values.
|
|
113
|
+
*
|
|
114
|
+
* @default false
|
|
115
|
+
*/
|
|
116
|
+
readonly reportAllChanges?: boolean;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Minimum Event Timing duration considered for INP, in milliseconds.
|
|
120
|
+
*
|
|
121
|
+
* @default 40
|
|
122
|
+
*/
|
|
123
|
+
readonly durationThreshold?: number;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Reactive state and actions returned by {@link useWebVitals}. */
|
|
127
|
+
export interface WebVitalsControls {
|
|
128
|
+
/** Whether at least one metric can be observed. */
|
|
129
|
+
readonly supported: ComputedRef<boolean>;
|
|
130
|
+
|
|
131
|
+
/** Metrics measured so far, replaced on each change. */
|
|
132
|
+
readonly metrics: Readonly<ShallowRef<WebVitalsRecord>>;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Subscribe to reported metrics. FCP and TTFB are reported once measured;
|
|
136
|
+
* LCP once finalized (first input or hidden page); CLS and INP whenever
|
|
137
|
+
* the page becomes hidden with a changed value. With `reportAllChanges`,
|
|
138
|
+
* every change is reported.
|
|
139
|
+
*
|
|
140
|
+
* @param listener Receives each reported metric.
|
|
141
|
+
* @returns Removes the listener.
|
|
142
|
+
*/
|
|
143
|
+
readonly onMetric: (listener: (metric: WebVitalMetric) => void) => () => void;
|
|
144
|
+
|
|
145
|
+
/** Stop every observer and listener. Repeated calls are safe. */
|
|
146
|
+
readonly stop: () => void;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
interface Interaction {
|
|
150
|
+
readonly id: number;
|
|
151
|
+
duration: number;
|
|
152
|
+
entries: number;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const MAX_INTERACTIONS = 10;
|
|
156
|
+
|
|
157
|
+
function browserDocument(): WebVitalsDocumentHost | undefined {
|
|
158
|
+
return typeof window === "undefined" ? undefined : window.document;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Measure LCP, CLS, INP, FCP and TTFB locally, without dependencies.
|
|
163
|
+
*
|
|
164
|
+
* - LCP: last candidate before the first input or hidden page.
|
|
165
|
+
* - CLS: largest session window (shifts < 1 s apart, window ≤ 5 s),
|
|
166
|
+
* ignoring shifts after recent input.
|
|
167
|
+
* - INP: per-interaction maximum duration; the highest after ignoring one
|
|
168
|
+
* per 50 interactions (a p98 approximation over the 10 longest). The
|
|
169
|
+
* interaction count only includes interactions above `durationThreshold`.
|
|
170
|
+
* - FCP: `first-contentful-paint` before the page was first hidden.
|
|
171
|
+
* - TTFB: navigation `responseStart - activationStart`, clamped at 0.
|
|
172
|
+
*
|
|
173
|
+
* Values are not adjusted for prerender activation except TTFB. Observers
|
|
174
|
+
* and listeners are released when the owning reactive scope stops; outside
|
|
175
|
+
* a scope the caller owns `stop()`.
|
|
176
|
+
*
|
|
177
|
+
* Server rendering: nothing is observed, `metrics` is `{}` and `supported`
|
|
178
|
+
* is false.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* const { metrics, onMetric } = useWebVitals();
|
|
183
|
+
* onMetric((metric) => navigator.sendBeacon("/vitals", JSON.stringify(metric)));
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* @param options Hosts and reporting policy.
|
|
187
|
+
* @default options {}
|
|
188
|
+
* @returns Reactive metrics and a report hook.
|
|
189
|
+
*/
|
|
190
|
+
export function useWebVitals(options: UseWebVitalsOptions = {}): WebVitalsControls {
|
|
191
|
+
const metrics = shallowRef<WebVitalsRecord>({});
|
|
192
|
+
const reported = new Map<WebVitalName, number>();
|
|
193
|
+
const listeners = new Set<(metric: WebVitalMetric) => void>();
|
|
194
|
+
const reportAllChanges = options.reportAllChanges ?? false;
|
|
195
|
+
const observerOptions =
|
|
196
|
+
options.PerformanceObserver === undefined
|
|
197
|
+
? { buffered: true }
|
|
198
|
+
: { buffered: true, PerformanceObserver: options.PerformanceObserver };
|
|
199
|
+
let pageId: string | undefined;
|
|
200
|
+
|
|
201
|
+
// Inside a component the host resolves only after mount (a post-flush
|
|
202
|
+
// job), so a hydrating client first renders the same unsupported state as
|
|
203
|
+
// the server. Outside components it resolves immediately.
|
|
204
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
205
|
+
if (!hydrated.value) {
|
|
206
|
+
watchPostEffect(() => {
|
|
207
|
+
hydrated.value = true;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
const resolveDocument = (): WebVitalsDocumentHost | undefined =>
|
|
211
|
+
!hydrated.value
|
|
212
|
+
? undefined
|
|
213
|
+
: options.document === undefined
|
|
214
|
+
? browserDocument()
|
|
215
|
+
: (toValue(options.document) ?? undefined);
|
|
216
|
+
|
|
217
|
+
const report = (name: WebVitalName): void => {
|
|
218
|
+
const metric = metrics.value[name];
|
|
219
|
+
if (!metric || reported.get(name) === metric.value) return;
|
|
220
|
+
reported.set(name, metric.value);
|
|
221
|
+
for (const listener of listeners) listener(metric);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const set = (name: WebVitalName, value: number, entries: number): void => {
|
|
225
|
+
pageId ??= `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
226
|
+
const metric: WebVitalMetric = {
|
|
227
|
+
name,
|
|
228
|
+
value,
|
|
229
|
+
rating: rateMetric(name, value),
|
|
230
|
+
delta: value - (reported.get(name) ?? 0),
|
|
231
|
+
entries,
|
|
232
|
+
id: `${name}-${pageId}`,
|
|
233
|
+
};
|
|
234
|
+
metrics.value = { ...metrics.value, [name]: metric };
|
|
235
|
+
if (reportAllChanges) report(name);
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
let firstHiddenTime = resolveDocument()?.visibilityState === "hidden" ? 0 : Infinity;
|
|
239
|
+
|
|
240
|
+
// LCP
|
|
241
|
+
let lcpFinal = false;
|
|
242
|
+
const lcp = usePerformanceObserver(
|
|
243
|
+
"largest-contentful-paint",
|
|
244
|
+
(entries) => {
|
|
245
|
+
if (lcpFinal) return;
|
|
246
|
+
const last = entries.filter((entry) => entry.startTime < firstHiddenTime).at(-1);
|
|
247
|
+
if (last) set("LCP", Math.max(last.startTime, 0), 1);
|
|
248
|
+
},
|
|
249
|
+
observerOptions,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
// CLS
|
|
253
|
+
let sessionValue = 0;
|
|
254
|
+
let session: LayoutShiftEntryLike[] = [];
|
|
255
|
+
const handleShifts = (entries: readonly LayoutShiftEntryLike[]): void => {
|
|
256
|
+
for (const entry of entries) {
|
|
257
|
+
if (entry.hadRecentInput) continue;
|
|
258
|
+
const first = session[0];
|
|
259
|
+
const last = session.at(-1);
|
|
260
|
+
if (
|
|
261
|
+
first &&
|
|
262
|
+
last &&
|
|
263
|
+
entry.startTime - last.startTime < 1000 &&
|
|
264
|
+
entry.startTime - first.startTime < 5000
|
|
265
|
+
) {
|
|
266
|
+
sessionValue += entry.value;
|
|
267
|
+
session.push(entry);
|
|
268
|
+
} else {
|
|
269
|
+
sessionValue = entry.value;
|
|
270
|
+
session = [entry];
|
|
271
|
+
}
|
|
272
|
+
if (sessionValue > (metrics.value.CLS?.value ?? 0)) set("CLS", sessionValue, session.length);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
const cls = usePerformanceObserver("layout-shift", handleShifts, observerOptions);
|
|
276
|
+
|
|
277
|
+
// INP
|
|
278
|
+
const longest: Interaction[] = [];
|
|
279
|
+
let interactionCount = 0;
|
|
280
|
+
let previousInteractionId = 0;
|
|
281
|
+
const handleEvents = (entries: readonly EventTimingFieldsLike[]): void => {
|
|
282
|
+
let changed = false;
|
|
283
|
+
for (const entry of entries) {
|
|
284
|
+
const id = entry.interactionId ?? 0;
|
|
285
|
+
if (id === 0) continue;
|
|
286
|
+
const existing = longest.find((interaction) => interaction.id === id);
|
|
287
|
+
if (existing) {
|
|
288
|
+
existing.entries += 1;
|
|
289
|
+
existing.duration = Math.max(existing.duration, entry.duration);
|
|
290
|
+
} else {
|
|
291
|
+
if (id !== previousInteractionId) interactionCount += 1;
|
|
292
|
+
longest.push({ id, duration: entry.duration, entries: 1 });
|
|
293
|
+
}
|
|
294
|
+
previousInteractionId = id;
|
|
295
|
+
changed = true;
|
|
296
|
+
}
|
|
297
|
+
if (!changed) return;
|
|
298
|
+
longest.sort((left, right) => right.duration - left.duration);
|
|
299
|
+
longest.splice(MAX_INTERACTIONS);
|
|
300
|
+
const candidate =
|
|
301
|
+
longest[Math.min(longest.length - 1, Math.floor(interactionCount / 50))] ?? longest[0];
|
|
302
|
+
if (candidate) set("INP", candidate.duration, candidate.entries);
|
|
303
|
+
};
|
|
304
|
+
const inp = usePerformanceObserver(["event", "first-input"], handleEvents, {
|
|
305
|
+
...observerOptions,
|
|
306
|
+
durationThreshold: options.durationThreshold ?? 40,
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// FCP
|
|
310
|
+
const fcp = usePerformanceObserver(
|
|
311
|
+
"paint",
|
|
312
|
+
(entries) => {
|
|
313
|
+
const entry = entries.find(
|
|
314
|
+
(paint) => paint.name === "first-contentful-paint" && paint.startTime < firstHiddenTime,
|
|
315
|
+
);
|
|
316
|
+
if (!entry) return;
|
|
317
|
+
fcp.stop();
|
|
318
|
+
set("FCP", Math.max(entry.startTime, 0), 1);
|
|
319
|
+
report("FCP");
|
|
320
|
+
},
|
|
321
|
+
observerOptions,
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
// TTFB
|
|
325
|
+
const ttfb = usePerformanceObserver(
|
|
326
|
+
"navigation",
|
|
327
|
+
(entries) => {
|
|
328
|
+
const entry = entries[0];
|
|
329
|
+
if (!entry) return;
|
|
330
|
+
ttfb.stop();
|
|
331
|
+
set("TTFB", Math.max(entry.responseStart - (entry.activationStart ?? 0), 0), 1);
|
|
332
|
+
report("TTFB");
|
|
333
|
+
},
|
|
334
|
+
observerOptions,
|
|
335
|
+
);
|
|
336
|
+
|
|
337
|
+
const finalizeLcp = (): void => {
|
|
338
|
+
if (lcpFinal) return;
|
|
339
|
+
const pending = lcp.takeRecords().filter((entry) => entry.startTime < firstHiddenTime);
|
|
340
|
+
const last = pending.at(-1);
|
|
341
|
+
if (last) set("LCP", Math.max(last.startTime, 0), 1);
|
|
342
|
+
lcpFinal = true;
|
|
343
|
+
lcp.stop();
|
|
344
|
+
report("LCP");
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
const onHidden = (timeStamp: number): void => {
|
|
348
|
+
firstHiddenTime = Math.min(firstHiddenTime, timeStamp);
|
|
349
|
+
finalizeLcp();
|
|
350
|
+
handleShifts(cls.takeRecords());
|
|
351
|
+
handleEvents(inp.takeRecords());
|
|
352
|
+
if (!metrics.value.CLS && cls.supported.value) set("CLS", 0, 0);
|
|
353
|
+
report("CLS");
|
|
354
|
+
report("INP");
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
const stopDocument = watch(
|
|
358
|
+
resolveDocument,
|
|
359
|
+
(document, _previous, onCleanup) => {
|
|
360
|
+
if (!document) return;
|
|
361
|
+
const onVisibility = (event: { readonly timeStamp: number }): void => {
|
|
362
|
+
if (document.visibilityState === "hidden") onHidden(event.timeStamp);
|
|
363
|
+
};
|
|
364
|
+
const onInput = (): void => {
|
|
365
|
+
finalizeLcp();
|
|
366
|
+
removeInput();
|
|
367
|
+
};
|
|
368
|
+
const removeInput = (): void => {
|
|
369
|
+
document.removeEventListener("keydown", onInput, { capture: true });
|
|
370
|
+
document.removeEventListener("click", onInput, { capture: true });
|
|
371
|
+
};
|
|
372
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
373
|
+
if (!lcpFinal) {
|
|
374
|
+
document.addEventListener("keydown", onInput, { capture: true });
|
|
375
|
+
document.addEventListener("click", onInput, { capture: true });
|
|
376
|
+
}
|
|
377
|
+
onCleanup(() => {
|
|
378
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
379
|
+
removeInput();
|
|
380
|
+
});
|
|
381
|
+
},
|
|
382
|
+
{ immediate: true, flush: "sync" },
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
const stop = (): void => {
|
|
386
|
+
stopDocument();
|
|
387
|
+
for (const observer of [lcp, cls, inp, fcp, ttfb]) observer.stop();
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
tryOnScopeDispose(() => {
|
|
391
|
+
stop();
|
|
392
|
+
listeners.clear();
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
return {
|
|
396
|
+
supported: computed(
|
|
397
|
+
() =>
|
|
398
|
+
hydrated.value && [lcp, cls, inp, fcp, ttfb].some((observer) => observer.supported.value),
|
|
399
|
+
),
|
|
400
|
+
metrics: readonly(metrics),
|
|
401
|
+
onMetric: (listener) => {
|
|
402
|
+
listeners.add(listener);
|
|
403
|
+
return () => {
|
|
404
|
+
listeners.delete(listener);
|
|
405
|
+
};
|
|
406
|
+
},
|
|
407
|
+
stop,
|
|
408
|
+
};
|
|
409
|
+
}
|