export const useDynamicViewportUnits = () => { const setVh = function () { var svh = document.documentElement.clientHeight * 0.01; document.documentElement.style.setProperty("--1svh", svh + "px"); var dvh = window.innerHeight * 0.01; document.documentElement.style.setProperty("--1dvh", dvh + "px"); }; const isMobile = function () { if ( /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) || (navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) ) { return true; } return false; }; // SSR support if (typeof window === "undefined") { return; } // Don't run polyfill if browser supports the units natively if ( "CSS" in window && "supports" in window.CSS && window.CSS.supports("height: 100svh") && window.CSS.supports("height: 100dvh") && window.CSS.supports("height: 100lvh") ) { return; } // Don't run on desktop browsers if (!isMobile) { return; } window.addEventListener("resize", setVh); setVh(); return () => { window.removeEventListener("resize", setVh); }; };