UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

166 lines (163 loc) • 6.41 kB
import { ButtonBase } from '../buttonBase/ButtonBase.js'; import { DOMMotionComponents } from '/home/runner/work/nex-ui/nex-ui/packages/react/node_modules/motion/dist/react.d.ts'; import { OverrideProps, SxProp, ComponentUtilityClasses, ComponentPropsWithCommonProps } from '../../types/utils.js'; import { ElementType, ReactNode } from 'react'; import { DialogContentVariants, DialogVariants } from '../../theme/recipes/dialog.js'; import { ModalProps } from '../modal/types.js'; type DialogSlotProps<RootComponent extends ElementType> = { backdrop?: ComponentPropsWithCommonProps<'div', DialogOwnerState<RootComponent>>; panel?: ComponentPropsWithCommonProps<DOMMotionComponents['div'], DialogOwnerState<RootComponent>>; }; type DialogOwnProps<RootComponent extends ElementType> = Omit<ModalProps, 'closeOnInteractOutside'> & { /** * The component used for the root element. * @default 'div' */ as?: RootComponent; /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx?: SxProp<DialogOwnerState<RootComponent>>; /** * The props used for each slot. */ slotProps?: DialogSlotProps<RootComponent>; /** * The className used for each slot. */ classes?: ComponentUtilityClasses<'root' | 'backdrop' | 'panel'>; /** * The dialog scroll behavior. * @default 'outside'' */ scroll?: 'inside' | 'outside'; /** * The dialog position. * @default 'top' */ placement?: DialogVariants['placement']; /** * If true, the close buton is not rendered. * @default false */ hideCloseButton?: boolean; /** * Determine the max-width of the dialog * @default 'md' */ maxWidth?: DialogContentVariants['maxWidth']; /** * If true, the dialog is full-screen. * @default false */ fullScreen?: boolean; /** * If true, the backdrop is not rendered. * @default false */ hideBackdrop?: boolean; /** * If true, the dialog prevents page scrolling. * @default fullScreen */ preventScroll?: boolean; /** * Custom close button to display on top right corner. */ closeIcon?: ReactNode; /** * If true, close the dialog when the backdrop is clicked. */ closeOnInteractBackdrop?: boolean; }; interface DialogPropsOverrides { } type DialogProps<RootComponent extends ElementType = 'div'> = OverrideProps<RootComponent, DialogOwnProps<RootComponent>, DialogPropsOverrides>; type DialogOwnerState<RootComponent extends ElementType = 'div'> = DialogProps<RootComponent> & { hideBackdrop: boolean; fullScreen: boolean; preventScroll: boolean; scroll: 'inside' | 'outside'; maxWidth: DialogContentVariants['maxWidth']; open: boolean; setOpen: (open: boolean) => void; placement: DialogVariants['placement']; keepMounted: boolean; hideCloseButton: boolean; closeOnInteractBackdrop: boolean; closeOnEscape: boolean; }; type DialogTriggerProps = { children?: ReactNode; }; interface DialogCloseProps { children?: ReactNode; } type DialogContentSlotProps<RootComponent extends ElementType> = { closeButton?: ComponentPropsWithCommonProps<typeof ButtonBase<'button'>, DialogContentOwnerState<RootComponent>>; }; interface DialogContentPropsOverrides { } type DialogContentOwnProps<RootComponent extends ElementType> = { /** * The component used for the root element. * @default 'section' */ as?: RootComponent; /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx?: SxProp<DialogContentOwnerState<RootComponent>>; children?: ReactNode; /** * The props used for each slot. */ slotProps?: DialogContentSlotProps<RootComponent>; /** * Determine the max-width of the dialog * @default 'md' */ maxWidth?: DialogContentVariants['maxWidth']; /** * Custom close button to display on top right corner. */ closeIcon?: ReactNode; /** * If true, the dialog is full-screen. * @default false */ fullScreen?: boolean; }; type DialogContentProps<RootComponent extends ElementType = 'section'> = OverrideProps<RootComponent, DialogContentOwnProps<RootComponent>, DialogContentPropsOverrides>; type DialogContentOwnerState<RootComponent extends ElementType = 'section'> = DialogContentProps<RootComponent> & { maxWidth: DialogContentVariants['maxWidth']; fullScreen: boolean; }; interface DialogHeaderPropsOverrides { } type DialogHeaderOwnProps<RootComponent extends ElementType> = { as?: RootComponent; sx?: SxProp<DialogHeaderOwnerState<RootComponent>>; children?: ReactNode; }; type DialogHeaderProps<RootComponent extends ElementType = 'h2'> = OverrideProps<RootComponent, DialogHeaderOwnProps<RootComponent>, DialogHeaderPropsOverrides>; type DialogHeaderOwnerState<RootComponent extends ElementType = 'h2'> = DialogHeaderProps<RootComponent>; interface DialogBodyPropsOverrides { } type DialogBodyOwnProps<RootComponent extends ElementType> = { as?: RootComponent; sx?: SxProp<DialogBodyOwnerState<RootComponent>>; children?: ReactNode; }; type DialogBodyProps<RootComponent extends ElementType = 'div'> = OverrideProps<RootComponent, DialogBodyOwnProps<RootComponent>, DialogBodyPropsOverrides>; type DialogBodyOwnerState<RootComponent extends ElementType = 'div'> = DialogBodyProps<RootComponent>; interface DialogFooterPropsOverrides { } type DialogFooterOwnProps<RootComponent extends ElementType> = { as?: RootComponent; sx?: SxProp<DialogFooterOwnerState<RootComponent>>; children?: ReactNode; }; type DialogFooterProps<RootComponent extends ElementType = 'div'> = OverrideProps<RootComponent, DialogFooterOwnProps<RootComponent>, DialogFooterPropsOverrides>; type DialogFooterOwnerState<RootComponent extends ElementType = 'div'> = DialogFooterOwnProps<RootComponent>; export type { DialogBodyOwnerState, DialogBodyProps, DialogBodyPropsOverrides, DialogCloseProps, DialogContentOwnerState, DialogContentProps, DialogContentPropsOverrides, DialogFooterOwnerState, DialogFooterProps, DialogFooterPropsOverrides, DialogHeaderOwnerState, DialogHeaderProps, DialogHeaderPropsOverrides, DialogOwnerState, DialogProps, DialogPropsOverrides, DialogTriggerProps };