@svelte-use/core
Version:
Collection of essential Svelte Utilities
254 lines (240 loc) • 10.7 kB
TypeScript
import * as _svelte_use_shared from '@svelte-use/shared';
import { MaybeElementReadable, PromiseFn, Fn, MaybeReadable, MaybeWritable, RemovableWritable, Pausable } from '@svelte-use/shared';
export * from '@svelte-use/shared';
import * as svelte_store from 'svelte/store';
interface ConfigurableWindow {
window?: Window;
}
interface ConfigurableDocument {
document?: Document;
}
declare type OnClickOutsideEvents = Pick<WindowEventMap, 'click' | 'mousedown' | 'mouseup' | 'touchstart' | 'touchend' | 'pointerdown' | 'pointerup'>;
interface OnClickOutsideOptions<E extends keyof OnClickOutsideEvents> extends ConfigurableWindow {
event?: E;
}
/**
* Listen for clicks outside of an element
*
* @see https://svelte-use.vercel.app/core/onClickOutside
* @param target
* @param handler
* @param options
*/
declare function onClickOutside<E extends keyof OnClickOutsideEvents = 'pointerdown'>(target: MaybeElementReadable, handler: (evt: OnClickOutsideEvents[E]) => void, options?: OnClickOutsideOptions<E>): _svelte_use_shared.Fn | undefined;
interface AsyncStateOptions {
/**
* Delay for executeing 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;
/**
* 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;
}
/**
* Reactive async state. Will not block your setup function and will triggers changes once
* the promise is ready.
*
* @see https://svelte-use.vercel.app/core/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<T>(promise: Promise<T> | PromiseFn<T>, initialState: T, options?: AsyncStateOptions): {
state: svelte_store.Writable<T>;
isReady: svelte_store.Writable<boolean>;
error: svelte_store.Writable<unknown>;
execute: (delay?: number, ...args: any[]) => Promise<void>;
};
declare type UseAsyncStateReturn = ReturnType<typeof useAsyncState>;
interface InferEventTarget<Events> {
addEventListener(event: Events, fn?: any, options?: any): any;
removeEventListener(event: Events, fn?: any, options?: any): any;
}
declare type WindowEventName = keyof WindowEventMap;
declare type DocumentEventName = keyof DocumentEventMap;
declare type GeneralEventListener<E = Event> = {
(evt: E): void;
};
/**
* Register using addEventListener on mount, and removeEventListener automatically on destory
*
* Overload 1: Omitted Window target
*
* @see https://svelte-use.vercel.app/core/useEventListener
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof WindowEventMap>(event: E, listener: (this: Window, ev: WindowEventMap[E]) => any, options?: Boolean | AddEventListenerOptions): Fn;
/**
* Register using addEventListener on mount, and removeEventListener automatically on destory
*
* Overload 2: Explicitly Window target
*
* @see https://svelte-use.vercel.app/core/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof WindowEventMap>(target: Window, event: E, listener: (this: Window, ev: WindowEventMap[E]) => any, options?: Boolean | AddEventListenerOptions): Fn;
/**
* Register using addEventListener on mount, and removeEventListener automatically on destory
*
* Overload 3: Explicitly Document target
*
* @see https://svelte-use.vercel.app/core/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<E extends keyof DocumentEventMap>(target: Document, event: E, listener: (this: Window, ev: DocumentEventMap[E]) => any, options?: Boolean | AddEventListenerOptions): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 4: Custom event target with event type infer
*
* @see https://svelte-use.vercel.app/core/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<Names extends string, EventType = Event>(target: InferEventTarget<Names>, event: Names, listener: GeneralEventListener<EventType>, options?: boolean | AddEventListenerOptions): Fn;
/**
* Register using addEventListener on mounted, and removeEventListener automatically on unmounted.
*
* Overload 5: Custom event target fallback
*
* @see https://svelte-use.vercel.app/core/useEventListener
* @param target
* @param event
* @param listener
* @param options
*/
declare function useEventListener<EventType = Event>(target: MaybeReadable<EventTarget | null | undefined>, event: string, listener: GeneralEventListener<EventType>, options?: boolean | AddEventListenerOptions): Fn;
declare type Serializer<T> = {
read(raw: string): T;
write(value: T): string;
};
declare const StorageSerializers: Record<'boolean' | 'object' | 'number' | 'string' | 'any', Serializer<any>>;
declare type StorageLike = Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
interface StorageOptions<T> extends ConfigurableWindow {
/**
* Listen to storage changes, useful for multiple tabs application
*
* @default true
*/
listenToStorageChanges?: boolean;
/**
* Custom data serialization
*/
serializer?: Serializer<T>;
/**
* On error callback
*
* Default lo error to `console.error`
*/
onError?: (error: unknown) => void;
}
declare function useStorage(key: string, initialValue: MaybeWritable<string>, storage?: StorageLike, options?: StorageOptions<string>): RemovableWritable<string>;
declare function useStorage(key: string, initialValue: MaybeWritable<boolean>, storage?: StorageLike, options?: StorageOptions<boolean>): RemovableWritable<boolean>;
declare function useStorage(key: string, initialValue: MaybeWritable<number>, storage?: StorageLike, options?: StorageOptions<number>): RemovableWritable<number>;
declare function useStorage<T>(key: string, initialValue: MaybeWritable<T>, storage?: StorageLike, options?: StorageOptions<T>): RemovableWritable<T>;
declare function useStorage<T = unknown>(key: string, initialValue: MaybeWritable<null>, storage?: StorageLike, options?: StorageOptions<T>): RemovableWritable<T>;
declare function useLocalStorage(key: string, initialValue: MaybeWritable<string>, options?: StorageOptions<string>): RemovableWritable<string>;
declare function useLocalStorage(key: string, initialValue: MaybeWritable<boolean>, options?: StorageOptions<boolean>): RemovableWritable<boolean>;
declare function useLocalStorage(key: string, initialValue: MaybeWritable<number>, options?: StorageOptions<number>): RemovableWritable<number>;
declare function useLocalStorage<T>(key: string, initialValue: MaybeWritable<T>, options?: StorageOptions<T>): RemovableWritable<T>;
declare function useLocalStorage<T = unknown>(key: string, initialValue: MaybeWritable<null>, options?: StorageOptions<T>): RemovableWritable<T>;
/**
* Reactive Media Query
*
* @param query
* @param options
*/
declare function useMediaQuery(query: string, options?: ConfigurableWindow): svelte_store.Readable<boolean>;
interface MutationObserverOptions extends MutationObserverInit, ConfigurableWindow {
}
/**
* Watch for changes being made to the DOM tree.
*
* @see https://svelte-use.vercel.app/core/useMutationObserver
* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN
* @param target
* @param callback
* @param options
*/
declare function useMutationObserver(target: MaybeElementReadable, callback: MutationCallback, options?: MutationObserverOptions): {
isSupported: boolean | undefined;
stop: () => void;
};
declare type UseMutationObserverReturn = ReturnType<typeof useMutationObserver>;
/**
* Reactive dark theme preference.
*
* @param [options]
*/
declare function usePreferredDark(options?: ConfigurableWindow): svelte_store.Readable<boolean>;
interface RafFnOptions 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://svelte-use.vercel.app/core/useRafFn
* @param fn
* @param options
*/
declare function useRafFn(fn: Fn, options?: RafFnOptions): Pausable;
declare function useSessionStorage(key: string, initialValue: MaybeWritable<string>, options?: StorageOptions<string>): RemovableWritable<string>;
declare function useSessionStorage(key: string, initialValue: MaybeWritable<boolean>, options?: StorageOptions<boolean>): RemovableWritable<boolean>;
declare function useSessionStorage(key: string, initialValue: MaybeWritable<number>, options?: StorageOptions<number>): RemovableWritable<number>;
declare function useSessionStorage<T>(key: string, initialValue: MaybeWritable<T>, options?: StorageOptions<T>): RemovableWritable<T>;
declare function useSessionStorage<T = unknown>(key: string, initialValue: MaybeWritable<null>, options?: StorageOptions<T>): RemovableWritable<T>;
interface UseTitleOptions extends ConfigurableDocument {
/**
* Observe `document.title` changes using MutationObserver
*
* @default false
*/
observe?: boolean;
}
declare type Title = string | null | undefined;
/**
* Reactive document title.
*
* @see https://svelte-use.vercel.app/core/useTitle
* @param newTitle
* @param options
*/
declare function useTitle(newTitle?: MaybeWritable<Title>, options?: UseTitleOptions): svelte_store.Writable<Title>;
export { AsyncStateOptions, DocumentEventName, GeneralEventListener, MutationObserverOptions, OnClickOutsideEvents, OnClickOutsideOptions, RafFnOptions, Serializer, StorageLike, StorageOptions, StorageSerializers, UseAsyncStateReturn, UseMutationObserverReturn, UseTitleOptions, WindowEventName, onClickOutside, useAsyncState, useEventListener, useLocalStorage, useMediaQuery, useMutationObserver, usePreferredDark, useRafFn, useSessionStorage, useStorage, useTitle };