{"version":3,"file":"angular-gridster2.mjs","sources":["../../../projects/angular-gridster2/src/lib/gridsterConfig.ts","../../../projects/angular-gridster2/src/lib/gridsterCompact.ts","../../../projects/angular-gridster2/src/lib/gridsterConfig.constant.ts","../../../projects/angular-gridster2/src/lib/gridsterUtils.ts","../../../projects/angular-gridster2/src/lib/gridsterEmptyCell.ts","../../../projects/angular-gridster2/src/lib/gridsterPreview.ts","../../../projects/angular-gridster2/src/lib/gridsterRenderer.ts","../../../projects/angular-gridster2/src/lib/gridster.ts","../../../projects/angular-gridster2/src/lib/gridster.html","../../../projects/angular-gridster2/src/lib/gridsterPush.ts","../../../projects/angular-gridster2/src/lib/gridsterScroll.ts","../../../projects/angular-gridster2/src/lib/gridsterSwap.ts","../../../projects/angular-gridster2/src/lib/gridsterDraggable.ts","../../../projects/angular-gridster2/src/lib/gridsterPushResize.ts","../../../projects/angular-gridster2/src/lib/gridsterResizable.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.html","../../../projects/angular-gridster2/src/public_api.ts","../../../projects/angular-gridster2/src/angular-gridster2.ts"],"sourcesContent":["import { Gridster } from './gridster';\nimport { GridsterItem } from './gridsterItem';\nimport { GridsterItemConfig, ResizableHandles } from './gridsterItemConfig';\n\nexport type gridTypes = 'fit' | 'scrollVertical' | 'scrollHorizontal' | 'fixed' | 'verticalFixed' | 'horizontalFixed';\nexport type displayGrids = 'always' | 'onDrag&Resize' | 'none';\nexport type compactTypes =\n  | 'none'\n  | 'compactUp'\n  | 'compactLeft'\n  | 'compactUp&Left'\n  | 'compactLeft&Up'\n  | 'compactRight'\n  | 'compactUp&Right'\n  | 'compactRight&Up'\n  | 'compactDown'\n  | 'compactDown&Left'\n  | 'compactLeft&Down'\n  | 'compactDown&Right'\n  | 'compactRight&Down'\n  | 'compactGrid';\n\nexport enum GridType {\n  Fit = 'fit',\n  ScrollVertical = 'scrollVertical',\n  ScrollHorizontal = 'scrollHorizontal',\n  Fixed = 'fixed',\n  VerticalFixed = 'verticalFixed',\n  HorizontalFixed = 'horizontalFixed'\n}\n\nexport enum DisplayGrid {\n  Always = 'always',\n  OnDragAndResize = 'onDrag&Resize',\n  None = 'none'\n}\n\nexport enum CompactType {\n  None = 'none',\n  CompactUp = 'compactUp',\n  CompactLeft = 'compactLeft',\n  CompactUpAndLeft = 'compactUp&Left',\n  CompactLeftAndUp = 'compactLeft&Up',\n  CompactRight = 'compactRight',\n  CompactUpAndRight = 'compactUp&Right',\n  CompactRightAndUp = 'compactRight&Up',\n  CompactDown = 'compactDown',\n  CompactDownAndLeft = 'compactDown&Left',\n  CompactLeftAndDown = 'compactLeft&Down',\n  CompactDownAndRight = 'compactDown&Right',\n  CompactRightAndDown = 'compactRight&Down',\n  CompactGrid = 'compactGrid'\n}\n\nexport enum DirTypes {\n  LTR = 'ltr',\n  RTL = 'rtl'\n}\n\nexport type dirTypes = 'ltr' | 'rtl';\n\nexport type GridsterApi = {\n  calculateLayout: () => void;\n  resize: () => void;\n  getNextPossiblePosition: (newItem: GridsterItemConfig, startingFrom?: { y?: number; x?: number }) => void;\n  getFirstPossiblePosition: (item: GridsterItemConfig) => GridsterItemConfig;\n  getLastPossiblePosition: (item: GridsterItemConfig) => GridsterItemConfig;\n  getItemComponent: (item: GridsterItemConfig) => GridsterItem | undefined;\n};\n\nexport type GridsterConfig = {\n  gridType?: gridTypes;\n  scale?: number;\n  fixedColWidth?: number;\n  fixedRowHeight?: number;\n  keepFixedHeightInMobile?: boolean;\n  keepFixedWidthInMobile?: boolean;\n  setGridSize?: boolean;\n  compactType?: compactTypes;\n  mobileBreakpoint?: number;\n  allowMultiLayer?: boolean;\n  defaultLayerIndex?: number;\n  maxLayerIndex?: number;\n  baseLayerIndex?: number;\n  minCols?: number;\n  maxCols?: number;\n  minRows?: number;\n  maxRows?: number;\n  defaultItemCols?: number;\n  defaultItemRows?: number;\n  itemAspectRatio?: number | null;\n  maxItemCols?: number;\n  maxItemRows?: number;\n  minItemCols?: number;\n  minItemRows?: number;\n  minItemArea?: number;\n  maxItemArea?: number;\n  addEmptyRowsCount?: number;\n  rowHeightRatio?: number;\n  margin?: number;\n  outerMargin?: boolean;\n  outerMarginTop?: number | null;\n  outerMarginRight?: number | null;\n  outerMarginBottom?: number | null;\n  outerMarginLeft?: number | null;\n  useTransformPositioning?: boolean;\n  scrollSensitivity?: number;\n  scrollSpeed?: number;\n  initCallback?: (gridster: Gridster, gridsterApi: GridsterApi) => void;\n  destroyCallback?: (gridster: Gridster) => void;\n  gridSizeChangedCallback?: (gridster: Gridster) => void;\n  itemChangeCallback?: (item: GridsterItemConfig, itemComponent: GridsterItem) => void;\n  itemResizeCallback?: (item: GridsterItemConfig, itemComponent: GridsterItem) => void;\n  itemInitCallback?: (item: GridsterItemConfig, itemComponent: GridsterItem) => void;\n  itemRemovedCallback?: (item: GridsterItemConfig, itemComponent: GridsterItem) => void;\n  itemValidateCallback?: (item: GridsterItemConfig) => boolean;\n  draggable?: Draggable;\n  resizable?: Resizable;\n  swap?: boolean;\n  swapWhileDragging?: boolean;\n  pushItems?: boolean;\n  disablePushOnDrag?: boolean;\n  disablePushOnResize?: boolean;\n  disableAutoPositionOnConflict?: boolean;\n  pushDirections?: PushDirections;\n  pushResizeItems?: boolean;\n  displayGrid?: displayGrids;\n  disableWindowResize?: boolean;\n  disableWarnings?: boolean;\n  scrollToNewItems?: boolean;\n  disableScrollHorizontal?: boolean;\n  disableScrollVertical?: boolean;\n  enableBoundaryControl?: boolean;\n  enableEmptyCellClick?: boolean;\n  enableEmptyCellContextMenu?: boolean;\n  enableEmptyCellDrop?: boolean;\n  enableEmptyCellDrag?: boolean;\n  enableOccupiedCellDrop?: boolean;\n  emptyCellClickCallback?: (event: MouseEvent, item: GridsterItemConfig) => void;\n  emptyCellContextMenuCallback?: (event: MouseEvent, item: GridsterItemConfig) => void;\n  emptyCellDropCallback?: (event: DragEvent, item: GridsterItemConfig) => void;\n  emptyCellDragCallback?: (event: MouseEvent, item: GridsterItemConfig) => void;\n  emptyCellDragMaxCols?: number;\n  emptyCellDragMaxRows?: number;\n  ignoreMarginInRow?: boolean;\n  dirType?: dirTypes;\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [propName: string]: any;\n};\n\nexport type DragBase = {\n  enabled?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  stop?: (item: GridsterItemConfig, itemComponent: GridsterItem, event: MouseEvent) => Promise<any> | void;\n  start?: (item: GridsterItemConfig, itemComponent: GridsterItem, event: MouseEvent) => void;\n  delayStart?: number;\n};\n\nexport type Draggable = DragBase & {\n  ignoreContentClass?: string;\n  ignoreContent?: boolean;\n  dragHandleClass?: string;\n  dropOverItems?: boolean;\n  dropOverItemsCallback?: (source: GridsterItemConfig, target: GridsterItemConfig, grid?: Gridster) => void;\n};\n\nexport type Resizable = DragBase & {\n  handles?: ResizableHandles;\n};\n\nexport type PushDirections = {\n  north: boolean;\n  east: boolean;\n  south: boolean;\n  west: boolean;\n};\n\nexport type GridsterConfigStrict = Required<GridsterConfig> & {\n  draggable: Required<Draggable>;\n  resizable: Required<Resizable>;\n};\n","import { Gridster } from './gridster';\nimport { CompactType } from './gridsterConfig';\nimport { GridsterItem } from './gridsterItem';\nimport { GridsterItemConfig } from './gridsterItemConfig';\n\nexport class GridsterCompact {\n  constructor(private gridster: Gridster) {}\n\n  destroy(): void {\n    this.gridster = null!;\n  }\n\n  checkCompact(): void {\n    const $options = this.gridster.$options();\n    if ($options.compactType !== CompactType.None) {\n      if ($options.compactType === CompactType.CompactUp) {\n        this.checkCompactMovement('y', -1);\n      } else if ($options.compactType === CompactType.CompactLeft) {\n        this.checkCompactMovement('x', -1);\n      } else if ($options.compactType === CompactType.CompactUpAndLeft) {\n        this.checkCompactMovement('y', -1);\n        this.checkCompactMovement('x', -1);\n      } else if ($options.compactType === CompactType.CompactLeftAndUp) {\n        this.checkCompactMovement('x', -1);\n        this.checkCompactMovement('y', -1);\n      } else if ($options.compactType === CompactType.CompactRight) {\n        this.checkCompactMovement('x', 1);\n      } else if ($options.compactType === CompactType.CompactUpAndRight) {\n        this.checkCompactMovement('y', -1);\n        this.checkCompactMovement('x', 1);\n      } else if ($options.compactType === CompactType.CompactRightAndUp) {\n        this.checkCompactMovement('x', 1);\n        this.checkCompactMovement('y', -1);\n      } else if ($options.compactType === CompactType.CompactDown) {\n        this.checkCompactMovement('y', 1);\n      } else if ($options.compactType === CompactType.CompactDownAndLeft) {\n        this.checkCompactMovement('y', 1);\n        this.checkCompactMovement('x', -1);\n      } else if ($options.compactType === CompactType.CompactDownAndRight) {\n        this.checkCompactMovement('y', 1);\n        this.checkCompactMovement('x', 1);\n      } else if ($options.compactType === CompactType.CompactLeftAndDown) {\n        this.checkCompactMovement('x', -1);\n        this.checkCompactMovement('y', 1);\n      } else if ($options.compactType === CompactType.CompactRightAndDown) {\n        this.checkCompactMovement('x', 1);\n        this.checkCompactMovement('y', 1);\n      } else if ($options.compactType === CompactType.CompactGrid) {\n        this.checkCompactGrid();\n      }\n    }\n  }\n\n  checkCompactItem(item: GridsterItemConfig): void {\n    const $options = this.gridster.$options();\n    if ($options.compactType !== CompactType.None) {\n      if ($options.compactType === CompactType.CompactUp) {\n        this.moveTillCollision(item, 'y', -1);\n      } else if ($options.compactType === CompactType.CompactLeft) {\n        this.moveTillCollision(item, 'x', -1);\n      } else if ($options.compactType === CompactType.CompactUpAndLeft) {\n        this.moveTillCollision(item, 'y', -1);\n        this.moveTillCollision(item, 'x', -1);\n      } else if ($options.compactType === CompactType.CompactLeftAndUp) {\n        this.moveTillCollision(item, 'x', -1);\n        this.moveTillCollision(item, 'y', -1);\n      } else if ($options.compactType === CompactType.CompactUpAndRight) {\n        this.moveTillCollision(item, 'y', -1);\n        this.moveTillCollision(item, 'x', 1);\n      } else if ($options.compactType === CompactType.CompactDown) {\n        this.moveTillCollision(item, 'y', 1);\n      } else if ($options.compactType === CompactType.CompactDownAndLeft) {\n        this.moveTillCollision(item, 'y', 1);\n        this.moveTillCollision(item, 'x', -1);\n      } else if ($options.compactType === CompactType.CompactLeftAndDown) {\n        this.moveTillCollision(item, 'x', -1);\n        this.moveTillCollision(item, 'y', 1);\n      } else if ($options.compactType === CompactType.CompactDownAndRight) {\n        this.moveTillCollision(item, 'y', 1);\n        this.moveTillCollision(item, 'x', 1);\n      } else if ($options.compactType === CompactType.CompactRightAndDown) {\n        this.moveTillCollision(item, 'x', 1);\n        this.moveTillCollision(item, 'y', 1);\n      } else if ($options.compactType === CompactType.CompactGrid) {\n        this.moveToGridPosition(item);\n      }\n    }\n  }\n\n  private checkCompactMovement(direction: 'x' | 'y', delta: number): void {\n    let widgetMoved = false;\n    this.gridster.grid.forEach((widget: GridsterItem) => {\n      if (widget.$item().compactEnabled !== false) {\n        const moved = this.moveTillCollision(widget.$item(), direction, delta);\n        if (moved) {\n          widgetMoved = true;\n          widget.item()[direction] = widget.$item()[direction];\n          widget.itemChanged();\n        }\n      }\n    });\n    if (widgetMoved) {\n      this.checkCompact();\n    }\n  }\n\n  private moveTillCollision(item: GridsterItemConfig, direction: 'x' | 'y', delta: number): boolean {\n    item[direction] += delta;\n    if (this.gridster.checkCollision(item)) {\n      item[direction] -= delta;\n      return false;\n    } else {\n      this.moveTillCollision(item, direction, delta);\n      return true;\n    }\n  }\n\n  private checkCompactGrid(): void {\n    // Sort items by their current position (top to bottom, left to right)\n    const sortedItems = this.gridster.grid\n      .filter((widget: GridsterItem) => widget.$item().compactEnabled !== false)\n      .sort((a: GridsterItem, b: GridsterItem) => {\n        if (a.$item().y !== b.$item().y) {\n          return a.$item().y - b.$item().y;\n        }\n        return a.$item().x - b.$item().x;\n      });\n\n    // Reposition all items in a grid-like manner\n    let currentY = 0;\n    let currentX = 0;\n    let maxYInRow = 0;\n\n    sortedItems.forEach((widget: GridsterItem) => {\n      const item = widget.$item();\n\n      // Check if item fits in current row\n      if (currentX + item.cols > this.gridster.columns) {\n        // Move to next row\n        currentY = maxYInRow;\n        currentX = 0;\n        maxYInRow = currentY;\n      }\n\n      // Position item\n      const oldX = item.x;\n      const oldY = item.y;\n      item.x = currentX;\n      item.y = currentY;\n\n      // Update widget if position changed\n      if (oldX !== item.x || oldY !== item.y) {\n        widget.item().x = item.x;\n        widget.item().y = item.y;\n        widget.itemChanged();\n      }\n\n      // Update position for next item\n      currentX += item.cols;\n      maxYInRow = Math.max(maxYInRow, currentY + item.rows);\n    });\n  }\n\n  private moveToGridPosition(item: GridsterItemConfig): void {\n    // Find the next available position in grid layout\n    let currentY = 0;\n    let currentX = 0;\n    let maxYInRow = 0;\n\n    // Sort existing items to find occupied positions\n    const sortedItems = this.gridster.grid\n      .filter((widget: GridsterItem) => widget.$item() !== item)\n      .sort((a: GridsterItem, b: GridsterItem) => {\n        if (a.$item().y !== b.$item().y) {\n          return a.$item().y - b.$item().y;\n        }\n        return a.$item().x - b.$item().x;\n      });\n\n    // Find the next available position\n    for (const widget of sortedItems) {\n      const existingItem = widget.$item();\n\n      // Check if we need to move to next row\n      if (currentX + existingItem.cols > this.gridster.columns) {\n        currentY = maxYInRow;\n        currentX = 0;\n        maxYInRow = currentY;\n      }\n\n      // Check if current item overlaps with the position we want to place our item\n      if (\n        currentY < existingItem.y + existingItem.rows &&\n        currentY + item.rows > existingItem.y &&\n        currentX < existingItem.x + existingItem.cols &&\n        currentX + item.cols > existingItem.x\n      ) {\n        // Move to position after this item\n        currentX = existingItem.x + existingItem.cols;\n        currentY = existingItem.y;\n        maxYInRow = Math.max(maxYInRow, currentY + existingItem.rows);\n      } else {\n        // Update position for next iteration\n        currentX += existingItem.cols;\n        maxYInRow = Math.max(maxYInRow, currentY + existingItem.rows);\n      }\n    }\n\n    // Check if item fits in current row\n    if (currentX + item.cols > this.gridster.columns) {\n      currentY = maxYInRow;\n      currentX = 0;\n    }\n\n    // Set the position\n    item.x = currentX;\n    item.y = currentY;\n  }\n}\n","import { CompactType, DirTypes, DisplayGrid, GridsterConfig, GridType } from './gridsterConfig';\n\nexport const GridsterConfigService: GridsterConfig = {\n  gridType: GridType.Fit, // 'fit' will fit the items in the container without scroll;\n  scale: 1, // scale param to zoom in/zoom out\n  // 'scrollVertical' will fit on width and height of the items will be the same as the width\n  // 'scrollHorizontal' will fit on height and width of the items will be the same as the height\n  // 'fixed' will set the rows and columns dimensions based on fixedColWidth and fixedRowHeight options\n  // 'verticalFixed' will set the rows to fixedRowHeight and columns width will fit the space available\n  // 'horizontalFixed' will set the columns to fixedColWidth and rows height will fit the space available\n  fixedColWidth: 250, // fixed col width for gridType: 'fixed'\n  fixedRowHeight: 250, // fixed row height for gridType: 'fixed'\n  keepFixedHeightInMobile: false, // keep the height from fixed gridType in mobile layout\n  keepFixedWidthInMobile: false, // keep the width from fixed gridType in mobile layout\n  setGridSize: false, // sets grid size depending on content\n  compactType: CompactType.None, // compact items: 'none' | 'compactUp' | 'compactLeft' | 'compactUp&Left' | 'compactLeft&Up'\n  mobileBreakpoint: 640, // if the screen is not wider that this, remove the grid layout and stack the items\n  useBodyForBreakpoint: false, // whether to use the body width to determine the mobile breakpoint. Uses the element width when false.\n  allowMultiLayer: false,\n  defaultLayerIndex: 0,\n  maxLayerIndex: 2,\n  baseLayerIndex: 1,\n  minCols: 1, // minimum amount of columns in the grid\n  maxCols: 100, // maximum amount of columns in the grid\n  minRows: 1, // minimum amount of rows in the grid\n  maxRows: 100, // maximum amount of rows in the grid\n  defaultItemCols: 1, // default width of an item in columns\n  defaultItemRows: 1, // default height of an item in rows\n  itemAspectRatio: null, // set a fixed aspect ratio for an item to have in cols/rows e.g. 1/1 or 4/3 or 16/9\n  maxItemCols: 50, // max item number of cols\n  maxItemRows: 50, // max item number of rows\n  minItemCols: 1, // min item number of columns\n  minItemRows: 1, // min item number of rows\n  minItemArea: 1, // min item area: cols * rows\n  maxItemArea: 2500, // max item area: cols * rows\n  addEmptyRowsCount: 0, // add a number of extra empty rows at the end\n  rowHeightRatio: 1, // row height ratio from column width\n  margin: 10, // margin between grid items\n  outerMargin: true, // if margins will apply to the sides of the container\n  outerMarginTop: null, // override outer margin for grid\n  outerMarginRight: null, // override outer margin for grid\n  outerMarginBottom: null, // override outer margin for grid\n  outerMarginLeft: null, // override outer margin for grid\n  useTransformPositioning: true, // toggle between transform or top/left positioning of items\n  scrollSensitivity: 10, // margin of the dashboard where to start scrolling\n  scrollSpeed: 20, // how much to scroll each mouse move when in the scrollSensitivity zone\n  initCallback: undefined, // callback to call after grid has initialized. Arguments: gridsterComponent\n  destroyCallback: undefined, // callback to call after grid has destroyed. Arguments: gridsterComponent\n  gridSizeChangedCallback: undefined, // callback to call after grid has changed size. Arguments: gridsterComponent\n  itemChangeCallback: undefined, // callback to call for each item when is changes x, y, rows, cols.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemResizeCallback: undefined, // callback to call for each item when width/height changes.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemInitCallback: undefined, // callback to call for each item when is initialized.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemRemovedCallback: undefined, // callback to call for each item when is initialized.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemValidateCallback: undefined, // callback to call to validate item position/size. Return true if valid.\n  // Arguments: gridsterItem\n  enableEmptyCellClick: false, // enable empty cell click events\n  enableEmptyCellContextMenu: false, // enable empty cell context menu (right click) events\n  enableEmptyCellDrop: false, // enable empty cell drop events\n  enableEmptyCellDrag: false, // enable empty cell drag events\n  enableOccupiedCellDrop: false, // enable occupied cell drop events\n  emptyCellClickCallback: undefined, // empty cell click callback\n  emptyCellContextMenuCallback: undefined, // empty cell context menu (right click) callback\n  emptyCellDropCallback: undefined, // empty cell drag drop callback. HTML5 Drag & Drop\n  emptyCellDragCallback: undefined, // empty cell drag and create item like excel cell selection\n  emptyCellDragMaxCols: 50, // limit empty cell drag max cols\n  emptyCellDragMaxRows: 50, // limit empty cell drag max rows\n  // Arguments: event, gridsterItem{x, y, rows: defaultItemRows, cols: defaultItemCols}\n  ignoreMarginInRow: false, // ignore the gap between rows for items which span multiple rows (see #162, #224)\n  draggable: {\n    delayStart: 0, // milliseconds to delay the start of drag, useful for touch interaction\n    enabled: false, // enable/disable draggable items\n    ignoreContentClass: 'gridster-item-content', // default content class to ignore the drag event from\n    ignoreContent: false, // if true drag will start only from elements from `dragHandleClass`\n    dragHandleClass: 'drag-handler', // drag event only from this class. If `ignoreContent` is true.\n    stop: undefined, // callback when dragging an item stops.  Accepts Promise return to cancel/approve drag.\n    start: undefined, // callback when dragging an item starts.\n    // Arguments: item, gridsterItem, event\n    dropOverItems: false, // enable drop items on top other item\n    dropOverItemsCallback: undefined // callback on drop over another item\n    // Arguments: source, target, gridComponent\n  },\n  resizable: {\n    delayStart: 0, // milliseconds to delay the start of resize, useful for touch interaction\n    enabled: false, // enable/disable resizable items\n    handles: {\n      s: true,\n      e: true,\n      n: true,\n      w: true,\n      se: true,\n      ne: true,\n      sw: true,\n      nw: true\n    }, // resizable edges of an item\n    stop: undefined, // callback when resizing an item stops. Accepts Promise return to cancel/approve resize.\n    start: undefined // callback when resizing an item starts.\n    // Arguments: item, gridsterItem, event\n  },\n  swap: true, // allow items to switch position if drop on top of another\n  swapWhileDragging: false, // allow items to switch position while dragging\n  pushItems: false, // push items when resizing and dragging\n  disablePushOnDrag: false, // disable push on drag\n  disablePushOnResize: false, // disable push on resize\n  pushDirections: { north: true, east: true, south: true, west: true }, // control the directions items are pushed\n  pushResizeItems: false, // on resize of item will shrink adjacent items\n  displayGrid: DisplayGrid.OnDragAndResize, // display background grid of rows and columns\n  disableWindowResize: false, // disable the window on resize listener. This will stop grid to recalculate on window resize.\n  disableWarnings: false, // disable console log warnings about misplacement of grid items\n  scrollToNewItems: false, // scroll to new items placed in a scrollable view\n  disableScrollHorizontal: false, // disable horizontal scrolling\n  disableScrollVertical: false, // disable vertical scrolling\n  enableBoundaryControl: false, // enable boundary control while dragging items\n  disableAutoPositionOnConflict: false, // disable auto-position of items on conflict state,\n  dirType: DirTypes.LTR // page direction, rtl=right to left ltr= left to right, if you use rtl language set dirType to rtl\n};\n","import { Gridster } from './gridster';\n\nexport class GridsterUtils {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static merge(obj1: any, obj2: any, properties: any): any {\n    for (const p in obj2) {\n      if (obj2[p] !== void 0 && properties.hasOwnProperty(p)) {\n        if (typeof obj2[p] === 'object') {\n          // create an empty object for the property if obj1 does not already have one.\n          if (!(p in obj1)) {\n            obj1[p] = {};\n          }\n          obj1[p] = GridsterUtils.merge(obj1[p], obj2[p], properties[p]);\n        } else {\n          obj1[p] = obj2[p];\n        }\n      }\n    }\n\n    return obj1;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static checkTouchEvent(e: any): void {\n    if (e.clientX === undefined && e.touches) {\n      if (e.touches && e.touches.length) {\n        e.clientX = e.touches[0].clientX;\n        e.clientY = e.touches[0].clientY;\n      } else if (e.changedTouches && e.changedTouches.length) {\n        e.clientX = e.changedTouches[0].clientX;\n        e.clientY = e.changedTouches[0].clientY;\n      }\n    }\n  }\n\n  static checkContentClassForEvent(gridster: Gridster, e: MouseEvent): boolean {\n    const $options = gridster.$options();\n    if ($options.draggable.ignoreContent) {\n      if (\n        !GridsterUtils.checkDragHandleClass(\n          e.target as HTMLElement,\n          e.currentTarget as HTMLElement,\n          $options.draggable.dragHandleClass,\n          $options.draggable.ignoreContentClass\n        )\n      ) {\n        return true;\n      }\n    } else {\n      if (GridsterUtils.checkContentClass(e.target as HTMLElement, e.currentTarget as HTMLElement, $options.draggable.ignoreContentClass)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static checkContentClassForEmptyCellClickEvent(gridster: Gridster, e: MouseEvent): boolean {\n    const $options = gridster.$options();\n    return (\n      GridsterUtils.checkContentClass(e.target as HTMLElement, e.currentTarget as HTMLElement, $options.draggable.ignoreContentClass) ||\n      GridsterUtils.checkContentClass(e.target as HTMLElement, e.currentTarget as HTMLElement, $options.draggable.dragHandleClass)\n    );\n  }\n\n  static checkDragHandleClass(target: HTMLElement, current: HTMLElement, dragHandleClass: string, ignoreContentClass: string): boolean {\n    if (!target || target === current) {\n      return false;\n    }\n    if (target.hasAttribute('class')) {\n      const classnames = target.getAttribute('class')!.split(' ');\n      if (classnames.indexOf(dragHandleClass) > -1) {\n        return true;\n      }\n      if (classnames.indexOf(ignoreContentClass) > -1) {\n        return false;\n      }\n    }\n    return GridsterUtils.checkDragHandleClass(target.parentNode as HTMLElement, current, dragHandleClass, ignoreContentClass);\n  }\n\n  static checkContentClass(target: HTMLElement, current: HTMLElement, contentClass: string): boolean {\n    if (!target || target === current) {\n      return false;\n    }\n    if (target.hasAttribute('class') && target.getAttribute('class')!.split(' ').indexOf(contentClass) > -1) {\n      return true;\n    } else {\n      return GridsterUtils.checkContentClass(target.parentNode as HTMLElement, current, contentClass);\n    }\n  }\n\n  static compareItems(a: { x: number; y: number }, b: { x: number; y: number }): number {\n    if (a.y > b.y) {\n      return -1;\n    } else if (a.y < b.y) {\n      return 1;\n    } else if (a.x > b.x) {\n      return -1;\n    } else {\n      return 1;\n    }\n  }\n}\n","import { Gridster } from './gridster';\nimport { GridsterItemConfig } from './gridsterItemConfig';\nimport { GridsterUtils } from './gridsterUtils';\n\nexport class GridsterEmptyCell {\n  initialItem: GridsterItemConfig | null;\n  removeEmptyCellClickListenerFn: (() => void) | null;\n  removeEmptyCellTouchendListenerFn: (() => void) | null;\n  removeEmptyCellContextMenuListenerFn: (() => void) | null;\n  removeEmptyCellDropListenerFn: (() => void) | null;\n  removeEmptyCellMousedownListenerFn: (() => void) | null;\n  removeEmptyCellTouchstartListenerFn: (() => void) | null;\n  removeWindowMousemoveListenerFn: () => void;\n  removeWindowTouchmoveListenerFn: () => void;\n  removeWindowMouseupListenerFn: () => void;\n  removeWindowTouchendListenerFn: () => void;\n  removeEmptyCellDragoverListenerFn: (() => void) | null;\n  removeDocumentDragendListenerFn: (() => void) | null;\n\n  constructor(private gridster: Gridster) {}\n\n  destroy(): void {\n    if (this.gridster.previewStyle) {\n      this.gridster.previewStyle();\n    }\n    this.gridster.movingItem = null;\n    this.initialItem = this.gridster = null!;\n    if (this.removeDocumentDragendListenerFn) {\n      this.removeDocumentDragendListenerFn();\n      this.removeDocumentDragendListenerFn = null;\n    }\n  }\n\n  updateOptions(): void {\n    const options = this.gridster.options();\n    const $options = this.gridster.$options();\n    if ($options.enableEmptyCellClick && !this.removeEmptyCellClickListenerFn && options.emptyCellClickCallback) {\n      this.removeEmptyCellClickListenerFn = this.gridster.renderer.listen(this.gridster.el, 'click', this.emptyCellClickCb);\n      this.removeEmptyCellTouchendListenerFn = this.gridster.renderer.listen(this.gridster.el, 'touchend', this.emptyCellClickCb);\n    } else if (!$options.enableEmptyCellClick && this.removeEmptyCellClickListenerFn && this.removeEmptyCellTouchendListenerFn) {\n      this.removeEmptyCellClickListenerFn();\n      this.removeEmptyCellTouchendListenerFn();\n      this.removeEmptyCellClickListenerFn = null;\n      this.removeEmptyCellTouchendListenerFn = null;\n    }\n    if ($options.enableEmptyCellContextMenu && !this.removeEmptyCellContextMenuListenerFn && options.emptyCellContextMenuCallback) {\n      this.removeEmptyCellContextMenuListenerFn = this.gridster.renderer.listen(this.gridster.el, 'contextmenu', this.emptyCellContextMenuCb);\n    } else if (!$options.enableEmptyCellContextMenu && this.removeEmptyCellContextMenuListenerFn) {\n      this.removeEmptyCellContextMenuListenerFn();\n      this.removeEmptyCellContextMenuListenerFn = null;\n    }\n    if ($options.enableEmptyCellDrop && !this.removeEmptyCellDropListenerFn && options.emptyCellDropCallback) {\n      this.removeEmptyCellDropListenerFn = this.gridster.renderer.listen(this.gridster.el, 'drop', this.emptyCellDragDrop);\n      this.gridster.zone.runOutsideAngular(() => {\n        this.removeEmptyCellDragoverListenerFn = this.gridster.renderer.listen(this.gridster.el, 'dragover', this.emptyCellDragOver);\n      });\n      this.removeDocumentDragendListenerFn = this.gridster.renderer.listen('document', 'dragend', () => {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle();\n      });\n    } else if (\n      !$options.enableEmptyCellDrop &&\n      this.removeEmptyCellDropListenerFn &&\n      this.removeEmptyCellDragoverListenerFn &&\n      this.removeDocumentDragendListenerFn\n    ) {\n      this.removeEmptyCellDropListenerFn();\n      this.removeEmptyCellDragoverListenerFn();\n      this.removeDocumentDragendListenerFn();\n      this.removeEmptyCellDragoverListenerFn = null;\n      this.removeEmptyCellDropListenerFn = null;\n      this.removeDocumentDragendListenerFn = null;\n    }\n    if ($options.enableEmptyCellDrag && !this.removeEmptyCellMousedownListenerFn && options.emptyCellDragCallback) {\n      this.removeEmptyCellMousedownListenerFn = this.gridster.renderer.listen(this.gridster.el, 'mousedown', this.emptyCellMouseDown);\n      this.removeEmptyCellTouchstartListenerFn = this.gridster.renderer.listen(this.gridster.el, 'touchstart', this.emptyCellMouseDown);\n    } else if (!$options.enableEmptyCellDrag && this.removeEmptyCellMousedownListenerFn && this.removeEmptyCellTouchstartListenerFn) {\n      this.removeEmptyCellMousedownListenerFn();\n      this.removeEmptyCellTouchstartListenerFn();\n      this.removeEmptyCellMousedownListenerFn = null;\n      this.removeEmptyCellTouchstartListenerFn = null;\n    }\n  }\n\n  emptyCellClickCb = (e: MouseEvent): void => {\n    if (!this.gridster || this.gridster.movingItem || GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {\n      return;\n    }\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    const options = this.gridster.options();\n    if (options.emptyCellClickCallback) {\n      options.emptyCellClickCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellContextMenuCb = (e: MouseEvent): void => {\n    if (this.gridster.movingItem || GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    const options = this.gridster.options();\n    if (options.emptyCellContextMenuCallback) {\n      options.emptyCellContextMenuCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellDragDrop = (e: DragEvent): void => {\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    const options = this.gridster.options();\n    if (options.emptyCellDropCallback) {\n      options.emptyCellDropCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellDragOver = (e: DragEvent): void => {\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    if (item) {\n      if (e.dataTransfer) {\n        e.dataTransfer.dropEffect = 'move';\n      }\n      this.gridster.movingItem = item;\n    } else {\n      if (e.dataTransfer) {\n        e.dataTransfer.dropEffect = 'none';\n      }\n      this.gridster.movingItem = null;\n    }\n    this.gridster.previewStyle();\n  };\n\n  emptyCellMouseDown = (e: MouseEvent): void => {\n    if (GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    const leftMouseButtonCode = 1;\n    if (!item || (e.buttons !== leftMouseButtonCode && !(e instanceof TouchEvent))) {\n      return;\n    }\n    this.initialItem = item;\n    this.gridster.movingItem = item;\n    this.gridster.previewStyle();\n    this.gridster.zone.runOutsideAngular(() => {\n      this.removeWindowMousemoveListenerFn = this.gridster.renderer.listen('window', 'mousemove', this.emptyCellMouseMove);\n      this.removeWindowTouchmoveListenerFn = this.gridster.renderer.listen('window', 'touchmove', this.emptyCellMouseMove);\n    });\n    this.removeWindowMouseupListenerFn = this.gridster.renderer.listen('window', 'mouseup', this.emptyCellMouseUp);\n    this.removeWindowTouchendListenerFn = this.gridster.renderer.listen('window', 'touchend', this.emptyCellMouseUp);\n  };\n\n  emptyCellMouseMove = (e: MouseEvent): void => {\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e, this.initialItem);\n    if (!item) {\n      return;\n    }\n\n    this.gridster.movingItem = item;\n    this.gridster.previewStyle();\n  };\n\n  emptyCellMouseUp = (e: MouseEvent): void => {\n    this.removeWindowMousemoveListenerFn();\n    this.removeWindowTouchmoveListenerFn();\n    this.removeWindowMouseupListenerFn();\n    this.removeWindowTouchendListenerFn();\n    const item = this.getValidItemFromEvent(e, this.initialItem);\n    if (item) {\n      this.gridster.movingItem = item;\n    }\n    const options = this.gridster.options();\n    if (options.emptyCellDragCallback && this.gridster.movingItem) {\n      options.emptyCellDragCallback(e, this.gridster.movingItem);\n    }\n    setTimeout(() => {\n      this.initialItem = null;\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle();\n      }\n    });\n    this.gridster.cdRef.markForCheck();\n  };\n\n  getPixelsX(e: MouseEvent, rect: ClientRect): number {\n    const scale = this.gridster.options().scale;\n    if (scale) {\n      return (e.clientX - rect.left) / scale + this.gridster.el.scrollLeft - this.gridster.gridRenderer.getLeftMargin();\n    }\n    return e.clientX + this.gridster.el.scrollLeft - rect.left - this.gridster.gridRenderer.getLeftMargin();\n  }\n\n  getPixelsY(e: MouseEvent, rect: ClientRect): number {\n    const scale = this.gridster.options().scale;\n    if (scale) {\n      return (e.clientY - rect.top) / scale + this.gridster.el.scrollTop - this.gridster.gridRenderer.getTopMargin();\n    }\n    return e.clientY + this.gridster.el.scrollTop - rect.top - this.gridster.gridRenderer.getTopMargin();\n  }\n\n  getValidItemFromEvent(e: MouseEvent, oldItem?: GridsterItemConfig | null): GridsterItemConfig | undefined {\n    e.preventDefault();\n    e.stopPropagation();\n    GridsterUtils.checkTouchEvent(e);\n    const rect = this.gridster.el.getBoundingClientRect();\n    const x = this.getPixelsX(e, rect);\n    const y = this.getPixelsY(e, rect);\n    const $options = this.gridster.$options();\n    const item: GridsterItemConfig = {\n      x: this.gridster.pixelsToPositionX(x, Math.floor, true),\n      y: this.gridster.pixelsToPositionY(y, Math.floor, true),\n      cols: $options.defaultItemCols,\n      rows: $options.defaultItemRows\n    };\n    if (oldItem) {\n      item.cols = Math.min(Math.abs(oldItem.x - item.x) + 1, $options.emptyCellDragMaxCols);\n      item.rows = Math.min(Math.abs(oldItem.y - item.y) + 1, $options.emptyCellDragMaxRows);\n      if (oldItem.x < item.x) {\n        item.x = oldItem.x;\n      } else if (oldItem.x - item.x > $options.emptyCellDragMaxCols - 1) {\n        item.x = this.gridster.movingItem ? this.gridster.movingItem.x : 0;\n      }\n      if (oldItem.y < item.y) {\n        item.y = oldItem.y;\n      } else if (oldItem.y - item.y > $options.emptyCellDragMaxRows - 1) {\n        item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;\n      }\n    }\n    if (!$options.enableOccupiedCellDrop && this.gridster.checkCollision(item)) {\n      return;\n    }\n    return item;\n  }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, Renderer2, ViewEncapsulation } from '@angular/core';\n\nimport { Gridster } from './gridster';\nimport { GridsterItemConfig } from './gridsterItemConfig';\n\n@Component({\n  selector: 'gridster-preview',\n  template: '',\n  styleUrl: './gridsterPreview.css',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class GridsterPreview {\n  private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n  private readonly gridster = inject(Gridster);\n  private readonly renderer = inject(Renderer2);\n\n  previewStyle(item: GridsterItemConfig | null): void {\n    if (item) {\n      this.renderer.setStyle(this.el, 'display', 'block');\n      this.gridster.gridRenderer.updateItem(this.el, item, this.renderer);\n    } else {\n      this.renderer.setStyle(this.el, 'display', '');\n    }\n  }\n}\n","import { Renderer2 } from '@angular/core';\n\nimport { Gridster } from './gridster';\nimport { DirTypes, GridType } from './gridsterConfig';\nimport { GridsterItemConfig } from './gridsterItemConfig';\nimport { CommonGridStyle, GridColumnCachedStyle, GridRowCachedStyle } from './gridsterRendererTypes';\n\nexport class GridsterRenderer {\n  /**\n   * Caches the last grid column styles.\n   * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\n   */\n  private lastGridColumnStyles: Record<number, GridColumnCachedStyle> = {};\n\n  /**\n   * Caches the last grid column styles.\n   * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\n   */\n  private lastGridRowStyles: Record<number, GridRowCachedStyle> = {};\n\n  constructor(private gridster: Gridster) {}\n\n  updateItem(el: Element, item: GridsterItemConfig, renderer: Renderer2): void {\n    const $options = this.gridster.$options();\n    if (this.gridster.mobile) {\n      this.clearCellPosition(renderer, el);\n      if ($options.keepFixedHeightInMobile) {\n        renderer.setStyle(el, 'height', (item.rows - 1) * $options.margin + item.rows * $options.fixedRowHeight + 'px');\n      } else {\n        renderer.setStyle(el, 'height', (item.rows * this.gridster.curWidth) / item.cols + 'px');\n      }\n      if ($options.keepFixedWidthInMobile) {\n        renderer.setStyle(el, 'width', $options.fixedColWidth + 'px');\n      } else {\n        renderer.setStyle(el, 'width', '');\n      }\n\n      renderer.setStyle(el, 'margin-bottom', $options.margin + 'px');\n      renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');\n    } else {\n      const x = Math.round(this.gridster.curColWidth * item.x);\n      const y = Math.round(this.gridster.curRowHeight * item.y);\n      const width = this.gridster.curColWidth * item.cols - $options.margin;\n      const height = this.gridster.curRowHeight * item.rows - $options.margin;\n      // set the cell style\n      this.setCellPosition(renderer, el, x, y);\n      renderer.setStyle(el, 'width', width + 'px');\n      renderer.setStyle(el, 'height', height + 'px');\n      let marginBottom: string | null = null;\n      let marginRight: string | null = null;\n      if ($options.outerMargin) {\n        if (this.gridster.rows === item.rows + item.y) {\n          if ($options.outerMarginBottom !== null) {\n            marginBottom = $options.outerMarginBottom + 'px';\n          } else {\n            marginBottom = $options.margin + 'px';\n          }\n        }\n        if (this.gridster.columns === item.cols + item.x) {\n          if ($options.outerMarginBottom !== null) {\n            marginRight = $options.outerMarginRight + 'px';\n          } else {\n            marginRight = $options.margin + 'px';\n          }\n        }\n      }\n\n      renderer.setStyle(el, 'margin-bottom', marginBottom);\n      renderer.setStyle(el, $options.dirType === DirTypes.LTR ? 'margin-right' : 'margin-left', marginRight);\n    }\n  }\n\n  updateGridster(): void {\n    const $options = this.gridster.$options();\n    let addClass = '';\n    let removeClass1 = '';\n    let removeClass2 = '';\n    let removeClass3 = '';\n    if ($options.gridType === GridType.Fit) {\n      addClass = GridType.Fit;\n      removeClass1 = GridType.ScrollVertical;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if ($options.gridType === GridType.ScrollVertical) {\n      this.gridster.curRowHeight = this.gridster.curColWidth * $options.rowHeightRatio;\n      addClass = GridType.ScrollVertical;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if ($options.gridType === GridType.ScrollHorizontal) {\n      const widthRatio = $options.rowHeightRatio;\n      const calWidthRatio = widthRatio >= 1 ? widthRatio : widthRatio + 1;\n      this.gridster.curColWidth = this.gridster.curRowHeight * calWidthRatio;\n      addClass = GridType.ScrollHorizontal;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.Fixed;\n    } else if ($options.gridType === GridType.Fixed) {\n      this.gridster.curColWidth = $options.fixedColWidth + ($options.ignoreMarginInRow ? 0 : $options.margin);\n      this.gridster.curRowHeight = $options.fixedRowHeight + ($options.ignoreMarginInRow ? 0 : $options.margin);\n      addClass = GridType.Fixed;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.ScrollHorizontal;\n    } else if ($options.gridType === GridType.VerticalFixed) {\n      this.gridster.curRowHeight = $options.fixedRowHeight + ($options.ignoreMarginInRow ? 0 : $options.margin);\n      addClass = GridType.ScrollVertical;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if ($options.gridType === GridType.HorizontalFixed) {\n      this.gridster.curColWidth = $options.fixedColWidth + ($options.ignoreMarginInRow ? 0 : $options.margin);\n      addClass = GridType.ScrollHorizontal;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.Fixed;\n    }\n\n    if (this.gridster.mobile || ($options.setGridSize && $options.gridType !== GridType.Fit)) {\n      this.gridster.renderer.removeClass(this.gridster.el, addClass);\n    } else {\n      this.gridster.renderer.addClass(this.gridster.el, addClass);\n    }\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass1);\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass2);\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass3);\n  }\n\n  getGridColumnStyle(i: number): CommonGridStyle {\n    const margin = this.gridster.$options().margin;\n    // generates the new style\n    const newPos: GridColumnCachedStyle = {\n      left: this.gridster.curColWidth * i,\n      width: this.gridster.curColWidth - margin,\n      height: this.gridster.gridRows.length * this.gridster.curRowHeight - margin,\n      style: {}\n    };\n    newPos.style = {\n      ...this.getLeftPosition(newPos.left),\n      width: newPos.width + 'px',\n      height: newPos.height + 'px'\n    };\n\n    // use the last cached style if it has same values as the generated one\n    const last = this.lastGridColumnStyles[i];\n    if (last && last.left === newPos.left && last.width === newPos.width && last.height === newPos.height) {\n      return last.style;\n    }\n\n    // cache and set new style\n    this.lastGridColumnStyles[i] = newPos;\n    return newPos.style;\n  }\n\n  getGridRowStyle(i: number): CommonGridStyle {\n    const margin = this.gridster.$options().margin;\n    // generates the new style\n    const newPos: GridRowCachedStyle = {\n      top: this.gridster.curRowHeight * i,\n      width: this.gridster.gridColumns.length * this.gridster.curColWidth + margin,\n      height: this.gridster.curRowHeight - margin,\n      style: {}\n    };\n    newPos.style = {\n      ...this.getTopPosition(newPos.top),\n      width: newPos.width + 'px',\n      height: newPos.height + 'px'\n    };\n\n    // use the last cached style if it has same values as the generated one\n    const last = this.lastGridRowStyles[i];\n    if (last && last.top === newPos.top && last.width === newPos.width && last.height === newPos.height) {\n      return last.style;\n    }\n\n    // cache and set new style\n    this.lastGridRowStyles[i] = newPos;\n    return newPos.style;\n  }\n\n  getLeftPosition(d: number): { left: string } | { transform: string } {\n    const $options = this.gridster.$options();\n    const dPosition = $options.dirType === DirTypes.RTL ? -d : d;\n    if ($options.useTransformPositioning) {\n      return {\n        transform: 'translateX(' + dPosition + 'px)'\n      };\n    } else {\n      return {\n        left: this.getLeftMargin() + dPosition + 'px'\n      };\n    }\n  }\n\n  getTopPosition(d: number): { top: string } | { transform: string } {\n    if (this.gridster.$options().useTransformPositioning) {\n      return {\n        transform: 'translateY(' + d + 'px)'\n      };\n    } else {\n      return {\n        top: this.getTopMargin() + d + 'px'\n      };\n    }\n  }\n\n  clearCellPosition(renderer: Renderer2, el: Element): void {\n    if (this.gridster.$options().useTransformPositioning) {\n      renderer.setStyle(el, 'transform', '');\n    } else {\n      renderer.setStyle(el, 'top', '');\n      renderer.setStyle(el, 'left', '');\n    }\n  }\n\n  setCellPosition(renderer: Renderer2, el: Element, x: number, y: number): void {\n    const $options = this.gridster.$options();\n    const xPosition = $options.dirType === DirTypes.RTL ? -x : x;\n    if ($options.useTransformPositioning) {\n      const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';\n      renderer.setStyle(el, 'transform', transform);\n    } else {\n      renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');\n      renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');\n    }\n  }\n\n  getLeftMargin(): number {\n    const $options = this.gridster.$options();\n    if ($options.outerMargin) {\n      if ($options.outerMarginLeft !== null) {\n        return $options.outerMarginLeft;\n      } else {\n        return $options.margin;\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  getTopMargin(): number {\n    const $options = this.gridster.$options();\n    if ($options.outerMargin) {\n      if ($options.outerMarginTop !== null) {\n        return $options.outerMarginTop;\n      } else {\n        return $options.margin;\n      }\n    } else {\n      return 0;\n    }\n  }\n}\n","import { NgStyle } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  viewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { debounceTime, Subject, switchMap, takeUntil, timer } from 'rxjs';\n\nimport { GridsterCompact } from './gridsterCompact';\nimport type { GridsterApi, GridsterConfig, GridsterConfigStrict } from './gridsterConfig';\nimport { GridType } from './gridsterConfig';\nimport { GridsterConfigService } from './gridsterConfig.constant';\nimport { GridsterEmptyCell } from './gridsterEmptyCell';\nimport { GridsterItem } from './gridsterItem';\nimport { GridsterItemConfig } from './gridsterItemConfig';\nimport { GridsterPreview } from './gridsterPreview';\nimport { GridsterRenderer } from './gridsterRenderer';\nimport { GridsterUtils } from './gridsterUtils';\n\n@Component({\n  selector: 'gridster',\n  templateUrl: './gridster.html',\n  styleUrl: './gridster.css',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgStyle, GridsterPreview]\n})\nexport class Gridster implements OnInit, OnDestroy {\n  readonly renderer = inject(Renderer2);\n  readonly cdRef = inject(ChangeDetectorRef);\n  readonly zone = inject(NgZone);\n  readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  readonly api: GridsterApi = {\n    calculateLayout: () => this.calculateLayout(),\n    resize: () => this.onResize(),\n    getNextPossiblePosition: (newItem: GridsterItemConfig, startingFrom?: { y?: number; x?: number }) =>\n      this.getNextPossiblePosition(newItem, startingFrom),\n    getFirstPossiblePosition: (item: GridsterItemConfig) => this.getFirstPossiblePosition(item),\n    getLastPossiblePosition: (item: GridsterItemConfig) => this.getLastPossiblePosition(item),\n    getItemComponent: (item: GridsterItemConfig) => this.getItemComponent(item)\n  };\n\n  gridsterPreview = viewChild.required(GridsterPreview);\n\n  options = input.required<GridsterConfig>();\n  $options = computed<GridsterConfigStrict>(() =>\n    GridsterUtils.merge(JSON.parse(JSON.stringify(GridsterConfigService)), this.options(), GridsterConfigService)\n  );\n\n  movingItem: GridsterItemConfig | null;\n  el: HTMLElement = this.elRef.nativeElement;\n  mobile = false;\n  curWidth = 0;\n  curHeight = 0;\n  grid: GridsterItem[] = [];\n  columns = 0;\n  rows = 0;\n  curColWidth = 0;\n  curRowHeight = 0;\n  gridColumns = [];\n  gridRows = [];\n  windowResize: (() => void) | null;\n  dragInProgress = false;\n  emptyCell: GridsterEmptyCell = new GridsterEmptyCell(this);\n  compact: GridsterCompact = new GridsterCompact(this);\n  gridRenderer: GridsterRenderer = new GridsterRenderer(this);\n\n  calculateLayout$ = new Subject<void>();\n\n  private resize$ = new Subject<void>();\n  private destroy$ = new Subject<void>();\n\n  constructor() {\n    effect(() => {\n      const $options = this.$options();\n      if (!$options.disableWindowResize && !this.windowResize) {\n        this.windowResize = this.renderer.listen('window', 'resize', this.onResize);\n      } else if ($options.disableWindowResize && this.windowResize) {\n        this.windowResize();\n        this.windowResize = null;\n      }\n      this.emptyCell.updateOptions();\n      this.columns = $options.minCols;\n      this.rows = $options.minRows + $options.addEmptyRowsCount;\n      this.setGridSize();\n      this.calculateLayout();\n    });\n  }\n\n  // ------ Function for swapWhileDragging option\n\n  // identical to checkCollision() except that here we add boundaries.\n  static checkCollisionTwoItemsForSwaping(item: GridsterItemConfig, item2: GridsterItemConfig): boolean {\n    // if the cols or rows of the items are 1 , doesn't make any sense to set a boundary. Only if the item is bigger we set a boundary\n    const horizontalBoundaryItem1 = item.cols === 1 ? 0 : 1;\n    const horizontalBoundaryItem2 = item2.cols === 1 ? 0 : 1;\n    const verticalBoundaryItem1 = item.rows === 1 ? 0 : 1;\n    const verticalBoundaryItem2 = item2.rows === 1 ? 0 : 1;\n    return (\n      item.x + horizontalBoundaryItem1 < item2.x + item2.cols &&\n      item.x + item.cols > item2.x + horizontalBoundaryItem2 &&\n      item.y + verticalBoundaryItem1 < item2.y + item2.rows &&\n      item.y + item.rows > item2.y + verticalBoundaryItem2\n    );\n  }\n\n  checkCollisionTwoItems(item: GridsterItemConfig, item2: GridsterItemConfig): boolean {\n    const collision = item.x < item2.x + item2.cols && item.x + item.cols > item2.x && item.y < item2.y + item2.rows && item.y + item.rows > item2.y;\n    if (!collision) {\n      return false;\n    }\n    if (!this.$options().allowMultiLayer) {\n      return true;\n    }\n    const defaultLayerIndex = this.$options().defaultLayerIndex;\n    const layerIndex = item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;\n    const layerIndex2 = item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;\n    return layerIndex === layerIndex2;\n  }\n\n  ngOnInit(): void {\n    const options = this.options();\n    if (options.initCallback) {\n      options.initCallback(this, this.api);\n    }\n\n    this.calculateLayout$.pipe(debounceTime(0), takeUntil(this.destroy$)).subscribe(() => this.calculateLayout());\n\n    this.resize$\n      .pipe(\n        // Cancel previously scheduled DOM timer if `calculateLayout()` has been called\n        // within this time range.\n        switchMap(() => timer(100)),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => this.resize());\n  }\n\n  private resize(): void {\n    let height: number;\n    let width: number;\n    if (this.$options().gridType === 'fit' && !this.mobile) {\n      width = this.el.offsetWidth;\n      height = this.el.offsetHeight;\n    } else {\n      width = this.el.clientWidth;\n      height = this.el.clientHeight;\n    }\n    if ((width !== this.curWidth || height !== this.curHeight) && this.checkIfToResize()) {\n      this.onResize();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    if (this.windowResize) {\n      this.windowResize();\n    }\n    const options = this.options();\n    if (options && options.destroyCallback) {\n      options.destroyCallback(this);\n    }\n    this.emptyCell.destroy();\n    this.emptyCell = null!;\n    this.compact.destroy();\n    this.compact = null!;\n  }\n\n  onResize = (): void => {\n    if (this.el.clientWidth) {\n      const $options = this.$options();\n      if ($options.setGridSize) {\n        // reset width/height so the size is recalculated afterward\n        this.renderer.setStyle(this.el, 'width', '');\n        this.renderer.setStyle(this.el, 'height', '');\n      }\n      this.setGridSize();\n      this.calculateLayout();\n    }\n  };\n\n  checkIfToResize(): boolean {\n    const clientWidth = this.el.clientWidth;\n    const offsetWidth = this.el.offsetWidth;\n    const scrollWidth = this.el.scrollWidth;\n    const clientHeight = this.el.clientHeight;\n    const offsetHeight = this.el.offsetHeight;\n    const scrollHeight = this.el.scrollHeight;\n    const verticalScrollPresent = clientWidth < offsetWidth && scrollHeight > offsetHeight && scrollHeight - offsetHeight < offsetWidth - clientWidth;\n    const horizontalScrollPresent =\n      clientHeight < offsetHeight && scrollWidth > offsetWidth && scrollWidth - offsetWidth < offsetHeight - clientHeight;\n    if (verticalScrollPresent) {\n      return false;\n    }\n    return !horizontalScrollPresent;\n  }\n\n  checkIfMobile(): boolean {\n    const $options = this.$options();\n    if ($options.useBodyForBreakpoint) {\n      return $options.mobileBreakpoint > document.body.clientWidth;\n    } else {\n      return $options.mobileBreakpoint > this.curWidth;\n    }\n  }\n\n  setGridSize(): void {\n    const el = this.el;\n    let width: number;\n    let height: number;\n    const $options = this.$options();\n    if ($options.setGridSize || ($options.gridType === GridType.Fit && !this.mobile)) {\n      width = el.offsetWidth;\n      height = el.offsetHeight;\n    } else {\n      width = el.clientWidth;\n      height = el.clientHeight;\n    }\n    this.curWidth = width;\n    this.curHeight = height;\n  }\n\n  setGridDimensions(): void {\n    this.setGridSize();\n    if (!this.mobile && this.checkIfMobile()) {\n      this.mobile = !this.mobile;\n      this.renderer.addClass(this.el, 'mobile');\n    } else if (this.mobile && !this.checkIfMobile()) {\n      this.mobile = !this.mobile;\n      this.renderer.removeClass(this.el, 'mobile');\n    }\n    const $options = this.$options();\n    let rows = $options.minRows;\n    let columns = $options.minCols;\n\n    for (let i = this.grid.length - 1; i >= 0; i--) {\n      const widget = this.grid[i];\n      if (!widget.notPlaced) {\n        const $item = widget.$item();\n        rows = Math.max(rows, $item.y + $item.rows);\n        columns = Math.max(columns, $item.x + $item.cols);\n      }\n    }\n    rows += $options.addEmptyRowsCount;\n    if (this.columns !== columns || this.rows !== rows) {\n      this.columns = columns;\n      this.rows = rows;\n      const options = this.options();\n      if (options.gridSizeChangedCallback) {\n        options.gridSizeChangedCallback(this);\n      }\n    }\n  }\n\n  private calculateLayout(): void {\n    if (this.compact) {\n      this.compact.checkCompact();\n    }\n\n    this.setGridDimensions();\n    const $options = this.$options();\n    if ($options.outerMargin) {\n      let marginWidth = -$options.margin;\n      if ($options.outerMarginLeft !== null) {\n        marginWidth += $options.outerMarginLeft;\n        this.renderer.setStyle(this.el, 'padding-left', $options.outerMarginLeft + 'px');\n      } else {\n        marginWidth += $options.margin;\n        this.renderer.setStyle(this.el, 'padding-left', $options.margin + 'px');\n      }\n      if ($options.outerMarginRight !== null) {\n        marginWidth += $options.outerMarginRight;\n        this.renderer.setStyle(this.el, 'padding-right', $options.outerMarginRight + 'px');\n      } else {\n        marginWidth += $options.margin;\n        this.renderer.setStyle(this.el, 'padding-right', $options.margin + 'px');\n      }\n      this.curColWidth = (this.curWidth - marginWidth) / this.columns;\n      let marginHeight = -$options.margin;\n      if ($options.outerMarginTop !== null) {\n        marginHeight += $options.outerMarginTop;\n        this.renderer.setStyle(this.el, 'padding-top', $options.outerMarginTop + 'px');\n      } else {\n        marginHeight += $options.margin;\n        this.renderer.setStyle(this.el, 'padding-top', $options.margin + 'px');\n      }\n      if ($options.outerMarginBottom !== null) {\n        marginHeight += $options.outerMarginBottom;\n        this.renderer.setStyle(this.el, 'padding-bottom', $options.outerMarginBottom + 'px');\n      } else {\n        marginHeight += $options.margin;\n        this.renderer.setStyle(this.el, 'padding-bottom', $options.margin + 'px');\n      }\n      this.curRowHeight = ((this.curHeight - marginHeight) / this.rows) * $options.rowHeightRatio;\n    } else {\n      this.curColWidth = (this.curWidth + $options.margin) / this.columns;\n      this.curRowHeight = ((this.curHeight + $options.margin) / this.rows) * $options.rowHeightRatio;\n      this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');\n    }\n    this.gridRenderer.updateGridster();\n\n    if ($options.setGridSize) {\n      this.renderer.addClass(this.el, 'gridSize');\n      if (!this.mobile) {\n        this.renderer.setStyle(this.el, 'width', this.columns * this.curColWidth + $options.margin + 'px');\n        this.renderer.setStyle(this.el, 'height', this.rows * this.curRowHeight + $options.margin + 'px');\n      }\n    } else {\n      this.renderer.removeClass(this.el, 'gridSize');\n      this.renderer.setStyle(this.el, 'width', '');\n      this.renderer.setStyle(this.el, 'height', '');\n    }\n    this.updateGrid();\n\n    for (let i = this.grid.length - 1; i >= 0; i--) {\n      const widget = this.grid[i];\n      widget.setSize();\n      widget.drag.toggle();\n      widget.resize.toggle();\n    }\n\n    this.resize$.next();\n  }\n\n  updateGrid(): void {\n    const $options = this.$options();\n    if ($options.displayGrid === 'always' && !this.mobile) {\n      this.renderer.addClass(this.el, 'display-grid');\n    } else if ($options.displayGrid === 'onDrag&Resize' && this.dragInProgress) {\n      this.renderer.addClass(this.el, 'display-grid');\n    } else if ($options.displayGrid === 'none' || !this.dragInProgress || this.mobile) {\n      this.renderer.removeClass(this.el, 'display-grid');\n    }\n    this.setGridDimensions();\n    this.gridColumns.length = Gridster.getNewArrayLength(this.columns, this.curWidth, this.curColWidth);\n    this.gridRows.length = Gridster.getNewArrayLength(this.rows, this.curHeight, this.curRowHeight);\n    this.cdRef.markForCheck();\n  }\n\n  addItem(itemComponent: GridsterItem): void {\n    const $item = itemComponent.$item();\n    const item = itemComponent.item();\n    const $options = this.$options();\n    if ($item.cols === undefined) {\n      $item.cols = $options.defaultItemCols;\n      item.cols = $item.cols;\n      itemComponent.itemChanged();\n    }\n    if ($item.rows === undefined) {\n      $item.rows = $options.defaultItemRows;\n      item.rows = $item.rows;\n      itemComponent.itemChanged();\n    }\n    if ($item.x === -1 || $item.y === -1) {\n      this.autoPositionItem(itemComponent);\n    } else if (this.checkCollision($item)) {\n      if (!$options.disableWarnings) {\n        itemComponent.notPlaced = true;\n        console.warn(\n          \"Can't be placed in the bounds of the dashboard, trying to auto position!/n\" +\n            JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\n        );\n      }\n      if (!$options.disableAutoPositionOnConflict) {\n        this.autoPositionItem(itemComponent);\n      } else {\n        itemComponent.notPlaced = true;\n      }\n    }\n    this.grid.push(itemComponent);\n    this.calculateLayout$.next();\n  }\n\n  removeItem(itemComponent: GridsterItem): void {\n    this.grid.splice(this.grid.indexOf(itemComponent), 1);\n    this.calculateLayout$.next();\n\n    const options = this.options();\n    if (options.itemRemovedCallback) {\n      options.itemRemovedCallback(itemComponent.item(), itemComponent);\n    }\n\n    // check the moving item was removed\n    if (this.movingItem && this.movingItem === itemComponent.$item()) {\n      this.movingItem = null;\n      this.previewStyle();\n    }\n  }\n\n  checkCollision(item: GridsterItemConfig, checkRatio?: boolean): GridsterItem | boolean {\n    let collision: GridsterItem | boolean = false;\n    const options = this.options();\n    if (options.itemValidateCallback) {\n      collision = !options.itemValidateCallback(item);\n    }\n    if (!collision && this.checkGridCollision(item, checkRatio)) {\n      collision = true;\n    }\n    if (!collision) {\n      const c = this.findItemWithItem(item);\n      if (c) {\n        collision = c;\n      }\n    }\n    return collision;\n  }\n\n  checkGridCollision(item: GridsterItemConfig, checkRatio = false): boolean {\n    const $options = this.$options();\n    const noNegativePosition = item.y > -1 && item.x > -1;\n    const maxGridCols = item.cols + item.x <= $options.maxCols;\n    const maxGridRows = item.rows + item.y <= $options.maxRows;\n    const maxItemCols = item.maxItemCols === undefined ? $options.maxItemCols : item.maxItemCols;\n    const minItemCols = item.minItemCols === undefined ? $options.minItemCols : item.minItemCols;\n    const maxItemRows = item.maxItemRows === undefined ? $options.maxItemRows : item.maxItemRows;\n    const minItemRows = item.minItemRows === undefined ? $options.minItemRows : item.minItemRows;\n    const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;\n    const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;\n    let inRatio: boolean = true;\n    if (checkRatio) {\n      const itemAspectRatio = item.itemAspectRatio || $options.itemAspectRatio;\n      if (itemAspectRatio) {\n        inRatio = item.cols / item.rows === itemAspectRatio;\n      }\n    }\n    const minAreaLimit = item.minItemArea === undefined ? $options.minItemArea : item.minItemArea;\n    const maxAreaLimit = item.maxItemArea === undefined ? $options.maxItemArea : item.maxItemArea;\n    const area = item.cols * item.rows;\n    const inMinArea = minAreaLimit <= area;\n    const inMaxArea = maxAreaLimit >= area;\n    return !(noNegativePosition && maxGridCols && maxGridRows && inRatio && inColsLimits && inRowsLimits && inMinArea && inMaxArea);\n  }\n\n  findItemWithItem(item: GridsterItemConfig): GridsterItem | boolean {\n    for (let i = 0; i < this.grid.length; i++) {\n      const widget = this.grid[i];\n      if (widget.$item() !== item && this.checkCollisionTwoItems(widget.$item(), item)) {\n        return widget;\n      }\n    }\n    return false;\n  }\n\n  findItemsWithItem(item: GridsterItemConfig): GridsterItem[] {\n    const a: GridsterItem[] = [];\n    for (let i = 0; i < this.grid.length; i++) {\n      const widget = this.grid[i];\n      if (widget.$item() !== item && this.checkCollisionTwoItems(widget.$item(), item)) {\n        a.push(widget);\n      }\n    }\n    return a;\n  }\n\n  autoPositionItem(itemComponent: GridsterItem): void {\n    if (this.getNextPossiblePosition(itemComponent.$item())) {\n      itemComponent.notPlaced = false;\n      itemComponent.item().x = itemComponent.$item().x;\n      itemComponent.item().y = itemComponent.$item().y;\n      itemComponent.itemChanged();\n    } else {\n      itemComponent.notPlaced = true;\n      if (!this.$options().disableWarnings) {\n        console.warn(\"Can't be placed in the bounds of the dashboard!/n\" + JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y']));\n      }\n    }\n  }\n\n  getNextPossiblePosition = (newItem: GridsterItemConfig, startingFrom: { y?: number; x?: number } = {}): boolean => {\n    const $options = this.$options();\n    if (newItem.cols === -1) {\n      newItem.cols = $options.defaultItemCols;\n    }\n    if (newItem.rows === -1) {\n      newItem.rows = $options.defaultItemRows;\n    }\n    this.setGridDimensions();\n    for (let y = startingFrom.y || 0; y < this.rows; y++) {\n      newItem.y = y;\n      for (let x = startingFrom.x || 0; x < this.columns; x++) {\n        newItem.x = x;\n        if (!this.checkCollision(newItem)) {\n          return true;\n        }\n      }\n    }\n    const canAddToRows = $options.maxRows >= this.rows + newItem.rows;\n    const canAddToColumns = $options.maxCols >= this.columns + newItem.cols;\n    const addToRows = this.rows <= this.columns && canAddToRows;\n    if (!addToRows && canAddToColumns) {\n      newItem.x = this.columns;\n      newItem.y = 0;\n      return true;\n    } else if (canAddToRows) {\n      newItem.y = this.rows;\n      newItem.x = 0;\n      return true;\n    }\n    return false;\n  };\n\n  getFirstPossiblePosition = (item: GridsterItemConfig): GridsterItemConfig => {\n    const tmpItem = Object.assign({}, item);\n    this.getNextPossiblePosition(tmpItem);\n    return tmpItem;\n  };\n\n  getLastPossiblePosition = (item: GridsterItemConfig): GridsterItemConfig => {\n    let farthestItem: { y: number; x: number } = { y: 0, x: 0 };\n    farthestItem = this.grid.reduce((prev: { y: number; x: number }, curr: GridsterItem) => {\n      const $item = curr.$item();\n      const currCoords = {\n        y: $item.y + $item.rows - 1,\n        x: $item.x + $item.cols - 1\n      };\n      if (GridsterUtils.compareItems(prev, currCoords) === 1) {\n        return currCoords;\n      } else {\n        return prev;\n      }\n    }, farthestItem);\n\n    const tmpItem = Object.assign({}, item);\n    this.getNextPossiblePosition(tmpItem, farthestItem);\n    return tmpItem;\n  };\n\n  pixelsToPositionX(x: number, roundingMethod: (x: number) => number, noLimit?: boolean): number {\n    const position = roundingMethod(x / this.curColWidth);\n    if (noLimit) {\n      return position;\n    } else {\n      return Math.max(position, 0);\n    }\n  }\n\n  pixelsToPositionY(y: number, roundingMethod: (x: number) => number, noLimit?: boolean): number {\n    const position = roundingMethod(y / this.curRowHeight);\n    if (noLimit) {\n      return position;\n    } else {\n      return Math.max(position, 0);\n    }\n  }\n\n  positionXToPixels(x: number): number {\n    return x * this.curColWidth;\n  }\n\n  positionYToPixels(y: number): number {\n    return y * this.curRowHeight;\n  }\n\n  getItemComponent(item: GridsterItemConfig): GridsterItem | undefined {\n    return this.grid.find(c => c.item() === item);\n  }\n\n  // ------ Functions for swapWhileDragging option\n\n  // identical to checkCollision() except that this function calls findItemWithItemForSwaping() instead of findItemWithItem()\n  checkCollisionForSwaping(item: GridsterItemConfig): GridsterItem | boolean {\n    let collision: GridsterItem | boolean = false;\n    const options = this.options();\n    if (options.itemValidateCallback) {\n      collision = !options.itemValidateCallback(item);\n    }\n    if (!collision && this.checkGridCollision(item)) {\n      collision = true;\n    }\n    if (!collision) {\n      const c = this.findItemWithItemForSwapping(item);\n      if (c) {\n        collision = c;\n      }\n    }\n    return collision;\n  }\n\n  // identical to findItemWithItem() except that this function calls checkCollisionTwoItemsForSwaping() instead of checkCollisionTwoItems()\n  findItemWithItemForSwapping(item: GridsterItemConfig): GridsterItem | boolean {\n    for (let i = this.grid.length - 1; i > -1; i--) {\n      const widget = this.grid[i];\n      if (widget.$item() !== item && Gridster.checkCollisionTwoItemsForSwaping(widget.$item(), item)) {\n        return widget;\n      }\n    }\n    return false;\n  }\n\n  previewStyle(drag = false): void {\n    const preview = this.gridsterPreview();\n\n    if (this.movingItem) {\n      if (this.compact && drag) {\n        this.compact.checkCompactItem(this.movingItem);\n      }\n      preview.previewStyle(this.movingItem);\n    } else {\n      preview.previewStyle(null);\n    }\n  }\n\n  // ------ End of functions for swapWhileDragging option\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  private static getNewArrayLength(length: number, overallSize: number, size: number): number {\n    const newLength = Math.max(length, Math.floor(overallSize / size));\n\n    if (newLength < 0) {\n      return 0;\n    }\n\n    if (Number.isFinite(newLength)) {\n      return Math.floor(newLength);\n    }\n\n    return 0;\n  }\n}\n","@for (_ of gridColumns; track i; let i = $index) {\n  <div class=\"gridster-column\" [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"></div>\n}\n@for (_ of gridRows; track i; let i = $index) {\n  <div class=\"gridster-row\" [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"></div>\n}\n<ng-content />\n\n<gridster-preview class=\"gridster-preview\" />\n","import { Gridster } from './gridster';\nimport { GridsterItem } from './gridsterItem';\n\nexport class GridsterPush {\n  public fromSouth: string = 'fromSouth';\n  public fromNorth: string = 'fromNorth';\n  public fromEast: string = 'fromEast';\n  public fromWest: string = 'fromWest';\n  private pushedItems: GridsterItem[] = [];\n  private pushedItemsTemp: GridsterItem[] = [];\n  private pushedItemsTempPath: { x: number; y: number }[][] = [];\n  private pushedItemsPath: { x: number; y: number }[][] = [];\n  private gridster: Gridster;\n  private pushedItemsOrder: GridsterItem[];\n  private tryPattern: {\n    fromEast: ((gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem) => boolean)[];\n    fromWest: ((gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem) => boolean)[];\n    fromNorth: ((gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem) => boolean)[];\n    fromSouth: ((gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem) => boolean)[];\n  } = {\n    fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],\n    fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],\n    fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],\n    fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]\n  };\n  private iteration = 0;\n\n  constructor(private gridsterItem: GridsterItem) {\n    this.gridster = gridsterItem.gridster;\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  pushItems(direction: string, disable?: boolean): boolean {\n    if (this.gridster.$options().pushItems && !disable) {\n      this.pushedItemsOrder = [];\n      this.iteration = 0;\n      const pushed = this.push(this.gridsterItem, direction);\n      if (!pushed) {\n        this.restoreTempItems();\n      }\n      this.pushedItemsOrder = [];\n      this.pushedItemsTemp = [];\n      this.pushedItemsTempPath = [];\n      return pushed;\n    } else {\n      return false;\n    }\n  }\n\n  restoreTempItems(): void {\n    let i = this.pushedItemsTemp.length - 1;\n    for (; i > -1; i--) {\n      this.removeFromTempPushed(this.pushedItemsTemp[i]);\n    }\n  }\n\n  restoreItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItem;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.$item().x = pushedItem.item().x || 0;\n      pushedItem.$item().y = pushedItem.item().y || 0;\n      pushedItem.setSize();\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  setPushedItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItem;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.checkItemChanges(pushedItem.$item(), pushedItem.item());\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  checkPushBack(): void {\n    let i: number = this.pushedItems.length - 1;\n    let change = false;\n    for (; i > -1; i--) {\n      if (this.checkPushedItem(this.pushedItems[i], i)) {\n        change = true;\n      }\n    }\n    if (change) {\n      this.checkPushBack();\n    }\n  }\n\n  private push(gridsterItem: GridsterItem, direction: string): boolean {\n    if (this.iteration > 100) {\n      console.warn('max iteration reached');\n      return false;\n    }\n    if (this.gridster.checkGridCollision(gridsterItem.$item())) {\n      return false;\n    }\n    if (direction === '') {\n      return false;\n    }\n    const conflicts: GridsterItem[] = this.gridster.findItemsWithItem(gridsterItem.$item());\n    const invert = direction === this.fromNorth || direction === this.fromWest;\n    // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west\n    // this is done so they don't conflict witch each other and revert positions, keeping the previous order\n    conflicts.sort((a, b) => {\n      if (invert) {\n        return b.$item().y - a.$item().y || b.$item().x - a.$item().x;\n      } else {\n        return a.$item().y - b.$item().y || a.$item().x - b.$item().x;\n      }\n    });\n    let i = 0;\n    let itemCollision: GridsterItem;\n    let makePush = true;\n    const pushedItems: GridsterItem[] = [];\n    for (; i < conflicts.length; i++) {\n      itemCollision = conflicts[i];\n      if (itemCollision === this.gridsterItem) {\n        continue;\n      }\n      if (!itemCollision.canBeDragged()) {\n        makePush = false;\n        break;\n      }\n      const p = this.pushedItemsTemp.indexOf(itemCollision);\n      if (p > -1 && this.pushedItemsTempPath[p].length > 10) {\n        // stop if item is pushed more than 10 times to break infinite loops\n        makePush = false;\n        break;\n      }\n      if (this.tryPattern[direction][0].call(this, itemCollision, gridsterItem)) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (this.tryPattern[direction][1].call(this, itemCollision, gridsterItem)) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (this.tryPattern[direction][2].call(this, itemCollision, gridsterItem)) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (this.tryPattern[direction][3].call(this, itemCollision, gridsterItem)) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else {\n        makePush = false;\n        break;\n      }\n    }\n    if (!makePush) {\n      i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);\n      if (i > -1) {\n        let j = this.pushedItemsOrder.length - 1;\n        for (; j >= i; j--) {\n          itemCollision = this.pushedItemsOrder[j];\n          this.pushedItemsOrder.pop();\n          this.removeFromTempPushed(itemCollision);\n          this.removeFromPushedItem(itemCollision);\n        }\n      }\n    }\n    this.iteration++;\n    return makePush;\n  }\n\n  private trySouth(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem): boolean {\n    if (!this.gridster.$options().pushDirections.south) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item().y = gridsterItem.$item().y + gridsterItem.$item().rows;\n    if (this.push(gridsterItemCollide, this.fromNorth)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryNorth(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem): boolean {\n    if (!this.gridster.$options().pushDirections.north) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item().y = gridsterItem.$item().y - gridsterItemCollide.$item().rows;\n    if (this.push(gridsterItemCollide, this.fromSouth)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryEast(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem): boolean {\n    if (!this.gridster.$options().pushDirections.east) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item().x = gridsterItem.$item().x + gridsterItem.$item().cols;\n    if (this.push(gridsterItemCollide, this.fromWest)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryWest(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem): boolean {\n    if (!this.gridster.$options().pushDirections.west) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item().x = gridsterItem.$item().x - gridsterItemCollide.$item().cols;\n    if (this.push(gridsterItemCollide, this.fromEast)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private addToTempPushed(gridsterItem: GridsterItem): void {\n    let i = this.pushedItemsTemp.indexOf(gridsterItem);\n    if (i === -1) {\n      i = this.pushedItemsTemp.push(gridsterItem) - 1;\n      this.pushedItemsTempPath[i] = [];\n    }\n    this.pushedItemsTempPath[i].push({\n      x: gridsterItem.$item().x,\n      y: gridsterItem.$item().y\n    });\n  }\n\n  private removeFromTempPushed(gridsterItem: GridsterItem): void {\n    const i = this.pushedItemsTemp.indexOf(gridsterItem);\n    const tempPosition = this.pushedItemsTempPath[i].pop();\n    if (!tempPosition) {\n      return;\n    }\n    gridsterItem.$item().x = tempPosition.x;\n    gridsterItem.$item().y = tempPosition.y;\n    gridsterItem.setSize();\n    if (!this.pushedItemsTempPath[i].length) {\n      this.pushedItemsTemp.splice(i, 1);\n      this.pushedItemsTempPath.splice(i, 1);\n    }\n  }\n\n  private addToPushed(gridsterItem: GridsterItem): void {\n    if (this.pushedItems.indexOf(gridsterItem) < 0) {\n      this.pushedItems.push(gridsterItem);\n      this.pushedItemsPath.push([\n        { x: gridsterItem.item().x || 0, y: gridsterItem.item().y || 0 },\n        { x: gridsterItem.$item().x, y: gridsterItem.$item().y }\n      ]);\n    } else {\n      const i = this.pushedItems.indexOf(gridsterItem);\n      this.pushedItemsPath[i].push({\n        x: gridsterItem.$item().x,\n        y: gridsterItem.$item().y\n      });\n    }\n  }\n\n  private removeFromPushed(i: number): void {\n    if (i > -1) {\n      this.pushedItems.splice(i, 1);\n      this.pushedItemsPath.splice(i, 1);\n    }\n  }\n\n  private removeFromPushedItem(gridsterItem: GridsterItem): void {\n    const i = this.pushedItems.indexOf(gridsterItem);\n    if (i > -1) {\n      this.pushedItemsPath[i].pop();\n      if (!this.pushedItemsPath.length) {\n        this.pushedItems.splice(i, 1);\n        this.pushedItemsPath.splice(i, 1);\n      }\n    }\n  }\n\n  private checkPushedItem(pushedItem: GridsterItem, i: number): boolean {\n    const path = this.pushedItemsPath[i];\n    let j = path.length - 2;\n    let lastPosition;\n    let x;\n    let y;\n    let change = false;\n    for (; j > -1; j--) {\n      lastPosition = path[j];\n      x = pushedItem.$item().x;\n      y = pushedItem.$item().y;\n      pushedItem.$item().x = lastPosition.x;\n      pushedItem.$item().y = lastPosition.y;\n      if (!this.gridster.findItemWithItem(pushedItem.$item())) {\n        pushedItem.setSize();\n        path.splice(j + 1, path.length - j - 1);\n        change = true;\n      } else {\n        pushedItem.$item().x = x;\n        pushedItem.$item().y = y;\n      }\n    }\n    if (path.length < 2) {\n      this.removeFromPushed(i);\n    }\n    return change;\n  }\n}\n","import { Gridster } from './gridster';\nimport { DirTypes } from './gridsterConfig';\nimport { GridsterResizeEventType } from './gridsterResizeEventType';\n\nlet scrollSensitivity: number;\nlet scrollSpeed: number;\nconst intervalDuration = 40;\nlet gridsterElement: HTMLElement | null;\nlet resizeEvent: boolean | undefined;\nlet resizeEventType: GridsterResizeEventType | undefined;\nlet scrollE = false;\nlet scrollW = false;\nlet scrollN = false;\nlet scrollS = false;\nlet animationH: number | null;\nlet animationV: number | null = null;\nlet lastMouseX = 0;\nlet lastMouseY = 0;\nlet maxScrollX = Infinity;\nlet maxScrollY = Infinity;\n\n/**\n * \"requestAnimation\" frame is widely supported, but some server engines,\n * such as deno currently do not support it so we do a fallback to setTimeout\n */\nlet requestAnimation: (callback: (timestamp: number) => void) => number;\nlet cancelAnimation: (id: number) => void;\n\nif (window.requestAnimationFrame && window.cancelAnimationFrame) {\n  requestAnimation = window.requestAnimationFrame;\n  cancelAnimation = window.cancelAnimationFrame;\n} else {\n  requestAnimation = callback => setTimeout(() => callback(Date.now()), 50);\n  cancelAnimation = id => clearTimeout(id);\n}\n\ntype Position = Pick<MouseEvent, 'clientX' | 'clientY'>;\n\ntype CalculatePosition = (position: Position) => void;\n\nexport function scroll(\n  gridster: Gridster,\n  left: number,\n  top: number,\n  width: number,\n  height: number,\n  event: MouseEvent,\n  lastMouse: Position,\n  calculateItemPosition: CalculatePosition,\n  resize?: boolean,\n  resizeEventScrollType?: GridsterResizeEventType\n): void {\n  const $options = gridster.$options();\n  scrollSensitivity = $options.scrollSensitivity;\n  scrollSpeed = $options.scrollSpeed;\n  gridsterElement = gridster.el;\n  resizeEvent = resize;\n  resizeEventType = resizeEventScrollType;\n\n  const offsetWidth = gridsterElement.offsetWidth;\n  const offsetHeight = gridsterElement.offsetHeight;\n  const offsetLeft = gridsterElement.scrollLeft;\n  const offsetTop = gridsterElement.scrollTop;\n\n  const { clientX, clientY } = event;\n\n  lastMouseX = clientX;\n  lastMouseY = clientY;\n\n  if (!$options.disableScrollVertical) {\n    const elemTopOffset = top - offsetTop;\n    const elemBottomOffset = offsetHeight + offsetTop - top - height;\n\n    if (elemBottomOffset < scrollSensitivity) {\n      cancelN();\n      if (!(resizeEvent && resizeEventType && !resizeEventType.south) && !scrollS) {\n        startVerticalScroll(1, calculateItemPosition, gridster);\n      }\n    } else if (offsetTop > 0 && elemTopOffset < scrollSensitivity) {\n      cancelS();\n      if (!(resizeEvent && resizeEventType && !resizeEventType.north) && !scrollN) {\n        startVerticalScroll(-1, calculateItemPosition, gridster);\n      }\n    } else if (lastMouse.clientY !== clientY) {\n      cancelVerticalScroll();\n    }\n  }\n\n  if (!$options.disableScrollHorizontal) {\n    const elemRightOffset = offsetLeft + offsetWidth - left - width;\n    const elemLeftOffset = left - offsetLeft;\n\n    const isRTL = $options.dirType === DirTypes.RTL;\n\n    if (elemRightOffset <= scrollSensitivity) {\n      cancelW();\n      if (!(resizeEvent && resizeEventType && !resizeEventType.east) && !scrollE) {\n        startHorizontalScroll(1, calculateItemPosition, gridster, isRTL);\n      }\n    } else if (offsetLeft > 0 && elemLeftOffset < scrollSensitivity) {\n      cancelE();\n      if (!(resizeEvent && resizeEventType && !resizeEventType.west) && !scrollW) {\n        startHorizontalScroll(-1, calculateItemPosition, gridster, isRTL);\n      }\n    } else if (lastMouse.clientX !== clientX) {\n      cancelHorizontalScroll();\n    }\n  }\n}\n\nfunction startVerticalScroll(sign: number, calculateItemPosition: CalculatePosition, gridster: Gridster): void {\n  if (sign > 0) {\n    scrollS = true;\n\n    const $options = gridster.$options();\n    maxScrollY = $options.maxRows * gridster.curRowHeight + $options.margin - gridster.el.offsetHeight;\n  } else {\n    scrollN = true;\n  }\n\n  let lastUpdate: number | undefined;\n\n  const callback = (timestamp: number) => {\n    if (lastUpdate === undefined) {\n      lastUpdate = timestamp;\n      animationV = requestAnimation(callback);\n      return;\n    }\n\n    if (!gridsterElement || (sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0)) {\n      cancelVerticalScroll();\n      return;\n    }\n\n    const delta = (timestamp - lastUpdate) / intervalDuration;\n    lastUpdate = timestamp;\n\n    const top = sign * Math.round(scrollSpeed * delta);\n\n    // check if maximum scroll position is reached\n    if (scrollS && gridsterElement.scrollTop + top > maxScrollY) {\n      cancelVerticalScroll();\n      return;\n    }\n\n    gridsterElement.scrollTop += top;\n    lastMouseY += top;\n    calculateItemPosition({ clientX: lastMouseX, clientY: lastMouseY });\n    animationV = requestAnimation(callback);\n  };\n  animationV = requestAnimation(callback);\n}\n\nfunction startHorizontalScroll(sign: number, calculateItemPosition: CalculatePosition, gridster: Gridster, isRTL: boolean): void {\n  if (sign > 0) {\n    scrollE = true;\n\n    const $options = gridster.$options();\n    maxScrollX = $options.maxCols * gridster.curColWidth + $options.margin - gridster.el.offsetWidth;\n  } else {\n    scrollW = true;\n  }\n\n  let lastUpdate: number | undefined;\n\n  const callback = (timestamp: number) => {\n    if (lastUpdate === undefined) {\n      lastUpdate = timestamp;\n      animationH = requestAnimation(callback);\n      return;\n    }\n\n    if (!gridsterElement) {\n      cancelHorizontalScroll();\n      return;\n    }\n\n    const delta = (timestamp - lastUpdate) / intervalDuration;\n    lastUpdate = timestamp;\n\n    const scrollAmount = sign * Math.round(scrollSpeed * delta);\n    const left = isRTL ? -scrollAmount : scrollAmount;\n\n    // check if maximum scroll position is reached\n    if (scrollE && gridsterElement.scrollLeft + left > maxScrollX) {\n      cancelHorizontalScroll();\n      return;\n    }\n\n    gridsterElement.scrollLeft += left;\n    lastMouseX += left;\n    calculateItemPosition({ clientX: lastMouseX, clientY: lastMouseY });\n    animationH = requestAnimation(callback);\n  };\n\n  animationH = requestAnimation(callback);\n}\n\nexport function cancelScroll(): void {\n  cancelHorizontalScroll();\n  cancelVerticalScroll();\n  gridsterElement = null;\n}\n\nfunction cancelHorizontalScroll(): void {\n  if (animationH !== null) {\n    cancelAnimation(animationH);\n  }\n  scrollE = false;\n  scrollW = false;\n}\n\nfunction cancelVerticalScroll(): void {\n  if (animationV !== null) {\n    cancelAnimation(animationV);\n  }\n  scrollN = false;\n  scrollS = false;\n}\n\nfunction cancelE(): void {\n  if (scrollE) {\n    cancelHorizontalScroll();\n  }\n}\n\nfunction cancelW(): void {\n  if (scrollW) {\n    cancelHorizontalScroll();\n  }\n}\n\nfunction cancelS(): void {\n  if (scrollS) {\n    cancelVerticalScroll();\n  }\n}\n\nfunction cancelN(): void {\n  if (scrollN) {\n    cancelVerticalScroll();\n  }\n}\n","import { Gridster } from './gridster';\nimport { GridsterItem } from './gridsterItem';\n\nexport class GridsterSwap {\n  private swapedItem: GridsterItem | undefined;\n  private gridster: Gridster;\n\n  constructor(private gridsterItem: GridsterItem) {\n    this.gridster = gridsterItem.gridster;\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = this.swapedItem = null!;\n  }\n\n  swapItems(): void {\n    if (this.gridster.$options().swap) {\n      this.checkSwapBack();\n      this.checkSwap(this.gridsterItem);\n    }\n  }\n\n  checkSwapBack(): void {\n    if (this.swapedItem) {\n      const $item = this.swapedItem.$item();\n      const item = this.swapedItem.item();\n      const x: number = $item.x;\n      const y: number = $item.y;\n      $item.x = item.x || 0;\n      $item.y = item.y || 0;\n      if (this.gridster.checkCollision($item)) {\n        $item.x = x;\n        $item.y = y;\n      } else {\n        this.swapedItem.setSize();\n        this.gridsterItem.$item().x = this.gridsterItem.item().x || 0;\n        this.gridsterItem.$item().y = this.gridsterItem.item().y || 0;\n        this.swapedItem = undefined;\n      }\n    }\n  }\n\n  restoreSwapItem(): void {\n    if (this.swapedItem) {\n      const $item = this.swapedItem.$item();\n      const item = this.swapedItem.item();\n      $item.x = item.x || 0;\n      $item.y = item.y || 0;\n      this.swapedItem.setSize();\n      this.swapedItem = undefined;\n    }\n  }\n\n  setSwapItem(): void {\n    if (this.swapedItem) {\n      this.swapedItem.checkItemChanges(this.swapedItem.$item(), this.swapedItem.item());\n      this.swapedItem = undefined;\n    }\n  }\n\n  checkSwap(pushedBy: GridsterItem): void {\n    const $item = pushedBy.$item();\n    const item = pushedBy.item();\n    let gridsterItemCollision;\n    if (this.gridster.$options().swapWhileDragging) {\n      gridsterItemCollision = this.gridster.checkCollisionForSwaping($item);\n    } else {\n      gridsterItemCollision = this.gridster.checkCollision($item);\n    }\n    if (gridsterItemCollision && gridsterItemCollision !== true && gridsterItemCollision.canBeDragged()) {\n      const gridsterItemCollide: GridsterItem = gridsterItemCollision;\n      const collide$item = gridsterItemCollide.$item();\n      const copyX = $item.x;\n      const copyCollisionX = collide$item.x;\n      const copyCollisionY = collide$item.y;\n      const copyY = $item.y;\n      const diffX = copyX - copyCollisionX;\n      const diffY = copyY - copyCollisionY;\n      collide$item.x = item.x - diffX;\n      collide$item.y = item.y - diffY;\n      $item.x = gridsterItemCollide.item().x + diffX;\n      $item.y = gridsterItemCollide.item().y + diffY;\n      if (this.gridster.checkCollision(collide$item) || this.gridster.checkCollision($item)) {\n        $item.x = copyX;\n        $item.y = copyY;\n        collide$item.x = copyCollisionX;\n        collide$item.y = copyCollisionY;\n      } else {\n        gridsterItemCollide.setSize();\n        this.swapedItem = gridsterItemCollide;\n        if (this.gridster.$options().swapWhileDragging) {\n          this.gridsterItem.checkItemChanges(this.gridsterItem.$item(), this.gridsterItem.item());\n          this.setSwapItem();\n        }\n      }\n    }\n  }\n}\n","import { ChangeDetectorRef, NgZone } from '@angular/core';\n\nimport { Gridster } from './gridster';\nimport { DirTypes } from './gridsterConfig';\nimport { GridsterItem } from './gridsterItem';\nimport { GridsterPush } from './gridsterPush';\nimport { cancelScroll, scroll } from './gridsterScroll';\nimport { GridsterSwap } from './gridsterSwap';\nimport { GridsterUtils } from './gridsterUtils';\n\nconst GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS = 'gridster-item-resizable-handler';\n\nenum Direction {\n  UP = 'UP',\n  DOWN = 'DOWN',\n  LEFT = 'LEFT',\n  RIGHT = 'RIGHT'\n}\n\nexport class GridsterDraggable {\n  lastMouse = {\n    clientX: 0,\n    clientY: 0\n  };\n  offsetLeft: number;\n  offsetTop: number;\n  margin: number;\n  outerMarginTop: number | null;\n  outerMarginRight: number | null;\n  outerMarginBottom: number | null;\n  outerMarginLeft: number | null;\n  diffTop: number;\n  diffLeft: number;\n  originalClientX: number;\n  originalClientY: number;\n  top: number;\n  left: number;\n  height: number;\n  width: number;\n  positionX: number;\n  positionY: number;\n  positionXBackup: number;\n  positionYBackup: number;\n  enabled: boolean;\n  mousemove: () => void;\n  mouseup: () => void;\n  mouseleave: () => void;\n  cancelOnBlur: () => void;\n  touchmove: () => void;\n  touchend: () => void;\n  touchcancel: () => void;\n  mousedown: () => void;\n  touchstart: () => void;\n  push: GridsterPush;\n  swap: GridsterSwap;\n  path: { x: number; y: number }[] = [];\n  collision: GridsterItem | boolean = false;\n\n  constructor(\n    private gridsterItem: GridsterItem,\n    private gridster: Gridster,\n    private zone: NgZone,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  destroy(): void {\n    if (this.gridster.previewStyle) {\n      this.gridster.previewStyle(true);\n    }\n    this.gridsterItem = this.gridster = this.collision = null!;\n    if (this.mousedown) {\n      this.mousedown();\n      this.touchstart();\n    }\n  }\n\n  dragStart(e: MouseEvent): void {\n    if ((e.which && e.which !== 1) || this.gridster.dragInProgress) {\n      return;\n    }\n\n    const options = this.gridster.options();\n    const $options = this.gridster.$options();\n    if (options.draggable && options.draggable.start) {\n      options.draggable.start(this.gridsterItem.item(), this.gridsterItem, e);\n    }\n\n    e.stopPropagation();\n    e.preventDefault();\n\n    this.zone.runOutsideAngular(() => {\n      this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);\n      this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);\n    });\n    this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);\n    this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);\n    this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);\n    this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);\n    this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);\n    this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-moving');\n    this.margin = $options.margin;\n    this.outerMarginTop = $options.outerMarginTop;\n    this.outerMarginRight = $options.outerMarginRight;\n    this.outerMarginBottom = $options.outerMarginBottom;\n    this.outerMarginLeft = $options.outerMarginLeft;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.left = this.gridsterItem.left - this.margin;\n    this.top = this.gridsterItem.top - this.margin;\n    this.originalClientX = e.clientX;\n    this.originalClientY = e.clientY;\n    this.width = this.gridsterItem.width;\n    this.height = this.gridsterItem.height;\n    if ($options.dirType === DirTypes.RTL) {\n      this.diffLeft = e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left;\n    } else {\n      this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;\n    }\n    this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;\n    this.gridster.movingItem = this.gridsterItem.$item();\n    this.gridster.previewStyle(true);\n    this.push = new GridsterPush(this.gridsterItem);\n    this.swap = new GridsterSwap(this.gridsterItem);\n    this.gridster.dragInProgress = true;\n    this.gridster.updateGrid();\n    this.path.push({\n      x: this.gridsterItem.item().x || 0,\n      y: this.gridsterItem.item().y || 0\n    });\n  }\n\n  dragMove = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n    GridsterUtils.checkTouchEvent(e);\n\n    // get the directions of the mouse event\n    let directions = this.getDirections(e);\n\n    const $options = this.gridster.$options();\n    if ($options.enableBoundaryControl) {\n      // prevent moving up at the top of gridster\n      if (\n        directions.includes(Direction.UP) &&\n        this.gridsterItem.el.getBoundingClientRect().top < this.gridster.el.getBoundingClientRect().top + (this.outerMarginTop ?? this.margin)\n      ) {\n        directions = directions.filter(direction => direction != Direction.UP);\n        e = new MouseEvent(e.type, {\n          clientX: e.clientX,\n          clientY: this.lastMouse.clientY\n        });\n      }\n      // prevent moving left at the leftmost column of gridster\n      if (\n        directions.includes(Direction.LEFT) &&\n        this.gridsterItem.el.getBoundingClientRect().left < this.gridster.el.getBoundingClientRect().left + (this.outerMarginLeft ?? this.margin)\n      ) {\n        directions = directions.filter(direction => direction != Direction.LEFT);\n        e = new MouseEvent(e.type, {\n          clientX: this.lastMouse.clientX,\n          clientY: e.clientY\n        });\n      }\n      // prevent moving right at the rightmost column of gridster\n      if (\n        directions.includes(Direction.RIGHT) &&\n        this.gridsterItem.el.getBoundingClientRect().right > this.gridster.el.getBoundingClientRect().right - (this.outerMarginRight ?? this.margin)\n      ) {\n        directions = directions.filter(direction => direction != Direction.RIGHT);\n        e = new MouseEvent(e.type, {\n          clientX: this.lastMouse.clientX,\n          clientY: e.clientY\n        });\n      }\n      // prevent moving down at the bottom of gridster\n      if (\n        directions.includes(Direction.DOWN) &&\n        this.gridsterItem.el.getBoundingClientRect().bottom >\n          this.gridster.el.getBoundingClientRect().bottom - (this.outerMarginBottom ?? this.margin)\n      ) {\n        directions = directions.filter(direction => direction != Direction.DOWN);\n        e = new MouseEvent(e.type, {\n          clientX: e.clientX,\n          clientY: this.lastMouse.clientY\n        });\n      }\n    }\n\n    // do not change item location when there is no direction to go\n    if (directions.length) {\n      this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n      this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n      scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.calculateItemPositionFromMousePosition);\n\n      this.calculateItemPositionFromMousePosition(e);\n    }\n  };\n\n  calculateItemPositionFromMousePosition = (e: MouseEvent): void => {\n    const options = this.gridster.options();\n    if (options.scale) {\n      this.calculateItemPositionWithScale(e, options.scale);\n    } else {\n      this.calculateItemPositionWithoutScale(e);\n    }\n    this.calculateItemPosition();\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.zone.run(() => this.gridster.updateGrid());\n  };\n\n  calculateItemPositionWithScale(e: MouseEvent, scale: number): void {\n    if (this.gridster.$options().dirType === DirTypes.RTL) {\n      this.left = this.gridster.el.scrollWidth - this.originalClientX + (e.clientX - this.originalClientX) / scale + this.diffLeft;\n    } else {\n      this.left = this.originalClientX + (e.clientX - this.originalClientX) / scale + this.offsetLeft - this.diffLeft;\n    }\n    this.top = this.originalClientY + (e.clientY - this.originalClientY) / scale + this.offsetTop - this.diffTop;\n  }\n\n  calculateItemPositionWithoutScale(e: MouseEvent): void {\n    const isRTL = this.gridster.$options().dirType === DirTypes.RTL;\n    if (isRTL) {\n      this.left = this.gridster.el.offsetWidth - (e.clientX + this.offsetLeft - this.diffLeft);\n    } else {\n      this.left = e.clientX + this.offsetLeft - this.diffLeft;\n    }\n\n    this.top = e.clientY + this.offsetTop - this.diffTop;\n  }\n\n  dragStop = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n\n    cancelScroll();\n    this.cancelOnBlur();\n    this.mousemove();\n    this.mouseup();\n    this.mouseleave();\n    this.touchmove();\n    this.touchend();\n    this.touchcancel();\n    this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-moving');\n    this.gridster.dragInProgress = false;\n    this.gridster.updateGrid();\n    this.path = [];\n    const options = this.gridster.options();\n    if (options.draggable && options.draggable.stop) {\n      Promise.resolve(options.draggable.stop(this.gridsterItem.item(), this.gridsterItem, e)).then(this.makeDrag, this.cancelDrag);\n    } else {\n      this.makeDrag();\n    }\n    setTimeout(() => {\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle(true);\n        this.cdRef.markForCheck();\n      }\n    });\n  };\n\n  cancelDrag = (): void => {\n    this.gridsterItem.$item().x = this.gridsterItem.item().x || 0;\n    this.gridsterItem.$item().y = this.gridsterItem.item().y || 0;\n    this.gridsterItem.setSize();\n    if (this.push) {\n      this.push.restoreItems();\n    }\n    if (this.swap) {\n      this.swap.restoreSwapItem();\n    }\n    if (this.push) {\n      this.push.destroy();\n      this.push = null!;\n    }\n    if (this.swap) {\n      this.swap.destroy();\n      this.swap = null!;\n    }\n  };\n\n  makeDrag = (): void => {\n    const options = this.gridster.options();\n    if (\n      this.gridster.$options().draggable.dropOverItems &&\n      options.draggable &&\n      options.draggable.dropOverItemsCallback &&\n      this.collision &&\n      this.collision !== true &&\n      this.collision.$item()\n    ) {\n      options.draggable.dropOverItemsCallback(this.gridsterItem.item(), this.collision.item(), this.gridster);\n    }\n    this.collision = false;\n    this.gridsterItem.setSize();\n    this.gridsterItem.checkItemChanges(this.gridsterItem.$item(), this.gridsterItem.item());\n    if (this.push) {\n      this.push.setPushedItems();\n    }\n    if (this.swap) {\n      this.swap.setSwapItem();\n    }\n    if (this.push) {\n      this.push.destroy();\n      this.push = null!;\n    }\n    if (this.swap) {\n      this.swap.destroy();\n      this.swap = null!;\n    }\n  };\n\n  calculateItemPosition(): void {\n    const $item = (this.gridster.movingItem = this.gridsterItem.$item());\n    this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);\n    this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);\n    this.positionXBackup = $item.x;\n    this.positionYBackup = $item.y;\n    $item.x = this.positionX;\n    if (this.gridster.checkGridCollision($item)) {\n      $item.x = this.positionXBackup;\n    }\n    $item.y = this.positionY;\n    if (this.gridster.checkGridCollision($item)) {\n      $item.y = this.positionYBackup;\n    }\n    this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, this.top);\n\n    if (this.positionXBackup !== $item.x || this.positionYBackup !== $item.y) {\n      const lastPosition = this.path[this.path.length - 1];\n      let direction = '';\n      if (lastPosition.x < $item.x) {\n        direction = this.push.fromWest;\n      } else if (lastPosition.x > $item.x) {\n        direction = this.push.fromEast;\n      } else if (lastPosition.y < $item.y) {\n        direction = this.push.fromNorth;\n      } else if (lastPosition.y > $item.y) {\n        direction = this.push.fromSouth;\n      }\n      const $options = this.gridster.$options();\n      this.push.pushItems(direction, $options.disablePushOnDrag);\n      this.swap.swapItems();\n      this.collision = this.gridster.checkCollision($item);\n      if (this.collision) {\n        $item.x = this.positionXBackup;\n        $item.y = this.positionYBackup;\n        if ($options.draggable.dropOverItems && this.collision !== true && this.collision.$item()) {\n          this.gridster.movingItem = null;\n        }\n      } else {\n        this.path.push({\n          x: $item.x,\n          y: $item.y\n        });\n      }\n      this.push.checkPushBack();\n    } else {\n      // reset the collision when you drag and drop on an adjacent cell that is not empty\n      // and go back to the cell you were in from the beginning,\n      // this is to prevent `dropOverItemsCallback'\n      this.collision = false;\n    }\n    this.gridster.previewStyle(true);\n  }\n\n  toggle(): void {\n    const enableDrag = this.gridsterItem.canBeDragged();\n    if (!this.enabled && enableDrag) {\n      this.enabled = !this.enabled;\n      this.mousedown = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'mousedown', this.dragStartDelay);\n      this.touchstart = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'touchstart', this.dragStartDelay);\n    } else if (this.enabled && !enableDrag) {\n      this.enabled = !this.enabled;\n      this.mousedown();\n      this.touchstart();\n    }\n  }\n\n  dragStartDelay = (e: MouseEvent): void => {\n    const target = e.target as HTMLElement;\n    if (target.classList.contains(GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS)) {\n      return;\n    }\n    if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {\n      return;\n    }\n    GridsterUtils.checkTouchEvent(e);\n    const $options = this.gridster.$options();\n    if (!$options.draggable.delayStart) {\n      this.dragStart(e);\n      return;\n    }\n    const timeout = setTimeout(() => {\n      this.dragStart(e);\n      cancelDrag();\n      this.cdRef.markForCheck();\n    }, $options.draggable.delayStart);\n    const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);\n    const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);\n    const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);\n    const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);\n    const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);\n    const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);\n\n    function cancelMove(eventMove: MouseEvent): void {\n      GridsterUtils.checkTouchEvent(eventMove);\n      if (Math.abs(eventMove.clientX - e.clientX) > 9 || Math.abs(eventMove.clientY - e.clientY) > 9) {\n        cancelDrag();\n      }\n    }\n\n    function cancelDrag(): void {\n      clearTimeout(timeout);\n      cancelOnBlur();\n      cancelMouse();\n      cancelMouseLeave();\n      cancelTouchMove();\n      cancelTouchEnd();\n      cancelTouchCancel();\n    }\n  };\n\n  /**\n   * Returns the list of directions for given mouse event\n   * @param e Mouse event\n   * */\n  private getDirections(e: MouseEvent) {\n    const directions: string[] = [];\n    if (this.lastMouse.clientX === 0 && this.lastMouse.clientY === 0) {\n      this.lastMouse.clientY = e.clientY;\n      this.lastMouse.clientX = e.clientX;\n    }\n    if (this.lastMouse.clientY > e.clientY) {\n      directions.push(Direction.UP);\n    }\n    if (this.lastMouse.clientY < e.clientY) {\n      directions.push(Direction.DOWN);\n    }\n    if (this.lastMouse.clientX < e.clientX) {\n      directions.push(Direction.RIGHT);\n    }\n    if (this.lastMouse.clientX > e.clientX) {\n      directions.push(Direction.LEFT);\n    }\n    return directions;\n  }\n}\n","import { Gridster } from './gridster';\nimport { GridsterItem } from './gridsterItem';\nimport { GridsterItemConfig } from './gridsterItemConfig';\n\nexport class GridsterPushResize {\n  public fromSouth: string = 'fromSouth';\n  public fromNorth: string = 'fromNorth';\n  public fromEast: string = 'fromEast';\n  public fromWest: string = 'fromWest';\n  private pushedItems: GridsterItem[] = [];\n  private pushedItemsPath: GridsterItemConfig[][] = [];\n  private gridster: Gridster;\n  private tryPattern: {\n    fromEast: (gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string) => boolean;\n    fromWest: (gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string) => boolean;\n    fromNorth: (gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string) => boolean;\n    fromSouth: (gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string) => boolean;\n  } = {\n    fromEast: this.tryWest,\n    fromWest: this.tryEast,\n    fromNorth: this.trySouth,\n    fromSouth: this.tryNorth\n  };\n\n  constructor(private gridsterItem: GridsterItem) {\n    this.gridster = gridsterItem.gridster;\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  pushItems(direction: string): boolean {\n    if (this.gridster.$options().pushResizeItems) {\n      return this.push(this.gridsterItem, direction);\n    } else {\n      return false;\n    }\n  }\n\n  restoreItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItem;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      const $item = pushedItem.$item();\n      const item = pushedItem.item();\n      $item.x = item.x || 0;\n      $item.y = item.y || 0;\n      $item.cols = item.cols || 1;\n      $item.row = item.row || 1;\n      pushedItem.setSize();\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  setPushedItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItem;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.checkItemChanges(pushedItem.$item(), pushedItem.item());\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  checkPushBack(): void {\n    let i: number = this.pushedItems.length - 1;\n    let change = false;\n    for (; i > -1; i--) {\n      if (this.checkPushedItem(this.pushedItems[i], i)) {\n        change = true;\n      }\n    }\n    if (change) {\n      this.checkPushBack();\n    }\n  }\n\n  private push(gridsterItem: GridsterItem, direction: string): boolean {\n    const gridsterItemCollision: GridsterItem | boolean = this.gridster.checkCollision(gridsterItem.$item());\n    if (\n      gridsterItemCollision &&\n      gridsterItemCollision !== true &&\n      gridsterItemCollision !== this.gridsterItem &&\n      gridsterItemCollision.canBeResized()\n    ) {\n      if (this.tryPattern[direction].call(this, gridsterItemCollision, gridsterItem, direction)) {\n        return true;\n      }\n    } else if (gridsterItemCollision === false) {\n      return true;\n    }\n    return false;\n  }\n\n  private trySouth(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string): boolean {\n    const $item = gridsterItemCollide.$item();\n    const backUpY = $item.y;\n    const backUpRows = $item.rows;\n    $item.y = gridsterItem.$item().y + gridsterItem.$item().rows;\n    $item.rows = backUpRows + backUpY - $item.y;\n    if (!this.gridster.checkCollisionTwoItems($item, gridsterItem.$item()) && !this.gridster.checkGridCollision($item)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      $item.y = backUpY;\n      $item.rows = backUpRows;\n    }\n    return false;\n  }\n\n  private tryNorth(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string): boolean {\n    const $item = gridsterItemCollide.$item();\n    const backUpRows = $item.rows;\n    $item.rows = gridsterItem.$item().y - $item.y;\n    if (!this.gridster.checkCollisionTwoItems($item, gridsterItem.$item()) && !this.gridster.checkGridCollision($item)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      $item.rows = backUpRows;\n    }\n    return false;\n  }\n\n  private tryEast(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string): boolean {\n    const $item = gridsterItemCollide.$item();\n    const backUpX = $item.x;\n    const backUpCols = $item.cols;\n    $item.x = gridsterItem.$item().x + gridsterItem.$item().cols;\n    $item.cols = backUpCols + backUpX - $item.x;\n    if (!this.gridster.checkCollisionTwoItems($item, gridsterItem.$item()) && !this.gridster.checkGridCollision($item)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      $item.x = backUpX;\n      $item.cols = backUpCols;\n    }\n    return false;\n  }\n\n  private tryWest(gridsterItemCollide: GridsterItem, gridsterItem: GridsterItem, direction: string): boolean {\n    const $item = gridsterItemCollide.$item();\n    const backUpCols = $item.cols;\n    $item.cols = gridsterItem.$item().x - $item.x;\n    if (!this.gridster.checkCollisionTwoItems($item, gridsterItem.$item()) && !this.gridster.checkGridCollision($item)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      $item.cols = backUpCols;\n    }\n    return false;\n  }\n\n  private addToPushed(gridsterItem: GridsterItem): void {\n    const item = gridsterItem.item();\n    const $item = gridsterItem.$item();\n    if (this.pushedItems.indexOf(gridsterItem) < 0) {\n      this.pushedItems.push(gridsterItem);\n      this.pushedItemsPath.push([\n        {\n          x: item.x || 0,\n          y: item.y || 0,\n          cols: item.cols || 0,\n          rows: item.rows || 0\n        },\n        {\n          x: $item.x,\n          y: $item.y,\n          cols: $item.cols,\n          rows: $item.rows\n        }\n      ]);\n    } else {\n      const i = this.pushedItems.indexOf(gridsterItem);\n      this.pushedItemsPath[i].push({\n        x: $item.x,\n        y: $item.y,\n        cols: $item.cols,\n        rows: $item.rows\n      });\n    }\n  }\n\n  private removeFromPushed(i: number): void {\n    if (i > -1) {\n      this.pushedItems.splice(i, 1);\n      this.pushedItemsPath.splice(i, 1);\n    }\n  }\n\n  private checkPushedItem(pushedItem: GridsterItem, i: number): boolean {\n    const path = this.pushedItemsPath[i];\n    const $item = pushedItem.$item();\n    for (let j = path.length - 2; j > -1; j--) {\n      const lastPosition = path[j];\n      const x = $item.x;\n      const y = $item.y;\n      const cols = $item.cols;\n      const rows = $item.rows;\n      $item.x = lastPosition.x;\n      $item.y = lastPosition.y;\n      $item.cols = lastPosition.cols;\n      $item.rows = lastPosition.rows;\n      if (!this.gridster.findItemWithItem($item)) {\n        pushedItem.setSize();\n        path.splice(j + 1, path.length - 1 - j);\n      } else {\n        $item.x = x;\n        $item.y = y;\n        $item.cols = cols;\n        $item.rows = rows;\n      }\n    }\n    if (path.length < 2) {\n      this.removeFromPushed(i);\n      return true;\n    }\n    return false;\n  }\n}\n","import { NgZone, signal } from '@angular/core';\n\nimport { Gridster } from './gridster';\nimport { DirTypes } from './gridsterConfig';\nimport { GridsterItem } from './gridsterItem';\nimport { ResizableHandles } from './gridsterItemConfig';\nimport { GridsterPush } from './gridsterPush';\nimport { GridsterPushResize } from './gridsterPushResize';\nimport { GridsterResizeEventType } from './gridsterResizeEventType';\nimport { cancelScroll, scroll } from './gridsterScroll';\nimport { GridsterUtils } from './gridsterUtils';\n\nexport class GridsterResizable {\n  lastMouse = {\n    clientX: 0,\n    clientY: 0\n  };\n  itemBackup = { x: 0, y: 0, cols: 0, rows: 0 };\n  resizeEventScrollType: GridsterResizeEventType = {\n    west: false,\n    east: false,\n    north: false,\n    south: false\n  };\n\n  /**\n   * The direction function may reference any of the `GridsterResizable` class methods, that are\n   * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference\n   * the `handleNorth` method when the north handle is pressed and moved by a mouse.\n   */\n  private directionFunction: ((event: Pick<MouseEvent, 'clientX' | 'clientY'>) => void) | null = null;\n\n  resizeEnabled = signal<boolean>(false);\n  resizableHandles = signal<ResizableHandles>({\n    s: false,\n    e: false,\n    n: false,\n    w: false,\n    se: false,\n    ne: false,\n    sw: false,\n    nw: false\n  });\n  mousemove: () => void;\n  mouseup: () => void;\n  mouseleave: () => void;\n  cancelOnBlur: () => void;\n  touchmove: () => void;\n  touchend: () => void;\n  touchcancel: () => void;\n  push: GridsterPush;\n  pushResize: GridsterPushResize;\n  minHeight: number;\n  minWidth: number;\n  offsetTop: number;\n  offsetLeft: number;\n  diffTop: number;\n  diffLeft: number;\n  diffRight: number;\n  diffBottom: number;\n  margin: number;\n  outerMarginTop: number | null;\n  outerMarginRight: number | null;\n  outerMarginBottom: number | null;\n  outerMarginLeft: number | null;\n  originalClientX: number;\n  originalClientY: number;\n  top: number;\n  left: number;\n  bottom: number;\n  right: number;\n  width: number;\n  height: number;\n  hasRatio: boolean;\n\n  constructor(\n    private gridsterItem: GridsterItem,\n    private gridster: Gridster,\n    private zone: NgZone\n  ) {}\n\n  destroy(): void {\n    this.gridster?.previewStyle();\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  dragStart(e: MouseEvent): void {\n    if ((e.which && e.which !== 1) || this.gridster.dragInProgress) {\n      return;\n    }\n    const options = this.gridster.options();\n    const $options = this.gridster.$options();\n    if (options.resizable && options.resizable.start) {\n      options.resizable.start(this.gridsterItem.item(), this.gridsterItem, e);\n    }\n    e.stopPropagation();\n    e.preventDefault();\n\n    this.zone.runOutsideAngular(() => {\n      this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);\n      this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);\n    });\n    this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);\n    this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);\n    this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);\n    this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);\n    this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);\n\n    this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.left = this.gridsterItem.left;\n    this.top = this.gridsterItem.top;\n    this.originalClientX = e.clientX;\n    this.originalClientY = e.clientY;\n    this.width = this.gridsterItem.width;\n    this.height = this.gridsterItem.height;\n    this.bottom = this.gridsterItem.top + this.gridsterItem.height;\n    this.right = this.gridsterItem.left + this.gridsterItem.width;\n    this.margin = $options.margin;\n    this.outerMarginTop = $options.outerMarginTop;\n    this.outerMarginRight = $options.outerMarginRight;\n    this.outerMarginBottom = $options.outerMarginBottom;\n    this.outerMarginLeft = $options.outerMarginLeft;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.diffLeft = e.clientX + this.offsetLeft - this.left;\n    this.diffRight = e.clientX + this.offsetLeft - this.right;\n    this.diffTop = e.clientY + this.offsetTop - this.top;\n    this.diffBottom = e.clientY + this.offsetTop - this.bottom;\n    this.minHeight = this.gridster.positionYToPixels(this.gridsterItem.$item().minItemRows || $options.minItemRows) - this.margin;\n    this.minWidth = this.gridster.positionXToPixels(this.gridsterItem.$item().minItemCols || $options.minItemCols) - this.margin;\n    this.gridster.movingItem = this.gridsterItem.$item();\n    this.gridster.previewStyle();\n    this.push = new GridsterPush(this.gridsterItem);\n    this.pushResize = new GridsterPushResize(this.gridsterItem);\n    this.gridster.dragInProgress = true;\n    this.hasRatio = !!($options.itemAspectRatio || this.gridsterItem.$item().itemAspectRatio);\n    this.itemBackup = { x: 0, y: 0, cols: 0, rows: 0 };\n    this.gridster.updateGrid();\n\n    const { classList } = e.target as HTMLElement;\n\n    if (classList.contains('handle-n')) {\n      this.resizeEventScrollType.north = true;\n      this.directionFunction = this.handleNorth;\n    } else if (classList.contains('handle-w')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleEast;\n      } else {\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleWest;\n      }\n    } else if (classList.contains('handle-s')) {\n      this.resizeEventScrollType.south = true;\n      this.directionFunction = this.handleSouth;\n    } else if (classList.contains('handle-e')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleWest;\n      } else {\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleEast;\n      }\n    } else if (classList.contains('handle-nw')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleNorthEast;\n      } else {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleNorthWest;\n      }\n    } else if (classList.contains('handle-ne')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleNorthWest;\n      } else {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleNorthEast;\n      }\n    } else if (classList.contains('handle-sw')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleSouthEast;\n      } else {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleSouthWest;\n      }\n    } else if (classList.contains('handle-se')) {\n      if ($options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleSouthWest;\n      } else {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleSouthEast;\n      }\n    }\n  }\n\n  dragMove = (e: MouseEvent): void => {\n    if (this.directionFunction === null) {\n      throw new Error('The `directionFunction` has not been set before calling `dragMove`.');\n    }\n\n    e.stopPropagation();\n    e.preventDefault();\n    GridsterUtils.checkTouchEvent(e);\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction, true, this.resizeEventScrollType);\n\n    const scale = this.gridster.$options().scale;\n    this.directionFunction({\n      clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,\n      clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale\n    });\n\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.zone.run(() => {\n      this.gridster.updateGrid();\n    });\n  };\n\n  dragStop = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n    cancelScroll();\n    this.mousemove();\n    this.mouseup();\n    this.mouseleave();\n    this.cancelOnBlur();\n    this.touchmove();\n    this.touchend();\n    this.touchcancel();\n    this.gridster.dragInProgress = false;\n    this.resizeEventScrollType = {\n      west: false,\n      east: false,\n      north: false,\n      south: false\n    };\n    this.gridster.updateGrid();\n    const options = this.gridster.options();\n    if (options.resizable && options.resizable.stop) {\n      Promise.resolve(options.resizable.stop(this.gridsterItem.item(), this.gridsterItem, e)).then(this.makeResize, this.cancelResize);\n    } else {\n      this.makeResize();\n    }\n    setTimeout(() => {\n      this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle();\n      }\n    });\n  };\n\n  cancelResize = (): void => {\n    const $item = this.gridsterItem.$item();\n    const item = this.gridsterItem.item();\n    $item.cols = item.cols || 1;\n    $item.rows = item.rows || 1;\n    $item.x = item.x || 0;\n    $item.y = item.y || 0;\n    this.gridsterItem.setSize();\n    this.push.restoreItems();\n    this.pushResize.restoreItems();\n    this.push.destroy();\n    this.push = null!;\n    this.pushResize.destroy();\n    this.pushResize = null!;\n  };\n\n  makeResize = (): void => {\n    this.gridsterItem.setSize();\n    this.gridsterItem.checkItemChanges(this.gridsterItem.$item(), this.gridsterItem.item());\n    this.push.setPushedItems();\n    this.pushResize.setPushedItems();\n    this.push.destroy();\n    this.push = null!;\n    this.pushResize.destroy();\n    this.pushResize = null!;\n  };\n\n  private check = (direction: string): boolean => {\n    this.hasRatio && this.enforceAspectRatio();\n    this.pushResize.pushItems(direction);\n    this.push.pushItems(direction, this.gridster.$options().disablePushOnResize);\n    if (this.gridster.checkCollision(this.gridsterItem.$item(), true)) {\n      this.resetItem(this.hasRatio);\n      return false;\n    }\n    this.gridster.previewStyle();\n    this.pushResize.checkPushBack();\n    this.push.checkPushBack();\n    return true;\n  };\n\n  private getNewNorthPosition = (e: MouseEvent): number => {\n    this.top = e.clientY + this.offsetTop - this.diffTop;\n    this.height = this.bottom - this.top;\n    if (this.minHeight > this.height) {\n      this.height = this.minHeight;\n      this.top = this.bottom - this.minHeight;\n    } else if (this.gridster.$options().enableBoundaryControl) {\n      this.top = Math.max(0, this.top);\n      this.height = this.bottom - this.top;\n    }\n    const marginTop = this.gridster.$options().pushItems ? this.margin : 0;\n    return this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);\n  };\n\n  private handleNorth = (e: MouseEvent): void => {\n    const newPosition = this.getNewNorthPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y !== newPosition) {\n      this.makeItemBackup();\n      $item.rows += $item.y - newPosition;\n      $item.y = newPosition;\n      if (!this.check(this.pushResize.fromSouth)) {\n        return;\n      }\n    }\n    this.setItemTop(this.top);\n    this.setItemHeight(this.height);\n  };\n\n  private getNewWestPosition = (e: MouseEvent): number => {\n    const $options = this.gridster.$options();\n    const clientX = $options.dirType === DirTypes.RTL ? this.originalClientX + (this.originalClientX - e.clientX) : e.clientX;\n    this.left = clientX + this.offsetLeft - this.diffLeft;\n\n    this.width = this.right - this.left;\n    if (this.minWidth > this.width) {\n      this.width = this.minWidth;\n      this.left = this.right - this.minWidth;\n    } else if ($options.enableBoundaryControl) {\n      this.left = Math.max(0, this.left);\n      this.width = this.right - this.left;\n    }\n    const marginLeft = $options.pushItems ? this.margin : 0;\n    return this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);\n  };\n\n  private handleWest = (e: MouseEvent): void => {\n    const newPosition = this.getNewWestPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.x !== newPosition) {\n      this.makeItemBackup();\n      $item.cols += $item.x - newPosition;\n      $item.x = newPosition;\n      if (!this.check(this.pushResize.fromEast)) {\n        return;\n      }\n    }\n    this.setItemLeft(this.left);\n    this.setItemWidth(this.width);\n  };\n\n  private getNewSouthPosition = (e: MouseEvent): number => {\n    this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;\n    if (this.minHeight > this.height) {\n      this.height = this.minHeight;\n    }\n    this.bottom = this.top + this.height;\n    const $options = this.gridster.$options();\n    if ($options.enableBoundaryControl) {\n      const margin = this.outerMarginBottom ?? this.margin;\n      const box = this.gridster.el.getBoundingClientRect();\n      this.bottom = Math.min(this.bottom, box.bottom - box.top - 2 * margin);\n      this.height = this.bottom - this.top;\n    }\n    const marginBottom = $options.pushItems ? 0 : this.margin;\n    return this.gridster.pixelsToPositionY(this.bottom + marginBottom, Math.ceil);\n  };\n\n  private handleSouth = (e: MouseEvent): void => {\n    const newPosition = this.getNewSouthPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y + $item.rows !== newPosition) {\n      this.makeItemBackup();\n      $item.rows = newPosition - $item.y;\n      if (!this.check(this.pushResize.fromNorth)) {\n        return;\n      }\n    }\n    this.setItemHeight(this.height);\n  };\n\n  private getNewEastPosition = (e: MouseEvent) => {\n    const $options = this.gridster.$options();\n    const clientX = $options.dirType === DirTypes.RTL ? this.originalClientX + (this.originalClientX - e.clientX) : e.clientX;\n    this.width = clientX + this.offsetLeft - this.diffRight - this.left;\n\n    if (this.minWidth > this.width) {\n      this.width = this.minWidth;\n    }\n    this.right = this.left + this.width;\n    if ($options.enableBoundaryControl) {\n      const margin = this.outerMarginRight ?? this.margin;\n      const box = this.gridster.el.getBoundingClientRect();\n      this.right = Math.min(this.right, box.right - box.left - 2 * margin);\n      this.width = this.right - this.left;\n    }\n    const marginRight = $options.pushItems ? 0 : this.margin;\n    return this.gridster.pixelsToPositionX(this.right + marginRight, Math.ceil);\n  };\n\n  private handleEast = (e: MouseEvent): void => {\n    const newPosition = this.getNewEastPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.x + $item.cols !== newPosition) {\n      this.makeItemBackup();\n      $item.cols = newPosition - $item.x;\n      if (!this.check(this.pushResize.fromWest)) {\n        return;\n      }\n    }\n    this.setItemWidth(this.width);\n  };\n\n  private handleNorthWest = (e: MouseEvent): void => {\n    const newNorth = this.getNewNorthPosition(e);\n    const newWest = this.getNewWestPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y !== newNorth || $item.x !== newWest) {\n      this.makeItemBackup();\n      $item.rows += $item.y - newNorth;\n      $item.y = newNorth;\n      $item.cols += $item.x - newWest;\n      $item.x = newWest;\n      if (!this.check(this.pushResize.fromSouth)) {\n        return;\n      }\n    }\n    this.setItemTop(this.top);\n    this.setItemHeight(this.height);\n    this.setItemLeft(this.left);\n    this.setItemWidth(this.width);\n  };\n\n  private handleNorthEast = (e: MouseEvent): void => {\n    const newNorth = this.getNewNorthPosition(e);\n    const newEast = this.getNewEastPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y !== newNorth || $item.x + $item.cols !== newEast) {\n      this.makeItemBackup();\n      $item.rows += $item.y - newNorth;\n      $item.y = newNorth;\n      $item.cols = newEast - $item.x;\n      if (!this.check(this.pushResize.fromSouth)) {\n        return;\n      }\n    }\n    this.setItemTop(this.top);\n    this.setItemHeight(this.height);\n    this.setItemWidth(this.width);\n  };\n\n  private handleSouthWest = (e: MouseEvent): void => {\n    const newSouth = this.getNewSouthPosition(e);\n    const newWest = this.getNewWestPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y + $item.rows !== newSouth || $item.x !== newWest) {\n      this.makeItemBackup();\n      $item.rows = newSouth - $item.y;\n      $item.cols += $item.x - newWest;\n      $item.x = newWest;\n      if (!this.check(this.pushResize.fromNorth)) {\n        return;\n      }\n    }\n    this.setItemLeft(this.left);\n    this.setItemHeight(this.height);\n    this.setItemWidth(this.width);\n  };\n\n  private handleSouthEast = (e: MouseEvent): void => {\n    const newSouth = this.getNewSouthPosition(e);\n    const newEast = this.getNewEastPosition(e);\n    const $item = this.gridsterItem.$item();\n    if ($item.y + $item.rows !== newSouth || $item.x + $item.cols !== newEast) {\n      this.makeItemBackup();\n      $item.rows = newSouth - $item.y;\n      $item.cols = newEast - $item.x;\n      if (!this.check(this.pushResize.fromNorth)) {\n        return;\n      }\n    }\n    this.setItemHeight(this.height);\n    this.setItemWidth(this.width);\n  };\n\n  private makeItemBackup() {\n    const $item = this.gridsterItem.$item();\n    this.itemBackup.x = $item.x;\n    this.itemBackup.y = $item.y;\n    this.itemBackup.cols = $item.cols;\n    this.itemBackup.rows = $item.rows;\n  }\n\n  private resetItem(soft = false) {\n    const $item = this.gridsterItem.$item();\n    if ($item.x !== this.itemBackup.x) {\n      $item.x = this.itemBackup.x;\n      if (!soft) {\n        this.left = this.gridster.positionXToPixels($item.x);\n        this.setItemLeft(this.left);\n      }\n    }\n    if ($item.y !== this.itemBackup.y) {\n      $item.y = this.itemBackup.y;\n      if (!soft) {\n        this.top = this.gridster.positionYToPixels($item.y);\n        this.setItemTop(this.top);\n      }\n    }\n    if ($item.cols !== this.itemBackup.cols) {\n      $item.cols = this.itemBackup.cols;\n      if (!soft) {\n        this.setItemWidth(this.gridster.positionXToPixels($item.cols) - this.margin);\n      }\n    }\n    if ($item.rows !== this.itemBackup.rows) {\n      $item.rows = this.itemBackup.rows;\n      if (!soft) {\n        this.setItemHeight(this.gridster.positionYToPixels($item.rows) - this.margin);\n      }\n    }\n  }\n\n  toggle(): void {\n    this.resizeEnabled.set(this.gridsterItem.canBeResized());\n    this.resizableHandles.set(this.gridsterItem.getResizableHandles());\n  }\n\n  dragStartDelay(e: MouseEvent | TouchEvent): void {\n    GridsterUtils.checkTouchEvent(e);\n\n    if (!this.gridster.$options().resizable.delayStart) {\n      this.dragStart(e as MouseEvent);\n      return;\n    }\n\n    const timeout = setTimeout(() => {\n      this.dragStart(e as MouseEvent);\n      cancelDrag();\n    }, this.gridster.$options().resizable.delayStart);\n\n    const { cancelMouse, cancelMouseLeave, cancelOnBlur, cancelTouchMove, cancelTouchEnd, cancelTouchCancel } = this.zone.runOutsideAngular(() => {\n      // Note: all of these events are being added within the `<root>` zone since they all\n      // don't do any view updates and don't require Angular running change detection.\n      // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`\n      // is responsible only for removing event listeners.\n\n      const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);\n      const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);\n      const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);\n      const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);\n      const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);\n      const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);\n      return {\n        cancelMouse,\n        cancelMouseLeave,\n        cancelOnBlur,\n        cancelTouchMove,\n        cancelTouchEnd,\n        cancelTouchCancel\n      };\n    });\n\n    function cancelMove(eventMove: MouseEvent): void {\n      GridsterUtils.checkTouchEvent(eventMove);\n      if (Math.abs(eventMove.clientX - (e as MouseEvent).clientX) > 9 || Math.abs(eventMove.clientY - (e as MouseEvent).clientY) > 9) {\n        cancelDrag();\n      }\n    }\n\n    function cancelDrag(): void {\n      clearTimeout(timeout);\n      cancelOnBlur();\n      cancelMouse();\n      cancelMouseLeave();\n      cancelTouchMove();\n      cancelTouchEnd();\n      cancelTouchCancel();\n    }\n  }\n\n  setItemTop(top: number): void {\n    this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);\n  }\n\n  setItemLeft(left: number): void {\n    this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);\n  }\n\n  setItemHeight(height: number): void {\n    this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');\n  }\n\n  setItemWidth(width: number): void {\n    this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');\n  }\n\n  /**\n   * Enforces the aspect ratio by recalculating grid positions based on current pixel dimensions\n   */\n  private enforceAspectRatio(): void {\n    const $options = this.gridster.$options();\n    const $item = this.gridsterItem.$item();\n    const aspectRatio = $item.itemAspectRatio || $options.itemAspectRatio;\n    if (!aspectRatio) {\n      return;\n    }\n\n    // Calculate target ratio considering column/row dimensions\n    const targetRatio = aspectRatio * (this.gridster.curColWidth / this.gridster.curRowHeight);\n\n    // Get min/max dimensions\n    const minCols = $item.minItemCols || $options.minItemCols;\n    const minRows = $item.minItemRows || $options.minItemRows;\n    const minWidth = this.gridster.positionXToPixels(minCols) - this.margin;\n    const minHeight = this.gridster.positionYToPixels(minRows) - this.margin;\n\n    const maxCols = $item.maxItemCols || $options.maxItemCols || 0;\n    const maxRows = $item.maxItemRows || $options.maxItemRows || 0;\n    const maxWidth = maxCols ? this.gridster.positionXToPixels(maxCols) - this.margin : Number.MAX_VALUE;\n    const maxHeight = maxRows ? this.gridster.positionYToPixels(maxRows) - this.margin : Number.MAX_VALUE;\n\n    let newWidth = this.width;\n    let newHeight = this.height;\n\n    // For north/south resize, prioritize height and calculate width\n    if (this.resizeEventScrollType.north || this.resizeEventScrollType.south) {\n      newWidth = this.height * targetRatio;\n\n      // Check width constraints\n      if (newWidth < minWidth) {\n        newWidth = minWidth;\n        newHeight = minWidth / targetRatio;\n      } else if (newWidth > maxWidth) {\n        newWidth = maxWidth;\n        newHeight = maxWidth / targetRatio;\n      }\n    }\n    // For east/west resize, prioritize width and calculate height\n    else if (this.resizeEventScrollType.east || this.resizeEventScrollType.west) {\n      newHeight = this.width / targetRatio;\n\n      // Check height constraints\n      if (newHeight < minHeight) {\n        newHeight = minHeight;\n        newWidth = minHeight * targetRatio;\n      } else if (newHeight > maxHeight) {\n        newHeight = maxHeight;\n        newWidth = maxHeight * targetRatio;\n      }\n    }\n\n    // Ensure we don't exceed grid boundaries\n    if ($options.enableBoundaryControl) {\n      const box = this.gridster.el.getBoundingClientRect();\n      const margin = Math.max(\n        this.outerMarginTop || this.margin,\n        this.outerMarginRight || this.margin,\n        this.outerMarginBottom || this.margin,\n        this.outerMarginLeft || this.margin\n      );\n\n      const maxRight = box.width - 2 * margin;\n      const maxBottom = box.height - 2 * margin;\n\n      if (this.resizeEventScrollType.west) {\n        if (this.right - newWidth < 0) {\n          newWidth = this.right;\n          newHeight = newWidth / targetRatio;\n        }\n      } else if (this.resizeEventScrollType.east) {\n        if (this.left + newWidth > maxRight) {\n          newWidth = maxRight - this.left;\n          newHeight = newWidth / targetRatio;\n        }\n      }\n\n      if (this.resizeEventScrollType.north) {\n        if (this.bottom - newHeight < 0) {\n          newHeight = this.bottom;\n          newWidth = newHeight * targetRatio;\n        }\n      } else if (this.resizeEventScrollType.south) {\n        if (this.top + newHeight > maxBottom) {\n          newHeight = maxBottom - this.top;\n          newWidth = newHeight * targetRatio;\n        }\n      }\n    }\n\n    // Update dimensions and positions\n    this.width = newWidth;\n    this.height = newHeight;\n\n    if (this.resizeEventScrollType.west) {\n      this.left = this.right - this.width;\n    }\n    if (this.resizeEventScrollType.north) {\n      this.top = this.bottom - this.height;\n    }\n\n    // Update grid positions\n    const marginLeft = $options.pushItems ? 0 : this.margin;\n    const marginTop = $options.pushItems ? 0 : this.margin;\n    const marginRight = $options.pushItems ? this.margin : 0;\n    const marginBottom = $options.pushItems ? this.margin : 0;\n\n    $item.x = this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);\n    $item.y = this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);\n    $item.cols = this.gridster.pixelsToPositionX(this.width + marginRight, Math.ceil);\n    $item.rows = this.gridster.pixelsToPositionY(this.height + marginBottom, Math.ceil);\n\n    // Update visual dimensions\n    this.setItemTop(this.top);\n    this.setItemLeft(this.left);\n    this.setItemWidth(this.width);\n    this.setItemHeight(this.height);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  output,\n  Renderer2,\n  Signal,\n  untracked,\n  ViewEncapsulation\n} from '@angular/core';\n\nimport { Gridster } from './gridster';\nimport { GridsterDraggable } from './gridsterDraggable';\nimport type { GridsterItemConfig, ResizableHandles } from './gridsterItemConfig';\nimport { GridsterResizable } from './gridsterResizable';\nimport { GridsterUtils } from './gridsterUtils';\n\n@Component({\n  selector: 'gridster-item',\n  templateUrl: './gridsterItem.html',\n  styleUrls: ['./gridsterItem.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[style.z-index]': `zIndex()`\n  }\n})\nexport class GridsterItem implements OnInit, OnDestroy {\n  item = input.required<GridsterItemConfig>();\n  itemInit = output<{\n    item: GridsterItemConfig;\n    itemComponent: GridsterItem;\n  }>();\n  itemChange = output<{\n    item: GridsterItemConfig;\n    itemComponent: GridsterItem;\n  }>();\n  itemResize = output<{\n    item: GridsterItemConfig;\n    itemComponent: GridsterItem;\n  }>();\n\n  readonly cdRef = inject(ChangeDetectorRef);\n  readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n  readonly gridster = inject(Gridster);\n  readonly renderer = inject(Renderer2);\n  private readonly zone = inject(NgZone);\n\n  $item: Signal<GridsterItemConfig> = computed<GridsterItemConfig>(() => {\n    return GridsterUtils.merge({}, this.item(), {\n      cols: undefined,\n      rows: undefined,\n      x: undefined,\n      y: undefined,\n      layerIndex: undefined,\n      dragEnabled: undefined,\n      resizeEnabled: undefined,\n      compactEnabled: undefined,\n      itemAspectRatio: undefined,\n      maxItemRows: undefined,\n      minItemRows: undefined,\n      maxItemCols: undefined,\n      minItemCols: undefined,\n      maxItemArea: undefined,\n      minItemArea: undefined,\n      resizableHandles: {\n        s: undefined,\n        e: undefined,\n        n: undefined,\n        w: undefined,\n        se: undefined,\n        ne: undefined,\n        sw: undefined,\n        nw: undefined\n      }\n    });\n  });\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n  drag: GridsterDraggable = new GridsterDraggable(this, this.gridster, this.zone, this.cdRef);\n  resize: GridsterResizable = new GridsterResizable(this, this.gridster, this.zone);\n  notPlaced: boolean;\n  init: boolean;\n\n  zIndex(): number {\n    return this.getLayerIndex() + this.gridster.$options().baseLayerIndex;\n  }\n\n  constructor() {\n    effect(() => {\n      this.$item();\n      if (this.init) {\n        untracked(() => this.setSize());\n      } else {\n        this.gridster.calculateLayout$.next();\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.gridster.addItem(this);\n  }\n\n  ngOnDestroy(): void {\n    this.gridster.removeItem(this);\n    this.drag.destroy();\n    this.resize.destroy();\n    this.drag = this.resize = null!;\n  }\n\n  setSize(): void {\n    this.renderer.setStyle(this.el, 'display', this.notPlaced ? '' : 'block');\n    this.gridster.gridRenderer.updateItem(this.el, this.$item(), this.renderer);\n    this.updateItemSize();\n  }\n\n  updateItemSize(): void {\n    const options = this.gridster.options();\n    const $options = this.gridster.$options();\n    const $item = this.$item();\n    const top = $item.y * this.gridster.curRowHeight;\n    const left = $item.x * this.gridster.curColWidth;\n    const width = $item.cols * this.gridster.curColWidth - $options.margin;\n    const height = $item.rows * this.gridster.curRowHeight - $options.margin;\n\n    this.top = top;\n    this.left = left;\n\n    const item = this.item();\n    if (!this.init && width > 0 && height > 0) {\n      this.init = true;\n      if (item.initCallback) {\n        item.initCallback(item, this);\n      }\n      if (options.itemInitCallback) {\n        options.itemInitCallback(item, this);\n      }\n      this.itemInit.emit({ item, itemComponent: this });\n      if ($options.scrollToNewItems) {\n        this.el.scrollIntoView({\n          block: 'end',\n          inline: 'nearest',\n          behavior: 'smooth'\n        });\n      }\n    }\n    if (width !== this.width || height !== this.height) {\n      this.width = width;\n      this.height = height;\n      if (options.itemResizeCallback) {\n        options.itemResizeCallback(item, this);\n      }\n      this.itemResize.emit({ item, itemComponent: this });\n    }\n  }\n\n  itemChanged(): void {\n    const options = this.gridster.options();\n    const item = this.item();\n    if (options.itemChangeCallback) {\n      options.itemChangeCallback(item, this);\n    }\n    this.itemChange.emit({ item, itemComponent: this });\n  }\n\n  checkItemChanges(newValue: GridsterItemConfig, oldValue: GridsterItemConfig): void {\n    if (newValue.rows === oldValue.rows && newValue.cols === oldValue.cols && newValue.x === oldValue.x && newValue.y === oldValue.y) {\n      return;\n    }\n    const $item = this.$item();\n    if (this.gridster.checkCollision($item)) {\n      $item.x = oldValue.x || 0;\n      $item.y = oldValue.y || 0;\n      $item.cols = oldValue.cols || 1;\n      $item.rows = oldValue.rows || 1;\n      this.setSize();\n    } else {\n      const item = this.item();\n      item.cols = $item.cols;\n      item.rows = $item.rows;\n      item.x = $item.x;\n      item.y = $item.y;\n      this.gridster.calculateLayout$.next();\n      this.itemChanged();\n    }\n  }\n\n  canBeDragged(): boolean {\n    const gridDragEnabled = this.gridster.$options().draggable.enabled;\n    const $item = this.$item();\n    const itemDragEnabled = $item.dragEnabled === undefined ? gridDragEnabled : $item.dragEnabled;\n    return !this.gridster.mobile && gridDragEnabled && itemDragEnabled;\n  }\n\n  canBeResized(): boolean {\n    const gridResizable = this.gridster.$options().resizable.enabled;\n    const $item = this.$item();\n    const itemResizable = $item.resizeEnabled === undefined ? gridResizable : $item.resizeEnabled;\n    return !this.gridster.mobile && gridResizable && itemResizable;\n  }\n\n  getResizableHandles(): ResizableHandles {\n    const gridResizableHandles = this.gridster.$options().resizable.handles;\n    const itemResizableHandles = this.$item().resizableHandles;\n    // use grid settings if no settings are provided for the item.\n    if (itemResizableHandles === undefined) {\n      return gridResizableHandles;\n    }\n    // else merge the settings\n    return {\n      ...gridResizableHandles,\n      ...itemResizableHandles\n    };\n  }\n\n  bringToFront(offset: number): void {\n    if (offset && offset <= 0) {\n      return;\n    }\n    const layerIndex = this.getLayerIndex();\n    const topIndex = this.gridster.$options().maxLayerIndex;\n    if (layerIndex < topIndex) {\n      const targetIndex = offset ? layerIndex + offset : topIndex;\n      this.item().layerIndex = this.$item().layerIndex = targetIndex > topIndex ? topIndex : targetIndex;\n    }\n  }\n\n  sendToBack(offset: number): void {\n    if (offset && offset <= 0) {\n      return;\n    }\n    const layerIndex = this.getLayerIndex();\n    if (layerIndex > 0) {\n      const targetIndex = offset ? layerIndex - offset : 0;\n      this.item().layerIndex = this.$item().layerIndex = targetIndex < 0 ? 0 : targetIndex;\n    }\n  }\n\n  private getLayerIndex(): number {\n    const item = this.item();\n    if (item.layerIndex !== undefined) {\n      return item.layerIndex;\n    }\n    if (this.gridster.$options().defaultLayerIndex !== undefined) {\n      return this.gridster.$options().defaultLayerIndex;\n    }\n    return 0;\n  }\n\n  protected readonly JSON = JSON;\n}\n","<ng-content />\n@if (resize.resizableHandles().s && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-s\"\n  ></div>\n}\n@if (resize.resizableHandles().e && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-e\"\n  ></div>\n}\n@if (resize.resizableHandles().n && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-n\"\n  ></div>\n}\n@if (resize.resizableHandles().w && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-w\"\n  ></div>\n}\n@if (resize.resizableHandles().se && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-se\"\n  ></div>\n}\n@if (resize.resizableHandles().ne && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-ne\"\n  ></div>\n}\n@if (resize.resizableHandles().sw && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-sw\"\n  ></div>\n}\n@if (resize.resizableHandles().nw && resize.resizeEnabled()) {\n  <div\n    (mousedown)=\"resize.dragStartDelay($event)\"\n    (touchstart)=\"resize.dragStartDelay($event)\"\n    class=\"gridster-item-resizable-handler handle-nw\"\n  ></div>\n}\n","/*\n * Public API Surface of gridster\n */\n\nexport { Gridster } from './lib/gridster';\nexport { GridType, DisplayGrid, CompactType, DirTypes } from './lib/gridsterConfig';\nexport type { GridsterApi, GridsterConfig, Draggable, Resizable, PushDirections } from './lib/gridsterConfig';\nexport { GridsterConfigService } from './lib/gridsterConfig.constant';\nexport { GridsterItem } from './lib/gridsterItem';\nexport type { GridsterItemConfig, ResizableHandles } from './lib/gridsterItemConfig';\nexport { GridsterPush } from './lib/gridsterPush';\nexport { GridsterPushResize } from './lib/gridsterPushResize';\nexport { GridsterSwap } from './lib/gridsterSwap';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}