{"version":3,"file":"index.cjs","names":["React"],"sources":["../src/CloseIcon.tsx","../src/lib/focusTrapJs.ts","../src/utils.ts","../src/FocusTrap.tsx","../src/modalManager.ts","../src/useScrollLock.ts","../src/index.tsx"],"sourcesContent":["import cx from 'classnames';\nimport React from 'react';\n\ninterface CloseIconProps {\n  id?: string;\n  closeIcon?: React.ReactNode;\n  styles?: {\n    closeButton?: React.CSSProperties;\n    closeIcon?: React.CSSProperties;\n  };\n  classNames?: {\n    closeButton?: string;\n    closeIcon?: string;\n  };\n  classes: {\n    closeButton?: string;\n  };\n  onClick: () => void;\n}\n\nconst CloseIcon = ({\n  classes,\n  classNames,\n  styles,\n  id,\n  closeIcon,\n  onClick,\n}: CloseIconProps) => (\n  <button\n    id={id}\n    className={cx(classes.closeButton, classNames?.closeButton)}\n    style={styles?.closeButton}\n    onClick={onClick}\n    data-testid=\"close-button\"\n  >\n    {closeIcon ? (\n      closeIcon\n    ) : (\n      <svg\n        className={classNames?.closeIcon}\n        style={styles?.closeIcon}\n        width={28}\n        height={28}\n        viewBox=\"0 0 36 36\"\n        data-testid=\"close-icon\"\n      >\n        <path d=\"M28.5 9.62L26.38 7.5 18 15.88 9.62 7.5 7.5 9.62 15.88 18 7.5 26.38l2.12 2.12L18 20.12l8.38 8.38 2.12-2.12L20.12 18z\" />\n      </svg>\n    )}\n  </button>\n);\n\nexport default CloseIcon;\n","// https://github.com/alexandrzavalii/focus-trap-js/blob/master/src/index.js v1.1.0\n\nexport const candidateSelectors = [\n  'input',\n  'select',\n  'textarea',\n  'a[href]',\n  'button',\n  '[tabindex]',\n  'audio[controls]',\n  'video[controls]',\n  '[contenteditable]:not([contenteditable=\"false\"])',\n];\n\nfunction isHidden(node: any) {\n  // offsetParent being null will allow detecting cases where an element is invisible or inside an invisible element,\n  // as long as the element does not use position: fixed. For them, their visibility has to be checked directly as well.\n  return (\n    node.offsetParent === null || getComputedStyle(node).visibility === 'hidden'\n  );\n}\n\nfunction getCheckedRadio(nodes: any, form: any) {\n  for (var i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n}\n\nfunction isNotRadioOrTabbableRadio(node: any) {\n  if (node.tagName !== 'INPUT' || node.type !== 'radio' || !node.name) {\n    return true;\n  }\n  var radioScope = node.form || node.ownerDocument;\n  var radioSet = radioScope.querySelectorAll(\n    'input[type=\"radio\"][name=\"' + node.name + '\"]',\n  );\n  var checked = getCheckedRadio(radioSet, node.form);\n  return checked === node || (checked === undefined && radioSet[0] === node);\n}\n\nexport function getAllTabbingElements(parentElem: any) {\n  var currentActiveElement = document.activeElement;\n  var tabbableNodes = parentElem.querySelectorAll(candidateSelectors.join(','));\n  var onlyTabbable = [];\n  for (var i = 0; i < tabbableNodes.length; i++) {\n    var node = tabbableNodes[i];\n    if (\n      currentActiveElement === node ||\n      (!node.disabled &&\n        getTabindex(node) > -1 &&\n        !isHidden(node) &&\n        isNotRadioOrTabbableRadio(node))\n    ) {\n      onlyTabbable.push(node);\n    }\n  }\n  return onlyTabbable;\n}\n\nexport function tabTrappingKey(event: any, parentElem: any) {\n  // check if current event keyCode is tab\n  if (!event || event.key !== 'Tab') return;\n\n  if (!parentElem || !parentElem.contains) {\n    if (process && process.env.NODE_ENV === 'development') {\n      console.warn('focus-trap-js: parent element is not defined');\n    }\n    return false;\n  }\n\n  if (!parentElem.contains(event.target)) {\n    return false;\n  }\n\n  var allTabbingElements = getAllTabbingElements(parentElem);\n  var firstFocusableElement = allTabbingElements[0];\n  var lastFocusableElement = allTabbingElements[allTabbingElements.length - 1];\n\n  if (event.shiftKey && event.target === firstFocusableElement) {\n    lastFocusableElement.focus();\n    event.preventDefault();\n    return true;\n  } else if (!event.shiftKey && event.target === lastFocusableElement) {\n    firstFocusableElement.focus();\n    event.preventDefault();\n    return true;\n  }\n  return false;\n}\n\nfunction getTabindex(node: any) {\n  var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n\n  if (!isNaN(tabindexAttr)) return tabindexAttr;\n  // Browsers do not return tabIndex correctly for contentEditable nodes;\n  // so if they don't have a tabindex attribute specifically set, assume it's 0.\n\n  if (isContentEditable(node)) return 0;\n  return node.tabIndex;\n}\n\nfunction isContentEditable(node: any) {\n  return node.getAttribute('contentEditable');\n}\n","export const isBrowser = typeof window !== 'undefined';\n","import { useEffect, useRef } from 'react';\n\nimport {\n  tabTrappingKey,\n  candidateSelectors,\n  getAllTabbingElements,\n} from './lib/focusTrapJs';\nimport { isBrowser } from './utils';\n\ninterface FocusTrapProps {\n  container?: React.RefObject<HTMLElement> | null;\n  initialFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const FocusTrap = ({ container, initialFocusRef }: FocusTrapProps) => {\n  const refLastFocus = useRef<HTMLElement | null>(null);\n  /**\n   * Handle focus lock on the modal\n   */\n  useEffect(() => {\n    const handleKeyEvent = (event: KeyboardEvent) => {\n      if (container?.current) {\n        tabTrappingKey(event, container.current);\n      }\n    };\n\n    if (isBrowser) {\n      document.addEventListener('keydown', handleKeyEvent);\n    }\n    // On mount we focus on the first focusable element in the modal if there is one\n    if (isBrowser && container?.current) {\n      const savePreviousFocus = () => {\n        // First we save the last focused element\n        // only if it's a focusable element\n        if (\n          candidateSelectors.findIndex((selector) =>\n            document.activeElement?.matches(selector),\n          ) !== -1\n        ) {\n          refLastFocus.current = document.activeElement as HTMLElement;\n        }\n      };\n\n      if (initialFocusRef) {\n        savePreviousFocus();\n        // We need to schedule focusing on a next frame - this allows to focus on the modal root\n        requestAnimationFrame(() => {\n          initialFocusRef.current?.focus();\n        });\n      } else {\n        const allTabbingElements = getAllTabbingElements(container.current);\n        if (allTabbingElements[0]) {\n          savePreviousFocus();\n          allTabbingElements[0].focus();\n        }\n      }\n    }\n    return () => {\n      if (isBrowser) {\n        document.removeEventListener('keydown', handleKeyEvent);\n        // On unmount we restore the focus to the last focused element\n        refLastFocus.current?.focus();\n      }\n    };\n  }, [container, initialFocusRef]);\n\n  return null;\n};\n","import { Ref, useEffect } from 'react';\n\nlet modals: Ref<Element>[] = [];\n\n/**\n * Handle the order of the modals.\n * Inspired by the material-ui implementation.\n */\nexport const modalManager = {\n  /**\n   * Register a new modal\n   */\n  add: (newModal: Ref<Element>) => {\n    modals.push(newModal);\n  },\n\n  /**\n   * Remove a modal\n   */\n  remove: (oldModal: Ref<Element>) => {\n    modals = modals.filter((modal) => modal !== oldModal);\n  },\n\n  /**\n   * When multiple modals are rendered will return true if current modal is the last one\n   */\n  isTopModal: (modal: Ref<Element>) =>\n    !!modals.length && modals[modals.length - 1] === modal,\n};\n\nexport function useModalManager(ref: Ref<Element>, open: boolean) {\n  useEffect(() => {\n    if (open) {\n      modalManager.add(ref);\n    }\n    return () => {\n      modalManager.remove(ref);\n    };\n  }, [open, ref]);\n}\n","import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { useEffect, useRef } from 'react';\n\nexport const useScrollLock = (\n  refModal: React.RefObject<Element | null>,\n  open: boolean,\n  showPortal: boolean,\n  blockScroll: boolean,\n  reserveScrollBarGap?: boolean,\n) => {\n  const oldRef = useRef<Element | null>(null);\n\n  useEffect(() => {\n    if (open && refModal.current && blockScroll) {\n      oldRef.current = refModal.current;\n      disableBodyScroll(refModal.current, { reserveScrollBarGap });\n    }\n    return () => {\n      if (oldRef.current) {\n        enableBodyScroll(oldRef.current);\n        oldRef.current = null;\n      }\n    };\n  }, [open, showPortal, refModal, blockScroll, reserveScrollBarGap]);\n};\n","import { useForwardedRef } from '@bedrock-layout/use-forwarded-ref';\nimport cx from 'classnames';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport CloseIcon from './CloseIcon';\nimport { FocusTrap } from './FocusTrap';\nimport { modalManager, useModalManager } from './modalManager';\nimport { useScrollLock } from './useScrollLock';\nimport { isBrowser } from './utils';\n\nconst classes = {\n  root: 'react-responsive-modal-root',\n  overlay: 'react-responsive-modal-overlay',\n  overlayAnimationIn: 'react-responsive-modal-overlay-in',\n  overlayAnimationOut: 'react-responsive-modal-overlay-out',\n  modalContainer: 'react-responsive-modal-container',\n  modalContainerCenter: 'react-responsive-modal-containerCenter',\n  modal: 'react-responsive-modal-modal',\n  modalAnimationIn: 'react-responsive-modal-modal-in',\n  modalAnimationOut: 'react-responsive-modal-modal-out',\n  closeButton: 'react-responsive-modal-closeButton',\n};\n\nexport interface ModalProps {\n  /**\n   * Control if the modal is open or not.\n   */\n  open: boolean;\n  /**\n   * Should the dialog be centered.\n   *\n   * Default to false.\n   */\n  center?: boolean;\n  /**\n   * Is the modal closable when user press esc key.\n   *\n   * Default to true.\n   */\n  closeOnEsc?: boolean;\n  /**\n   * Is the modal closable when user click on overlay.\n   *\n   * Default to true.\n   */\n  closeOnOverlayClick?: boolean;\n  /**\n   * Whether to block scrolling when dialog is open.\n   *\n   * Default to true.\n   */\n  blockScroll?: boolean;\n  /**\n   * Show the close icon.\n   *\n   * Default to true.\n   */\n  showCloseIcon?: boolean;\n  /**\n   * id attribute for the close icon button.\n   */\n  closeIconId?: string;\n  /**\n   * Custom icon to render (svg, img, etc...).\n   */\n  closeIcon?: React.ReactNode;\n  /**\n   * When the modal is open, trap focus within it.\n   *\n   * Default to true.\n   */\n  focusTrapped?: boolean;\n  /**\n   * Element to focus when focus trap is used.\n   *\n   * Default to undefined.\n   */\n  initialFocusRef?: React.RefObject<HTMLElement | null>;\n  /**\n   * You can specify a container prop which should be of type `Element`.\n   * The portal will be rendered inside that element.\n   * The default behavior will create a div node and render it at the at the end of document.body.\n   */\n  container?: Element | null;\n  /**\n   * An object containing classNames to style the modal.\n   */\n  classNames?: {\n    root?: string;\n    overlay?: string;\n    overlayAnimationIn?: string;\n    overlayAnimationOut?: string;\n    modalContainer?: string;\n    modal?: string;\n    modalAnimationIn?: string;\n    modalAnimationOut?: string;\n    closeButton?: string;\n    closeIcon?: string;\n  };\n  /**\n   * An object containing the styles objects to style the modal.\n   */\n  styles?: {\n    root?: React.CSSProperties;\n    overlay?: React.CSSProperties;\n    modalContainer?: React.CSSProperties;\n    modal?: React.CSSProperties;\n    closeButton?: React.CSSProperties;\n    closeIcon?: React.CSSProperties;\n  };\n  /**\n   * Animation duration in milliseconds.\n   *\n   * Default to 300.\n   */\n  animationDuration?: number;\n  /**\n   * ARIA role for modal\n   *\n   * Default to 'dialog'.\n   */\n  role?: string;\n  /**\n   * ARIA label for modal\n   */\n  ariaLabel?: string;\n  /**\n   * ARIA label for modal\n   */\n  ariaLabelledby?: string;\n  /**\n   * ARIA description for modal\n   */\n  ariaDescribedby?: string;\n  /**\n   * Avoid unpleasant flickering effect when body overflow is hidden. For more information see https://www.npmjs.com/package/body-scroll-lock\n   */\n  reserveScrollBarGap?: boolean;\n  /**\n   * id attribute for modal container\n   */\n  containerId?: string;\n  /**\n   * id attribute for modal\n   */\n  modalId?: string;\n  /**\n   * Callback fired when the Modal is requested to be closed by a click on the overlay or when user press esc key.\n   */\n  onClose: () => void;\n  /**\n   * Callback fired when the escape key is pressed.\n   */\n  onEscKeyDown?: (event: KeyboardEvent) => void;\n  /**\n   * Callback fired when the overlay is clicked.\n   */\n  onOverlayClick?: (\n    event: React.MouseEvent<HTMLDivElement, MouseEvent>,\n  ) => void;\n  /**\n   * Callback fired when the Modal has exited and the animation is finished.\n   */\n  onAnimationEnd?: () => void;\n  children?: React.ReactNode;\n}\n\nexport const Modal = React.forwardRef(\n  (\n    {\n      open,\n      center,\n      blockScroll = true,\n      closeOnEsc = true,\n      closeOnOverlayClick = true,\n      container,\n      showCloseIcon = true,\n      closeIconId,\n      closeIcon,\n      focusTrapped = true,\n      initialFocusRef,\n      animationDuration = 300,\n      classNames,\n      styles,\n      role = 'dialog',\n      ariaLabel,\n      ariaDescribedby,\n      ariaLabelledby,\n      containerId,\n      modalId,\n      onClose,\n      onEscKeyDown,\n      onOverlayClick,\n      onAnimationEnd,\n      children,\n      reserveScrollBarGap,\n    }: ModalProps,\n    ref: React.ForwardedRef<HTMLDivElement>,\n  ) => {\n    const refDialog = useForwardedRef(ref);\n    const refModal = useRef<HTMLDivElement>(null);\n    const refShouldClose = useRef<boolean | null>(null);\n    const refContainer = useRef<HTMLDivElement | null>(null);\n    // Lazily create the ref instance\n    // https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n    if (refContainer.current === null && isBrowser) {\n      refContainer.current = document.createElement('div');\n    }\n\n    // The value should be false for srr, that way when the component is hydrated client side,\n    // it will match the server rendered content\n    const [showPortal, setShowPortal] = useState(false);\n\n    // Hook used to manage multiple modals opened at the same time\n    useModalManager(refModal, open);\n\n    // Hook used to manage the scroll\n    useScrollLock(refModal, open, showPortal, blockScroll, reserveScrollBarGap);\n\n    const handleOpen = () => {\n      if (\n        refContainer.current &&\n        !container &&\n        !document.body.contains(refContainer.current)\n      ) {\n        document.body.appendChild(refContainer.current);\n      }\n\n      document.addEventListener('keydown', handleKeydown);\n    };\n\n    const handleClose = () => {\n      if (\n        refContainer.current &&\n        !container &&\n        document.body.contains(refContainer.current)\n      ) {\n        document.body.removeChild(refContainer.current);\n      }\n      document.removeEventListener('keydown', handleKeydown);\n    };\n\n    const handleKeydown = (event: KeyboardEvent) => {\n      // Only the last modal need to be escaped when pressing the esc key\n      if (event.keyCode !== 27 || !modalManager.isTopModal(refModal)) {\n        return;\n      }\n\n      onEscKeyDown?.(event);\n\n      if (closeOnEsc) {\n        onClose();\n      }\n    };\n\n    useEffect(() => {\n      return () => {\n        if (showPortal) {\n          // When the modal is closed or removed directly, cleanup the listeners\n          handleClose();\n        }\n      };\n    }, [showPortal]);\n\n    useEffect(() => {\n      // If the open prop is changing, we need to open the modal\n      // This is also called on the first render if the open prop is true when the modal is created\n      if (open && !showPortal) {\n        setShowPortal(true);\n        handleOpen();\n      }\n    }, [open]);\n\n    const handleClickOverlay = (\n      event: React.MouseEvent<HTMLDivElement, MouseEvent>,\n    ) => {\n      if (refShouldClose.current === null) {\n        refShouldClose.current = true;\n      }\n\n      if (!refShouldClose.current) {\n        refShouldClose.current = null;\n        return;\n      }\n\n      onOverlayClick?.(event);\n\n      if (closeOnOverlayClick) {\n        onClose();\n      }\n\n      refShouldClose.current = null;\n    };\n\n    const handleModalEvent = () => {\n      refShouldClose.current = false;\n    };\n\n    const handleAnimationEnd = () => {\n      if (!open) {\n        setShowPortal(false);\n      }\n\n      onAnimationEnd?.();\n    };\n\n    const containerModal = container || refContainer.current;\n\n    const overlayAnimation = open\n      ? (classNames?.overlayAnimationIn ?? classes.overlayAnimationIn)\n      : (classNames?.overlayAnimationOut ?? classes.overlayAnimationOut);\n\n    const modalAnimation = open\n      ? (classNames?.modalAnimationIn ?? classes.modalAnimationIn)\n      : (classNames?.modalAnimationOut ?? classes.modalAnimationOut);\n\n    return showPortal && containerModal\n      ? createPortal(\n          <div\n            className={cx(classes.root, classNames?.root)}\n            style={styles?.root}\n            data-testid=\"root\"\n          >\n            <div\n              className={cx(classes.overlay, classNames?.overlay)}\n              data-testid=\"overlay\"\n              aria-hidden={true}\n              style={{\n                animation: `${overlayAnimation} ${animationDuration}ms`,\n                ...styles?.overlay,\n              }}\n            />\n            <div\n              ref={refModal}\n              id={containerId}\n              className={cx(\n                classes.modalContainer,\n                center && classes.modalContainerCenter,\n                classNames?.modalContainer,\n              )}\n              style={styles?.modalContainer}\n              data-testid=\"modal-container\"\n              onClick={handleClickOverlay}\n            >\n              <div\n                ref={refDialog}\n                className={cx(classes.modal, classNames?.modal)}\n                style={{\n                  animation: `${modalAnimation} ${animationDuration}ms`,\n                  ...styles?.modal,\n                }}\n                onMouseDown={handleModalEvent}\n                onMouseUp={handleModalEvent}\n                onClick={handleModalEvent}\n                onAnimationEnd={handleAnimationEnd}\n                id={modalId}\n                role={role}\n                aria-modal=\"true\"\n                aria-label={ariaLabel}\n                aria-labelledby={ariaLabelledby}\n                aria-describedby={ariaDescribedby}\n                data-testid=\"modal\"\n                tabIndex={-1}\n              >\n                {focusTrapped && (\n                  <FocusTrap\n                    container={refDialog}\n                    initialFocusRef={initialFocusRef}\n                  />\n                )}\n                {children}\n                {showCloseIcon && (\n                  <CloseIcon\n                    classes={classes}\n                    classNames={classNames}\n                    styles={styles}\n                    closeIcon={closeIcon}\n                    onClick={onClose}\n                    id={closeIconId}\n                  />\n                )}\n              </div>\n            </div>\n          </div>,\n          containerModal,\n        )\n      : null;\n  },\n);\n\nexport default Modal;\n"],"mappings":"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"}