UNPKG

@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
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