{"version":3,"file":"Modal.cjs","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { factory, Factory, getDefaultZIndex, useProps } from '../../core';\nimport { ModalBaseCloseButtonProps, ModalBaseOverlayProps } from '../ModalBase';\nimport { ModalBody } from './ModalBody';\nimport { ModalCloseButton } from './ModalCloseButton';\nimport { ModalContent } from './ModalContent';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalOverlay } from './ModalOverlay';\nimport {\n  ModalRoot,\n  ModalRootCssVariables,\n  ModalRootProps,\n  ModalRootStylesNames,\n} from './ModalRoot';\nimport { ModalStack, useModalStackContext } from './ModalStack';\nimport { ModalTitle } from './ModalTitle';\n\nexport type ModalStylesNames = ModalRootStylesNames;\nexport type ModalCssVariables = ModalRootCssVariables;\n\nexport interface ModalProps extends ModalRootProps {\n  __staticSelector?: string;\n\n  /** Modal title */\n  title?: React.ReactNode;\n\n  /** Determines whether the overlay should be rendered, `true` by default */\n  withOverlay?: boolean;\n\n  /** Props passed down to the `Overlay` component, use to configure opacity, `background-color`, styles and other properties */\n  overlayProps?: ModalBaseOverlayProps;\n\n  /** Modal content */\n  children?: React.ReactNode;\n\n  /** Determines whether the close button should be rendered, `true` by default */\n  withCloseButton?: boolean;\n\n  /** Props passed down to the close button */\n  closeButtonProps?: ModalBaseCloseButtonProps;\n\n  /** Id of the modal in the `Modal.Stack` */\n  stackId?: string;\n}\n\nexport type ModalFactory = Factory<{\n  props: ModalProps;\n  ref: HTMLDivElement;\n  stylesNames: ModalStylesNames;\n  vars: ModalCssVariables;\n  staticComponents: {\n    Root: typeof ModalRoot;\n    Overlay: typeof ModalOverlay;\n    Content: typeof ModalContent;\n    Body: typeof ModalBody;\n    Header: typeof ModalHeader;\n    Title: typeof ModalTitle;\n    CloseButton: typeof ModalCloseButton;\n    Stack: typeof ModalStack;\n  };\n}>;\n\nconst defaultProps: Partial<ModalProps> = {\n  closeOnClickOutside: true,\n  withinPortal: true,\n  lockScroll: true,\n  trapFocus: true,\n  returnFocus: true,\n  closeOnEscape: true,\n  keepMounted: false,\n  zIndex: getDefaultZIndex('modal'),\n  transitionProps: { duration: 200, transition: 'fade-down' },\n  withOverlay: true,\n  withCloseButton: true,\n};\n\nexport const Modal = factory<ModalFactory>((_props, ref) => {\n  const {\n    title,\n    withOverlay,\n    overlayProps,\n    withCloseButton,\n    closeButtonProps,\n    children,\n    radius,\n    opened,\n    stackId,\n    zIndex,\n    ...others\n  } = useProps('Modal', defaultProps, _props);\n  const ctx = useModalStackContext();\n  const hasHeader = !!title || withCloseButton;\n  const stackProps =\n    ctx && stackId\n      ? {\n          closeOnEscape: ctx.currentId === stackId,\n          trapFocus: ctx.currentId === stackId,\n          zIndex: ctx.getZIndex(stackId),\n        }\n      : {};\n\n  const overlayVisible =\n    withOverlay === false ? false : stackId && ctx ? ctx.currentId === stackId : opened;\n\n  useEffect(() => {\n    if (ctx && stackId) {\n      opened\n        ? ctx.addModal(stackId, zIndex || getDefaultZIndex('modal'))\n        : ctx.removeModal(stackId);\n    }\n  }, [opened, stackId, zIndex]);\n\n  return (\n    <ModalRoot\n      ref={ref}\n      radius={radius}\n      opened={opened}\n      zIndex={ctx && stackId ? ctx.getZIndex(stackId) : zIndex}\n      {...others}\n      {...stackProps}\n    >\n      {withOverlay && (\n        <ModalOverlay\n          visible={overlayVisible}\n          transitionProps={ctx && stackId ? { duration: 0 } : undefined}\n          {...overlayProps}\n        />\n      )}\n      <ModalContent\n        radius={radius}\n        __hidden={ctx && stackId && opened ? stackId !== ctx.currentId : false}\n      >\n        {hasHeader && (\n          <ModalHeader>\n            {title && <ModalTitle>{title}</ModalTitle>}\n            {withCloseButton && <ModalCloseButton {...closeButtonProps} />}\n          </ModalHeader>\n        )}\n\n        <ModalBody>{children}</ModalBody>\n      </ModalContent>\n    </ModalRoot>\n  );\n});\n\nModal.displayName = '@raikou/core/Modal';\nModal.Root = ModalRoot;\nModal.Overlay = ModalOverlay;\nModal.Content = ModalContent;\nModal.Body = ModalBody;\nModal.Header = ModalHeader;\nModal.Title = ModalTitle;\nModal.CloseButton = ModalCloseButton;\nModal.Stack = ModalStack;\n"],"names":["getDefaultZIndex","factory","useProps","useModalStackContext","useEffect","jsxs","ModalRoot","jsx","ModalOverlay","ModalContent","ModalHeader","ModalTitle","ModalCloseButton","ModalBody","ModalStack"],"mappings":"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"}