{"version":3,"file":"hooks.mjs","sources":["../../../../../../packages/components/resizable/src/hooks.ts"],"sourcesContent":["import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue'\nimport { ResizableProps } from './resizable'\nimport type {\n  IBeforeMoveState,\n  IDelta,\n  ILimitValue,\n  ILimits,\n  IMoveType,\n  IState,\n  IStick,\n} from './types'\nimport type { Ref } from 'vue'\n\nexport const useResizable = (\n  target: Ref<HTMLElement | null> = ref(null),\n  container: Ref<HTMLElement | null> = ref(null),\n  props: ResizableProps,\n  emit: any\n) => {\n  const bodyDrag = ref(false)\n  const stickDrag = ref(false)\n\n  const state = reactive<IState>({\n    parentWidth: 0, //  target父元素的宽度\n    parentHeight: 0, //  target父元素的高度\n    left: 0, // target元素的left值\n    top: 0, // target元素的top值\n    right: 0, // target元素的right值\n    bottom: 0, // target元素的bottom值\n    aspectFactor: 1,\n  })\n\n  const beforeMoveState = reactive<IBeforeMoveState>({\n    pointerX: 0, // 鼠标按下的x坐标\n    pointerY: 0, // 鼠标按下的y坐标\n    left: 0, // 同state.left\n    right: 0, // 同state.right\n    top: 0, // 同state.top\n    bottom: 0, // 同state.bottom\n    width: 0, // container元素的宽度\n    height: 0, // container元素的高度\n  })\n\n  const limits = reactive<ILimits>({\n    left: { min: null, max: null },\n    right: { min: null, max: null },\n    top: { min: null, max: null },\n    bottom: { min: null, max: null },\n  })\n\n  // container元素的宽度\n  const width = computed(() => state.parentWidth - state.left - state.right)\n\n  // container元素的高度\n  const height = computed(() => state.parentHeight - state.top - state.bottom)\n\n  // container元素的尺寸样式\n  const containerStyle = computed(() => {\n    return {\n      width: props.w == 'auto' ? 'auto' : `${width.value}px`,\n      height: props.h == 'auto' ? 'auto' : `${height.value}px`,\n    }\n  })\n\n  // target元素的位置\n  const targetStyle = computed(() => {\n    return {\n      top: `${state.top}px`,\n      left: `${state.left}px`,\n      zIndex: props.z,\n    }\n  })\n\n  // target元素的位置信息及container元素的尺寸大小\n  const rect = computed(() => {\n    return {\n      left: Math.round(state.left),\n      top: Math.round(state.top),\n      width: Math.round(width.value),\n      height: Math.round(height.value),\n    }\n  })\n\n  const saveBeforeMoveState = ({\n    pointerX,\n    pointerY,\n  }: {\n    pointerX: number\n    pointerY: number\n  }) => {\n    beforeMoveState.pointerX = pointerX\n    beforeMoveState.pointerY = pointerY\n\n    beforeMoveState.left = state.left\n    beforeMoveState.right = state.right\n    beforeMoveState.top = state.top\n    beforeMoveState.bottom = state.bottom\n\n    beforeMoveState.width = width.value\n    beforeMoveState.height = height.value\n\n    state.aspectFactor = width.value / height.value\n  }\n\n  const sideCorrectionByLimit = (\n    limit: { min: ILimitValue; max: ILimitValue },\n    current: number\n  ) => {\n    let value = current\n\n    if (limit.min !== null && current < limit.min) {\n      value = limit.min\n    } else if (limit.max !== null && limit.max < current) {\n      value = limit.max\n    }\n\n    return value\n  }\n\n  const rectCorrectionByLimit = (rect: {\n    newRight: number\n    newLeft: number\n    newBottom: number\n    newTop: number\n  }) => {\n    let { newRight, newLeft, newBottom, newTop } = rect\n\n    newLeft = sideCorrectionByLimit(limits.left, newLeft)\n    newRight = sideCorrectionByLimit(limits.right, newRight)\n    newTop = sideCorrectionByLimit(limits.top, newTop)\n    newBottom = sideCorrectionByLimit(limits.bottom, newBottom)\n\n    return {\n      newLeft,\n      newRight,\n      newTop,\n      newBottom,\n    }\n  }\n\n  const rectCorrectionByAspectRatio = (rect: any, currentStick: string) => {\n    let { newLeft, newRight, newTop, newBottom } = rect\n    const { parentWidth, parentHeight, aspectFactor } = state\n\n    let newWidth = parentWidth - newLeft - newRight\n    let newHeight = parentHeight - newTop - newBottom\n\n    if (currentStick[1] === 'm') {\n      const deltaHeight = newHeight - beforeMoveState.height\n\n      newLeft -= (deltaHeight * aspectFactor) / 2\n      newRight -= (deltaHeight * aspectFactor) / 2\n    } else if (currentStick[0] === 'm') {\n      const deltaWidth = newWidth - beforeMoveState.width\n\n      newTop -= deltaWidth / aspectFactor / 2\n      newBottom -= deltaWidth / aspectFactor / 2\n    } else if (newWidth / newHeight > aspectFactor) {\n      newWidth = aspectFactor * newHeight\n\n      if (currentStick[1] === 'l') {\n        newLeft = parentWidth - newRight - newWidth\n      } else {\n        newRight = parentWidth - newLeft - newWidth\n      }\n    } else {\n      newHeight = newWidth / aspectFactor\n\n      if (currentStick[0] === 't') {\n        newTop = parentHeight - newBottom - newHeight\n      } else {\n        newBottom = parentHeight - newTop - newHeight\n      }\n    }\n\n    return { newLeft, newRight, newTop, newBottom }\n  }\n\n  const calcDragLimitation = () => {\n    const { parentWidth, parentHeight } = state\n\n    return {\n      left: { min: 0, max: parentWidth - width.value },\n      right: { min: 0, max: parentWidth - width.value },\n      top: { min: 0, max: parentHeight - height.value },\n      bottom: { min: 0, max: parentHeight - height.value },\n    }\n  }\n\n  const calcResizeLimits = (stick: IStick) => {\n    const { aspectFactor, bottom, top, left, right } = state\n    let { minh: minHeight, minw: minWidth } = props\n\n    const parentLim = props.parentLimitation ? 0 : null\n\n    if (props.aspectRatio) {\n      if (minWidth / minHeight > aspectFactor) {\n        minHeight = minWidth / aspectFactor\n      } else {\n        minWidth = aspectFactor * minHeight\n      }\n    }\n\n    const limits: any = {\n      left: { min: parentLim, max: left + (width.value - minWidth) },\n      right: { min: parentLim, max: right + (width.value - minWidth) },\n      top: { min: parentLim, max: top + (height.value - minHeight) },\n      bottom: { min: parentLim, max: bottom + (height.value - minHeight) },\n    }\n\n    if (props.aspectRatio) {\n      const aspectLimits = {\n        left: {\n          min: left - Math.min(top, bottom) * aspectFactor * 2,\n          max: left + ((height.value - minHeight) / 2) * aspectFactor * 2,\n        },\n        right: {\n          min: right - Math.min(top, bottom) * aspectFactor * 2,\n          max: right + ((height.value - minHeight) / 2) * aspectFactor * 2,\n        },\n        top: {\n          min: top - (Math.min(left, right) / aspectFactor) * 2,\n          max: top + ((width.value - minWidth) / 2 / aspectFactor) * 2,\n        },\n        bottom: {\n          min: bottom - (Math.min(left, right) / aspectFactor) * 2,\n          max: bottom + ((width.value - minWidth) / 2 / aspectFactor) * 2,\n        },\n      }\n\n      if (stick[0] === 'm') {\n        limits.left = {\n          min: Math.max(limits.left.min, aspectLimits.left.min),\n          max: Math.min(limits.left.max, aspectLimits.left.max),\n        }\n        limits.right = {\n          min: Math.max(limits.right.min, aspectLimits.right.min),\n          max: Math.min(limits.right.max, aspectLimits.right.max),\n        }\n      } else if (stick[1] === 'm') {\n        limits.top = {\n          min: Math.max(limits.top.min, aspectLimits.top.min),\n          max: Math.min(limits.top.max, aspectLimits.top.max),\n        }\n        limits.bottom = {\n          min: Math.max(limits.bottom.min, aspectLimits.bottom.min),\n          max: Math.min(limits.bottom.max, aspectLimits.bottom.max),\n        }\n      }\n    }\n\n    return limits\n  }\n\n  const targetDown = (evt: PointerEvent) => {\n    const { button } = evt\n\n    if (!props.isDraggable || (button && button !== 0)) {\n      return\n    }\n\n    evt?.stopPropagation?.()\n    evt?.preventDefault?.()\n\n    bodyDrag.value = true\n\n    const pointerX = evt.pageX\n    const pointerY = evt.pageY\n\n    saveBeforeMoveState({ pointerX, pointerY })\n\n    if (props.parentLimitation) {\n      Object.assign(limits, calcDragLimitation())\n    }\n\n    emit('drag-start', rect.value, evt)\n  }\n\n  const targetMove = (delta: IDelta) => {\n    const { parentWidth, parentHeight } = state\n    const { gridX, gridY } = props\n\n    let newTop = beforeMoveState.top - delta.y\n    let newBottom = beforeMoveState.bottom + delta.y\n    let newLeft = beforeMoveState.left - delta.x\n    let newRight = beforeMoveState.right + delta.x\n\n    if (props.snapToGrid) {\n      let alignTop = true\n      let alignLeft = true\n\n      let diffT = newTop - Math.floor(newTop / gridY) * gridY\n      let diffB =\n        parentHeight -\n        newBottom -\n        Math.floor((parentHeight - newBottom) / gridY) * gridY\n      let diffL = newLeft - Math.floor(newLeft / gridX) * gridX\n      let diffR =\n        parentWidth -\n        newRight -\n        Math.floor((parentWidth - newRight) / gridX) * gridX\n\n      if (diffT > gridY / 2) {\n        diffT -= gridY\n      }\n      if (diffB > gridY / 2) {\n        diffB -= gridY\n      }\n      if (diffL > gridX / 2) {\n        diffL -= gridX\n      }\n      if (diffR > gridX / 2) {\n        diffR -= gridX\n      }\n\n      if (Math.abs(diffB) < Math.abs(diffT)) {\n        alignTop = false\n      }\n      if (Math.abs(diffR) < Math.abs(diffL)) {\n        alignLeft = false\n      }\n\n      newTop -= alignTop ? diffT : diffB\n      newBottom = parentHeight - height.value - newTop\n      newLeft -= alignLeft ? diffL : diffR\n      newRight = parentWidth - width.value - newLeft\n    }\n\n    ;({\n      newLeft: state.left,\n      newRight: state.right,\n      newTop: state.top,\n      newBottom: state.bottom,\n    } = rectCorrectionByLimit({ newLeft, newRight, newTop, newBottom }))\n  }\n\n  const targetUp = (evt?: PointerEvent) => {\n    bodyDrag.value = false\n\n    Object.assign(beforeMoveState, {\n      pointerX: 0,\n      pointerY: 0,\n    })\n\n    Object.assign(limits, {\n      left: { min: null, max: null },\n      right: { min: null, max: null },\n      top: { min: null, max: null },\n      bottom: { min: null, max: null },\n    })\n\n    emit('drag-end', rect.value, evt)\n  }\n\n  const move = (evt: PointerEvent, type: IMoveType, currentStick?: IStick) => {\n    evt.stopPropagation?.()\n\n    const pageX = evt.pageX\n    const pageY = evt.pageY\n\n    const delta: IDelta = {\n      x: (beforeMoveState.pointerX - pageX) / props.parentScaleX,\n      y: (beforeMoveState.pointerY - pageY) / props.parentScaleY,\n    }\n\n    if (type === 'stickMove') {\n      stickMove(delta, currentStick as IStick)\n      emit('resize', rect.value, evt)\n    }\n\n    if (type === 'targetMove') {\n      if (props.axis === 'x') {\n        delta.y = 0\n      } else if (props.axis === 'y') {\n        delta.x = 0\n      } else if (props.axis === 'none') {\n        return\n      }\n      targetMove(delta)\n      emit('drag', rect.value, evt)\n    }\n  }\n\n  const stickDown = (evt: PointerEvent, stick: IStick, force = false) => {\n    if (!props.isResizable && !force) {\n      return\n    }\n\n    stickDrag.value = true\n\n    const pointerX = evt.pageX\n    const pointerY = evt.pageY\n\n    saveBeforeMoveState({ pointerX, pointerY })\n\n    Object.assign(limits, calcResizeLimits(stick))\n\n    emit('resize-start', rect.value, evt)\n  }\n\n  const stickMove = (delta: IDelta, currentStick: IStick) => {\n    const { gridY, gridX, snapToGrid } = props\n    const { parentHeight, parentWidth } = state\n\n    let newTop = beforeMoveState.top\n    let newBottom = beforeMoveState.bottom\n    let newLeft = beforeMoveState.left\n    let newRight = beforeMoveState.right\n    switch (currentStick[0]) {\n      case 'b':\n        newBottom = beforeMoveState.bottom + delta.y\n        if (snapToGrid) {\n          newBottom =\n            parentHeight -\n            Math.round((parentHeight - newBottom) / gridY) * gridY\n        }\n        break\n      case 't':\n        newTop = beforeMoveState.top - delta.y\n        if (snapToGrid) {\n          newTop = Math.round(newTop / gridY) * gridY\n        }\n        break\n      default:\n        break\n    }\n\n    switch (currentStick[1]) {\n      case 'r':\n        newRight = beforeMoveState.right + delta.x\n        if (snapToGrid) {\n          newRight =\n            parentWidth - Math.round((parentWidth - newRight) / gridX) * gridX\n        }\n        break\n      case 'l':\n        newLeft = beforeMoveState.left - delta.x\n        if (snapToGrid) {\n          newLeft = Math.round(newLeft / gridX) * gridX\n        }\n        break\n      default:\n        break\n    }\n\n    ;({ newLeft, newRight, newTop, newBottom } = rectCorrectionByLimit({\n      newLeft,\n      newRight,\n      newTop,\n      newBottom,\n    }))\n\n    if (props.aspectRatio) {\n      ;({ newLeft, newRight, newTop, newBottom } = rectCorrectionByAspectRatio(\n        {\n          newLeft,\n          newRight,\n          newTop,\n          newBottom,\n        },\n        currentStick\n      ))\n    }\n\n    state.left = newLeft\n    state.right = newRight\n    state.top = newTop\n    state.bottom = newBottom\n  }\n\n  const stickUp = (evt: PointerEvent) => {\n    stickDrag.value = false\n\n    Object.assign(beforeMoveState, {\n      pointerX: 0,\n      pointerY: 0,\n    })\n\n    Object.assign(limits, {\n      left: { min: null, max: null },\n      right: { min: null, max: null },\n      top: { min: null, max: null },\n      bottom: { min: null, max: null },\n    })\n\n    emit('resize-end', rect.value, evt)\n  }\n\n  watch(\n    () => props.parentW,\n    (val) => {\n      state.right = val - width.value - state.left\n      state.parentWidth = val\n    }\n  )\n  watch(\n    () => props.parentH,\n    (val) => {\n      state.bottom = val - height.value - state.top\n      state.parentHeight = val\n    }\n  )\n  watch(\n    () => props.x,\n    (newVal, oldVal) => {\n      if (newVal === state.left) {\n        return\n      }\n\n      const delta = oldVal - newVal\n\n      targetDown({ pageX: state.left, pageY: state.top } as PointerEvent)\n      targetMove({ x: delta, y: 0 })\n\n      nextTick(() => {\n        targetUp()\n      })\n    }\n  )\n  watch(\n    () => props.y,\n    (newVal, oldVal) => {\n      if (newVal === state.top) {\n        return\n      }\n\n      const delta = oldVal - newVal\n\n      targetDown({ pageX: state.left, pageY: state.top } as PointerEvent)\n      targetMove({ x: 0, y: delta })\n\n      nextTick(() => {\n        targetUp()\n      })\n    }\n  )\n\n  onMounted(() => {\n    const parentElement = target.value?.parentNode as HTMLElement\n    const containerElement = container.value as HTMLElement\n    state.parentWidth = props.parentW\n      ? props.parentW\n      : parentElement.clientWidth\n    state.parentHeight = props.parentH\n      ? props.parentH\n      : parentElement.clientHeight\n\n    state.left = props.x\n    state.top = props.y\n    state.right =\n      state.parentWidth -\n      ((props.w === 'auto'\n        ? containerElement.scrollWidth\n        : props.w) as number) -\n      state.left\n    state.bottom =\n      state.parentHeight -\n      ((props.h === 'auto'\n        ? containerElement.scrollHeight\n        : props.h) as number) -\n      state.top\n  })\n\n  return {\n    move,\n    stickDown,\n    stickUp,\n    targetDown,\n    targetUp,\n    targetStyle,\n    containerStyle,\n  }\n}\n"],"names":["rect","limits"],"mappings":"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"}