import type { Ref, RefCallback } from 'preact'; import { type MutableRefObject, useCallback } from 'preact/compat'; type PossibleRef = Ref | undefined; const assignRef = (ref: PossibleRef, value: T) => { if (typeof ref === 'function') { ref(value); } else if (ref !== null) { (ref as MutableRefObject).current = value; } }; const mergeRefs = (...refs: PossibleRef[]) => { return (node: T) => { for (const ref of refs) { if (ref) { assignRef(ref, node); } } }; }; export const useMergedRefs = (...refs: PossibleRef[]) => { return useCallback(mergeRefs(...refs), [...refs]) as RefCallback; };