UNPKG

@ariakit/react-core

Version:

Ariakit React core

148 lines (146 loc) 4.18 kB
"use client"; import { useMenuItem } from "../__chunks/2NBKRL7C.js"; import { useMenuScopedContext } from "../__chunks/VIIRIBF3.js"; import "../__chunks/62UHHO2X.js"; import "../__chunks/EM5CXX6A.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 { useCheckboxStore } from "../__chunks/HAVBGUA3.js"; import { useCheckbox } from "../__chunks/IAEAQUOT.js"; import "../__chunks/2RSXSRCN.js"; import "../__chunks/PFRGBC2K.js"; import "../__chunks/SWN3JYXT.js"; import "../__chunks/EYKMH5G5.js"; import "../__chunks/RNCDFVMF.js"; import "../__chunks/YV4JVR4I.js"; import "../__chunks/VDHZ5F7K.js"; import { createElement, createHook, forwardRef, memo } from "../__chunks/LMDWO4NN.js"; import { useInitialValue } from "../__chunks/ABQUS43J.js"; import "../__chunks/SK3NAZA3.js"; import { __objRest, __spreadValues } from "../__chunks/3YLGPPWQ.js"; // src/menu/menu-item-checkbox.tsx import { invariant, shallowEqual } from "@ariakit/core/utils/misc"; import { useEffect } from "react"; var TagName = "div"; function getPrimitiveValue(value) { if (Array.isArray(value)) { return value.toString(); } return value; } function getValue(storeValue, value, checked) { if (value === void 0) { if (Array.isArray(storeValue)) return storeValue; return !!checked; } const primitiveValue = getPrimitiveValue(value); if (!Array.isArray(storeValue)) { if (checked) { return primitiveValue; } return storeValue === primitiveValue ? false : storeValue; } if (checked) { if (storeValue.includes(primitiveValue)) { return storeValue; } return [...storeValue, primitiveValue]; } return storeValue.filter((v) => v !== primitiveValue); } var useMenuItemCheckbox = createHook( function useMenuItemCheckbox2(_a) { var _b = _a, { store, name, value, checked, defaultChecked: defaultCheckedProp, hideOnClick = false } = _b, props = __objRest(_b, [ "store", "name", "value", "checked", "defaultChecked", "hideOnClick" ]); const context = useMenuScopedContext(); store = store || context; invariant( store, process.env.NODE_ENV !== "production" && "MenuItemCheckbox must be wrapped in a MenuList or Menu component" ); const defaultChecked = useInitialValue(defaultCheckedProp); useEffect(() => { store == null ? void 0 : store.setValue(name, (prevValue = []) => { if (!defaultChecked) return prevValue; return getValue(prevValue, value, true); }); }, [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 checkboxStore = useCheckboxStore({ value: store.useState((state) => state.values[name]), setValue(internalValue) { store == null ? void 0 : store.setValue(name, () => { if (checked === void 0) return internalValue; const nextValue = getValue(internalValue, value, checked); if (!Array.isArray(nextValue)) return nextValue; if (!Array.isArray(internalValue)) return nextValue; if (shallowEqual(internalValue, nextValue)) return internalValue; return nextValue; }); } }); props = __spreadValues({ role: "menuitemcheckbox" }, props); props = useCheckbox(__spreadValues({ store: checkboxStore, name, value, checked }, props)); props = useMenuItem(__spreadValues({ store, hideOnClick }, props)); return props; } ); var MenuItemCheckbox = memo( forwardRef(function MenuItemCheckbox2(props) { const htmlProps = useMenuItemCheckbox(props); return createElement(TagName, htmlProps); }) ); export { MenuItemCheckbox, useMenuItemCheckbox };