UNPKG

@trail-ui/react

Version:
105 lines (102 loc) 3.08 kB
import { OverlayArrowContext } from "./chunk-OCUVT7T7.mjs"; import { usePopover } from "./chunk-2O7HGDU5.mjs"; import { HiddenContext, useEnterAnimation, useExitAnimation, useRenderProps } from "./chunk-WEE4YWWX.mjs"; // src/popover/base-popover.tsx import { filterDOMProps, mergeProps } from "@react-aria/utils"; import { forwardRef, useContext } from "react"; import { DismissButton, Overlay } from "react-aria"; import { OverlayTriggerStateContext, PopoverContext, useContextProps } from "react-aria-components"; import { useOverlayTriggerState } from "react-stately"; import { Fragment, jsx, jsxs } from "react/jsx-runtime"; function BasePopover(props, ref) { [props, ref] = useContextProps(props, ref, PopoverContext); let contextState = useContext(OverlayTriggerStateContext); let localState = useOverlayTriggerState(props); let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState; let isExiting = useExitAnimation(ref, state.isOpen); let isHidden = useContext(HiddenContext); if (isHidden) { let children = props.children; if (typeof children === "function") { children = children({ placement: "bottom", isEntering: false, isExiting: false }); } return /* @__PURE__ */ jsx(Fragment, { children }); } if (state && !state.isOpen && !isExiting) { return null; } return /* @__PURE__ */ jsx( PopoverInner, { ...props, triggerRef: props.triggerRef, state, popoverRef: ref, isExiting } ); } var _Popover = /* @__PURE__ */ forwardRef(BasePopover); function PopoverInner({ state, isExiting, ...props }) { var _a; let { popoverProps, underlayProps, arrowProps, placement } = usePopover( { ...props, offset: (_a = props.offset) != null ? _a : 8 }, state ); let ref = props.popoverRef; let isEntering = useEnterAnimation(ref, !!placement); let renderProps = useRenderProps({ ...props, defaultClassName: "react-aria-Popover", values: { placement, isEntering, isExiting } }); let style = { ...renderProps.style, ...popoverProps.style }; return /* @__PURE__ */ jsxs(Overlay, { isExiting, children: [ !props.isNonModal && /* @__PURE__ */ jsx("div", { ...underlayProps, style: { position: "fixed", inset: 0 } }), /* @__PURE__ */ jsxs( "div", { ...mergeProps(filterDOMProps(props), popoverProps), ...renderProps, ref, slot: props.slot || void 0, style, "data-placement": placement, "data-entering": isEntering || void 0, "data-exiting": isExiting || void 0, children: [ !props.isNonModal && /* @__PURE__ */ jsx(DismissButton, { onDismiss: state.close }), /* @__PURE__ */ jsx(OverlayArrowContext.Provider, { value: { ...arrowProps, placement }, children: renderProps.children }), /* @__PURE__ */ jsx(DismissButton, { onDismiss: state.close }) ] } ) ] }); } export { _Popover };