@uidotdev/usehooks
Version:
A collection of modern, server-safe React hooks – from the ui.dev team
264 lines (211 loc) • 5.99 kB
TypeScript
import * as React from "react";
export type BatteryManager = {
supported: boolean;
loading: boolean;
level: number | null;
charging: boolean | null;
chargingTime: number | null;
dischargingTime: number | null;
};
export type GeolocationState = {
loading: boolean;
accuracy: number | null;
altitude: number | null;
altitudeAccuracy: number | null;
heading: number | null;
latitude: number | null;
longitude: number | null;
speed: number | null;
timestamp: number | null;
error: GeolocationPositionError | null;
};
export type HistoryState<T> = {
state: T;
set: (newPresent: T) => void;
undo: () => void;
redo: () => void;
clear: () => void;
canUndo: boolean;
canRedo: boolean;
};
export type LongPressOptions = {
threshold?: number;
onStart?: (e: Event) => void;
onFinish?: (e: Event) => void;
onCancel?: (e: Event) => void;
};
export type LongPressFns = {
onMouseDown: (e: React.MouseEvent) => void;
onMouseUp: (e: React.MouseEvent) => void;
onMouseLeave: (e: React.MouseEvent) => void;
onTouchStart: (e: React.TouchEvent) => void;
onTouchEnd: (e: React.TouchEvent) => void;
};
export type MousePosition = {
x: number;
y: number;
elementX: number;
elementY: number;
elementPositionX: number;
elementPositionY: number;
};
export type NetworkState = {
online: boolean;
downlink: number | null;
downlinkMax: number | null;
effectiveType: string | null;
rtt: number | null;
saveData: boolean | null;
type: string | null;
};
export type CustomList<T> = {
set: (l: T[]) => void;
push: (element: T) => void;
removeAt: (index: number) => void;
insertAt: (index: number, element: T) => void;
updateAt: (index: number, element: T) => void;
clear: () => void;
};
export type CustomQueue<T> = {
add: (element: T) => void;
remove: () => T | undefined;
clear: () => void;
first: T | undefined;
last: T | undefined;
size: number;
queue: T[];
};
export type RenderInfo = {
name: string;
renders: number;
sinceLastRender: number;
timestamp: number;
};
export type SpeechOptions = {
lang?: string;
voice?: {
lang?: string;
name?: string;
};
rate?: number;
pitch?: number;
volume?: number;
};
export type SpeechState = {
isPlaying: boolean;
status: "init" | "play" | "pause" | "stop";
lang: string;
voiceInfo: {
lang: string;
name: string;
};
rate: number;
pitch: number;
volume: number;
};
declare module "@uidotdev/usehooks" {
export function useBattery(): BatteryManager;
export function useClickAway<T extends Element>(
cb: (e: Event) => void
): React.MutableRefObject<T>;
export function useCopyToClipboard(): [
string | null,
(value: string) => Promise<void>
];
export function useCounter(
startingValue?: number,
options?: {
min?: number;
max?: number;
}
): [
number,
{
increment: () => void;
decrement: () => void;
set: (nextCount: number) => void;
reset: () => void;
}
];
export function useDebounce<T>(value: T, delay: number): T;
export function useDefault<T>(
initialValue: T,
defaultValue: T
): [T, React.Dispatch<React.SetStateAction<T>>];
export function useDocumentTitle(title: string): void;
export function useFavicon(url: string): void;
export function useGeolocation(options?: PositionOptions): GeolocationState;
export function useHistoryState<T>(initialPresent?: T): HistoryState<T>;
export function useHover<T extends Element>(): [
React.RefCallback<T>,
boolean
];
export function useIdle(ms?: number): boolean;
export function useIntersectionObserver<T extends Element>(
options?: IntersectionObserverInit
): [React.RefCallback<T>, IntersectionObserverEntry | null];
export function useIsClient(): boolean;
export function useIsFirstRender(): boolean;
export function useList<T>(defaultList?: T[]): [T[], CustomList<T>];
export function useLocalStorage<T>(
key: string,
initialValue?: T
): [T, React.Dispatch<React.SetStateAction<T>>];
export function useLockBodyScroll(): void;
export function useLongPress(
callback: (e: Event) => void,
options?: LongPressOptions
): LongPressFns;
export function useMap<T>(initialState?: T): Map<T, any>;
export function useMeasure<T extends Element>(): [
React.RefCallback<T>,
{
width: number | null;
height: number | null;
}
];
export function useMediaQuery(query: string): boolean;
export function useMouse<T extends Element>(): [
MousePosition,
React.MutableRefObject<T>
];
export function useNetworkState(): NetworkState;
export function useObjectState<T>(initialValue: T): [T, (arg: T) => void];
export function useOrientation(): {
angle: number;
type: string;
};
export function usePreferredLanguage(): string;
export function usePrevious<T>(newValue: T): T;
export function useQueue<T>(initialValue?: T[]): CustomQueue<T>;
export function useRenderCount(): number;
export function useRenderInfo(name?: string): RenderInfo | undefined;
export function useScript(
src: string,
options?: {
removeOnUnmount?: boolean;
}
): "unknown" | "loading" | "ready" | "error";
export function useSessionStorage<T>(
key: string,
initialValue: T
): [T, React.Dispatch<React.SetStateAction<T>>];
export function useSet<T>(values?: T[]): Set<T>;
export function useSpeech(text: string, options?: SpeechOptions): SpeechState;
export function useThrottle<T>(value: T, delay: number): T;
export function useToggle(
initialValue?: boolean
): [boolean, (newValue?: boolean) => void];
export function useVisibilityChange(): boolean;
export function useWindowScroll(): [
{
x: number | null;
y: number | null;
},
(args: unknown) => void
];
export function useWindowSize(): {
width: number | null;
height: number | null;
};
}