{"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;;"}