{"version":3,"file":"ResponsiveDialog.cjs","sources":["../../../src/lib/responsive-dialog/ResponsiveDialog.tsx"],"sourcesContent":["import type {\n  CloseButtonProps,\n  DrawerRootProps,\n  ExtendComponent,\n  Factory,\n  MantineBreakpoint,\n  MantineRadius,\n  MantineShadow,\n  MantineThemeComponent,\n  ModalBaseOverlayProps,\n  ModalRootProps,\n  RemoveScroll\n} from '@mantine/core'\nimport { Box, Drawer, Modal, createSafeContext, useMatches, useProps } from '@mantine/core'\nimport { useUncontrolled } from '@mantine/hooks'\nimport { useCallback, type ComponentPropsWithRef, type ReactNode } from 'react'\nimport type { ScrollAreaComponent } from '../types'\nimport { Vaul, type VaulProps } from '../Vaul'\nimport classes from './responsive-dialog.module.css'\n\nexport type ResponsiveModalShowType = 'modal' | 'vaul' | 'drawer'\n\nexport type ResponsiveDialogContextValue = {\n  type: ResponsiveModalShowType\n  close: () => void\n}\n\nconst [ResponsiveDialogProvider, useResponsiveDialog] = createSafeContext<ResponsiveDialogContextValue>(\n  '[mantine-vaul]: ResponsiveDialog was not found, make sure you are using useResponsiveDialog hook inside <ResponsiveDialog/>.'\n)\n\nexport interface ResponsiveDialogProps {\n  opened: boolean\n  onClose: (value: boolean) => void\n  onCloseAnimationEnd?: () => void\n\n  trapFocus?: boolean\n  returnFocus?: boolean\n  lockScroll?: boolean\n  withCloseButton?: boolean\n  closeButtonProps?: CloseButtonProps\n  withOverlay?: boolean\n  overlayProps?: ModalBaseOverlayProps\n  closeOnClickOutside?: boolean\n  closeOnEscape?: boolean\n  shadow?: MantineShadow\n  zIndex?: number\n  radius?: MantineRadius | number\n\n  removeScrollProps?: Omit<ComponentPropsWithRef<typeof RemoveScroll>, 'children'>\n  scrollAreaComponent?: ScrollAreaComponent\n\n  matches?: Partial<Record<MantineBreakpoint, ResponsiveModalShowType>>\n\n  modalProps?: Partial<Omit<ModalRootProps, 'opened' | 'onClose' | 'children'>>\n  drawerProps?: Partial<Omit<DrawerRootProps, 'opened' | 'onClose' | 'children'>>\n  vaulProps?: Partial<Omit<VaulProps, 'opened' | 'onOpenChange' | 'defaultOpened' | 'children'>>\n\n  title?: ReactNode\n  children: ReactNode | ((props: { close: () => void; type: ResponsiveModalShowType; opened: boolean }) => ReactNode)\n  footer?: ReactNode\n  footerProps?: Record<string, any>\n}\n\nexport type ResponsiveDialogFactory = Factory<{\n  props: ResponsiveDialogProps\n}>\n\nconst defaultProps: Partial<ResponsiveDialogProps> = {\n  trapFocus: true,\n  returnFocus: true,\n  lockScroll: true,\n  withCloseButton: true,\n  withOverlay: true,\n  closeOnClickOutside: true,\n  closeOnEscape: true,\n  matches: {\n    base: 'vaul',\n    lg: 'modal',\n    xl: 'drawer'\n  }\n}\n\nconst ResponsiveDialog = (_props: ResponsiveDialogProps) => {\n  const {\n    opened: openedProp,\n    onClose: onCloseProp,\n    onCloseAnimationEnd,\n    title,\n    children: childrenProp,\n    footer,\n    matches,\n    drawerProps,\n    vaulProps,\n    modalProps,\n    scrollAreaComponent,\n    removeScrollProps,\n    lockScroll,\n    trapFocus,\n    returnFocus,\n    withCloseButton,\n    closeButtonProps,\n    withOverlay,\n    overlayProps,\n    closeOnClickOutside,\n    closeOnEscape,\n    shadow,\n    zIndex,\n    radius,\n    footerProps\n  } = useProps('ResponsiveDialog', defaultProps, _props)\n\n  const type = useMatches<ResponsiveModalShowType>(matches!)\n  const [opened, onOpenChange] = useUncontrolled({\n    value: openedProp,\n    onChange: onCloseProp,\n    defaultValue: false,\n    finalValue: false\n  })\n\n  const close = useCallback(() => {\n    onOpenChange(false)\n  }, [onOpenChange])\n\n  const hasHeader = !!title || withCloseButton\n\n  const children = typeof childrenProp === 'function' ? childrenProp({ close, type, opened }) : childrenProp\n\n  const renderDialog = () => {\n    switch (type) {\n      case 'modal':\n        return (\n          <Modal.Root\n            opened={opened}\n            onClose={close}\n            scrollAreaComponent={scrollAreaComponent}\n            removeScrollProps={removeScrollProps}\n            lockScroll={lockScroll}\n            closeOnEscape={closeOnEscape}\n            closeOnClickOutside={closeOnClickOutside}\n            shadow={shadow}\n            zIndex={zIndex}\n            trapFocus={trapFocus}\n            returnFocus={returnFocus}\n            {...modalProps}\n            transitionProps={{\n              ...modalProps?.transitionProps,\n              onExited: () => {\n                onCloseAnimationEnd?.()\n                modalProps?.transitionProps?.onExited?.()\n              }\n            }}>\n            {withOverlay && <Modal.Overlay {...overlayProps} />}\n            <Modal.Content radius={radius}>\n              {hasHeader && (\n                <Modal.Header>\n                  {title && <Modal.Title>{title}</Modal.Title>}\n                  {withCloseButton && <Modal.CloseButton {...(closeButtonProps as any)} />}\n                </Modal.Header>\n              )}\n              <Modal.Body>{children}</Modal.Body>\n              {footer && (\n                <Box {...footerProps} data-part='footer' className={`${classes.footer} ${footerProps?.className}`}>\n                  {footer}\n                </Box>\n              )}\n            </Modal.Content>\n          </Modal.Root>\n        )\n      case 'drawer':\n        return (\n          <Drawer.Root\n            opened={opened}\n            onClose={close}\n            scrollAreaComponent={scrollAreaComponent}\n            removeScrollProps={removeScrollProps}\n            lockScroll={lockScroll}\n            closeOnEscape={closeOnEscape}\n            closeOnClickOutside={closeOnClickOutside}\n            shadow={shadow}\n            zIndex={zIndex}\n            trapFocus={trapFocus}\n            returnFocus={returnFocus}\n            {...drawerProps}\n            transitionProps={{\n              ...drawerProps?.transitionProps,\n              onExited: () => {\n                onCloseAnimationEnd?.()\n                drawerProps?.transitionProps?.onExited?.()\n              }\n            }}>\n            {withOverlay && <Drawer.Overlay {...overlayProps} />}\n            <Drawer.Content>\n              {hasHeader && (\n                <Drawer.Header>\n                  {title && <Drawer.Title>{title}</Drawer.Title>}\n                  {withCloseButton && <Drawer.CloseButton {...(closeButtonProps as any)} />}\n                </Drawer.Header>\n              )}\n              <Drawer.Body>{children}</Drawer.Body>\n              {footer && (\n                <Box {...footerProps} data-part='footer' className={`${classes.footer} ${footerProps?.className}`}>\n                  {footer}\n                </Box>\n              )}\n            </Drawer.Content>\n          </Drawer.Root>\n        )\n      default:\n        return (\n          <Vaul\n            title={title}\n            footer={footer}\n            opened={opened}\n            onOpenChange={onOpenChange}\n            scrollAreaComponent={scrollAreaComponent}\n            removeScrollProps={removeScrollProps}\n            lockScroll={lockScroll}\n            closeOnEscape={closeOnEscape}\n            closeOnClickOutside={closeOnClickOutside}\n            withCloseButton={withCloseButton}\n            closeButtonProps={closeButtonProps}\n            withOverlay={withOverlay}\n            overlayProps={overlayProps}\n            shadow={shadow}\n            zIndex={zIndex}\n            radius={radius}\n            trapFocus={trapFocus}\n            returnFocus={returnFocus}\n            {...vaulProps}\n            onCloseAnimationEnd={() => {\n              onCloseAnimationEnd?.()\n              vaulProps?.onCloseAnimationEnd?.()\n            }}>\n            {children}\n          </Vaul>\n        )\n    }\n  }\n\n  return <ResponsiveDialogProvider value={{ type, close }}>{renderDialog()}</ResponsiveDialogProvider>\n}\n\nconst extendResponsiveDialog = (c: ExtendComponent<ResponsiveDialogFactory>): MantineThemeComponent => c\n\nResponsiveDialog.displayName = 'mantine-vaul/ResponsiveDialog'\nResponsiveDialog.extend = extendResponsiveDialog\n\nexport { ResponsiveDialog, useResponsiveDialog }\n"],"names":["ResponsiveDialogProvider","useResponsiveDialog","createSafeContext","defaultProps","ResponsiveDialog","_props","openedProp","onCloseProp","onCloseAnimationEnd","title","childrenProp","footer","matches","drawerProps","vaulProps","modalProps","scrollAreaComponent","removeScrollProps","lockScroll","trapFocus","returnFocus","withCloseButton","closeButtonProps","withOverlay","overlayProps","closeOnClickOutside","closeOnEscape","shadow","zIndex","radius","footerProps","useProps","type","useMatches","opened","onOpenChange","useUncontrolled","close","useCallback","hasHeader","children","renderDialog","jsxs","Modal","_b","_a","jsx","Box","classes","Drawer","Vaul","extendResponsiveDialog","c"],"mappings":"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"}