@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
54 lines (53 loc) • 2.25 kB
JavaScript
"use client";
import { createEventHandler } from "../../../core/utils/create-event-handler/create-event-handler.mjs";
import { useProps } from "../../../core/MantineProvider/use-props/use-props.mjs";
import { factory } from "../../../core/factory/factory.mjs";
import { Popover } from "../../Popover/Popover.mjs";
import { useMenuContext } from "../Menu.context.mjs";
import Menu_module_default from "../Menu.module.mjs";
import { useRef } from "react";
import { useMergedRef } from "@mantine/hooks";
import { jsx, jsxs } from "react/jsx-runtime";
//#region packages/@mantine/core/src/components/Menu/MenuDropdown/MenuDropdown.tsx
const MenuDropdown = factory((props) => {
const { classNames, className, style, styles, vars, onMouseEnter, onMouseLeave, onKeyDown, children, ref, ...others } = useProps("MenuDropdown", null, props);
const wrapperRef = useRef(null);
const ctx = useMenuContext();
const handleKeyDown = createEventHandler(onKeyDown, (event) => {
if (event.key === "ArrowUp" || event.key === "ArrowDown") {
event.preventDefault();
wrapperRef.current?.querySelectorAll("[data-menu-item]:not(:disabled)")[0]?.focus();
}
});
const handleMouseEnter = createEventHandler(onMouseEnter, () => (ctx.trigger === "hover" || ctx.trigger === "click-hover") && ctx.openDropdown());
const handleMouseLeave = createEventHandler(onMouseLeave, () => (ctx.trigger === "hover" || ctx.trigger === "click-hover") && ctx.closeDropdown());
return /* @__PURE__ */ jsxs(Popover.Dropdown, {
...others,
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave,
role: "menu",
"aria-orientation": "vertical",
ref: useMergedRef(ref, wrapperRef),
...ctx.getStyles("dropdown", {
className,
style,
styles,
classNames,
withStaticClass: false
}),
tabIndex: -1,
"data-menu-dropdown": true,
onKeyDown: handleKeyDown,
children: [ctx.withInitialFocusPlaceholder && /* @__PURE__ */ jsx("div", {
tabIndex: -1,
"data-autofocus": true,
"data-mantine-stop-propagation": true,
style: { outline: 0 }
}), children]
});
});
MenuDropdown.classes = Menu_module_default;
MenuDropdown.displayName = "@mantine/core/MenuDropdown";
//#endregion
export { MenuDropdown };
//# sourceMappingURL=MenuDropdown.mjs.map