src/global/compose-refs.ts (15 lines of code) (raw):

import {type Ref, type MutableRefObject} from 'react'; import memoizeOne from 'memoize-one'; function composeRefs<T>(...refs: (Ref<T> | undefined)[]) { return (value: T | null) => refs.forEach(ref => { if (typeof ref === 'function') { ref(value); } else if (ref) { (ref as MutableRefObject<T | null>).current = value; } }); } export function createComposedRef<T>() { return memoizeOne(composeRefs<T>); }