{"version":3,"file":"Modal.mjs","sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["'use client'\nimport { forwardRef, useCallback, useMemo, useState } from 'react'\nimport * as React from 'react'\n\nimport { CancelIcon } from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport useMergeRefs from '~/src/hooks/useMergeRefs'\nimport { getZIndexClassName } from '~/src/types/props-helpers'\nimport { createContext } from '~/src/utils/react'\nimport { cssDimension } from '~/src/utils/style'\nimport { isNil, isNumber } from '~/src/utils/type'\n\nimport {\n  AlphaDialogPrimitive,\n  AlphaDialogPrimitiveClose,\n  AlphaDialogPrimitiveContent,\n  AlphaDialogPrimitiveDescription,\n  AlphaDialogPrimitiveOverlay,\n  AlphaDialogPrimitivePortal,\n  type AlphaDialogPrimitiveProps,\n  AlphaDialogPrimitiveTitle,\n  AlphaDialogPrimitiveTrigger,\n} from '~/src/components/AlphaDialogPrimitive'\nimport { Button } from '~/src/components/Button'\nimport { Text } from '~/src/components/Text'\nimport { ThemeProvider, useThemeName } from '~/src/components/ThemeProvider'\nimport { VisuallyHidden } from '~/src/components/VisuallyHidden'\nimport { useRootElement } from '~/src/components/WindowProvider'\n\nimport {\n  type ModalBodyProps,\n  type ModalCloseProps,\n  type ModalContentProps,\n  type ModalContentPropsContextValue,\n  type ModalFooterProps,\n  type ModalHeaderProps,\n  type ModalProps,\n  type ModalTitleSize,\n  type ModalTriggerProps,\n} from './Modal.types'\n\nimport styles from './Modal.module.scss'\n\nconst [ModalContainerContextProvider, useModalContainerContext] = createContext<\n  HTMLElement | undefined\n>(undefined)\n\nexport { useModalContainerContext }\n\nconst [ModalContentPropsContextProvider, useModalContentPropsContext] =\n  createContext<ModalContentPropsContextValue>({\n    showCloseIcon: false,\n  })\n\n/**\n * `Modal` is a dialog that appears on top of the page.\n *\n * `Modal` is a context of the Modal-related components. It doesn't render any DOM node.\n * It controls the visibility of the entire component and provides\n * handlers and accessibility properties to Modal-related components.\n * @example\n *\n * ```tsx\n * // Anatomy of the Modal\n * <Modal>\n *  <ModalTrigger />\n *  <ModalContent>\n *    <ModalHeader />\n *    <ModalBody />\n *    <ModalFooter />\n *  </ModalContent>\n * </Modal>\n * ```\n */\nexport function Modal({\n  children,\n  show,\n  defaultShow,\n  onShow,\n  onHide,\n}: ModalProps) {\n  const onOpenChange = useCallback<\n    NonNullable<AlphaDialogPrimitiveProps['onOpenChange']>\n  >(\n    (open) => {\n      const callback = open ? onShow : onHide\n      callback?.()\n    },\n    [onShow, onHide]\n  )\n\n  return (\n    <AlphaDialogPrimitive\n      open={show}\n      defaultOpen={defaultShow}\n      onOpenChange={onOpenChange}\n    >\n      {children}\n    </AlphaDialogPrimitive>\n  )\n}\n\n/**\n * `ModalContent` is a container of the modal content.\n * It creates a portal to render the modal content outside of the DOM tree\n * and renders overlay behind the modal content too.\n */\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n  function ModalContent(\n    {\n      children,\n      style,\n      className,\n      container: givenContainer,\n      showCloseIcon = false,\n      preventHideOnOutsideClick = false,\n      width = 'max-content',\n      height = 'fit-content',\n      zIndex = 'modal',\n      collisionPadding = { top: 40, bottom: 40 },\n      ...rest\n    },\n    forwardedRef\n  ) {\n    const rootElement = useRootElement()\n    const container = givenContainer ?? rootElement\n    const [contentContainer, setContentContainer] = useState<HTMLElement>()\n\n    const contentRef = useMergeRefs(\n      forwardedRef,\n      useCallback((node: HTMLElement | null) => {\n        setContentContainer(node ?? undefined)\n      }, [])\n    )\n\n    const overlayStyle = (() => {\n      const padding = (() => {\n        if (isNumber(collisionPadding)) {\n          return `${collisionPadding}px`\n        }\n\n        const { top, right, bottom, left } = {\n          top: 0,\n          right: 0,\n          bottom: 0,\n          left: 0,\n          ...collisionPadding,\n        }\n\n        return `${top}px ${right}px ${bottom}px ${left}px`\n      })()\n\n      return {\n        '--b-modal-collision-padding': padding,\n      } as React.CSSProperties\n    })()\n\n    const propsContextValue = useMemo(\n      (): ModalContentPropsContextValue => ({\n        showCloseIcon,\n      }),\n      [showCloseIcon]\n    )\n\n    return (\n      <AlphaDialogPrimitivePortal container={container}>\n        <ThemeProvider themeName={useThemeName()}>\n          <AlphaDialogPrimitiveOverlay\n            style={overlayStyle}\n            className={classNames(\n              styles.ModalOverlay,\n              getZIndexClassName(zIndex)\n            )}\n          >\n            <AlphaDialogPrimitiveContent\n              asChild\n              onPointerDownOutside={(e) => {\n                if (preventHideOnOutsideClick) {\n                  e.preventDefault()\n                }\n              }}\n              onInteractOutside={(e) => {\n                if (preventHideOnOutsideClick) {\n                  e.preventDefault()\n                }\n              }}\n            >\n              <div\n                aria-modal=\"true\"\n                ref={contentRef}\n                style={\n                  {\n                    '--b-modal-width': cssDimension(width),\n                    '--b-modal-height': cssDimension(height),\n                    ...style,\n                  } as React.CSSProperties\n                }\n                className={classNames(styles.ModalContent, className)}\n                {...rest}\n              >\n                <section className={styles.ModalSection}>\n                  <ModalContainerContextProvider value={contentContainer}>\n                    <ModalContentPropsContextProvider value={propsContextValue}>\n                      {children}\n                    </ModalContentPropsContextProvider>\n                  </ModalContainerContextProvider>\n\n                  {/* NOTE: To prevent focusing first on the close button when opening the modal, place the close button behind. */}\n                  {showCloseIcon && (\n                    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n                    <ModalClose>\n                      <Button\n                        className={styles.CloseIconButton}\n                        size=\"m\"\n                        leftContent={CancelIcon}\n                        colorVariant=\"monochrome-dark\"\n                        styleVariant=\"tertiary\"\n                      />\n                    </ModalClose>\n                  )}\n                </section>\n              </div>\n            </AlphaDialogPrimitiveContent>\n          </AlphaDialogPrimitiveOverlay>\n        </ThemeProvider>\n      </AlphaDialogPrimitivePortal>\n    )\n  }\n)\n\nfunction getTitleTypo(size: ModalTitleSize) {\n  return (\n    {\n      l: '24',\n      m: '16',\n    } as const\n  )[size]\n}\n\nfunction ModalHeaderTitle({\n  children,\n  size,\n  subtitle,\n}: React.PropsWithChildren<\n  Pick<ModalHeaderProps, 'subtitle'> & {\n    size: NonNullable<ModalHeaderProps['titleSize']>\n  }\n>) {\n  const Title = (\n    <Text\n      className={styles.Title}\n      as=\"h2\"\n      typo={getTitleTypo(size)}\n      bold\n      color=\"text-neutral\"\n    >\n      {children}\n    </Text>\n  )\n\n  return (\n    <AlphaDialogPrimitiveTitle asChild>\n      {!isNil(subtitle) ? (\n        <hgroup\n          className={styles.HeadingGroup}\n          role=\"group\"\n          aria-roledescription=\"Heading group\"\n        >\n          {Title}\n\n          <Text\n            aria-roledescription=\"subtitle\"\n            as=\"p\"\n            bold\n            color=\"text-neutral-lighter\"\n            typo=\"13\"\n          >\n            {subtitle}\n          </Text>\n        </hgroup>\n      ) : (\n        Title\n      )}\n    </AlphaDialogPrimitiveTitle>\n  )\n}\n\n/**\n * `ModalHeader` is a header of the modal content.\n * It renders the accessible title and description of the modal.\n * If you want to hide the title and description, use `hidden` prop.\n */\nexport const ModalHeader = forwardRef<HTMLElement, ModalHeaderProps>(\n  function ModalHeader(\n    {\n      className,\n      title,\n      subtitle,\n      description,\n      titleSize = 'l',\n      hidden = false,\n      ...rest\n    },\n    forwardedRef\n  ) {\n    const { showCloseIcon } = useModalContentPropsContext()\n    const hasTitleArea = title || showCloseIcon\n    const Hidden = hidden ? VisuallyHidden : React.Fragment\n\n    return (\n      <Hidden>\n        <header\n          ref={forwardedRef}\n          className={classNames(\n            styles.ModalHeader,\n            hidden && styles.hidden,\n            className\n          )}\n          {...rest}\n        >\n          {hasTitleArea && (\n            <div className={styles.TitleContainer}>\n              {title && (\n                <ModalHeaderTitle\n                  size={titleSize}\n                  subtitle={subtitle}\n                >\n                  {title}\n                </ModalHeaderTitle>\n              )}\n\n              {showCloseIcon && (\n                <Button\n                  className={styles.CloseIconButtonSpacer}\n                  as=\"div\"\n                  size=\"m\"\n                />\n              )}\n            </div>\n          )}\n\n          {description && (\n            <AlphaDialogPrimitiveDescription asChild>\n              <Text\n                as=\"p\"\n                color=\"text-neutral\"\n                typo=\"15\"\n              >\n                {description}\n              </Text>\n            </AlphaDialogPrimitiveDescription>\n          )}\n        </header>\n      </Hidden>\n    )\n  }\n)\n\n/**\n * `ModalBody` is a simple wrapper of the main modal content.\n */\nexport const ModalBody = forwardRef(function ModalBody(\n  { children, className, ...rest }: ModalBodyProps,\n  forwardedRef: React.Ref<HTMLDivElement>\n) {\n  return (\n    <div\n      ref={forwardedRef}\n      className={classNames(styles.ModalBody, className)}\n      {...rest}\n    >\n      {children}\n    </div>\n  )\n})\n\n/**\n * `ModalFooter` is a simple wrapper of the footer of the modal content.\n * Usually, it contains the action buttons of the modal.\n */\nexport const ModalFooter = forwardRef<HTMLElement, ModalFooterProps>(\n  function ModalFooter(\n    { className, leftContent, rightContent, ...rest },\n    forwardedRef\n  ) {\n    return (\n      <footer\n        ref={forwardedRef}\n        className={classNames(styles.ModalFooter, className)}\n        {...rest}\n      >\n        {leftContent && (\n          <div className={styles.FooterLeftContent}>{leftContent}</div>\n        )}\n\n        {rightContent && (\n          <div className={styles.FooterRightContent}>{rightContent}</div>\n        )}\n      </footer>\n    )\n  }\n)\n\n/**\n * `ModalTrigger` is a button that opens the modal. **It doesn't render any DOM node.**\n * It passes the handler that opens the modal and accessibility properties to the children.\n *\n * It **must** be placed outside of the `ModalContent`.\n */\nexport function ModalTrigger({ children }: ModalTriggerProps) {\n  return (\n    <AlphaDialogPrimitiveTrigger asChild>\n      {children}\n    </AlphaDialogPrimitiveTrigger>\n  )\n}\n\n/**\n * `ModalClose` is a button that closes the modal. **It doesn't render any DOM node.**\n * It passes the handler that closes the modal to the children.\n */\nexport function ModalClose({ children }: ModalCloseProps) {\n  return (\n    <AlphaDialogPrimitiveClose asChild>{children}</AlphaDialogPrimitiveClose>\n  )\n}\n"],"names":["ModalContainerContextProvider","useModalContainerContext","createContext","undefined","ModalContentPropsContextProvider","useModalContentPropsContext","showCloseIcon","Modal","children","show","defaultShow","onShow","onHide","onOpenChange","useCallback","open","callback","_jsx","AlphaDialogPrimitive","defaultOpen","ModalContent","forwardRef","style","className","container","givenContainer","preventHideOnOutsideClick","width","height","zIndex","collisionPadding","top","bottom","rest","forwardedRef","rootElement","useRootElement","contentContainer","setContentContainer","useState","contentRef","useMergeRefs","node","overlayStyle","padding","isNumber","right","left","propsContextValue","useMemo","AlphaDialogPrimitivePortal","ThemeProvider","themeName","useThemeName","AlphaDialogPrimitiveOverlay","classNames","styles","ModalOverlay","getZIndexClassName","AlphaDialogPrimitiveContent","asChild","onPointerDownOutside","e","preventDefault","onInteractOutside","ref","cssDimension","_jsxs","ModalSection","value","ModalClose","Button","CloseIconButton","size","leftContent","CancelIcon","colorVariant","styleVariant","getTitleTypo","l","m","ModalHeaderTitle","subtitle","Title","Text","as","typo","bold","color","AlphaDialogPrimitiveTitle","isNil","HeadingGroup","role","ModalHeader","title","description","titleSize","hidden","hasTitleArea","Hidden","VisuallyHidden","React","Fragment","TitleContainer","CloseIconButtonSpacer","AlphaDialogPrimitiveDescription","ModalBody","ModalFooter","rightContent","FooterLeftContent","FooterRightContent","ModalTrigger","AlphaDialogPrimitiveTrigger","AlphaDialogPrimitiveClose"],"mappings":"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"}