{"version":3,"file":"enableBodyScrollLock.mjs","names":[],"sources":["../../../src/utils/enableBodyScrollLock/enableBodyScrollLock.ts"],"sourcesContent":["import { isServer } from '../isServer/index.ts';\n\n/**\n * Data attribute key for storing scroll position\n */\nconst SCROLL_POSITION_ATTR = 'data-simplikit-scroll-y';\n\n/**\n * @description\n * `enableBodyScrollLock` is a utility function that locks the body scroll.\n * It prevents the body from scrolling by applying fixed positioning.\n * This is useful when opening modals, drawers, or other overlay components.\n *\n * Safe to call in SSR environment (no-op on server).\n * Calling multiple times has no effect until unlocked.\n *\n * @returns {void}\n *\n * @example\n * // When modal opens\n * enableBodyScrollLock();\n *\n * // When modal closes\n * disableBodyScrollLock();\n */\nexport function enableBodyScrollLock(): void {\n  if (isServer()) {\n    return;\n  }\n\n  if (isBodyScrollLocked()) {\n    return;\n  }\n\n  const scrollY = window.scrollY;\n  saveScrollPosition(scrollY);\n  applyScrollLockStyles(scrollY);\n}\n\nfunction isBodyScrollLocked(): boolean {\n  return document.body.getAttribute(SCROLL_POSITION_ATTR) != null;\n}\n\nfunction saveScrollPosition(scrollY: number): void {\n  document.body.setAttribute(SCROLL_POSITION_ATTR, scrollY.toString());\n}\n\nfunction applyScrollLockStyles(scrollY: number): void {\n  const { body } = document;\n  body.style.overflow = 'hidden';\n  body.style.position = 'fixed';\n  body.style.top = `-${scrollY}px`;\n  body.style.left = '0px';\n  body.style.right = '0px';\n  body.style.bottom = '0px';\n}\n"],"mappings":";;;;;;AAKA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;AAoB7B,SAAgB,uBAA6B;CAC3C,IAAI,SAAS,GACX;CAGF,IAAI,mBAAmB,GACrB;CAGF,MAAM,UAAU,OAAO;CACvB,mBAAmB,OAAO;CAC1B,sBAAsB,OAAO;AAC/B;AAEA,SAAS,qBAA8B;CACrC,OAAO,SAAS,KAAK,aAAa,oBAAoB,KAAK;AAC7D;AAEA,SAAS,mBAAmB,SAAuB;CACjD,SAAS,KAAK,aAAa,sBAAsB,QAAQ,SAAS,CAAC;AACrE;AAEA,SAAS,sBAAsB,SAAuB;CACpD,MAAM,EAAE,SAAS;CACjB,KAAK,MAAM,WAAW;CACtB,KAAK,MAAM,WAAW;CACtB,KAAK,MAAM,MAAM,IAAI,QAAQ;CAC7B,KAAK,MAAM,OAAO;CAClB,KAAK,MAAM,QAAQ;CACnB,KAAK,MAAM,SAAS;AACtB"}