{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;;;;;AA8BM,MAAM,0DAAO,CAAA,GAAA,uBAAS,EAAE,SAAS,KAAK,KAAgB,EAAE,GAA2B;IACxF,IAAI,YAAC,QAAQ,SAAE,KAAK,EAAE,GAAG,YAAW,GAAG;IACvC,IAAI,SAAS,CAAA,GAAA,mCAAQ,EAAE;IACvB,IAAI,aAAa,CAAA,GAAA,mBAAK,EAAkB;IAExC,qBACE,0DAAC,CAAA,GAAA,iCAAM;QAAG,GAAG,UAAU;QAAE,QAAQ,MAAM,MAAM;QAAE,SAAS;qBACtD,0DAAC;QAAa,GAAG,KAAK;QAAE,YAAY;QAAY,KAAK;OAClD;AAIT;AAEA,IAAI,kDAAc,CAAA,GAAA,uBAAS,EAAE,SAC3B,KAAuB,EACvB,GAAwC;IAExC,IAAI,YAAC,QAAQ,UAAE,MAAM,iBAAE,aAAa,SAAE,KAAK,cAAE,UAAU,EAAC,GAAG;IAC3D,IAAI,cAAC,UAAU,EAAC,GAAG,CAAA,GAAA,uCAAY,EAAE;IACjC,IAAI,SAAS,CAAA,GAAA,yCAAW,EAAE;IAE1B,IAAI,cAAC,UAAU,iBAAE,aAAa,EAAC,GAAG,CAAA,GAAA,+CAAc,EAC9C;QACE,GAAG,KAAK;QACR,eAAe;IACjB,GACA,OACA;IAGF,oFAAoF;IACpF,sFAAsF;IACtF,6EAA6E;IAC7E,sFAAsF;IACtF,uFAAuF;IACvF,0FAA0F;IAC1F,2FAA2F;IAC3F,IAAI,WAAW,CAAA,GAAA,2DAAc;IAC7B,IAAI,eAAoB;QACtB,qCAAqC,SAAS,MAAM,GAAG;QACvD,sEAAsE;QACtE,8DAA8D;QAC9D,+EAA+E;QAC/E,KAAK,OAAO,WAAW,cAAc,OAAO,OAAO,GAAG;IACxD;IAEA,IAAI,mBAAmB,CAAA,GAAA,oCAAS,EAAE,CAAA,GAAA,mDAAS,GAAG;IAE9C,IAAI,YAAY,CAAA,GAAA,oCAAS,EACvB,CAAA,GAAA,mDAAS,GACT,iBACA;QACE,WAAW;QACX,8BAA8B;IAChC,GACA,CAAA,GAAA,oCAAS,EAAE,CAAA,GAAA,mDAAa,GAAG,iBAAiB,wBAC5C,WAAW,SAAS;IAGtB,4LAA4L;IAC5L,qBACE,0DAAC;QAAI,KAAK;qBACR,0DAAC,CAAA,GAAA,kCAAO;QAAG,GAAG,aAAa;QAAE,QAAQ;sBACrC,0DAAC;QAAI,WAAW;QAAkB,OAAO;qBACvC,0DAAC;QAAK,GAAG,UAAU;QAAG,GAAG,UAAU;QAAE,WAAW;QAAW,KAAK;QAAQ,eAAY;qBAClF,0DAAC,CAAA,GAAA,qCAAY;QAAE,WAAW,MAAM,KAAK;QACpC,wBACD,0DAAC,CAAA,GAAA,qCAAY;QAAE,WAAW,MAAM,KAAK;;AAK/C","sources":["packages/@adobe/react-spectrum/src/overlays/Tray.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 {AriaModalOverlayProps, useModalOverlay} from 'react-aria/useModalOverlay';\n\nimport {classNames} from '../utils/classNames';\nimport {DismissButton} from 'react-aria/Overlay';\nimport {DOMRef, RefObject, StyleProps} from '@react-types/shared';\nimport {Overlay, OverlayProps} from './Overlay';\nimport {OverlayTriggerState} from 'react-stately/useOverlayTriggerState';\nimport overrideStyles from './overlays.css';\nimport React, {ForwardedRef, forwardRef, ReactNode, useRef} from 'react';\nimport trayStyles from '@adobe/spectrum-css-temp/components/tray/vars.css';\nimport {Underlay} from './Underlay';\nimport {useDOMRef} from '../utils/useDOMRef';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useStyleProps} from '../utils/styleProps';\nimport {useViewportSize} from 'react-aria/private/utils/useViewportSize';\n\ninterface TrayProps\n  extends AriaModalOverlayProps, StyleProps, Omit<OverlayProps, 'nodeRef' | 'shouldContainFocus'> {\n  children: ReactNode;\n  state: OverlayTriggerState;\n  isFixedHeight?: boolean;\n}\n\ninterface TrayWrapperProps extends TrayProps {\n  isOpen?: boolean;\n  wrapperRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const Tray = forwardRef(function Tray(props: TrayProps, ref: DOMRef<HTMLDivElement>) {\n  let {children, state, ...otherProps} = props;\n  let domRef = useDOMRef(ref);\n  let wrapperRef = useRef<HTMLDivElement>(null);\n\n  return (\n    <Overlay {...otherProps} isOpen={state.isOpen} nodeRef={wrapperRef}>\n      <TrayWrapper {...props} wrapperRef={wrapperRef} ref={domRef}>\n        {children}\n      </TrayWrapper>\n    </Overlay>\n  );\n});\n\nlet TrayWrapper = forwardRef(function (\n  props: TrayWrapperProps,\n  ref: ForwardedRef<HTMLDivElement | null>\n) {\n  let {children, isOpen, isFixedHeight, state, wrapperRef} = props;\n  let {styleProps} = useStyleProps(props);\n  let objRef = useObjectRef(ref);\n\n  let {modalProps, underlayProps} = useModalOverlay(\n    {\n      ...props,\n      isDismissable: true\n    },\n    state,\n    objRef\n  );\n\n  // We need to measure the window's height in JS rather than using percentages in CSS\n  // so that contents (e.g. menu) can inherit the max-height properly. Using percentages\n  // does not work properly because there is nothing to base the percentage on.\n  // We cannot use vh units because mobile browsers adjust the window height dynamically\n  // when the address bar/bottom toolbars show and hide on scroll and vh units are fixed.\n  // Also, the visual viewport is smaller than the layout viewport when the virtual keyboard\n  // is up, so use the VisualViewport API to ensure the tray is displayed above the keyboard.\n  let viewport = useViewportSize();\n  let wrapperStyle: any = {\n    '--spectrum-visual-viewport-height': viewport.height + 'px',\n    // position: fixed elements are clipped by Safari on iOS 26, so we use\n    // position: absolute and manually set the top to the scrollY.\n    // The page can't scroll while the tray is open so this doesn't need to update.\n    top: typeof window !== 'undefined' ? window.scrollY : 0\n  };\n\n  let wrapperClassName = classNames(trayStyles, 'spectrum-Tray-wrapper');\n\n  let className = classNames(\n    trayStyles,\n    'spectrum-Tray',\n    {\n      'is-open': isOpen,\n      'spectrum-Tray--fixedHeight': isFixedHeight\n    },\n    classNames(overrideStyles, 'spectrum-Tray', 'react-spectrum-Tray'),\n    styleProps.className\n  );\n\n  // Attach Transition's nodeRef to outer most wrapper for node.reflow: https://github.com/reactjs/react-transition-group/blob/c89f807067b32eea6f68fd6c622190d88ced82e2/src/Transition.js#L231\n  return (\n    <div ref={wrapperRef}>\n      <Underlay {...underlayProps} isOpen={isOpen} />\n      <div className={wrapperClassName} style={wrapperStyle}>\n        <div {...styleProps} {...modalProps} className={className} ref={objRef} data-testid=\"tray\">\n          <DismissButton onDismiss={state.close} />\n          {children}\n          <DismissButton onDismiss={state.close} />\n        </div>\n      </div>\n    </div>\n  );\n});\n"],"names":[],"version":3,"file":"Tray.cjs.map"}