@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
127 lines (126 loc) • 4.43 kB
JavaScript
"use client";
require("../../_virtual/_rolldown/runtime.cjs");
const require_get_context_item_index = require("../../core/utils/get-context-item-index/get-context-item-index.cjs");
const require_use_props = require("../../core/MantineProvider/use-props/use-props.cjs");
const require_use_resolved_styles_api = require("../../core/styles-api/use-resolved-styles-api/use-resolved-styles-api.cjs");
const require_use_styles = require("../../core/styles-api/use-styles/use-styles.cjs");
const require_factory = require("../../core/factory/factory.cjs");
const require_use_delayed_hover = require("../../utils/Floating/use-delayed-hover.cjs");
const require_Popover = require("../Popover/Popover.cjs");
const require_Menu_context = require("./Menu.context.cjs");
const require_Menu_module = require("./Menu.module.cjs");
const require_MenuDivider = require("./MenuDivider/MenuDivider.cjs");
const require_MenuDropdown = require("./MenuDropdown/MenuDropdown.cjs");
const require_MenuItem = require("./MenuItem/MenuItem.cjs");
const require_MenuLabel = require("./MenuLabel/MenuLabel.cjs");
const require_MenuSub = require("./MenuSub/MenuSub.cjs");
const require_MenuTarget = require("./MenuTarget/MenuTarget.cjs");
let react = require("react");
let _mantine_hooks = require("@mantine/hooks");
let react_jsx_runtime = require("react/jsx-runtime");
//#region packages/@mantine/core/src/components/Menu/Menu.tsx
const defaultProps = {
trapFocus: true,
closeOnItemClick: true,
withInitialFocusPlaceholder: true,
clickOutsideEvents: [
"mousedown",
"touchstart",
"keydown"
],
loop: true,
trigger: "click",
openDelay: 0,
closeDelay: 100,
menuItemTabIndex: -1
};
const Menu = require_factory.factory((_props) => {
const props = require_use_props.useProps("Menu", defaultProps, _props);
const { children, onOpen, onClose, opened, defaultOpened, trapFocus, onChange, closeOnItemClick, loop, closeOnEscape, trigger, openDelay, closeDelay, classNames, styles, unstyled, variant, vars, menuItemTabIndex, keepMounted, withInitialFocusPlaceholder, attributes, ...others } = props;
const getStyles = require_use_styles.useStyles({
name: "Menu",
classes: require_Menu_module.default,
props,
classNames,
styles,
unstyled,
attributes
});
const [_opened, setOpened] = (0, _mantine_hooks.useUncontrolled)({
value: opened,
defaultValue: defaultOpened,
finalValue: false,
onChange
});
const [openedViaClick, setOpenedViaClick] = (0, react.useState)(false);
const close = () => {
setOpened(false);
setOpenedViaClick(false);
_opened && onClose?.();
};
const open = () => {
setOpened(true);
!_opened && onOpen?.();
};
const toggleDropdown = () => {
_opened ? close() : open();
};
const { openDropdown, closeDropdown } = require_use_delayed_hover.useDelayedHover({
open,
close,
closeDelay,
openDelay
});
const getItemIndex = (node) => require_get_context_item_index.getContextItemIndex("[data-menu-item]", "[data-menu-dropdown]", node);
const { resolvedClassNames, resolvedStyles } = require_use_resolved_styles_api.useResolvedStylesApi({
classNames,
styles,
props
});
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Menu_context.MenuContextProvider, {
value: {
getStyles,
opened: _opened,
toggleDropdown,
getItemIndex,
openedViaClick,
setOpenedViaClick,
closeOnItemClick,
closeDropdown: trigger === "click" ? close : closeDropdown,
openDropdown: trigger === "click" ? open : openDropdown,
closeDropdownImmediately: close,
loop,
trigger,
unstyled,
menuItemTabIndex,
withInitialFocusPlaceholder
},
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Popover.Popover, {
returnFocus: true,
...others,
opened: _opened,
onChange: toggleDropdown,
defaultOpened,
trapFocus: keepMounted ? false : trapFocus,
closeOnEscape,
__staticSelector: "Menu",
classNames: resolvedClassNames,
styles: resolvedStyles,
unstyled,
variant,
keepMounted,
children
})
});
});
Menu.displayName = "@mantine/core/Menu";
Menu.classes = require_Menu_module.default;
Menu.Item = require_MenuItem.MenuItem;
Menu.Label = require_MenuLabel.MenuLabel;
Menu.Dropdown = require_MenuDropdown.MenuDropdown;
Menu.Target = require_MenuTarget.MenuTarget;
Menu.Divider = require_MenuDivider.MenuDivider;
Menu.Sub = require_MenuSub.MenuSub;
//#endregion
exports.Menu = Menu;
//# sourceMappingURL=Menu.cjs.map