ec-no-shift-ui
Version:
Serviço leve para evitar layout shift ao esconder a scrollbar do body durante modais, overlays e afins.
1 lines • 1.75 kB
JavaScript
!function(o,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ECCorp=t():o.ECCorp=t()}(this,()=>(()=>{"use strict";var o={d:(t,i)=>{for(var d in i)o.o(i,d)&&!o.o(t,d)&&Object.defineProperty(t,d,{enumerable:!0,get:i[d]})},o:(o,t)=>Object.prototype.hasOwnProperty.call(o,t),r:o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})}},t={};o.r(t),o.d(t,{ECNoShiftUI:()=>i});class i{#o;#t;constructor(){this.#o=0,this.#t=0}applyNoShiftScrollLock(){this.#i(),this.#d()}enableBodyScroll(){this.#e()}#d(){const{scrollBarWidth:o,scrollBarHeight:t}=this.#n(),i=parseFloat(this.#o)||0;this.#r(i+o);const d=parseFloat(this.#t)||0;this.#a(d+t),this.#l()}#e(){this.#g(),this.#s(),this.#y()}#l(){document.body.style.overflowX="hidden",document.body.style.overflowY="hidden"}#g(){document.body.style.overflowX="",document.body.style.overflowY=""}#r(o){document.body.style.paddingRight=`${o}px`}#a(o){document.body.style.paddingBottom=`${o}px`}#h(){document.body.style.paddingRight=""}#c(){document.body.style.paddingBottom=""}#i(){this.#m(),this.#B()}#m(){const o=window.getComputedStyle(document.body);this.#o=o.paddingRight}#B(){const o=window.getComputedStyle(document.body);this.#t=o.paddingBottom}#s(){void 0!==this.#o?(document.body.style.paddingRight=this.#o,this.#o=void 0):this.#h()}#y(){void 0!==this.#t?(document.body.style.paddingBottom=this.#t,this.#t=void 0):this.#c()}#n(){return{scrollBarWidth:window.innerWidth-document.documentElement.clientWidth,scrollBarHeight:window.innerHeight-document.documentElement.clientHeight}}}return t})());