overlay-manager-rc
Version:
React overlay component manager
55 lines (49 loc) • 2.19 kB
TypeScript
import * as _preact_signals_core from '@preact/signals-core';
import { FC, CSSProperties } from 'react';
import * as react_jsx_runtime from 'react/jsx-runtime';
type OverlayId = string;
type OverlayPosition = 'center' | 'top' | 'bottom' | 'left' | 'right';
type OverlayKind = 'overlay' | 'modal' | 'drawer';
interface OverlayContentProps<TData = unknown, TResult = unknown> {
close: (result?: TResult) => void;
data: TData;
open: boolean;
id: string;
}
type OverlayContent<TData = unknown, TResult = unknown> = FC<OverlayContentProps<TData, TResult>>;
interface OverlayOptions<TData = unknown, TResult = unknown> {
id?: string;
content: OverlayContent<TData, TResult>;
data?: TData;
position?: OverlayPosition;
kind?: OverlayKind;
title?: string;
width?: string | number;
height?: string | number;
style?: CSSProperties;
className?: string;
onClose?: (result?: TResult) => void | Promise<void>;
onOpen?: (id: string) => void | Promise<void>;
}
interface OverlayData<TData = unknown, TResult = unknown> extends OverlayOptions<TData, TResult> {
id: string;
open: boolean;
beforeClose?: () => Promise<boolean> | boolean;
closeTimestamp?: number;
}
declare const overlays: _preact_signals_core.Signal<OverlayData<any, any>[]>;
declare const useOverlayManager: () => {
readonly openOverlay: <TData, TResult>(options: OverlayOptions<TData, TResult>) => Promise<TResult | undefined>;
readonly closeAllOverlays: () => never[];
readonly closeOverlayById: (id: string) => Promise<void>;
readonly overlays: _preact_signals_core.Signal<OverlayData<any, any>[]>;
};
declare function OverlayContainer(): react_jsx_runtime.JSX.Element;
/**
* When the manager tries to run an overlay with the same id
* Function that executes before closing the overlay
* @param beforeClose
* @param id
*/
declare const useBeforeClose: (beforeClose: () => Promise<boolean> | boolean, id: string) => void;
export { OverlayContainer, type OverlayContent, type OverlayContentProps, type OverlayData, type OverlayId, type OverlayKind, type OverlayOptions, type OverlayPosition, overlays, useBeforeClose, useOverlayManager };