@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
109 lines (107 loc) • 3.45 kB
JavaScript
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_ref = require('../../utils/ref.cjs');
const require_props = require('../../core/components/props.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
let __floating_ui_react_dom = require("@floating-ui/react-dom");
__floating_ui_react_dom = require_rolldown_runtime.__toESM(__floating_ui_react_dom);
//#region src/hooks/use-popper/index.ts
const PLACEMENT_MAP = {
"center-end": "right",
"center-start": "left",
end: "bottom",
"end-center": "bottom",
"end-end": "bottom-end",
"end-start": "bottom-start",
start: "top",
"start-center": "top",
"start-end": "top-end",
"start-start": "top-start"
};
const usePopper = ({ autoUpdate: autoUpdateProp = true, elements, flip: flipProp = true, gutter = 8, matchWidth, middleware: middlewareProp, offset: offsetProp, open = true, placement = "start", platform, preventOverflow = true, strategy = "absolute", transform = true, whileElementsMounted: whileElementsMountedProp } = {}) => {
const middleware = (0, react.useMemo)(() => {
const middleware$1 = [];
if (offsetProp) {
const [mainAxis, crossAxis] = offsetProp;
middleware$1.push((0, __floating_ui_react_dom.offset)({
crossAxis,
mainAxis
}));
} else if (gutter) middleware$1.push((0, __floating_ui_react_dom.offset)(gutter));
if (flipProp) middleware$1.push((0, __floating_ui_react_dom.flip)());
if (preventOverflow) middleware$1.push((0, __floating_ui_react_dom.shift)());
if (middlewareProp) middleware$1.push(...middlewareProp);
if (matchWidth) middleware$1.push((0, __floating_ui_react_dom.size)({ apply({ elements: elements$1, rects }) {
Object.assign(elements$1.floating.style, { minWidth: `${rects.reference.width}px` });
} }));
return middleware$1;
}, [
flipProp,
gutter,
matchWidth,
middlewareProp,
offsetProp,
preventOverflow
]);
const whileElementsMounted = (0, react.useMemo)(() => {
if (whileElementsMountedProp) return whileElementsMountedProp;
if (autoUpdateProp) return __floating_ui_react_dom.autoUpdate;
}, [autoUpdateProp, whileElementsMountedProp]);
const { floatingStyles, refs,...rest } = (0, __floating_ui_react_dom.useFloating)({
elements,
middleware,
open,
placement: PLACEMENT_MAP[placement],
platform,
strategy,
transform,
whileElementsMounted
});
const getReferenceProps = (0, react.useCallback)((props) => ({
...props,
ref: require_ref.mergeRefs(props?.ref, refs.setReference)
}), [refs.setReference]);
const getPopperProps = (0, react.useCallback)((props) => ({
...props,
ref: require_ref.mergeRefs(props?.ref, refs.setFloating),
style: {
...props?.style,
minWidth: matchWidth ? void 0 : "max-content",
...floatingStyles
}
}), [
refs.setFloating,
matchWidth,
floatingStyles
]);
return {
...rest,
refs,
getPopperProps,
getReferenceProps
};
};
const popperProps = [
"autoUpdate",
"elements",
"flip",
"gutter",
"matchWidth",
"middleware",
"offset",
"open",
"placement",
"platform",
"preventOverflow",
"strategy",
"transform",
"whileElementsMounted"
];
const usePopperProps = (props, omitKeys) => {
return require_props.useSplitProps(props, popperProps.filter((key) => !omitKeys?.includes(key)));
};
//#endregion
exports.popperProps = popperProps;
exports.usePopper = usePopper;
exports.usePopperProps = usePopperProps;
//# sourceMappingURL=index.cjs.map