UNPKG

grid-layout-plus

Version:

<p align="center"> <a href="https://grid-layout-plus.netlify.app/" target="_blank" rel="noopener noreferrer"> <img src="./docs/public/grid-layout-plus.svg" width="180" style="width: 120px;" /> </a> </p>

1 lines 39.7 kB
{"version":3,"file":"grid-item.vue.mjs","sources":["../../src/components/grid-item.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n inject,\n onBeforeMount,\n onBeforeUnmount,\n onMounted,\n reactive,\n ref,\n toRef,\n watch,\n watchEffect\n} from 'vue'\n\nimport { isNull, nextTickOnce, throttle } from '@vexip-ui/utils'\nimport {\n EMITTER_KEY,\n LAYOUT_KEY,\n setTopLeft,\n setTopRight,\n setTransform,\n setTransformRtl,\n useNameHelper\n} from '../helpers/common'\nimport { createCoreData, getControlPosition } from '../helpers/draggable'\nimport { getColsFromBreakpoint } from '../helpers/responsive'\nimport { getDocumentDir } from '../helpers/dom'\n\nimport interact from 'interactjs'\n\nconst props = defineProps({\n isDraggable: {\n type: Boolean,\n default: null\n },\n isResizable: {\n type: Boolean,\n default: null\n },\n isBounded: {\n type: Boolean,\n default: null\n },\n static: {\n type: Boolean,\n default: false\n },\n minH: {\n type: Number,\n default: 1\n },\n minW: {\n type: Number,\n default: 1\n },\n maxH: {\n type: Number,\n default: Infinity\n },\n maxW: {\n type: Number,\n default: Infinity\n },\n x: {\n type: Number,\n required: true\n },\n y: {\n type: Number,\n required: true\n },\n w: {\n type: Number,\n required: true\n },\n h: {\n type: Number,\n required: true\n },\n i: {\n type: [Number, String],\n required: true\n },\n dragIgnoreFrom: {\n type: String,\n default: 'a, button'\n },\n dragAllowFrom: {\n type: String,\n default: null\n },\n resizeIgnoreFrom: {\n type: String,\n default: 'a, button'\n },\n preserveAspectRatio: {\n type: Boolean,\n default: false\n },\n dragOption: {\n type: Object,\n default: () => ({})\n },\n resizeOption: {\n type: Object,\n default: () => ({})\n }\n})\n\nconst emit = defineEmits(['container-resized', 'resize', 'resized', 'move', 'moved'])\n\nconst layout = inject(LAYOUT_KEY)\nconst emitter = inject(EMITTER_KEY)!\n\nif (!layout) {\n throw new Error('[grid-layout-plus]: missing layout store, GridItem must under a GridLayout.')\n}\n\nconst interactObj = ref<InstanceType<typeof import('@interactjs/types').Interactable> | null>(null)\n\nconst state = reactive({\n cols: 1,\n containerWidth: 100,\n rowHeight: 30,\n margin: [10, 10],\n maxRows: Infinity,\n draggable: null as boolean | null,\n resizable: null as boolean | null,\n bounded: null as boolean | null,\n transformScale: 1,\n useCssTransforms: true,\n useStyleCursor: true,\n\n isDragging: false,\n dragging: {\n top: -1,\n left: -1\n },\n isResizing: false,\n resizing: {\n width: -1,\n height: -1\n },\n style: {} as Record<string, string>,\n rtl: false\n})\n\nlet dragEventSet = false\nlet resizeEventSet = false\n\nlet lastX = NaN\nlet lastY = NaN\nlet lastW = NaN\nlet lastH = NaN\n\nlet previousW = -1\nlet previousH = -1\nlet previousX = -1\nlet previousY = -1\n\nlet innerX = props.x\nlet innerY = props.y\nlet innerW = props.w\nlet innerH = props.h\n\nconst wrapper = ref<HTMLElement>()\n\nconst instance = reactive({\n i: toRef(props, 'i'),\n state,\n wrapper,\n calcXY\n})\n\nfunction updateWidthHandler(width: number) {\n updateWidth(width)\n}\n\nfunction compactHandler() {\n compact()\n}\n\nfunction setDraggableHandler(isDraggable: boolean) {\n if (isNull(props.isDraggable)) {\n state.draggable = isDraggable\n }\n}\n\nfunction setResizableHandler(isResizable: boolean) {\n if (isNull(props.isResizable)) {\n state.resizable = isResizable\n }\n}\n\nfunction setBoundedHandler(isBounded: boolean) {\n if (isNull(props.isBounded)) {\n state.bounded = isBounded\n }\n}\n\nfunction setTransformScaleHandler(transformScale: number) {\n state.transformScale = transformScale\n}\n\nfunction setRowHeightHandler(rowHeight: number) {\n state.rowHeight = rowHeight\n}\n\nfunction setMaxRowsHandler(maxRows: number) {\n state.maxRows = maxRows\n}\n\nfunction directionchangeHandler() {\n state.rtl = getDocumentDir() === 'rtl'\n compact()\n}\n\nfunction setColNum(colNum: number) {\n state.cols = Math.floor(colNum)\n}\n\nlayout.increaseItem(instance)\n\nonBeforeMount(() => {\n state.rtl = getDocumentDir() === 'rtl'\n})\n\nonMounted(() => {\n if (layout.responsive && layout.lastBreakpoint) {\n state.cols = getColsFromBreakpoint(layout.lastBreakpoint, layout.cols)\n } else {\n state.cols = layout.colNum\n }\n state.rowHeight = layout.rowHeight\n state.containerWidth = layout.width !== null ? layout.width : 100\n state.margin = layout.margin !== undefined ? layout.margin.map(Number) : [10, 10]\n state.maxRows = layout.maxRows\n\n if (isNull(props.isDraggable)) {\n state.draggable = layout.isDraggable\n } else {\n state.draggable = props.isDraggable\n }\n if (isNull(props.isResizable)) {\n state.resizable = layout.isResizable\n } else {\n state.resizable = props.isResizable\n }\n if (isNull(props.isBounded)) {\n state.bounded = layout.isBounded\n } else {\n state.bounded = props.isBounded\n }\n state.transformScale = layout.transformScale\n state.useCssTransforms = layout.useCssTransforms\n state.useStyleCursor = layout.useStyleCursor\n\n watchEffect(() => {\n innerX = props.x\n innerY = props.y\n innerH = props.h\n innerW = props.w\n nextTickOnce(createStyle)\n })\n\n emitter.on('updateWidth', updateWidthHandler)\n emitter.on('compact', compactHandler)\n emitter.on('setDraggable', setDraggableHandler)\n emitter.on('setResizable', setResizableHandler)\n emitter.on('setBounded', setBoundedHandler)\n emitter.on('setTransformScale', setTransformScaleHandler)\n emitter.on('setRowHeight', setRowHeightHandler)\n emitter.on('setMaxRows', setMaxRowsHandler)\n emitter.on('directionchange', directionchangeHandler)\n emitter.on('setColNum', setColNum)\n})\n\nonBeforeUnmount(() => {\n emitter.off('updateWidth', updateWidthHandler)\n emitter.off('compact', compactHandler)\n emitter.off('setDraggable', setDraggableHandler)\n emitter.off('setResizable', setResizableHandler)\n emitter.off('setBounded', setBoundedHandler)\n emitter.off('setTransformScale', setTransformScaleHandler)\n emitter.off('setRowHeight', setRowHeightHandler)\n emitter.off('setMaxRows', setMaxRowsHandler)\n emitter.off('directionchange', directionchangeHandler)\n emitter.off('setColNum', setColNum)\n\n if (interactObj.value) {\n interactObj.value.unset() // destroy interact intance\n interactObj.value = null\n }\n\n layout.decreaseItem(instance)\n})\n\ndefineExpose({ state, wrapper })\n\nconst isAndroid =\n typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().includes('android') : false\n\nconst resizableAndNotStatic = computed(() => state.resizable && !props.static)\nconst renderRtl = computed(() => (layout.isMirrored ? !state.rtl : state.rtl))\nconst draggableOrResizableAndNotStatic = computed(() => {\n return (state.draggable || state.resizable) && !props.static\n})\n\nconst nh = useNameHelper('item')\n\nconst className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.bm('resizable')]: resizableAndNotStatic.value,\n [nh.bm('static')]: props.static,\n [nh.bm('resizing')]: state.isResizing,\n [nh.bm('dragging')]: state.isDragging,\n [nh.bm('transform')]: state.useCssTransforms,\n [nh.bm('rtl')]: renderRtl.value,\n [nh.bm('no-touch')]: isAndroid && draggableOrResizableAndNotStatic.value\n }\n})\nconst resizerClass = computed(() => {\n // return renderRtl.value ? 'vue-resizable-handle vue-rtl-resizable-handle' : 'vue-resizable-handle'\n return [nh.be('resizer'), renderRtl.value && nh.bem('resizer', 'rtl')].filter(Boolean)\n})\n\nwatch(\n () => props.isDraggable,\n value => {\n state.draggable = value\n }\n)\nwatch(\n () => props.static,\n () => {\n nextTickOnce(tryMakeDraggable)\n nextTickOnce(tryMakeResizable)\n }\n)\nwatch(\n () => state.draggable,\n () => {\n nextTickOnce(tryMakeDraggable)\n }\n)\nwatch(\n () => props.isResizable,\n value => {\n state.resizable = value\n }\n)\nwatch(\n () => props.isBounded,\n value => {\n state.bounded = value\n }\n)\nwatch(\n () => state.resizable,\n () => {\n nextTickOnce(tryMakeResizable)\n }\n)\nwatch(\n () => state.rowHeight,\n () => {\n nextTickOnce(createStyle)\n nextTickOnce(emitContainerResized)\n }\n)\nwatch([() => state.cols, () => state.containerWidth], () => {\n nextTickOnce(tryMakeResizable)\n nextTickOnce(createStyle)\n nextTickOnce(emitContainerResized)\n})\nwatch([() => props.minH, () => props.maxH, () => props.minW, () => props.maxW], () => {\n nextTickOnce(tryMakeResizable)\n})\nwatch(renderRtl, () => {\n nextTickOnce(tryMakeResizable)\n nextTickOnce(createStyle)\n})\nwatch([() => layout.margin, () => layout.margin[0], () => layout.margin[1]], () => {\n const margin = layout.margin\n\n if (!margin || (margin[0] === state.margin[0] && margin[1] === state.margin[1])) {\n return\n }\n\n state.margin = margin.map(Number)\n nextTickOnce(createStyle)\n nextTickOnce(emitContainerResized)\n})\n\nfunction createStyle() {\n if (props.x + props.w > state.cols) {\n innerX = 0\n innerW = props.w > state.cols ? state.cols : props.w\n } else {\n innerX = props.x\n innerW = props.w\n }\n\n const pos = calcPosition(innerX, innerY, innerW, innerH)\n\n if (state.isDragging) {\n pos.top = state.dragging.top\n // Add rtl support\n if (renderRtl.value) {\n pos.right = state.dragging.left\n } else {\n pos.left = state.dragging.left\n }\n }\n if (state.isResizing) {\n pos.width = state.resizing.width\n pos.height = state.resizing.height\n }\n\n let style\n // CSS Transforms support (default)\n if (state.useCssTransforms) {\n // Add rtl support\n if (renderRtl.value) {\n style = setTransformRtl(pos.top, pos.right!, pos.width, pos.height)\n } else {\n style = setTransform(pos.top, pos.left!, pos.width, pos.height)\n }\n } else {\n // top,left (slow)\n // Add rtl support\n if (renderRtl.value) {\n style = setTopRight(pos.top, pos.right!, pos.width, pos.height)\n } else {\n style = setTopLeft(pos.top, pos.left!, pos.width, pos.height)\n }\n }\n\n state.style = style\n}\n\nfunction emitContainerResized() {\n // this.style has width and height with trailing 'px'. The\n // resized event is without them\n const styleProps: Record<string, string> = {}\n for (const prop of ['width', 'height']) {\n const val = state.style[prop]\n const matches = val.match(/^(\\d+)px$/)\n if (!matches) {\n return\n }\n styleProps[prop] = matches[1]\n }\n emit('container-resized', props.i, props.h, props.w, styleProps.height, styleProps.width)\n}\n\nfunction handleResize(event: MouseEvent & { edges: any }) {\n if (props.static) return\n\n const type = event.type\n if (\n (type === 'resizestart' && state.isResizing) ||\n (type !== 'resizestart' && !state.isResizing)\n ) {\n return\n }\n\n const position = getControlPosition(event)\n // Get the current drag point from the event. This is used as the offset.\n if (isNull(position)) return // not possible but satisfies flow\n\n const { x, y } = position\n const newSize = { width: 0, height: 0 }\n let pos\n switch (type) {\n case 'resizestart': {\n tryMakeResizable()\n previousW = innerW\n previousH = innerH\n pos = calcPosition(innerX, innerY, innerW, innerH)\n newSize.width = pos.width\n newSize.height = pos.height\n state.resizing = newSize\n state.isResizing = true\n break\n }\n case 'resizemove': {\n // A vertical resize ignores the horizontal delta\n if (!event.edges.right && !event.edges.left) {\n lastW = x\n }\n\n // An horizontal resize ignores the vertical delta\n if (!event.edges.top && !event.edges.bottom) {\n lastH = y\n }\n\n const coreEvent = createCoreData(lastW, lastH, x, y)\n if (renderRtl.value) {\n newSize.width = state.resizing.width - coreEvent.deltaX / state.transformScale\n } else {\n newSize.width = state.resizing.width + coreEvent.deltaX / state.transformScale\n }\n newSize.height = state.resizing.height + coreEvent.deltaY / state.transformScale\n state.resizing = newSize\n break\n }\n case 'resizeend': {\n pos = calcPosition(innerX, innerY, innerW, innerH)\n newSize.width = pos.width\n newSize.height = pos.height\n\n state.resizing = { width: -1, height: -1 }\n state.isResizing = false\n break\n }\n }\n\n // Get new WH\n pos = calcWH(newSize.height, newSize.width)\n if (pos.w < props.minW) {\n pos.w = props.minW\n }\n if (pos.w > props.maxW) {\n pos.w = props.maxW\n }\n if (pos.h < props.minH) {\n pos.h = props.minH\n }\n if (pos.h > props.maxH) {\n pos.h = props.maxH\n }\n\n if (pos.h < 1) {\n pos.h = 1\n }\n if (pos.w < 1) {\n pos.w = 1\n }\n\n lastW = x\n lastH = y\n\n if (innerW !== pos.w || innerH !== pos.h) {\n emit('resize', props.i, pos.h, pos.w, newSize.height, newSize.width)\n }\n if (event.type === 'resizeend' && (previousW !== innerW || previousH !== innerH)) {\n emit('resized', props.i, pos.h, pos.w, newSize.height, newSize.width)\n }\n emitter.emit('resizeEvent', event.type, props.i, innerX, innerY, pos.h, pos.w)\n}\n\nfunction handleDrag(event: MouseEvent) {\n if (props.static || state.isResizing) return\n\n const type = event.type\n if ((type === 'dragstart' && state.isDragging) || (type !== 'dragstart' && !state.isDragging)) {\n return\n }\n\n const position = getControlPosition(event)\n\n // Get the current drag point from the event. This is used as the offset.\n if (isNull(position)) return // not possible but satisfies flow\n const { x, y } = position\n const target = event.target as HTMLElement\n\n if (!target.offsetParent) return\n\n // let shouldUpdate = false;\n const newPosition = { top: 0, left: 0 }\n switch (type) {\n case 'dragstart': {\n previousX = innerX\n previousY = innerY\n\n const parentRect = target.offsetParent.getBoundingClientRect()\n const clientRect = target.getBoundingClientRect()\n\n const cLeft = clientRect.left / state.transformScale\n const pLeft = parentRect.left / state.transformScale\n const cRight = clientRect.right / state.transformScale\n const pRight = parentRect.right / state.transformScale\n const cTop = clientRect.top / state.transformScale\n const pTop = parentRect.top / state.transformScale\n\n if (renderRtl.value) {\n newPosition.left = (cRight - pRight) * -1\n } else {\n newPosition.left = cLeft - pLeft\n }\n newPosition.top = cTop - pTop\n state.dragging = newPosition\n state.isDragging = true\n break\n }\n case 'dragmove': {\n const coreEvent = createCoreData(lastX, lastY, x, y)\n // Add rtl support\n if (renderRtl.value) {\n newPosition.left = state.dragging.left - coreEvent.deltaX / state.transformScale\n } else {\n newPosition.left = state.dragging.left + coreEvent.deltaX / state.transformScale\n }\n newPosition.top = state.dragging.top + coreEvent.deltaY / state.transformScale\n if (state.bounded) {\n const bottomBoundary =\n target.offsetParent.clientHeight -\n calcGridItemWHPx(props.h, state.rowHeight, state.margin[1])\n newPosition.top = clamp(newPosition.top, 0, bottomBoundary)\n const colWidth = calcColWidth()\n const rightBoundary =\n state.containerWidth - calcGridItemWHPx(props.w, colWidth, state.margin[0])\n newPosition.left = clamp(newPosition.left, 0, rightBoundary)\n }\n\n state.dragging = newPosition\n break\n }\n case 'dragend': {\n const parentRect = target.offsetParent.getBoundingClientRect()\n const clientRect = target.getBoundingClientRect()\n\n const cLeft = clientRect.left / state.transformScale\n const pLeft = parentRect.left / state.transformScale\n const cRight = clientRect.right / state.transformScale\n const pRight = parentRect.right / state.transformScale\n const cTop = clientRect.top / state.transformScale\n const pTop = parentRect.top / state.transformScale\n\n // Add rtl support\n if (renderRtl.value) {\n newPosition.left = (cRight - pRight) * -1\n } else {\n newPosition.left = cLeft - pLeft\n }\n newPosition.top = cTop - pTop\n state.dragging = { top: -1, left: -1 }\n state.isDragging = false\n break\n }\n }\n\n // Get new XY\n let pos\n if (renderRtl.value) {\n pos = calcXY(newPosition.top, newPosition.left)\n } else {\n pos = calcXY(newPosition.top, newPosition.left)\n }\n\n lastX = x\n lastY = y\n\n if (innerX !== pos.x || innerY !== pos.y) {\n emit('move', props.i, pos.x, pos.y)\n }\n if (event.type === 'dragend' && (previousX !== innerX || previousY !== innerY)) {\n emit('moved', props.i, pos.x, pos.y)\n }\n emitter.emit('dragEvent', event.type, props.i, pos.x, pos.y, innerH, innerW)\n}\n\nfunction calcPosition(x: number, y: number, w: number, h: number) {\n const colWidth = calcColWidth()\n // add rtl support\n let out\n if (renderRtl.value) {\n out = {\n right: Math.round(colWidth * x + (x + 1) * state.margin[0]),\n top: Math.round(state.rowHeight * y + (y + 1) * state.margin[1]),\n // 0 * Infinity === NaN, which causes problems with resize constraints;\n // Fix this if it occurs.\n // Note we do it here rather than later because Math.round(Infinity) causes depot\n width: w === Infinity ? w : Math.round(colWidth * w + Math.max(0, w - 1) * state.margin[0]),\n height:\n h === Infinity ? h : Math.round(state.rowHeight * h + Math.max(0, h - 1) * state.margin[1])\n }\n } else {\n out = {\n left: Math.round(colWidth * x + (x + 1) * state.margin[0]),\n top: Math.round(state.rowHeight * y + (y + 1) * state.margin[1]),\n // 0 * Infinity === NaN, which causes problems with resize constraints;\n // Fix this if it occurs.\n // Note we do it here rather than later because Math.round(Infinity) causes depot\n width: w === Infinity ? w : Math.round(colWidth * w + Math.max(0, w - 1) * state.margin[0]),\n height:\n h === Infinity ? h : Math.round(state.rowHeight * h + Math.max(0, h - 1) * state.margin[1])\n }\n }\n\n return out\n}\n\n/**\n * Translate x and y coordinates from pixels to grid units.\n * @param top Top position (relative to parent) in pixels.\n * @param left Left position (relative to parent) in pixels.\n * @return x and y in grid units.\n */\n// TODO check if this function needs change in order to support rtl.\nfunction calcXY(top: number, left: number) {\n const colWidth = calcColWidth()\n\n // left = colWidth * x + margin * (x + 1)\n // l = cx + m(x+1)\n // l = cx + mx + m\n // l - m = cx + mx\n // l - m = x(c + m)\n // (l - m) / (c + m) = x\n // x = (left - margin) / (coldWidth + margin)\n let x = Math.round((left - state.margin[0]) / (colWidth + state.margin[0]))\n let y = Math.round((top - state.margin[1]) / (state.rowHeight + state.margin[1]))\n\n // Capping\n x = Math.max(Math.min(x, state.cols - innerW), 0)\n y = Math.max(Math.min(y, state.maxRows - innerH), 0)\n\n return { x, y }\n}\n\nfunction calcColWidth() {\n return (state.containerWidth - state.margin[0] * (state.cols + 1)) / state.cols\n}\n\nfunction calcGridItemWHPx(gridUnits: number, colOrRowSize: number, marginPx: number) {\n // 0 * Infinity === NaN, which causes problems with resize constraints\n if (!Number.isFinite(gridUnits)) return gridUnits\n return Math.round(colOrRowSize * gridUnits + Math.max(0, gridUnits - 1) * marginPx)\n}\n\nfunction clamp(num: number, lowerBound: number, upperBound: number) {\n return Math.max(Math.min(num, upperBound), lowerBound)\n}\n\n/**\n * Given a height and width in pixel values, calculate grid units.\n * @param height Height in pixels.\n * @param width Width in pixels.\n * @param autoSizeFlag function autoSize identifier.\n * @return w, h as grid units.\n */\nfunction calcWH(height: number, width: number, autoSizeFlag = false) {\n const colWidth = calcColWidth()\n\n // width = colWidth * w - (margin * (w - 1))\n // ...\n // w = (width + margin) / (colWidth + margin)\n let w = Math.round((width + state.margin[0]) / (colWidth + state.margin[0]))\n let h = 0\n if (!autoSizeFlag) {\n h = Math.round((height + state.margin[1]) / (state.rowHeight + state.margin[1]))\n } else {\n h = Math.ceil((height + state.margin[1]) / (state.rowHeight + state.margin[1]))\n }\n\n // Capping\n w = Math.max(Math.min(w, state.cols - innerX), 0)\n h = Math.max(Math.min(h, state.maxRows - innerY), 0)\n return { w, h }\n}\n\nfunction updateWidth(width: number, colNum?: number) {\n state.containerWidth = width\n if (colNum !== undefined && colNum !== null) {\n state.cols = colNum\n }\n}\n\nfunction compact() {\n createStyle()\n}\n\nfunction tryInteract() {\n if (!interactObj.value && wrapper.value) {\n interactObj.value = interact(wrapper.value)\n if (!state.useStyleCursor) {\n interactObj.value.styleCursor(false)\n }\n }\n}\n\nconst throttleDrag = throttle(handleDrag)\n\nfunction tryMakeDraggable() {\n tryInteract()\n\n if (!interactObj.value) return\n\n if (state.draggable && !props.static) {\n const opts = {\n ignoreFrom: props.dragIgnoreFrom,\n allowFrom: props.dragAllowFrom,\n ...props.dragOption\n }\n interactObj.value.draggable(opts)\n\n if (!dragEventSet) {\n dragEventSet = true\n interactObj.value.on('dragstart dragmove dragend', event => {\n event.type === 'dragmove' ? throttleDrag(event) : handleDrag(event)\n })\n }\n } else {\n interactObj.value.draggable({ enabled: false })\n }\n}\n\nconst throttleResize = throttle(handleResize)\n\nfunction tryMakeResizable() {\n tryInteract()\n\n if (!interactObj.value) return\n\n if (state.resizable && !props.static) {\n const maximum = calcPosition(0, 0, props.maxW, props.maxH)\n const minimum = calcPosition(0, 0, props.minW, props.minH)\n\n const opts: Record<string, any> = {\n edges: {\n left: false,\n right: `.${resizerClass.value[0]}`,\n bottom: `.${resizerClass.value[0]}`,\n top: false\n },\n ignoreFrom: props.resizeIgnoreFrom,\n restrictSize: {\n min: {\n height: minimum.height * state.transformScale,\n width: minimum.width * state.transformScale\n },\n max: {\n height: maximum.height * state.transformScale,\n width: maximum.width * state.transformScale\n }\n },\n ...props.resizeOption\n }\n\n if (props.preserveAspectRatio) {\n opts.modifiers = [interact.modifiers.aspectRatio({ ratio: 'preserve' })]\n }\n\n interactObj.value.resizable(opts)\n if (!resizeEventSet) {\n resizeEventSet = true\n interactObj.value.on('resizestart resizemove resizeend', event => {\n event.type === 'resizemove' ? throttleResize(event) : handleResize(event)\n })\n }\n } else {\n interactObj.value.resizable({ enabled: false })\n }\n}\n</script>\n\n<template>\n <section ref=\"wrapper\" :class=\"className\" :style=\"state.style\">\n <slot></slot>\n <span v-if=\"resizableAndNotStatic\" :class=\"resizerClass\"></span>\n </section>\n</template>\n"],"names":["props","__props","emit","__emit","layout","inject","LAYOUT_KEY","emitter","EMITTER_KEY","interactObj","ref","state","reactive","dragEventSet","resizeEventSet","lastX","lastY","lastW","lastH","previousW","previousH","previousX","previousY","innerX","innerY","innerW","innerH","wrapper","instance","toRef","calcXY","updateWidthHandler","width","updateWidth","compactHandler","compact","setDraggableHandler","isDraggable","isNull","setResizableHandler","isResizable","setBoundedHandler","isBounded","setTransformScaleHandler","transformScale","setRowHeightHandler","rowHeight","setMaxRowsHandler","maxRows","directionchangeHandler","getDocumentDir","setColNum","colNum","onBeforeMount","onMounted","getColsFromBreakpoint","watchEffect","nextTickOnce","createStyle","onBeforeUnmount","__expose","isAndroid","resizableAndNotStatic","computed","renderRtl","draggableOrResizableAndNotStatic","nh","useNameHelper","className","resizerClass","watch","value","tryMakeDraggable","tryMakeResizable","emitContainerResized","margin","pos","calcPosition","style","setTransformRtl","setTransform","setTopRight","setTopLeft","styleProps","prop","matches","handleResize","event","type","position","getControlPosition","x","y","newSize","coreEvent","createCoreData","calcWH","handleDrag","target","newPosition","parentRect","clientRect","cLeft","pLeft","cRight","pRight","cTop","pTop","bottomBoundary","calcGridItemWHPx","clamp","colWidth","calcColWidth","rightBoundary","w","h","out","top","left","gridUnits","colOrRowSize","marginPx","num","lowerBound","upperBound","height","autoSizeFlag","tryInteract","interact","throttleDrag","throttle","opts","throttleResize","maximum","minimum"],"mappings":"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"}