{"version":3,"file":"resize-box.mjs","sources":["../../../../../../packages/components/resize-box/src/resize-box.vue"],"sourcesContent":["<template>\n  <component\n    :is=\"component\"\n    ref=\"wrapperRef\"\n    :class=\"ns.b()\"\n    v-bind=\"$attrs\"\n    :style=\"styles\"\n  >\n    <slot />\n    <ResizeTrigger\n      v-for=\"direction in allowDirections\"\n      :key=\"direction\"\n      :prefix-cls=\"ns.b('trigger')\"\n      :class=\"ns.b(`direction-${direction}`)\"\n      :direction=\"isHorizontal(direction) ? 'horizontal' : 'vertical'\"\n      :direction-name=\"direction\"\n      @mousedown=\"(e:any) =>onMoveStart(direction, e)\n      \"\n      @resize=\"(entry) => onTiggerResize(direction, entry)\"\n    >\n      <slot\n        v-if=\"$slots['resize-trigger']\"\n        name=\"resize-trigger\"\n        :direction=\"direction\"\n      />\n      <template v-if=\"$slots['resize-trigger-icon']\" #icon>\n        <slot name=\"resize-trigger-icon\" :direction=\"direction\" />\n      </template>\n    </ResizeTrigger>\n  </component>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, reactive, ref, toRefs } from 'vue'\nimport { useNamespace } from '@lit-element/hooks'\nimport { isNumber } from '@lit-element/utils'\nimport { off, on } from './dom'\nimport ResizeTrigger from './resize-trigger.vue'\nimport {\n  DIRECTION_BOTTOM,\n  DIRECTION_LEFT,\n  DIRECTION_RIGHT,\n  DIRECTION_TOP,\n  allDirections,\n  resizeBoxProps,\n  useMergeState,\n} from './data'\nimport type { DirectionType, PaddingCSSProperties } from './data'\n\ndefineOptions({ name: 'LtResizeBox' })\nconst props = defineProps(resizeBoxProps)\nconst emits = defineEmits([\n  'update:width',\n  'update:height',\n  'movingStart',\n  'moving',\n  'movingEnd',\n])\n\nfunction getRealSize(pageSize: number, padding: number) {\n  if (pageSize === 0) return 0\n  const res = pageSize - padding\n  return res <= 0 ? 0 : res\n}\n\nfunction isHorizontal(direction: DirectionType) {\n  return [DIRECTION_TOP, DIRECTION_BOTTOM].includes(direction)\n}\n\nconst { height: propHeight, width: propWidth, directions } = toRefs(props)\n\nconst [width, setWidth] = useMergeState<number | null>(\n  null,\n  reactive({\n    value: propWidth,\n  })\n)\n\nconst [height, setHeight] = useMergeState<number | null>(\n  null,\n  reactive({\n    value: propHeight,\n  })\n)\n\nconst wrapperRef = ref<HTMLDivElement>()\n\nconst paddingStyles = reactive<Partial<Record<PaddingCSSProperties, string>>>(\n  {}\n)\n\nconst ns = useNamespace('resizebox')\nconst styles = computed(() => {\n  const obj = {\n    ...(isNumber(width.value) ? { width: `${width.value}px` } : {}),\n    ...(isNumber(height.value) ? { height: `${height.value}px` } : {}),\n    ...paddingStyles,\n  }\n  return obj\n})\nconst allowDirections = computed(() =>\n  directions.value.filter((direction) => allDirections.includes(direction))\n)\n\nconst record = {\n  direction: '',\n  startPageX: 0,\n  startPageY: 0,\n  startWidth: 0,\n  startHeight: 0,\n  moving: false,\n  padding: {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0,\n  },\n}\n\nfunction onMoving(e: MouseEvent) {\n  if (!record.moving) return\n\n  const { startPageX, startPageY, startWidth, startHeight, direction } = record\n  let newWidth = startWidth\n  let newHeight = startHeight\n\n  // 往右移动的距离\n  const offsetX = e.pageX - startPageX\n  // 往下移动的距离\n  const offsetY = e.pageY - startPageY\n\n  switch (direction) {\n    case DIRECTION_LEFT:\n      newWidth = startWidth - offsetX\n      setWidth(newWidth)\n      emits('update:width', newWidth)\n      break\n    case DIRECTION_RIGHT:\n      newWidth = startWidth + offsetX\n      setWidth(newWidth)\n      emits('update:width', newWidth)\n      break\n    case DIRECTION_TOP:\n      newHeight = startHeight - offsetY\n      setHeight(newHeight)\n      emits('update:height', newHeight)\n      break\n    case DIRECTION_BOTTOM:\n      newHeight = startHeight + offsetY\n      setHeight(newHeight)\n      emits('update:height', newHeight)\n      break\n    default:\n      break\n  }\n\n  emits(\n    'moving',\n    {\n      width: newWidth,\n      height: newHeight,\n    },\n    e\n  )\n}\n\nfunction onMoveEnd(e: MouseEvent) {\n  record.moving = false\n\n  off(window, 'mousemove', onMoving)\n  off(window, 'mouseup', onMoveEnd)\n  off(window, 'contextmenu', onMoveEnd)\n\n  document.body.style.cursor = 'default'\n\n  emits('movingEnd', e)\n}\n\nfunction onMoveStart(direction: DirectionType, e: MouseEvent) {\n  emits('movingStart', e)\n\n  record.moving = true\n  record.startPageX = e.pageX\n  record.startPageY = e.pageY\n  record.direction = direction\n\n  const { top, left, right, bottom } = record.padding\n  record.startWidth = getRealSize(\n    wrapperRef.value?.clientWidth || 0,\n    left + right\n  )\n  record.startHeight = getRealSize(\n    wrapperRef.value?.clientHeight || 0,\n    top + bottom\n  )\n\n  on(window, 'mousemove', onMoving)\n  on(window, 'mouseup', onMoveEnd)\n  on(window, 'contextmenu', onMoveEnd)\n\n  document.body.style.cursor = isHorizontal(direction)\n    ? 'row-resize'\n    : 'col-resize'\n}\n\nfunction onTiggerResize(direction: DirectionType, entry: ResizeObserverEntry) {\n  const { width, height } = entry.contentRect\n  const size = isHorizontal(direction) ? height : width\n  record.padding[direction] = size\n  paddingStyles[`padding-${direction}` as PaddingCSSProperties] = `${size}px`\n}\n</script>\n"],"names":["_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_unref","_withCtx","_renderSlot","_Fragment","_renderList","width","height"],"mappings":"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"}