UNPKG

@kgdata/forcegraph

Version:
62 lines (48 loc) 1.39 kB
import type { MutableRefObject } from 'react'; export type BasicTarget<T = HTMLElement> = | (() => T | null) | T | null | MutableRefObject<T | null | undefined>; export type TargetElement = HTMLElement | Element; export type Target = BasicTarget<HTMLElement>; export function getTargetElement( target?: BasicTarget<TargetElement>, defaultElement?: TargetElement, ): TargetElement | undefined | null { if (!target) { return defaultElement; } let targetElement: TargetElement | undefined | null; if (typeof target === 'function') { targetElement = target(); } else if ('current' in target) { targetElement = target.current; } else { targetElement = target; } return targetElement; } export const computeHeight = (node: TargetElement) => { const totalHeight = parseInt(getComputedStyle(node).height, 10); const padding = parseInt(getComputedStyle(node).paddingTop, 10) + parseInt(getComputedStyle(node).paddingBottom, 10); return totalHeight - padding; }; export const getAutoHeight = (n: TargetElement) => { if (!n) { return 0; } let node = n; let height = computeHeight(node); while (!height) { node = node.parentNode as TargetElement; if (node) { height = computeHeight(node); } else { break; } } return height; };