{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;;;;;;AAiDM,MAAM,0DAAc,CAAA,GAAA,uBAAS,EAAE,SAAS,YAAY,KAA+B,EAAE,GAAwB;IAClH,IAAI,aAAa,CAAA,GAAA,mBAAK,EAAe;IACrC,IAAI,SAAS,CAAA,GAAA,mCAAQ,EAAE;IACvB,IAAI,iBAAiB,UAAU;IAC/B,IAAI,UAAU,CAAA,GAAA,mBAAK,EAAkB;IACrC,IAAI,YACF,QAAQ,SACR,QAAQ,qBACR,aAAa,iBACb,YAAY,yBACZ,aAAa,WACb,UAAU,SACX,GAAG;IAEJ,IAAI,CAAC,aAAa,KAAK,GAAG,CAAA,GAAA,sCAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACjD,IAAI,QAAQ,CAAA,GAAA,0DAAkB,EAAE;IAEhC,IAAI,oBAAC,gBAAgB,aAAE,SAAS,EAAC,GAAG,CAAA,GAAA,sCAAa,EAAE;iBAAC;IAAO,GAAG,OAAO;IAErE,IAAI;IACJ,OAAQ;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,mBAAmB,GAAG,UAAU,CAAC,EAAE,UAAU,QAAQ,WAAW,OAAO;YACvE;QACF,KAAK;QACL,KAAK;QACL;YACE,mBAAmB,GAAG,UAAU,CAAC,EAAE,OAAO;IAC9C;IAEA,IAAI,WAAW,CAAA,GAAA,2CAAgB;IAC/B,IAAI,cAAc;QAChB,GAAG,SAAS;QACZ,KAAK;QACL,SAAS,MAAM,KAAK;uBACpB;QACA,WAAW,MAAM,aAAa,IAAI;QAClC,cAAc,WAAW;YACvB,OAAO;YACP,WAAW;QACb,IAAI;QACJ,kBAAkB,CAAA,GAAA,oCAAS,EAAE,CAAA,GAAA,mDAAK,GAAG;YAAC,yBAAyB,CAAC;QAAQ;eACxE;IACF;IAEA,oEAAoE;IACpE,IAAI,iBAAiB,CAAA,GAAA,mBAAK,EAAE;IAC5B,IAAI,oBAAoB,CAAA,GAAA,sCAAW,EAAE;IACrC,CAAA,GAAA,qDAAiB,EAAE;QACjB,KAAK;QACL,mBAAmB;YACjB,OAAO;QACT;QACA,YAAY,CAAC,MAAM,MAAM,IAAI,MAAM,iBAAiB,CAAC,MAAM,KAAK;IAClE;IAEA,gFAAgF;IAChF,IAAI;IACJ,IAAI,UACF,wBACE,0DAAC,CAAA,GAAA,8BAAG;QAAE,OAAO;QAAO,eAAA;QAAc,KAAK;OACpC;SAIL,wBACE,0DAAC,CAAA,GAAA,iCAAM;QACL,KAAK;QACL,cAAc;YAAC,UAAU;YAAS,UAAU;YAAW,QAAQ;YAAS,aAAa;QAAK;QAC1F,OAAO;QACP,YAAY;QACZ,WAAW;QACX,WAAW;QACX,WAAA;QACA,YAAY;QACZ,oBAAA;OACC;IAKP,qBACE,0DAAC,CAAA,GAAA,qBAAO,uBACN,0DAAC,CAAA,GAAA,sCAAW;QAAE,OAAO;YAAC,cAAc;gBAAC,gBAAgB,YAAY;YAAW;QAAC;qBAC3E,0DAAC,CAAA,GAAA,gEAAa;QAAG,GAAG,gBAAgB;QAAE,KAAK;QAAgB,WAAW,MAAM,MAAM;OAC/E,6BAGL,0DAAC,CAAA,GAAA,qCAAU,EAAE,QAAQ;QAAC,OAAO;OAC1B;AAIT","sources":["packages/@adobe/react-spectrum/src/menu/MenuTrigger.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 {Alignment, DOMRef} from '@react-types/shared';\nimport {classNames} from '../utils/classNames';\nimport {MenuContext} from './context';\nimport {MenuTriggerProps, useMenuTriggerState} from 'react-stately/useMenuTriggerState';\nimport {Placement} from 'react-aria/useOverlayPosition';\nimport {Popover} from '../overlays/Popover';\nimport {PressResponder} from 'react-aria/private/interactions/PressResponder';\nimport React, {forwardRef, Fragment, ReactElement, useRef} from 'react';\nimport {SlotProvider} from '../utils/Slots';\nimport styles from '@adobe/spectrum-css-temp/components/menu/vars.css';\nimport {Tray} from '../overlays/Tray';\nimport {unwrapDOMRef, useDOMRef} from '../utils/useDOMRef';\nimport {useInteractOutside} from 'react-aria/useInteractOutside';\nimport {useIsMobileDevice} from '../utils/useIsMobileDevice';\nimport {useMenuTrigger} from 'react-aria/useMenu';\n\nexport interface SpectrumMenuTriggerProps extends MenuTriggerProps {\n  /**\n   * The contents of the MenuTrigger - a trigger and a Menu.\n   */\n  children: ReactElement[],\n  /**\n   * Alignment of the menu relative to the trigger.\n   * @default 'start'\n   */\n  align?: Alignment,\n  /**\n   * Where the Menu opens relative to its trigger.\n   * @default 'bottom'\n   */\n  direction?: 'bottom' | 'top' | 'left' | 'right' | 'start' | 'end',\n  /**\n   * Whether the menu should automatically flip direction when space is limited.\n   * @default true\n   */\n  shouldFlip?: boolean,\n  /**\n   * Whether the Menu closes when a selection is made.\n   * @default true\n   */\n  closeOnSelect?: boolean\n}\n\n/**\n * The MenuTrigger serves as a wrapper around a Menu and its associated trigger,\n * linking the Menu's open state with the trigger's press state.\n */\nexport const MenuTrigger = forwardRef(function MenuTrigger(props: SpectrumMenuTriggerProps, ref: DOMRef<HTMLElement>) {\n  let triggerRef = useRef<HTMLElement>(null);\n  let domRef = useDOMRef(ref);\n  let menuTriggerRef = domRef || triggerRef;\n  let menuRef = useRef<HTMLDivElement>(null);\n  let {\n    children,\n    align = 'start',\n    shouldFlip = true,\n    direction = 'bottom',\n    closeOnSelect,\n    trigger = 'press'\n  } = props;\n\n  let [menuTrigger, menu] = React.Children.toArray(children);\n  let state = useMenuTriggerState(props);\n\n  let {menuTriggerProps, menuProps} = useMenuTrigger({trigger}, state, menuTriggerRef);\n\n  let initialPlacement: Placement;\n  switch (direction) {\n    case 'left':\n    case 'right':\n    case 'start':\n    case 'end':\n      initialPlacement = `${direction} ${align === 'end' ? 'bottom' : 'top'}` as Placement;\n      break;\n    case 'bottom':\n    case 'top':\n    default:\n      initialPlacement = `${direction} ${align}` as Placement;\n  }\n\n  let isMobile = useIsMobileDevice();\n  let menuContext = {\n    ...menuProps,\n    ref: menuRef,\n    onClose: state.close,\n    closeOnSelect,\n    autoFocus: state.focusStrategy || true,\n    UNSAFE_style: isMobile ? {\n      width: '100%',\n      maxHeight: 'inherit'\n    } : undefined,\n    UNSAFE_className: classNames(styles, {'spectrum-Menu-popover': !isMobile}),\n    state\n  };\n\n  // Close when clicking outside the root menu when a submenu is open.\n  let rootOverlayRef = useRef(null);\n  let rootOverlayDomRef = unwrapDOMRef(rootOverlayRef);\n  useInteractOutside({\n    ref: rootOverlayDomRef,\n    onInteractOutside: () => {\n      state?.close();\n    },\n    isDisabled: !state.isOpen || state.expandedKeysStack.length === 0\n  });\n\n  // On small screen devices, the menu is rendered in a tray, otherwise a popover.\n  let overlay;\n  if (isMobile) {\n    overlay = (\n      <Tray state={state} isFixedHeight ref={rootOverlayRef}>\n        {menu}\n      </Tray>\n    );\n  } else {\n    overlay = (\n      <Popover\n        ref={rootOverlayRef}\n        UNSAFE_style={{clipPath: 'unset', overflow: 'visible', filter: 'unset', borderWidth: '0px'}}\n        state={state}\n        triggerRef={menuTriggerRef}\n        scrollRef={menuRef}\n        placement={initialPlacement}\n        hideArrow\n        shouldFlip={shouldFlip}\n        shouldContainFocus>\n        {menu}\n      </Popover>\n    );\n  }\n\n  return (\n    <Fragment>\n      <SlotProvider slots={{actionButton: {holdAffordance: trigger === 'longPress'}}}>\n        <PressResponder {...menuTriggerProps} ref={menuTriggerRef} isPressed={state.isOpen}>\n          {menuTrigger}\n        </PressResponder>\n      </SlotProvider>\n      <MenuContext.Provider value={menuContext}>\n        {overlay}\n      </MenuContext.Provider>\n    </Fragment>\n  );\n});\n"],"names":[],"version":3,"file":"MenuTrigger.cjs.map"}