@trail-ui/react
Version:
105 lines (102 loc) • 3.08 kB
JavaScript
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
};