UNPKG

@yamada-ui/menu

Version:

Yamada UI menu component

138 lines (135 loc) • 5.01 kB
"use client" "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/menu-list.tsx var menu_list_exports = {}; __export(menu_list_exports, { MenuList: () => MenuList }); module.exports = __toCommonJS(menu_list_exports); var import_core = require("@yamada-ui/core"); var import_popover = require("@yamada-ui/popover"); var import_utils2 = require("@yamada-ui/utils"); var import_react = require("react"); // src/menu-context.ts var import_use_descendant = require("@yamada-ui/use-descendant"); var import_utils = require("@yamada-ui/utils"); var { DescendantsContextProvider, useDescendant: useMenuDescendant, useDescendants, useDescendantsContext: useMenuDescendantsContext } = (0, import_use_descendant.createDescendant)(); var [MenuProvider, useMenu] = (0, import_utils.createContext)({ name: "MenuContext", errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in "<Menu />"` }); var [ContextMenuProvider, useContextMenu] = (0, import_utils.createContext)({ name: "ContextMenuContext", strict: false }); var [UpstreamMenuProvider, useUpstreamMenu] = (0, import_utils.createContext)({ name: "UpstreamMenuContext", strict: false }); var [UpstreamMenuItemProvider, useUpstreamMenuItem] = (0, import_utils.createContext)({ name: "UpstreamMenuItemContext", strict: false }); // src/menu-list.tsx var import_jsx_runtime = require("react/jsx-runtime"); var MenuList = (0, import_core.forwardRef)( ({ className, children, contentProps, ...rest }, ref) => { var _a, _b; const { buttonRef, focusedIndex, menuRef, setFocusedIndex, styles, onClose } = useMenu(); const descendants = useMenuDescendantsContext(); const activedescendantId = (_a = descendants.value(focusedIndex)) == null ? void 0 : _a.node.id; const onNext = (0, import_react.useCallback)(() => { const next = descendants.enabledNextValue(focusedIndex); if (next) setFocusedIndex(next.index); }, [descendants, focusedIndex, setFocusedIndex]); const onPrev = (0, import_react.useCallback)(() => { const prev = descendants.enabledPrevValue(focusedIndex); if (prev) setFocusedIndex(prev.index); }, [descendants, focusedIndex, setFocusedIndex]); const onFirst = (0, import_react.useCallback)(() => { const first = descendants.enabledFirstValue(); if (first) setFocusedIndex(first.index); }, [descendants, setFocusedIndex]); const onLast = (0, import_react.useCallback)(() => { const last = descendants.enabledLastValue(); if (last) setFocusedIndex(last.index); }, [descendants, setFocusedIndex]); const onKeyDown = (0, import_react.useCallback)( (ev) => { const actions = { ArrowDown: focusedIndex === -1 ? onFirst : onNext, ArrowUp: focusedIndex === -1 ? onLast : onPrev, End: onLast, Escape: onClose, Home: onFirst, Tab: onClose }; const action = actions[ev.key]; if (!action) return; ev.preventDefault(); action(ev); }, [focusedIndex, onClose, onFirst, onLast, onNext, onPrev] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_popover.PopoverContent, { as: "div", className: "ui-menu__content", "aria-activedescendant": activedescendantId, "aria-labelledby": (_b = buttonRef.current) == null ? void 0 : _b.id, role: "menu", __css: { ...styles.content }, ...contentProps, onKeyDown: (0, import_utils2.handlerAll)(contentProps == null ? void 0 : contentProps.onKeyDown, onKeyDown), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_core.ui.div, { ref: (0, import_utils2.mergeRefs)(menuRef, ref), className: (0, import_utils2.cx)("ui-menu__list", className), tabIndex: -1, __css: { ...styles.list }, ...rest, children } ) } ); } ); MenuList.displayName = "MenuList"; MenuList.__ui__ = "MenuList"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { MenuList }); //# sourceMappingURL=menu-list.js.map