You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4537 lines
152 KiB

import * as _vueuse_shared from '@vueuse/shared';
import { Fn, MaybeRef, MaybeComputedRef, Awaitable, ConfigurableEventFilter, ConfigurableFlush, RemovableRef, EventHookOn, Arrayable, MaybeReadonlyRef, UseIntervalFnOptions, Pausable, UseTimeoutFnOptions, EventHook } from '@vueuse/shared';
export * from '@vueuse/shared';
import * as vue_demi from 'vue-demi';
import { Ref, InjectionKey, ComputedRef, ComponentPublicInstance, Component, UnwrapRef, WatchOptions, UnwrapNestedRefs, WatchSource, ToRefs, StyleValue, ShallowRef } from 'vue-demi';
import * as vue from 'vue-demi';
/**
* Handle overlapping async evaluations.
*
* @param cancelCallback The provided callback is invoked when a re-evaluation of the computed value is triggered before the previous one finished
*/
type AsyncComputedOnCancel = (cancelCallback: Fn) => void;
interface AsyncComputedOptions {
/**
* Should value be evaluated lazily
*
* @default false
*/
lazy?: boolean;
/**
* Ref passed to receive the updated of async evaluation
*/
evaluating?: Ref<boolean>;
/**
* Use shallowRef
*
* The default value will be changed to `true` in the next major version
*
* @default false
*/
shallow?: boolean;
/**
* Callback when error is caught.
*/
onError?: (e: unknown) => void;
}
/**
* Create an asynchronous computed dependency.
*
* @see https://vueuse.org/computedAsync
* @param evaluationCallback The promise-returning callback which generates the computed value
* @param initialState The initial state, used until the first evaluation finishes
* @param optionsOrRef Additional options or a ref passed to receive the updates of the async evaluation
*/
declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState?: T, optionsOrRef?: Ref<boolean> | AsyncComputedOptions): Ref<T>;
type ComputedInjectGetter<T, K> = (source: T | undefined, ctx?: any) => K;
type ComputedInjectGetterWithDefault<T, K> = (source: T, ctx?: any) => K;
type ComputedInjectSetter<T> = (v: T) => void;
interface WritableComputedInjectOptions<T, K> {
get: ComputedInjectGetter<T, K>;
set: ComputedInjectSetter<K>;
}
interface WritableComputedInjectOptionsWithDefault<T, K> {
get: ComputedInjectGetterWithDefault<T, K>;
set: ComputedInjectSetter<K>;
}
declare function computedInject<T, K = any>(key: InjectionKey<T> | string, getter: ComputedInjectGetter<T, K>): ComputedRef<K | undefined>;
declare function computedInject<T, K = any>(key: InjectionKey<T> | string, options: WritableComputedInjectOptions<T, K>): ComputedRef<K | undefined>;
declare function computedInject<T, K = any>(key: InjectionKey<T> | string, getter: ComputedInjectGetterWithDefault<T, K>, defaultSource: T, treatDefaultAsFactory?: false): ComputedRef<K>;
declare function computedInject<T, K = any>(key: InjectionKey<T> | string, options: WritableComputedInjectOptionsWithDefault<T, K>, defaultSource: T | (() => T), treatDefaultAsFactory: true): ComputedRef<K>;
type UnrefFn<T> = T extends (...args: infer A) => infer R ? (...args: {
[K in keyof A]: MaybeRef<A[K]>;
}) => R : never;
/**
* Make a plain function accepting ref and raw values as arguments.
* Returns the same value the unconverted function returns, with proper typing.
*/
declare const createUnrefFn: <T extends Function>(fn: T) => UnrefFn<T>;
type VueInstance = ComponentPublicInstance;
type MaybeElementRef<T extends MaybeElement = MaybeElement> = MaybeRef<T>;
type MaybeComputedElementRef<T extends MaybeElement = MaybeElement> = MaybeComputedRef<T>;
type MaybeElement = HTMLElement | SVGElement | VueInstance | undefined | null;
type UnRefElementReturn<T extends MaybeElement = MaybeElement> = T extends VueInstance ? Exclude<MaybeElement, VueInstance> : T | undefined;
/**
* Get the dom element of a ref of element or Vue component instance
*
* @param elRef
*/
declare function unrefElement<T extends MaybeElement>(elRef: MaybeComputedElementRef<T>): UnRefElementReturn<T>;
interface ConfigurableWindow {
window?: Window;
}
interface ConfigurableDocument {
document?: Document;
}
interface ConfigurableDocumentOrShadowRoot {
document?: DocumentOrShadowRoot;
}
interface ConfigurableNavigator {
navigator?: Navigator;
}
interface ConfigurableLocation {
location?: Location;
}
declare const defaultWindow: (Window & typeof globalThis) | undefined;
declare const defaultDocument: Document | undefined;
declare const defaultNavigator: Navigator | undefined;
declare const defaultLocation: Location | undefined;
interface OnClickOutsideOptions extends ConfigurableWindow {
/**
* List of elements that should not trigger the event.
*/
ignore?: (MaybeElementRef | string)[];
/**
* Use capturing phase for internal event listener.
* @default true
*/
capture?: boolean;
/**
* Run handler function if focus moves to an iframe.
* @default false
*/
detectIframe?: boolean;
}
type OnClickOutsideHandler<T extends {
detectIframe: OnClickOutsideOptions['detectIframe'];
} = {
detectIframe: false;
}> = (evt: T['detectIframe'] extends true ? PointerEvent | FocusEvent : PointerEvent) => void;
/**
* Listen for clicks outside of an element.
*
* @see https://vueuse.org/onClickOutside
* @param target
* @param handler
* @param options
*/
declare function onClickOutside<T extends OnClickOutsideOptions>(target: MaybeElementRef, handler: OnClickOutsideHandler<{
detectIframe: T['detectIframe'];
}>, options?: T): (() => void) | undefined;
type KeyPredicate = (event: KeyboardEvent) => boolean;
type KeyFilter = true | string | string[] | KeyPredicate;
type KeyStrokeEventName = 'keydown' | 'keypress' | 'keyup';
interface OnKeyStrokeOptions {
eventName?: KeyStrokeEventName;
target?: MaybeComputedRef<EventTarget | null | undefined>;
passive?: boolean;
}
declare function onKeyStroke(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions): () => void;
declare function onKeyStroke(handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions): () => void;
/**
* Listen for keyboard keys being stroked.
*
* @see https://vueuse.org/onKeyStroke
*/
declare function onKeyStroke(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions): () => void;
declare function onKeyStroke(handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions): () => void;
/**
* Listen to the keydown event of the given key.
*
* @see https://vueuse.org/onKeyStroke
* @param key
* @param handler
* @param options
*/
declare function onKeyDown(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit<OnKeyStrokeOptions, 'eventName'>): () => void;
/**
* Listen to the keypress event of the given key.
*
* @see https://vueuse.org/onKeyStroke
* @param key
* @param handler
* @param options
*/
declare function onKeyPressed(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit<OnKeyStrokeOptions, 'eventName'>): () => void;
/**
* Listen to the keyup event of the given key.
*
* @see https://vueuse.org/onKeyStroke
* @param key
* @param handler
* @param options
*/
declare function onKeyUp(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit<OnKeyStrokeOptions, 'eventName'>): () => void;
interface OnLongPressOptions {
/**
* Time in ms till `longpress` gets called
*
* @default 500
*/
delay?: number;
modifiers?: OnLongPressModifiers;
}
interface OnLongPressModifiers {
stop?: boolean;
once?: boolean;
prevent?: boolean;
capture?: boolean;
self?: boolean;
}
declare function onLongPress(target: MaybeElementRef, handler: (evt: PointerEvent) => void, options?: OnLongPressOptions): void;
/**
* Fires when users start typing on non-editable elements.
*
* @see https://vueuse.org/onStartTyping
* @param callback
* @param options
*/
declare function onStartTyping(callback: (event: KeyboardEvent) => void, options?: ConfigurableDocument): void;
/**
* Shorthand for binding ref to template element.
*
* @see https://vueuse.org/templateRef
* @param key
* @param initialValue
*/
declare function templateRef<T extends HTMLElement | SVGElement | Component | null>(key: string, initialValue?: T | null): Readonly<Ref<T>>;
interface UseActiveElementOptions extends ConfigurableWindow, ConfigurableDocumentOrShadowRoot {
}
/**
* Reactive `document.activeElement`
*
* @see https://vueuse.org/useActiveElement
* @param options
*/
declare function useActiveElement<T extends HTMLElement>(options?: UseActiveElementOptions): _vueuse_shared.ComputedRefWithControl<T | null | undefined>;
type UseAsyncQueueTask<T> = (...args: any[]) => T | Promise<T>;
interface UseAsyncQueueResult<T> {
state: 'pending' | 'fulfilled' | 'rejected';
data: T | null;
}
interface UseAsyncQueueReturn<T> {
activeIndex: Ref<number>;
result: T;
}
interface UseAsyncQueueOptions {
/**
* Interrupt tasks when current task fails.
*
* @default true
*/
interrupt?: boolean;
/**
* Trigger it when the tasks fails.
*
*/
onError?: () => void;
/**
* Trigger it when the tasks ends.
*
*/
onFinished?: () => void;
}
/**
* Asynchronous queue task controller.
*
* @see https://vueuse.org/useAsyncQueue
* @param tasks
* @param options
*/
declare function useAsyncQueue<T1>(tasks: [UseAsyncQueueTask<T1>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>]>;
declare function useAsyncQueue<T1, T2>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>]>;
declare function useAsyncQueue<T1, T2, T3>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>]>;
declare function useAsyncQueue<T1, T2, T3, T4>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>, UseAsyncQueueTask<T4>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>, UseAsyncQueueResult<T4>]>;
declare function useAsyncQueue<T1, T2, T3, T4, T5>(tasks: [UseAsyncQueueTask<T1>, UseAsyncQueueTask<T2>, UseAsyncQueueTask<T3>, UseAsyncQueueTask<T4>, UseAsyncQueueTask<T5>], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<[UseAsyncQueueResult<T1>, UseAsyncQueueResult<T2>, UseAsyncQueueResult<T3>, UseAsyncQueueResult<T4>, UseAsyncQueueResult<T5>]>;
declare function useAsyncQueue<T>(tasks: UseAsyncQueueTask<T>[], options?: UseAsyncQueueOptions): UseAsyncQueueReturn<UseAsyncQueueResult<T>[]>;
interface UseAsyncStateReturn<Data, Params extends any[], Shallow extends boolean> {
state: Shallow extends true ? Ref<Data> : Ref<UnwrapRef<Data>>;
isReady: Ref<boolean>;
isLoading: Ref<boolean>;
error: Ref<unknown>;
execute: (delay?: number, ...args: Params) => Promise<Data>;
}
interface UseAsyncStateOptions<Shallow extends boolean, D = any> {
/**
* Delay for executing the promise. In milliseconds.
*
* @default 0
*/
delay?: number;
/**
* Execute the promise right after the function is invoked.
* Will apply the delay if any.
*
* When set to false, you will need to execute it manually.
*
* @default true
*/
immediate?: boolean;
/**
* Callback when error is caught.
*/
onError?: (e: unknown) => void;
/**
* Callback when success is caught.
* @param {D} data
*/
onSuccess?: (data: D) => void;
/**
* Sets the state to initialState before executing the promise.
*
* This can be useful when calling the execute function more than once (for
* example, to refresh data). When set to false, the current state remains
* unchanged until the promise resolves.
*
* @default true
*/
resetOnExecute?: boolean;
/**
* Use shallowRef.
*
* @default true
*/
shallow?: Shallow;
/**
*
* An error is thrown when executing the execute function
*
* @default false
*/
throwError?: boolean;
}
/**
* Reactive async state. Will not block your setup function and will trigger changes once
* the promise is ready.
*
* @see https://vueuse.org/useAsyncState
* @param promise The promise / async function to be resolved
* @param initialState The initial state, used until the first evaluation finishes
* @param options
*/
declare function useAsyncState<Data, Params extends any[] = [], Shallow extends boolean = true>(promise: Promise<Data> | ((...args: Params) => Promise<Data>), initialState: Data, options?: UseAsyncStateOptions<Shallow, Data>): UseAsyncStateReturn<Data, Params, Shallow>;
interface ToDataURLOptions {
/**
* MIME type
*/
type?: string | undefined;
/**
* Image quality of jpeg or webp
*/
quality?: any;
}
interface UseBase64ObjectOptions<T> {
serializer: (v: T) => string;
}
interface UseBase64Return {
base64: Ref<string>;
promise: Ref<Promise<string>>;
execute: () => Promise<string>;
}
declare function useBase64(target: MaybeComputedRef<string>): UseBase64Return;
declare function useBase64(target: MaybeComputedRef<Blob>): UseBase64Return;
declare function useBase64(target: MaybeComputedRef<ArrayBuffer>): UseBase64Return;
declare function useBase64(target: MaybeComputedRef<HTMLCanvasElement>, options?: ToDataURLOptions): UseBase64Return;
declare function useBase64(target: MaybeComputedRef<HTMLImageElement>, options?: ToDataURLOptions): UseBase64Return;
declare function useBase64<T extends Record<string, unknown>>(target: MaybeComputedRef<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
declare function useBase64<T extends Map<string, unknown>>(target: MaybeComputedRef<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
declare function useBase64<T extends Set<unknown>>(target: MaybeComputedRef<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
declare function useBase64<T>(target: MaybeComputedRef<T[]>, options?: UseBase64ObjectOptions<T[]>): UseBase64Return;
interface BatteryManager extends EventTarget {
charging: boolean;
chargingTime: number;
dischargingTime: number;
level: number;
}
/**
* Reactive Battery Status API.
*
* @see https://vueuse.org/useBattery
* @param options
*/
declare function useBattery({ navigator }?: ConfigurableNavigator): {
isSupported: vue_demi.Ref<boolean>;
charging: vue_demi.Ref<boolean>;
chargingTime: vue_demi.Ref<number>;
dischargingTime: vue_demi.Ref<number>;
level: vue_demi.Ref<number>;
};
type UseBatteryReturn = ReturnType<typeof useBattery>;
interface UseBluetoothRequestDeviceOptions {
/**
*
* An array of BluetoothScanFilters. This filter consists of an array
* of BluetoothServiceUUIDs, a name parameter, and a namePrefix parameter.
*
*/
filters?: BluetoothLEScanFilter[] | undefined;
/**
*
* An array of BluetoothServiceUUIDs.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/BluetoothRemoteGATTService/uuid
*
*/
optionalServices?: BluetoothServiceUUID[] | undefined;
}
interface UseBluetoothOptions extends UseBluetoothRequestDeviceOptions, ConfigurableNavigator {
/**
*
* A boolean value indicating that the requesting script can accept all Bluetooth
* devices. The default is false.
*
* !! This may result in a bunch of unrelated devices being shown
* in the chooser and energy being wasted as there are no filters.
*
*
* Use it with caution.
*
* @default false
*
*/
acceptAllDevices?: boolean;
}
declare function useBluetooth(options?: UseBluetoothOptions): UseBluetoothReturn;
interface UseBluetoothReturn {
isSupported: Ref<boolean>;
isConnected: ComputedRef<boolean>;
device: Ref<BluetoothDevice | undefined>;
requestDevice: () => Promise<void>;
server: Ref<BluetoothRemoteGATTServer | undefined>;
error: Ref<unknown | null>;
}
/**
* Breakpoints from Tailwind V2
*
* @see https://tailwindcss.com/docs/breakpoints
*/
declare const breakpointsTailwind: {
sm: number;
md: number;
lg: number;
xl: number;
'2xl': number;
};
/**
* Breakpoints from Bootstrap V5
*
* @see https://getbootstrap.com/docs/5.0/layout/breakpoints
*/
declare const breakpointsBootstrapV5: {
sm: number;
md: number;
lg: number;
xl: number;
xxl: number;
};
/**
* Breakpoints from Vuetify V2
*
* @see https://vuetifyjs.com/en/features/breakpoints
*/
declare const breakpointsVuetify: {
xs: number;
sm: number;
md: number;
lg: number;
};
/**
* Breakpoints from Ant Design
*
* @see https://ant.design/components/layout/#breakpoint-width
*/
declare const breakpointsAntDesign: {
xs: number;
sm: number;
md: number;
lg: number;
xl: number;
xxl: number;
};
/**
* Breakpoints from Quasar V2
*
* @see https://quasar.dev/style/breakpoints
*/
declare const breakpointsQuasar: {
xs: number;
sm: number;
md: number;
lg: number;
};
/**
* Sematic Breakpoints
*/
declare const breakpointsSematic: {
mobileS: number;
mobileM: number;
mobileL: number;
tablet: number;
laptop: number;
laptopL: number;
desktop4K: number;
};
/**
* Breakpoints from Master CSS
*
* @see https://docs.master.co/css/breakpoints
*/
declare const breakpointsMasterCss: {
'3xs': number;
'2xs': number;
xs: number;
sm: number;
md: number;
lg: number;
xl: number;
'2xl': number;
'3xl': number;
'4xl': number;
};
type Breakpoints<K extends string = string> = Record<K, number | string>;
/**
* Reactively viewport breakpoints
*
* @see https://vueuse.org/useBreakpoints
* @param options
*/
declare function useBreakpoints<K extends string>(breakpoints: Breakpoints<K>, options?: ConfigurableWindow): {
greater(k: K): Ref<boolean>;
greaterOrEqual: (k: K) => Ref<boolean>;
smaller(k: K): Ref<boolean>;
smallerOrEqual(k: K): Ref<boolean>;
between(a: K, b: K): Ref<boolean>;
isGreater(k: K): boolean;
isGreaterOrEqual(k: K): boolean;
isSmaller(k: K): boolean;
isSmallerOrEqual(k: K): boolean;
isInBetween(a: K, b: K): boolean;
} & Record<K, Ref<boolean>>;
type UseBreakpointsReturn<K extends string = string> = {
greater: (k: K) => Ref<boolean>;
greaterOrEqual: (k: K) => Ref<boolean>;
smaller(k: K): Ref<boolean>;
smallerOrEqual: (k: K) => Ref<boolean>;
between(a: K, b: K): Ref<boolean>;
isGreater(k: K): boolean;
isGreaterOrEqual(k: K): boolean;
isSmaller(k: K): boolean;
isSmallerOrEqual(k: K): boolean;
isInBetween(a: K, b: K): boolean;
} & Record<K, Ref<boolean>>;
interface UseBroadcastChannelOptions extends ConfigurableWindow {
/**
* The name of the channel.
*/
name: string;
}
/**
* Reactive BroadcastChannel
*
* @see https://vueuse.org/useBroadcastChannel
* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel
* @param options
*
*/
declare const useBroadcastChannel: <D, P>(options: UseBroadcastChannelOptions) => UseBroadcastChannelReturn<D, P>;
interface UseBroadcastChannelReturn<D, P> {
isSupported: Ref<boolean>;
channel: Ref<BroadcastChannel | undefined>;
data: Ref<D>;
post: (data: P) => void;
close: () => void;
error: Ref<Event | null>;
isClosed: Ref<boolean>;
}
interface BrowserLocationState {
trigger: string;
state?: any;
length?: number;
hash?: string;
host?: string;
hostname?: string;
href?: string;
origin?: string;
pathname?: string;
port?: string;
protocol?: string;
search?: string;
}
/**
* Reactive browser location.
*
* @see https://vueuse.org/useBrowserLocation
* @param options
*/
declare function useBrowserLocation({ window }?: ConfigurableWindow): vue_demi.Ref<{
trigger: string;
state?: any;
length?: number | undefined;
hash?: string | undefined;
host?: string | undefined;
hostname?: string | undefined;
href?: string | undefined;
origin?: string | undefined;
pathname?: string | undefined;
port?: string | undefined;
protocol?: string | undefined;
search?: string | undefined;
}>;
type UseBrowserLocationReturn = ReturnType<typeof useBrowserLocation>;
declare function useCached<T>(refValue: Ref<T>, comparator?: (a: T, b: T) => boolean, watchOptions?: WatchOptions): Ref<T>;
interface UseClipboardOptions<Source> extends ConfigurableNavigator {
/**
* Enabled reading for clipboard
*
* @default false
*/
read?: boolean;
/**
* Copy source
*/
source?: Source;
/**
* Milliseconds to reset state of `copied` ref
*
* @default 1500
*/
copiedDuring?: number;
/**
* Whether fallback to document.execCommand('copy') if clipboard is undefined.
*
* @default false
*/
legacy?: boolean;
}
interface UseClipboardReturn<Optional> {
isSupported: Ref<boolean>;
text: ComputedRef<string>;
copied: ComputedRef<boolean>;
copy: Optional extends true ? (text?: string) => Promise<void> : (text: string) => Promise<void>;
}
/**
* Reactive Clipboard API.
*
* @see https://vueuse.org/useClipboard
* @param options
*/
declare function useClipboard(options?: UseClipboardOptions<undefined>): UseClipboardReturn<false>;
declare function useClipboard(options: UseClipboardOptions<MaybeComputedRef<string>>): UseClipboardReturn<true>;
interface UseClonedOptions<T = any> extends WatchOptions {
/**
* Custom clone function.
*
* By default, it use `JSON.parse(JSON.stringify(value))` to clone.
*/
clone?: (source: T) => T;
/**
* Manually sync the ref
*
* @default false
*/
manual?: boolean;
}
interface UseClonedReturn<T> {
/**
* Cloned ref
*/
cloned: ComputedRef<T>;
/**
* Sync cloned data with source manually
*/
sync: () => void;
}
type CloneFn<F, T = F> = (x: F) => T;
declare function cloneFnJSON<T>(source: T): T;
declare function useCloned<T>(source: MaybeComputedRef<T>, options?: UseClonedOptions): {
cloned: vue_demi.Ref<vue_demi.UnwrapRef<T>>;
sync: () => void;
};
interface StorageLikeAsync {
getItem(key: string): Awaitable<string | null>;
setItem(key: string, value: string): Awaitable<void>;
removeItem(key: string): Awaitable<void>;
}
interface StorageLike {
getItem(key: string): string | null;
setItem(key: string, value: string): void;
removeItem(key: string): void;
}
/**
* @experimental The API is not finalized yet. It might not follow semver.
*/
interface SSRHandlersMap {
getDefaultStorage: () => StorageLike | undefined;
getDefaultStorageAsync: () => StorageLikeAsync | undefined;
updateHTMLAttrs: (selector: string, attribute: string, value: string) => void;
}
declare function getSSRHandler<T extends keyof SSRHandlersMap>(key: T, fallback: SSRHandlersMap[T]): SSRHandlersMap[T];
declare function getSSRHandler<T extends keyof SSRHandlersMap>(key: T, fallback: SSRHandlersMap[T] | undefined): SSRHandlersMap[T] | undefined;
declare function setSSRHandler<T extends keyof SSRHandlersMap>(key: T, fn: SSRHandlersMap[T]): void;
interface Serializer<T> {
read(raw: string): T;
write(value: T): string;
}
interface SerializerAsync<T> {
read(raw: string): Awaitable<T>;
write(value: T): Awaitable<string>;
}
declare const StorageSerializers: Record<'boolean' | 'object' | 'number' | 'any' | 'string' | 'map' | 'set' | 'date', Serializer<any>>;
declare const customStorageEventName = "vueuse-storage";
interface StorageEventLike {
storageArea: StorageLike | null;
key: StorageEvent['key'];
oldValue: StorageEvent['oldValue'];
newValue: StorageEvent['newValue'];
}
interface UseStorageOptions<T> extends ConfigurableEventFilter, ConfigurableWindow, ConfigurableFlush {
/**
* Watch for deep changes
*
* @default true
*/
deep?: boolean;
/**
* Listen to storage changes, useful for multiple tabs application
*
* @default true
*/
listenToStorageChanges?: boolean;
/**
* Write the default value to the storage when it does not exist
*
* @default true
*/
writeDefaults?: boolean;
/**
* Merge the default value with the value read from the storage.
*
* When setting it to true, it will perform a **shallow merge** for objects.
* You can pass a function to perform custom merge (e.g. deep merge), for example:
*
* @default false
*/
mergeDefaults?: boolean | ((storageValue: T, defaults: T) => T);
/**
* Custom data serialization
*/
serializer?: Serializer<T>;
/**
* On error callback
*
* Default log error to `console.error`
*/
onError?: (error: unknown) => void;
/**
* Use shallow ref as reference
*
* @default false
*/
shallow?: boolean;
}
declare function useStorage(key: string, defaults: MaybeComputedRef<string>, storage?: StorageLike, options?: UseStorageOptions<string>): RemovableRef<string>;
declare function useStorage(key: string, defaults: MaybeComputedRef<boolean>, storage?: StorageLike, options?: UseStorageOptions<boolean>): RemovableRef<boolean>;
declare function useStorage(key: string, defaults: MaybeComputedRef<number>, storage?: StorageLike, options?: UseStorageOptions<number>): RemovableRef<number>;
declare function useStorage<T>(key: string, defaults: MaybeComputedRef<T>, storage?: StorageLike, options?: UseStorageOptions<T>): RemovableRef<T>;
declare function useStorage<T = unknown>(key: string, defaults: MaybeComputedRef<null>, storage?: StorageLike, options?: UseStorageOptions<T>): RemovableRef<T>;
type BasicColorSchema = 'light' | 'dark' | 'auto';
interface UseColorModeOptions<T extends string = BasicColorSchema> extends UseStorageOptions<T | BasicColorSchema> {
/**
* CSS Selector for the target element applying to
*
* @default 'html'
*/
selector?: string;
/**
* HTML attribute applying the target element
*
* @default 'class'
*/
attribute?: string;
/**
* The initial color mode
*
* @default 'auto'
*/
initialValue?: T | BasicColorSchema;
/**
* Prefix when adding value to the attribute
*/
modes?: Partial<Record<T | BasicColorSchema, string>>;
/**
* A custom handler for handle the updates.
* When specified, the default behavior will be overridden.
*
* @default undefined
*/
onChanged?: (mode: T | BasicColorSchema, defaultHandler: ((mode: T | BasicColorSchema) => void)) => void;
/**
* Custom storage ref
*
* When provided, `useStorage` will be skipped
*/
storageRef?: Ref<T | BasicColorSchema>;
/**
* Key to persist the data into localStorage/sessionStorage.
*
* Pass `null` to disable persistence
*
* @default 'vueuse-color-scheme'
*/
storageKey?: string | null;
/**
* Storage object, can be localStorage or sessionStorage
*
* @default localStorage
*/
storage?: StorageLike;
/**
* Emit `auto` mode from state
*
* When set to `true`, preferred mode won't be translated into `light` or `dark`.
* This is useful when the fact that `auto` mode was selected needs to be known.
*
* @default undefined
*/
emitAuto?: boolean;
}
/**
* Reactive color mode with auto data persistence.
*
* @see https://vueuse.org/useColorMode
* @param options
*/
declare function useColorMode<T extends string = BasicColorSchema>(options?: UseColorModeOptions<T>): vue_demi.WritableComputedRef<BasicColorSchema | T>;
type UseConfirmDialogRevealResult<C, D> = {
data?: C;
isCanceled: false;
} | {
data?: D;
isCanceled: true;
};
interface UseConfirmDialogReturn<RevealData, ConfirmData, CancelData> {
/**
* Revealing state
*/
isRevealed: ComputedRef<boolean>;
/**
* Opens the dialog.
* Create promise and return it. Triggers `onReveal` hook.
*/
reveal: (data?: RevealData) => Promise<UseConfirmDialogRevealResult<ConfirmData, CancelData>>;
/**
* Confirms and closes the dialog. Triggers a callback inside `onConfirm` hook.
* Resolves promise from `reveal()` with `data` and `isCanceled` ref with `false` value.
* Can accept any data and to pass it to `onConfirm` hook.
*/
confirm: (data?: ConfirmData) => void;
/**
* Cancels and closes the dialog. Triggers a callback inside `onCancel` hook.
* Resolves promise from `reveal()` with `data` and `isCanceled` ref with `true` value.
* Can accept any data and to pass it to `onCancel` hook.
*/
cancel: (data?: CancelData) => void;
/**
* Event Hook to be triggered right before dialog creating.
*/
onReveal: EventHookOn<RevealData>;
/**
* Event Hook to be called on `confirm()`.
* Gets data object from `confirm` function.
*/
onConfirm: EventHookOn<ConfirmData>;
/**
* Event Hook to be called on `cancel()`.
* Gets data object from `cancel` function.
*/
onCancel: EventHookOn<CancelData>;
}
/**
* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.
*
* @see https://vueuse.org/useConfirmDialog/
* @param revealed `boolean` `ref` that handles a modal window
*/
declare function useConfirmDialog<RevealData = any, ConfirmData = any, CancelData = any>(revealed?: Ref<boolean>): UseConfirmDialogReturn<RevealData, ConfirmData, CancelData>;
interface UseCssVarOptions extends ConfigurableWindow {
initialValue?: string;
}
/**
* Manipulate CSS variables.
*
* @see https://vueuse.org/useCssVar
* @param prop
* @param target
* @param initialValue
* @param options
*/
declare function useCssVar(prop: MaybeComputedRef<string>, target?: MaybeElementRef, { window, initialValue }?: UseCssVarOptions): vue_demi.Ref<string>;
declare function useCurrentElement<T extends Element = Element>(): _vueuse_shared.ComputedRefWithControl<T>;
interface UseCycleListOptions<T> {
/**
* The initial value of the state.
* A ref can be provided to reuse.
*/
initialValue?: MaybeRef<T>;
/**
* The default index when
*/
fallbackIndex?: number;
/**
* Custom function to get the index of the current value.
*/
getIndexOf?: (value: T, list: T[]) => number;
}
/**
* Cycle through a list of items
*
* @see https://vueuse.org/useCycleList
*/
declare function useCycleList<T>(list: T[], options?: UseCycleListOptions<T>): UseCycleListReturn<T>;
interface UseCycleListReturn<T> {
state: Ref<T>;
index: Ref<number>;
next: (n?: number) => T;
prev: (n?: number) => T;
}
interface UseDarkOptions extends Omit<UseColorModeOptions<BasicColorSchema>, 'modes' | 'onChanged'> {
/**
* Value applying to the target element when isDark=true
*
* @default 'dark'
*/
valueDark?: string;
/**
* Value applying to the target element when isDark=false
*
* @default ''
*/
valueLight?: string;
/**
* A custom handler for handle the updates.
* When specified, the default behavior will be overridden.
*
* @default undefined
*/
onChanged?: (isDark: boolean) => void;
}
/**
* Reactive dark mode with auto data persistence.
*
* @see https://vueuse.org/useDark
* @param options
*/
declare function useDark(options?: UseDarkOptions): vue_demi.WritableComputedRef<boolean>;
interface UseRefHistoryRecord<T> {
snapshot: T;
timestamp: number;
}
interface UseManualRefHistoryOptions<Raw, Serialized = Raw> {
/**
* Maximum number of history to be kept. Default to unlimited.
*/
capacity?: number;
/**
* Clone when taking a snapshot, shortcut for dump: JSON.parse(JSON.stringify(value)).
* Default to false
*
* @default false
*/
clone?: boolean | CloneFn<Raw>;
/**
* Serialize data into the history
*/
dump?: (v: Raw) => Serialized;
/**
* Deserialize data from the history
*/
parse?: (v: Serialized) => Raw;
/**
* Deserialize data from the history
*/
setSource?: (source: Ref<Raw>, v: Raw) => void;
}
interface UseManualRefHistoryReturn<Raw, Serialized> {
/**
* Bypassed tracking ref from the argument
*/
source: Ref<Raw>;
/**
* An array of history records for undo, newest comes to first
*/
history: Ref<UseRefHistoryRecord<Serialized>[]>;
/**
* Last history point, source can be different if paused
*/
last: Ref<UseRefHistoryRecord<Serialized>>;
/**
* Same as {@link UseManualRefHistoryReturn.history | history}
*/
undoStack: Ref<UseRefHistoryRecord<Serialized>[]>;
/**
* Records array for redo
*/
redoStack: Ref<UseRefHistoryRecord<Serialized>[]>;
/**
* A ref representing if undo is possible (non empty undoStack)
*/
canUndo: Ref<boolean>;
/**
* A ref representing if redo is possible (non empty redoStack)
*/
canRedo: Ref<boolean>;
/**
* Undo changes
*/
undo: () => void;
/**
* Redo changes
*/
redo: () => void;
/**
* Clear all the history
*/
clear: () => void;
/**
* Create new a new history record
*/
commit: () => void;
/**
* Reset ref's value with latest history
*/
reset: () => void;
}
/**
* Track the change history of a ref, also provides undo and redo functionality.
*
* @see https://vueuse.org/useManualRefHistory
* @param source
* @param options
*/
declare function useManualRefHistory<Raw, Serialized = Raw>(source: Ref<Raw>, options?: UseManualRefHistoryOptions<Raw, Serialized>): UseManualRefHistoryReturn<Raw, Serialized>;
interface UseRefHistoryOptions<Raw, Serialized = Raw> extends ConfigurableEventFilter {
/**
* Watch for deep changes, default to false
*
* When set to true, it will also create clones for values store in the history
*
* @default false
*/
deep?: boolean;
/**
* The flush option allows for greater control over the timing of a history point, default to 'pre'
*
* Possible values: 'pre', 'post', 'sync'
* It works in the same way as the flush option in watch and watch effect in vue reactivity
*
* @default 'pre'
*/
flush?: 'pre' | 'post' | 'sync';
/**
* Maximum number of history to be kept. Default to unlimited.
*/
capacity?: number;
/**
* Clone when taking a snapshot, shortcut for dump: JSON.parse(JSON.stringify(value)).
* Default to false
*
* @default false
*/
clone?: boolean | CloneFn<Raw>;
/**
* Serialize data into the history
*/
dump?: (v: Raw) => Serialized;
/**
* Deserialize data from the history
*/
parse?: (v: Serialized) => Raw;
}
interface UseRefHistoryReturn<Raw, Serialized> extends UseManualRefHistoryReturn<Raw, Serialized> {
/**
* A ref representing if the tracking is enabled
*/
isTracking: Ref<boolean>;
/**
* Pause change tracking
*/
pause(): void;
/**
* Resume change tracking
*
* @param [commit] if true, a history record will be create after resuming
*/
resume(commit?: boolean): void;
/**
* A sugar for auto pause and auto resuming within a function scope
*
* @param fn
*/
batch(fn: (cancel: Fn) => void): void;
/**
* Clear the data and stop the watch
*/
dispose(): void;
}
/**
* Track the change history of a ref, also provides undo and redo functionality.
*
* @see https://vueuse.org/useRefHistory
* @param source
* @param options
*/
declare function useRefHistory<Raw, Serialized = Raw>(source: Ref<Raw>, options?: UseRefHistoryOptions<Raw, Serialized>): UseRefHistoryReturn<Raw, Serialized>;
/**
* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.
*
* @see https://vueuse.org/useDebouncedRefHistory
* @param source
* @param options
*/
declare function useDebouncedRefHistory<Raw, Serialized = Raw>(source: Ref<Raw>, options?: Omit<UseRefHistoryOptions<Raw, Serialized>, 'eventFilter'> & {
debounce?: MaybeComputedRef<number>;
}): UseRefHistoryReturn<Raw, Serialized>;
interface DeviceMotionOptions extends ConfigurableWindow, ConfigurableEventFilter {
}
/**
* Reactive DeviceMotionEvent.
*
* @see https://vueuse.org/useDeviceMotion
* @param options
*/
declare function useDeviceMotion(options?: DeviceMotionOptions): {
acceleration: Ref<DeviceMotionEventAcceleration | null>;
accelerationIncludingGravity: Ref<DeviceMotionEventAcceleration | null>;
rotationRate: Ref<DeviceMotionEventRotationRate | null>;
interval: Ref<number>;
};
type UseDeviceMotionReturn = ReturnType<typeof useDeviceMotion>;
/**
* Reactive DeviceOrientationEvent.
*
* @see https://vueuse.org/useDeviceOrientation
* @param options
*/
declare function useDeviceOrientation(options?: ConfigurableWindow): {
isSupported: Ref<boolean>;
isAbsolute: Ref<boolean>;
alpha: Ref<number | null>;
beta: Ref<number | null>;
gamma: Ref<number | null>;
};
type UseDeviceOrientationReturn = ReturnType<typeof useDeviceOrientation>;
/**
* Reactively track `window.devicePixelRatio`.
*
* @see https://vueuse.org/useDevicePixelRatio
* @param options
*/
declare function useDevicePixelRatio({ window, }?: ConfigurableWindow): {
pixelRatio: vue_demi.Ref<number>;
};
type UseDevicePixelRatioReturn = ReturnType<typeof useDevicePixelRatio>;
interface UseDevicesListOptions extends ConfigurableNavigator {
onUpdated?: (devices: MediaDeviceInfo[]) => void;
/**
* Request for permissions immediately if it's not granted,
* otherwise label and deviceIds could be empty
*
* @default false
*/
requestPermissions?: boolean;
/**
* Request for types of media permissions
*
* @default { audio: true, video: true }
*/
constraints?: MediaStreamConstraints;
}
interface UseDevicesListReturn {
/**
* All devices
*/
devices: Ref<MediaDeviceInfo[]>;
videoInputs: ComputedRef<MediaDeviceInfo[]>;
audioInputs: ComputedRef<MediaDeviceInfo[]>;
audioOutputs: ComputedRef<MediaDeviceInfo[]>;
permissionGranted: Ref<boolean>;
ensurePermissions: () => Promise<boolean>;
isSupported: Ref<boolean>;
}
/**
* Reactive `enumerateDevices` listing available input/output devices
*
* @see https://vueuse.org/useDevicesList
* @param options
*/
declare function useDevicesList(options?: UseDevicesListOptions): UseDevicesListReturn;
interface UseDisplayMediaOptions extends ConfigurableNavigator {
/**
* If the stream is enabled
* @default false
*/
enabled?: MaybeRef<boolean>;
/**
* If the stream video media constraints
*/
video?: boolean | MediaTrackConstraints | undefined;
/**
* If the stream audio media constraints
*/
audio?: boolean | MediaTrackConstraints | undefined;
}
/**
* Reactive `mediaDevices.getDisplayMedia` streaming
*
* @see https://vueuse.org/useDisplayMedia
* @param options
*/
declare function useDisplayMedia(options?: UseDisplayMediaOptions): {
isSupported: Ref<boolean>;
stream: Ref<MediaStream | undefined>;
start: () => Promise<MediaStream | undefined>;
stop: () => void;
enabled: Ref<boolean>;
};
type UseDisplayMediaReturn = ReturnType<typeof useDisplayMedia>;
/**
* Reactively track `document.visibilityState`.
*
* @see https://vueuse.org/useDocumentVisibility
* @param options
*/
declare function useDocumentVisibility({ document }?: ConfigurableDocument): Ref<DocumentVisibilityState>;
interface Position {
x: number;
y: number;
}
interface RenderableComponent {
/**
* The element that the component should be rendered as
*
* @default 'div'
*/
as?: Object | string;
}
type PointerType = 'mouse' | 'touch' | 'pen';
interface UseDraggableOptions {
/**
* Only start the dragging when click on the element directly
*
* @default false
*/
exact?: MaybeComputedRef<boolean>;
/**
* Prevent events defaults
*
* @default false
*/
preventDefault?: MaybeComputedRef<boolean>;
/**
* Prevent events propagation
*
* @default false
*/
stopPropagation?: MaybeComputedRef<boolean>;
/**
* Element to attach `pointermove` and `pointerup` events to.
*
* @default window
*/
draggingElement?: MaybeComputedRef<HTMLElement | SVGElement | Window | Document | null | undefined>;
/**
* Handle that triggers the drag event
*
* @default target
*/
handle?: MaybeComputedRef<HTMLElement | SVGElement | null | undefined>;
/**
* Pointer types that listen to.
*
* @default ['mouse', 'touch', 'pen']
*/
pointerTypes?: PointerType[];
/**
* Initial position of the element.
*
* @default { x: 0, y: 0 }
*/
initialValue?: MaybeComputedRef<Position>;
/**
* Callback when the dragging starts. Return `false` to prevent dragging.
*/
onStart?: (position: Position, event: PointerEvent) => void | false;
/**
* Callback during dragging.
*/
onMove?: (position: Position, event: PointerEvent) => void;
/**
* Callback when dragging end.
*/
onEnd?: (position: Position, event: PointerEvent) => void;
}
/**
* Make elements draggable.
*
* @see https://vueuse.org/useDraggable
* @param target
* @param options
*/
declare function useDraggable(target: MaybeComputedRef<HTMLElement | SVGElement | null | undefined>, options?: UseDraggableOptions): {
position: vue_demi.Ref<{
x: number;
y: number;
}>;
isDragging: vue_demi.ComputedRef<boolean>;
style: vue_demi.ComputedRef<string>;
x: vue_demi.Ref<number>;
y: vue_demi.Ref<number>;
};
type UseDraggableReturn = ReturnType<typeof useDraggable>;
interface UseDropZoneReturn {
isOverDropZone: Ref<boolean>;
}
declare function useDropZone(target: MaybeComputedRef<HTMLElement | null | undefined>, onDrop?: (files: File[] | null) => void): UseDropZoneReturn;
interface UseElementBoundingOptions {
/**
* Reset values to 0 on component unmounted
*
* @default true
*/
reset?: boolean;
/**
* Listen to window resize event
*
* @default true
*/
windowResize?: boolean;
/**
* Listen to window scroll event
*
* @default true
*/
windowScroll?: boolean;
/**
* Immediately call update on component mounted
*
* @default true
*/
immediate?: boolean;
}
/**
* Reactive bounding box of an HTML element.
*
* @see https://vueuse.org/useElementBounding
* @param target
*/
declare function useElementBounding(target: MaybeComputedElementRef, options?: UseElementBoundingOptions): {
height: vue_demi.Ref<number>;
bottom: vue_demi.Ref<number>;
left: vue_demi.Ref<number>;
right: vue_demi.Ref<number>;
top: vue_demi.Ref<number>;
width: vue_demi.Ref<number>;
x: vue_demi.Ref<number>;
y: vue_demi.Ref<number>;
update: () => void;
};
type UseElementBoundingReturn = ReturnType<typeof useElementBounding>;
interface UseElementByPointOptions extends ConfigurableDocument {
x: MaybeComputedRef<number>;
y: MaybeComputedRef<number>;
}
/**
* Reactive element by point.
*
* @see https://vueuse.org/useElementByPoint
* @param options - UseElementByPointOptions
*/
declare function useElementByPoint(options: UseElementByPointOptions): {
isActive: Readonly<vue_demi.Ref<boolean>>;
pause: _vueuse_shared.Fn;
resume: _vueuse_shared.Fn;
element: vue_demi.Ref<HTMLElement | null>;
};
type UseElementByPointReturn = ReturnType<typeof useElementByPoint>;
interface UseElementHoverOptions extends ConfigurableWindow {
delayEnter?: number;
delayLeave?: number;
}
declare function useElementHover(el: MaybeComputedRef<EventTarget | null | undefined>, options?: UseElementHoverOptions): Ref<boolean>;
interface ResizeObserverSize {
readonly inlineSize: number;
readonly blockSize: number;
}
interface ResizeObserverEntry {
readonly target: Element;
readonly contentRect: DOMRectReadOnly;
readonly borderBoxSize?: ReadonlyArray<ResizeObserverSize>;
readonly contentBoxSize?: ReadonlyArray<ResizeObserverSize>;
readonly devicePixelContentBoxSize?: ReadonlyArray<ResizeObserverSize>;
}
type ResizeObserverCallback = (entries: ReadonlyArray<ResizeObserverEntry>, observer: ResizeObserver) => void;
interface UseResizeObserverOptions extends ConfigurableWindow {
/**
* Sets which box model the observer will observe changes to. Possible values
* are `content-box` (the default), `border-box` and `device-pixel-content-box`.
*
* @default 'content-box'
*/
box?: ResizeObserverBoxOptions;
}
declare class ResizeObserver {
constructor(callback: ResizeObserverCallback);
disconnect(): void;
observe(target: Element, options?: UseResizeObserverOptions): void;
unobserve(target: Element): void;
}
/**
* Reports changes to the dimensions of an Element's content or the border-box
*
* @see https://vueuse.org/useResizeObserver
* @param target
* @param callback
* @param options
*/
declare function useResizeObserver(target: MaybeComputedElementRef, callback: ResizeObserverCallback, options?: UseResizeObserverOptions): {
isSupported: vue_demi.Ref<boolean>;
stop: () => void;
};
type UseResizeObserverReturn = ReturnType<typeof useResizeObserver>;
interface ElementSize {
width: number;
height: number;
}
/**
* Reactive size of an HTML element.
*
* @see https://vueuse.org/useElementSize
* @param target
* @param callback
* @param options
*/
declare function useElementSize(target: MaybeComputedElementRef, initialSize?: ElementSize, options?: UseResizeObserverOptions): {
width: vue_demi.Ref<number>;
height: vue_demi.Ref<number>;
};
type UseElementSizeReturn = ReturnType<typeof useElementSize>;
interface UseElementVisibilityOptions extends ConfigurableWindow {
scrollTarget?: MaybeComputedRef<HTMLElement | undefined | null>;
}
/**
* Tracks the visibility of an element within the viewport.
*
* @see https://vueuse.org/useElementVisibility
* @param element
* @param options
*/
declare function useElementVisibility(element: MaybeComputedElementRef, { window, scrollTarget }?: UseElementVisibilityOptions): vue_demi.Ref<boolean>;
type EventBusListener<T = unknown, P = any> = (event: T, payload?: P) => void;
type EventBusEvents<T, P = any> = EventBusListener<T, P>[];
interface EventBusKey<T> extends Symbol {
}
type EventBusIdentifier<T = unknown> = EventBusKey<T> | string | number;
interface UseEventBusReturn<T, P> {
/**
* Subscribe to an event. When calling emit, the listeners will execute.
* @param listener watch listener.
* @returns a stop function to remove the current callback.
*/
on: (listener: EventBusListener<T, P>) => Fn;
/**
* Similar to `on`, but only fires once
* @param listener watch listener.
* @returns a stop function to remove the current callback.
*/
once: (listener: EventBusListener<T, P>) => Fn;
/**
* Emit an event, the corresponding event listeners will execute.
* @param event data sent.
*/
emit: (event?: T, payload?: P) => void;
/**
* Remove the corresponding listener.
* @param listener watch listener.
*/
off: (listener: EventBusListener<T>) => void;
/**
* Clear all events
*/
reset: () => void;
}
declare function useEventBus<T = unknown, P = any>(key: EventBusIdentifier<T>): UseEventBusReturn<T, P>;
interface InferEventTarget<Events> {
addEventListener(event: Events, fn?: any, options?: any): any;
removeEventListener(event: Events, fn?: any, options?: any): any;
}
type WindowEventName = keyof WindowEventMap;
type DocumentEventName = keyof DocumentEventMap;
interface GeneralEventListener<E = Event> {
(evt: E): void;
}
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 1: Omitted Window target
*
* @see https://vueuse.org/useEventListener
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof WindowEventMap>(event: Arrayable<E>, listener: Arrayable<(this: Window, ev: WindowEventMap[E]) => any>, options?: MaybeComputedRef<boolean | AddEventListenerOptions>): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 2: Explicitly Window target
*
* @see https://vueuse.org/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof WindowEventMap>(target: Window, event: Arrayable<E>, listener: Arrayable<(this: Window, ev: WindowEventMap[E]) => any>, options?: MaybeComputedRef<boolean | AddEventListenerOptions>): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 3: Explicitly Document target
*
* @see https://vueuse.org/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof DocumentEventMap>(target: DocumentOrShadowRoot, event: Arrayable<E>, listener: Arrayable<(this: Document, ev: DocumentEventMap[E]) => any>, options?: MaybeComputedRef<boolean | AddEventListenerOptions>): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 4: Custom event target with event type infer
*
* @see https://vueuse.org/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<Names extends string, EventType = Event>(target: InferEventTarget<Names>, event: Arrayable<Names>, listener: Arrayable<GeneralEventListener<EventType>>, options?: MaybeComputedRef<boolean | AddEventListenerOptions>): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 5: Custom event target fallback
*
* @see https://vueuse.org/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<EventType = Event>(target: MaybeComputedRef<EventTarget | null | undefined>, event: Arrayable<string>, listener: Arrayable<GeneralEventListener<EventType>>, options?: MaybeComputedRef<boolean | AddEventListenerOptions>): Fn;
type UseEventSourceOptions = EventSourceInit;
/**
* Reactive wrapper for EventSource.
*
* @see https://vueuse.org/useEventSource
* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource
* @param url
* @param events
* @param options
*/
declare function useEventSource(url: string, events?: Array<string>, options?: UseEventSourceOptions): {
eventSource: Ref<EventSource | null>;
event: Ref<string | null>;
data: Ref<string | null>;
status: Ref<"OPEN" | "CONNECTING" | "CLOSED">;
error: Ref<Event | null>;
close: () => void;
};
type UseEventSourceReturn = ReturnType<typeof useEventSource>;
interface EyeDropperOpenOptions {
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
*/
signal?: AbortSignal;
}
interface EyeDropper {
new (): EyeDropper;
open: (options?: EyeDropperOpenOptions) => Promise<{
sRGBHex: string;
}>;
[Symbol.toStringTag]: 'EyeDropper';
}
interface UseEyeDropperOptions {
/**
* Initial sRGBHex.
*
* @default ''
*/
initialValue?: string;
}
/**
* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)
*
* @see https://vueuse.org/useEyeDropper
* @param initialValue string
*/
declare function useEyeDropper(options?: UseEyeDropperOptions): {
isSupported: vue_demi.Ref<boolean>;
sRGBHex: vue_demi.Ref<string>;
open: (openOptions?: EyeDropperOpenOptions) => Promise<{
sRGBHex: string;
} | undefined>;
};
type UseEyeDropperReturn = ReturnType<typeof useEyeDropper>;
interface UseFaviconOptions extends ConfigurableDocument {
baseUrl?: string;
rel?: string;
}
/**
* Reactive favicon.
*
* @see https://vueuse.org/useFavicon
* @param newIcon
* @param options
*/
declare function useFavicon(newIcon: MaybeReadonlyRef<string | null | undefined>, options?: UseFaviconOptions): ComputedRef<string | null | undefined>;
declare function useFavicon(newIcon?: MaybeRef<string | null | undefined>, options?: UseFaviconOptions): Ref<string | null | undefined>;
type UseFaviconReturn = ReturnType<typeof useFavicon>;
interface UseFetchReturn<T> {
/**
* Indicates if the fetch request has finished
*/
isFinished: Ref<boolean>;
/**
* The statusCode of the HTTP fetch response
*/
statusCode: Ref<number | null>;
/**
* The raw response of the fetch response
*/
response: Ref<Response | null>;
/**
* Any fetch errors that may have occurred
*/
error: Ref<any>;
/**
* The fetch response body, may either be JSON or text
*/
data: Ref<T | null>;
/**
* Indicates if the request is currently being fetched.
*/
isFetching: Ref<boolean>;
/**
* Indicates if the fetch request is able to be aborted
*/
canAbort: ComputedRef<boolean>;
/**
* Indicates if the fetch request was aborted
*/
aborted: Ref<boolean>;
/**
* Abort the fetch request
*/
abort: Fn;
/**
* Manually call the fetch
* (default not throwing error)
*/
execute: (throwOnFailed?: boolean) => Promise<any>;
/**
* Fires after the fetch request has finished
*/
onFetchResponse: EventHookOn<Response>;
/**
* Fires after a fetch request error
*/
onFetchError: EventHookOn;
/**
* Fires after a fetch has completed
*/
onFetchFinally: EventHookOn;
get(): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
post(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
put(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
delete(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
patch(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
head(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
options(payload?: MaybeComputedRef<unknown>, type?: string): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
json<JSON = any>(): UseFetchReturn<JSON> & PromiseLike<UseFetchReturn<JSON>>;
text(): UseFetchReturn<string> & PromiseLike<UseFetchReturn<string>>;
blob(): UseFetchReturn<Blob> & PromiseLike<UseFetchReturn<Blob>>;
arrayBuffer(): UseFetchReturn<ArrayBuffer> & PromiseLike<UseFetchReturn<ArrayBuffer>>;
formData(): UseFetchReturn<FormData> & PromiseLike<UseFetchReturn<FormData>>;
}
type Combination = 'overwrite' | 'chain';
interface BeforeFetchContext {
/**
* The computed url of the current request
*/
url: string;
/**
* The request options of the current request
*/
options: RequestInit;
/**
* Cancels the current request
*/
cancel: Fn;
}
interface AfterFetchContext<T = any> {
response: Response;
data: T | null;
}
interface OnFetchErrorContext<T = any, E = any> {
error: E;
data: T | null;
}
interface UseFetchOptions {
/**
* Fetch function
*/
fetch?: typeof window.fetch;
/**
* Will automatically run fetch when `useFetch` is used
*
* @default true
*/
immediate?: boolean;
/**
* Will automatically refetch when:
* - the URL is changed if the URL is a ref
* - the payload is changed if the payload is a ref
*
* @default false
*/
refetch?: MaybeComputedRef<boolean>;
/**
* Initial data before the request finished
*
* @default null
*/
initialData?: any;
/**
* Timeout for abort request after number of millisecond
* `0` means use browser default
*
* @default 0
*/
timeout?: number;
/**
* Will run immediately before the fetch request is dispatched
*/
beforeFetch?: (ctx: BeforeFetchContext) => Promise<Partial<BeforeFetchContext> | void> | Partial<BeforeFetchContext> | void;
/**
* Will run immediately after the fetch request is returned.
* Runs after any 2xx response
*/
afterFetch?: (ctx: AfterFetchContext) => Promise<Partial<AfterFetchContext>> | Partial<AfterFetchContext>;
/**
* Will run immediately after the fetch request is returned.
* Runs after any 4xx and 5xx response
*/
onFetchError?: (ctx: {
data: any;
response: Response | null;
error: any;
}) => Promise<Partial<OnFetchErrorContext>> | Partial<OnFetchErrorContext>;
}
interface CreateFetchOptions {
/**
* The base URL that will be prefixed to all urls unless urls are absolute
*/
baseUrl?: MaybeComputedRef<string>;
/**
* Determine the inherit behavior for beforeFetch, afterFetch, onFetchError
* @default 'chain'
*/
combination?: Combination;
/**
* Default Options for the useFetch function
*/
options?: UseFetchOptions;
/**
* Options for the fetch request
*/
fetchOptions?: RequestInit;
}
declare function createFetch(config?: CreateFetchOptions): typeof useFetch;
declare function useFetch<T>(url: MaybeComputedRef<string>): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
declare function useFetch<T>(url: MaybeComputedRef<string>, useFetchOptions: UseFetchOptions): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
declare function useFetch<T>(url: MaybeComputedRef<string>, options: RequestInit, useFetchOptions?: UseFetchOptions): UseFetchReturn<T> & PromiseLike<UseFetchReturn<T>>;
interface UseFileDialogOptions extends ConfigurableDocument {
/**
* @default true
*/
multiple?: boolean;
/**
* @default '*'
*/
accept?: string;
/**
* Select the input source for the capture file.
* @see [HTMLInputElement Capture](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
*/
capture?: string;
}
interface UseFileDialogReturn {
files: Ref<FileList | null>;
open: (localOptions?: Partial<UseFileDialogOptions>) => void;
reset: () => void;
}
/**
* Open file dialog with ease.
*
* @see https://vueuse.org/useFileDialog
* @param options
*/
declare function useFileDialog(options?: UseFileDialogOptions): UseFileDialogReturn;
/**
* window.showOpenFilePicker parameters
* @see https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker#parameters
*/
interface FileSystemAccessShowOpenFileOptions {
multiple?: boolean;
types?: Array<{
description?: string;
accept: Record<string, string[]>;
}>;
excludeAcceptAllOption?: boolean;
}
/**
* window.showSaveFilePicker parameters
* @see https://developer.mozilla.org/en-US/docs/Web/API/window/showSaveFilePicker#parameters
*/
interface FileSystemAccessShowSaveFileOptions {
suggestedName?: string;
types?: Array<{
description?: string;
accept: Record<string, string[]>;
}>;
excludeAcceptAllOption?: boolean;
}
/**
* FileHandle
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle
*/
interface FileSystemFileHandle {
getFile: () => Promise<File>;
createWritable: () => FileSystemWritableFileStream;
}
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream
*/
interface FileSystemWritableFileStream extends WritableStream {
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/write
*/
write: FileSystemWritableFileStreamWrite;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/seek
*/
seek: (position: number) => Promise<void>;
/**
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/truncate
*/
truncate: (size: number) => Promise<void>;
}
/**
* FileStream.write
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/write
*/
interface FileSystemWritableFileStreamWrite {
(data: string | BufferSource | Blob): Promise<void>;
(options: {
type: 'write';
position: number;
data: string | BufferSource | Blob;
}): Promise<void>;
(options: {
type: 'seek';
position: number;
}): Promise<void>;
(options: {
type: 'truncate';
size: number;
}): Promise<void>;
}
/**
* FileStream.write
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/write
*/
type FileSystemAccessWindow = Window & {
showSaveFilePicker: (options: FileSystemAccessShowSaveFileOptions) => Promise<FileSystemFileHandle>;
showOpenFilePicker: (options: FileSystemAccessShowOpenFileOptions) => Promise<FileSystemFileHandle[]>;
};
type UseFileSystemAccessCommonOptions = Pick<FileSystemAccessShowOpenFileOptions, 'types' | 'excludeAcceptAllOption'>;
type UseFileSystemAccessShowSaveFileOptions = Pick<FileSystemAccessShowSaveFileOptions, 'suggestedName'>;
type UseFileSystemAccessOptions = ConfigurableWindow & UseFileSystemAccessCommonOptions & {
/**
* file data type
*/
dataType?: MaybeComputedRef<'Text' | 'ArrayBuffer' | 'Blob'>;
};
/**
* Create and read and write local files.
* @see https://vueuse.org/useFileSystemAccess
* @param options
*/
declare function useFileSystemAccess(options: UseFileSystemAccessOptions & {
dataType: 'Text';
}): UseFileSystemAccessReturn<string>;
declare function useFileSystemAccess(options: UseFileSystemAccessOptions & {
dataType: 'ArrayBuffer';
}): UseFileSystemAccessReturn<ArrayBuffer>;
declare function useFileSystemAccess(options: UseFileSystemAccessOptions & {
dataType: 'Blob';
}): UseFileSystemAccessReturn<Blob>;
declare function useFileSystemAccess(options: UseFileSystemAccessOptions): UseFileSystemAccessReturn<string | ArrayBuffer | Blob>;
interface UseFileSystemAccessReturn<T = string> {
isSupported: Ref<boolean>;
data: Ref<T | undefined>;
file: Ref<File | undefined>;
fileName: Ref<string>;
fileMIME: Ref<string>;
fileSize: Ref<number>;
fileLastModified: Ref<number>;
open: (_options?: UseFileSystemAccessCommonOptions) => Awaitable<void>;
create: (_options?: UseFileSystemAccessShowSaveFileOptions) => Awaitable<void>;
save: (_options?: UseFileSystemAccessShowSaveFileOptions) => Awaitable<void>;
saveAs: (_options?: UseFileSystemAccessShowSaveFileOptions) => Awaitable<void>;
updateData: () => Awaitable<void>;
}
interface UseFocusOptions extends ConfigurableWindow {
/**
* Initial value. If set true, then focus will be set on the target
*
* @default false
*/
initialValue?: boolean;
}
interface UseFocusReturn {
/**
* If read as true, then the element has focus. If read as false, then the element does not have focus
* If set to true, then the element will be focused. If set to false, the element will be blurred.
*/
focused: Ref<boolean>;
}
/**
* Track or set the focus state of a DOM element.
*
* @see https://vueuse.org/useFocus
* @param target The target element for the focus and blur events.
* @param options
*/
declare function useFocus(target: MaybeElementRef, options?: UseFocusOptions): UseFocusReturn;
interface UseFocusWithinReturn {
/**
* True if the element or any of its descendants are focused
*/
focused: ComputedRef<boolean>;
}
/**
* Track if focus is contained within the target element
*
* @see https://vueuse.org/useFocusWithin
* @param target The target element to track
* @param options Focus within options
*/
declare function useFocusWithin(target: MaybeElementRef, options?: ConfigurableWindow): UseFocusWithinReturn;
interface UseFpsOptions {
/**
* Calculate the FPS on every x frames.
* @default 10
*/
every?: number;
}
declare function useFps(options?: UseFpsOptions): Ref<number>;
interface UseFullscreenOptions extends ConfigurableDocument {
/**
* Automatically exit fullscreen when component is unmounted
*
* @default false
*/
autoExit?: boolean;
}
/**
* Reactive Fullscreen API.
*
* @see https://vueuse.org/useFullscreen
* @param target
* @param options
*/
declare function useFullscreen(target?: MaybeElementRef, options?: UseFullscreenOptions): {
isSupported: vue_demi.Ref<boolean>;
isFullscreen: vue_demi.Ref<boolean>;
enter: () => Promise<void>;
exit: () => Promise<void>;
toggle: () => Promise<void>;
};
type UseFullscreenReturn = ReturnType<typeof useFullscreen>;
interface UseGamepadOptions extends ConfigurableWindow, ConfigurableNavigator {
}
/**
* Maps a standard standard gamepad to an Xbox 360 Controller.
*/
declare function mapGamepadToXbox360Controller(gamepad: Ref<Gamepad | undefined>): vue_demi.ComputedRef<{
buttons: {
a: GamepadButton;
b: GamepadButton;
x: GamepadButton;
y: GamepadButton;
};
bumper: {
left: GamepadButton;
right: GamepadButton;
};
triggers: {
left: GamepadButton;
right: GamepadButton;
};
stick: {
left: {
horizontal: number;
vertical: number;
button: GamepadButton;
};
right: {
horizontal: number;
vertical: number;
button: GamepadButton;
};
};
dpad: {
up: GamepadButton;
down: GamepadButton;
left: GamepadButton;
right: GamepadButton;
};
back: GamepadButton;
start: GamepadButton;
} | null>;
declare function useGamepad(options?: UseGamepadOptions): {
isSupported: Ref<boolean>;
onConnected: _vueuse_shared.EventHookOn<number>;
onDisconnected: _vueuse_shared.EventHookOn<number>;
gamepads: Ref<{
readonly axes: readonly number[];
readonly buttons: readonly {
readonly pressed: boolean;
readonly touched: boolean;
readonly value: number;
}[];
readonly connected: boolean;
readonly hapticActuators: readonly {
readonly type: "vibration";
}[];
readonly id: string;
readonly index: number;
readonly mapping: GamepadMappingType;
readonly timestamp: number;
}[]>;
pause: _vueuse_shared.Fn;
resume: _vueuse_shared.Fn;
isActive: Readonly<Ref<boolean>>;
};
type UseGamepadReturn = ReturnType<typeof useGamepad>;
interface UseGeolocationOptions extends Partial<PositionOptions>, ConfigurableNavigator {
immediate?: boolean;
}
/**
* Reactive Geolocation API.
*
* @see https://vueuse.org/useGeolocation
* @param options
*/
declare function useGeolocation(options?: UseGeolocationOptions): {
isSupported: Ref<boolean>;
coords: Ref<GeolocationCoordinates>;
locatedAt: Ref<number | null>;
error: Ref<{
readonly code: number;
readonly message: string;
readonly PERMISSION_DENIED: number;
readonly POSITION_UNAVAILABLE: number;
readonly TIMEOUT: number;
} | null>;
resume: () => void;
pause: () => void;
};
type UseGeolocationReturn = ReturnType<typeof useGeolocation>;
interface UseIdleOptions extends ConfigurableWindow, ConfigurableEventFilter {
/**
* Event names that listen to for detected user activity
*
* @default ['mousemove', 'mousedown', 'resize', 'keydown', 'touchstart', 'wheel']
*/
events?: WindowEventName[];
/**
* Listen for document visibility change
*
* @default true
*/
listenForVisibilityChange?: boolean;
/**
* Initial state of the ref idle
*
* @default false
*/
initialState?: boolean;
}
interface UseIdleReturn {
idle: Ref<boolean>;
lastActive: Ref<number>;
}
/**
* Tracks whether the user is being inactive.
*
* @see https://vueuse.org/useIdle
* @param timeout default to 1 minute
* @param options IdleOptions
*/
declare function useIdle(timeout?: number, options?: UseIdleOptions): UseIdleReturn;
interface UseImageOptions {
/** Address of the resource */
src: string;
/** Images to use in different situations, e.g., high-resolution displays, small monitors, etc. */
srcset?: string;
/** Image sizes for different page layouts */
sizes?: string;
}
/**
* Reactive load an image in the browser, you can wait the result to display it or show a fallback.
*
* @see https://vueuse.org/useImage
* @param options Image attributes, as used in the <img> tag
* @param asyncStateOptions
*/
declare const useImage: <Shallow extends true>(options: MaybeComputedRef<UseImageOptions>, asyncStateOptions?: UseAsyncStateOptions<Shallow, any>) => UseAsyncStateReturn<HTMLImageElement | undefined, [], true>;
type UseImageReturn = ReturnType<typeof useImage>;
interface UseScrollOptions {
/**
* Throttle time for scroll event, its disabled by default.
*
* @default 0
*/
throttle?: number;
/**
* The check time when scrolling ends.
* This configuration will be setting to (throttle + idle) when the `throttle` is configured.
*
* @default 200
*/
idle?: number;
/**
* Offset arrived states by x pixels
*
*/
offset?: {
left?: number;
right?: number;
top?: number;
bottom?: number;
};
/**
* Trigger it when scrolling.
*
*/
onScroll?: (e: Event) => void;
/**
* Trigger it when scrolling ends.
*
*/
onStop?: (e: Event) => void;
/**
* Listener options for scroll event.
*
* @default {capture: false, passive: true}
*/
eventListenerOptions?: boolean | AddEventListenerOptions;
/**
* Optionally specify a scroll behavior of `auto` (default, not smooth scrolling) or
* `smooth` (for smooth scrolling) which takes effect when changing the `x` or `y` refs.
*
* @default 'auto'
*/
behavior?: MaybeComputedRef<ScrollBehavior>;
}
/**
* Reactive scroll.
*
* @see https://vueuse.org/useScroll
* @param element
* @param options
*/
declare function useScroll(element: MaybeComputedRef<HTMLElement | SVGElement | Window | Document | null | undefined>, options?: UseScrollOptions): {
x: vue_demi.WritableComputedRef<number>;
y: vue_demi.WritableComputedRef<number>;
isScrolling: vue_demi.Ref<boolean>;
arrivedState: {
left: boolean;
right: boolean;
top: boolean;
bottom: boolean;
};
directions: {
left: boolean;
right: boolean;
top: boolean;
bottom: boolean;
};
};
type UseScrollReturn = ReturnType<typeof useScroll>;
interface UseInfiniteScrollOptions extends UseScrollOptions {
/**
* The minimum distance between the bottom of the element and the bottom of the viewport
*
* @default 0
*/
distance?: number;
/**
* The direction in which to listen the scroll.
*
* @default 'bottom'
*/
direction?: 'top' | 'bottom' | 'left' | 'right';
/**
* Whether to preserve the current scroll position when loading more items.
*
* @default false
*/
preserveScrollPosition?: boolean;
}
/**
* Reactive infinite scroll.
*
* @see https://vueuse.org/useInfiniteScroll
*/
declare function useInfiniteScroll(element: MaybeComputedRef<HTMLElement | SVGElement | Window | Document | null | undefined>, onLoadMore: (state: UnwrapNestedRefs<ReturnType<typeof useScroll>>) => void | Promise<void>, options?: UseInfiniteScrollOptions): void;
interface UseIntersectionObserverOptions extends ConfigurableWindow {
/**
* The Element or Document whose bounds are used as the bounding box when testing for intersection.
*/
root?: MaybeElementRef;
/**
* A string which specifies a set of offsets to add to the root's bounding_box when calculating intersections.
*/
rootMargin?: string;
/**
* Either a single number or an array of numbers between 0.0 and 1.
*/
threshold?: number | number[];
}
/**
* Detects that a target element's visibility.
*
* @see https://vueuse.org/useIntersectionObserver
* @param target
* @param callback
* @param options
*/
declare function useIntersectionObserver(target: MaybeElementRef, callback: IntersectionObserverCallback, options?: UseIntersectionObserverOptions): {
isSupported: vue_demi.Ref<boolean>;
stop: () => void;
};
type UseIntersectionObserverReturn = ReturnType<typeof useIntersectionObserver>;
type KeyModifier = 'Alt' | 'AltGraph' | 'CapsLock' | 'Control' | 'Fn' | 'FnLock' | 'Meta' | 'NumLock' | 'ScrollLock' | 'Shift' | 'Symbol' | 'SymbolLock';
interface UseModifierOptions<Initial> extends ConfigurableDocument {
/**
* Event names that will prompt update to modifier states
*
* @default ['mousedown', 'mouseup', 'keydown', 'keyup']
*/
events?: WindowEventName[];
/**
* Initial value of the returned ref
*
* @default null
*/
initial?: Initial;
}
type UseKeyModifierReturn<Initial> = Ref<Initial extends boolean ? boolean : boolean | null>;
declare function useKeyModifier<Initial extends boolean | null>(modifier: KeyModifier, options?: UseModifierOptions<Initial>): UseKeyModifierReturn<Initial>;
declare function useLocalStorage(key: string, initialValue: MaybeComputedRef<string>, options?: UseStorageOptions<string>): RemovableRef<string>;
declare function useLocalStorage(key: string, initialValue: MaybeComputedRef<boolean>, options?: UseStorageOptions<boolean>): RemovableRef<boolean>;
declare function useLocalStorage(key: string, initialValue: MaybeComputedRef<number>, options?: UseStorageOptions<number>): RemovableRef<number>;
declare function useLocalStorage<T>(key: string, initialValue: MaybeComputedRef<T>, options?: UseStorageOptions<T>): RemovableRef<T>;
declare function useLocalStorage<T = unknown>(key: string, initialValue: MaybeComputedRef<null>, options?: UseStorageOptions<T>): RemovableRef<T>;
declare const DefaultMagicKeysAliasMap: Readonly<Record<string, string>>;
interface UseMagicKeysOptions<Reactive extends Boolean> {
/**
* Returns a reactive object instead of an object of refs
*
* @default false
*/
reactive?: Reactive;
/**
* Target for listening events
*
* @default window
*/
target?: MaybeComputedRef<EventTarget>;
/**
* Alias map for keys, all the keys should be lowercase
* { target: keycode }
*
* @example { ctrl: "control" }
* @default <predefined-map>
*/
aliasMap?: Record<string, string>;
/**
* Register passive listener
*
* @default true
*/
passive?: boolean;
/**
* Custom event handler for keydown/keyup event.
* Useful when you want to apply custom logic.
*
* When using `e.preventDefault()`, you will need to pass `passive: false` to useMagicKeys().
*/
onEventFired?: (e: KeyboardEvent) => void | boolean;
}
interface MagicKeysInternal {
/**
* A Set of currently pressed keys,
* Stores raw keyCodes.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
*/
current: Set<string>;
}
type UseMagicKeysReturn<Reactive extends Boolean> = Readonly<Omit<Reactive extends true ? Record<string, boolean> : Record<string, ComputedRef<boolean>>, keyof MagicKeysInternal> & MagicKeysInternal>;
/**
* Reactive keys pressed state, with magical keys combination support.
*
* @see https://vueuse.org/useMagicKeys
*/
declare function useMagicKeys(options?: UseMagicKeysOptions<false>): UseMagicKeysReturn<false>;
declare function useMagicKeys(options: UseMagicKeysOptions<true>): UseMagicKeysReturn<true>;
/**
* Many of the jsdoc definitions here are modified version of the
* documentation from MDN(https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement)
*/
interface UseMediaSource {
/**
* The source url for the media
*/
src: string;
/**
* The media codec type
*/
type?: string;
}
interface UseMediaTextTrackSource {
/**
* Indicates that the track should be enabled unless the user's preferences indicate
* that another track is more appropriate
*/
default?: boolean;
/**
* How the text track is meant to be used. If omitted the default kind is subtitles.
*/
kind: TextTrackKind;
/**
* A user-readable title of the text track which is used by the browser
* when listing available text tracks.
*/
label: string;
/**
* Address of the track (.vtt file). Must be a valid URL. This attribute
* must be specified and its URL value must have the same origin as the document
*/
src: string;
/**
* Language of the track text data. It must be a valid BCP 47 language tag.
* If the kind attribute is set to subtitles, then srclang must be defined.
*/
srcLang: string;
}
interface UseMediaControlsOptions extends ConfigurableDocument {
/**
* The source for the media, may either be a string, a `UseMediaSource` object, or a list
* of `UseMediaSource` objects.
*/
src?: MaybeComputedRef<string | UseMediaSource | UseMediaSource[]>;
/**
* A list of text tracks for the media
*/
tracks?: MaybeComputedRef<UseMediaTextTrackSource[]>;
}
interface UseMediaTextTrack {
/**
* The index of the text track
*/
id: number;
/**
* The text track label
*/
label: string;
/**
* Language of the track text data. It must be a valid BCP 47 language tag.
* If the kind attribute is set to subtitles, then srclang must be defined.
*/
language: string;
/**
* Specifies the display mode of the text track, either `disabled`,
* `hidden`, or `showing`
*/
mode: TextTrackMode;
/**
* How the text track is meant to be used. If omitted the default kind is subtitles.
*/
kind: TextTrackKind;
/**
* Indicates the track's in-band metadata track dispatch type.
*/
inBandMetadataTrackDispatchType: string;
/**
* A list of text track cues
*/
cues: TextTrackCueList | null;
/**
* A list of active text track cues
*/
activeCues: TextTrackCueList | null;
}
declare function useMediaControls(target: MaybeRef<HTMLMediaElement | null | undefined>, options?: UseMediaControlsOptions): {
currentTime: vue_demi.Ref<number>;
duration: vue_demi.Ref<number>;
waiting: vue_demi.Ref<boolean>;
seeking: vue_demi.Ref<boolean>;
ended: vue_demi.Ref<boolean>;
stalled: vue_demi.Ref<boolean>;
buffered: vue_demi.Ref<[number, number][]>;
playing: vue_demi.Ref<boolean>;
rate: vue_demi.Ref<number>;
volume: vue_demi.Ref<number>;
muted: vue_demi.Ref<boolean>;
tracks: vue_demi.Ref<{
id: number;
label: string;
language: string;
mode: TextTrackMode;
kind: TextTrackKind;
inBandMetadataTrackDispatchType: string;
cues: {
[x: number]: {
endTime: number;
id: string;
onenter: ((this: TextTrackCue, ev: Event) => any) | null;
onexit: ((this: TextTrackCue, ev: Event) => any) | null;
pauseOnExit: boolean;
startTime: number;
readonly track: {
readonly activeCues: any | null;
readonly cues: any | null;
readonly id: string;
readonly inBandMetadataTrackDispatchType: string;
readonly kind: TextTrackKind;
readonly label: string;
readonly language: string;
mode: TextTrackMode;
oncuechange: ((this: TextTrack, ev: Event) => any) | null;
addCue: (cue: TextTrackCue) => void;
removeCue: (cue: TextTrackCue) => void;
addEventListener: {
<K extends "cuechange">(type: K, listener: (this: TextTrack, ev: TextTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
};
removeEventListener: {
<K_1 extends "cuechange">(type: K_1, listener: (this: TextTrack, ev: TextTrackEventMap[K_1]) => any, options?: boolean | EventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
};
dispatchEvent: (event: Event) => boolean;
} | null;
addEventListener: {
<K_2 extends keyof TextTrackCueEventMap>(type: K_2, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K_2]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
};
removeEventListener: {
<K_3 extends keyof TextTrackCueEventMap>(type: K_3, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K_3]) => any, options?: boolean | EventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
};
dispatchEvent: (event: Event) => boolean;
};
readonly length: number;
getCueById: (id: string) => TextTrackCue | null;
[Symbol.iterator]: () => IterableIterator<TextTrackCue>;
} | null;
activeCues: {
[x: number]: {
endTime: number;
id: string;
onenter: ((this: TextTrackCue, ev: Event) => any) | null;
onexit: ((this: TextTrackCue, ev: Event) => any) | null;
pauseOnExit: boolean;
startTime: number;
readonly track: {
readonly activeCues: any | null;
readonly cues: any | null;
readonly id: string;
readonly inBandMetadataTrackDispatchType: string;
readonly kind: TextTrackKind;
readonly label: string;
readonly language: string;
mode: TextTrackMode;
oncuechange: ((this: TextTrack, ev: Event) => any) | null;
addCue: (cue: TextTrackCue) => void;
removeCue: (cue: TextTrackCue) => void;
addEventListener: {
<K extends "cuechange">(type: K, listener: (this: TextTrack, ev: TextTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
};
removeEventListener: {
<K_1 extends "cuechange">(type: K_1, listener: (this: TextTrack, ev: TextTrackEventMap[K_1]) => any, options?: boolean | EventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
};
dispatchEvent: (event: Event) => boolean;
} | null;
addEventListener: {
<K_2 extends keyof TextTrackCueEventMap>(type: K_2, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K_2]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
};
removeEventListener: {
<K_3 extends keyof TextTrackCueEventMap>(type: K_3, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K_3]) => any, options?: boolean | EventListenerOptions | undefined): void;
(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
};
dispatchEvent: (event: Event) => boolean;
};
readonly length: number;
getCueById: (id: string) => TextTrackCue | null;
[Symbol.iterator]: () => IterableIterator<TextTrackCue>;
} | null;
}[]>;
selectedTrack: vue_demi.Ref<number>;
enableTrack: (track: number | UseMediaTextTrack, disableTracks?: boolean) => void;
disableTrack: (track?: number | UseMediaTextTrack) => void;
supportsPictureInPicture: boolean | undefined;
togglePictureInPicture: () => Promise<unknown>;
isPictureInPicture: vue_demi.Ref<boolean>;
onSourceError: _vueuse_shared.EventHookOn<Event>;
};
type UseMediaControlsReturn = ReturnType<typeof useMediaControls>;
/**
* Reactive Media Query.
*
* @see https://vueuse.org/useMediaQuery
* @param query
* @param options
*/
declare function useMediaQuery(query: MaybeComputedRef<string>, options?: ConfigurableWindow): vue_demi.Ref<boolean>;
type CacheKey = any;
/**
* Custom memoize cache handler
*/
interface UseMemoizeCache<Key, Value> {
/**
* Get value for key
*/
get(key: Key): Value | undefined;
/**
* Set value for key
*/
set(key: Key, value: Value): void;
/**
* Return flag if key exists
*/
has(key: Key): boolean;
/**
* Delete value for key
*/
delete(key: Key): void;
/**
* Clear cache
*/
clear(): void;
}
/**
* Memoized function
*/
interface UseMemoizeReturn<Result, Args extends unknown[]> {
/**
* Get result from cache or call memoized function
*/
(...args: Args): Result;
/**
* Call memoized function and update cache
*/
load(...args: Args): Result;
/**
* Delete cache of given arguments
*/
delete(...args: Args): void;
/**
* Clear cache
*/
clear(): void;
/**
* Generate cache key for given arguments
*/
generateKey(...args: Args): CacheKey;
/**
* Cache container
*/
cache: UseMemoizeCache<CacheKey, Result>;
}
interface UseMemoizeOptions<Result, Args extends unknown[]> {
getKey?: (...args: Args) => string | number;
cache?: UseMemoizeCache<CacheKey, Result>;
}
/**
* Reactive function result cache based on arguments
*/
declare function useMemoize<Result, Args extends unknown[]>(resolver: (...args: Args) => Result, options?: UseMemoizeOptions<Result, Args>): UseMemoizeReturn<Result, Args>;
/**
* Performance.memory
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory
*/
interface MemoryInfo {
/**
* The maximum size of the heap, in bytes, that is available to the context.
*/
readonly jsHeapSizeLimit: number;
/**
* The total allocated heap size, in bytes.
*/
readonly totalJSHeapSize: number;
/**
* The currently active segment of JS heap, in bytes.
*/
readonly usedJSHeapSize: number;
[Symbol.toStringTag]: 'MemoryInfo';
}
interface UseMemoryOptions extends UseIntervalFnOptions {
interval?: number;
}
/**
* Reactive Memory Info.
*
* @see https://vueuse.org/useMemory
* @param options
*/
declare function useMemory(options?: UseMemoryOptions): {
isSupported: vue_demi.Ref<boolean>;
memory: vue_demi.Ref<MemoryInfo | undefined>;
};
type UseMemoryReturn = ReturnType<typeof useMemory>;
/**
* Mounted state in ref.
*
* @see https://vueuse.org/useMounted
* @param options
*/
declare function useMounted(): vue_demi.Ref<boolean>;
interface UseMouseOptions extends ConfigurableWindow, ConfigurableEventFilter {
/**
* Mouse position based by page, client, or relative to previous position
*
* @default 'page'
*/
type?: 'page' | 'client' | 'movement';
/**
* Listen to `touchmove` events
*
* @default true
*/
touch?: boolean;
/**
* Reset to initial value when `touchend` event fired
*
* @default false
*/
resetOnTouchEnds?: boolean;
/**
* Initial values
*/
initialValue?: Position;
}
type MouseSourceType = 'mouse' | 'touch' | null;
/**
* Reactive mouse position.
*
* @see https://vueuse.org/useMouse
* @param options
*/
declare function useMouse(options?: UseMouseOptions): {
x: vue_demi.Ref<number>;
y: vue_demi.Ref<number>;
sourceType: vue_demi.Ref<MouseSourceType>;
};
type UseMouseReturn = ReturnType<typeof useMouse>;
interface MouseInElementOptions extends UseMouseOptions {
handleOutside?: boolean;
}
/**
* Reactive mouse position related to an element.
*
* @see https://vueuse.org/useMouseInElement
* @param target
* @param options
*/
declare function useMouseInElement(target?: MaybeElementRef, options?: MouseInElementOptions): {
x: vue_demi.Ref<number>;
y: vue_demi.Ref<number>;
sourceType: vue_demi.Ref<MouseSourceType>;
elementX: vue_demi.Ref<number>;
elementY: vue_demi.Ref<number>;
elementPositionX: vue_demi.Ref<number>;
elementPositionY: vue_demi.Ref<number>;
elementHeight: vue_demi.Ref<number>;
elementWidth: vue_demi.Ref<number>;
isOutside: vue_demi.Ref<boolean>;
stop: () => void;
};
type UseMouseInElementReturn = ReturnType<typeof useMouseInElement>;
interface MousePressedOptions extends ConfigurableWindow {
/**
* Listen to `touchstart` `touchend` events
*
* @default true
*/
touch?: boolean;
/**
* Listen to `dragstart` `drop` and `dragend` events
*
* @default true
*/
drag?: boolean;
/**
* Initial values
*
* @default false
*/
initialValue?: boolean;
/**
* Element target to be capture the click
*/
target?: MaybeElementRef;
}
/**
* Reactive mouse position.
*
* @see https://vueuse.org/useMousePressed
* @param options
*/
declare function useMousePressed(options?: MousePressedOptions): {
pressed: vue_demi.Ref<boolean>;
sourceType: vue_demi.Ref<MouseSourceType>;
};
type UseMousePressedReturn = ReturnType<typeof useMousePressed>;
interface UseMutationObserverOptions extends MutationObserverInit, ConfigurableWindow {
}
/**
* Watch for changes being made to the DOM tree.
*
* @see https://vueuse.org/useMutationObserver
* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN
* @param target
* @param callback
* @param options
*/
declare function useMutationObserver(target: MaybeElementRef, callback: MutationCallback, options?: UseMutationObserverOptions): {
isSupported: vue_demi.Ref<boolean>;
stop: () => void;
};
type UseMutationObserverReturn = ReturnType<typeof useMutationObserver>;
interface NavigatorLanguageState {
isSupported: Ref<boolean>;
/**
*
* ISO 639-1 standard Language Code
*
* @info The detected user agent language preference as a language tag
* (which is sometimes referred to as a "locale identifier").
* This consists of a 2-3 letter base language tag that indicates a
* language, optionally followed by additional subtags separated by
* '-'. The most common extra information is the country or region
* variant (like 'en-US' or 'fr-CA').
*
*
* @see https://www.iso.org/iso-639-language-codes.html
* @see https://www.loc.gov/standards/iso639-2/php/code_list.php
*
*/
language: Ref<string | undefined>;
}
/**
*
* Reactive useNavigatorLanguage
*
* Detects the currently selected user language and returns a reactive language
* @see https://vueuse.org/useNavigatorLanguage
*
*/
declare const useNavigatorLanguage: (options?: ConfigurableWindow) => Readonly<NavigatorLanguageState>;
type UseNavigatorLanguageReturn = ReturnType<typeof useNavigatorLanguage>;
type NetworkType = 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown';
type NetworkEffectiveType = 'slow-2g' | '2g' | '3g' | '4g' | undefined;
interface NetworkState {
isSupported: Ref<boolean>;
/**
* If the user is currently connected.
*/
isOnline: Ref<boolean>;
/**
* The time since the user was last connected.
*/
offlineAt: Ref<number | undefined>;
/**
* At this time, if the user is offline and reconnects
*/
onlineAt: Ref<number | undefined>;
/**
* The download speed in Mbps.
*/
downlink: Ref<number | undefined>;
/**
* The max reachable download speed in Mbps.
*/
downlinkMax: Ref<number | undefined>;
/**
* The detected effective speed type.
*/
effectiveType: Ref<NetworkEffectiveType | undefined>;
/**
* The estimated effective round-trip time of the current connection.
*/
rtt: Ref<number | undefined>;
/**
* If the user activated data saver mode.
*/
saveData: Ref<boolean | undefined>;
/**
* The detected connection/network type.
*/
type: Ref<NetworkType>;
}
/**
* Reactive Network status.
*
* @see https://vueuse.org/useNetwork
* @param options
*/
declare function useNetwork(options?: ConfigurableWindow): Readonly<NetworkState>;
type UseNetworkReturn = ReturnType<typeof useNetwork>;
interface UseNowOptions<Controls extends boolean> {
/**
* Expose more controls
*
* @default false
*/
controls?: Controls;
/**
* Update interval, or use requestAnimationFrame
*
* @default requestAnimationFrame
*/
interval?: 'requestAnimationFrame' | number;
}
/**
* Reactive current Date instance.
*
* @see https://vueuse.org/useNow
* @param options
*/
declare function useNow(options?: UseNowOptions<false>): Ref<Date>;
declare function useNow(options: UseNowOptions<true>): {
now: Ref<Date>;
} & Pausable;
type UseNowReturn = ReturnType<typeof useNow>;
/**
* Reactive URL representing an object.
*
* @see https://vueuse.org/useObjectUrl
* @param object
*/
declare function useObjectUrl(object: MaybeRef<Blob | MediaSource | undefined>): Readonly<vue_demi.Ref<string | undefined>>;
interface UseOffsetPaginationOptions {
/**
* Total number of items.
*/
total?: MaybeRef<number>;
/**
* The number of items to display per page.
* @default 10
*/
pageSize?: MaybeRef<number>;
/**
* The current page number.
* @default 1
*/
page?: MaybeRef<number>;
/**
* Callback when the `page` change.
*/
onPageChange?: (returnValue: UnwrapNestedRefs<UseOffsetPaginationReturn>) => unknown;
/**
* Callback when the `pageSize` change.
*/
onPageSizeChange?: (returnValue: UnwrapNestedRefs<UseOffsetPaginationReturn>) => unknown;
/**
* Callback when the `pageCount` change.
*/
onPageCountChange?: (returnValue: UnwrapNestedRefs<UseOffsetPaginationReturn>) => unknown;
}
interface UseOffsetPaginationReturn {
currentPage: Ref<number>;
currentPageSize: Ref<number>;
pageCount: ComputedRef<number>;
isFirstPage: ComputedRef<boolean>;
isLastPage: ComputedRef<boolean>;
prev: () => void;
next: () => void;
}
type UseOffsetPaginationInfinityPageReturn = Omit<UseOffsetPaginationReturn, 'isLastPage'>;
declare function useOffsetPagination(options: Omit<UseOffsetPaginationOptions, 'total'>): UseOffsetPaginationInfinityPageReturn;
declare function useOffsetPagination(options: UseOffsetPaginationOptions): UseOffsetPaginationReturn;
/**
* Reactive online state.
*
* @see https://vueuse.org/useOnline
* @param options
*/
declare function useOnline(options?: ConfigurableWindow): vue.Ref<boolean>;
/**
* Reactive state to show whether mouse leaves the page.
*
* @see https://vueuse.org/usePageLeave
* @param options
*/
declare function usePageLeave(options?: ConfigurableWindow): vue_demi.Ref<boolean>;
interface UseParallaxOptions extends ConfigurableWindow {
deviceOrientationTiltAdjust?: (i: number) => number;
deviceOrientationRollAdjust?: (i: number) => number;
mouseTiltAdjust?: (i: number) => number;
mouseRollAdjust?: (i: number) => number;
}
interface UseParallaxReturn {
/**
* Roll value. Scaled to `-0.5 ~ 0.5`
*/
roll: ComputedRef<number>;
/**
* Tilt value. Scaled to `-0.5 ~ 0.5`
*/
tilt: ComputedRef<number>;
/**
* Sensor source, can be `mouse` or `deviceOrientation`
*/
source: ComputedRef<'deviceOrientation' | 'mouse'>;
}
/**
* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`
* if orientation is not supported.
*
* @param target
* @param options
*/
declare function useParallax(target: MaybeElementRef, options?: UseParallaxOptions): UseParallaxReturn;
type DescriptorNamePolyfill = 'accelerometer' | 'accessibility-events' | 'ambient-light-sensor' | 'background-sync' | 'camera' | 'clipboard-read' | 'clipboard-write' | 'gyroscope' | 'magnetometer' | 'microphone' | 'notifications' | 'payment-handler' | 'persistent-storage' | 'push' | 'speaker';
type GeneralPermissionDescriptor = PermissionDescriptor | {
name: DescriptorNamePolyfill;
};
interface UsePermissionOptions<Controls extends boolean> extends ConfigurableNavigator {
/**
* Expose more controls
*
* @default false
*/
controls?: Controls;
}
type UsePermissionReturn = Readonly<Ref<PermissionState | undefined>>;
interface UsePermissionReturnWithControls {
state: UsePermissionReturn;
isSupported: Ref<boolean>;
query: () => Promise<PermissionStatus | undefined>;
}
/**
* Reactive Permissions API.
*
* @see https://vueuse.org/usePermission
*/
declare function usePermission(permissionDesc: GeneralPermissionDescriptor | GeneralPermissionDescriptor['name'], options?: UsePermissionOptions<false>): UsePermissionReturn;
declare function usePermission(permissionDesc: GeneralPermissionDescriptor | GeneralPermissionDescriptor['name'], options: UsePermissionOptions<true>): UsePermissionReturnWithControls;
interface UsePointerState extends Position {
pressure: number;
pointerId: number;
tiltX: number;
tiltY: number;
width: number;
height: number;
twist: number;
pointerType: PointerType | null;
}
interface UsePointerOptions extends ConfigurableWindow {
/**
* Pointer types that listen to.
*
* @default ['mouse', 'touch', 'pen']
*/
pointerTypes?: PointerType[];
/**
* Initial values
*/
initialValue?: MaybeRef<Partial<UsePointerState>>;
/**
* @default window
*/
target?: MaybeRef<EventTarget | null | undefined> | Document | Window;
}
/**
* Reactive pointer state.
*
* @see https://vueuse.org/usePointer
* @param options
*/
declare function usePointer(options?: UsePointerOptions): {
isInside: Ref<boolean>;
pressure: Ref<number>;
pointerId: Ref<number>;
tiltX: Ref<number>;
tiltY: Ref<number>;
width: Ref<number>;
height: Ref<number>;
twist: Ref<number>;
pointerType: Ref<PointerType | null>;
x: Ref<number>;
y: Ref<number>;
};
type UsePointerReturn = ReturnType<typeof usePointer>;
declare global {
interface PointerLockOptions {
unadjustedMovement?: boolean;
}
interface Element {
requestPointerLock(options?: PointerLockOptions): Promise<void> | void;
}
}
type MaybeHTMLElement = HTMLElement | undefined | null;
interface UsePointerLockOptions extends ConfigurableDocument {
pointerLockOptions?: PointerLockOptions;
}
/**
* Reactive pointer lock.
*
* @see https://vueuse.org/usePointerLock
* @param target
* @param options
*/
declare function usePointerLock(target?: MaybeElementRef<MaybeHTMLElement>, options?: UsePointerLockOptions): {
isSupported: vue_demi.Ref<boolean>;
element: vue_demi.Ref<MaybeHTMLElement>;
triggerElement: vue_demi.Ref<MaybeHTMLElement>;
lock: (e: MaybeElementRef<MaybeHTMLElement> | Event, options?: PointerLockOptions) => Promise<HTMLElement>;
unlock: () => Promise<boolean>;
};
type UsePointerLockReturn = ReturnType<typeof usePointerLock>;
declare enum SwipeDirection {
UP = "UP",
RIGHT = "RIGHT",
DOWN = "DOWN",
LEFT = "LEFT",
NONE = "NONE"
}
interface UseSwipeOptions extends ConfigurableWindow {
/**
* Register events as passive
*
* @default true
*/
passive?: boolean;
/**
* @default 50
*/
threshold?: number;
/**
* Callback on swipe start
*/
onSwipeStart?: (e: TouchEvent) => void;
/**
* Callback on swipe moves
*/
onSwipe?: (e: TouchEvent) => void;
/**
* Callback on swipe ends
*/
onSwipeEnd?: (e: TouchEvent, direction: SwipeDirection) => void;
}
interface UseSwipeReturn {
isPassiveEventSupported: boolean;
isSwiping: Ref<boolean>;
direction: ComputedRef<SwipeDirection | null>;
coordsStart: Readonly<Position>;
coordsEnd: Readonly<Position>;
lengthX: ComputedRef<number>;
lengthY: ComputedRef<number>;
stop: () => void;
}
/**
* Reactive swipe detection.
*
* @see https://vueuse.org/useSwipe
* @param target
* @param options
*/
declare function useSwipe(target: MaybeComputedRef<EventTarget | null | undefined>, options?: UseSwipeOptions): UseSwipeReturn;
interface UsePointerSwipeOptions {
/**
* @default 50
*/
threshold?: number;
/**
* Callback on swipe start.
*/
onSwipeStart?: (e: PointerEvent) => void;
/**
* Callback on swipe move.
*/
onSwipe?: (e: PointerEvent) => void;
/**
* Callback on swipe end.
*/
onSwipeEnd?: (e: PointerEvent, direction: SwipeDirection) => void;
/**
* Pointer types to listen to.
*
* @default ['mouse', 'touch', 'pen']
*/
pointerTypes?: PointerType[];
}
interface UsePointerSwipeReturn {
readonly isSwiping: Ref<boolean>;
direction: Readonly<Ref<SwipeDirection | null>>;
readonly posStart: Position;
readonly posEnd: Position;
distanceX: Readonly<Ref<number>>;
distanceY: Readonly<Ref<number>>;
stop: () => void;
}
/**
* Reactive swipe detection based on PointerEvents.
*
* @see https://vueuse.org/usePointerSwipe
* @param target
* @param options
*/
declare function usePointerSwipe(target: MaybeComputedRef<HTMLElement | null | undefined>, options?: UsePointerSwipeOptions): UsePointerSwipeReturn;
type ColorSchemeType = 'dark' | 'light' | 'no-preference';
/**
* Reactive prefers-color-scheme media query.
*
* @see https://vueuse.org/usePreferredColorScheme
* @param [options]
*/
declare function usePreferredColorScheme(options?: ConfigurableWindow): vue_demi.ComputedRef<ColorSchemeType>;
type ContrastType = 'more' | 'less' | 'custom' | 'no-preference';
/**
* Reactive prefers-contrast media query.
*
* @see https://vueuse.org/usePreferredContrast
* @param [options]
*/
declare function usePreferredContrast(options?: ConfigurableWindow): vue_demi.ComputedRef<ContrastType>;
/**
* Reactive dark theme preference.
*
* @see https://vueuse.org/usePreferredDark
* @param [options]
*/
declare function usePreferredDark(options?: ConfigurableWindow): vue.Ref<boolean>;
/**
* Reactive Navigator Languages.
*
* @see https://vueuse.org/usePreferredLanguages
* @param options
*/
declare function usePreferredLanguages(options?: ConfigurableWindow): Ref<readonly string[]>;
type ReducedMotionType = 'reduce' | 'no-preference';
/**
* Reactive prefers-reduced-motion media query.
*
* @see https://vueuse.org/usePreferredReducedMotion
* @param [options]
*/
declare function usePreferredReducedMotion(options?: ConfigurableWindow): vue_demi.ComputedRef<ReducedMotionType>;
/**
* Holds the previous value of a ref.
*
* @see {@link https://vueuse.org/usePrevious}
*/
declare function usePrevious<T>(value: MaybeComputedRef<T>): Readonly<Ref<T | undefined>>;
declare function usePrevious<T>(value: MaybeComputedRef<T>, initialValue: T): Readonly<Ref<T>>;
interface UseRafFnCallbackArguments {
/**
* Time elapsed between this and the last frame.
*/
delta: number;
/**
* Time elapsed since the creation of the web page. See {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp#the_time_origin Time origin}.
*/
timestamp: DOMHighResTimeStamp;
}
interface UseRafFnOptions extends ConfigurableWindow {
/**
* Start the requestAnimationFrame loop immediately on creation
*
* @default true
*/
immediate?: boolean;
}
/**
* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.
*
* @see https://vueuse.org/useRafFn
* @param fn
* @param options
*/
declare function useRafFn(fn: (args: UseRafFnCallbackArguments) => void, options?: UseRafFnOptions): Pausable;
/**
* Reactive screen orientation
*
* @see https://vueuse.org/useScreenOrientation
*/
declare const useScreenOrientation: (options?: ConfigurableWindow) => {
isSupported: vue_demi.Ref<boolean>;
orientation: vue_demi.Ref<OrientationType | undefined>;
angle: vue_demi.Ref<number>;
lockOrientation: (type: OrientationLockType) => Promise<void>;
unlockOrientation: () => void;
};
type UseScreenOrientationReturn = ReturnType<typeof useScreenOrientation>;
/**
* Reactive `env(safe-area-inset-*)`
*
* @see https://vueuse.org/useScreenSafeArea
*/
declare function useScreenSafeArea(): {
top: vue_demi.Ref<string>;
right: vue_demi.Ref<string>;
bottom: vue_demi.Ref<string>;
left: vue_demi.Ref<string>;
update: () => void;
};
interface UseScriptTagOptions extends ConfigurableDocument {
/**
* Load the script immediately
*
* @default true
*/
immediate?: boolean;
/**
* Add `async` attribute to the script tag
*
* @default true
*/
async?: boolean;
/**
* Script type
*
* @default 'text/javascript'
*/
type?: string;
/**
* Manual controls the timing of loading and unloading
*
* @default false
*/
manual?: boolean;
crossOrigin?: 'anonymous' | 'use-credentials';
referrerPolicy?: 'no-referrer' | 'no-referrer-when-downgrade' | 'origin' | 'origin-when-cross-origin' | 'same-origin' | 'strict-origin' | 'strict-origin-when-cross-origin' | 'unsafe-url';
noModule?: boolean;
defer?: boolean;
/**
* Add custom attribute to the script tag
*
*/
attrs?: Record<string, string>;
}
/**
* Async script tag loading.
*
* @see https://vueuse.org/useScriptTag
* @param src
* @param onLoaded
* @param options
*/
declare function useScriptTag(src: MaybeComputedRef<string>, onLoaded?: (el: HTMLScriptElement) => void, options?: UseScriptTagOptions): {
scriptTag: vue_demi.Ref<HTMLScriptElement | null>;
load: (waitForScriptLoad?: boolean) => Promise<HTMLScriptElement | boolean>;
unload: () => void;
};
type UseScriptTagReturn = ReturnType<typeof useScriptTag>;
/**
* Lock scrolling of the element.
*
* @see https://vueuse.org/useScrollLock
* @param element
*/
declare function useScrollLock(element: MaybeComputedRef<HTMLElement | SVGElement | Window | Document | null | undefined>, initialState?: boolean): vue_demi.WritableComputedRef<boolean>;
declare function useSessionStorage(key: string, initialValue: MaybeComputedRef<string>, options?: UseStorageOptions<string>): RemovableRef<string>;
declare function useSessionStorage(key: string, initialValue: MaybeComputedRef<boolean>, options?: UseStorageOptions<boolean>): RemovableRef<boolean>;
declare function useSessionStorage(key: string, initialValue: MaybeComputedRef<number>, options?: UseStorageOptions<number>): RemovableRef<number>;
declare function useSessionStorage<T>(key: string, initialValue: MaybeComputedRef<T>, options?: UseStorageOptions<T>): RemovableRef<T>;
declare function useSessionStorage<T = unknown>(key: string, initialValue: MaybeComputedRef<null>, options?: UseStorageOptions<T>): RemovableRef<T>;
interface UseShareOptions {
title?: string;
files?: File[];
text?: string;
url?: string;
}
/**
* Reactive Web Share API.
*
* @see https://vueuse.org/useShare
* @param shareOptions
* @param options
*/
declare function useShare(shareOptions?: MaybeComputedRef<UseShareOptions>, options?: ConfigurableNavigator): {
isSupported: vue.Ref<boolean>;
share: (overrideOptions?: MaybeComputedRef<UseShareOptions>) => Promise<void>;
};
type UseShareReturn = ReturnType<typeof useShare>;
type UseSortedCompareFn<T = any> = (a: T, b: T) => number;
type UseSortedFn<T = any> = (arr: T[], compareFn: UseSortedCompareFn<T>) => T[];
interface UseSortedOptions<T = any> {
/**
* sort algorithm
*/
sortFn?: UseSortedFn<T>;
/**
* compare function
*/
compareFn?: UseSortedCompareFn<T>;
/**
* change the value of the source array
* @default false
*/
dirty?: boolean;
}
declare function useSorted<T = any>(source: MaybeRef<T[]>, compareFn?: UseSortedCompareFn<T>): Ref<T[]>;
declare function useSorted<T = any>(source: MaybeRef<T[]>, options?: UseSortedOptions<T>): Ref<T[]>;
declare function useSorted<T = any>(source: MaybeRef<T[]>, compareFn?: UseSortedCompareFn<T>, options?: Omit<UseSortedOptions<T>, 'compareFn'>): Ref<T[]>;
type SpeechRecognitionErrorCode = 'aborted' | 'audio-capture' | 'bad-grammar' | 'language-not-supported' | 'network' | 'no-speech' | 'not-allowed' | 'service-not-allowed';
interface SpeechGrammar {
src: string;
weight: number;
}
interface SpeechGrammarList {
readonly length: number;
addFromString(string: string, weight?: number): void;
addFromURI(src: string, weight?: number): void;
item(index: number): SpeechGrammar;
[index: number]: SpeechGrammar;
}
interface SpeechRecognitionErrorEvent extends Event {
readonly error: SpeechRecognitionErrorCode;
readonly message: string;
}
interface SpeechRecognitionEvent extends Event {
readonly resultIndex: number;
readonly results: SpeechRecognitionResultList;
}
interface SpeechRecognitionEventMap {
'audioend': Event;
'audiostart': Event;
'end': Event;
'error': SpeechRecognitionErrorEvent;
'nomatch': SpeechRecognitionEvent;
'result': SpeechRecognitionEvent;
'soundend': Event;
'soundstart': Event;
'speechend': Event;
'speechstart': Event;
'start': Event;
}
interface SpeechRecognition extends EventTarget {
continuous: boolean;
grammars: SpeechGrammarList;
interimResults: boolean;
lang: string;
maxAlternatives: number;
onaudioend: ((this: SpeechRecognition, ev: Event) => any) | null;
onaudiostart: ((this: SpeechRecognition, ev: Event) => any) | null;
onend: ((this: SpeechRecognition, ev: Event) => any) | null;
onerror: ((this: SpeechRecognition, ev: SpeechRecognitionErrorEvent) => any) | null;
onnomatch: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => any) | null;
onresult: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => any) | null;
onsoundend: ((this: SpeechRecognition, ev: Event) => any) | null;
onsoundstart: ((this: SpeechRecognition, ev: Event) => any) | null;
onspeechend: ((this: SpeechRecognition, ev: Event) => any) | null;
onspeechstart: ((this: SpeechRecognition, ev: Event) => any) | null;
onstart: ((this: SpeechRecognition, ev: Event) => any) | null;
abort(): void;
start(): void;
stop(): void;
addEventListener<K extends keyof SpeechRecognitionEventMap>(type: K, listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
removeEventListener<K extends keyof SpeechRecognitionEventMap>(type: K, listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
}
interface UseSpeechRecognitionOptions extends ConfigurableWindow {
/**
* Controls whether continuous results are returned for each recognition, or only a single result.
*
* @default true
*/
continuous?: boolean;
/**
* Controls whether interim results should be returned (true) or not (false.) Interim results are results that are not yet final
*
* @default true
*/
interimResults?: boolean;
/**
* Language for SpeechRecognition
*
* @default 'en-US'
*/
lang?: MaybeComputedRef<string>;
}
/**
* Reactive SpeechRecognition.
*
* @see https://vueuse.org/useSpeechRecognition
* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition
* @param options
*/
declare function useSpeechRecognition(options?: UseSpeechRecognitionOptions): {
isSupported: Ref<boolean>;
isListening: Ref<boolean>;
isFinal: Ref<boolean>;
recognition: SpeechRecognition | undefined;
result: Ref<string>;
error: Ref<SpeechRecognitionErrorEvent | undefined>;
toggle: (value?: boolean) => void;
start: () => void;
stop: () => void;
};
type UseSpeechRecognitionReturn = ReturnType<typeof useSpeechRecognition>;
type UseSpeechSynthesisStatus = 'init' | 'play' | 'pause' | 'end';
interface UseSpeechSynthesisOptions extends ConfigurableWindow {
/**
* Language for SpeechSynthesis
*
* @default 'en-US'
*/
lang?: MaybeComputedRef<string>;
/**
* Gets and sets the pitch at which the utterance will be spoken at.
*
* @default 1
*/
pitch?: SpeechSynthesisUtterance['pitch'];
/**
* Gets and sets the speed at which the utterance will be spoken at.
*
* @default 1
*/
rate?: SpeechSynthesisUtterance['rate'];
/**
* Gets and sets the voice that will be used to speak the utterance.
*/
voice?: MaybeRef<SpeechSynthesisVoice>;
/**
* Gets and sets the volume that the utterance will be spoken at.
*
* @default 1
*/
volume?: SpeechSynthesisUtterance['volume'];
}
/**
* Reactive SpeechSynthesis.
*
* @see https://vueuse.org/useSpeechSynthesis
* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis
* @param options
*/
declare function useSpeechSynthesis(text: MaybeComputedRef<string>, options?: UseSpeechSynthesisOptions): {
isSupported: Ref<boolean>;
isPlaying: Ref<boolean>;
status: Ref<UseSpeechSynthesisStatus>;
utterance: vue_demi.ComputedRef<SpeechSynthesisUtterance>;
error: Ref<SpeechSynthesisErrorEvent | undefined>;
stop: () => void;
toggle: (value?: boolean) => void;
speak: () => void;
};
type UseSpeechSynthesisReturn = ReturnType<typeof useSpeechSynthesis>;
interface UseStepperReturn<StepName, Steps, Step> {
/** List of steps. */
steps: Readonly<Ref<Steps>>;
/** List of step names. */
stepNames: Readonly<Ref<StepName[]>>;
/** Index of the current step. */
index: Ref<number>;
/** Current step. */
current: ComputedRef<Step>;
/** Next step, or undefined if the current step is the last one. */
next: ComputedRef<StepName | undefined>;
/** Previous step, or undefined if the current step is the first one. */
previous: ComputedRef<StepName | undefined>;
/** Whether the current step is the first one. */
isFirst: ComputedRef<boolean>;
/** Whether the current step is the last one. */
isLast: ComputedRef<boolean>;
/** Get the step at the specified index. */
at: (index: number) => Step | undefined;
/** Get a step by the specified name. */
get: (step: StepName) => Step | undefined;
/** Go to the specified step. */
goTo: (step: StepName) => void;
/** Go to the next step. Does nothing if the current step is the last one. */
goToNext: () => void;
/** Go to the previous step. Does nothing if the current step is the previous one. */
goToPrevious: () => void;
/** Go back to the given step, only if the current step is after. */
goBackTo: (step: StepName) => void;
/** Checks whether the given step is the next step. */
isNext: (step: StepName) => boolean;
/** Checks whether the given step is the previous step. */
isPrevious: (step: StepName) => boolean;
/** Checks whether the given step is the current step. */
isCurrent: (step: StepName) => boolean;
/** Checks if the current step is before the given step. */
isBefore: (step: StepName) => boolean;
/** Checks if the current step is after the given step. */
isAfter: (step: StepName) => boolean;
}
declare function useStepper<T extends string | number>(steps: MaybeRef<T[]>, initialStep?: T): UseStepperReturn<T, T[], T>;
declare function useStepper<T extends Record<string, any>>(steps: MaybeRef<T>, initialStep?: keyof T): UseStepperReturn<Exclude<keyof T, symbol>, T, T[keyof T]>;
interface UseStorageAsyncOptions<T> extends Omit<UseStorageOptions<T>, 'serializer'> {
/**
* Custom data serialization
*/
serializer?: SerializerAsync<T>;
}
declare function useStorageAsync(key: string, initialValue: MaybeComputedRef<string>, storage?: StorageLikeAsync, options?: UseStorageAsyncOptions<string>): RemovableRef<string>;
declare function useStorageAsync(key: string, initialValue: MaybeComputedRef<boolean>, storage?: StorageLikeAsync, options?: UseStorageAsyncOptions<boolean>): RemovableRef<boolean>;
declare function useStorageAsync(key: string, initialValue: MaybeComputedRef<number>, storage?: StorageLikeAsync, options?: UseStorageAsyncOptions<number>): RemovableRef<number>;
declare function useStorageAsync<T>(key: string, initialValue: MaybeComputedRef<T>, storage?: StorageLikeAsync, options?: UseStorageAsyncOptions<T>): RemovableRef<T>;
declare function useStorageAsync<T = unknown>(key: string, initialValue: MaybeComputedRef<null>, storage?: StorageLikeAsync, options?: UseStorageAsyncOptions<T>): RemovableRef<T>;
interface UseStyleTagOptions extends ConfigurableDocument {
/**
* Media query for styles to apply
*/
media?: string;
/**
* Load the style immediately
*
* @default true
*/
immediate?: boolean;
/**
* Manual controls the timing of loading and unloading
*
* @default false
*/
manual?: boolean;
/**
* DOM id of the style tag
*
* @default auto-incremented
*/
id?: string;
}
interface UseStyleTagReturn {
id: string;
css: Ref<string>;
load: () => void;
unload: () => void;
isLoaded: Readonly<Ref<boolean>>;
}
/**
* Inject <style> element in head.
*
* Overload: Omitted id
*
* @see https://vueuse.org/useStyleTag
* @param css
* @param options
*/
declare function useStyleTag(css: MaybeRef<string>, options?: UseStyleTagOptions): UseStyleTagReturn;
declare function useSupported(callback: () => unknown, sync?: boolean): Ref<boolean>;
type TemplateRefsList<T> = T[] & {
set(el: Object | null): void;
};
declare function useTemplateRefsList<T = Element>(): Readonly<Ref<Readonly<TemplateRefsList<T>>>>;
type UseTextDirectionValue = 'ltr' | 'rtl' | 'auto';
interface UseTextDirectionOptions extends ConfigurableDocument {
/**
* CSS Selector for the target element applying to
*
* @default 'html'
*/
selector?: string;
/**
* Observe `document.querySelector(selector)` changes using MutationObserve
*
* @default false
*/
observe?: boolean;
/**
* Initial value
*
* @default 'ltr'
*/
initialValue?: UseTextDirectionValue;
}
/**
* Reactive dir of the element's text.
*
* @see https://vueuse.org/useTextDirection
*/
declare function useTextDirection(options?: UseTextDirectionOptions): vue_demi.WritableComputedRef<UseTextDirectionValue>;
/**
* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).
*
* @see https://vueuse.org/useTextSelection
*/
declare function useTextSelection(options?: ConfigurableWindow): {
text: vue_demi.ComputedRef<string>;
rects: vue_demi.ComputedRef<DOMRect[]>;
ranges: vue_demi.ComputedRef<Range[]>;
selection: vue_demi.Ref<{
readonly anchorNode: Node | null;
readonly anchorOffset: number;
readonly focusNode: Node | null;
readonly focusOffset: number;
readonly isCollapsed: boolean;
readonly rangeCount: number;
readonly type: string;
addRange: (range: Range) => void;
collapse: (node: Node | null, offset?: number | undefined) => void;
collapseToEnd: () => void;
collapseToStart: () => void;
containsNode: (node: Node, allowPartialContainment?: boolean | undefined) => boolean;
deleteFromDocument: () => void;
empty: () => void;
extend: (node: Node, offset?: number | undefined) => void;
getRangeAt: (index: number) => Range;
modify: (alter?: string | undefined, direction?: string | undefined, granularity?: string | undefined) => void;
removeAllRanges: () => void;
removeRange: (range: Range) => void;
selectAllChildren: (node: Node) => void;
setBaseAndExtent: (anchorNode: Node, anchorOffset: number, focusNode: Node, focusOffset: number) => void;
setPosition: (node: Node | null, offset?: number | undefined) => void;
toString: () => string;
} | null>;
};
type UseTextSelectionReturn = ReturnType<typeof useTextSelection>;
interface UseTextareaAutosizeOptions {
/** Textarea element to autosize. */
element?: MaybeRef<HTMLTextAreaElement | undefined>;
/** Textarea content. */
input?: MaybeRef<string | undefined>;
/** Watch sources that should trigger a textarea resize. */
watch?: WatchSource | Array<WatchSource>;
/** Function called when the textarea size changes. */
onResize?: () => void;
}
declare function useTextareaAutosize(options?: UseTextareaAutosizeOptions): {
textarea: vue_demi.Ref<HTMLTextAreaElement>;
input: vue_demi.Ref<string>;
triggerResize: () => void;
};
type UseTextareaAutosizeReturn = ReturnType<typeof useTextareaAutosize>;
type UseThrottledRefHistoryOptions<Raw, Serialized = Raw> = Omit<UseRefHistoryOptions<Raw, Serialized>, 'eventFilter'> & {
throttle?: MaybeRef<number>;
trailing?: boolean;
};
type UseThrottledRefHistoryReturn<Raw, Serialized = Raw> = UseRefHistoryReturn<Raw, Serialized>;
/**
* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.
*
* @see https://vueuse.org/useThrottledRefHistory
* @param source
* @param options
*/
declare function useThrottledRefHistory<Raw, Serialized = Raw>(source: Ref<Raw>, options?: UseThrottledRefHistoryOptions<Raw, Serialized>): UseThrottledRefHistoryReturn<Raw, Serialized>;
type UseTimeAgoFormatter<T = number> = (value: T, isPast: boolean) => string;
type UseTimeAgoUnitNamesDefault = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
interface UseTimeAgoMessagesBuiltIn {
justNow: string;
past: string | UseTimeAgoFormatter<string>;
future: string | UseTimeAgoFormatter<string>;
invalid: string;
}
type UseTimeAgoMessages<UnitNames extends string = UseTimeAgoUnitNamesDefault> = UseTimeAgoMessagesBuiltIn & Record<UnitNames, string | UseTimeAgoFormatter<number>>;
interface FormatTimeAgoOptions<UnitNames extends string = UseTimeAgoUnitNamesDefault> {
/**
* Maximum unit (of diff in milliseconds) to display the full date instead of relative
*
* @default undefined
*/
max?: UnitNames | number;
/**
* Formatter for full date
*/
fullDateFormatter?: (date: Date) => string;
/**
* Messages for formatting the string
*/
messages?: UseTimeAgoMessages<UnitNames>;
/**
* Minimum display time unit (default is minute)
*
* @default false
*/
showSecond?: boolean;
/**
* Rounding method to apply.
*
* @default 'round'
*/
rounding?: 'round' | 'ceil' | 'floor' | number;
/**
* Custom units
*/
units?: UseTimeAgoUnit<UseTimeAgoUnitNamesDefault>[];
}
interface UseTimeAgoOptions<Controls extends boolean, UnitNames extends string = UseTimeAgoUnitNamesDefault> extends FormatTimeAgoOptions<UnitNames> {
/**
* Expose more controls
*
* @default false
*/
controls?: Controls;
/**
* Intervals to update, set 0 to disable auto update
*
* @default 30_000
*/
updateInterval?: number;
}
interface UseTimeAgoUnit<Unit extends string = UseTimeAgoUnitNamesDefault> {
max: number;
value: number;
name: Unit;
}
type UseTimeAgoReturn<Controls extends boolean = false> = Controls extends true ? {
timeAgo: ComputedRef<string>;
} & Pausable : ComputedRef<string>;
/**
* Reactive time ago formatter.
*
* @see https://vueuse.org/useTimeAgo
* @param options
*/
declare function useTimeAgo<UnitNames extends string = UseTimeAgoUnitNamesDefault>(time: MaybeComputedRef<Date | number | string>, options?: UseTimeAgoOptions<false, UnitNames>): UseTimeAgoReturn<false>;
declare function useTimeAgo<UnitNames extends string = UseTimeAgoUnitNamesDefault>(time: MaybeComputedRef<Date | number | string>, options: UseTimeAgoOptions<true, UnitNames>): UseTimeAgoReturn<true>;
declare function formatTimeAgo<UnitNames extends string = UseTimeAgoUnitNamesDefault>(from: Date, options?: FormatTimeAgoOptions<UnitNames>, now?: Date | number): string;
declare function useTimeoutPoll(fn: () => Awaitable<void>, interval: MaybeComputedRef<number>, timeoutPollOptions?: UseTimeoutFnOptions): Pausable;
interface UseTimestampOptions<Controls extends boolean> {
/**
* Expose more controls
*
* @default false
*/
controls?: Controls;
/**
* Offset value adding to the value
*
* @default 0
*/
offset?: number;
/**
* Update the timestamp immediately
*
* @default true
*/
immediate?: boolean;
/**
* Update interval, or use requestAnimationFrame
*
* @default requestAnimationFrame
*/
interval?: 'requestAnimationFrame' | number;
/**
* Callback on each update
*/
callback?: (timestamp: number) => void;
}
/**
* Reactive current timestamp.
*
* @see https://vueuse.org/useTimestamp
* @param options
*/
declare function useTimestamp(options?: UseTimestampOptions<false>): Ref<number>;
declare function useTimestamp(options: UseTimestampOptions<true>): {
timestamp: Ref<number>;
} & Pausable;
type UseTimestampReturn = ReturnType<typeof useTimestamp>;
type UseTitleOptionsBase = {
/**
* Observe `document.title` changes using MutationObserve
* Cannot be used together with `titleTemplate` option.
*
* @default false
*/
observe?: boolean;
} | {
/**
* The template string to parse the title (e.g., '%s | My Website')
* Cannot be used together with `observe` option.
*
* @default '%s'
*/
titleTemplate?: MaybeRef<string> | ((title: string) => string);
};
type UseTitleOptions = ConfigurableDocument & UseTitleOptionsBase;
declare function useTitle(newTitle: MaybeReadonlyRef<string | null | undefined>, options?: UseTitleOptions): ComputedRef<string | null | undefined>;
declare function useTitle(newTitle?: MaybeRef<string | null | undefined>, options?: UseTitleOptions): Ref<string | null | undefined>;
type UseTitleReturn = ReturnType<typeof useTitle>;
/**
* Cubic bezier points
*/
type CubicBezierPoints = [number, number, number, number];
/**
* Easing function
*/
type EasingFunction = (n: number) => number;
/**
* Transition options
*/
interface UseTransitionOptions {
/**
* Milliseconds to wait before starting transition
*/
delay?: MaybeRef<number>;
/**
* Disables the transition
*/
disabled?: MaybeRef<boolean>;
/**
* Transition duration in milliseconds
*/
duration?: MaybeRef<number>;
/**
* Callback to execute after transition finishes
*/
onFinished?: () => void;
/**
* Callback to execute after transition starts
*/
onStarted?: () => void;
/**
* Easing function or cubic bezier points for calculating transition values
*/
transition?: MaybeRef<EasingFunction | CubicBezierPoints>;
}
/**
* Common transitions
*
* @see https://easings.net
*/
declare const TransitionPresets: Record<"easeInSine" | "easeOutSine" | "easeInOutSine" | "easeInQuad" | "easeOutQuad" | "easeInOutQuad" | "easeInCubic" | "easeOutCubic" | "easeInOutCubic" | "easeInQuart" | "easeOutQuart" | "easeInOutQuart" | "easeInQuint" | "easeOutQuint" | "easeInOutQuint" | "easeInExpo" | "easeOutExpo" | "easeInOutExpo" | "easeInCirc" | "easeOutCirc" | "easeInOutCirc" | "easeInBack" | "easeOutBack" | "easeInOutBack", CubicBezierPoints> & {
linear: EasingFunction;
};
declare function useTransition(source: Ref<number>, options?: UseTransitionOptions): ComputedRef<number>;
declare function useTransition<T extends MaybeRef<number>[]>(source: [...T], options?: UseTransitionOptions): ComputedRef<{
[K in keyof T]: number;
}>;
declare function useTransition<T extends Ref<number[]>>(source: T, options?: UseTransitionOptions): ComputedRef<number[]>;
type UrlParams = Record<string, string[] | string>;
interface UseUrlSearchParamsOptions<T> extends ConfigurableWindow {
/**
* @default true
*/
removeNullishValues?: boolean;
/**
* @default false
*/
removeFalsyValues?: boolean;
/**
* @default {}
*/
initialValue?: T;
/**
* Write back to `window.history` automatically
*
* @default true
*/
write?: boolean;
}
/**
* Reactive URLSearchParams
*
* @see https://vueuse.org/useUrlSearchParams
* @param mode
* @param options
*/
declare function useUrlSearchParams<T extends Record<string, any> = UrlParams>(mode?: 'history' | 'hash' | 'hash-params', options?: UseUrlSearchParamsOptions<T>): T;
interface UseUserMediaOptions extends ConfigurableNavigator {
/**
* If the stream is enabled
* @default false
*/
enabled?: MaybeRef<boolean>;
/**
* Recreate stream when the input devices id changed
*
* @default true
*/
autoSwitch?: MaybeRef<boolean>;
/**
* The device id of video input
*
* When passing with `undefined` the default device will be used.
* Pass `false` or "none" to disabled video input
*
* @default undefined
*/
videoDeviceId?: MaybeRef<string | undefined | false | 'none'>;
/**
* The device id of audi input
*
* When passing with `undefined` the default device will be used.
* Pass `false` or "none" to disabled audi input
*
* @default undefined
*/
audioDeviceId?: MaybeRef<string | undefined | false | 'none'>;
}
/**
* Reactive `mediaDevices.getUserMedia` streaming
*
* @see https://vueuse.org/useUserMedia
* @param options
*/
declare function useUserMedia(options?: UseUserMediaOptions): {
isSupported: Ref<boolean>;
stream: Ref<MediaStream | undefined>;
start: () => Promise<MediaStream | undefined>;
stop: () => void;
restart: () => Promise<MediaStream | undefined>;
videoDeviceId: Ref<string | false | undefined>;
audioDeviceId: Ref<string | false | undefined>;
enabled: Ref<boolean>;
autoSwitch: Ref<boolean>;
};
type UseUserMediaReturn = ReturnType<typeof useUserMedia>;
interface UseVModelOptions<T> {
/**
* When passive is set to `true`, it will use `watch` to sync with props and ref.
* Instead of relying on the `v-model` or `.sync` to work.
*
* @default false
*/
passive?: boolean;
/**
* When eventName is set, it's value will be used to overwrite the emit event name.
*
* @default undefined
*/
eventName?: string;
/**
* Attempting to check for changes of properties in a deeply nested object or array.
* Apply only when `passive` option is set to `true`
*
* @default false
*/
deep?: boolean;
/**
* Defining default value for return ref when no value is passed.
*
* @default undefined
*/
defaultValue?: T;
/**
* Clone the props.
* Accepts a custom clone function.
* When setting to `true`, it will use `JSON.parse(JSON.stringify(value))` to clone.
*
* @default false
*/
clone?: boolean | CloneFn<T>;
}
/**
* Shorthand for v-model binding, props + emit -> ref
*
* @see https://vueuse.org/useVModel
* @param props
* @param key (default 'value' in Vue 2 and 'modelValue' in Vue 3)
* @param emit
*/
declare function useVModel<P extends object, K extends keyof P, Name extends string>(props: P, key?: K, emit?: (name: Name, ...args: any[]) => void, options?: UseVModelOptions<P[K]>): vue_demi.Ref<UnwrapRef<P[K]>> | vue_demi.WritableComputedRef<P[K]>;
/**
* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.
*
* @see https://vueuse.org/useVModels
* @param props
* @param emit
*/
declare function useVModels<P extends object, Name extends string>(props: P, emit?: (name: Name, ...args: any[]) => void, options?: UseVModelOptions<any>): ToRefs<P>;
interface UseVibrateOptions extends ConfigurableNavigator {
/**
*
* Vibration Pattern
*
* An array of values describes alternating periods in which the
* device is vibrating and not vibrating. Each value in the array
* is converted to an integer, then interpreted alternately as
* the number of milliseconds the device should vibrate and the
* number of milliseconds it should not be vibrating
*
* @default []
*
*/
pattern?: MaybeComputedRef<number[] | number>;
/**
* Interval to run a persistent vibration, in ms
*
* Pass `0` to disable
*
* @default 0
*
*/
interval?: number;
}
/**
* Reactive vibrate
*
* @see https://vueuse.org/useVibrate
* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API
* @param options
*/
declare function useVibrate(options?: UseVibrateOptions): {
isSupported: vue.Ref<boolean>;
pattern: MaybeComputedRef<number | number[]>;
intervalControls: Pausable | undefined;
vibrate: (pattern?: number | number[]) => void;
stop: () => void;
};
type UseVibrateReturn = ReturnType<typeof useVibrate>;
type UseVirtualListItemSize = number | ((index: number) => number);
interface UseHorizontalVirtualListOptions extends UseVirtualListOptionsBase {
/**
* item width, accept a pixel value or a function that returns the height
*
* @default 0
*/
itemWidth: UseVirtualListItemSize;
}
interface UseVerticalVirtualListOptions extends UseVirtualListOptionsBase {
/**
* item height, accept a pixel value or a function that returns the height
*
* @default 0
*/
itemHeight: UseVirtualListItemSize;
}
interface UseVirtualListOptionsBase {
/**
* the extra buffer items outside of the view area
*
* @default 5
*/
overscan?: number;
}
type UseVirtualListOptions = UseHorizontalVirtualListOptions | UseVerticalVirtualListOptions;
interface UseVirtualListItem<T> {
data: T;
index: number;
}
interface UseVirtualListReturn<T> {
list: Ref<UseVirtualListItem<T>[]>;
scrollTo: (index: number) => void;
containerProps: {
ref: Ref<HTMLElement | null>;
onScroll: () => void;
style: StyleValue;
};
wrapperProps: ComputedRef<{
style: {
width: string;
height: string;
marginTop: string;
} | {
width: string;
height: string;
marginLeft: string;
display: string;
};
}>;
}
/**
* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.
*/
declare function useVirtualList<T = any>(list: MaybeRef<T[]>, options: UseVirtualListOptions): UseVirtualListReturn<T>;
type WakeLockType = 'screen';
interface WakeLockSentinel extends EventTarget {
type: WakeLockType;
released: boolean;
release: () => Promise<void>;
}
type UseWakeLockOptions = ConfigurableNavigator & ConfigurableDocument;
/**
* Reactive Screen Wake Lock API.
*
* @see https://vueuse.org/useWakeLock
* @param options
*/
declare const useWakeLock: (options?: UseWakeLockOptions) => {
isSupported: vue_demi.Ref<boolean>;
isActive: vue_demi.Ref<boolean>;
request: (type: WakeLockType) => Promise<void>;
release: () => Promise<void>;
};
type UseWakeLockReturn = ReturnType<typeof useWakeLock>;
interface WebNotificationOptions {
/**
* The title read-only property of the Notification interface indicates
* the title of the notification
*
* @default ''
*/
title?: string;
/**
* The body string of the notification as specified in the constructor's
* options parameter.
*
* @default ''
*/
body?: string;
/**
* The text direction of the notification as specified in the constructor's
* options parameter.
*
* @default ''
*/
dir?: 'auto' | 'ltr' | 'rtl';
/**
* The language code of the notification as specified in the constructor's
* options parameter.
*
* @default DOMString
*/
lang?: string;
/**
* The ID of the notification(if any) as specified in the constructor's options
* parameter.
*
* @default ''
*/
tag?: string;
/**
* The URL of the image used as an icon of the notification as specified
* in the constructor's options parameter.
*
* @default ''
*/
icon?: string;
/**
* Specifies whether the user should be notified after a new notification
* replaces an old one.
*
* @default false
*/
renotify?: boolean;
/**
* A boolean value indicating that a notification should remain active until the
* user clicks or dismisses it, rather than closing automatically.
*
* @default false
*/
requireInteraction?: boolean;
/**
* The silent read-only property of the Notification interface specifies
* whether the notification should be silent, i.e., no sounds or vibrations
* should be issued, regardless of the device settings.
*
* @default false
*/
silent?: boolean;
/**
* Specifies a vibration pattern for devices with vibration hardware to emit.
* A vibration pattern, as specified in the Vibration API spec
*
* @see https://w3c.github.io/vibration/
*/
vibrate?: number[];
}
interface UseWebNotificationOptions extends WebNotificationOptions, ConfigurableWindow {
}
/**
* Reactive useWebNotification
*
* @see https://vueuse.org/useWebNotification
* @see https://developer.mozilla.org/en-US/docs/Web/API/notification
* @param title
* @param defaultOptions of type WebNotificationOptions
* @param methods of type WebNotificationMethods
*/
declare const useWebNotification: (defaultOptions?: UseWebNotificationOptions) => {
isSupported: Ref<boolean>;
notification: Ref<Notification | null>;
show: (overrides?: WebNotificationOptions) => Promise<Notification | undefined>;
close: () => void;
onClick: EventHook<any>;
onShow: EventHook<any>;
onError: EventHook<any>;
onClose: EventHook<any>;
};
type UseWebNotificationReturn = ReturnType<typeof useWebNotification>;
type WebSocketStatus = 'OPEN' | 'CONNECTING' | 'CLOSED';
interface UseWebSocketOptions {
onConnected?: (ws: WebSocket) => void;
onDisconnected?: (ws: WebSocket, event: CloseEvent) => void;
onError?: (ws: WebSocket, event: Event) => void;
onMessage?: (ws: WebSocket, event: MessageEvent) => void;
/**
* Send heartbeat for every x milliseconds passed
*
* @default false
*/
heartbeat?: boolean | {
/**
* Message for the heartbeat
*
* @default 'ping'
*/
message?: string | ArrayBuffer | Blob;
/**
* Interval, in milliseconds
*
* @default 1000
*/
interval?: number;
/**
* Heartbeat response timeout, in milliseconds
*
* @default 1000
*/
pongTimeout?: number;
};
/**
* Enabled auto reconnect
*
* @default false
*/
autoReconnect?: boolean | {
/**
* Maximum retry times.
*
* Or you can pass a predicate function (which returns true if you want to retry).
*
* @default -1
*/
retries?: number | (() => boolean);
/**
* Delay for reconnect, in milliseconds
*
* @default 1000
*/
delay?: number;
/**
* On maximum retry times reached.
*/
onFailed?: Fn;
};
/**
* Automatically open a connection
*
* @default true
*/
immediate?: boolean;
/**
* Automatically close a connection
*
* @default true
*/
autoClose?: boolean;
/**
* List of one or more sub-protocol strings
*
* @default []
*/
protocols?: string[];
}
interface UseWebSocketReturn<T> {
/**
* Reference to the latest data received via the websocket,
* can be watched to respond to incoming messages
*/
data: Ref<T | null>;
/**
* The current websocket status, can be only one of:
* 'OPEN', 'CONNECTING', 'CLOSED'
*/
status: Ref<WebSocketStatus>;
/**
* Closes the websocket connection gracefully.
*/
close: WebSocket['close'];
/**
* Reopen the websocket connection.
* If there the current one is active, will close it before opening a new one.
*/
open: Fn;
/**
* Sends data through the websocket connection.
*
* @param data
* @param useBuffer when the socket is not yet open, store the data into the buffer and sent them one connected. Default to true.
*/
send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean) => boolean;
/**
* Reference to the WebSocket instance.
*/
ws: Ref<WebSocket | undefined>;
}
/**
* Reactive WebSocket client.
*
* @see https://vueuse.org/useWebSocket
* @param url
*/
declare function useWebSocket<Data = any>(url: MaybeComputedRef<string | URL | undefined>, options?: UseWebSocketOptions): UseWebSocketReturn<Data>;
interface UseWebWorkerReturn<Data = any> {
data: Ref<Data>;
post: typeof Worker.prototype['postMessage'];
terminate: () => void;
worker: ShallowRef<Worker | undefined>;
}
type WorkerFn = (...args: unknown[]) => Worker;
/**
* Simple Web Workers registration and communication.
*
* @see https://vueuse.org/useWebWorker
* @param url
* @param workerOptions
* @param options
*/
declare function useWebWorker<T = any>(url: string, workerOptions?: WorkerOptions, options?: ConfigurableWindow): UseWebWorkerReturn<T>;
/**
* Simple Web Workers registration and communication.
*
* @see https://vueuse.org/useWebWorker
* @param worker
*/
declare function useWebWorker<T = any>(worker: Worker | WorkerFn): UseWebWorkerReturn<T>;
type WebWorkerStatus = 'PENDING' | 'SUCCESS' | 'RUNNING' | 'ERROR' | 'TIMEOUT_EXPIRED';
interface UseWebWorkerOptions extends ConfigurableWindow {
/**
* Number of milliseconds before killing the worker
*
* @default undefined
*/
timeout?: number;
/**
* An array that contains the external dependencies needed to run the worker
*/
dependencies?: string[];
}
/**
* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.
*
* @see https://vueuse.org/useWebWorkerFn
* @param fn
* @param options
*/
declare const useWebWorkerFn: <T extends (...fnArgs: any[]) => any>(fn: T, options?: UseWebWorkerOptions) => {
workerFn: (...fnArgs: Parameters<T>) => Promise<ReturnType<T>>;
workerStatus: vue_demi.Ref<WebWorkerStatus>;
workerTerminate: (status?: WebWorkerStatus) => void;
};
type UseWebWorkerFnReturn = ReturnType<typeof useWebWorkerFn>;
/**
* Reactively track window focus with `window.onfocus` and `window.onblur`.
*
* @see https://vueuse.org/useWindowFocus
* @param options
*/
declare function useWindowFocus({ window }?: ConfigurableWindow): Ref<boolean>;
/**
* Reactive window scroll.
*
* @see https://vueuse.org/useWindowScroll
* @param options
*/
declare function useWindowScroll({ window }?: ConfigurableWindow): {
x: vue_demi.Ref<number>;
y: vue_demi.Ref<number>;
};
type UseWindowScrollReturn = ReturnType<typeof useWindowScroll>;
interface UseWindowSizeOptions extends ConfigurableWindow {
initialWidth?: number;
initialHeight?: number;
/**
* Listen to window `orientationchange` event
*
* @default true
*/
listenOrientation?: boolean;
/**
* Whether the scrollbar should be included in the width and height
* @default true
*/
includeScrollbar?: boolean;
}
/**
* Reactive window size.
*
* @see https://vueuse.org/useWindowSize
* @param options
*/
declare function useWindowSize(options?: UseWindowSizeOptions): {
width: vue_demi.Ref<number>;
height: vue_demi.Ref<number>;
};
type UseWindowSizeReturn = ReturnType<typeof useWindowSize>;
export { AfterFetchContext, AsyncComputedOnCancel, AsyncComputedOptions, BasicColorSchema, BatteryManager, BeforeFetchContext, Breakpoints, BrowserLocationState, CloneFn, ColorSchemeType, ComputedInjectGetter, ComputedInjectGetterWithDefault, ComputedInjectSetter, ConfigurableDocument, ConfigurableDocumentOrShadowRoot, ConfigurableLocation, ConfigurableNavigator, ConfigurableWindow, ContrastType, CreateFetchOptions, CubicBezierPoints, DefaultMagicKeysAliasMap, DeviceMotionOptions, DocumentEventName, EasingFunction, ElementSize, EventBusEvents, EventBusIdentifier, EventBusKey, EventBusListener, EyeDropper, EyeDropperOpenOptions, FileSystemAccessShowOpenFileOptions, FileSystemAccessShowSaveFileOptions, FileSystemAccessWindow, FileSystemFileHandle, FormatTimeAgoOptions, GeneralEventListener, GeneralPermissionDescriptor, KeyFilter, KeyModifier, KeyPredicate, KeyStrokeEventName, MagicKeysInternal, MaybeComputedElementRef, MaybeElement, MaybeElementRef, MemoryInfo, MouseInElementOptions, MousePressedOptions, MouseSourceType, NavigatorLanguageState, NetworkEffectiveType, NetworkState, NetworkType, OnClickOutsideHandler, OnClickOutsideOptions, OnFetchErrorContext, OnKeyStrokeOptions, OnLongPressModifiers, OnLongPressOptions, PointerType, Position, ReducedMotionType, RenderableComponent, ResizeObserverCallback, ResizeObserverEntry, ResizeObserverSize, SSRHandlersMap, Serializer, SerializerAsync, StorageEventLike, StorageLike, StorageLikeAsync, StorageSerializers, SwipeDirection, TemplateRefsList, ToDataURLOptions, TransitionPresets, UnRefElementReturn, UnrefFn, UrlParams, UseActiveElementOptions, UseAsyncQueueOptions, UseAsyncQueueResult, UseAsyncQueueReturn, UseAsyncQueueTask, UseAsyncStateOptions, UseAsyncStateReturn, UseBase64ObjectOptions, UseBase64Return, UseBatteryReturn, UseBluetoothOptions, UseBluetoothRequestDeviceOptions, UseBluetoothReturn, UseBreakpointsReturn, UseBroadcastChannelOptions, UseBroadcastChannelReturn, UseBrowserLocationReturn, UseClipboardOptions, UseClipboardReturn, UseClonedOptions, UseClonedReturn, UseColorModeOptions, UseConfirmDialogReturn, UseConfirmDialogRevealResult, UseCssVarOptions, UseCycleListOptions, UseCycleListReturn, UseDarkOptions, UseDeviceMotionReturn, UseDeviceOrientationReturn, UseDevicePixelRatioReturn, UseDevicesListOptions, UseDevicesListReturn, UseDisplayMediaOptions, UseDisplayMediaReturn, UseDraggableOptions, UseDraggableReturn, UseDropZoneReturn, UseElementBoundingOptions, UseElementBoundingReturn, UseElementByPointOptions, UseElementByPointReturn, UseElementHoverOptions, UseElementSizeReturn, UseElementVisibilityOptions, UseEventBusReturn, UseEventSourceOptions, UseEventSourceReturn, UseEyeDropperOptions, UseEyeDropperReturn, UseFaviconOptions, UseFaviconReturn, UseFetchOptions, UseFetchReturn, UseFileDialogOptions, UseFileDialogReturn, UseFileSystemAccessCommonOptions, UseFileSystemAccessOptions, UseFileSystemAccessReturn, UseFileSystemAccessShowSaveFileOptions, UseFocusOptions, UseFocusReturn, UseFocusWithinReturn, UseFpsOptions, UseFullscreenOptions, UseFullscreenReturn, UseGamepadOptions, UseGamepadReturn, UseGeolocationOptions, UseGeolocationReturn, UseHorizontalVirtualListOptions, UseIdleOptions, UseIdleReturn, UseImageOptions, UseImageReturn, UseInfiniteScrollOptions, UseIntersectionObserverOptions, UseIntersectionObserverReturn, UseKeyModifierReturn, UseMagicKeysOptions, UseMagicKeysReturn, UseManualRefHistoryOptions, UseManualRefHistoryReturn, UseMediaControlsReturn, UseMediaSource, UseMediaTextTrack, UseMediaTextTrackSource, UseMemoizeCache, UseMemoizeOptions, UseMemoizeReturn, UseMemoryOptions, UseMemoryReturn, UseModifierOptions, UseMouseInElementReturn, UseMouseOptions, UseMousePressedReturn, UseMouseReturn, UseMutationObserverOptions, UseMutationObserverReturn, UseNavigatorLanguageReturn, UseNetworkReturn, UseNowOptions, UseNowReturn, UseOffsetPaginationInfinityPageReturn, UseOffsetPaginationOptions, UseOffsetPaginationReturn, UseParallaxOptions, UseParallaxReturn, UsePermissionOptions, UsePermissionReturn, UsePermissionReturnWithControls, UsePointerLockOptions