orcs-design-system
Version:
TeamForm's Design System, aka: ORCS
61 lines • 2.74 kB
JavaScript
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]);
}