UNPKG

@clayui/drop-down

Version:
132 lines (131 loc) 4.17 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; 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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var Menu_exports = {}; __export(Menu_exports, { Align: () => Align, default: () => Menu_default }); module.exports = __toCommonJS(Menu_exports); var import_shared = require("@clayui/shared"); var import_classnames = __toESM(require("classnames")); var import_react = __toESM(require("react")); const Align = { BottomCenter: 4, BottomLeft: 5, BottomRight: 3, LeftBottom: 11, LeftCenter: 6, LeftTop: 10, RightBottom: 9, RightCenter: 2, RightTop: 8, TopCenter: 0, TopLeft: 7, TopRight: 1 }; const Menu = import_react.default.forwardRef( ({ active = false, alignElementRef, alignmentByViewport = false, alignmentPosition = Align.BottomLeft, autoBestAlign = true, children, className, closeOnClickOutside = true, containerProps = {}, deps = [active, children], hasLeftSymbols, hasRightSymbols, height, lock = false, offsetFn, onActiveChange, onSetActive, role = "presentation", suppress, triggerRef, width, ...otherProps }, ref) => { const setActive = onActiveChange ?? onSetActive; const menuInternalRef = (0, import_react.useRef)(null); const subPortalRef = (0, import_react.useRef)(null); let menuRef = menuInternalRef; if (ref) { menuRef = ref; } (0, import_shared.useOverlayPosition)( { alignmentByViewport, alignmentPosition, autoBestAlign, getOffset: offsetFn, isOpen: active, ref: menuRef, triggerRef: alignElementRef }, deps ); return /* @__PURE__ */ import_react.default.createElement( import_shared.Overlay, { isCloseOnInteractOutside: closeOnClickOutside, isKeyboardDismiss: true, isModal: lock, isOpen: active, menuRef, onClose: () => setActive(false), portalRef: subPortalRef, suppress, triggerRef: triggerRef ?? alignElementRef }, /* @__PURE__ */ import_react.default.createElement("div", { ...containerProps, ref: subPortalRef }, /* @__PURE__ */ import_react.default.createElement( "div", { ...otherProps, "aria-hidden": !active ? true : void 0, "aria-modal": lock ? true : void 0, className: (0, import_classnames.default)("dropdown-menu", className, { "dropdown-menu-indicator-end": hasRightSymbols, "dropdown-menu-indicator-start": hasLeftSymbols, [`dropdown-menu-height-${height}`]: height, [`dropdown-menu-width-${width}`]: width, "show": active }), ref: menuRef, role }, children )) ); } ); Menu.displayName = "ClayDropDownMenu"; var Menu_default = Menu;