import { getConfig } from "./config"; export function easeInOutQuad( elapsed: number, initialValue: number, amountOfChange: number, duration: number ): number { if ((elapsed /= duration / 2) < 1) { return (amountOfChange / 2) * elapsed * elapsed + initialValue; } return (-amountOfChange / 2) * (--elapsed * (elapsed - 2) - 1) + initialValue; } export function bringInView(element: Element) { if (!element || isElementInView(element)) { return; } const shouldSmoothScroll = getConfig("smoothScroll"); element.scrollIntoView({ // Removing the smooth scrolling for elements which exist inside the scrollable parent // This was causing the highlight to not properly render behavior: !shouldSmoothScroll || hasScrollableParent(element) ? "auto" : "smooth", inline: "center", block: "center", }); } function hasScrollableParent(e: Element) { if (!e || !e.parentElement) { return; } const parent = e.parentElement as HTMLElement & { scrollTopMax?: number }; return parent.scrollHeight > parent.clientHeight; } function isElementInView(element: Element) { const rect = element.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth) ); }