UNPKG

@ariakit/react-core

Version:

Ariakit React core

121 lines (119 loc) 3.37 kB
"use client"; import { useMenuItem } from "../__chunks/MNX5ZPQC.js"; import { MenuItemCheckedContext, useMenuScopedContext } from "../__chunks/6UXSIZXV.js"; import "../__chunks/5FUUHUOH.js"; import "../__chunks/4LEWR5KQ.js"; import { useRadio } from "../__chunks/G5SQMZXW.js"; import "../__chunks/IIPXEB7M.js"; import "../__chunks/HBZ7G2WX.js"; import "../__chunks/JT5CKSP7.js"; import "../__chunks/7NJRHOSP.js"; import "../__chunks/4WQSNMEM.js"; import "../__chunks/467XRHWL.js"; import "../__chunks/2LVHRIRC.js"; import "../__chunks/FYYAZUDI.js"; import "../__chunks/NO3UEYQ2.js"; import "../__chunks/EZ4UPVW6.js"; import "../__chunks/3F6D4KUU.js"; import "../__chunks/SWN3JYXT.js"; import { useStoreState } from "../__chunks/SOQQIDO4.js"; import "../__chunks/CTVD4XJH.js"; import { createElement, createHook, forwardRef, memo } from "../__chunks/L4OUMOCQ.js"; import { useInitialValue, useWrapElement } from "../__chunks/W2TDKEPX.js"; import "../__chunks/AZVQSWGA.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 === value ? false : 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 = useStoreState( store, (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 };