UNPKG

@ariakit/react-core

Version:

Ariakit React core

116 lines (114 loc) 3.29 kB
"use client"; import { useMenuItem } from "../__chunks/K6RNI2CX.js"; import { MenuItemCheckedContext, useMenuScopedContext } from "../__chunks/SPU3NB66.js"; import "../__chunks/TGNQMQ45.js"; import "../__chunks/2WDBOH5E.js"; import { useRadio } from "../__chunks/D7BWB6V7.js"; import "../__chunks/NJV4AM4M.js"; import "../__chunks/RIJYZEV5.js"; import "../__chunks/FIT2LC3L.js"; import "../__chunks/5VQZOHHZ.js"; import "../__chunks/DTXGDDAC.js"; import "../__chunks/MWF5B7KS.js"; import "../__chunks/63N3TCQX.js"; import "../__chunks/FFSBKSAM.js"; import "../__chunks/72IB6YNO.js"; import "../__chunks/WJ7PHYH7.js"; import "../__chunks/US3TW2XI.js"; import "../__chunks/SWN3JYXT.js"; import "../__chunks/Q3KUZPD7.js"; import "../__chunks/45YOMIF3.js"; import { createElement, createHook, forwardRef, memo } from "../__chunks/ILRXHV7V.js"; import { useInitialValue, useWrapElement } from "../__chunks/K2XTQB3X.js"; import "../__chunks/YXGXYGQX.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({ store, name, value, checked, onChange: onChangeProp, hideOnClick = false, ...props }) { 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 = { role: "menuitemradio", ...props }; props = useRadio({ 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({ store, hideOnClick, ...props }); return props; } ); var MenuItemRadio = memo( forwardRef(function MenuItemRadio2(props) { const htmlProps = useMenuItemRadio(props); return createElement(TagName, htmlProps); }) ); export { MenuItemRadio, useMenuItemRadio };