{"version":3,"file":"ref.mjs","names":["React","findDOMNode","setRef","ref","value","hasOwnProperty","getRef","current","useCallbackRef","initialValue","callback","_React$useState","useState","facade","last","_React$useState2","_slicedToArray","useForkRef","_len","arguments","length","refs","Array","_key","useCallback","refValue","uniqueRefs","_toConsumableArray","Set","forEach","forkRef","_len2","_key2","every","getNodeByRef","node","nodeType","Object","keys"],"sources":["../src/ref.ts"],"sourcesContent":["import React, { MutableRefObject, Ref, RefObject } from 'react';\nimport { findDOMNode } from 'react-dom';\n\nexport function setRef<T>(ref: Ref<T>, value: T) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref?.hasOwnProperty('current')) {\n    // @ts-ignore\n    ref['current'] = value;\n  }\n}\n\nexport function getRef(ref: RefObject<Element> | Element): Element | null {\n  if (!ref) return null;\n  return 'current' in ref ? ref.current : ref;\n}\n\nexport function useCallbackRef<T>(\n  initialValue: T | null,\n  callback: (newValue: T | null, lastValue: T | null) => void,\n): MutableRefObject<T | null> {\n  const [ref] = React.useState(() => ({\n    // value\n    value: initialValue,\n    // last callback\n    callback,\n    // \"memoized\" public interface\n    facade: {\n      get current() {\n        return ref.value;\n      },\n      set current(value) {\n        const last = ref.value;\n        if (last !== value) {\n          ref.value = value;\n          ref.callback(value, last);\n        }\n      },\n    },\n  }));\n  // update callback\n  ref.callback = callback;\n\n  return ref.facade;\n}\n\nexport function useForkRef<T>(...refs: Ref<T>[]): Ref<T> {\n  return React.useCallback((refValue: any) => {\n    const uniqueRefs = [...new Set(refs)];\n    uniqueRefs.forEach((ref) => setRef(ref, refValue));\n  }, refs);\n}\n\nexport function forkRef<T>(...refs: Ref<T>[]): Ref<T> {\n  if (refs.every((ref) => ref == null)) {\n    return null;\n  }\n  return (refValue) => {\n    const uniqueRefs = [...new Set(refs)];\n    uniqueRefs.forEach((ref) => setRef(ref, refValue));\n  };\n}\n\nexport type NodeByRef = RefObject<Element> | Element | (() => RefObject<Element> | Element);\n\nexport function getNodeByRef(ref: NodeByRef): Element | null {\n  if (typeof ref === 'function') {\n    ref = ref();\n  }\n  if (!ref) return null;\n\n  const node = getRef(ref);\n  if (!node) return null;\n  if (node.nodeType === 1) return node;\n  if (Object.keys(node).length === 1 && 'getBoundingClientRect' in node) return null;\n\n  return findDOMNode(node) as Element;\n}\n"],"mappings":"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"}