UNPKG

@base-ui-components/react

Version:

Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.

37 lines 1.16 kB
import * as React from 'react'; import { useMenuItem } from '../item/useMenuItem.js'; import { useControlled } from '../../utils/useControlled.js'; import { mergeReactProps } from '../../utils/mergeReactProps.js'; export function useMenuCheckboxItem(params) { const { checked: checkedProp, defaultChecked, onCheckedChange, ...other } = params; const [checked, setChecked] = useControlled({ controlled: checkedProp, default: defaultChecked ?? false, name: 'MenuCheckboxItem', state: 'checked' }); const { getRootProps: getMenuItemRootProps, ...menuItem } = useMenuItem(other); const getRootProps = React.useCallback(externalProps => { return getMenuItemRootProps(mergeReactProps(externalProps, { role: 'menuitemcheckbox', 'aria-checked': checked, onClick: event => { setChecked(currentlyChecked => !currentlyChecked); onCheckedChange?.(!checked, event.nativeEvent); } })); }, [checked, getMenuItemRootProps, onCheckedChange, setChecked]); return React.useMemo(() => ({ ...menuItem, getRootProps, checked }), [checked, getRootProps, menuItem]); }