{"version":3,"file":"FocusTrap.mjs","sources":["../../../../../../../../node_modules/@mui/material/Unstable_TrapFocus/FocusTrap.js"],"sourcesContent":["'use client';\n\n/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp, elementAcceptingRef, unstable_useForkRef as useForkRef, unstable_ownerDocument as ownerDocument, unstable_getReactElementRef as getReactElementRef } from '@mui/utils';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// Inspired by https://github.com/focus-trap/tabbable\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\nfunction getTabIndex(node) {\n  const tabindexAttr = parseInt(node.getAttribute('tabindex') || '', 10);\n  if (!Number.isNaN(tabindexAttr)) {\n    return tabindexAttr;\n  }\n\n  // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n  // https://issues.chromium.org/issues/41283952\n  // so if they don't have a tabindex attribute specifically set, assume it's 0.\n  // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n  //  `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n  //  yet they are still part of the regular tab order; in FF, they get a default\n  //  `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n  //  order, consider their tab index to be 0.\n  if (node.contentEditable === 'true' || (node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {\n    return 0;\n  }\n  return node.tabIndex;\n}\nfunction isNonTabbableRadio(node) {\n  if (node.tagName !== 'INPUT' || node.type !== 'radio') {\n    return false;\n  }\n  if (!node.name) {\n    return false;\n  }\n  const getRadio = selector => node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n  let roving = getRadio(`[name=\"${node.name}\"]:checked`);\n  if (!roving) {\n    roving = getRadio(`[name=\"${node.name}\"]`);\n  }\n  return roving !== node;\n}\nfunction isNodeMatchingSelectorFocusable(node) {\n  if (node.disabled || node.tagName === 'INPUT' && node.type === 'hidden' || isNonTabbableRadio(node)) {\n    return false;\n  }\n  return true;\n}\nfunction defaultGetTabbable(root) {\n  const regularTabNodes = [];\n  const orderedTabNodes = [];\n  Array.from(root.querySelectorAll(candidatesSelector)).forEach((node, i) => {\n    const nodeTabIndex = getTabIndex(node);\n    if (nodeTabIndex === -1 || !isNodeMatchingSelectorFocusable(node)) {\n      return;\n    }\n    if (nodeTabIndex === 0) {\n      regularTabNodes.push(node);\n    } else {\n      orderedTabNodes.push({\n        documentOrder: i,\n        tabIndex: nodeTabIndex,\n        node: node\n      });\n    }\n  });\n  return orderedTabNodes.sort((a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex).map(a => a.node).concat(regularTabNodes);\n}\nfunction defaultIsEnabled() {\n  return true;\n}\n\n/**\n * @ignore - internal component.\n */\nfunction FocusTrap(props) {\n  const {\n    children,\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableRestoreFocus = false,\n    getTabbable = defaultGetTabbable,\n    isEnabled = defaultIsEnabled,\n    open\n  } = props;\n  const ignoreNextEnforceFocus = React.useRef(false);\n  const sentinelStart = React.useRef(null);\n  const sentinelEnd = React.useRef(null);\n  const nodeToRestore = React.useRef(null);\n  const reactFocusEventTarget = React.useRef(null);\n  // This variable is useful when disableAutoFocus is true.\n  // It waits for the active element to move into the component to activate.\n  const activated = React.useRef(false);\n  const rootRef = React.useRef(null);\n  const handleRef = useForkRef(getReactElementRef(children), rootRef);\n  const lastKeydown = React.useRef(null);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    activated.current = !disableAutoFocus;\n  }, [disableAutoFocus, open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    if (!rootRef.current.contains(doc.activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['MUI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n        rootRef.current.setAttribute('tabIndex', '-1');\n      }\n      if (activated.current) {\n        rootRef.current.focus();\n      }\n    }\n    return () => {\n      // restoreLastFocus()\n      if (!disableRestoreFocus) {\n        // In IE11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE11 have a focus method.\n        // Once IE11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          ignoreNextEnforceFocus.current = true;\n          nodeToRestore.current.focus();\n        }\n        nodeToRestore.current = null;\n      }\n    };\n    // Missing `disableRestoreFocus` which is fine.\n    // We don't support changing that prop on an open FocusTrap\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    const loopFocus = nativeEvent => {\n      lastKeydown.current = nativeEvent;\n      if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {\n        return;\n      }\n\n      // Make sure the next tab starts from the right place.\n      // doc.activeElement refers to the origin.\n      if (doc.activeElement === rootRef.current && nativeEvent.shiftKey) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n        if (sentinelEnd.current) {\n          sentinelEnd.current.focus();\n        }\n      }\n    };\n    const contain = () => {\n      const rootElement = rootRef.current;\n\n      // Cleanup functions are executed lazily in React 17.\n      // Contain can be called between the component being unmounted and its cleanup function being run.\n      if (rootElement === null) {\n        return;\n      }\n      if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      // The focus is already inside\n      if (rootElement.contains(doc.activeElement)) {\n        return;\n      }\n\n      // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)\n      if (disableEnforceFocus && doc.activeElement !== sentinelStart.current && doc.activeElement !== sentinelEnd.current) {\n        return;\n      }\n\n      // if the focus event is not coming from inside the children's react tree, reset the refs\n      if (doc.activeElement !== reactFocusEventTarget.current) {\n        reactFocusEventTarget.current = null;\n      } else if (reactFocusEventTarget.current !== null) {\n        return;\n      }\n      if (!activated.current) {\n        return;\n      }\n      let tabbable = [];\n      if (doc.activeElement === sentinelStart.current || doc.activeElement === sentinelEnd.current) {\n        tabbable = getTabbable(rootRef.current);\n      }\n\n      // one of the sentinel nodes was focused, so move the focus\n      // to the first/last tabbable element inside the focus trap\n      if (tabbable.length > 0) {\n        const isShiftTab = Boolean(lastKeydown.current?.shiftKey && lastKeydown.current?.key === 'Tab');\n        const focusNext = tabbable[0];\n        const focusPrevious = tabbable[tabbable.length - 1];\n        if (typeof focusNext !== 'string' && typeof focusPrevious !== 'string') {\n          if (isShiftTab) {\n            focusPrevious.focus();\n          } else {\n            focusNext.focus();\n          }\n        }\n        // no tabbable elements in the trap focus or the focus was outside of the focus trap\n      } else {\n        rootElement.focus();\n      }\n    };\n    doc.addEventListener('focusin', contain);\n    doc.addEventListener('keydown', loopFocus, true);\n\n    // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area.\n    // for example https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    // Instead, we can look if the active element was restored on the BODY element.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n    const interval = setInterval(() => {\n      if (doc.activeElement && doc.activeElement.tagName === 'BODY') {\n        contain();\n      }\n    }, 50);\n    return () => {\n      clearInterval(interval);\n      doc.removeEventListener('focusin', contain);\n      doc.removeEventListener('keydown', loopFocus, true);\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open, getTabbable]);\n  const onFocus = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n    reactFocusEventTarget.current = event.target;\n    const childrenPropsHandler = children.props.onFocus;\n    if (childrenPropsHandler) {\n      childrenPropsHandler(event);\n    }\n  };\n  const handleFocusSentinel = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelStart,\n      \"data-testid\": \"sentinelStart\"\n    }), /*#__PURE__*/React.cloneElement(children, {\n      ref: handleRef,\n      onFocus\n    }), /*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelEnd,\n      \"data-testid\": \"sentinelEnd\"\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? FocusTrap.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef,\n  /**\n   * If `true`, the focus trap will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any focus trap children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableAutoFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not prevent focus from leaving the focus trap while open.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableEnforceFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not restore focus to previously focused element once\n   * focus trap is hidden or unmounted.\n   * @default false\n   */\n  disableRestoreFocus: PropTypes.bool,\n  /**\n   * Returns an array of ordered tabbable nodes (i.e. in tab order) within the root.\n   * For instance, you can provide the \"tabbable\" npm dependency.\n   * @param {HTMLElement} root\n   */\n  getTabbable: PropTypes.func,\n  /**\n   * This prop extends the `open` prop.\n   * It allows to toggle the open state without having to wait for a rerender when changing the `open` prop.\n   * This prop should be memoized.\n   * It can be used to support multiple focus trap mounted at the same time.\n   * @default function defaultIsEnabled(): boolean {\n   *   return true;\n   * }\n   */\n  isEnabled: PropTypes.func,\n  /**\n   * If `true`, focus is locked.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  FocusTrap['propTypes' + ''] = exactProp(FocusTrap.propTypes);\n}\nexport default FocusTrap;"],"names":["React.useRef","React.useEffect","_jsxs","React.Fragment","_jsx","React.cloneElement"],"mappings":"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","x_google_ignoreList":[0]}