UNPKG

@oruga-ui/oruga-next

Version:

UI components for Vue.js and CSS framework agnostic

1 lines 3.11 kB
{"version":3,"file":"usePreventScrolling-Ct3PCoON.cjs","sources":["../../src/composables/usePreventScrolling.ts"],"sourcesContent":["import {\n computed,\n onBeforeUnmount,\n ref,\n toValue,\n type MaybeRefOrGetter,\n} from \"vue\";\n\nimport { isClient } from \"@/utils/ssr\";\nimport { defineClasses, getActiveClasses } from \"./defineClasses\";\n\n/**\n * Prevent the background from scrolling if toggled.\n * Adds `clipped` or `keeped` class to the body.\n * True, alias `clip` removes the body scrollbar.\n * False, alias `keep` makes a non scrollable scrollbar to avoid shifting background, but will set body to position fixed, might break some layouts.\n * @param clipScroll clip scrollbar or not\n */\nexport function usePreventScrolling(\n clipScroll: MaybeRefOrGetter<boolean>,\n): (active: boolean) => void {\n const scrollClipClasses = defineClasses([\n \"scrollClipClass\",\n \"o-scroll-clip\",\n ]);\n const scrollKeepClasses = defineClasses([\n \"scrollKeepClass\",\n \"o-scroll-keep\",\n ]);\n\n const scrollClass = computed(() =>\n getActiveClasses(\n toValue(clipScroll)\n ? scrollClipClasses.value\n : scrollKeepClasses.value,\n ),\n );\n\n const savedScrollTop = ref<number>();\n\n // reset scroll\n onBeforeUnmount(() => toggleScroll(false));\n\n function toggleScroll(active: boolean): void {\n if (!isClient) return;\n if (!scrollClass.value) return;\n\n savedScrollTop.value = savedScrollTop.value\n ? savedScrollTop.value\n : document.documentElement.scrollTop;\n\n if (active) document.body.classList.add(...scrollClass.value);\n else document.body.classList.remove(...scrollClass.value);\n\n if (!toValue(clipScroll)) {\n if (active) {\n document.body.style.top = `-${savedScrollTop.value}px`;\n } else {\n document.documentElement.scrollTop = savedScrollTop.value;\n document.body.style.top = \"\";\n savedScrollTop.value = undefined;\n }\n }\n }\n\n return toggleScroll;\n}\n"],"names":["defineClasses","computed","getActiveClasses","toValue","ref","onBeforeUnmount","isClient"],"mappings":";;;;;AAkBO,SAAS,oBACZ,YACyB;AACzB,QAAM,oBAAoBA,cAAAA,cAAc;AAAA,IACpC;AAAA,IACA;AAAA,EAAA,CACH;AACD,QAAM,oBAAoBA,cAAAA,cAAc;AAAA,IACpC;AAAA,IACA;AAAA,EAAA,CACH;AAED,QAAM,cAAcC,IAAA;AAAA,IAAS,MACzBC,cAAA;AAAA,MACIC,IAAAA,QAAQ,UAAU,IACZ,kBAAkB,QAClB,kBAAkB;AAAA,IAAA;AAAA,EAEhC;AAEA,QAAM,iBAAiBC,IAAAA,IAAY;AAGnBC,sBAAA,MAAM,aAAa,KAAK,CAAC;AAEzC,WAAS,aAAa,QAAuB;AACzC,QAAI,CAACC,OAAAA,SAAU;AACX,QAAA,CAAC,YAAY,MAAO;AAExB,mBAAe,QAAQ,eAAe,QAChC,eAAe,QACf,SAAS,gBAAgB;AAE/B,QAAI,OAAiB,UAAA,KAAK,UAAU,IAAI,GAAG,YAAY,KAAK;AAAA,kBAC9C,KAAK,UAAU,OAAO,GAAG,YAAY,KAAK;AAEpD,QAAA,CAACH,IAAAA,QAAQ,UAAU,GAAG;AACtB,UAAI,QAAQ;AACR,iBAAS,KAAK,MAAM,MAAM,IAAI,eAAe,KAAK;AAAA,MAAA,OAC/C;AACM,iBAAA,gBAAgB,YAAY,eAAe;AAC3C,iBAAA,KAAK,MAAM,MAAM;AAC1B,uBAAe,QAAQ;AAAA,MAAA;AAAA,IAC3B;AAAA,EACJ;AAGG,SAAA;AACX;;"}