export type BindElement = HTMLElement | Window | null | undefined; export function getTargetRect(target: BindElement): DOMRect { return target !== window ? (target as HTMLElement).getBoundingClientRect() : ({ top: 0, bottom: window.innerHeight } as DOMRect); } export function getFixedTop(placeholderRect: DOMRect, targetRect: DOMRect, offsetTop?: number) { if (offsetTop !== undefined && targetRect.top > placeholderRect.top - offsetTop) { return offsetTop + targetRect.top; } return undefined; } export function getFixedBottom( placeholderRect: DOMRect, targetRect: DOMRect, offsetBottom?: number, ) { if (offsetBottom !== undefined && targetRect.bottom < placeholderRect.bottom + offsetBottom) { const targetBottomOffset = window.innerHeight - targetRect.bottom; return offsetBottom + targetBottomOffset; } return undefined; }