UNPKG

orcs-design-system

Version:
61 lines 2.74 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import React, { useCallback, useMemo, useRef, useState } from "react"; import { useFloating, autoUpdate, offset, flip, shift, useClick, useDismiss, useRole, useInteractions, FloatingArrow, arrow } from "@floating-ui/react"; import { jsx as _jsx } from "react/jsx-runtime"; export default function useActionMenu(_ref) { let { initialOpen = false, placement = "right", modal, open: controlledOpen, onOpenChange: setControlledOpen, isTooltip = false } = _ref; const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen); const [labelId, setLabelId] = useState(); const [descriptionId, setDescriptionId] = useState(); const arrowRef = useRef(); const open = controlledOpen !== null && controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen; const setOpen = setControlledOpen !== null && setControlledOpen !== void 0 ? setControlledOpen : setUncontrolledOpen; const data = useFloating({ placement, open, onOpenChange: setOpen, whileElementsMounted: autoUpdate, middleware: [offset(5), flip({ crossAxis: placement.includes("-"), fallbackAxisSideDirection: "end", padding: 5 }), shift({ padding: 5 }), isTooltip && arrow({ element: arrowRef })] }); const context = data.context; const click = useClick(context, { enabled: !isTooltip && controlledOpen == null }); const dismiss = useDismiss(context); const role = useRole(context, { role: "menu" }); const interactions = useInteractions([click, dismiss, role]); const Arrow = useCallback(() => /*#__PURE__*/_jsx(FloatingArrow, { ref: arrowRef, context: context }), [context]); return useMemo(() => _objectSpread(_objectSpread(_objectSpread({ open, setOpen }, interactions), data), {}, { modal, labelId, descriptionId, setLabelId, setDescriptionId, Arrow }), [open, setOpen, interactions, data, modal, labelId, descriptionId, Arrow]); }