{"ast":null,"code":"/**\n * tdesign v1.4.1\n * (c) 2024 TDesign Group\n * @license MIT\n */\n\nimport { onMounted, nextTick, onActivated, onDeactivated, onBeforeUnmount, watch } from 'vue';\nimport { useTouch } from '../_util/useTouch.mjs';\nimport getScrollParent from '../_util/getScrollParent.mjs';\nimport { supportsPassive } from '../_util/supportsPassive.mjs';\nimport '../_util/canUseDom.mjs';\nimport '../_chunks/dep-6d93f083.mjs';\nimport '../_chunks/dep-abd5e4b4.mjs';\nvar totalLockCount = 0;\nvar mounted = null;\nfunction useLockScroll(rootRef, shouldLock, componentName) {\n  var touch = useTouch();\n  var BODY_LOCK_CLASS = \"\".concat(componentName, \"--lock\");\n  var onTouchMove = function onTouchMove(event) {\n    touch.move(event);\n    var direction = touch.deltaY.value > 0 ? \"10\" : \"01\";\n    var el = getScrollParent(event.target, rootRef.value);\n    if (!el) return;\n    var scrollHeight = el.scrollHeight,\n      offsetHeight = el.offsetHeight,\n      scrollTop = el.scrollTop;\n    var status = \"11\";\n    if (scrollTop === 0) {\n      status = offsetHeight >= scrollHeight ? \"00\" : \"01\";\n    } else if (scrollTop + offsetHeight >= scrollHeight) {\n      status = \"10\";\n    }\n    if (status !== \"11\" && touch.isVertical() && !(parseInt(status, 2) & parseInt(direction, 2))) {\n      if (event.cancelable) {\n        event.preventDefault();\n      }\n    }\n  };\n  var lock = function lock() {\n    document.addEventListener(\"touchstart\", touch.start);\n    document.addEventListener(\"touchmove\", onTouchMove, supportsPassive.value ? {\n      passive: false\n    } : false);\n    if (!totalLockCount) {\n      document.body.classList.add(BODY_LOCK_CLASS);\n    }\n    totalLockCount += 1;\n  };\n  var unlock = function unlock() {\n    if (totalLockCount) {\n      document.removeEventListener(\"touchstart\", touch.start);\n      document.removeEventListener(\"touchmove\", onTouchMove);\n      totalLockCount -= 1;\n      if (!totalLockCount) {\n        document.body.classList.remove(BODY_LOCK_CLASS);\n      }\n    }\n  };\n  var init = function init() {\n    return shouldLock() && lock();\n  };\n  var destroy = function destroy() {\n    return shouldLock() && unlock();\n  };\n  onMounted(function () {\n    init();\n    nextTick(function () {\n      mounted = true;\n    });\n  });\n  onActivated(function () {\n    if (mounted) {\n      init();\n    }\n  });\n  onDeactivated(destroy);\n  onBeforeUnmount(destroy);\n  watch(shouldLock, function (value) {\n    value ? lock() : unlock();\n  });\n}\nexport { useLockScroll };","map":{"version":3,"names":["totalLockCount","mounted","useLockScroll","rootRef","shouldLock","componentName","touch","useTouch","BODY_LOCK_CLASS","concat","onTouchMove","event","move","direction","deltaY","value","el","getScrollParent","target","scrollHeight","offsetHeight","scrollTop","status","isVertical","parseInt","cancelable","preventDefault","lock","document","addEventListener","start","supportsPassive","passive","body","classList","add","unlock","removeEventListener","remove","init","destroy","onMounted","nextTick","onActivated","onDeactivated","onBeforeUnmount","watch"],"sources":["../../src/hooks/useLockScroll.ts"],"sourcesContent":["import { Ref, watch, onMounted, onActivated, onBeforeUnmount, onDeactivated, nextTick } from 'vue';\nimport { useTouch } from '../_util/useTouch';\nimport getScrollParent from '../_util/getScrollParent';\nimport { supportsPassive } from '../_util/supportsPassive';\n\nlet totalLockCount = 0;\nlet mounted: boolean = null;\n\n// 移植自vant：https://github.com/youzan/vant/blob/HEAD/src/composables/use-lock-scroll.ts\nexport function useLockScroll(rootRef: Ref<HTMLElement | undefined>, shouldLock: () => boolean, componentName: string) {\n  const touch = useTouch();\n  const BODY_LOCK_CLASS = `${componentName}--lock`;\n\n  const onTouchMove = (event: TouchEvent) => {\n    touch.move(event);\n\n    const direction = touch.deltaY.value > 0 ? '10' : '01';\n    const el = getScrollParent(event.target as Element, rootRef.value) as HTMLElement;\n    if (!el) return;\n    const { scrollHeight, offsetHeight, scrollTop } = el;\n    let status = '11';\n\n    if (scrollTop === 0) {\n      status = offsetHeight >= scrollHeight ? '00' : '01';\n    } else if (scrollTop + offsetHeight >= scrollHeight) {\n      status = '10';\n    }\n\n    if (status !== '11' && touch.isVertical() && !(parseInt(status, 2) & parseInt(direction, 2))) {\n      if (event.cancelable) {\n        event.preventDefault();\n      }\n    }\n  };\n\n  const lock = () => {\n    document.addEventListener('touchstart', touch.start);\n    document.addEventListener('touchmove', onTouchMove, supportsPassive.value ? { passive: false } : false);\n\n    if (!totalLockCount) {\n      document.body.classList.add(BODY_LOCK_CLASS);\n    }\n\n    totalLockCount += 1;\n  };\n\n  const unlock = () => {\n    if (totalLockCount) {\n      document.removeEventListener('touchstart', touch.start);\n      document.removeEventListener('touchmove', onTouchMove);\n\n      totalLockCount -= 1;\n\n      if (!totalLockCount) {\n        document.body.classList.remove(BODY_LOCK_CLASS);\n      }\n    }\n  };\n\n  const init = () => shouldLock() && lock();\n\n  const destroy = () => shouldLock() && unlock();\n\n  onMounted(() => {\n    init();\n    nextTick(() => {\n      mounted = true;\n    });\n  });\n\n  onActivated(() => {\n    if (mounted) {\n      init();\n    }\n  });\n\n  onDeactivated(destroy);\n  onBeforeUnmount(destroy);\n\n  watch(shouldLock, (value) => {\n    value ? lock() : unlock();\n  });\n}\n"],"mappings":";;;;;;;;;;;;;AAKA,IAAIA,cAAiB;AACrB,IAAIC,OAAmB;AAGP,SAAAC,cAAcC,OAAuC,EAAAC,UAAA,EAA2BC,aAAuB;EACrH,IAAMC,KAAA,GAAQC,QAAS;EACvB,IAAMC,eAAA,MAAAC,MAAA,CAAqBJ,aAAA;EAErB,IAAAK,WAAA,GAAc,SAAdA,YAAeC,KAAsB;IACzCL,KAAA,CAAMM,IAAA,CAAKD,KAAK;IAEhB,IAAME,SAAY,GAAAP,KAAA,CAAMQ,MAAO,CAAAC,KAAA,GAAQ,IAAI,IAAO;IAClD,IAAMC,EAAK,GAAAC,eAAA,CAAgBN,KAAM,CAAAO,MAAA,EAAmBf,OAAA,CAAQY,KAAK;IACjE,IAAI,CAACC,EAAA,EAAI;IACT,IAAQG,YAAA,GAA0CH,EAAA,CAA1CG,YAAA;MAAcC,YAAc,GAAcJ,EAAA,CAA5BI,YAAc;MAAAC,SAAA,GAAcL,EAAA,CAAdK,SAAA;IACpC,IAAIC,MAAS;IAEb,IAAID,SAAA,KAAc,CAAG;MACVC,MAAA,GAAAF,YAAA,IAAgBD,YAAA,GAAe,IAAO;IACjD,WAAWE,SAAY,GAAAD,YAAA,IAAgBD,YAAc;MAC1CG,MAAA;IACX;IAEA,IAAIA,MAAW,aAAQhB,KAAM,CAAAiB,UAAA,EAAgB,MAAEC,QAAS,CAAAF,MAAA,EAAQ,CAAC,IAAIE,QAAS,CAAAX,SAAA,EAAW,CAAC,CAAI;MAC5F,IAAIF,KAAA,CAAMc,UAAY;QACpBd,KAAA,CAAMe,cAAe;MACvB;IACF;GACF;EAEA,IAAMC,IAAA,GAAO,SAAPA,KAAA,EAAa;IACRC,QAAA,CAAAC,gBAAA,CAAiB,YAAc,EAAAvB,KAAA,CAAMwB,KAAK;IAC1CF,QAAA,CAAAC,gBAAA,CAAiB,aAAanB,WAAa,EAAAqB,eAAA,CAAgBhB,KAAA,GAAQ;MAAEiB,OAAA,EAAS;KAAM,GAAI,KAAK;IAEtG,IAAI,CAAChC,cAAgB;MACV4B,QAAA,CAAAK,IAAA,CAAKC,SAAU,CAAAC,GAAA,CAAI3B,eAAe;IAC7C;IAEkBR,cAAA;GACpB;EAEA,IAAMoC,MAAA,GAAS,SAATA,OAAA,EAAe;IACnB,IAAIpC,cAAgB;MACT4B,QAAA,CAAAS,mBAAA,CAAoB,YAAc,EAAA/B,KAAA,CAAMwB,KAAK;MAC7CF,QAAA,CAAAS,mBAAA,CAAoB,aAAa3B,WAAW;MAEnCV,cAAA;MAElB,IAAI,CAACA,cAAgB;QACV4B,QAAA,CAAAK,IAAA,CAAKC,SAAU,CAAAI,MAAA,CAAO9B,eAAe;MAChD;IACF;GACF;EAEA,IAAM+B,IAAO,YAAPA,IAAOA,CAAA;IAAA,OAAMnC,UAAW,MAAKuB,IAAK;EAAA;EAExC,IAAMa,OAAU,YAAVA,OAAUA,CAAA;IAAA,OAAMpC,UAAW,MAAKgC,MAAO;EAAA;EAE7CK,SAAA,CAAU,YAAM;IACTF,IAAA;IACLG,QAAA,CAAS,YAAM;MACHzC,OAAA;IACZ,CAAC;EACH,CAAC;EAED0C,WAAA,CAAY,YAAM;IAChB,IAAI1C,OAAS;MACNsC,IAAA;IACP;EACF,CAAC;EAEDK,aAAA,CAAcJ,OAAO;EACrBK,eAAA,CAAgBL,OAAO;EAEjBM,KAAA,CAAA1C,UAAA,EAAY,UAACW,KAAU;IACnBA,KAAA,GAAAY,IAAA,KAASS,MAAO;EAC1B,CAAC;AACH","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}