{"version":3,"file":"scrollLocker.mjs","sources":["../../../../../packages/utils/scroll/scrollLocker.ts"],"sourcesContent":["import type { CSSProperties } from 'vue';\nimport { setStyle } from '../dom/setStyle';\nimport { getScrollBarSize } from './getScrollBarSize';\n\nexport interface scrollLockOptions {\n  container: HTMLElement;\n}\n\ninterface Ilocks {\n  target: typeof uuid;\n  options: scrollLockOptions;\n}\n\nlet locks: Ilocks[] = [];\nconst scrollingEffectClassName = 'ant-scrolling-effect';\nconst scrollingEffectClassNameReg = new RegExp(`${scrollingEffectClassName}`, 'g');\n\nlet uuid = 0;\n\n// https://github.com/ant-design/ant-design/issues/19340\n// https://github.com/ant-design/ant-design/issues/19332\nconst cacheStyle = new Map<Element, CSSProperties>();\n\nexport class ScrollLocker {\n  private lockTarget: typeof uuid;\n\n  private options: scrollLockOptions;\n\n  constructor(options?: scrollLockOptions) {\n    this.lockTarget = uuid++;\n    this.options = options;\n  }\n\n  getContainer = (): HTMLElement | undefined => {\n    return this.options?.container;\n  };\n\n  // if options change...\n  reLock = (options?: scrollLockOptions) => {\n    const findLock = locks.find(({ target }) => target === this.lockTarget);\n\n    if (findLock)\n      this.unLock();\n\n    this.options = options;\n\n    if (findLock) {\n      findLock.options = options;\n      this.lock();\n    }\n  };\n\n  lock = () => {\n    // If lockTarget exist return\n    if (locks.some(({ target }) => target === this.lockTarget))\n      return;\n\n    // If same container effect, return\n    if (locks.some(({ options }) => options?.container === this.options?.container)) {\n      locks = [...locks, { target: this.lockTarget, options: this.options }];\n      return;\n    }\n\n    let scrollBarSize = 0;\n    const container = this.options?.container || document.body;\n\n    if (\n      (container === document.body\n        && window.innerWidth - document.documentElement.clientWidth > 0)\n      || container.scrollHeight > container.clientHeight\n    ) {\n      scrollBarSize = getScrollBarSize();\n    }\n\n    const containerClassName = container.className;\n\n    if (\n      locks.filter(({ options }) => options?.container === this.options?.container).length === 0\n    ) {\n      cacheStyle.set(\n        container,\n        setStyle(\n          {\n            width: scrollBarSize !== 0 ? `calc(100% - ${scrollBarSize}px)` : undefined,\n            overflow: 'hidden',\n            overflowX: 'hidden',\n            overflowY: 'hidden',\n          },\n          {\n            element: container,\n          },\n        ),\n      );\n    }\n\n    // https://github.com/ant-design/ant-design/issues/19729\n    if (!scrollingEffectClassNameReg.test(containerClassName)) {\n      const addClassName = `${containerClassName} ${scrollingEffectClassName}`;\n      container.className = addClassName.trim();\n    }\n\n    locks = [...locks, { target: this.lockTarget, options: this.options }];\n  };\n\n  unLock = () => {\n    const findLock = locks.find(({ target }) => target === this.lockTarget);\n\n    locks = locks.filter(({ target }) => target !== this.lockTarget);\n\n    if (\n      !findLock\n      || locks.some(({ options }) => options?.container === findLock.options?.container)\n    ) {\n      return;\n    }\n\n    // Remove Effect\n    const container = this.options?.container || document.body;\n    const containerClassName = container.className;\n\n    if (!scrollingEffectClassNameReg.test(containerClassName)) return;\n\n    setStyle(cacheStyle.get(container), { element: container });\n    cacheStyle.delete(container);\n    container.className = container.className.replace(scrollingEffectClassNameReg, '').trim();\n  };\n}\n"],"names":["_a"],"mappings":"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"}