UNPKG

@reactive-vscode/vueuse

Version:

Useful VueUse utilities for VSCode extension development

1,430 lines (1,184 loc) 103 kB
import { ComputedGetter } from '@reactive-vscode/reactivity'; import { ComputedRef } from '@reactive-vscode/reactivity'; import { MaybeRef } from '@reactive-vscode/reactivity'; import { MaybeRefOrGetter } from '@reactive-vscode/reactivity'; import { Ref } from '@reactive-vscode/reactivity'; import { ShallowRef } from '@reactive-vscode/reactivity'; import { ShallowUnwrapRef as ShallowUnwrapRef_2 } from '@reactive-vscode/reactivity'; import { ToRef } from '@reactive-vscode/reactivity'; import { ToRefs } from '@reactive-vscode/reactivity'; import { toValue as toValue_2 } from '@reactive-vscode/reactivity'; import { UnwrapNestedRefs } from '@reactive-vscode/reactivity'; import { UnwrapRef } from '@reactive-vscode/reactivity'; import * as vue from '@reactive-vscode/reactivity'; import { WatchCallback } from '@reactive-vscode/reactivity'; import { WatchOptions } from '@reactive-vscode/reactivity'; import { WatchSource } from '@reactive-vscode/reactivity'; import { WatchStopHandle } from '@reactive-vscode/reactivity'; import { WritableComputedOptions } from '@reactive-vscode/reactivity'; import { WritableComputedRef } from '@reactive-vscode/reactivity'; export declare interface AfterFetchContext<T = any> { response: Response; data: T | null; context: BeforeFetchContext; execute: (throwOnFailed?: boolean) => Promise<any>; } /** * Any function */ export declare type AnyFn = (...args: any[]) => any; export declare type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never; export declare type Arrayable<T> = T[] | T; export declare const assert: (condition: boolean, ...infos: any[]) => void; /** * 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 */ export declare type AsyncComputedOnCancel = (cancelCallback: Fn) => void; export declare interface AsyncComputedOptions<Lazy = boolean> { /** * Should value be evaluated lazily * * @default false */ lazy?: Lazy; /** * Ref passed to receive the updated of async evaluation */ evaluating?: Ref<boolean>; /** * Use shallowRef * * @default true */ shallow?: 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'; /** * Callback when error is caught. */ onError?: (e: unknown) => void; } export declare type Awaitable<T> = Promise<T> | T; /** * Compatible with versions below TypeScript 4.5 Awaited */ declare type Awaited_2<T> = T extends null | undefined ? T : T extends object & { then: (onfulfilled: infer F, ...args: infer _) => any; } ? F extends ((value: infer V, ...args: infer _) => any) ? Awaited_2<V> : never : T; export { Awaited_2 as Awaited } export declare 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; } declare interface BrowserLocationState { readonly trigger: string; readonly state?: any; readonly length?: number; readonly origin?: string; hash?: string; host?: string; hostname?: string; href?: string; pathname?: string; port?: string; protocol?: string; search?: string; } export declare const bypassFilter: EventFilter; /** * The source code for this function was inspired by vue-apollo's `useEventHook` util * https://github.com/vuejs/vue-apollo/blob/v4/packages/vue-apollo-composable/src/util/useEventHook.ts */ declare type Callback<T> = IsAny<T> extends true ? (...param: any) => void : ([ T ] extends [void] ? (...param: unknown[]) => void : [T] extends [any[]] ? (...param: T) => void : (...param: [T, ...unknown[]]) => void); export declare const camelize: (str: string) => string; export declare const clamp: (n: number, min: number, max: number) => number; export declare type CloneFn<F, T = F> = (x: F) => T; export declare function cloneFnJSON<T>(source: T): T; declare type Combination = 'overwrite' | 'chain'; /** * 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: AsyncComputedOptions<true>): ComputedRef<T>; declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState: undefined, optionsOrRef: AsyncComputedOptions<true>): ComputedRef<T | undefined>; declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState: T, optionsOrRef?: Ref<boolean> | AsyncComputedOptions): Ref<T>; declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState?: undefined, optionsOrRef?: Ref<boolean> | AsyncComputedOptions): Ref<T | undefined>; export { computedAsync as asyncComputed } export { computedAsync } declare type ComputedInjectGetter<T, K> = (source: T | undefined, oldValue?: K) => K; declare type ComputedInjectGetterWithDefault<T, K> = (source: T, oldValue?: K) => K; declare type ComputedInjectSetter<T> = (v: T) => void; export declare interface ComputedRefWithControl<T> extends ComputedRef<T>, ComputedWithControlRefExtra { } declare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: ComputedGetter<T>, options?: WatchOptions): ComputedRefWithControl<T>; declare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: WritableComputedOptions<T>, options?: WatchOptions): WritableComputedRefWithControl<T>; export { computedWithControl } export { computedWithControl as controlledComputed } export declare interface ComputedWithControlRefExtra { /** * Force update the computed value. */ trigger: () => void; } declare interface ConfigurableDeepRefs<D extends boolean> { /** * Return deep refs instead of shallow refs. * * @default true - will be changed to `false` by default in the next major */ deepRefs?: D; } export declare interface ConfigurableEventFilter { /** * Filter for if events should to be received. * * @see https://vueuse.org/guide/config.html#event-filters */ eventFilter?: EventFilter; } export declare interface ConfigurableFlush { /** * Timing for monitoring changes, refer to WatchOptions for more details * * @default 'pre' */ flush?: WatchOptions['flush']; } export declare interface ConfigurableFlushSync { /** * Timing for monitoring changes, refer to WatchOptions for more details. * Unlike `watch()`, the default is set to `sync` * * @default 'sync' */ flush?: WatchOptions['flush']; } declare interface ConfigurableNavigator { navigator?: Navigator; } declare interface ConfigurableWindow { window?: Window; } export declare function containsProp(obj: object, ...props: string[]): boolean; /** * Alias for `refWithControl` */ export declare const controlledRef: typeof refWithControl; export declare interface ControlledRefOptions<T> { /** * Callback function before the ref changing. * * Returning `false` to dismiss the change. */ onBeforeChange?: (value: T, oldValue: T) => void | boolean; /** * Callback function after the ref changed * * This happens synchronously, with less overhead compare to `watch` */ onChanged?: (value: T, oldValue: T) => void; } /** * Utility for creating event hooks * * @see https://vueuse.org/createEventHook * * @__NO_SIDE_EFFECTS__ */ export declare function createEventHook<T = any>(): EventHookReturn<T>; export declare function createFetch(config?: CreateFetchOptions): typeof useFetch; export declare interface CreateFetchOptions { /** * The base URL that will be prefixed to all urls unless urls are absolute */ baseUrl?: MaybeRefOrGetter<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; } /* Excluded from this release type: createFilterWrapper */ /** * Keep states in the global scope to be reusable across Vue instances. * * @see https://vueuse.org/createGlobalState * @param stateFactory A factory function to create the state * * @__NO_SIDE_EFFECTS__ */ export declare function createGlobalState<Fn extends AnyFn>(stateFactory: Fn): CreateGlobalStateReturn<Fn>; declare type CreateGlobalStateReturn<Fn extends AnyFn = AnyFn> = Fn; /** * Make a composable function usable with multiple Vue instances. * * @see https://vueuse.org/createSharedComposable * * @__NO_SIDE_EFFECTS__ */ export declare function createSharedComposable<Fn extends AnyFn>(composable: Fn): SharedComposableReturn<Fn>; /** * Create singleton promise function * * @example * ``` * const promise = createSingletonPromise(async () => { ... }) * * await promise() * await promise() // all of them will be bind to a single promise instance * await promise() // and be resolved together * ``` */ export declare function createSingletonPromise<T>(fn: () => Promise<T>): SingletonPromiseReturn<T>; /** * Make a plain function accepting ref and raw values as arguments. * Returns the same value the unconverted function returns, with proper typing. * * @__NO_SIDE_EFFECTS__ */ export declare function createUnrefFn<T extends Function>(fn: T): UnrefFn<T>; export declare type DateLike = Date | number | string | undefined; /** * Create an EventFilter that debounce the events */ export declare function debounceFilter(ms: MaybeRefOrGetter<number>, options?: DebounceFilterOptions): EventFilter<any[], any, AnyFn>; export declare interface DebounceFilterOptions { /** * The maximum time allowed to be delayed before it's invoked. * In milliseconds. */ maxWait?: MaybeRefOrGetter<number>; /** * Whether to reject the last call if it's been cancel. * * @default false */ rejectOnCancel?: boolean; } /** * Make all the nested attributes of an object or array to MaybeRef<T> * * Good for accepting options that will be wrapped with `reactive` or `ref` * * ```ts * UnwrapRef<DeepMaybeRef<T>> === T * ``` */ export declare type DeepMaybeRef<T> = T extends Ref<infer V> ? MaybeRef<V> : T extends Array<any> | object ? { [K in keyof T]: DeepMaybeRef<T[K]>; } : MaybeRef<T>; declare type Direction = 'ltr' | 'rtl' | 'both'; /** * Infers the element type of an array */ export declare type ElementOf<T> = T extends (infer E)[] ? E : never; /** * A = B */ declare type Equal<A, B> = [A] extends [B] ? ([B] extends [A] ? true : false) : false; declare interface EqualType<D extends Direction, L, R, O extends keyof Transform<L, R> = D extends 'both' ? 'ltr' | 'rtl' : D> { transform?: SpecificFieldPartial<Pick<Transform<L, R>, O>, O>; } export declare type EventBusEvents<T, P = any> = Set<EventBusListener<T, P>>; export declare type EventBusIdentifier<T = unknown> = EventBusKey<T> | string | number; export declare interface EventBusKey<T> extends Symbol { } export declare type EventBusListener<T = unknown, P = any> = (event: T, payload?: P) => void; export declare type EventFilter<Args extends any[] = any[], This = any, Invoke extends AnyFn = AnyFn> = (invoke: Invoke, options: FunctionWrapperOptions<Args, This>) => ReturnType<Invoke> | Promisify<ReturnType<Invoke>>; export declare interface EventHook<T = any> { on: EventHookOn<T>; off: EventHookOff<T>; trigger: EventHookTrigger<T>; clear: () => void; } export declare type EventHookOff<T = any> = (fn: Callback<T>) => void; export declare type EventHookOn<T = any> = (fn: Callback<T>) => { off: () => void; }; declare type EventHookReturn<T> = EventHook<T>; export declare type EventHookTrigger<T = any> = (...param: Parameters<Callback<T>>) => Promise<unknown[]>; /** * Overload 1: Unwrap set to false */ export declare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions<false>>(ref: R, extend: Extend, options?: Options): ShallowUnwrapRef_2<Extend> & R; /** * Overload 2: Unwrap unset or set to true */ export declare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions>(ref: R, extend: Extend, options?: Options): Extend & R; export declare interface ExtendRefOptions<Unwrap extends boolean = boolean> { /** * Is the extends properties enumerable * * @default false */ enumerable?: boolean; /** * Unwrap for Ref properties * * @default true */ unwrap?: Unwrap; } declare type Falsy = false | void | null | undefined | 0 | 0n | ''; /** * Void function */ export declare type Fn = () => void; export declare function formatDate(date: Date, formatStr: string, options?: UseDateFormatOptions): string; export declare function formatTimeAgo<UnitNames extends string = UseTimeAgoUnitNamesDefault>(from: Date, options?: FormatTimeAgoOptions<UnitNames>, now?: Date | number): string; export declare 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<UnitNames>[]; } export declare type FunctionArgs<Args extends any[] = any[], Return = void> = (...args: Args) => Return; export declare interface FunctionWrapperOptions<Args extends any[] = any[], This = any> { fn: FunctionArgs<Args, This>; args: Args; thisArg: This; } export declare interface GeneralEventListener<E = Event> { (evt: E): void; } /** * Shorthand for accessing `ref.value` */ export declare function get<T>(ref: MaybeRef<T>): T; export declare function get<T, K extends keyof T>(ref: MaybeRef<T>, key: K): T[K]; export declare function getLifeCycleTarget(target?: any): any; export declare const hasOwn: <T extends object, K extends keyof T>(val: T, key: K) => key is K; export declare const hyphenate: (str: string) => string; export declare function identity<T>(arg: T): T; export declare type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N; declare type IgnoredPrevAsyncUpdates = () => void; export declare type IgnoredUpdater = (updater: () => void) => void; /** * A ⊆ B */ declare type IncludeButNotEqual<A, B> = Equal<A, B> extends true ? false : A extends B ? true : false; /** * Increase string a value with unit * * @example '2px' + 1 = '3px' * @example '15em' + (-2) = '13em' */ export declare function increaseWithUnit(target: number, delta: number): number; export declare function increaseWithUnit(target: string, delta: number): string; export declare function increaseWithUnit(target: string | number, delta: number): string | number; /** * A ∩ B ≠ ∅ */ declare type IntersectButNotEqual<A, B> = Equal<A, B> extends true ? false : A & B extends never ? false : true; declare type IntersectButNotEqualType<D extends Direction, L, R> = D extends 'both' ? { transform: Transform<L, R>; } : D extends Exclude<Direction, 'both'> ? { transform: Pick<Transform<L, R>, D>; } : never; export declare function invoke<T>(fn: () => T): T; /** * will return `true` if `T` is `any`, or `false` otherwise */ export declare type IsAny<T> = IfAny<T, true, false>; export declare const isDef: <T = any>(val?: T) => val is T; export declare function isDefined<T>(v: ComputedRef<T>): v is ComputedRef<Exclude<T, null | undefined>>; export declare function isDefined<T>(v: Ref<T>): v is Ref<Exclude<T, null | undefined>>; export declare function isDefined<T>(v: T): v is Exclude<T, null | undefined>; export declare const isObject: (val: any) => val is object; export declare function makeDestructurable<T extends Record<string, unknown>, A extends readonly any[]>(obj: T, arr: A): T & A; export declare type MapOldSources<T, Immediate> = { [K in keyof T]: T[K] extends WatchSource<infer V> ? Immediate extends true ? V | undefined : V : never; }; declare type MapQueueTask<T extends any[]> = { [K in keyof T]: UseAsyncQueueTask<T[K]>; }; export declare type MapSources<T> = { [K in keyof T]: T[K] extends WatchSource<infer V> ? V : never; }; export declare type MultiWatchSources = (WatchSource<unknown> | object)[]; export declare type Mutable<T> = { -readonly [P in keyof T]: T[P]; }; export declare const noop: () => void; export declare function normalizeDate(date: DateLike): Date; /** * A ∩ B = ∅ */ declare type NotIntersect<A, B> = Equal<A, B> extends true ? false : A & B extends never ? true : false; declare type NotIntersectType<D extends Direction, L, R> = IntersectButNotEqualType<D, L, R>; export declare const notNullish: <T = any>(val?: T | null | undefined) => val is T; export declare const now: () => number; export declare function objectEntries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]>; /** * Create a new subset object by omit giving keys */ export declare function objectOmit<O extends object, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Omit<O, T>; /** * Create a new subset object by giving keys */ export declare function objectPick<O extends object, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Pick<O, T>; declare type OnCleanup = (cleanupFn: () => void) => void; export declare interface OnFetchErrorContext<T = any, E = any> { error: E; data: T | null; response: Response | null; context: BeforeFetchContext; execute: (throwOnFailed?: boolean) => Promise<any>; } export declare interface Pausable { /** * A ref indicate whether a pausable instance is active */ readonly isActive: Readonly<ShallowRef<boolean>>; /** * Temporary pause the effect from executing */ pause: Fn; /** * Resume the effects */ resume: Fn; } /** * EventFilter that gives extra controls to pause and resume the filter * * @param extendFilter Extra filter to apply when the PausableFilter is active, default to none * @param options Options to configure the filter */ export declare function pausableFilter(extendFilter?: EventFilter, options?: PausableFilterOptions): Pausable & { eventFilter: EventFilter; }; declare interface PausableFilterOptions { /** * The initial state * * @default 'active' */ initialState?: 'active' | 'paused'; } declare type PostMessage = typeof Worker.prototype['postMessage']; export declare function promiseTimeout(ms: number, throwOnTimeout?: boolean, reason?: string): Promise<void>; export declare type Promisify<T> = Promise<Awaited_2<T>>; export declare type PromisifyFn<T extends AnyFn> = (...args: ArgumentsType<T>) => Promisify<ReturnType<T>>; export declare const rand: (min: number, max: number) => number; export declare type Reactified<T, Computed extends boolean> = T extends (...args: infer A) => infer R ? (...args: { [K in keyof A]: Computed extends true ? MaybeRefOrGetter<A[K]> : MaybeRef<A[K]>; }) => ComputedRef<R> : never; /** * Converts plain function into a reactive function. * The converted function accepts refs as it's arguments * and returns a ComputedRef, with proper typing. * * @param fn - Source function * @param options - Options * * @__NO_SIDE_EFFECTS__ */ declare function reactify<T extends AnyFn, K extends boolean = true>(fn: T, options?: ReactifyOptions<K>): ReactifyReturn<T, K>; export { reactify as createReactiveFn } export { reactify } export declare type ReactifyNested<T, Keys extends keyof T = keyof T, S extends boolean = true> = { [K in Keys]: T[K] extends AnyFn ? Reactified<T[K], S> : T[K]; }; /** * Apply `reactify` to an object * * @__NO_SIDE_EFFECTS__ */ export declare function reactifyObject<T extends object, Keys extends keyof T>(obj: T, keys?: (keyof T)[]): ReactifyObjectReturn<T, Keys, true>; export declare function reactifyObject<T extends object, S extends boolean = true>(obj: T, options?: ReactifyObjectOptions<S>): ReactifyObjectReturn<T, keyof T, S>; export declare interface ReactifyObjectOptions<T extends boolean> extends ReactifyOptions<T> { /** * Includes names from Object.getOwnPropertyNames * * @default true */ includeOwnProperties?: boolean; } declare type ReactifyObjectReturn<T, Keys extends keyof T, S extends boolean = true> = ReactifyNested<T, Keys, S>; export declare interface ReactifyOptions<T extends boolean> { /** * Accept passing a function as a reactive getter * * @default true */ computedGetter?: T; } declare type ReactifyReturn<T extends AnyFn = AnyFn, K extends boolean = true> = Reactified<T, K>; /** * Computed reactive object. */ export declare function reactiveComputed<T extends object>(fn: ComputedGetter<T>): ReactiveComputedReturn<T>; declare type ReactiveComputedReturn<T extends object> = UnwrapNestedRefs<T>; export declare function reactiveOmit<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): ReactiveOmitReturn<T, K>; export declare function reactiveOmit<T extends object>(obj: T, predicate: ReactiveOmitPredicate<T>): ReactiveOmitReturn<T>; export declare type ReactiveOmitPredicate<T> = (value: T[keyof T], key: keyof T) => boolean; declare type ReactiveOmitReturn<T extends object, K extends keyof T | undefined = undefined> = [K] extends [undefined] ? Partial<T> : Omit<T, Extract<K, keyof T>>; export declare function reactivePick<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): ReactivePickReturn<T, K>; export declare function reactivePick<T extends object>(obj: T, predicate: ReactivePickPredicate<T>): ReactivePickReturn<T, keyof T>; export declare type ReactivePickPredicate<T> = (value: T[keyof T], key: keyof T) => boolean; declare type ReactivePickReturn<T extends object, K extends keyof T> = { [S in K]: UnwrapRef<T[S]>; }; /** * Maybe it's a computed ref, or a readonly value, or a getter function */ export declare type ReadonlyRefOrGetter<T> = ComputedRef<T> | (() => T); /** * Create a ref which will be reset to the default value after some time. * * @see https://vueuse.org/refAutoReset * @param defaultValue The value which will be set. * @param afterMs A zero-or-greater delay in milliseconds. */ declare function refAutoReset<T>(defaultValue: MaybeRefOrGetter<T>, afterMs?: MaybeRefOrGetter<number>): RefAutoResetReturn<T>; export { refAutoReset as autoResetRef } export { refAutoReset } declare type RefAutoResetReturn<T = any> = Ref<T>; /** * Debounce updates of a ref. * * @return A new debounced ref. */ declare function refDebounced<T>(value: Ref<T>, ms?: MaybeRefOrGetter<number>, options?: DebounceFilterOptions): RefDebouncedReturn<T>; export { refDebounced as debouncedRef } export { refDebounced } export { refDebounced as useDebounce } declare type RefDebouncedReturn<T = any> = Readonly<Ref<T>>; /** * Apply default value to a ref. * * @__NO_SIDE_EFFECTS__ */ export declare function refDefault<T>(source: Ref<T | undefined | null>, defaultValue: T): Ref<T>; /** * Throttle execution of a function. Especially useful for rate limiting * execution of handlers on events like resize and scroll. * * @param value Ref value to be watched with throttle effect * @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful. * @param trailing if true, update the value again after the delay time is up * @param leading if true, update the value on the leading edge of the ms timeout */ declare function refThrottled<T = any>(value: Ref<T>, delay?: number, trailing?: boolean, leading?: boolean): RefThrottledReturn<T>; export { refThrottled } export { refThrottled as throttledRef } export { refThrottled as useThrottle } declare type RefThrottledReturn<T = any> = Ref<T>; /** * Fine-grained controls over ref and its reactivity. * * @__NO_SIDE_EFFECTS__ */ export declare function refWithControl<T>(initial: T, options?: ControlledRefOptions<T>): vue.ShallowUnwrapRef<{ get: (tracking?: boolean) => T; set: (value: T, triggering?: boolean) => void; untrackedGet: () => T; silentSet: (v: T) => void; peek: () => T; lay: (v: T) => void; }> & vue.Ref<T, T>; /** * A ref that allow to set null or undefined */ export declare type RemovableRef<T> = Omit<Ref<T>, 'value'> & { get value(): T; set value(value: T | null | undefined); }; /** * @deprecated use `toRef` instead */ export declare const resolveRef: typeof toRef; /** * @deprecated use `toValue` instead */ export declare const resolveUnref: typeof toValue_2; export declare interface Serializer<T> { read: (raw: string) => T; write: (value: T) => string; } export declare interface SerializerAsync<T> { read: (raw: string) => Awaitable<T>; write: (value: T) => Awaitable<string>; } export declare function set<T>(ref: Ref<T>, value: T): void; export declare function set<O extends object, K extends keyof O>(target: O, key: K, value: O[K]): void; declare type ShallowOrDeepRef<T = any, D extends boolean = false> = D extends true ? Ref<T> : ShallowRef<T>; export declare type ShallowUnwrapRef<T> = T extends Ref<infer P> ? P : T; declare type SharedComposableReturn<T extends AnyFn = AnyFn> = T; export declare interface SingletonPromiseReturn<T> { (): Promise<T>; /** * Reset current staled promise. * await it to have proper shutdown. */ reset: () => Promise<void>; } declare type SpecificFieldPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>; export declare interface Stoppable<StartFnArgs extends any[] = any[]> { /** * A ref indicate whether a stoppable instance is executing */ readonly isPending: Readonly<Ref<boolean>>; /** * Stop the effect from executing */ stop: Fn; /** * Start the effects */ start: (...args: StartFnArgs) => void; } declare type StrictIncludeMap<IncludeType extends 'LR' | 'RL', D extends Exclude<Direction, 'both'>, L, R> = (Equal<[IncludeType, D], ['LR', 'ltr']> & Equal<[IncludeType, D], ['RL', 'rtl']>) extends true ? { transform?: SpecificFieldPartial<Pick<Transform<L, R>, D>, D>; } : { transform: Pick<Transform<L, R>, D>; }; declare type StrictIncludeType<IncludeType extends 'LR' | 'RL', D extends Direction, L, R> = D extends 'both' ? { transform: SpecificFieldPartial<Transform<L, R>, IncludeType extends 'LR' ? 'ltr' : 'rtl'>; } : D extends Exclude<Direction, 'both'> ? StrictIncludeMap<IncludeType, D, L, R> : never; /** * Two-way refs synchronization. * From the set theory perspective to restrict the option's type * Check in the following order: * 1. L = R * 2. L ∩ R ≠ ∅ * 3. L ⊆ R * 4. L ∩ R = ∅ */ export declare function syncRef<L, R, D extends Direction = 'both'>(left: Ref<L>, right: Ref<R>, ...[options]: Equal<L, R> extends true ? [options?: SyncRefOptions<L, R, D>] : [options: SyncRefOptions<L, R, D>]): () => void; export declare type SyncRefOptions<L, R, D extends Direction> = ConfigurableFlushSync & { /** * Watch deeply * * @default false */ deep?: boolean; /** * Sync values immediately * * @default true */ immediate?: boolean; /** * Direction of syncing. Value will be redefined if you define syncConvertors * * @default 'both' */ direction?: D; } & TransformType<D, L, R>; /** * Keep target ref(s) in sync with the source ref * * @param source source ref * @param targets */ export declare function syncRefs<T>(source: WatchSource<T>, targets: Ref<T> | Ref<T>[], options?: SyncRefsOptions): vue.WatchHandle; export declare interface SyncRefsOptions extends ConfigurableFlushSync { /** * Watch deeply * * @default false */ deep?: boolean; /** * Sync values immediately * * @default true */ immediate?: boolean; } /** * Create an EventFilter that throttle the events */ export declare function throttleFilter(ms: MaybeRefOrGetter<number>, trailing?: boolean, leading?: boolean, rejectOnCancel?: boolean): EventFilter; export declare function throttleFilter(options: ThrottleFilterOptions): EventFilter; export declare interface ThrottleFilterOptions { /** * The maximum time allowed to be delayed before it's invoked. */ delay: MaybeRefOrGetter<number>; /** * Whether to invoke on the trailing edge of the timeout. */ trailing?: boolean; /** * Whether to invoke on the leading edge of the timeout. */ leading?: boolean; /** * Whether to reject the last call if it's been cancel. */ rejectOnCancel?: boolean; } export declare interface ToDataURLOptions extends UseBase64Options { /** * MIME type */ type?: string | undefined; /** * Image quality of jpeg or webp */ quality?: any; } /** * Converts ref to reactive. * * @see https://vueuse.org/toReactive * @param objectRef A ref of object */ export declare function toReactive<T extends object>(objectRef: MaybeRef<T>): UnwrapNestedRefs<T>; /** * Normalize value/ref/getter to `ref` or `computed`. */ export declare function toRef<T>(r: () => T): Readonly<Ref<T>>; export declare function toRef<T>(r: ComputedRef<T>): ComputedRef<T>; export declare function toRef<T>(r: MaybeRefOrGetter<T>): Ref<T>; export declare function toRef<T>(r: T): Ref<T>; export declare function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>; export declare function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<Exclude<T[K], undefined>>; /** * Extended `toRefs` that also accepts refs of an object. * * @see https://vueuse.org/toRefs * @param objectRef A ref or normal object or array. * @param options Options */ export declare function toRefs<T extends object>(objectRef: MaybeRef<T>, options?: ToRefsOptions): ToRefs<T>; export declare interface ToRefsOptions { /** * Replace the original ref with a copy on property update. * * @default true */ replaceRef?: MaybeRefOrGetter<boolean>; } /** * Get the value of value/ref/getter. * * @deprecated use `toValue` from `vue` instead */ export declare const toValue: typeof toValue_2; declare interface Transform<L, R> { ltr: (left: L) => R; rtl: (right: R) => L; } declare type TransformType<D extends Direction, L, R> = Equal<L, R> extends true ? EqualType<D, L, R> : IncludeButNotEqual<L, R> extends true ? StrictIncludeType<'LR', D, L, R> : IncludeButNotEqual<R, L> extends true ? StrictIncludeType<'RL', D, L, R> : IntersectButNotEqual<L, R> extends true ? IntersectButNotEqualType<D, L, R> : NotIntersect<L, R> extends true ? NotIntersectType<D, L, R> : never; /** * Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing * * @param fn */ export declare function tryOnScopeDispose(fn: Fn): boolean; export declare type UnrefFn<T> = T extends (...args: infer A) => infer R ? (...args: { [K in keyof A]: MaybeRef<A[K]>; }) => R : never; /** * Promised one-time watch for changes * * @see https://vueuse.org/until * @example * ``` * const { count } = useCounter() * * await until(count).toMatch(v => v > 7) * * alert('Counter is now larger than 7!') * ``` */ export declare function until<T extends unknown[]>(r: WatchSource<T> | MaybeRefOrGetter<T>): UntilArrayInstance<T>; export declare function until<T>(r: WatchSource<T> | MaybeRefOrGetter<T>): UntilValueInstance<T>; export declare interface UntilArrayInstance<T> extends UntilBaseInstance<T> { readonly not: UntilArrayInstance<T>; toContains: (value: MaybeRefOrGetter<ElementOf<ShallowUnwrapRef<T>>>, options?: UntilToMatchOptions) => Promise<T>; } declare interface UntilBaseInstance<T, Not extends boolean = false> { toMatch: (<U extends T = T>(condition: (v: T) => v is U, options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, U>> : Promise<U>) & ((condition: (v: T) => boolean, options?: UntilToMatchOptions) => Promise<T>); changed: (options?: UntilToMatchOptions) => Promise<T>; changedTimes: (n?: number, options?: UntilToMatchOptions) => Promise<T>; } export declare interface UntilToMatchOptions { /** * Milliseconds timeout for promise to resolve/reject if the when condition does not meet. * 0 for never timed out * * @default 0 */ timeout?: number; /** * Reject the promise when timeout * * @default false */ throwOnTimeout?: boolean; /** * `flush` option for internal watch * * @default 'sync' */ flush?: WatchOptions['flush']; /** * `deep` option for internal watch * * @default 'false' */ deep?: WatchOptions['deep']; } export declare interface UntilValueInstance<T, Not extends boolean = false> extends UntilBaseInstance<T, Not> { readonly not: UntilValueInstance<T, Not extends true ? false : true>; toBe: <P = T>(value: MaybeRefOrGetter<P>, options?: UntilToMatchOptions) => Not extends true ? Promise<T> : Promise<P>; toBeTruthy: (options?: UntilToMatchOptions) => Not extends true ? Promise<T & Falsy> : Promise<Exclude<T, Falsy>>; toBeNull: (options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, null>> : Promise<null>; toBeUndefined: (options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, undefined>> : Promise<undefined>; toBeNaN: (options?: UntilToMatchOptions) => Promise<T>; } export declare type UrlParams = Record<string, string[] | string>; export declare function useArrayDifference<T>(list: MaybeRefOrGetter<T[]>, values: MaybeRefOrGetter<T[]>, key?: keyof T, options?: UseArrayDifferenceOptions): UseArrayDifferenceReturn<T>; export declare function useArrayDifference<T>(list: MaybeRefOrGetter<T[]>, values: MaybeRefOrGetter<T[]>, compareFn?: (value: T, othVal: T) => boolean, options?: UseArrayDifferenceOptions): UseArrayDifferenceReturn<T>; declare interface UseArrayDifferenceOptions { /** * Returns asymmetric difference * * @see https://en.wikipedia.org/wiki/Symmetric_difference * @default false */ symmetric?: boolean; } declare type UseArrayDifferenceReturn<T = any> = ComputedRef<T[]>; /** * Reactive `Array.every` * * @see https://vueuse.org/useArrayEvery * @param list - the array was called upon. * @param fn - a function to test each element. * * @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayEvery<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): UseArrayEveryReturn; declare type UseArrayEveryReturn = ComputedRef<boolean>; /** * Reactive `Array.filter` * * @see https://vueuse.org/useArrayFilter * @param list - the array was called upon. * @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array. * * @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayFilter<T, S extends T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => element is S): UseArrayFilterReturn<S>; export declare function useArrayFilter<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => unknown): UseArrayFilterReturn<T>; declare type UseArrayFilterReturn<T = any> = ComputedRef<T[]>; /** * Reactive `Array.find` * * @see https://vueuse.org/useArrayFind * @param list - the array was called upon. * @param fn - a function to test each element. * * @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayFind<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => boolean): UseArrayFindReturn<T>; /** * Reactive `Array.findIndex` * * @see https://vueuse.org/useArrayFindIndex * @param list - the array was called upon. * @param fn - a function to test each element. * * @returns the index of the first element in the array that passes the test. Otherwise, "-1". * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayFindIndex<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): UseArrayFindIndexReturn; declare type UseArrayFindIndexReturn = ComputedRef<number>; /** * Reactive `Array.findLast` * * @see https://vueuse.org/useArrayFindLast * @param list - the array was called upon. * @param fn - a function to test each element. * * @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayFindLast<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => boolean): UseArrayFindLastReturn<T>; declare type UseArrayFindLastReturn<T = any> = ComputedRef<T | undefined>; declare type UseArrayFindReturn<T = any> = ComputedRef<T | undefined>; /** * Reactive `Array.includes` * * @see https://vueuse.org/useArrayIncludes * * @returns true if the `value` is found in the array. Otherwise, false. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, comparator?: UseArrayIncludesComparatorFn<T, V>): UseArrayIncludesReturn; export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, comparator?: keyof T): UseArrayIncludesReturn; export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, options?: UseArrayIncludesOptions<T, V>): UseArrayIncludesReturn; export declare type UseArrayIncludesComparatorFn<T, V> = ((element: T, value: V, index: number, array: MaybeRefOrGetter<T>[]) => boolean); export declare interface UseArrayIncludesOptions<T, V> { fromIndex?: number; comparator?: UseArrayIncludesComparatorFn<T, V> | keyof T; } declare type UseArrayIncludesReturn = ComputedRef<boolean>; /** * Reactive `Array.join` * * @see https://vueuse.org/useArrayJoin * @param list - the array was called upon. * @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (","). * * @returns a string with all array elements joined. If arr.length is 0, the empty string is returned. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayJoin(list: MaybeRefOrGetter<MaybeRefOrGetter<any>[]>, separator?: MaybeRefOrGetter<string>): UseArrayJoinReturn; declare type UseArrayJoinReturn = ComputedRef<string>; /** * Reactive `Array.map` * * @see https://vueuse.org/useArrayMap * @param list - the array was called upon. * @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array. * * @returns a new array with each element being the result of the callback function. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayMap<T, U = T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => U): UseArrayMapReturn<U>; declare type UseArrayMapReturn<T = any> = ComputedRef<T[]>; /** * Reactive `Array.reduce` * * @see https://vueuse.org/useArrayReduce * @param list - the array was called upon. * @param reducer - a "reducer" function. * * @returns the value that results from running the "reducer" callback function to completion over the entire array. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayReduce<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, reducer: UseArrayReducer<T, T, T>): ComputedRef<T>; /** * Reactive `Array.reduce` * * @see https://vueuse.org/useArrayReduce * @param list - the array was called upon. * @param reducer - a "reducer" function. * @param initialValue - a value to be initialized the first time when the callback is called. * * @returns the value that results from running the "reducer" callback function to completion over the entire array. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayReduce<T, U>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, reducer: UseArrayReducer<U, T, U>, initialValue: MaybeRefOrGetter<U>): ComputedRef<U>; export declare type UseArrayReducer<PV, CV, R> = (previousValue: PV, currentValue: CV, currentIndex: number) => R; /** * Reactive `Array.some` * * @see https://vueuse.org/useArraySome * @param list - the array was called upon. * @param fn - a function to test each element. * * @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**. * * @__NO_SIDE_EFFECTS__ */ export declare function useArraySome<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): UseArraySomeReturn; declare type UseArraySomeReturn = ComputedRef<boolean>; /** * reactive unique array * @see https://vueuse.org/useArrayUnique * @param list - the array was called upon. * @param compareFn * @returns A computed ref that returns a unique array of items. * * @__NO_SIDE_EFFECTS__ */ export declare function useArrayUnique<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, compareFn?: (a: T, b: T, array: T[]) => boolean): UseArrayUniqueReturn<T>; declare type UseArrayUniqueReturn<T = any> = ComputedRef<T[]>; /** * Asynchronous queue task controller. * * @see https://vueuse.org/useAsyncQueue * @param tasks * @param options */ export declare function useAsyncQueue<T extends any[], S = MapQueueTask<T>>(tasks: S & Array<UseAsyncQueueTask<any>>, options?: UseAsyncQueueOptions): UseAsyncQueueReturn<{ [P in keyof T]: UseAsyncQueueResult<T[P]>; }>; export declare 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; /** * A AbortSignal that can be used to abort the task. */ signal?: AbortSignal; } export declare interface UseAsyncQueueResult<T> { state: 'aborted' | 'fulfilled' | 'pending' | 'rejected'; data: T | null; } export declare interface UseAsyncQueueReturn<T> { activeIndex: ShallowRef<number>; result: T; } export declare type UseAsyncQueueTask<T> = (...args: any[]) => T | Promise<T>; /** * 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 */ export declare function useAsyncState<Data, Params extends any[] = any[], Shallow extends boolean = true>(promise: Promise<Data> | ((...args: Params) => Promise<Data>), initialState: MaybeRef<Data>, options?: UseAsyncStateOptions<Shallow, Data>): UseAsyncStateReturn<Data, Params, Shallow>; export declare interface UseAsyncStateOptions<Shallow extends boolean, D = any> { /** * Delay for the first execution of the promise when "immediate" is true. 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; } export declare type UseAsyncStateReturn<Data, Params extends any[], Shallow extends boolean> = UseAsyncStateReturnBase<Data, Params, Shallow> & PromiseLike<UseAsyncStateReturnBase<Data, Params, Shallow>>; export declare interface UseAsyncStateReturnBase<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>; executeImmediate: (...args: Params) => Promise<Data>; } export declare function useBase64(target: MaybeRefOrGetter<string | undefined>, options?: UseBase64Options): UseBase64Return; export declare function useBase64(target: MaybeRefOrGetter<Blob | undefined>, options?: UseBase64Options): UseBase64Return; export declare function useBase64(target: MaybeRefOrGetter<ArrayBuffer | undefined>, options?: UseBase64Options): UseBase64Return; export declare function useBase64(target: MaybeRefOrGetter<HTMLCanvasElement | undefined>, options?: ToDataURLOptions): UseBase64Return; export declare function useBase64(target: MaybeRefOrGetter<HTMLImageElement | undefined>, options?: ToDataURLOptions): UseBase64Return; export declare function useBase64<T extends Record<string, unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return; export declare function useBase64<T extends Map<string, unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return; export declare function useBase64<T extends Set<unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return; export declare function useBase64<T>(target: MaybeRefOrGetter<T[]>, options?: UseBase64ObjectOptions<T[]>): UseBase64Ret