Beautifully designed Modal Component built with Radix UI and Tailwind CSS.

Click the button below to present a modal. You can also click outside the modal to dismiss it.

API

useCurrentModal()

.dismiss() to dimiss current modal.

useModalStack()

.dimiss(id: string) to dismiss a modal by id.

.dimissAll() to dismiss all modals.

.dismissTop() to dismiss the top modal.

.present(options: ModalProps) to present a sheet.

Typings

DeclarativeModalProps

nametypeoptionaldefaultdescription
openboolean | undefinedtruen/a
onOpenChange((open: boolean) => void) | undefinedtruen/a
childrenReactNodetruen/a
idstring | undefinedtruen/a
titlestringfalsen/a
CustomModalComponentFC<{ children?: ReactNode; }> | undefinedtruen/a
clickOutsideToDismissboolean | undefinedtruen/a
modalClassNamestring | undefinedtruen/a
modalContainerClassNamestring | undefinedtruen/a
maxboolean | undefinedtruen/aIf true, the modal will be full screen.
wrapperFC<{}> | undefinedtruen/a

ModalProps

nametypeoptionaldefaultdescription
titlestringfalsen/a
CustomModalComponentFC<{ children?: ReactNode; }> | undefinedtruen/a
contentFC<ModalContentPropsInternal>falsen/a
clickOutsideToDismissboolean | undefinedtruen/a
modalClassNamestring | undefinedtruen/a
modalContainerClassNamestring | undefinedtruen/a
maxboolean | undefinedtruen/aIf true, the modal will be full screen.
wrapperFC<{}> | undefinedtruen/a

ModalStackContainerProps

nametypeoptionaldefaultdescription
sheetboolean | undefinedtruen/aIf not passed, it will be always false, so will can't switch to sheet mode in mobile.
manyfalsen/aFramer motion motion element.

PresentSheetProps

nametypeoptionaldefaultdescription
contentReactNode | FC<{}>falsen/a
openboolean | undefinedtruen/a
onOpenChange((value: boolean) => void) | undefinedtruen/a
titlestring | undefinedtruen/a
zIndexnumber | undefinedtruen/a
dismissibleboolean | undefinedtruen/a
defaultOpenboolean | undefinedtruen/a