import { HTMLAttributes, useMemo, useRef, useState } from 'react' export interface UseHoverProps { disabled?: boolean } export interface UseHoverResult { isHovered: boolean hoverProps: HTMLAttributes } export function useHover(props: UseHoverProps): UseHoverResult { const [isHovered, setHovered] = useState(false) const propsRef = useRef({}) // Use ref as cache for reuse props inside memo hook. propsRef.current = { disabled: props.disabled } const hoverProps = useMemo(() => { const props: HTMLAttributes = {} props.onPointerEnter = () => { const { disabled } = propsRef.current if (disabled) { return } setHovered(true) } props.onPointerLeave = () => { setHovered(false) } return props }, []) return { isHovered, hoverProps, } }