{"version":3,"file":"ModalBase.cjs","names":["useModal","OptionalPortal","ModalBaseProvider","RemoveScroll","Box","getDefaultZIndex","getShadow","getSpacing"],"sources":["../../../src/components/ModalBase/ModalBase.tsx"],"sourcesContent":["import { RemoveScroll } from 'react-remove-scroll';\nimport {\n  Box,\n  BoxProps,\n  ElementProps,\n  getDefaultZIndex,\n  getShadow,\n  getSpacing,\n  MantineShadow,\n  MantineSize,\n  MantineSpacing,\n} from '../../core';\nimport { BasePortalProps, OptionalPortal } from '../Portal';\nimport { TransitionOverride } from '../Transition';\nimport { ModalBaseProvider } from './ModalBase.context';\nimport { useModal } from './use-modal';\n\ntype RemoveScrollProps = Omit<React.ComponentProps<typeof RemoveScroll>, 'children'>;\n\nexport interface ModalBaseProps extends BoxProps, ElementProps<'div', 'title'> {\n  unstyled?: boolean;\n\n  /** If set modal/drawer is not unmounted from the DOM when hidden. `display: none` styles are applied instead. @default false */\n  keepMounted?: boolean;\n\n  /** Controls opened state */\n  opened: boolean;\n\n  /** Called when modal/drawer is closed */\n  onClose: () => void;\n\n  /** Id used to connect modal/drawer with body and title */\n  id?: string;\n\n  /** If set, scroll is locked when `opened={true}` @default true */\n  lockScroll?: boolean;\n\n  /** If set, focus is trapped within the modal/drawer @default true */\n  trapFocus?: boolean;\n\n  /** If set, the component is rendered inside `Portal` @default true */\n  withinPortal?: boolean;\n\n  /** Props passed down to the Portal component when `withinPortal` is set */\n  portalProps?: BasePortalProps;\n\n  /** Modal/drawer content */\n  children?: React.ReactNode;\n\n  /** If set, the modal/drawer is closed when user clicks on the overlay @default true */\n  closeOnClickOutside?: boolean;\n\n  /** Props added to the `Transition` component that used to animate overlay and body, use to configure duration and animation type, `{ duration: 200, transition: 'fade-down' }` by default */\n  transitionProps?: TransitionOverride;\n\n  /** Called when exit transition ends */\n  onExitTransitionEnd?: () => void;\n\n  /** Called when enter transition ends */\n  onEnterTransitionEnd?: () => void;\n\n  /** If set, `onClose` is called when user presses the escape key @default true */\n  closeOnEscape?: boolean;\n\n  /** If set, focus is returned to the last active element when `onClose` is called @default true */\n  returnFocus?: boolean;\n\n  /** `z-index` CSS property of the root element @default 200 */\n  zIndex?: string | number;\n\n  /** Key of `theme.shadows` or any valid CSS box-shadow value @default 'xl' */\n  shadow?: MantineShadow;\n\n  /** Key of `theme.spacing` or any valid CSS value to set content, header and footer padding @default 'md' */\n  padding?: MantineSpacing;\n\n  /** Controls width of the content area @default 'md' */\n  size?: MantineSize | (string & {}) | number;\n\n  /** Props passed down to react-remove-scroll, can be used to customize scroll lock behavior */\n  removeScrollProps?: RemoveScrollProps;\n}\n\nexport function ModalBase({\n  keepMounted,\n  opened,\n  onClose,\n  id,\n  transitionProps,\n  onExitTransitionEnd,\n  onEnterTransitionEnd,\n  trapFocus,\n  closeOnEscape,\n  returnFocus,\n  closeOnClickOutside,\n  withinPortal,\n  portalProps,\n  lockScroll,\n  children,\n  zIndex,\n  shadow,\n  padding,\n  __vars,\n  unstyled,\n  removeScrollProps,\n  ...others\n}: ModalBaseProps) {\n  const { _id, titleMounted, bodyMounted, shouldLockScroll, setTitleMounted, setBodyMounted } =\n    useModal({ id, transitionProps, opened, trapFocus, closeOnEscape, onClose, returnFocus });\n\n  const { key: removeScrollKey, ...otherRemoveScrollProps } = removeScrollProps || {};\n\n  return (\n    <OptionalPortal {...portalProps} withinPortal={withinPortal}>\n      <ModalBaseProvider\n        value={{\n          opened,\n          onClose,\n          closeOnClickOutside,\n          onExitTransitionEnd,\n          onEnterTransitionEnd,\n          transitionProps: { ...transitionProps, keepMounted },\n          getTitleId: () => `${_id}-title`,\n          getBodyId: () => `${_id}-body`,\n          titleMounted,\n          bodyMounted,\n          setTitleMounted,\n          setBodyMounted,\n          trapFocus,\n          closeOnEscape,\n          zIndex,\n          unstyled,\n        }}\n      >\n        <RemoveScroll\n          enabled={shouldLockScroll && lockScroll}\n          key={removeScrollKey}\n          {...otherRemoveScrollProps}\n        >\n          <Box\n            {...others}\n            id={_id}\n            __vars={{\n              ...__vars,\n              '--mb-z-index': (zIndex || getDefaultZIndex('modal')).toString(),\n              '--mb-shadow': getShadow(shadow),\n              '--mb-padding': getSpacing(padding),\n            }}\n          >\n            {children}\n          </Box>\n        </RemoveScroll>\n      </ModalBaseProvider>\n    </OptionalPortal>\n  );\n}\n\nModalBase.displayName = '@mantine/core/ModalBase';\n"],"mappings":";;;;;;;;;;;AAmFA,SAAgB,UAAU,EACxB,aACA,QACA,SACA,IACA,iBACA,qBACA,sBACA,WACA,eACA,aACA,qBACA,cACA,aACA,YACA,UACA,QACA,QACA,SACA,QACA,UACA,mBACA,GAAG,UACc;CACjB,MAAM,EAAE,KAAK,cAAc,aAAa,kBAAkB,iBAAiB,mBACzEA,kBAAAA,SAAS;EAAE;EAAI;EAAiB;EAAQ;EAAW;EAAe;EAAS;EAAa,CAAC;CAE3F,MAAM,EAAE,KAAK,iBAAiB,GAAG,2BAA2B,qBAAqB,EAAE;AAEnF,QACE,iBAAA,GAAA,kBAAA,KAACC,uBAAAA,gBAAD;EAAgB,GAAI;EAA2B;YAC7C,iBAAA,GAAA,kBAAA,KAACC,0BAAAA,mBAAD;GACE,OAAO;IACL;IACA;IACA;IACA;IACA;IACA,iBAAiB;KAAE,GAAG;KAAiB;KAAa;IACpD,kBAAkB,GAAG,IAAI;IACzB,iBAAiB,GAAG,IAAI;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;aAED,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,cAAD;IACE,SAAS,oBAAoB;IAE7B,GAAI;cAEJ,iBAAA,GAAA,kBAAA,KAACC,YAAAA,KAAD;KACE,GAAI;KACJ,IAAI;KACJ,QAAQ;MACN,GAAG;MACH,iBAAiB,UAAUC,4BAAAA,iBAAiB,QAAQ,EAAE,UAAU;MAChE,eAAeC,iBAAAA,UAAU,OAAO;MAChC,gBAAgBC,iBAAAA,WAAW,QAAQ;MACpC;KAEA;KACG,CAAA;IACO,EAfR,gBAeQ;GACG,CAAA;EACL,CAAA;;AAIrB,UAAU,cAAc"}