@easy-shadcn/react
Version:
Use shadcn/ui easy&enhance like component library
177 lines (163 loc) • 7.79 kB
TypeScript
import * as React$1 from 'react';
import React__default, { ComponentProps, ReactNode, PropsWithChildren } from 'react';
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
import { Root } from '@radix-ui/react-alert-dialog';
import * as DialogPrimitive from '@radix-ui/react-dialog';
import { DialogProps } from '@radix-ui/react-dialog';
import * as react_jsx_runtime from 'react/jsx-runtime';
declare const AlertDialogOverlay: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
declare const AlertDialogContent: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
overlayProps?: React$1.ComponentProps<typeof AlertDialogOverlay>;
} & React$1.RefAttributes<HTMLDivElement>>;
declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
interface AlertModalProps extends ComponentProps<typeof Root> {
title?: ReactNode;
content?: ReactNode;
contentProps?: ComponentProps<typeof AlertDialogContent>;
cancelText?: ReactNode;
onCancel?: () => void | Promise<void>;
cancelProps?: ComponentProps<typeof AlertDialogCancel>;
confirmText?: ReactNode;
onConfirm?: () => void | Promise<void>;
confirmProps?: ComponentProps<typeof AlertDialogCancel>;
afterClose?: () => void;
}
declare const AlertModal$1: React__default.FC<AlertModalProps>;
declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
declare const DialogFooter: {
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
displayName: string;
};
declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
interface ModalProps extends DialogProps {
title?: ReactNode;
titleProps?: ComponentProps<typeof DialogTitle>;
description?: ReactNode;
descriptionProps?: ComponentProps<typeof DialogDescription>;
footer?: ReactNode;
footerProps?: ComponentProps<typeof DialogFooter>;
content?: ReactNode;
contentProps?: ComponentProps<typeof DialogContent>;
afterClose?: () => void;
}
declare const Modal$1: React__default.FC<PropsWithChildren<ModalProps>>;
declare const symModalId: unique symbol;
interface ModalHelperState {
id: string;
args?: Record<string, unknown>;
visible?: boolean;
delayVisible?: boolean;
keepMounted?: boolean;
}
interface ModalHelperStore {
[key: string]: ModalHelperState;
}
declare enum ActionType {
showModal = "modal-helper/show",
setModalFlags = "modal-helper/set-flags",
hideModal = "modal-helper/hide",
removeModal = "modal-helper/remove"
}
interface ModalHelperAction {
type: ActionType;
payload: {
modalId: string;
args?: Record<string, unknown>;
flags?: Record<string, unknown>;
};
}
type ShadCNModalProps = {
open?: boolean;
onOpenChange?: (open: boolean) => void;
afterClose?: () => void;
};
/**
* The handler to manage a modal returned by {@link useModal | useModal} hook.
*/
interface ModalHelperHandler<Props = Record<string, unknown>> extends ModalHelperState {
/**
* Whether a modal is visible, it's controlled by {@link ModalHelperHandler.show | show}/{@link ModalHelperHandler.hide | hide} method.
*/
visible: boolean;
/**
* If you don't want to remove the modal from the tree after hide when using helpers, set it to true.
*/
keepMounted: boolean;
/**
* Show the modal, it will change {@link ModalHelperHandler.visible | visible} state to true.
* @param args - an object passed to modal component as props.
*/
show: (args?: Props) => Promise<unknown>;
/**
* Hide the modal, it will change {@link ModalHelperHandler.visible | visible} state to false.
*/
hide: () => Promise<unknown>;
/**
* Resolve the promise returned by {@link ModalHelperHandler.show | show} method.
*/
resolve: (args?: unknown) => void;
/**
* Reject the promise returned by {@link ModalHelperHandler.show | show} method.
*/
reject: (args?: unknown) => void;
/**
* Remove the modal component from React component tree. It improves performance compared to just making a modal invisible.
*/
remove: () => void;
/**
* Resolve the promise returned by {@link ModalHelperHandler.hide | hide} method.
*/
resolveHide: (args?: unknown) => void;
}
interface ModalHelperHocProps {
id: string;
defaultVisible?: boolean;
keepMounted?: boolean;
}
type CreateModalComponent<T = object> = React.FC<T & ModalHelperHocProps> & {
[symModalId]?: string;
};
type ModalHelperArgs<T> = T extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<unknown> ? React.ComponentProps<T> : Record<string, unknown>;
declare function show<T, C, P extends Partial<ModalHelperArgs<React__default.FC<C>>>>(modal: CreateModalComponent<C>, args?: P): Promise<T>;
declare function show<T>(modal: string, args?: Record<string, unknown>): Promise<T>;
declare function show<T, P>(modal: string, args: P): Promise<T>;
declare function hide<T, C>(modal: string | CreateModalComponent<C>): Promise<T>;
type ModalHolderActions = {
show: (args?: unknown) => Promise<unknown>;
hide: () => Promise<unknown>;
};
declare function useModal(): ModalHelperHandler & {
modalProps: ShadCNModalProps;
};
declare function useModal(modal: string, args?: Record<string, unknown>): ModalHelperHandler & {
modalProps: ShadCNModalProps;
};
declare function useModal<C, P extends Partial<ModalHelperArgs<React__default.FC<C>>>>(modal: React__default.FC<C>, args?: P): Omit<ModalHelperHandler, 'show'> & {
show: (args?: P) => Promise<unknown>;
} & {
modalProps: ShadCNModalProps;
};
declare function useModalHolder<T>(modal: string | CreateModalComponent<T>): readonly [ModalHolderActions, React__default.FC<T>];
declare const ModalHelper: {
Provider: React$1.FC<{
children?: React$1.ReactNode | undefined;
}>;
ModalHelperContext: React$1.Context<ModalHelperStore>;
create: <P extends object>(Comp: React.ComponentType<P>) => CreateModalComponent<P>;
register: <T extends CreateModalComponent<any>>(id: string, comp: T, props?: Partial<ModalHelperArgs<T>>) => void;
show: typeof show;
hide: typeof hide;
remove: (modal: string | CreateModalComponent) => void;
useModal: typeof useModal;
useModalHolder: typeof useModalHolder;
reducer: (state: ModalHelperStore | undefined, action: ModalHelperAction) => ModalHelperStore;
modalProps: (modal: ModalHelperHandler) => ShadCNModalProps;
};
declare const _default: {
alert: (props: Omit<AlertModalProps, "open" | "onOpenChange" | "cancelProps" | "onCancel" | "cancelText">) => Promise<unknown>;
confirm: (props: Omit<AlertModalProps, "open" | "onOpenChange">) => Promise<unknown>;
};
declare const AlertModal: typeof AlertModal$1 & typeof _default;
declare const Modal: typeof Modal$1 & typeof ModalHelper;
export { AlertModal, type AlertModalProps, Modal, type ModalHelperHandler, type ModalProps };