{"version":3,"file":"hooks.mjs","sources":["../../../../../../packages/components/split/src/hooks.ts"],"sourcesContent":["import { computed, isRef, ref } from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { throttle } from '@element-plus/utils'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport interface MovingState {\n  xStart: number\n  yStart: number\n  xEnd: number\n  yEnd: number\n  clientX: number\n  clientY: number\n  deltaX: number\n  deltaY: number\n  lazy: boolean\n  [custom: string]: unknown\n}\n\nexport interface UseMovingOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>\n  /**\n   * 横向位置的初始值\n   */\n  x?: MaybeRef<number>\n  /**\n   * 纵向位置的初始值\n   */\n  y?: MaybeRef<number>\n  /**\n   * 为否为懒加载，开启后会在 End 事件再更新位置状态\n   */\n  lazy?: MaybeRef<boolean>\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>\n  /**\n   * 事件的 capture 选项\n   *\n   * @default true\n   */\n  capture?: boolean\n  /**\n   * 是否阻止 MouseDown 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopMouse?: boolean\n  /**\n   * 是否阻止 TouchStart 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopTouch?: boolean\n  /**\n   * 移动开始时的回调函数，返回 false 可以阻止本次移动\n   */\n  onStart?: (state: MovingState, event: PointerEvent) => any\n  /**\n   * 移动中的回调函数\n   */\n  onMove?: (state: MovingState, event: PointerEvent) => void\n  /**\n   * 移动结束时的回调函数\n   */\n  onEnd?: (state: MovingState, event: PointerEvent) => void\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nexport function useMoving(options: UseMovingOptions) {\n  const target = options.target || ref(null)\n  const x = isRef(options.x) ? options.x : ref(0)\n  const y = isRef(options.y) ? options.y : ref(0)\n  const lazy = isRef(options.lazy) ? options.lazy : ref(options.lazy || false)\n  const disabled = isRef(options.disabled)\n    ? options.disabled\n    : ref(options.disabled || false)\n\n  const { capture = true, stopMouse = true, stopTouch = true } = options\n\n  const moving = ref(false)\n  const internalState: MovingState = {\n    xStart: 0,\n    yStart: 0,\n    xEnd: 0,\n    yEnd: 0,\n    clientX: 0,\n    clientY: 0,\n    deltaX: 0,\n    deltaY: 0,\n    lazy: false,\n  }\n\n  let current = 0\n  let record = 0\n\n  const throttleMove = throttle((event: PointerEvent) => {\n    if (record < current) return\n\n    updateState(event)\n\n    if (!internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    options.onMove?.(internalState, event)\n  })\n\n  function start(event: PointerEvent) {\n    if (disabled.value) return\n\n    Object.assign(internalState, {\n      xStart: x.value,\n      yStart: y.value,\n      xEnd: x.value,\n      yEnd: y.value,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      lazy: lazy.value,\n    })\n\n    if (options.onStart?.(internalState, event) === false) {\n      return\n    }\n\n    document.addEventListener('pointermove', move, { capture })\n    document.addEventListener('pointerup', end, { capture })\n\n    record = current\n    moving.value = true\n  }\n\n  function move(event: PointerEvent) {\n    if (disabled.value) return\n\n    disableEvent(event)\n    throttleMove(event)\n  }\n\n  function end(event: PointerEvent) {\n    document.removeEventListener('pointermove', move, { capture })\n    document.removeEventListener('pointerup', end, { capture })\n\n    if (disabled.value) return\n\n    updateState(event)\n\n    if (internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    moving.value = false\n    ++current\n\n    options.onEnd?.(internalState, event)\n  }\n\n  function updateState(event: PointerEvent) {\n    const { clientX, clientY } = event\n    const {\n      xStart,\n      yStart,\n      clientX: clientXStart,\n      clientY: clientYStart,\n    } = internalState\n    const deltaX = clientX - clientXStart\n    const deltaY = clientY - clientYStart\n\n    internalState.deltaX = deltaX\n    internalState.deltaY = deltaY\n    internalState.xEnd = xStart + deltaX\n    internalState.yEnd = yStart + deltaY\n  }\n\n  useEventListener(target, 'pointerdown', start, { capture })\n\n  stopMouse && useEventListener(target, 'mousedown', disableEvent, { capture })\n  stopTouch && useEventListener(target, 'touchstart', disableEvent, { capture })\n\n  return {\n    target,\n    moving: computed(() => moving.value),\n    x,\n    y,\n    lazy,\n    disabled,\n  }\n}\n"],"names":[],"mappings":";;;;AAwEA,SAAS,aAA8B,KAAU,EAAA;AAC/C,EAAA,IAAI,MAAM,UAAY,EAAA;AACpB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AAAA,GACvB;AACF,CAAA;AAEO,SAAS,UAAU,OAA2B,EAAA;AACnD,EAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,MAAU,IAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AACzC,EAAM,MAAA,CAAA,GAAI,MAAM,OAAQ,CAAA,CAAC,IAAI,OAAQ,CAAA,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AAC9C,EAAM,MAAA,CAAA,GAAI,MAAM,OAAQ,CAAA,CAAC,IAAI,OAAQ,CAAA,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AAC9C,EAAM,MAAA,IAAA,GAAO,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,QAAQ,IAAO,GAAA,GAAA,CAAI,OAAQ,CAAA,IAAA,IAAQ,KAAK,CAAA,CAAA;AAC3E,EAAM,MAAA,QAAA,GAAW,KAAM,CAAA,OAAA,CAAQ,QAAQ,CAAA,GACnC,QAAQ,QACR,GAAA,GAAA,CAAI,OAAQ,CAAA,QAAA,IAAY,KAAK,CAAA,CAAA;AAEjC,EAAA,MAAM,EAAE,OAAU,GAAA,IAAA,EAAM,YAAY,IAAM,EAAA,SAAA,GAAY,MAAS,GAAA,OAAA,CAAA;AAE/D,EAAM,MAAA,MAAA,GAAS,IAAI,KAAK,CAAA,CAAA;AACxB,EAAA,MAAM,aAA6B,GAAA;AAAA,IACjC,MAAQ,EAAA,CAAA;AAAA,IACR,MAAQ,EAAA,CAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,OAAS,EAAA,CAAA;AAAA,IACT,OAAS,EAAA,CAAA;AAAA,IACT,MAAQ,EAAA,CAAA;AAAA,IACR,MAAQ,EAAA,CAAA;AAAA,IACR,IAAM,EAAA,KAAA;AAAA,GACR,CAAA;AAEA,EAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AACd,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,EAAM,MAAA,YAAA,GAAe,QAAS,CAAA,CAAC,KAAwB,KAAA;AA1GzD,IAAA,IAAA,EAAA,CAAA;AA2GI,IAAA,IAAI,MAAS,GAAA,OAAA;AAAS,MAAA,OAAA;AAEtB,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAEjB,IAAI,IAAA,CAAC,cAAc,IAAM,EAAA;AACvB,MAAA,CAAA,CAAE,QAAQ,aAAc,CAAA,IAAA,CAAA;AACxB,MAAA,CAAA,CAAE,QAAQ,aAAc,CAAA,IAAA,CAAA;AAAA,KAC1B;AAEA,IAAQ,CAAA,EAAA,GAAA,OAAA,CAAA,MAAA,KAAR,iCAAiB,aAAe,EAAA,KAAA,CAAA,CAAA;AAAA,GACjC,CAAA,CAAA;AAED,EAAA,SAAS,MAAM,KAAqB,EAAA;AAvHtC,IAAA,IAAA,EAAA,CAAA;AAwHI,IAAA,IAAI,QAAS,CAAA,KAAA;AAAO,MAAA,OAAA;AAEpB,IAAA,MAAA,CAAO,OAAO,aAAe,EAAA;AAAA,MAC3B,QAAQ,CAAE,CAAA,KAAA;AAAA,MACV,QAAQ,CAAE,CAAA,KAAA;AAAA,MACV,MAAM,CAAE,CAAA,KAAA;AAAA,MACR,MAAM,CAAE,CAAA,KAAA;AAAA,MACR,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,MAAM,IAAK,CAAA,KAAA;AAAA,KACZ,CAAA,CAAA;AAED,IAAA,IAAA,CAAA,CAAI,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAA,aAAA,EAAe,YAAW,KAAO,EAAA;AACrD,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,QAAA,CAAS,gBAAiB,CAAA,aAAA,EAAe,IAAM,EAAA,EAAE,SAAS,CAAA,CAAA;AAC1D,IAAA,QAAA,CAAS,gBAAiB,CAAA,WAAA,EAAa,GAAK,EAAA,EAAE,SAAS,CAAA,CAAA;AAEvD,IAAS,MAAA,GAAA,OAAA,CAAA;AACT,IAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,GACjB;AAEA,EAAA,SAAS,KAAK,KAAqB,EAAA;AACjC,IAAA,IAAI,QAAS,CAAA,KAAA;AAAO,MAAA,OAAA;AAEpB,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,GACpB;AAEA,EAAA,SAAS,IAAI,KAAqB,EAAA;AAtJpC,IAAA,IAAA,EAAA,CAAA;AAuJI,IAAA,QAAA,CAAS,mBAAoB,CAAA,aAAA,EAAe,IAAM,EAAA,EAAE,SAAS,CAAA,CAAA;AAC7D,IAAA,QAAA,CAAS,mBAAoB,CAAA,WAAA,EAAa,GAAK,EAAA,EAAE,SAAS,CAAA,CAAA;AAE1D,IAAA,IAAI,QAAS,CAAA,KAAA;AAAO,MAAA,OAAA;AAEpB,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAEjB,IAAA,IAAI,cAAc,IAAM,EAAA;AACtB,MAAA,CAAA,CAAE,QAAQ,aAAc,CAAA,IAAA,CAAA;AACxB,MAAA,CAAA,CAAE,QAAQ,aAAc,CAAA,IAAA,CAAA;AAAA,KAC1B;AAEA,IAAA,MAAA,CAAO,KAAQ,GAAA,KAAA,CAAA;AACf,IAAE,EAAA,OAAA,CAAA;AAEF,IAAQ,CAAA,EAAA,GAAA,OAAA,CAAA,KAAA,KAAR,iCAAgB,aAAe,EAAA,KAAA,CAAA,CAAA;AAAA,GACjC;AAEA,EAAA,SAAS,YAAY,KAAqB,EAAA;AACxC,IAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,KAAA,CAAA;AAC7B,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAS,EAAA,YAAA;AAAA,MACT,OAAS,EAAA,YAAA;AAAA,KACP,GAAA,aAAA,CAAA;AACJ,IAAA,MAAM,SAAS,OAAU,GAAA,YAAA,CAAA;AACzB,IAAA,MAAM,SAAS,OAAU,GAAA,YAAA,CAAA;AAEzB,IAAA,aAAA,CAAc,MAAS,GAAA,MAAA,CAAA;AACvB,IAAA,aAAA,CAAc,MAAS,GAAA,MAAA,CAAA;AACvB,IAAA,aAAA,CAAc,OAAO,MAAS,GAAA,MAAA,CAAA;AAC9B,IAAA,aAAA,CAAc,OAAO,MAAS,GAAA,MAAA,CAAA;AAAA,GAChC;AAEA,EAAA,gBAAA,CAAiB,MAAQ,EAAA,aAAA,EAAe,KAAO,EAAA,EAAE,SAAS,CAAA,CAAA;AAE1D,EAAA,SAAA,IAAa,iBAAiB,MAAQ,EAAA,WAAA,EAAa,YAAc,EAAA,EAAE,SAAS,CAAA,CAAA;AAC5E,EAAA,SAAA,IAAa,iBAAiB,MAAQ,EAAA,YAAA,EAAc,YAAc,EAAA,EAAE,SAAS,CAAA,CAAA;AAE7E,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,MAAQ,EAAA,QAAA,CAAS,MAAM,MAAA,CAAO,KAAK,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AACF;;;;"}