1 line
5.8 KiB
Plaintext
1 line
5.8 KiB
Plaintext
{"version":3,"file":"useResizable.mjs","sources":["../../../../../../../packages/components/drawer/src/composables/useResizable.ts"],"sourcesContent":["import { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { addUnit } from '@element-plus/utils'\nimport { clamp, useEventListener, useWindowSize } from '@vueuse/core'\n\nimport type { Ref } from 'vue'\nimport type { DrawerProps } from '../drawer'\n\nexport function useResizable(\n props: DrawerProps,\n target: Ref<HTMLElement | undefined>\n) {\n const { width, height } = useWindowSize()\n\n const isHorizontal = computed(() => ['ltr', 'rtl'].includes(props.direction))\n const sign = computed(() =>\n ['ltr', 'ttb'].includes(props.direction) ? 1 : -1\n )\n const windowSize = computed(() =>\n isHorizontal.value ? width.value : height.value\n )\n const getSize = computed(() => {\n return clamp(\n startSize.value + sign.value * offset.value,\n 4,\n windowSize.value\n )\n })\n\n const startSize = ref(0)\n const offset = ref(0)\n const isResizing = ref(false)\n const hasStartedDragging = ref(false)\n let startPos: number[] = []\n let cleanups: (() => void)[] = []\n\n const getActualSize = () => {\n const drawerEl = target.value?.closest('[aria-modal=\"true\"]') as HTMLElement\n if (drawerEl) {\n return isHorizontal.value ? drawerEl.offsetWidth : drawerEl.offsetHeight\n }\n return 100\n }\n\n watch(\n () => [props.size, props.resizable] as const,\n () => {\n hasStartedDragging.value = false\n startSize.value = 0\n offset.value = 0\n onMouseUp()\n }\n )\n\n const onMousedown = (e: MouseEvent) => {\n if (!props.resizable) return\n\n if (!hasStartedDragging.value) {\n startSize.value = getActualSize()\n hasStartedDragging.value = true\n }\n\n startPos = [e.pageX, e.pageY]\n isResizing.value = true\n cleanups.push(\n useEventListener(window, 'mouseup', onMouseUp),\n useEventListener(window, 'mousemove', onMouseMove)\n )\n }\n\n const onMouseMove = (e: MouseEvent) => {\n const { pageX, pageY } = e\n const offsetX = pageX - startPos[0]\n const offsetY = pageY - startPos[1]\n offset.value = isHorizontal.value ? offsetX : offsetY\n }\n\n const onMouseUp = () => {\n startPos = []\n startSize.value = getSize.value\n offset.value = 0\n isResizing.value = false\n cleanups.forEach((cleanup) => cleanup?.())\n cleanups = []\n }\n\n const cleanup = useEventListener(target, 'mousedown', onMousedown)\n\n onBeforeUnmount(() => {\n cleanup()\n onMouseUp()\n })\n\n return {\n size: computed(() => {\n return hasStartedDragging.value\n ? `${getSize.value}px`\n : addUnit(props.size)\n }),\n isResizing,\n isHorizontal,\n }\n}\n"],"names":[],"mappings":"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"} |