vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 2.84 kB
Source Map (JSON)
{"version":3,"file":"useSplitDragger.mjs","sources":["../../../../../src/components/va-split/useSplitDragger.ts"],"sourcesContent":["import { ExtractPropTypes, ref, Ref } from 'vue'\n\nimport { useEvent } from '../../composables'\n\nexport const useSplitDraggerProps = {\n vertical: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n}\n\nexport const useSplitDragger = (\n containerSizeComputed: Ref<number | undefined>,\n splitterPositionComputed: Ref<number>,\n props: ExtractPropTypes<typeof useSplitDraggerProps>,\n) => {\n const isDragging = ref(false)\n const dragStartPosition = ref(0)\n const dragStartSplitterPosition = ref(0)\n const currentSplitterPosition = ref(0)\n\n const getEventPosition = (e: MouseEvent | TouchEvent, eventName: 'mousemove' | 'mousedown'): number => {\n const event = e.type === eventName ? e as MouseEvent : (e as TouchEvent).changedTouches[0]\n return props.vertical ? event.pageY : event.pageX\n }\n\n const startDragging = (e: MouseEvent | TouchEvent) => {\n if (props.disabled || !containerSizeComputed.value) { return }\n\n isDragging.value = true\n dragStartPosition.value = getEventPosition(e, 'mousedown')\n dragStartSplitterPosition.value = splitterPositionComputed.value\n }\n\n const processDragging = (e: MouseEvent | TouchEvent) => {\n if (!isDragging.value) { return }\n\n const currentPosition = getEventPosition(e, 'mousemove')\n const distance = currentPosition - dragStartPosition.value\n currentSplitterPosition.value = dragStartSplitterPosition.value + Math.floor((distance / containerSizeComputed.value!) * 100)\n }\n\n const stopDragging = () => {\n isDragging.value = false\n }\n\n useEvent(['mousemove', 'touchmove'], processDragging)\n useEvent(['mouseup', 'touchcancel'], stopDragging)\n\n return { isDragging, startDragging, currentSplitterPosition }\n}\n"],"names":[],"mappings":";;AAIO,MAAM,uBAAuB;AAAA,EAClC,UAAU,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC1C,UAAU,EAAE,MAAM,SAAS,SAAS,MAAM;AAC5C;AAEO,MAAM,kBAAkB,CAC7B,uBACA,0BACA,UACG;AACG,QAAA,aAAa,IAAI,KAAK;AACtB,QAAA,oBAAoB,IAAI,CAAC;AACzB,QAAA,4BAA4B,IAAI,CAAC;AACjC,QAAA,0BAA0B,IAAI,CAAC;AAE/B,QAAA,mBAAmB,CAAC,GAA4B,cAAiD;AACrG,UAAM,QAAQ,EAAE,SAAS,YAAY,IAAmB,EAAiB,eAAe,CAAC;AACzF,WAAO,MAAM,WAAW,MAAM,QAAQ,MAAM;AAAA,EAAA;AAGxC,QAAA,gBAAgB,CAAC,MAA+B;AACpD,QAAI,MAAM,YAAY,CAAC,sBAAsB,OAAO;AAAE;AAAA,IAAO;AAE7D,eAAW,QAAQ;AACD,sBAAA,QAAQ,iBAAiB,GAAG,WAAW;AACzD,8BAA0B,QAAQ,yBAAyB;AAAA,EAAA;AAGvD,QAAA,kBAAkB,CAAC,MAA+B;AAClD,QAAA,CAAC,WAAW,OAAO;AAAE;AAAA,IAAO;AAE1B,UAAA,kBAAkB,iBAAiB,GAAG,WAAW;AACjD,UAAA,WAAW,kBAAkB,kBAAkB;AAC7B,4BAAA,QAAQ,0BAA0B,QAAQ,KAAK,MAAO,WAAW,sBAAsB,QAAU,GAAG;AAAA,EAAA;AAG9H,QAAM,eAAe,MAAM;AACzB,eAAW,QAAQ;AAAA,EAAA;AAGrB,WAAS,CAAC,aAAa,WAAW,GAAG,eAAe;AACpD,WAAS,CAAC,WAAW,aAAa,GAAG,YAAY;AAE1C,SAAA,EAAE,YAAY,eAAe;AACtC;"}