@codeworker.br/govbr-tw-react
Version:
Biblioteca de componentes React usando Tailwind CSS que implementa o Padrão Digital de Governo.
157 lines (156 loc) • 11.2 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import * as React from "react";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCheck, faChevronRight } from "@fortawesome/free-solid-svg-icons";
import BASE_CLASSNAMES from "../../config/baseClassNames";
import { cn } from "../../libs/utils";
import { dropdownMenuCheckboxItemVariants, dropdownMenuContentVariants, dropdownMenuItemVariants, dropdownMenuLabelVariants, dropdownMenuRadioItemVariants, dropdownMenuSeparatorVariants, dropdownMenuSubTriggerVariants, } from "./variants";
const DropdownMenuInteractionContext = React.createContext(undefined);
const useDropdownMenuInteractionContext = () => {
return React.useContext(DropdownMenuInteractionContext);
};
const composeEventHandlers = (theirHandler, ourHandler) => (event) => {
theirHandler === null || theirHandler === void 0 ? void 0 : theirHandler(event);
if (!event.defaultPrevented) {
ourHandler === null || ourHandler === void 0 ? void 0 : ourHandler(event);
}
};
const DropdownMenu = (_a) => {
var { openTrigger = "click", open: controlledOpenProp, defaultOpen, onOpenChange, children } = _a, props = __rest(_a, ["openTrigger", "open", "defaultOpen", "onOpenChange", "children"]);
const isCustomTrigger = openTrigger !== "click";
const isControlled = controlledOpenProp !== undefined;
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen !== null && defaultOpen !== void 0 ? defaultOpen : false);
const open = controlledOpenProp !== null && controlledOpenProp !== void 0 ? controlledOpenProp : uncontrolledOpen;
const handleOpenChange = React.useCallback((value) => {
if (!isControlled) {
setUncontrolledOpen(value);
}
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(value);
}, [isControlled, onOpenChange]);
const contextValue = React.useMemo(() => ({
openTrigger,
open,
setOpen: handleOpenChange,
}), [
openTrigger,
open,
handleOpenChange,
]);
const rootProps = Object.assign({}, props);
if (isCustomTrigger) {
rootProps.open = open;
rootProps.onOpenChange = handleOpenChange;
}
else {
if (isControlled) {
rootProps.open = controlledOpenProp;
}
else if (defaultOpen !== undefined) {
rootProps.defaultOpen = defaultOpen;
}
if (onOpenChange) {
rootProps.onOpenChange = onOpenChange;
}
}
return (_jsx(DropdownMenuInteractionContext.Provider, { value: contextValue, children: _jsx(DropdownMenuPrimitive.Root, Object.assign({}, rootProps, { children: children })) }));
};
DropdownMenu.displayName =
(_a = DropdownMenuPrimitive.Root.displayName) !== null && _a !== void 0 ? _a : "DropdownMenu";
const DropdownMenuGroup = DropdownMenuPrimitive.Group;
const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
const DropdownMenuSub = DropdownMenuPrimitive.Sub;
const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
const DropdownMenuTrigger = React.forwardRef((_a, ref) => {
var { className, onClick, onDoubleClick, onContextMenu, onPointerEnter, onPointerLeave, onFocus, onBlur } = _a, props = __rest(_a, ["className", "onClick", "onDoubleClick", "onContextMenu", "onPointerEnter", "onPointerLeave", "onFocus", "onBlur"]);
const context = useDropdownMenuInteractionContext();
if (!context) {
return (_jsx(DropdownMenuPrimitive.Trigger, Object.assign({ ref: ref, className: cn(className, BASE_CLASSNAMES.dropdownMenu.trigger), onClick: onClick, onDoubleClick: onDoubleClick, onContextMenu: onContextMenu, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onFocus: onFocus, onBlur: onBlur }, props)));
}
const { openTrigger, open, setOpen } = context;
const handleClick = (event) => {
if (openTrigger === "rightclick") {
event.preventDefault();
}
};
const handleContextMenu = (event) => {
if (openTrigger !== "rightclick") {
return;
}
event.preventDefault();
if (!open) {
setOpen(true);
}
};
return (_jsx(DropdownMenuPrimitive.Trigger, Object.assign({ ref: ref, className: cn(className, BASE_CLASSNAMES.dropdownMenu.trigger), onClick: composeEventHandlers(onClick, handleClick), onContextMenu: composeEventHandlers(onContextMenu, handleContextMenu), onDoubleClick: onDoubleClick, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onFocus: onFocus, onBlur: onBlur }, props)));
});
DropdownMenuTrigger.displayName =
(_b = DropdownMenuPrimitive.Trigger.displayName) !== null && _b !== void 0 ? _b : "DropdownMenuTrigger";
const DropdownMenuContent = React.forwardRef((_a, ref) => {
var { className, sideOffset = 8, side = "bottom", align, avoidCollisions } = _a, props = __rest(_a, ["className", "sideOffset", "side", "align", "avoidCollisions"]);
const resolvedAlign = align !== null && align !== void 0 ? align : (side === "left" || side === "right" ? "start" : "center");
const resolvedAvoidCollisions = avoidCollisions !== null && avoidCollisions !== void 0 ? avoidCollisions : false;
return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, Object.assign({ ref: ref, sideOffset: sideOffset, side: side, align: resolvedAlign, avoidCollisions: resolvedAvoidCollisions, className: cn(dropdownMenuContentVariants({ side }), BASE_CLASSNAMES.dropdownMenu.content, className) }, props)) }));
});
DropdownMenuContent.displayName =
(_c = DropdownMenuPrimitive.Content.displayName) !== null && _c !== void 0 ? _c : "DropdownMenuContent";
const DropdownMenuSubContent = React.forwardRef((_a, ref) => {
var { className, sideOffset = 8, placement = "right" } = _a, props = __rest(_a, ["className", "sideOffset", "placement"]);
return (_jsx(DropdownMenuPrimitive.SubContent, Object.assign({ ref: ref, sideOffset: sideOffset, className: cn(dropdownMenuContentVariants({ side: placement }), BASE_CLASSNAMES.dropdownMenu.subContent, className) }, props)));
});
DropdownMenuSubContent.displayName =
(_d = DropdownMenuPrimitive.SubContent.displayName) !== null && _d !== void 0 ? _d : "DropdownMenuSubContent";
const DropdownMenuItem = React.forwardRef((_a, ref) => {
var { className, inset } = _a, props = __rest(_a, ["className", "inset"]);
return (_jsx(DropdownMenuPrimitive.Item, Object.assign({ ref: ref, className: cn(dropdownMenuItemVariants({ inset }), BASE_CLASSNAMES.dropdownMenu.item, className) }, props)));
});
DropdownMenuItem.displayName =
(_e = DropdownMenuPrimitive.Item.displayName) !== null && _e !== void 0 ? _e : "DropdownMenuItem";
const DropdownMenuCheckboxItem = React.forwardRef((_a, ref) => {
var { className, children, inset } = _a, props = __rest(_a, ["className", "children", "inset"]);
return (_jsxs(DropdownMenuPrimitive.CheckboxItem, Object.assign({ ref: ref, className: cn(dropdownMenuCheckboxItemVariants({ inset }), BASE_CLASSNAMES.dropdownMenu.checkboxItem, className) }, props, { children: [_jsx("span", { className: "absolute left-3 flex h-4 w-4 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(FontAwesomeIcon, { icon: faCheck, className: "h-3 w-3 text-govbr-blue-warm-vivid-80" }) }) }), children] })));
});
DropdownMenuCheckboxItem.displayName =
(_f = DropdownMenuPrimitive.CheckboxItem.displayName) !== null && _f !== void 0 ? _f : "DropdownMenuCheckboxItem";
const DropdownMenuRadioItem = React.forwardRef((_a, ref) => {
var { className, inset, children } = _a, props = __rest(_a, ["className", "inset", "children"]);
return (_jsxs(DropdownMenuPrimitive.RadioItem, Object.assign({ ref: ref, className: cn(dropdownMenuRadioItemVariants({ inset }), BASE_CLASSNAMES.dropdownMenu.radioItem, className) }, props, { children: [_jsx("span", { className: "absolute left-3 flex h-4 w-4 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(FontAwesomeIcon, { icon: faCheck, className: "h-3 w-3 text-govbr-blue-warm-vivid-80" }) }) }), children] })));
});
DropdownMenuRadioItem.displayName =
(_g = DropdownMenuPrimitive.RadioItem.displayName) !== null && _g !== void 0 ? _g : "DropdownMenuRadioItem";
const DropdownMenuLabel = React.forwardRef((_a, ref) => {
var { className, inset } = _a, props = __rest(_a, ["className", "inset"]);
return (_jsx(DropdownMenuPrimitive.Label, Object.assign({ ref: ref, className: cn(dropdownMenuLabelVariants({ inset }), BASE_CLASSNAMES.dropdownMenu.label, className) }, props)));
});
DropdownMenuLabel.displayName =
(_h = DropdownMenuPrimitive.Label.displayName) !== null && _h !== void 0 ? _h : "DropdownMenuLabel";
const DropdownMenuSeparator = React.forwardRef((_a, ref) => {
var { className } = _a, props = __rest(_a, ["className"]);
return (_jsx(DropdownMenuPrimitive.Separator, Object.assign({ ref: ref, className: cn(dropdownMenuSeparatorVariants(), BASE_CLASSNAMES.dropdownMenu.separator, className) }, props)));
});
DropdownMenuSeparator.displayName =
(_j = DropdownMenuPrimitive.Separator.displayName) !== null && _j !== void 0 ? _j : "DropdownMenuSeparator";
const DropdownMenuShortcut = (_a) => {
var { className } = _a, props = __rest(_a, ["className"]);
return (_jsx("span", Object.assign({ className: cn("ml-auto text-xs uppercase tracking-wide text-govbr-gray-60", BASE_CLASSNAMES.dropdownMenu.shortcut, className) }, props)));
};
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
const DropdownMenuSubTrigger = React.forwardRef((_a, ref) => {
var { className, inset, children } = _a, props = __rest(_a, ["className", "inset", "children"]);
return (_jsxs(DropdownMenuPrimitive.SubTrigger, Object.assign({ ref: ref, className: cn(dropdownMenuSubTriggerVariants({ inset }), BASE_CLASSNAMES.dropdownMenu.subTrigger, className) }, props, { children: [children, _jsx(FontAwesomeIcon, { icon: faChevronRight, className: "ml-auto h-3 w-3 opacity-60" })] })));
});
DropdownMenuSubTrigger.displayName =
(_k = DropdownMenuPrimitive.SubTrigger.displayName) !== null && _k !== void 0 ? _k : "DropdownMenuSubTrigger";
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, };