{"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;AA2BD,MAAM,uCAAiB,IAAI,yFAAyF;AACpH,MAAM,6CAAuB;AAC7B,MAAM,sDAAgC,MAAM,+DAA+D;AAE3G,SAAS,qCAAe,KAAkC;IACxD,IAAI,YACF,QAAQ,eACR,cAAc,wDACd,UAAU,UACV,SAAS,sCACT,SAAS,aAAa,sBACtB,qBAAqB,qDACtB,GAAG;IAEJ,IAAI,CAAC,SAAS,QAAQ,GAAG,CAAA,GAAA,sCAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IAChD,IAAI,QAAQ,CAAA,GAAA,gEAAqB,EAAE;IAEnC,IAAI,oBAAoB,CAAA,GAAA,mBAAK,EAAe;IAC5C,IAAI,aAAa,CAAA,GAAA,mBAAK,EAAkB;IAExC,IAAI,gBAAC,YAAY,gBAAE,YAAY,EAAC,GAAG,CAAA,GAAA,mDAAgB,EAAE;oBACnD;QACA,SAAS;4BACT;IACF,GAAG,OAAO;IAEV,IAAI,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC/C,CAAA,GAAA,2DAAc,EAAE;QACd,IAAI,WAAW,OAAO,IAAI,MAAM,MAAM,EAAE;YACtC,IAAI,uBAAuB,OAAO,gBAAgB,CAAC,WAAW,OAAO,EAAE,YAAY;YACnF,IAAI,yBAAyB,IAC3B,gBAAgB,SAAS,sBAAsB;QAEnD;IACF,GAAG;QAAC,MAAM,MAAM;QAAE;KAAW;IAC7B,IAAI,WAAW,CAAA,GAAA,mBAAK,EAAe;IACnC,IAAI,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC3C,CAAA,GAAA,2DAAc,EAAE;QACd,IAAI,SAAS,OAAO,IAAI,MAAM,MAAM,EAClC,cAAc,SAAS,OAAO,CAAC,qBAAqB,GAAG,KAAK;IAEhE,GAAG;QAAC,MAAM,MAAM;QAAE;KAAS;IAE3B,IAAI,gBAAC,YAAY,cAAE,UAAU,aAAE,SAAS,EAAC,GAAG,CAAA,GAAA,qDAAiB,EAAE;QAC7D,WAAW,MAAM,SAAS,IAAI;QAC9B,WAAW;oBACX;gBACA;qBACA;QACA,QAAQ,MAAM,MAAM;QACpB,YAAY,MAAM,UAAU;QAC5B,kBAAkB,MAAM,gBAAgB;QACxC,WAAW;QACX,qBAAqB;QACrB,SAAS,IAAM,MAAM,KAAK,CAAC;IAC7B;IAEA,qBACE,0DAAC,CAAA,GAAA,iEAAgB;QACd,GAAG,YAAY;QAChB,KAAK;OACJ,uBACD,0DAAC,CAAA,GAAA,wCAAa,EAAE,QAAQ;QACtB,OAAO;mBACL;uBACA;YACA,KAAK;YACL,cAAc,aAAa,KAAK;wBAChC;YACA,UAAU;YACV,GAAG,YAAY;QACjB;qBACA,0DAAC,CAAA,GAAA,iCAAM;QAAE,QAAQ,MAAM,MAAM;QAAE,SAAS;OACrC;AAKX;AAEA,oEAAoE;AACpE,qCAAe,iBAAiB,GAAG,UAAW,KAAkC;IAC9E,8EAA8E;IAC9E,IAAI,aAA6B,EAAE;IACnC,CAAA,GAAA,sCAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,QAAQ,EAAE,CAAA;QACrC,kBAAI,CAAA,GAAA,sCAAI,EAAE,cAAc,CAAC,QACvB,WAAW,IAAI,CAAC;IAEpB;IACA,IAAI,CAAC,SAAS,QAAQ,GAAG;IACzB,MAAM;QACJ,SAAS;QACT,SAAS,CAAC,wBACR,0DAAC;gBAAe,KAAK,QAAQ,GAAG;gBAAG,GAAG,KAAK;eACxC,SACA;IAGP;AACF;AAEA;;;;CAIC,GACD,oEAAoE;AACpE,IAAI,4CAAkB","sources":["packages/@adobe/react-spectrum/src/tooltip/TooltipTrigger.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 {FocusableProvider} from 'react-aria/private/interactions/useFocusable';\nimport {Overlay} from '../overlays/Overlay';\nimport {Placement, PositionProps, useOverlayPosition} from 'react-aria/useOverlayPosition';\nimport React, {JSX, ReactElement, useRef, useState} from 'react';\nimport {TooltipContext} from './context';\nimport {TooltipTriggerProps, useTooltipTriggerState} from 'react-stately/useTooltipTriggerState';\nimport {useLayoutEffect} from 'react-aria/private/utils/useLayoutEffect';\nimport {useTooltipTrigger} from 'react-aria/useTooltipTrigger';\n\nexport interface SpectrumTooltipTriggerProps extends Omit<TooltipTriggerProps, 'closeDelay'>, PositionProps {\n  children: [ReactElement, ReactElement],\n\n  /**\n   * The additional offset applied along the main axis between the element and its\n   * anchor element.\n   * @default 7\n   */\n  offset?: number,\n  /**\n   * The placement of the tooltip with respect to the trigger.\n   * @default 'top'\n   */\n  placement?: Placement\n}\n\nconst DEFAULT_OFFSET = -1; // Offset needed to reach 4px/5px (med/large) distance between tooltip and trigger button\nconst DEFAULT_CROSS_OFFSET = 0;\nconst DEFAULT_SHOULD_CLOSE_ON_PRESS = true; // Whether the tooltip should close when the trigger is pressed\n\nfunction TooltipTrigger(props: SpectrumTooltipTriggerProps) {\n  let {\n    children,\n    crossOffset = DEFAULT_CROSS_OFFSET,\n    isDisabled,\n    offset = DEFAULT_OFFSET,\n    trigger: triggerAction,\n    shouldCloseOnPress = DEFAULT_SHOULD_CLOSE_ON_PRESS\n  } = props;\n\n  let [trigger, tooltip] = React.Children.toArray(children) as [ReactElement, ReactElement];\n  let state = useTooltipTriggerState(props);\n\n  let tooltipTriggerRef = useRef<HTMLElement>(null);\n  let overlayRef = useRef<HTMLDivElement>(null);\n\n  let {triggerProps, tooltipProps} = useTooltipTrigger({\n    isDisabled,\n    trigger: triggerAction,\n    shouldCloseOnPress\n  }, state, tooltipTriggerRef);\n\n  let [borderRadius, setBorderRadius] = useState(0);\n  useLayoutEffect(() => {\n    if (overlayRef.current && state.isOpen) {\n      let spectrumBorderRadius = window.getComputedStyle(overlayRef.current).borderRadius;\n      if (spectrumBorderRadius !== '') {\n        setBorderRadius(parseInt(spectrumBorderRadius, 10));\n      }\n    }\n  }, [state.isOpen, overlayRef]);\n  let arrowRef = useRef<HTMLElement>(null);\n  let [arrowWidth, setArrowWidth] = useState(0);\n  useLayoutEffect(() => {\n    if (arrowRef.current && state.isOpen) {\n      setArrowWidth(arrowRef.current.getBoundingClientRect().width);\n    }\n  }, [state.isOpen, arrowRef]);\n\n  let {overlayProps, arrowProps, placement} = useOverlayPosition({\n    placement: props.placement || 'top',\n    targetRef: tooltipTriggerRef,\n    overlayRef,\n    offset,\n    crossOffset,\n    isOpen: state.isOpen,\n    shouldFlip: props.shouldFlip,\n    containerPadding: props.containerPadding,\n    arrowSize: arrowWidth,\n    arrowBoundaryOffset: borderRadius,\n    onClose: () => state.close(true)\n  });\n\n  return (\n    <FocusableProvider\n      {...triggerProps}\n      ref={tooltipTriggerRef}>\n      {trigger}\n      <TooltipContext.Provider\n        value={{\n          state,\n          placement,\n          ref: overlayRef,\n          UNSAFE_style: overlayProps.style,\n          arrowProps,\n          arrowRef: arrowRef,\n          ...tooltipProps\n        }}>\n        <Overlay isOpen={state.isOpen} nodeRef={overlayRef}>\n          {tooltip}\n        </Overlay>\n      </TooltipContext.Provider>\n    </FocusableProvider>\n  );\n}\n\n// Support TooltipTrigger inside components using CollectionBuilder.\nTooltipTrigger.getCollectionNode = function* (props: SpectrumTooltipTriggerProps) {\n  // Replaced the use of React.Children.toArray because it mutates the key prop.\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, tooltip] = childArray;\n  yield {\n    element: trigger,\n    wrapper: (element) => (\n      <TooltipTrigger key={element.key} {...props}>\n        {element}\n        {tooltip}\n      </TooltipTrigger>\n    )\n  };\n};\n\n/**\n * TooltipTrigger wraps around a trigger element and a Tooltip. It handles opening and closing\n * the Tooltip when the user hovers over or focuses the trigger, and positioning the Tooltip\n * relative to the trigger.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _TooltipTrigger = TooltipTrigger as (props: SpectrumTooltipTriggerProps) => JSX.Element;\nexport {_TooltipTrigger as TooltipTrigger};\n"],"names":[],"version":3,"file":"TooltipTrigger.cjs.map"}