{"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\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 = 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: 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","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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"}