UNPKG

@yamada-ui/menu

Version:

Yamada UI menu component

69 lines (67 loc) 2.11 kB
"use client" import { MenuGroup } from "./chunk-AGHG37SL.mjs"; import { MenuOptionItem } from "./chunk-D2UJVOJ7.mjs"; // src/menu-option-group.tsx import { useControllableState } from "@yamada-ui/use-controllable-state"; import { cx, getValidChildren, isArray, isString } from "@yamada-ui/utils"; import { cloneElement, forwardRef, useCallback } from "react"; import { jsx } from "react/jsx-runtime"; var MenuOptionGroup = forwardRef( ({ type, className, children, defaultValue, value: valueProp, onChange: onChangeProp, ...rest }, ref) => { const radio = type === "radio"; defaultValue != null ? defaultValue : defaultValue = radio ? "" : []; const [value, setValue] = useControllableState({ defaultValue, value: valueProp, onChange: onChangeProp }); const onChange = useCallback( (selectedValue) => { if (radio && isString(value)) setValue(selectedValue); if (!radio && isArray(value)) { const nextValue = value.includes(selectedValue) ? value.filter((item) => item !== selectedValue) : value.concat(selectedValue); setValue(nextValue); } }, [radio, value, setValue] ); const validChildren = getValidChildren(children); const cloneChildren = validChildren.map((child) => { if (child.type !== MenuOptionItem) return child; const onClick = (ev) => { var _a, _b; onChange(child.props.value); (_b = (_a = child.props).onClick) == null ? void 0 : _b.call(_a, ev); }; const checked = !radio && isArray(value) ? value.includes(child.props.value) : child.props.value === value; return cloneElement(child, { type, checked, onClick }); }); return /* @__PURE__ */ jsx( MenuGroup, { ref, className: cx("ui-menu__item--group--option", className), ...rest, children: cloneChildren } ); } ); MenuOptionGroup.displayName = "MenuOptionGroup"; MenuOptionGroup.__ui__ = "MenuOptionGroup"; export { MenuOptionGroup }; //# sourceMappingURL=chunk-PHY5XCWA.mjs.map