element-plus
Version:
A Component Library for Vue 3
1 lines • 9.47 kB
Source Map (JSON)
{"version":3,"file":"split-bar.vue2.mjs","sources":["../../../../../../packages/components/splitter/src/split-bar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport {\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n} from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\n\nconst ns = useNamespace('splitter-bar')\n\ndefineOptions({\n name: 'ElSplitterBar',\n})\n\nconst props = defineProps({\n index: {\n type: Number,\n required: true,\n },\n layout: {\n type: String,\n values: ['horizontal', 'vertical'] as const,\n default: 'horizontal',\n },\n resizable: {\n type: Boolean,\n default: true,\n },\n lazy: Boolean,\n startCollapsible: Boolean,\n endCollapsible: Boolean,\n})\n\nconst emit = defineEmits(['moveStart', 'moving', 'moveEnd', 'collapse'])\n\nconst isHorizontal = computed(() => props.layout === 'horizontal')\n\nconst barWrapStyles = computed(() => {\n if (isHorizontal.value) {\n return { width: 0 }\n }\n return { height: 0 }\n})\n\nconst draggerStyles = computed(() => {\n return {\n width: isHorizontal.value ? '16px' : '100%',\n height: isHorizontal.value ? '100%' : '16px',\n cursor: !props.resizable\n ? 'auto'\n : isHorizontal.value\n ? 'ew-resize'\n : 'ns-resize',\n touchAction: 'none',\n }\n})\n\nconst draggerPseudoClass = computed(() => {\n const prefix = ns.e('dragger')\n return {\n [`${prefix}-horizontal`]: isHorizontal.value,\n [`${prefix}-vertical`]: !isHorizontal.value,\n [`${prefix}-active`]: !!startPos.value,\n }\n})\n\nconst startPos = ref<[x: number, y: number] | null>(null)\n\n// Start dragging\nconst onMousedown = (e: MouseEvent) => {\n if (!props.resizable) return\n startPos.value = [e.pageX, e.pageY]\n emit('moveStart', props.index)\n window.addEventListener('mouseup', onMouseUp)\n window.addEventListener('mousemove', onMouseMove)\n}\n\nconst onTouchStart = (e: TouchEvent) => {\n if (props.resizable && e.touches.length === 1) {\n e.preventDefault()\n const touch = e.touches[0]\n startPos.value = [touch.pageX, touch.pageY]\n emit('moveStart', props.index)\n window.addEventListener('touchend', onTouchEnd)\n window.addEventListener('touchmove', onTouchMove)\n }\n}\n\n// During dragging\nconst onMouseMove = (e: MouseEvent) => {\n const { pageX, pageY } = e\n const offsetX = pageX - startPos.value![0]\n const offsetY = pageY - startPos.value![1]\n const offset = isHorizontal.value ? offsetX : offsetY\n emit('moving', props.index, offset)\n}\n\nconst onTouchMove = (e: TouchEvent) => {\n if (e.touches.length === 1) {\n e.preventDefault()\n const touch = e.touches[0]\n const offsetX = touch.pageX - startPos.value![0]\n const offsetY = touch.pageY - startPos.value![1]\n const offset = isHorizontal.value ? offsetX : offsetY\n emit('moving', props.index, offset)\n }\n}\n\n// End dragging\nconst onMouseUp = () => {\n startPos.value = null\n window.removeEventListener('mouseup', onMouseUp)\n window.removeEventListener('mousemove', onMouseMove)\n emit('moveEnd', props.index)\n}\n\nconst onTouchEnd = () => {\n startPos.value = null\n window.removeEventListener('touchend', onTouchEnd)\n window.removeEventListener('touchmove', onTouchMove)\n emit('moveEnd', props.index)\n}\n\nconst StartIcon = computed(() => (isHorizontal.value ? ArrowLeft : ArrowUp))\nconst EndIcon = computed(() => (isHorizontal.value ? ArrowRight : ArrowDown))\n</script>\n\n<template>\n <div :class=\"[ns.b()]\" :style=\"barWrapStyles\">\n <div\n v-if=\"startCollapsible\"\n :class=\"[ns.e('collapse-icon'), ns.e(`${layout}-collapse-icon-start`)]\"\n @click=\"emit('collapse', index, 'start')\"\n >\n <slot name=\"start-collapsible\">\n <component :is=\"StartIcon\" style=\"width: 12px; height: 12px\" />\n </slot>\n </div>\n\n <div\n :class=\"[\n ns.e('dragger'),\n draggerPseudoClass,\n ns.is('disabled', !resizable),\n ns.is('lazy', resizable && lazy),\n ]\"\n :style=\"draggerStyles\"\n @mousedown=\"onMousedown\"\n @touchstart=\"onTouchStart\"\n />\n <div\n v-if=\"endCollapsible\"\n :class=\"[ns.e('collapse-icon'), ns.e(`${layout}-collapse-icon-end`)]\"\n @click=\"emit('collapse', index, 'end')\"\n >\n <slot name=\"end-collapsible\">\n <component :is=\"EndIcon\" style=\"width: 12px; height: 12px\" />\n </slot>\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_unref","_renderSlot","_openBlock","_createBlock","_resolveDynamicComponent","_createElementVNode"],"mappings":"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"}