{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/menu/SubmenuTrigger.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {classNames} from '../utils/classNames';\n\nimport {isFocusWithin} from 'react-aria/private/utils/shadowdom/DOMFunctions';\nimport {Key} from '@react-types/shared';\nimport {MenuContext, SubmenuTriggerContext, useMenuStateContext} from './context';\nimport {mergeProps} from 'react-aria/mergeProps';\nimport {Popover} from '../overlays/Popover';\nimport React, {type JSX, ReactElement, useRef} from 'react';\nimport ReactDOM from 'react-dom';\nimport styles from '@adobe/spectrum-css-temp/components/menu/vars.css';\nimport {useIsMobileDevice} from '../utils/useIsMobileDevice';\nimport {useLocale} from 'react-aria/I18nProvider';\nimport {useSubmenuTrigger} from 'react-aria/useMenu';\nimport {useSubmenuTriggerState} from 'react-stately/useMenuTriggerState';\n\ninterface SubmenuTriggerProps {\n  /**\n   * The contents of the SubmenuTrigger - an Item and a Menu.\n   */\n  children: ReactElement<any>[],\n  targetKey: Key\n}\n\nexport interface SpectrumSubmenuTriggerProps extends Omit<SubmenuTriggerProps, 'targetKey'> {}\n\nfunction SubmenuTrigger(props: SubmenuTriggerProps) {\n  let triggerRef = useRef<HTMLDivElement>(null);\n  let {\n    children,\n    targetKey\n  } = props;\n\n  let [menuTrigger, menu] = React.Children.toArray(children);\n  let {popoverContainer, trayContainerRef, menu: parentMenuRef, submenu: menuRef, rootMenuTriggerState} = useMenuStateContext()!;\n  let submenuTriggerState = useSubmenuTriggerState({triggerKey: targetKey}, rootMenuTriggerState!);\n  let {submenuTriggerProps, submenuProps, popoverProps} = useSubmenuTrigger({\n    parentMenuRef,\n    submenuRef: menuRef\n  }, submenuTriggerState, triggerRef);\n  let isMobile = useIsMobileDevice();\n  let onBackButtonPress = () => {\n    submenuTriggerState.close();\n    if (parentMenuRef.current && !isFocusWithin(parentMenuRef.current)) {\n      parentMenuRef.current.focus();\n    }\n  };\n\n  let {direction} = useLocale();\n  let mobileSubmenuKeyDown = (e: KeyboardEvent) => {\n    switch (e.key) {\n      case 'ArrowLeft':\n        if (direction === 'ltr') {\n          triggerRef.current?.focus();\n        }\n        break;\n      case 'ArrowRight':\n        if (direction === 'rtl') {\n          triggerRef.current?.focus();\n        }\n        break;\n    }\n  };\n\n  let overlay;\n\n  if (isMobile)  {\n    delete submenuTriggerProps.onBlur;\n    delete submenuTriggerProps.onHoverChange;\n    submenuProps.autoFocus ??= true;\n    if (trayContainerRef.current && submenuTriggerState.isOpen) {\n      overlay = ReactDOM.createPortal(menu, trayContainerRef.current);\n    }\n  } else {\n    let onDismissButtonPress = () => {\n      submenuTriggerState.close();\n      parentMenuRef.current?.focus();\n    };\n\n    overlay = (\n      <Popover\n        {...popoverProps}\n        onDismissButtonPress={onDismissButtonPress}\n        UNSAFE_className={classNames(styles, 'spectrum-Submenu-popover')}\n        container={popoverContainer!}\n        containerPadding={0}\n        enableBothDismissButtons\n        UNSAFE_style={{clipPath: 'unset', overflow: 'visible', borderWidth: '0px'}}\n        state={submenuTriggerState}\n        triggerRef={triggerRef}\n        scrollRef={menuRef}\n        placement=\"end top\"\n        hideArrow>\n        {menu}\n      </Popover>\n    );\n  }\n\n  let menuContext = {\n    ...mergeProps(submenuProps, {\n      ref: menuRef,\n      UNSAFE_style: isMobile ? {\n        width: '100%',\n        maxHeight: 'inherit'\n      } : undefined,\n      UNSAFE_className: classNames(styles, {'spectrum-Menu-popover': !isMobile}),\n      ...(isMobile && {\n        onBackButtonPress,\n        onKeyDown: mobileSubmenuKeyDown\n      })\n    })\n  };\n\n  return (\n    <>\n      <SubmenuTriggerContext.Provider value={{triggerRef, ...submenuTriggerProps}}>{menuTrigger}</SubmenuTriggerContext.Provider>\n      <MenuContext.Provider value={menuContext}>\n        {overlay}\n      </MenuContext.Provider>\n    </>\n  );\n}\n\nSubmenuTrigger.getCollectionNode = function* (props: SpectrumSubmenuTriggerProps) {\n  let childArray: ReactElement[] = [];\n  React.Children.forEach(props.children, child => {\n    if (React.isValidElement(child)) {\n      childArray.push(child);\n    }\n  });\n  let [trigger] = childArray;\n  let [, content] = props.children as [ReactElement, ReactElement];\n\n  yield {\n    element: React.cloneElement(trigger, {...trigger.props as any, hasChildItems: true, isTrigger: true}),\n    wrapper: (element) => (\n      <SubmenuTrigger key={element.key} targetKey={element.key} {...props}>\n        {element}\n        {content}\n      </SubmenuTrigger>\n    )\n  };\n};\n\nlet _SubmenuTrigger = SubmenuTrigger as unknown as (props: SpectrumSubmenuTriggerProps) => JSX.Element;\nexport {_SubmenuTrigger as SubmenuTrigger};\n"],"names":[],"version":3,"file":"SubmenuTrigger.cjs.map"}