@vizejs/composable 0.426.3 → 0.427.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-signal.d.mts +1 -1
- package/dist/active-element.d.mts +37 -0
- package/dist/active-element.mjs +56 -0
- package/dist/animate.d.mts +114 -0
- package/dist/animate.mjs +157 -0
- package/dist/battery.d.mts +61 -0
- package/dist/battery.mjs +90 -0
- package/dist/breakpoints.d.mts +82 -0
- package/dist/breakpoints.mjs +91 -0
- package/dist/catalog-BeTXFKxF.d.mts +4188 -0
- package/dist/catalog-r4Z5nptX.mjs +5144 -0
- package/dist/catalog.d.mts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/color-mode.d.mts +131 -0
- package/dist/color-mode.mjs +133 -0
- package/dist/computed-async.d.mts +63 -0
- package/dist/computed-async.mjs +43 -0
- package/dist/computed-with-control.d.mts +44 -0
- package/dist/computed-with-control.mjs +54 -0
- package/dist/create-event-hook.d.mts +77 -0
- package/dist/create-event-hook.mjs +66 -0
- package/dist/create-global-state.d.mts +24 -0
- package/dist/create-global-state.mjs +34 -0
- package/dist/create-injection-state.d.mts +51 -0
- package/dist/create-injection-state.mjs +19 -0
- package/dist/create-shared-composable.d.mts +38 -0
- package/dist/create-shared-composable.mjs +54 -0
- package/dist/device-motion.d.mts +71 -0
- package/dist/device-motion.mjs +75 -0
- package/dist/device-orientation.d.mts +82 -0
- package/dist/device-orientation.mjs +86 -0
- package/dist/device-pixel-ratio.d.mts +45 -0
- package/dist/device-pixel-ratio.mjs +50 -0
- package/dist/document-visibility.mjs +6 -2
- package/dist/draggable.d.mts +121 -0
- package/dist/draggable.mjs +153 -0
- package/dist/element-bounding.d.mts +87 -0
- package/dist/element-bounding.mjs +95 -0
- package/dist/element-by-point.d.mts +70 -0
- package/dist/element-by-point.mjs +69 -0
- package/dist/element-hover.d.mts +42 -0
- package/dist/element-hover.mjs +70 -0
- package/dist/element-ref.d.mts +34 -0
- package/dist/element-ref.mjs +23 -0
- package/dist/element-target-Crpxl4D9.d.mts +60 -0
- package/dist/element-target.d.mts +2 -0
- package/dist/element-target.mjs +58 -0
- package/dist/event-listener.mjs +7 -3
- package/dist/focus.d.mts +69 -0
- package/dist/focus.mjs +124 -0
- package/dist/fps.d.mts +59 -0
- package/dist/fps.mjs +64 -0
- package/dist/geolocation.d.mts +98 -0
- package/dist/geolocation.mjs +86 -0
- package/dist/i18n.d.mts +237 -0
- package/dist/i18n.mjs +215 -0
- package/dist/icu-message.d.mts +235 -0
- package/dist/icu-message.mjs +343 -0
- package/dist/idle.d.mts +79 -0
- package/dist/idle.mjs +90 -0
- package/dist/index.d.mts +172 -6
- package/dist/index.mjs +173 -7
- package/dist/infinite-scroll.d.mts +56 -0
- package/dist/infinite-scroll.mjs +72 -0
- package/dist/intersection-observer.d.mts +122 -0
- package/dist/intersection-observer.mjs +117 -0
- package/dist/magic-keys.d.mts +121 -0
- package/dist/magic-keys.mjs +163 -0
- package/dist/math.d.mts +96 -0
- package/dist/math.mjs +84 -0
- package/dist/media-query.d.mts +3 -1
- package/dist/media-query.mjs +5 -3
- package/dist/mouse-in-element.d.mts +49 -0
- package/dist/mouse-in-element.mjs +66 -0
- package/dist/mouse.d.mts +77 -0
- package/dist/mouse.mjs +100 -0
- package/dist/mutation-observer.d.mts +98 -0
- package/dist/mutation-observer.mjs +69 -0
- package/dist/network.d.mts +96 -0
- package/dist/network.mjs +117 -0
- package/dist/on-click-outside.d.mts +69 -0
- package/dist/on-click-outside.mjs +115 -0
- package/dist/on-key-stroke.d.mts +71 -0
- package/dist/on-key-stroke.mjs +79 -0
- package/dist/on-long-press.d.mts +82 -0
- package/dist/on-long-press.mjs +105 -0
- package/dist/on-start-typing.d.mts +44 -0
- package/dist/on-start-typing.mjs +61 -0
- package/dist/page-leave.d.mts +26 -0
- package/dist/page-leave.mjs +40 -0
- package/dist/parent-element.d.mts +16 -0
- package/dist/parent-element.mjs +27 -0
- package/dist/pinch.d.mts +73 -0
- package/dist/pinch.mjs +138 -0
- package/dist/pointer-lock.d.mts +79 -0
- package/dist/pointer-lock.mjs +126 -0
- package/dist/pointer.d.mts +78 -0
- package/dist/pointer.mjs +95 -0
- package/dist/preferences.d.mts +55 -0
- package/dist/preferences.mjs +63 -0
- package/dist/preferred-languages.d.mts +43 -0
- package/dist/preferred-languages.mjs +44 -0
- package/dist/reactify.d.mts +28 -0
- package/dist/reactify.mjs +7 -0
- package/dist/ref-auto-reset.d.mts +47 -0
- package/dist/ref-auto-reset.mjs +70 -0
- package/dist/ref-debounced.d.mts +29 -0
- package/dist/ref-debounced.mjs +29 -0
- package/dist/ref-default.d.mts +27 -0
- package/dist/ref-default.mjs +33 -0
- package/dist/resize-observer.d.mts +96 -0
- package/dist/resize-observer.mjs +111 -0
- package/dist/resolver.d.mts +124 -0
- package/dist/resolver.mjs +138 -0
- package/dist/retry-async.d.mts +2 -2
- package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
- package/dist/retry-delay.d.mts +1 -72
- package/dist/screen-orientation.d.mts +77 -0
- package/dist/screen-orientation.mjs +74 -0
- package/dist/scroll-lock.d.mts +37 -0
- package/dist/scroll-lock.mjs +50 -0
- package/dist/scroll.d.mts +158 -0
- package/dist/scroll.mjs +172 -0
- package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
- package/dist/standard-schema.d.mts +2 -0
- package/dist/standard-schema.mjs +60 -0
- package/dist/swipe.d.mts +125 -0
- package/dist/swipe.mjs +225 -0
- package/dist/sync-ref.d.mts +80 -0
- package/dist/sync-ref.mjs +43 -0
- package/dist/text-selection.d.mts +46 -0
- package/dist/text-selection.mjs +62 -0
- package/dist/textarea-autosize.d.mts +58 -0
- package/dist/textarea-autosize.mjs +54 -0
- package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
- package/dist/timeout-scheduler.d.mts +1 -17
- package/dist/to-reactive.d.mts +26 -0
- package/dist/to-reactive.mjs +46 -0
- package/dist/transition.d.mts +125 -0
- package/dist/transition.mjs +266 -0
- package/dist/until.d.mts +177 -0
- package/dist/until.mjs +111 -0
- package/dist/use-array.d.mts +112 -0
- package/dist/use-array.mjs +90 -0
- package/dist/use-async-queue.d.mts +109 -0
- package/dist/use-async-queue.mjs +96 -0
- package/dist/use-async-state.d.mts +86 -0
- package/dist/use-async-state.mjs +41 -0
- package/dist/use-barcode-detector.d.mts +159 -0
- package/dist/use-barcode-detector.mjs +143 -0
- package/dist/use-bluetooth.d.mts +164 -0
- package/dist/use-bluetooth.mjs +183 -0
- package/dist/use-broadcast-channel.d.mts +115 -0
- package/dist/use-broadcast-channel.mjs +121 -0
- package/dist/use-builtin-ai.d.mts +342 -0
- package/dist/use-builtin-ai.mjs +261 -0
- package/dist/use-clipboard.d.mts +169 -0
- package/dist/use-clipboard.mjs +226 -0
- package/dist/use-compression-stream.d.mts +173 -0
- package/dist/use-compression-stream.mjs +166 -0
- package/dist/use-confirm-dialog.d.mts +70 -0
- package/dist/use-confirm-dialog.mjs +57 -0
- package/dist/use-contact-picker.d.mts +117 -0
- package/dist/use-contact-picker.mjs +103 -0
- package/dist/use-cookie.d.mts +196 -0
- package/dist/use-cookie.mjs +259 -0
- package/dist/use-countdown.d.mts +85 -0
- package/dist/use-countdown.mjs +74 -0
- package/dist/use-css-var.d.mts +96 -0
- package/dist/use-css-var.mjs +104 -0
- package/dist/use-cycle-list.d.mts +76 -0
- package/dist/use-cycle-list.mjs +39 -0
- package/dist/use-date-format.d.mts +103 -0
- package/dist/use-date-format.mjs +147 -0
- package/dist/use-date-time-format.d.mts +75 -0
- package/dist/use-date-time-format.mjs +53 -0
- package/dist/use-debounced.d.mts +1 -1
- package/dist/use-display-media.d.mts +62 -0
- package/dist/use-display-media.mjs +46 -0
- package/dist/use-display-names.d.mts +75 -0
- package/dist/use-display-names.mjs +52 -0
- package/dist/use-document-title.d.mts +88 -0
- package/dist/use-document-title.mjs +100 -0
- package/dist/use-drop-zone.d.mts +128 -0
- package/dist/use-drop-zone.mjs +154 -0
- package/dist/use-event-source.d.mts +184 -0
- package/dist/use-event-source.mjs +226 -0
- package/dist/use-eye-dropper.d.mts +79 -0
- package/dist/use-eye-dropper.mjs +68 -0
- package/dist/use-favicon.d.mts +78 -0
- package/dist/use-favicon.mjs +68 -0
- package/dist/use-fetch.d.mts +230 -0
- package/dist/use-fetch.mjs +263 -0
- package/dist/use-field.d.mts +107 -0
- package/dist/use-field.mjs +117 -0
- package/dist/use-file-dialog.d.mts +139 -0
- package/dist/use-file-dialog.mjs +101 -0
- package/dist/use-file-system-access.d.mts +184 -0
- package/dist/use-file-system-access.mjs +151 -0
- package/dist/use-form-field-props.d.mts +235 -0
- package/dist/use-form-field-props.mjs +164 -0
- package/dist/use-form.d.mts +324 -0
- package/dist/use-form.mjs +482 -0
- package/dist/use-fullscreen.d.mts +104 -0
- package/dist/use-fullscreen.mjs +95 -0
- package/dist/use-gamepad.d.mts +242 -0
- package/dist/use-gamepad.mjs +218 -0
- package/dist/use-hid.d.mts +160 -0
- package/dist/use-hid.mjs +156 -0
- package/dist/use-id-generator.d.mts +44 -0
- package/dist/use-id-generator.mjs +38 -0
- package/dist/use-image.d.mts +125 -0
- package/dist/use-image.mjs +109 -0
- package/dist/use-indexed-db.d.mts +207 -0
- package/dist/use-indexed-db.mjs +251 -0
- package/dist/use-interval-BA55gTHT.d.mts +140 -0
- package/dist/use-interval.d.mts +2 -0
- package/dist/use-interval.mjs +100 -0
- package/dist/use-list-format.d.mts +60 -0
- package/dist/use-list-format.mjs +40 -0
- package/dist/use-machine.d.mts +90 -0
- package/dist/use-machine.mjs +78 -0
- package/dist/use-map.d.mts +90 -0
- package/dist/use-map.mjs +70 -0
- package/dist/use-media-controls.d.mts +198 -0
- package/dist/use-media-controls.mjs +264 -0
- package/dist/use-memoize.d.mts +73 -0
- package/dist/use-memoize.mjs +28 -0
- package/dist/use-mounted.d.mts +24 -0
- package/dist/use-mounted.mjs +29 -0
- package/dist/use-navigation-api.d.mts +360 -0
- package/dist/use-navigation-api.mjs +231 -0
- package/dist/use-notification.d.mts +139 -0
- package/dist/use-notification.mjs +131 -0
- package/dist/use-now.d.mts +137 -0
- package/dist/use-now.mjs +44 -0
- package/dist/use-number-format.d.mts +73 -0
- package/dist/use-number-format.mjs +58 -0
- package/dist/use-object-url.d.mts +47 -0
- package/dist/use-object-url.mjs +54 -0
- package/dist/use-offset-pagination.d.mts +91 -0
- package/dist/use-offset-pagination.mjs +80 -0
- package/dist/use-payment-request.d.mts +239 -0
- package/dist/use-payment-request.mjs +206 -0
- package/dist/use-performance-observer.d.mts +285 -0
- package/dist/use-performance-observer.mjs +132 -0
- package/dist/use-permission.d.mts +99 -0
- package/dist/use-permission.mjs +92 -0
- package/dist/use-plural-rules.d.mts +79 -0
- package/dist/use-plural-rules.mjs +59 -0
- package/dist/use-push-subscription.d.mts +154 -0
- package/dist/use-push-subscription.mjs +146 -0
- package/dist/use-queue.d.mts +89 -0
- package/dist/use-queue.mjs +116 -0
- package/dist/use-raf-fn.d.mts +87 -0
- package/dist/use-raf-fn.mjs +99 -0
- package/dist/use-relative-time-format.d.mts +111 -0
- package/dist/use-relative-time-format.mjs +119 -0
- package/dist/use-request-idle-callback.d.mts +122 -0
- package/dist/use-request-idle-callback.mjs +147 -0
- package/dist/use-route-query.d.mts +149 -0
- package/dist/use-route-query.mjs +86 -0
- package/dist/use-scheduler-post-task.d.mts +156 -0
- package/dist/use-scheduler-post-task.mjs +182 -0
- package/dist/use-screen-details.d.mts +205 -0
- package/dist/use-screen-details.mjs +188 -0
- package/dist/use-script-tag.d.mts +162 -0
- package/dist/use-script-tag.mjs +171 -0
- package/dist/use-segmenter.d.mts +78 -0
- package/dist/use-segmenter.mjs +66 -0
- package/dist/use-selection.d.mts +125 -0
- package/dist/use-selection.mjs +77 -0
- package/dist/use-serial.d.mts +165 -0
- package/dist/use-serial.mjs +205 -0
- package/dist/use-service-worker.d.mts +177 -0
- package/dist/use-service-worker.mjs +178 -0
- package/dist/use-set.d.mts +96 -0
- package/dist/use-set.mjs +74 -0
- package/dist/use-share.d.mts +92 -0
- package/dist/use-share.mjs +99 -0
- package/dist/use-sorted-locale.d.mts +62 -0
- package/dist/use-sorted-locale.mjs +52 -0
- package/dist/use-sorted.d.mts +29 -0
- package/dist/use-sorted.mjs +14 -0
- package/dist/use-speech-recognition.d.mts +150 -0
- package/dist/use-speech-recognition.mjs +168 -0
- package/dist/use-speech-synthesis.d.mts +148 -0
- package/dist/use-speech-synthesis.mjs +152 -0
- package/dist/use-stack.d.mts +83 -0
- package/dist/use-stack.mjs +93 -0
- package/dist/use-stepper.d.mts +79 -0
- package/dist/use-stepper.mjs +52 -0
- package/dist/use-storage-estimate.d.mts +151 -0
- package/dist/use-storage-estimate.mjs +170 -0
- package/dist/use-storage.d.mts +214 -0
- package/dist/use-storage.mjs +415 -0
- package/dist/use-style-tag.d.mts +102 -0
- package/dist/use-style-tag.mjs +91 -0
- package/dist/use-supported.d.mts +23 -0
- package/dist/use-supported.mjs +26 -0
- package/dist/use-throttled.d.mts +1 -1
- package/dist/use-time-ago.d.mts +163 -0
- package/dist/use-time-ago.mjs +95 -0
- package/dist/use-timeout.d.mts +122 -0
- package/dist/use-timeout.mjs +65 -0
- package/dist/use-url-hash.d.mts +88 -0
- package/dist/use-url-hash.mjs +145 -0
- package/dist/use-url-search-params.d.mts +223 -0
- package/dist/use-url-search-params.mjs +295 -0
- package/dist/use-usb.d.mts +212 -0
- package/dist/use-usb.mjs +137 -0
- package/dist/use-user-activation.d.mts +83 -0
- package/dist/use-user-activation.mjs +113 -0
- package/dist/use-user-media.d.mts +194 -0
- package/dist/use-user-media.mjs +214 -0
- package/dist/use-v-model.d.mts +113 -0
- package/dist/use-v-model.mjs +40 -0
- package/dist/use-vibrate.d.mts +81 -0
- package/dist/use-vibrate.mjs +90 -0
- package/dist/use-view-transition.d.mts +106 -0
- package/dist/use-view-transition.mjs +101 -0
- package/dist/use-visual-viewport.d.mts +105 -0
- package/dist/use-visual-viewport.mjs +104 -0
- package/dist/use-wake-lock.d.mts +96 -0
- package/dist/use-wake-lock.mjs +106 -0
- package/dist/use-web-authn.d.mts +404 -0
- package/dist/use-web-authn.mjs +323 -0
- package/dist/use-web-locks.d.mts +180 -0
- package/dist/use-web-locks.mjs +136 -0
- package/dist/use-web-midi.d.mts +148 -0
- package/dist/use-web-midi.mjs +140 -0
- package/dist/use-web-vitals.d.mts +142 -0
- package/dist/use-web-vitals.mjs +248 -0
- package/dist/use-websocket.d.mts +218 -0
- package/dist/use-websocket.mjs +257 -0
- package/dist/use-worker-fn.d.mts +119 -0
- package/dist/use-worker-fn.mjs +162 -0
- package/dist/virtual-list.d.mts +105 -0
- package/dist/virtual-list.mjs +128 -0
- package/dist/watch-debounced.d.mts +84 -0
- package/dist/watch-debounced.mjs +84 -0
- package/dist/watch-ignorable.d.mts +47 -0
- package/dist/watch-ignorable.mjs +61 -0
- package/dist/watch-once.d.mts +29 -0
- package/dist/watch-once.mjs +10 -0
- package/dist/watch-pausable.d.mts +51 -0
- package/dist/watch-pausable.mjs +23 -0
- package/dist/watch-source.d.mts +29 -0
- package/dist/watch-source.mjs +1 -0
- package/dist/watch-throttled.d.mts +70 -0
- package/dist/watch-throttled.mjs +94 -0
- package/dist/whenever.d.mts +39 -0
- package/dist/whenever.mjs +41 -0
- package/dist/window-size.d.mts +87 -0
- package/dist/window-size.mjs +65 -0
- package/package.json +846 -5
- package/registry/files/abort-signal.ts +292 -0
- package/registry/files/active-element.ts +93 -0
- package/registry/files/animate.ts +322 -0
- package/registry/files/async-resource.ts +190 -0
- package/registry/files/battery.ts +166 -0
- package/registry/files/breakpoints.ts +166 -0
- package/registry/files/capability.ts +171 -0
- package/registry/files/color-mode.ts +274 -0
- package/registry/files/computed-async.ts +123 -0
- package/registry/files/computed-with-control.ts +80 -0
- package/registry/files/create-event-hook.ts +139 -0
- package/registry/files/create-global-state.ts +34 -0
- package/registry/files/create-injection-state.ts +75 -0
- package/registry/files/create-shared-composable.ts +74 -0
- package/registry/files/device-motion.ts +152 -0
- package/registry/files/device-orientation.ts +168 -0
- package/registry/files/device-pixel-ratio.ts +100 -0
- package/registry/files/disposal-scope.ts +201 -0
- package/registry/files/document-visibility.ts +152 -0
- package/registry/files/draggable.ts +273 -0
- package/registry/files/element-bounding.ts +175 -0
- package/registry/files/element-by-point.ts +149 -0
- package/registry/files/element-hover.ts +104 -0
- package/registry/files/element-ref.ts +58 -0
- package/registry/files/element-target.ts +99 -0
- package/registry/files/event-listener.ts +188 -0
- package/registry/files/focus.ts +181 -0
- package/registry/files/fps.ts +133 -0
- package/registry/files/geolocation.ts +214 -0
- package/registry/files/i18n.ts +524 -0
- package/registry/files/icu-message.ts +701 -0
- package/registry/files/idle.ts +176 -0
- package/registry/files/infinite-scroll.ts +135 -0
- package/registry/files/intersection-observer.ts +261 -0
- package/registry/files/locale.ts +148 -0
- package/registry/files/magic-keys.ts +298 -0
- package/registry/files/math.ts +175 -0
- package/registry/files/media-query.ts +102 -0
- package/registry/files/mouse-in-element.ts +107 -0
- package/registry/files/mouse.ts +167 -0
- package/registry/files/mutation-observer.ts +183 -0
- package/registry/files/network.ts +229 -0
- package/registry/files/on-click-outside.ts +178 -0
- package/registry/files/on-key-stroke.ts +135 -0
- package/registry/files/on-long-press.ts +188 -0
- package/registry/files/on-start-typing.ts +88 -0
- package/registry/files/page-leave.ts +57 -0
- package/registry/files/parent-element.ts +29 -0
- package/registry/files/pinch.ts +187 -0
- package/registry/files/pointer-lock.ts +232 -0
- package/registry/files/pointer.ts +153 -0
- package/registry/files/preferences.ts +98 -0
- package/registry/files/preferred-languages.ts +88 -0
- package/registry/files/reactify.ts +39 -0
- package/registry/files/ref-auto-reset.ts +102 -0
- package/registry/files/ref-debounced.ts +34 -0
- package/registry/files/ref-default.ts +35 -0
- package/registry/files/resize-observer.ts +220 -0
- package/registry/files/retry-async.ts +261 -0
- package/registry/files/retry-delay.ts +132 -0
- package/registry/files/scope.ts +21 -0
- package/registry/files/screen-orientation.ts +165 -0
- package/registry/files/scroll-lock.ts +80 -0
- package/registry/files/scroll.ts +338 -0
- package/registry/files/standard-schema.ts +163 -0
- package/registry/files/swipe.ts +321 -0
- package/registry/files/sync-ref.ts +166 -0
- package/registry/files/temporal.ts +182 -0
- package/registry/files/text-selection.ts +110 -0
- package/registry/files/textarea-autosize.ts +114 -0
- package/registry/files/timeout-scheduler.ts +16 -0
- package/registry/files/to-reactive.ts +44 -0
- package/registry/files/transition.ts +271 -0
- package/registry/files/until.ts +352 -0
- package/registry/files/use-array.ts +201 -0
- package/registry/files/use-async-queue.ts +278 -0
- package/registry/files/use-async-state.ts +139 -0
- package/registry/files/use-barcode-detector.ts +321 -0
- package/registry/files/use-bluetooth.ts +409 -0
- package/registry/files/use-broadcast-channel.ts +250 -0
- package/registry/files/use-builtin-ai.ts +674 -0
- package/registry/files/use-clipboard.ts +425 -0
- package/registry/files/use-compression-stream.ts +364 -0
- package/registry/files/use-confirm-dialog.ts +137 -0
- package/registry/files/use-contact-picker.ts +246 -0
- package/registry/files/use-cookie.ts +500 -0
- package/registry/files/use-countdown.ts +161 -0
- package/registry/files/use-counter.ts +147 -0
- package/registry/files/use-css-var.ts +191 -0
- package/registry/files/use-cycle-list.ts +136 -0
- package/registry/files/use-date-format.ts +281 -0
- package/registry/files/use-date-time-format.ts +113 -0
- package/registry/files/use-debounced.ts +163 -0
- package/registry/files/use-display-media.ts +89 -0
- package/registry/files/use-display-names.ts +122 -0
- package/registry/files/use-document-title.ts +196 -0
- package/registry/files/use-drop-zone.ts +287 -0
- package/registry/files/use-event-source.ts +470 -0
- package/registry/files/use-eye-dropper.ts +134 -0
- package/registry/files/use-favicon.ts +140 -0
- package/registry/files/use-fetch.ts +578 -0
- package/registry/files/use-field.ts +247 -0
- package/registry/files/use-file-dialog.ts +257 -0
- package/registry/files/use-file-system-access.ts +383 -0
- package/registry/files/use-form-field-props.ts +381 -0
- package/registry/files/use-form.ts +980 -0
- package/registry/files/use-fullscreen.ts +214 -0
- package/registry/files/use-gamepad.ts +463 -0
- package/registry/files/use-hid.ts +359 -0
- package/registry/files/use-history.ts +231 -0
- package/registry/files/use-id-generator.ts +61 -0
- package/registry/files/use-image.ts +253 -0
- package/registry/files/use-indexed-db.ts +508 -0
- package/registry/files/use-interval.ts +253 -0
- package/registry/files/use-list-format.ts +85 -0
- package/registry/files/use-machine.ts +171 -0
- package/registry/files/use-map.ts +145 -0
- package/registry/files/use-media-controls.ts +545 -0
- package/registry/files/use-memoize.ts +118 -0
- package/registry/files/use-mounted.ts +30 -0
- package/registry/files/use-navigation-api.ts +641 -0
- package/registry/files/use-notification.ts +285 -0
- package/registry/files/use-now.ts +194 -0
- package/registry/files/use-number-format.ts +120 -0
- package/registry/files/use-object-url.ts +87 -0
- package/registry/files/use-offset-pagination.ts +168 -0
- package/registry/files/use-payment-request.ts +465 -0
- package/registry/files/use-performance-observer.ts +469 -0
- package/registry/files/use-permission.ts +220 -0
- package/registry/files/use-plural-rules.ts +134 -0
- package/registry/files/use-previous.ts +62 -0
- package/registry/files/use-push-subscription.ts +352 -0
- package/registry/files/use-queue.ts +197 -0
- package/registry/files/use-raf-fn.ts +176 -0
- package/registry/files/use-relative-time-format.ts +201 -0
- package/registry/files/use-request-idle-callback.ts +278 -0
- package/registry/files/use-route-query.ts +300 -0
- package/registry/files/use-scheduler-post-task.ts +397 -0
- package/registry/files/use-screen-details.ts +393 -0
- package/registry/files/use-script-tag.ts +341 -0
- package/registry/files/use-segmenter.ts +147 -0
- package/registry/files/use-selection.ts +233 -0
- package/registry/files/use-serial.ts +404 -0
- package/registry/files/use-service-worker.ts +413 -0
- package/registry/files/use-set.ts +154 -0
- package/registry/files/use-share.ts +168 -0
- package/registry/files/use-sorted-locale.ts +130 -0
- package/registry/files/use-sorted.ts +49 -0
- package/registry/files/use-speech-recognition.ts +357 -0
- package/registry/files/use-speech-synthesis.ts +333 -0
- package/registry/files/use-stack.ts +164 -0
- package/registry/files/use-stepper.ts +166 -0
- package/registry/files/use-storage-estimate.ts +352 -0
- package/registry/files/use-storage.ts +635 -0
- package/registry/files/use-style-tag.ts +200 -0
- package/registry/files/use-supported.ts +26 -0
- package/registry/files/use-throttled.ts +215 -0
- package/registry/files/use-time-ago.ts +276 -0
- package/registry/files/use-timeout.ts +218 -0
- package/registry/files/use-toggle.ts +54 -0
- package/registry/files/use-url-hash.ts +280 -0
- package/registry/files/use-url-search-params.ts +497 -0
- package/registry/files/use-usb.ts +395 -0
- package/registry/files/use-user-activation.ts +215 -0
- package/registry/files/use-user-media.ts +422 -0
- package/registry/files/use-v-model.ts +210 -0
- package/registry/files/use-vibrate.ts +174 -0
- package/registry/files/use-view-transition.ts +229 -0
- package/registry/files/use-visual-viewport.ts +228 -0
- package/registry/files/use-wake-lock.ts +206 -0
- package/registry/files/use-web-authn.ts +793 -0
- package/registry/files/use-web-locks.ts +363 -0
- package/registry/files/use-web-midi.ts +306 -0
- package/registry/files/use-web-vitals.ts +409 -0
- package/registry/files/use-websocket.ts +553 -0
- package/registry/files/use-worker-fn.ts +306 -0
- package/registry/files/virtual-list.ts +230 -0
- package/registry/files/watch-debounced.ts +206 -0
- package/registry/files/watch-ignorable.ts +128 -0
- package/registry/files/watch-once.ts +46 -0
- package/registry/files/watch-pausable.ts +93 -0
- package/registry/files/watch-source.ts +51 -0
- package/registry/files/watch-throttled.ts +201 -0
- package/registry/files/whenever.ts +70 -0
- package/registry/files/window-size.ts +151 -0
- package/registry/registry.json +5792 -0
- package/dist/catalog-D2AL3xYl.d.mts +0 -523
- package/dist/catalog-D5SYCsgW.mjs +0 -549
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
hasInjectionContext,
|
|
4
|
+
readonly,
|
|
5
|
+
ref,
|
|
6
|
+
shallowRef,
|
|
7
|
+
toValue,
|
|
8
|
+
unref,
|
|
9
|
+
watch,
|
|
10
|
+
watchPostEffect,
|
|
11
|
+
} from "vue";
|
|
12
|
+
import type { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
|
|
13
|
+
|
|
14
|
+
import { tryOnScopeDispose } from "./scope.ts";
|
|
15
|
+
|
|
16
|
+
/** Model availability reported by the built-in AI APIs. */
|
|
17
|
+
export type BuiltinAiAvailability = "unavailable" | "downloadable" | "downloading" | "available";
|
|
18
|
+
|
|
19
|
+
/** Lifecycle of a built-in AI session owned by a composable. */
|
|
20
|
+
export type BuiltinAiStatus =
|
|
21
|
+
| "unsupported"
|
|
22
|
+
| "idle"
|
|
23
|
+
| "downloading"
|
|
24
|
+
| "creating"
|
|
25
|
+
| "ready"
|
|
26
|
+
| "error";
|
|
27
|
+
|
|
28
|
+
/** `downloadprogress` event: `loaded` is a fraction of `total` (usually 1). */
|
|
29
|
+
export interface BuiltinAiDownloadProgressEvent {
|
|
30
|
+
/** Downloaded amount. */
|
|
31
|
+
readonly loaded: number;
|
|
32
|
+
|
|
33
|
+
/** Total amount (1 in current browsers). */
|
|
34
|
+
readonly total?: number | undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Monitor handed to the `monitor` callback of `create()`. */
|
|
38
|
+
export interface BuiltinAiMonitorLike {
|
|
39
|
+
/** Subscribe to model download progress. */
|
|
40
|
+
addEventListener(
|
|
41
|
+
type: "downloadprogress",
|
|
42
|
+
listener: (event: BuiltinAiDownloadProgressEvent) => void,
|
|
43
|
+
): void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Options added by the composables to every `create()` call. */
|
|
47
|
+
export interface BuiltinAiCreateMonitorOptions {
|
|
48
|
+
/** Receives the download monitor. */
|
|
49
|
+
readonly monitor: (monitor: BuiltinAiMonitorLike) => void;
|
|
50
|
+
|
|
51
|
+
/** Aborts creation when the session is destroyed. */
|
|
52
|
+
readonly signal: AbortSignal;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Streaming output of a built-in AI call (a `ReadableStream<string>`). */
|
|
56
|
+
export type BuiltinAiTextStream =
|
|
57
|
+
| AsyncIterable<string>
|
|
58
|
+
| {
|
|
59
|
+
/** Lock the stream and read chunks. */
|
|
60
|
+
getReader(): {
|
|
61
|
+
/** Read the next chunk. */
|
|
62
|
+
read(): Promise<{ readonly done: boolean; readonly value?: string | undefined }>;
|
|
63
|
+
/** Release the lock. */
|
|
64
|
+
releaseLock(): void;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** Common state and actions of every built-in AI composable. */
|
|
69
|
+
export interface BuiltinAiSessionControls {
|
|
70
|
+
/** Whether the API's global constructor is available. */
|
|
71
|
+
readonly supported: ComputedRef<boolean>;
|
|
72
|
+
|
|
73
|
+
/** Session lifecycle. */
|
|
74
|
+
readonly status: ComputedRef<BuiltinAiStatus>;
|
|
75
|
+
|
|
76
|
+
/** Model download progress (0..1) during `create()`. */
|
|
77
|
+
readonly downloadProgress: Readonly<Ref<number>>;
|
|
78
|
+
|
|
79
|
+
/** Most recent failure, cleared by the next successful call. */
|
|
80
|
+
readonly error: Readonly<ShallowRef<unknown>>;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Ask whether the model for the current options is usable.
|
|
84
|
+
*
|
|
85
|
+
* @returns The availability; `"unavailable"` when unsupported or on failure.
|
|
86
|
+
*/
|
|
87
|
+
readonly availability: () => Promise<BuiltinAiAvailability>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Create the session (downloading the model when needed). Browsers require
|
|
91
|
+
* a user gesture for a download. Operations create it lazily.
|
|
92
|
+
*
|
|
93
|
+
* @returns Whether the session is ready.
|
|
94
|
+
*/
|
|
95
|
+
readonly create: () => Promise<boolean>;
|
|
96
|
+
|
|
97
|
+
/** Destroy the session and abort a pending creation. Repeated calls are safe. */
|
|
98
|
+
readonly destroy: () => void;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Minimal `Translator` instance. */
|
|
102
|
+
export interface TranslatorLike {
|
|
103
|
+
/** Translate `input`. */
|
|
104
|
+
translate(input: string): Promise<string>;
|
|
105
|
+
|
|
106
|
+
/** Translate `input`, streaming chunks. */
|
|
107
|
+
translateStreaming(input: string): BuiltinAiTextStream;
|
|
108
|
+
|
|
109
|
+
/** Release the session. */
|
|
110
|
+
destroy(): void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Language pair of a translator. */
|
|
114
|
+
export interface TranslatorLanguages {
|
|
115
|
+
/** BCP 47 source language. */
|
|
116
|
+
readonly sourceLanguage: string;
|
|
117
|
+
|
|
118
|
+
/** BCP 47 target language. */
|
|
119
|
+
readonly targetLanguage: string;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Minimal global `Translator` class (static methods). */
|
|
123
|
+
export interface TranslatorHost {
|
|
124
|
+
/** Availability of a language pair. */
|
|
125
|
+
availability(options: TranslatorLanguages): Promise<BuiltinAiAvailability>;
|
|
126
|
+
|
|
127
|
+
/** Create a translator. */
|
|
128
|
+
create(options: TranslatorLanguages & BuiltinAiCreateMonitorOptions): Promise<TranslatorLike>;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Options for {@link useTranslator}. */
|
|
132
|
+
export interface UseTranslatorOptions {
|
|
133
|
+
/** BCP 47 source language; a change destroys the current session. */
|
|
134
|
+
readonly sourceLanguage: MaybeRefOrGetter<string>;
|
|
135
|
+
|
|
136
|
+
/** BCP 47 target language; a change destroys the current session. */
|
|
137
|
+
readonly targetLanguage: MaybeRefOrGetter<string>;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* `Translator` class. A ref (not a getter) because the host is a class.
|
|
141
|
+
*
|
|
142
|
+
* @default window.Translator when it exists
|
|
143
|
+
*/
|
|
144
|
+
readonly host?: MaybeRef<TranslatorHost | null | undefined>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** State and actions returned by {@link useTranslator}. */
|
|
148
|
+
export interface TranslatorControls extends BuiltinAiSessionControls {
|
|
149
|
+
/**
|
|
150
|
+
* Translate text, creating the session on first use. Rejects with a
|
|
151
|
+
* tagged `Error` when unsupported or with the host's failure.
|
|
152
|
+
*
|
|
153
|
+
* @param text Text to translate.
|
|
154
|
+
* @returns The translation.
|
|
155
|
+
*/
|
|
156
|
+
readonly translate: (text: string) => Promise<string>;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Translate text as a stream of chunks.
|
|
160
|
+
*
|
|
161
|
+
* @param text Text to translate.
|
|
162
|
+
* @returns Async iterable of translated chunks.
|
|
163
|
+
*/
|
|
164
|
+
readonly translateStreaming: (text: string) => AsyncIterable<string>;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** One candidate returned by `LanguageDetector.detect`. */
|
|
168
|
+
export interface LanguageDetectionResult {
|
|
169
|
+
/** BCP 47 language tag (`"und"` for unknown). */
|
|
170
|
+
readonly detectedLanguage: string;
|
|
171
|
+
|
|
172
|
+
/** Confidence between 0 and 1. */
|
|
173
|
+
readonly confidence: number;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Minimal `LanguageDetector` instance. */
|
|
177
|
+
export interface LanguageDetectorLike {
|
|
178
|
+
/** Rank candidate languages for `input`. */
|
|
179
|
+
detect(input: string): Promise<readonly LanguageDetectionResult[]>;
|
|
180
|
+
|
|
181
|
+
/** Release the session. */
|
|
182
|
+
destroy(): void;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Creation options of a language detector. */
|
|
186
|
+
export interface LanguageDetectorCreateOptions {
|
|
187
|
+
/**
|
|
188
|
+
* Languages the input is expected to be in.
|
|
189
|
+
*
|
|
190
|
+
* @default undefined
|
|
191
|
+
*/
|
|
192
|
+
readonly expectedInputLanguages?: readonly string[];
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Minimal global `LanguageDetector` class (static methods). */
|
|
196
|
+
export interface LanguageDetectorHost {
|
|
197
|
+
/** Availability of the detector. */
|
|
198
|
+
availability(options: LanguageDetectorCreateOptions): Promise<BuiltinAiAvailability>;
|
|
199
|
+
|
|
200
|
+
/** Create a detector. */
|
|
201
|
+
create(
|
|
202
|
+
options: LanguageDetectorCreateOptions & BuiltinAiCreateMonitorOptions,
|
|
203
|
+
): Promise<LanguageDetectorLike>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Options for {@link useLanguageDetector}. */
|
|
207
|
+
export interface UseLanguageDetectorOptions {
|
|
208
|
+
/**
|
|
209
|
+
* Languages the input is expected to be in; a change destroys the session.
|
|
210
|
+
*
|
|
211
|
+
* @default undefined
|
|
212
|
+
*/
|
|
213
|
+
readonly expectedInputLanguages?: MaybeRefOrGetter<readonly string[] | undefined>;
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* `LanguageDetector` class.
|
|
217
|
+
*
|
|
218
|
+
* @default window.LanguageDetector when it exists
|
|
219
|
+
*/
|
|
220
|
+
readonly host?: MaybeRef<LanguageDetectorHost | null | undefined>;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** State and actions returned by {@link useLanguageDetector}. */
|
|
224
|
+
export interface LanguageDetectorControls extends BuiltinAiSessionControls {
|
|
225
|
+
/**
|
|
226
|
+
* Detect the language of text, creating the session on first use.
|
|
227
|
+
*
|
|
228
|
+
* @param text Text to inspect.
|
|
229
|
+
* @returns Candidates ordered by confidence.
|
|
230
|
+
*/
|
|
231
|
+
readonly detect: (text: string) => Promise<readonly LanguageDetectionResult[]>;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** Summary kinds. */
|
|
235
|
+
export type SummarizerType = "tldr" | "teaser" | "key-points" | "headline";
|
|
236
|
+
|
|
237
|
+
/** Summary output formats. */
|
|
238
|
+
export type SummarizerFormat = "plain-text" | "markdown";
|
|
239
|
+
|
|
240
|
+
/** Summary lengths. */
|
|
241
|
+
export type SummarizerLength = "short" | "medium" | "long";
|
|
242
|
+
|
|
243
|
+
/** Creation options of a summarizer. */
|
|
244
|
+
export interface SummarizerCreateOptions {
|
|
245
|
+
/** Summary kind. */
|
|
246
|
+
readonly type: SummarizerType;
|
|
247
|
+
|
|
248
|
+
/** Output format. */
|
|
249
|
+
readonly format: SummarizerFormat;
|
|
250
|
+
|
|
251
|
+
/** Output length. */
|
|
252
|
+
readonly length: SummarizerLength;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Background shared by every summary.
|
|
256
|
+
*
|
|
257
|
+
* @default undefined
|
|
258
|
+
*/
|
|
259
|
+
readonly sharedContext?: string;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** Per-call options of `summarize`. */
|
|
263
|
+
export interface SummarizeCallOptions {
|
|
264
|
+
/**
|
|
265
|
+
* Background for this input only.
|
|
266
|
+
*
|
|
267
|
+
* @default undefined
|
|
268
|
+
*/
|
|
269
|
+
readonly context?: string;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** Minimal `Summarizer` instance. */
|
|
273
|
+
export interface SummarizerLike {
|
|
274
|
+
/** Summarize `input`. */
|
|
275
|
+
summarize(input: string, options?: SummarizeCallOptions): Promise<string>;
|
|
276
|
+
|
|
277
|
+
/** Summarize `input`, streaming chunks. */
|
|
278
|
+
summarizeStreaming(input: string, options?: SummarizeCallOptions): BuiltinAiTextStream;
|
|
279
|
+
|
|
280
|
+
/** Release the session. */
|
|
281
|
+
destroy(): void;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/** Minimal global `Summarizer` class (static methods). */
|
|
285
|
+
export interface SummarizerHost {
|
|
286
|
+
/** Availability of the summarizer. */
|
|
287
|
+
availability(options: SummarizerCreateOptions): Promise<BuiltinAiAvailability>;
|
|
288
|
+
|
|
289
|
+
/** Create a summarizer. */
|
|
290
|
+
create(options: SummarizerCreateOptions & BuiltinAiCreateMonitorOptions): Promise<SummarizerLike>;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/** Options for {@link useSummarizer}. */
|
|
294
|
+
export interface UseSummarizerOptions {
|
|
295
|
+
/**
|
|
296
|
+
* Summary kind; a change destroys the session.
|
|
297
|
+
*
|
|
298
|
+
* @default "key-points"
|
|
299
|
+
*/
|
|
300
|
+
readonly type?: MaybeRefOrGetter<SummarizerType>;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Output format; a change destroys the session.
|
|
304
|
+
*
|
|
305
|
+
* @default "markdown"
|
|
306
|
+
*/
|
|
307
|
+
readonly format?: MaybeRefOrGetter<SummarizerFormat>;
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Output length; a change destroys the session.
|
|
311
|
+
*
|
|
312
|
+
* @default "short"
|
|
313
|
+
*/
|
|
314
|
+
readonly length?: MaybeRefOrGetter<SummarizerLength>;
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Background shared by every summary; a change destroys the session.
|
|
318
|
+
*
|
|
319
|
+
* @default undefined
|
|
320
|
+
*/
|
|
321
|
+
readonly sharedContext?: MaybeRefOrGetter<string | undefined>;
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* `Summarizer` class.
|
|
325
|
+
*
|
|
326
|
+
* @default window.Summarizer when it exists
|
|
327
|
+
*/
|
|
328
|
+
readonly host?: MaybeRef<SummarizerHost | null | undefined>;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/** State and actions returned by {@link useSummarizer}. */
|
|
332
|
+
export interface SummarizerControls extends BuiltinAiSessionControls {
|
|
333
|
+
/**
|
|
334
|
+
* Summarize text, creating the session on first use.
|
|
335
|
+
*
|
|
336
|
+
* @param text Text to summarize.
|
|
337
|
+
* @param options Per-call context.
|
|
338
|
+
* @returns The summary.
|
|
339
|
+
*/
|
|
340
|
+
readonly summarize: (text: string, options?: SummarizeCallOptions) => Promise<string>;
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Summarize text as a stream of chunks.
|
|
344
|
+
*
|
|
345
|
+
* @param text Text to summarize.
|
|
346
|
+
* @param options Per-call context.
|
|
347
|
+
* @returns Async iterable of summary chunks.
|
|
348
|
+
*/
|
|
349
|
+
readonly summarizeStreaming: (
|
|
350
|
+
text: string,
|
|
351
|
+
options?: SummarizeCallOptions,
|
|
352
|
+
) => AsyncIterable<string>;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
interface AiFactory<Instance, CreateOptions> {
|
|
356
|
+
availability(options: CreateOptions): Promise<BuiltinAiAvailability>;
|
|
357
|
+
create(options: CreateOptions & BuiltinAiCreateMonitorOptions): Promise<Instance>;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
interface AiSession<Instance> {
|
|
361
|
+
readonly controls: BuiltinAiSessionControls;
|
|
362
|
+
readonly run: <Value>(action: (instance: Instance) => Promise<Value>) => Promise<Value>;
|
|
363
|
+
readonly stream: (open: (instance: Instance) => BuiltinAiTextStream) => AsyncIterable<string>;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// A global class cannot be verified structurally beyond its static methods;
|
|
367
|
+
// this guard checks those and trusts the platform for the instance shape.
|
|
368
|
+
function isFactory<Factory>(candidate: unknown): candidate is Factory {
|
|
369
|
+
return (
|
|
370
|
+
typeof candidate === "function" &&
|
|
371
|
+
typeof Reflect.get(candidate, "create") === "function" &&
|
|
372
|
+
typeof Reflect.get(candidate, "availability") === "function"
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
function browserFactory<Factory>(name: string): Factory | undefined {
|
|
377
|
+
if (typeof window === "undefined") return undefined;
|
|
378
|
+
const candidate: unknown = Reflect.get(window, name);
|
|
379
|
+
return isFactory<Factory>(candidate) ? candidate : undefined;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
function useAiSession<Instance extends { destroy(): void }, CreateOptions>(
|
|
383
|
+
name: string,
|
|
384
|
+
host: MaybeRef<AiFactory<Instance, CreateOptions> | null | undefined> | undefined,
|
|
385
|
+
createOptions: () => CreateOptions,
|
|
386
|
+
): AiSession<Instance> {
|
|
387
|
+
const phase = ref<Exclude<BuiltinAiStatus, "unsupported">>("idle");
|
|
388
|
+
const downloadProgress = ref(0);
|
|
389
|
+
const error = shallowRef<unknown>(undefined);
|
|
390
|
+
let instance: Instance | undefined;
|
|
391
|
+
let creating: Promise<Instance> | undefined;
|
|
392
|
+
let controller: AbortController | undefined;
|
|
393
|
+
let generation = 0;
|
|
394
|
+
|
|
395
|
+
// Inside a component the host is resolved only after mounting, so a
|
|
396
|
+
// hydrating client renders the server's unsupported state first. Outside
|
|
397
|
+
// components it resolves synchronously.
|
|
398
|
+
const hydrated = shallowRef(!hasInjectionContext());
|
|
399
|
+
if (!hydrated.value) {
|
|
400
|
+
watchPostEffect(() => {
|
|
401
|
+
hydrated.value = true;
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
const resolveFactory = (): AiFactory<Instance, CreateOptions> | undefined =>
|
|
406
|
+
host === undefined ? browserFactory(name) : (unref(host) ?? undefined);
|
|
407
|
+
|
|
408
|
+
const fail = (cause: unknown): never => {
|
|
409
|
+
error.value = cause;
|
|
410
|
+
throw cause;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
const ensure = (): Promise<Instance> => {
|
|
414
|
+
if (instance) return Promise.resolve(instance);
|
|
415
|
+
if (creating) return creating;
|
|
416
|
+
const factory = resolveFactory();
|
|
417
|
+
if (!factory) {
|
|
418
|
+
return Promise.reject(
|
|
419
|
+
new Error(`[VIZE_COMPOSE_BUILTIN_AI_UNSUPPORTED] ${name} is not available.`),
|
|
420
|
+
).catch(fail);
|
|
421
|
+
}
|
|
422
|
+
const current = ++generation;
|
|
423
|
+
const abort = new AbortController();
|
|
424
|
+
controller = abort;
|
|
425
|
+
phase.value = "creating";
|
|
426
|
+
downloadProgress.value = 0;
|
|
427
|
+
const monitor = (target: BuiltinAiMonitorLike): void => {
|
|
428
|
+
target.addEventListener("downloadprogress", ({ loaded, total }) => {
|
|
429
|
+
if (current !== generation) return;
|
|
430
|
+
const fraction = total !== undefined && total > 0 ? loaded / total : loaded;
|
|
431
|
+
downloadProgress.value = Math.min(1, Math.max(0, fraction));
|
|
432
|
+
phase.value = "downloading";
|
|
433
|
+
});
|
|
434
|
+
};
|
|
435
|
+
let requested: Promise<Instance>;
|
|
436
|
+
try {
|
|
437
|
+
requested = factory.create({ ...createOptions(), monitor, signal: abort.signal });
|
|
438
|
+
} catch (cause) {
|
|
439
|
+
controller = undefined;
|
|
440
|
+
phase.value = "error";
|
|
441
|
+
error.value = cause;
|
|
442
|
+
return Promise.reject(cause);
|
|
443
|
+
}
|
|
444
|
+
creating = requested.then(
|
|
445
|
+
(created) => {
|
|
446
|
+
if (current !== generation) {
|
|
447
|
+
created.destroy();
|
|
448
|
+
throw new DOMException("The session was destroyed.", "AbortError");
|
|
449
|
+
}
|
|
450
|
+
instance = created;
|
|
451
|
+
creating = undefined;
|
|
452
|
+
phase.value = "ready";
|
|
453
|
+
downloadProgress.value = 1;
|
|
454
|
+
error.value = undefined;
|
|
455
|
+
return created;
|
|
456
|
+
},
|
|
457
|
+
(cause: unknown) => {
|
|
458
|
+
if (current === generation) {
|
|
459
|
+
creating = undefined;
|
|
460
|
+
phase.value = "error";
|
|
461
|
+
error.value = cause;
|
|
462
|
+
}
|
|
463
|
+
throw cause;
|
|
464
|
+
},
|
|
465
|
+
);
|
|
466
|
+
return creating;
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
const destroy = (): void => {
|
|
470
|
+
generation += 1;
|
|
471
|
+
controller?.abort(new DOMException("The session was destroyed.", "AbortError"));
|
|
472
|
+
controller = undefined;
|
|
473
|
+
creating = undefined;
|
|
474
|
+
instance?.destroy();
|
|
475
|
+
instance = undefined;
|
|
476
|
+
phase.value = "idle";
|
|
477
|
+
downloadProgress.value = 0;
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
const run = async <Value>(action: (session: Instance) => Promise<Value>): Promise<Value> => {
|
|
481
|
+
const session = await ensure();
|
|
482
|
+
try {
|
|
483
|
+
const value = await action(session);
|
|
484
|
+
error.value = undefined;
|
|
485
|
+
return value;
|
|
486
|
+
} catch (cause) {
|
|
487
|
+
return fail(cause);
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
async function* stream(open: (session: Instance) => BuiltinAiTextStream): AsyncGenerator<string> {
|
|
492
|
+
const session = await ensure();
|
|
493
|
+
try {
|
|
494
|
+
const source = open(session);
|
|
495
|
+
if (Symbol.asyncIterator in source) {
|
|
496
|
+
for await (const chunk of source) yield chunk;
|
|
497
|
+
} else {
|
|
498
|
+
const reader = source.getReader();
|
|
499
|
+
try {
|
|
500
|
+
for (;;) {
|
|
501
|
+
const { done, value } = await reader.read();
|
|
502
|
+
if (done) break;
|
|
503
|
+
if (value !== undefined) yield value;
|
|
504
|
+
}
|
|
505
|
+
} finally {
|
|
506
|
+
reader.releaseLock();
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
error.value = undefined;
|
|
510
|
+
} catch (cause) {
|
|
511
|
+
fail(cause);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
const availability = async (): Promise<BuiltinAiAvailability> => {
|
|
516
|
+
const factory = resolveFactory();
|
|
517
|
+
if (!factory) return "unavailable";
|
|
518
|
+
try {
|
|
519
|
+
return await factory.availability(createOptions());
|
|
520
|
+
} catch (cause) {
|
|
521
|
+
error.value = cause;
|
|
522
|
+
return "unavailable";
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
watch(createOptions, () => {
|
|
527
|
+
if (instance || creating) destroy();
|
|
528
|
+
});
|
|
529
|
+
tryOnScopeDispose(destroy);
|
|
530
|
+
|
|
531
|
+
const supported = computed(() => hydrated.value && resolveFactory() !== undefined);
|
|
532
|
+
return {
|
|
533
|
+
controls: {
|
|
534
|
+
supported,
|
|
535
|
+
status: computed(() => (supported.value ? phase.value : "unsupported")),
|
|
536
|
+
downloadProgress: readonly(downloadProgress),
|
|
537
|
+
error: readonly(error),
|
|
538
|
+
availability,
|
|
539
|
+
create: () =>
|
|
540
|
+
ensure().then(
|
|
541
|
+
() => true,
|
|
542
|
+
() => false,
|
|
543
|
+
),
|
|
544
|
+
destroy,
|
|
545
|
+
},
|
|
546
|
+
run,
|
|
547
|
+
stream,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Translate text on-device with Chrome's built-in `Translator` API.
|
|
553
|
+
*
|
|
554
|
+
* The session is created lazily by the first `translate` (or explicitly by
|
|
555
|
+
* `create()`, which browsers require inside a user gesture when the model
|
|
556
|
+
* must be downloaded); `downloadProgress` follows the download. Changing a
|
|
557
|
+
* language destroys the session. The session is destroyed and a pending
|
|
558
|
+
* creation aborted when the owning reactive scope stops; outside a scope
|
|
559
|
+
* call `destroy()`.
|
|
560
|
+
*
|
|
561
|
+
* Server rendering: nothing is created, `supported` is false and `status`
|
|
562
|
+
* is `"unsupported"`.
|
|
563
|
+
* Inside a component `supported` turns true only after mounting, so
|
|
564
|
+
* hydration renders this server state first.
|
|
565
|
+
*
|
|
566
|
+
* @example
|
|
567
|
+
* ```ts
|
|
568
|
+
* const translator = useTranslator({ sourceLanguage: "en", targetLanguage: "ja" });
|
|
569
|
+
* const japanese = await translator.translate("Hello");
|
|
570
|
+
* ```
|
|
571
|
+
*
|
|
572
|
+
* @param options Language pair and class override.
|
|
573
|
+
* @returns Translator state and actions.
|
|
574
|
+
*/
|
|
575
|
+
export function useTranslator(options: UseTranslatorOptions): TranslatorControls {
|
|
576
|
+
const session = useAiSession<TranslatorLike, TranslatorLanguages>(
|
|
577
|
+
"Translator",
|
|
578
|
+
options.host,
|
|
579
|
+
() => ({
|
|
580
|
+
sourceLanguage: toValue(options.sourceLanguage),
|
|
581
|
+
targetLanguage: toValue(options.targetLanguage),
|
|
582
|
+
}),
|
|
583
|
+
);
|
|
584
|
+
return {
|
|
585
|
+
...session.controls,
|
|
586
|
+
translate: (text) => session.run((translator) => translator.translate(text)),
|
|
587
|
+
translateStreaming: (text) =>
|
|
588
|
+
session.stream((translator) => translator.translateStreaming(text)),
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Detect the language of text on-device with Chrome's built-in
|
|
594
|
+
* `LanguageDetector` API.
|
|
595
|
+
*
|
|
596
|
+
* Shares the lifecycle of {@link useTranslator}: lazy creation, download
|
|
597
|
+
* progress, destruction with the owning reactive scope.
|
|
598
|
+
*
|
|
599
|
+
* Server rendering: nothing is created, `supported` is false and `status`
|
|
600
|
+
* is `"unsupported"`.
|
|
601
|
+
* Inside a component `supported` turns true only after mounting, so
|
|
602
|
+
* hydration renders this server state first.
|
|
603
|
+
*
|
|
604
|
+
* @example
|
|
605
|
+
* ```ts
|
|
606
|
+
* const detector = useLanguageDetector();
|
|
607
|
+
* const [best] = await detector.detect(input.value);
|
|
608
|
+
* ```
|
|
609
|
+
*
|
|
610
|
+
* @param options Expected languages and class override.
|
|
611
|
+
* @default options {}
|
|
612
|
+
* @returns Detector state and actions.
|
|
613
|
+
*/
|
|
614
|
+
export function useLanguageDetector(
|
|
615
|
+
options: UseLanguageDetectorOptions = {},
|
|
616
|
+
): LanguageDetectorControls {
|
|
617
|
+
const session = useAiSession<LanguageDetectorLike, LanguageDetectorCreateOptions>(
|
|
618
|
+
"LanguageDetector",
|
|
619
|
+
options.host,
|
|
620
|
+
() => {
|
|
621
|
+
const expectedInputLanguages = toValue(options.expectedInputLanguages);
|
|
622
|
+
return expectedInputLanguages ? { expectedInputLanguages } : {};
|
|
623
|
+
},
|
|
624
|
+
);
|
|
625
|
+
return {
|
|
626
|
+
...session.controls,
|
|
627
|
+
detect: (text) => session.run((detector) => detector.detect(text)),
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Summarize text on-device with Chrome's built-in `Summarizer` API.
|
|
633
|
+
*
|
|
634
|
+
* Shares the lifecycle of {@link useTranslator}: lazy creation, download
|
|
635
|
+
* progress, destruction with the owning reactive scope; changing `type`,
|
|
636
|
+
* `format`, `length` or `sharedContext` destroys the session.
|
|
637
|
+
*
|
|
638
|
+
* Server rendering: nothing is created, `supported` is false and `status`
|
|
639
|
+
* is `"unsupported"`.
|
|
640
|
+
* Inside a component `supported` turns true only after mounting, so
|
|
641
|
+
* hydration renders this server state first.
|
|
642
|
+
*
|
|
643
|
+
* @example
|
|
644
|
+
* ```ts
|
|
645
|
+
* const summarizer = useSummarizer({ type: "tldr", length: "medium" });
|
|
646
|
+
* for await (const chunk of summarizer.summarizeStreaming(article.value)) output.value += chunk;
|
|
647
|
+
* ```
|
|
648
|
+
*
|
|
649
|
+
* @param options Summary shape and class override.
|
|
650
|
+
* @default options {}
|
|
651
|
+
* @returns Summarizer state and actions.
|
|
652
|
+
*/
|
|
653
|
+
export function useSummarizer(options: UseSummarizerOptions = {}): SummarizerControls {
|
|
654
|
+
const session = useAiSession<SummarizerLike, SummarizerCreateOptions>(
|
|
655
|
+
"Summarizer",
|
|
656
|
+
options.host,
|
|
657
|
+
() => {
|
|
658
|
+
const base = {
|
|
659
|
+
type: toValue(options.type) ?? "key-points",
|
|
660
|
+
format: toValue(options.format) ?? "markdown",
|
|
661
|
+
length: toValue(options.length) ?? "short",
|
|
662
|
+
};
|
|
663
|
+
const sharedContext = toValue(options.sharedContext);
|
|
664
|
+
return sharedContext === undefined ? base : { ...base, sharedContext };
|
|
665
|
+
},
|
|
666
|
+
);
|
|
667
|
+
return {
|
|
668
|
+
...session.controls,
|
|
669
|
+
summarize: (text, callOptions) =>
|
|
670
|
+
session.run((summarizer) => summarizer.summarize(text, callOptions)),
|
|
671
|
+
summarizeStreaming: (text, callOptions) =>
|
|
672
|
+
session.stream((summarizer) => summarizer.summarizeStreaming(text, callOptions)),
|
|
673
|
+
};
|
|
674
|
+
}
|