UNPKG

react-hot-toast

Version:

Smoking hot React Notifications. Lightweight, customizable and beautiful by default.

98 lines (83 loc) 2.2 kB
import { CSSProperties } from 'react'; export type ToastType = 'success' | 'error' | 'loading' | 'blank' | 'custom'; export type ToastPosition = | 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'; export type Renderable = React.ReactElement | string | null; export interface IconTheme { primary: string; secondary: string; } export type ValueFunction<TValue, TArg> = (arg: TArg) => TValue; export type ValueOrFunction<TValue, TArg> = | TValue | ValueFunction<TValue, TArg>; const isFunction = <TValue, TArg>( valOrFunction: ValueOrFunction<TValue, TArg> ): valOrFunction is ValueFunction<TValue, TArg> => typeof valOrFunction === 'function'; export const resolveValue = <TValue, TArg>( valOrFunction: ValueOrFunction<TValue, TArg>, arg: TArg ): TValue => (isFunction(valOrFunction) ? valOrFunction(arg) : valOrFunction); export interface Toast { type: ToastType; id: string; toasterId?: string; message: ValueOrFunction<Renderable, Toast>; icon?: Renderable; duration?: number; pauseDuration: number; position?: ToastPosition; removeDelay?: number; ariaProps: { role: 'status' | 'alert'; 'aria-live': 'assertive' | 'off' | 'polite'; }; style?: CSSProperties; className?: string; iconTheme?: IconTheme; createdAt: number; visible: boolean; dismissed: boolean; height?: number; } export type ToastOptions = Partial< Pick< Toast, | 'id' | 'icon' | 'duration' | 'ariaProps' | 'className' | 'style' | 'position' | 'iconTheme' | 'toasterId' | 'removeDelay' > >; export type DefaultToastOptions = ToastOptions & { [key in ToastType]?: ToastOptions; }; export interface ToasterProps { position?: ToastPosition; toastOptions?: DefaultToastOptions; reverseOrder?: boolean; gutter?: number; containerStyle?: React.CSSProperties; containerClassName?: string; toasterId?: string; children?: (toast: Toast) => React.ReactElement; } export interface ToastWrapperProps { id: string; className?: string; style?: React.CSSProperties; onHeightUpdate: (id: string, height: number) => void; children?: React.ReactNode; }