2024-08-20 23:25:37 +04:00

53 lines
1.5 KiB
TypeScript

import type React from 'react';
export type Placement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';
type NoticeSemanticProps = 'wrapper';
export interface NoticeConfig {
content?: React.ReactNode;
duration?: number | null;
showProgress?: boolean;
pauseOnHover?: boolean;
closeIcon?: React.ReactNode;
closable?: boolean | ({
closeIcon?: React.ReactNode;
} & React.AriaAttributes);
className?: string;
style?: React.CSSProperties;
classNames?: {
[key in NoticeSemanticProps]?: string;
};
styles?: {
[key in NoticeSemanticProps]?: React.CSSProperties;
};
/** @private Internal usage. Do not override in your code */
props?: React.HTMLAttributes<HTMLDivElement> & Record<string, any>;
onClose?: VoidFunction;
onClick?: React.MouseEventHandler<HTMLDivElement>;
}
export interface OpenConfig extends NoticeConfig {
key: React.Key;
placement?: Placement;
content?: React.ReactNode;
duration?: number | null;
}
export type InnerOpenConfig = OpenConfig & {
times?: number;
};
export type Placements = Partial<Record<Placement, OpenConfig[]>>;
export type StackConfig = boolean | {
/**
* When number is greater than threshold, notifications will be stacked together.
* @default 3
*/
threshold?: number;
/**
* Offset when notifications are stacked together.
* @default 8
*/
offset?: number;
/**
* Spacing between each notification when expanded.
*/
gap?: number;
};
export {};