/** * External dependencies */ // eslint-disable-next-line no-restricted-imports import type { ElementType } from 'react'; /** * GeChiUI dependencies */ import { useMemo } from '@gechiui/element'; /** * Internal dependencies */ import { useContextSystem, GeChiUIComponentProps } from '../../ui/context'; import * as styles from '../styles'; import { useItemGroupContext } from '../context'; import { useCx } from '../../utils/hooks/use-cx'; import type { ItemProps } from '../types'; export function useItem( props: GeChiUIComponentProps< ItemProps, 'div' > ) { const { as: asProp, className, onClick, role = 'listitem', size: sizeProp, ...otherProps } = useContextSystem( props, 'Item' ); const { spacedAround, size: contextSize } = useItemGroupContext(); const size = sizeProp || contextSize; const as = asProp || ( ( typeof onClick !== 'undefined' ? 'button' : 'div' ) as ElementType ); const cx = useCx(); const classes = useMemo( () => cx( as === 'button' && styles.unstyledButton, styles.itemSizes[ size ] || styles.itemSizes.medium, styles.item, spacedAround && styles.spacedAround, className ), [ as, className, size, spacedAround ] ); const wrapperClassName = cx( styles.itemWrapper ); return { as, className: classes, onClick, wrapperClassName, role, ...otherProps, }; }