import { ForwardedRef, useCallback, Dispatch, SetStateAction } from 'react' function assignRef(ref: ForwardedRef, value: T | null) { if (typeof ref === 'function') { ref(value) } else if (typeof ref === 'object' && ref !== null && 'current' in ref) { ref.current = value } } type Ref = Dispatch> | ForwardedRef export function useMergedRef(...refs: Ref[]) { return useCallback((node: T | null) => { refs.forEach((ref) => assignRef(ref, node)) }, refs) } export function mergeRefs(...refs: Ref[]) { return (node: T | null) => { refs.forEach((ref) => assignRef(ref, node)) } }