{"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  shallowRef,\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\nimport type { GridItemProps } from './types'\n\nconst props = withDefaults(defineProps<GridItemProps>(), {\n  isDraggable: undefined,\n  isResizable: undefined,\n  isBounded: undefined,\n  static: false,\n  minH: 1,\n  minW: 1,\n  maxH: Infinity,\n  maxW: Infinity,\n  dragIgnoreFrom: 'a, button',\n  dragAllowFrom: undefined,\n  resizeIgnoreFrom: 'a, button',\n  preserveAspectRatio: false,\n  dragOption: () => ({}),\n  resizeOption: () => ({}),\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 = shallowRef<InstanceType<\n  typeof import('@interactjs/types').Interactable\n> | null>(null)\n\nconst state = reactive({\n  cols: 1,\n  containerWidth: 100,\n  rowHeight: 30,\n  margin: [10, 10],\n  maxRows: Infinity,\n  draggable: undefined as boolean | undefined,\n  resizable: undefined as boolean | undefined,\n  bounded: undefined as boolean | undefined,\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()\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: renderRtl.value ? `.${resizerClass.value[0]}` : false,\n        right: !renderRtl.value ? `.${resizerClass.value[0]}` : false,\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","shallowRef","state","reactive","dragEventSet","resizeEventSet","lastX","lastY","lastW","lastH","previousW","previousH","previousX","previousY","innerX","innerY","innerW","innerH","wrapper","ref","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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"}