UNPKG

@ariakit/react-core

Version:

Ariakit React core

125 lines (123 loc) 3.55 kB
"use client"; import { useMenuItem } from "../__chunks/2NBKRL7C.js"; import { MenuItemCheckedContext, useMenuScopedContext } from "../__chunks/VIIRIBF3.js"; import "../__chunks/62UHHO2X.js"; import "../__chunks/EM5CXX6A.js"; import { useRadio } from "../__chunks/AVVE7UTR.js"; import "../__chunks/UVUMR3WP.js"; import "../__chunks/UQQRIHDV.js"; import "../__chunks/6VRAQV3D.js"; import "../__chunks/5VQZOHHZ.js"; import "../__chunks/RZ4GPYOB.js"; import "../__chunks/MTZPJQMC.js"; import "../__chunks/RS7LB2H4.js"; import "../__chunks/S6EF7IVO.js"; import "../__chunks/P7GR5CS5.js"; import "../__chunks/2RSXSRCN.js"; import "../__chunks/PFRGBC2K.js"; import "../__chunks/SWN3JYXT.js"; import "../__chunks/YV4JVR4I.js"; import "../__chunks/VDHZ5F7K.js"; import { createElement, createHook, forwardRef, memo } from "../__chunks/LMDWO4NN.js"; import { useInitialValue, useWrapElement } from "../__chunks/ABQUS43J.js"; import "../__chunks/SK3NAZA3.js"; import { __objRest, __spreadValues } from "../__chunks/3YLGPPWQ.js"; // src/menu/menu-item-radio.tsx import { invariant } from "@ariakit/core/utils/misc"; import { useEffect } from "react"; import { jsx } from "react/jsx-runtime"; var TagName = "div"; function getValue(prevValue, value, checked) { if (checked === void 0) return prevValue; if (checked) return value; return prevValue; } var useMenuItemRadio = createHook( function useMenuItemRadio2(_a) { var _b = _a, { store, name, value, checked, onChange: onChangeProp, hideOnClick = false } = _b, props = __objRest(_b, [ "store", "name", "value", "checked", "onChange", "hideOnClick" ]); const context = useMenuScopedContext(); store = store || context; invariant( store, process.env.NODE_ENV !== "production" && "MenuItemRadio must be wrapped in a MenuList or Menu component" ); const defaultChecked = useInitialValue(props.defaultChecked); useEffect(() => { store == null ? void 0 : store.setValue(name, (prevValue = false) => { return getValue(prevValue, value, defaultChecked); }); }, [store, name, value, defaultChecked]); useEffect(() => { if (checked === void 0) return; store == null ? void 0 : store.setValue(name, (prevValue) => { return getValue(prevValue, value, checked); }); }, [store, name, value, checked]); const isChecked = store.useState((state) => state.values[name] === value); props = useWrapElement( props, (element) => /* @__PURE__ */ jsx(MenuItemCheckedContext.Provider, { value: !!isChecked, children: element }), [isChecked] ); props = __spreadValues({ role: "menuitemradio" }, props); props = useRadio(__spreadValues({ name, value, checked: isChecked, onChange(event) { onChangeProp == null ? void 0 : onChangeProp(event); if (event.defaultPrevented) return; const element = event.currentTarget; store == null ? void 0 : store.setValue(name, (prevValue) => { return getValue(prevValue, value, checked != null ? checked : element.checked); }); } }, props)); props = useMenuItem(__spreadValues({ store, hideOnClick }, props)); return props; } ); var MenuItemRadio = memo( forwardRef(function MenuItemRadio2(props) { const htmlProps = useMenuItemRadio(props); return createElement(TagName, htmlProps); }) ); export { MenuItemRadio, useMenuItemRadio };