{"version":3,"file":"index.mjs","sources":["../../../../common/js/drawer/utils.ts","../../../../components/drawer/hooks/index.ts"],"sourcesContent":["type Placement = 'left' | 'right' | 'top' | 'bottom';\n\ninterface SizeDragLimit {\n  max: number;\n  min: number;\n}\n\nexport function getSizeDraggable(\n  sizeDraggable: boolean | SizeDragLimit,\n  limit: { max: number; min: number }\n) {\n  if (typeof sizeDraggable === 'boolean') {\n    return {\n      allowSizeDraggable: sizeDraggable,\n      max: limit.max,\n      min: limit.min,\n    };\n  }\n\n  return {\n    allowSizeDraggable: true,\n    max: sizeDraggable.max,\n    min: sizeDraggable.min,\n  };\n}\n\ntype IOptions = {\n  x: number;\n  y: number;\n  maxWidth: number;\n  maxHeight: number;\n  min: number;\n  max: number;\n};\n\n// > min && < max\nfunction calcSizeRange(size: number, min: number, max: number) {\n  return Math.min(Math.max(size, min), max);\n}\n\nexport function calcMoveSize(placement: Placement, opts: IOptions) {\n  const { x, y, max, min, maxWidth, maxHeight } = opts;\n  let moveSize: number | undefined;\n  switch (placement) {\n    case 'right':\n      // |<---  x  --->|      |\n      // |     maxWidth       |\n      //               | size |  > min && < max\n      moveSize = calcSizeRange(maxWidth - x, min, max);\n      break;\n    case 'left':\n      // |<--  x -->|  |\n      // x > min && < max\n      moveSize = calcSizeRange(x, min, max);\n      break;\n    case 'top':\n      // - - - - - - - -\n      // |     y        |\n      // |              |\n      // - - - - - - - -\n      //  > min && < max\n      // moveSize = Math.min(Math.max(y, min), max);\n      moveSize = calcSizeRange(y, min, max);\n      break;\n    case 'bottom':\n      // - - - - - - - -\n      // |     y        |\n      // |              |  maxHeight\n      // - - - - - - - -\n      // |    size      |\n      //  > min && < max\n      moveSize = calcSizeRange(maxHeight - y, min, max);\n      break;\n    default:\n      // 参数缺失直接返回\n      return moveSize;\n  }\n  return moveSize;\n}\n","import { computed, ref } from 'vue';\nimport { Styles } from '../../common';\nimport { getSizeDraggable, calcMoveSize } from '@tdesign/common-js/drawer/utils';\nimport type { TdDrawerProps } from '../type';\n\nexport const useDrag = (props: TdDrawerProps) => {\n  // 以下为拖拽改变抽屉大小相关 可以抽成hooks\n  const isSizeDragging = ref(false);\n  const draggedSizeValue = ref<string>(null);\n\n  const enableDrag = () => {\n    // mousedown绑定mousemove和mouseup事件\n    document.addEventListener('mouseup', handleMouseup, true);\n    document.addEventListener('mousemove', handleMousemove, true);\n    isSizeDragging.value = true;\n  };\n\n  const handleMouseup = () => {\n    document.removeEventListener('mouseup', handleMouseup, true);\n    document.removeEventListener('mousemove', handleMousemove, true);\n    isSizeDragging.value = false;\n  };\n\n  const handleMousemove = (e: MouseEvent) => {\n    // 鼠标移动时计算draggedSizeValue的值\n    const { x, y } = e;\n    const maxHeight = document.documentElement.clientHeight;\n    const maxWidth = document.documentElement.clientWidth;\n    const offsetHeight = 8;\n    const offsetWidth = 8;\n    // x 轴方向使用最大宽度，y轴方向使用最大高度\n    const max = props.placement === 'left' || props.placement === 'right' ? maxWidth : maxHeight;\n    // x 轴方向使用默认最小宽度，y轴方向使用默认最小高度\n    const min = props.placement === 'left' || props.placement === 'right' ? offsetWidth : offsetHeight;\n    const { allowSizeDraggable, max: limitMax, min: limitMin } = getSizeDraggable(props.sizeDraggable, { max, min });\n\n    // 不支持拖拽就直接返回\n    if (!allowSizeDraggable || !isSizeDragging.value) return;\n\n    const moveSize = calcMoveSize(props.placement, {\n      x,\n      y,\n      maxWidth,\n      maxHeight,\n      max: limitMax,\n      min: limitMin,\n    });\n\n    if (typeof moveSize === 'undefined') return;\n\n    draggedSizeValue.value = `${moveSize}px`;\n    props.onSizeDragEnd?.({\n      e,\n      size: moveSize,\n    });\n  };\n\n  const draggableLineStyles = computed(() => {\n    // 设置拖拽control的样式\n    const isHorizontal = ['right', 'left'].includes(props.placement);\n    const oppositeMap = {\n      left: 'right',\n      right: 'left',\n      top: 'bottom',\n      bottom: 'top',\n    };\n    return {\n      zIndex: 1,\n      position: 'absolute',\n      background: 'transparent',\n      [oppositeMap[props.placement]]: 0,\n      width: isHorizontal ? '16px' : '100%',\n      height: isHorizontal ? '100%' : '16px',\n      cursor: isHorizontal ? 'col-resize' : 'row-resize',\n    } as Styles;\n  });\n\n  return { draggedSizeValue, enableDrag, draggableLineStyles };\n};\n"],"names":["getSizeDraggable","sizeDraggable","limit","allowSizeDraggable","max","min","calcSizeRange","size","Math","calcMoveSize","placement","opts","x","y","maxWidth","maxHeight","moveSize","useDrag","props","isSizeDragging","ref","draggedSizeValue","enableDrag","document","addEventListener","handleMouseup","handleMousemove","value","removeEventListener","e","_props$onSizeDragEnd","documentElement","clientHeight","clientWidth","offsetHeight","offsetWidth","_getSizeDraggable","limitMax","limitMin","onSizeDragEnd","call","draggableLineStyles","computed","isHorizontal","includes","oppositeMap","left","right","top","bottom","_defineProperty","zIndex","position","background"],"mappings":"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"}