{"version":3,"file":"angular-gridster2.mjs","sources":["../../../projects/angular-gridster2/src/lib/gridsterConfig.interface.ts","../../../projects/angular-gridster2/src/lib/gridsterCompact.service.ts","../../../projects/angular-gridster2/src/lib/gridsterConfig.constant.ts","../../../projects/angular-gridster2/src/lib/gridsterUtils.service.ts","../../../projects/angular-gridster2/src/lib/gridsterEmptyCell.service.ts","../../../projects/angular-gridster2/src/lib/gridsterRenderer.service.ts","../../../projects/angular-gridster2/src/lib/gridsterPreview.component.ts","../../../projects/angular-gridster2/src/lib/gridster.component.ts","../../../projects/angular-gridster2/src/lib/gridster.html","../../../projects/angular-gridster2/src/lib/gridsterPush.service.ts","../../../projects/angular-gridster2/src/lib/gridsterScroll.service.ts","../../../projects/angular-gridster2/src/lib/gridsterSwap.service.ts","../../../projects/angular-gridster2/src/lib/gridsterDraggable.service.ts","../../../projects/angular-gridster2/src/lib/gridsterPushResize.service.ts","../../../projects/angular-gridster2/src/lib/gridsterResizable.service.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.component.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.html","../../../projects/angular-gridster2/src/lib/gridsterItem.interface.ts","../../../projects/angular-gridster2/src/lib/gridster.interface.ts","../../../projects/angular-gridster2/src/lib/gridster.module.ts","../../../projects/angular-gridster2/src/public_api.ts","../../../projects/angular-gridster2/src/angular-gridster2.ts"],"sourcesContent":["import { GridsterComponentInterface } from './gridster.interface';\nimport {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\n\nexport type gridTypes =\n | 'fit'\n | 'scrollVertical'\n | 'scrollHorizontal'\n | 'fixed'\n | 'verticalFixed'\n | '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\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}\n\nexport enum DirTypes {\n LTR = 'ltr',\n RTL = 'rtl'\n}\n\nexport type dirTypes = 'ltr' | 'rtl';\n\nexport interface 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 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 | null;\n scrollSpeed?: number;\n initCallback?: (gridster: GridsterComponentInterface) => void;\n destroyCallback?: (gridster: GridsterComponentInterface) => void;\n gridSizeChangedCallback?: (gridster: GridsterComponentInterface) => void;\n itemChangeCallback?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface\n ) => void;\n itemResizeCallback?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface\n ) => void;\n itemInitCallback?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface\n ) => void;\n itemRemovedCallback?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface\n ) => void;\n itemValidateCallback?: (item: GridsterItem) => 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: GridsterItem) => void;\n emptyCellContextMenuCallback?: (\n event: MouseEvent,\n item: GridsterItem\n ) => void;\n emptyCellDropCallback?: (event: DragEvent, item: GridsterItem) => void;\n emptyCellDragCallback?: (event: MouseEvent, item: GridsterItem) => void;\n emptyCellDragMaxCols?: number;\n emptyCellDragMaxRows?: number;\n ignoreMarginInRow?: boolean;\n dirType?: dirTypes;\n api?: {\n resize?: () => void;\n optionsChanged?: () => void;\n getNextPossiblePosition?: (newItem: GridsterItem) => boolean;\n getFirstPossiblePosition?: (item: GridsterItem) => GridsterItem;\n getLastPossiblePosition?: (item: GridsterItem) => GridsterItem;\n getItemComponent?: (\n item: GridsterItem\n ) => GridsterItemComponentInterface | undefined;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [propName: string]: any;\n}\n\nexport interface DragBase {\n enabled?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stop?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface,\n event: MouseEvent\n ) => Promise | void;\n start?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface,\n event: MouseEvent\n ) => void;\n delayStart?: number;\n}\n\nexport interface Draggable extends DragBase {\n ignoreContentClass?: string;\n ignoreContent?: boolean;\n dragHandleClass?: string;\n dropOverItems?: boolean;\n dropOverItemsCallback?: (\n source: GridsterItem,\n target: GridsterItem,\n grid?: GridsterComponentInterface\n ) => void;\n}\n\nexport interface Resizable extends DragBase {\n handles?: {\n s: boolean;\n e: boolean;\n n: boolean;\n w: boolean;\n se: boolean;\n ne: boolean;\n sw: boolean;\n nw: boolean;\n };\n}\n\nexport interface PushDirections {\n north: boolean;\n east: boolean;\n south: boolean;\n west: boolean;\n}\n","import { GridsterComponentInterface } from './gridster.interface';\nimport {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { CompactType } from './gridsterConfig.interface';\n\nexport class GridsterCompact {\n constructor(private gridster: GridsterComponentInterface) {}\n\n destroy(): void {\n this.gridster = null!;\n }\n\n checkCompact(): void {\n if (this.gridster.$options.compactType !== CompactType.None) {\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\n this.checkCompactMovement('y', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeft\n ) {\n this.checkCompactMovement('x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\n ) {\n this.checkCompactMovement('y', -1);\n this.checkCompactMovement('x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\n ) {\n this.checkCompactMovement('x', -1);\n this.checkCompactMovement('y', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactRight\n ) {\n this.checkCompactMovement('x', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\n ) {\n this.checkCompactMovement('y', -1);\n this.checkCompactMovement('x', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactRightAndUp\n ) {\n this.checkCompactMovement('x', 1);\n this.checkCompactMovement('y', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDown\n ) {\n this.checkCompactMovement('y', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\n ) {\n this.checkCompactMovement('y', 1);\n this.checkCompactMovement('x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\n ) {\n this.checkCompactMovement('y', 1);\n this.checkCompactMovement('x', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\n ) {\n this.checkCompactMovement('x', -1);\n this.checkCompactMovement('y', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\n ) {\n this.checkCompactMovement('x', 1);\n this.checkCompactMovement('y', 1);\n }\n }\n }\n\n checkCompactItem(item: GridsterItem): void {\n if (this.gridster.$options.compactType !== CompactType.None) {\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\n this.moveTillCollision(item, 'y', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeft\n ) {\n this.moveTillCollision(item, 'x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\n ) {\n this.moveTillCollision(item, 'y', -1);\n this.moveTillCollision(item, 'x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\n ) {\n this.moveTillCollision(item, 'x', -1);\n this.moveTillCollision(item, 'y', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\n ) {\n this.moveTillCollision(item, 'y', -1);\n this.moveTillCollision(item, 'x', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDown\n ) {\n this.moveTillCollision(item, 'y', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\n ) {\n this.moveTillCollision(item, 'y', 1);\n this.moveTillCollision(item, 'x', -1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\n ) {\n this.moveTillCollision(item, 'x', -1);\n this.moveTillCollision(item, 'y', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\n ) {\n this.moveTillCollision(item, 'y', 1);\n this.moveTillCollision(item, 'x', 1);\n } else if (\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\n ) {\n this.moveTillCollision(item, 'x', 1);\n this.moveTillCollision(item, 'y', 1);\n }\n }\n }\n\n private checkCompactMovement(direction: 'x' | 'y', delta: number): void {\n let widgetMoved = false;\n this.gridster.grid.forEach((widget: GridsterItemComponentInterface) => {\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(\n item: GridsterItem,\n direction: 'x' | 'y',\n delta: number\n ): 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","import {\n CompactType,\n DirTypes,\n DisplayGrid,\n GridsterConfig,\n GridType\n} from './gridsterConfig.interface';\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 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 { GridsterComponentInterface } from './gridster.interface';\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(\n gridster: GridsterComponentInterface,\n e: MouseEvent\n ): boolean {\n if (gridster.$options.draggable.ignoreContent) {\n if (\n !GridsterUtils.checkDragHandleClass(\n e.target as HTMLElement,\n e.currentTarget as HTMLElement,\n gridster.$options.draggable.dragHandleClass,\n gridster.$options.draggable.ignoreContentClass\n )\n ) {\n return true;\n }\n } else {\n if (\n GridsterUtils.checkContentClass(\n e.target as HTMLElement,\n e.currentTarget as HTMLElement,\n gridster.$options.draggable.ignoreContentClass\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n static checkContentClassForEmptyCellClickEvent(\n gridster: GridsterComponentInterface,\n e: MouseEvent\n ): boolean {\n return (\n GridsterUtils.checkContentClass(\n e.target as HTMLElement,\n e.currentTarget as HTMLElement,\n gridster.$options.draggable.ignoreContentClass\n ) ||\n GridsterUtils.checkContentClass(\n e.target as HTMLElement,\n e.currentTarget as HTMLElement,\n gridster.$options.draggable.dragHandleClass\n )\n );\n }\n\n static checkDragHandleClass(\n target: HTMLElement,\n current: HTMLElement,\n dragHandleClass: string,\n ignoreContentClass\n ): 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(\n target.parentNode as HTMLElement,\n current,\n dragHandleClass,\n ignoreContentClass\n );\n }\n\n static checkContentClass(\n target: HTMLElement,\n current: HTMLElement,\n contentClass: string\n ): boolean {\n if (!target || target === current) {\n return false;\n }\n if (\n target.hasAttribute('class') &&\n target.getAttribute('class')!.split(' ').indexOf(contentClass) > -1\n ) {\n return true;\n } else {\n return GridsterUtils.checkContentClass(\n target.parentNode as HTMLElement,\n current,\n contentClass\n );\n }\n }\n\n static compareItems(\n a: { x: number; y: number },\n b: { x: number; y: number }\n ): 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 { GridsterUtils } from './gridsterUtils.service';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { GridsterItem } from './gridsterItem.interface';\n\nexport class GridsterEmptyCell {\n initialItem: GridsterItem | 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: GridsterComponentInterface) {}\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 if (\n this.gridster.$options.enableEmptyCellClick &&\n !this.removeEmptyCellClickListenerFn &&\n this.gridster.options.emptyCellClickCallback\n ) {\n this.removeEmptyCellClickListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'click',\n this.emptyCellClickCb\n );\n this.removeEmptyCellTouchendListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'touchend',\n this.emptyCellClickCb\n );\n } else if (\n !this.gridster.$options.enableEmptyCellClick &&\n this.removeEmptyCellClickListenerFn &&\n this.removeEmptyCellTouchendListenerFn\n ) {\n this.removeEmptyCellClickListenerFn();\n this.removeEmptyCellTouchendListenerFn();\n this.removeEmptyCellClickListenerFn = null;\n this.removeEmptyCellTouchendListenerFn = null;\n }\n if (\n this.gridster.$options.enableEmptyCellContextMenu &&\n !this.removeEmptyCellContextMenuListenerFn &&\n this.gridster.options.emptyCellContextMenuCallback\n ) {\n this.removeEmptyCellContextMenuListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'contextmenu',\n this.emptyCellContextMenuCb\n );\n } else if (\n !this.gridster.$options.enableEmptyCellContextMenu &&\n this.removeEmptyCellContextMenuListenerFn\n ) {\n this.removeEmptyCellContextMenuListenerFn();\n this.removeEmptyCellContextMenuListenerFn = null;\n }\n if (\n this.gridster.$options.enableEmptyCellDrop &&\n !this.removeEmptyCellDropListenerFn &&\n this.gridster.options.emptyCellDropCallback\n ) {\n this.removeEmptyCellDropListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'drop',\n this.emptyCellDragDrop\n );\n this.gridster.zone.runOutsideAngular(() => {\n this.removeEmptyCellDragoverListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'dragover',\n this.emptyCellDragOver\n );\n });\n this.removeDocumentDragendListenerFn = this.gridster.renderer.listen(\n 'document',\n 'dragend',\n () => {\n this.gridster.movingItem = null;\n this.gridster.previewStyle();\n }\n );\n } else if (\n !this.gridster.$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 (\n this.gridster.$options.enableEmptyCellDrag &&\n !this.removeEmptyCellMousedownListenerFn &&\n this.gridster.options.emptyCellDragCallback\n ) {\n this.removeEmptyCellMousedownListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'mousedown',\n this.emptyCellMouseDown\n );\n this.removeEmptyCellTouchstartListenerFn = this.gridster.renderer.listen(\n this.gridster.el,\n 'touchstart',\n this.emptyCellMouseDown\n );\n } else if (\n !this.gridster.$options.enableEmptyCellDrag &&\n this.removeEmptyCellMousedownListenerFn &&\n this.removeEmptyCellTouchstartListenerFn\n ) {\n this.removeEmptyCellMousedownListenerFn();\n this.removeEmptyCellTouchstartListenerFn();\n this.removeEmptyCellMousedownListenerFn = null;\n this.removeEmptyCellTouchstartListenerFn = null;\n }\n }\n\n emptyCellClickCb = (e: MouseEvent): void => {\n if (\n !this.gridster ||\n this.gridster.movingItem ||\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n ) {\n return;\n }\n const item = this.getValidItemFromEvent(e);\n if (!item) {\n return;\n }\n if (this.gridster.options.emptyCellClickCallback) {\n this.gridster.options.emptyCellClickCallback(e, item);\n }\n this.gridster.cdRef.markForCheck();\n };\n\n emptyCellContextMenuCb = (e: MouseEvent): void => {\n if (\n this.gridster.movingItem ||\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const item = this.getValidItemFromEvent(e);\n if (!item) {\n return;\n }\n if (this.gridster.options.emptyCellContextMenuCallback) {\n this.gridster.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 if (this.gridster.options.emptyCellDropCallback) {\n this.gridster.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 (\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const item = this.getValidItemFromEvent(e);\n const leftMouseButtonCode = 1;\n if (\n !item ||\n (e.buttons !== leftMouseButtonCode && !(e instanceof TouchEvent))\n ) {\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(\n 'window',\n 'mousemove',\n this.emptyCellMouseMove\n );\n this.removeWindowTouchmoveListenerFn = this.gridster.renderer.listen(\n 'window',\n 'touchmove',\n this.emptyCellMouseMove\n );\n });\n this.removeWindowMouseupListenerFn = this.gridster.renderer.listen(\n 'window',\n 'mouseup',\n this.emptyCellMouseUp\n );\n this.removeWindowTouchendListenerFn = this.gridster.renderer.listen(\n 'window',\n 'touchend',\n this.emptyCellMouseUp\n );\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 if (\n this.gridster.options.emptyCellDragCallback &&\n this.gridster.movingItem\n ) {\n this.gridster.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 (\n (e.clientX - rect.left) / scale +\n this.gridster.el.scrollLeft -\n this.gridster.gridRenderer.getLeftMargin()\n );\n }\n return (\n e.clientX +\n this.gridster.el.scrollLeft -\n rect.left -\n this.gridster.gridRenderer.getLeftMargin()\n );\n }\n\n getPixelsY(e: MouseEvent, rect: ClientRect): number {\n const scale = this.gridster.options.scale;\n if (scale) {\n return (\n (e.clientY - rect.top) / scale +\n this.gridster.el.scrollTop -\n this.gridster.gridRenderer.getTopMargin()\n );\n }\n return (\n e.clientY +\n this.gridster.el.scrollTop -\n rect.top -\n this.gridster.gridRenderer.getTopMargin()\n );\n }\n\n getValidItemFromEvent(\n e: MouseEvent,\n oldItem?: GridsterItem | null\n ): GridsterItem | 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 item: GridsterItem = {\n x: this.gridster.pixelsToPositionX(x, Math.floor, true),\n y: this.gridster.pixelsToPositionY(y, Math.floor, true),\n cols: this.gridster.$options.defaultItemCols,\n rows: this.gridster.$options.defaultItemRows\n };\n if (oldItem) {\n item.cols = Math.min(\n Math.abs(oldItem.x - item.x) + 1,\n this.gridster.$options.emptyCellDragMaxCols\n );\n item.rows = Math.min(\n Math.abs(oldItem.y - item.y) + 1,\n this.gridster.$options.emptyCellDragMaxRows\n );\n if (oldItem.x < item.x) {\n item.x = oldItem.x;\n } else if (\n oldItem.x - item.x >\n this.gridster.$options.emptyCellDragMaxCols - 1\n ) {\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 (\n oldItem.y - item.y >\n this.gridster.$options.emptyCellDragMaxRows - 1\n ) {\n item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;\n }\n }\n if (\n !this.gridster.$options.enableOccupiedCellDrop &&\n this.gridster.checkCollision(item)\n ) {\n return;\n }\n return item;\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes, GridType } from './gridsterConfig.interface';\nimport { GridsterItem } from './gridsterItem.interface';\nimport {\n CommonGridStyle,\n GridColumnCachedStyle,\n GridRowCachedStyle\n} from './gridsterRenderer.interface';\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 = {};\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 = {};\n\n constructor(private gridster: GridsterComponentInterface) {}\n\n destroy(): void {\n this.gridster = null!;\n }\n\n updateItem(el: Element, item: GridsterItem, renderer: Renderer2): void {\n if (this.gridster.mobile) {\n this.clearCellPosition(renderer, el);\n if (this.gridster.$options.keepFixedHeightInMobile) {\n renderer.setStyle(\n el,\n 'height',\n (item.rows - 1) * this.gridster.$options.margin +\n item.rows * this.gridster.$options.fixedRowHeight +\n 'px'\n );\n } else {\n renderer.setStyle(\n el,\n 'height',\n (item.rows * this.gridster.curWidth) / item.cols + 'px'\n );\n }\n if (this.gridster.$options.keepFixedWidthInMobile) {\n renderer.setStyle(\n el,\n 'width',\n this.gridster.$options.fixedColWidth + 'px'\n );\n } else {\n renderer.setStyle(el, 'width', '');\n }\n\n renderer.setStyle(\n el,\n 'margin-bottom',\n this.gridster.$options.margin + 'px'\n );\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 =\n this.gridster.curColWidth * item.cols - this.gridster.$options.margin;\n const height =\n this.gridster.curRowHeight * item.rows - this.gridster.$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 (this.gridster.$options.outerMargin) {\n if (this.gridster.rows === item.rows + item.y) {\n if (this.gridster.$options.outerMarginBottom !== null) {\n marginBottom = this.gridster.$options.outerMarginBottom + 'px';\n } else {\n marginBottom = this.gridster.$options.margin + 'px';\n }\n }\n if (this.gridster.columns === item.cols + item.x) {\n if (this.gridster.$options.outerMarginBottom !== null) {\n marginRight = this.gridster.$options.outerMarginRight + 'px';\n } else {\n marginRight = this.gridster.$options.margin + 'px';\n }\n }\n }\n\n renderer.setStyle(el, 'margin-bottom', marginBottom);\n renderer.setStyle(\n el,\n DirTypes.LTR ? 'margin-right' : 'margin-left',\n marginRight\n );\n }\n }\n\n updateGridster(): void {\n let addClass = '';\n let removeClass1 = '';\n let removeClass2 = '';\n let removeClass3 = '';\n if (this.gridster.$options.gridType === GridType.Fit) {\n addClass = GridType.Fit;\n removeClass1 = GridType.ScrollVertical;\n removeClass2 = GridType.ScrollHorizontal;\n removeClass3 = GridType.Fixed;\n } else if (this.gridster.$options.gridType === GridType.ScrollVertical) {\n this.gridster.curRowHeight =\n this.gridster.curColWidth * this.gridster.$options.rowHeightRatio;\n addClass = GridType.ScrollVertical;\n removeClass1 = GridType.Fit;\n removeClass2 = GridType.ScrollHorizontal;\n removeClass3 = GridType.Fixed;\n } else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {\n const widthRatio = this.gridster.$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 (this.gridster.$options.gridType === GridType.Fixed) {\n this.gridster.curColWidth =\n this.gridster.$options.fixedColWidth +\n (this.gridster.$options.ignoreMarginInRow\n ? 0\n : this.gridster.$options.margin);\n this.gridster.curRowHeight =\n this.gridster.$options.fixedRowHeight +\n (this.gridster.$options.ignoreMarginInRow\n ? 0\n : this.gridster.$options.margin);\n addClass = GridType.Fixed;\n removeClass1 = GridType.Fit;\n removeClass2 = GridType.ScrollVertical;\n removeClass3 = GridType.ScrollHorizontal;\n } else if (this.gridster.$options.gridType === GridType.VerticalFixed) {\n this.gridster.curRowHeight =\n this.gridster.$options.fixedRowHeight +\n (this.gridster.$options.ignoreMarginInRow\n ? 0\n : this.gridster.$options.margin);\n addClass = GridType.ScrollVertical;\n removeClass1 = GridType.Fit;\n removeClass2 = GridType.ScrollHorizontal;\n removeClass3 = GridType.Fixed;\n } else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {\n this.gridster.curColWidth =\n this.gridster.$options.fixedColWidth +\n (this.gridster.$options.ignoreMarginInRow\n ? 0\n : this.gridster.$options.margin);\n addClass = GridType.ScrollHorizontal;\n removeClass1 = GridType.Fit;\n removeClass2 = GridType.ScrollVertical;\n removeClass3 = GridType.Fixed;\n }\n\n if (\n this.gridster.mobile ||\n (this.gridster.$options.setGridSize &&\n this.gridster.$options.gridType !== GridType.Fit)\n ) {\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 // generates the new style\n const newPos: GridColumnCachedStyle = {\n left: this.gridster.curColWidth * i,\n width: this.gridster.curColWidth - this.gridster.$options.margin,\n height:\n this.gridster.gridRows.length * this.gridster.curRowHeight -\n this.gridster.$options.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 (\n last &&\n last.left === newPos.left &&\n last.width === newPos.width &&\n last.height === newPos.height\n ) {\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 // generates the new style\n const newPos: GridRowCachedStyle = {\n top: this.gridster.curRowHeight * i,\n width:\n this.gridster.gridColumns.length * this.gridster.curColWidth +\n this.gridster.$options.margin,\n height: this.gridster.curRowHeight - this.gridster.$options.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 (\n last &&\n last.top === newPos.top &&\n last.width === newPos.width &&\n last.height === newPos.height\n ) {\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 dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;\n if (this.gridster.$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(\n renderer: Renderer2,\n el: Element,\n x: number,\n y: number\n ): void {\n const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;\n if (this.gridster.$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 if (this.gridster.$options.outerMargin) {\n if (this.gridster.$options.outerMarginLeft !== null) {\n return this.gridster.$options.outerMarginLeft;\n } else {\n return this.gridster.$options.margin;\n }\n } else {\n return 0;\n }\n }\n\n getTopMargin(): number {\n if (this.gridster.$options.outerMargin) {\n if (this.gridster.$options.outerMarginTop !== null) {\n return this.gridster.$options.outerMarginTop;\n } else {\n return this.gridster.$options.margin;\n }\n } else {\n return 0;\n }\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { GridsterItem } from './gridsterItem.interface';\nimport { GridsterRenderer } from './gridsterRenderer.service';\n\n@Component({\n selector: 'gridster-preview',\n template: '',\n styleUrls: ['./gridsterPreview.css'],\n encapsulation: ViewEncapsulation.None,\n standalone: true\n})\nexport class GridsterPreviewComponent implements OnInit, OnDestroy {\n @Input() previewStyle$: EventEmitter;\n @Input() gridRenderer: GridsterRenderer;\n private el: HTMLElement;\n private sub: Subscription;\n\n constructor(el: ElementRef, private renderer: Renderer2) {\n this.el = el.nativeElement;\n }\n\n ngOnInit(): void {\n this.sub = this.previewStyle$.subscribe(options =>\n this.previewStyle(options)\n );\n }\n\n ngOnDestroy(): void {\n if(this.sub) {\n this.sub.unsubscribe();\n }\n }\n\n private previewStyle(item: GridsterItem | null): void {\n if (item) {\n this.renderer.setStyle(this.el, 'display', 'block');\n this.gridRenderer.updateItem(this.el, item, this.renderer);\n } else {\n this.renderer.setStyle(this.el, 'display', '');\n }\n }\n}\n","import { NgForOf, NgStyle } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { debounceTime, Subject, switchMap, takeUntil, timer } from 'rxjs';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { GridsterCompact } from './gridsterCompact.service';\n\nimport { GridsterConfigService } from './gridsterConfig.constant';\nimport { GridsterConfig, GridType } from './gridsterConfig.interface';\nimport { GridsterConfigS } from './gridsterConfigS.interface';\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\nimport {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterPreviewComponent } from './gridsterPreview.component';\nimport { GridsterRenderer } from './gridsterRenderer.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'gridster',\n templateUrl: './gridster.html',\n styleUrls: ['./gridster.css'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgForOf, NgStyle, GridsterPreviewComponent]\n})\nexport class GridsterComponent\n implements OnInit, OnChanges, OnDestroy, GridsterComponentInterface\n{\n @Input() options: GridsterConfig;\n movingItem: GridsterItem | null;\n el: HTMLElement;\n $options: GridsterConfigS;\n mobile: boolean;\n curWidth: number;\n curHeight: number;\n grid: GridsterItemComponentInterface[];\n columns = 0;\n rows = 0;\n curColWidth: number;\n curRowHeight: number;\n gridColumns = [];\n gridRows = [];\n windowResize: (() => void) | null;\n dragInProgress: boolean;\n emptyCell: GridsterEmptyCell;\n compact: GridsterCompact;\n gridRenderer: GridsterRenderer;\n previewStyle$: EventEmitter =\n new EventEmitter();\n\n calculateLayout$ = new Subject();\n\n private resize$ = new Subject();\n private destroy$ = new Subject();\n\n constructor(\n @Inject(ElementRef) el: ElementRef,\n @Inject(Renderer2) public renderer: Renderer2,\n @Inject(ChangeDetectorRef) public cdRef: ChangeDetectorRef,\n @Inject(NgZone) public zone: NgZone\n ) {\n this.el = el.nativeElement;\n this.$options = JSON.parse(JSON.stringify(GridsterConfigService));\n this.mobile = false;\n this.curWidth = 0;\n this.curHeight = 0;\n this.grid = [];\n this.curColWidth = 0;\n this.curRowHeight = 0;\n this.dragInProgress = false;\n this.emptyCell = new GridsterEmptyCell(this);\n this.compact = new GridsterCompact(this);\n this.gridRenderer = new GridsterRenderer(this);\n }\n\n // ------ Function for swapWhileDragging option\n\n // identical to checkCollision() except that here we add boundaries.\n static checkCollisionTwoItemsForSwaping(\n item: GridsterItem,\n item2: GridsterItem\n ): boolean {\n // if the cols or rows of the items are 1 , doesnt 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: GridsterItem, item2: GridsterItem): boolean {\n const collision =\n item.x < item2.x + item2.cols &&\n item.x + item.cols > item2.x &&\n item.y < item2.y + item2.rows &&\n 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 =\n item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;\n const layerIndex2 =\n item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;\n return layerIndex === layerIndex2;\n }\n\n ngOnInit(): void {\n if (this.options.initCallback) {\n this.options.initCallback(this);\n }\n\n this.calculateLayout$\n .pipe(debounceTime(0), takeUntil(this.destroy$))\n .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 ngOnChanges(changes: SimpleChanges): void {\n if (changes.options) {\n this.setOptions();\n this.options.api = {\n optionsChanged: this.optionsChanged,\n resize: this.onResize,\n getNextPossiblePosition: this.getNextPossiblePosition,\n getFirstPossiblePosition: this.getFirstPossiblePosition,\n getLastPossiblePosition: this.getLastPossiblePosition,\n getItemComponent: (item: GridsterItem) => this.getItemComponent(item)\n };\n this.columns = this.$options.minCols;\n this.rows = this.$options.minRows + this.$options.addEmptyRowsCount;\n this.setGridSize();\n this.calculateLayout();\n }\n }\n\n private resize(): void {\n let height;\n let width;\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 (\n (width !== this.curWidth || height !== this.curHeight) &&\n this.checkIfToResize()\n ) {\n this.onResize();\n }\n }\n\n setOptions(): void {\n this.$options = GridsterUtils.merge(\n this.$options,\n this.options,\n this.$options\n );\n if (!this.$options.disableWindowResize && !this.windowResize) {\n this.windowResize = this.renderer.listen(\n 'window',\n 'resize',\n this.onResize\n );\n } else if (this.$options.disableWindowResize && this.windowResize) {\n this.windowResize();\n this.windowResize = null;\n }\n this.emptyCell.updateOptions();\n }\n\n optionsChanged = (): void => {\n this.setOptions();\n let widgetsIndex: number = this.grid.length - 1;\n let widget: GridsterItemComponentInterface;\n for (; widgetsIndex >= 0; widgetsIndex--) {\n widget = this.grid[widgetsIndex];\n widget.updateOptions();\n }\n this.calculateLayout();\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.previewStyle$.complete();\n if (this.windowResize) {\n this.windowResize();\n }\n if (this.options && this.options.destroyCallback) {\n this.options.destroyCallback(this);\n }\n if (this.options && this.options.api) {\n this.options.api.resize = undefined;\n this.options.api.optionsChanged = undefined;\n this.options.api.getNextPossiblePosition = undefined;\n this.options.api = undefined;\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 if (this.options.setGridSize) {\n // reset width/height so the size is recalculated afterwards\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 =\n clientWidth < offsetWidth &&\n scrollHeight > offsetHeight &&\n scrollHeight - offsetHeight < offsetWidth - clientWidth;\n const horizontalScrollPresent =\n clientHeight < offsetHeight &&\n scrollWidth > offsetWidth &&\n scrollWidth - offsetWidth < offsetHeight - clientHeight;\n if (verticalScrollPresent) {\n return false;\n }\n return !horizontalScrollPresent;\n }\n\n checkIfMobile(): boolean {\n if (this.$options.useBodyForBreakpoint) {\n return this.$options.mobileBreakpoint > document.body.clientWidth;\n } else {\n return this.$options.mobileBreakpoint > this.curWidth;\n }\n }\n\n setGridSize(): void {\n const el = this.el;\n let width;\n let height;\n if (\n this.$options.setGridSize ||\n (this.$options.gridType === GridType.Fit && !this.mobile)\n ) {\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 let rows = this.$options.minRows;\n let columns = this.$options.minCols;\n\n let widgetsIndex = this.grid.length - 1;\n let widget;\n for (; widgetsIndex >= 0; widgetsIndex--) {\n widget = this.grid[widgetsIndex];\n if (!widget.notPlaced) {\n rows = Math.max(rows, widget.$item.y + widget.$item.rows);\n columns = Math.max(columns, widget.$item.x + widget.$item.cols);\n }\n }\n rows += this.$options.addEmptyRowsCount;\n if (this.columns !== columns || this.rows !== rows) {\n this.columns = columns;\n this.rows = rows;\n if (this.options.gridSizeChangedCallback) {\n this.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 if (this.$options.outerMargin) {\n let marginWidth = -this.$options.margin;\n if (this.$options.outerMarginLeft !== null) {\n marginWidth += this.$options.outerMarginLeft;\n this.renderer.setStyle(\n this.el,\n 'padding-left',\n this.$options.outerMarginLeft + 'px'\n );\n } else {\n marginWidth += this.$options.margin;\n this.renderer.setStyle(\n this.el,\n 'padding-left',\n this.$options.margin + 'px'\n );\n }\n if (this.$options.outerMarginRight !== null) {\n marginWidth += this.$options.outerMarginRight;\n this.renderer.setStyle(\n this.el,\n 'padding-right',\n this.$options.outerMarginRight + 'px'\n );\n } else {\n marginWidth += this.$options.margin;\n this.renderer.setStyle(\n this.el,\n 'padding-right',\n this.$options.margin + 'px'\n );\n }\n this.curColWidth = (this.curWidth - marginWidth) / this.columns;\n let marginHeight = -this.$options.margin;\n if (this.$options.outerMarginTop !== null) {\n marginHeight += this.$options.outerMarginTop;\n this.renderer.setStyle(\n this.el,\n 'padding-top',\n this.$options.outerMarginTop + 'px'\n );\n } else {\n marginHeight += this.$options.margin;\n this.renderer.setStyle(\n this.el,\n 'padding-top',\n this.$options.margin + 'px'\n );\n }\n if (this.$options.outerMarginBottom !== null) {\n marginHeight += this.$options.outerMarginBottom;\n this.renderer.setStyle(\n this.el,\n 'padding-bottom',\n this.$options.outerMarginBottom + 'px'\n );\n } else {\n marginHeight += this.$options.margin;\n this.renderer.setStyle(\n this.el,\n 'padding-bottom',\n this.$options.margin + 'px'\n );\n }\n this.curRowHeight =\n ((this.curHeight - marginHeight) / this.rows) *\n this.$options.rowHeightRatio;\n } else {\n this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;\n this.curRowHeight =\n ((this.curHeight + this.$options.margin) / this.rows) *\n this.$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 (this.$options.setGridSize) {\n this.renderer.addClass(this.el, 'gridSize');\n if (!this.mobile) {\n this.renderer.setStyle(\n this.el,\n 'width',\n this.columns * this.curColWidth + this.$options.margin + 'px'\n );\n this.renderer.setStyle(\n this.el,\n 'height',\n this.rows * this.curRowHeight + this.$options.margin + 'px'\n );\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 let widgetsIndex: number = this.grid.length - 1;\n let widget: GridsterItemComponentInterface;\n for (; widgetsIndex >= 0; widgetsIndex--) {\n widget = this.grid[widgetsIndex];\n widget.setSize();\n widget.drag.toggle();\n widget.resize.toggle();\n }\n\n this.resize$.next();\n }\n\n updateGrid(): void {\n if (this.$options.displayGrid === 'always' && !this.mobile) {\n this.renderer.addClass(this.el, 'display-grid');\n } else if (\n this.$options.displayGrid === 'onDrag&Resize' &&\n this.dragInProgress\n ) {\n this.renderer.addClass(this.el, 'display-grid');\n } else if (\n this.$options.displayGrid === 'none' ||\n !this.dragInProgress ||\n this.mobile\n ) {\n this.renderer.removeClass(this.el, 'display-grid');\n }\n this.setGridDimensions();\n this.gridColumns.length = GridsterComponent.getNewArrayLength(\n this.columns,\n this.curWidth,\n this.curColWidth\n );\n this.gridRows.length = GridsterComponent.getNewArrayLength(\n this.rows,\n this.curHeight,\n this.curRowHeight\n );\n this.cdRef.markForCheck();\n }\n\n addItem(itemComponent: GridsterItemComponentInterface): void {\n if (itemComponent.$item.cols === undefined) {\n itemComponent.$item.cols = this.$options.defaultItemCols;\n itemComponent.item.cols = itemComponent.$item.cols;\n itemComponent.itemChanged();\n }\n if (itemComponent.$item.rows === undefined) {\n itemComponent.$item.rows = this.$options.defaultItemRows;\n itemComponent.item.rows = itemComponent.$item.rows;\n itemComponent.itemChanged();\n }\n if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {\n this.autoPositionItem(itemComponent);\n } else if (this.checkCollision(itemComponent.$item)) {\n if (!this.$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 (!this.$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: GridsterItemComponentInterface): void {\n this.grid.splice(this.grid.indexOf(itemComponent), 1);\n this.calculateLayout$.next();\n if (this.options.itemRemovedCallback) {\n this.options.itemRemovedCallback(itemComponent.item, itemComponent);\n }\n }\n\n checkCollision(item: GridsterItem): GridsterItemComponentInterface | boolean {\n let collision: GridsterItemComponentInterface | boolean = false;\n if (this.options.itemValidateCallback) {\n collision = !this.options.itemValidateCallback(item);\n }\n if (!collision && this.checkGridCollision(item)) {\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: GridsterItem): boolean {\n const noNegativePosition = item.y > -1 && item.x > -1;\n const maxGridCols = item.cols + item.x <= this.$options.maxCols;\n const maxGridRows = item.rows + item.y <= this.$options.maxRows;\n const maxItemCols =\n item.maxItemCols === undefined\n ? this.$options.maxItemCols\n : item.maxItemCols;\n const minItemCols =\n item.minItemCols === undefined\n ? this.$options.minItemCols\n : item.minItemCols;\n const maxItemRows =\n item.maxItemRows === undefined\n ? this.$options.maxItemRows\n : item.maxItemRows;\n const minItemRows =\n item.minItemRows === undefined\n ? this.$options.minItemRows\n : item.minItemRows;\n const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;\n const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;\n const minAreaLimit =\n item.minItemArea === undefined\n ? this.$options.minItemArea\n : item.minItemArea;\n const maxAreaLimit =\n item.maxItemArea === undefined\n ? this.$options.maxItemArea\n : item.maxItemArea;\n const area = item.cols * item.rows;\n const inMinArea = minAreaLimit <= area;\n const inMaxArea = maxAreaLimit >= area;\n return !(\n noNegativePosition &&\n maxGridCols &&\n maxGridRows &&\n inColsLimits &&\n inRowsLimits &&\n inMinArea &&\n inMaxArea\n );\n }\n\n findItemWithItem(\n item: GridsterItem\n ): GridsterItemComponentInterface | boolean {\n let widgetsIndex = 0;\n let widget: GridsterItemComponentInterface;\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\n widget = this.grid[widgetsIndex];\n if (\n widget.$item !== item &&\n this.checkCollisionTwoItems(widget.$item, item)\n ) {\n return widget;\n }\n }\n return false;\n }\n\n findItemsWithItem(item: GridsterItem): Array {\n const a: Array = [];\n let widgetsIndex = 0;\n let widget: GridsterItemComponentInterface;\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\n widget = this.grid[widgetsIndex];\n if (\n widget.$item !== item &&\n this.checkCollisionTwoItems(widget.$item, item)\n ) {\n a.push(widget);\n }\n }\n return a;\n }\n\n autoPositionItem(itemComponent: GridsterItemComponentInterface): 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(\n \"Can't be placed in the bounds of the dashboard!/n\" +\n JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\n );\n }\n }\n }\n\n getNextPossiblePosition = (\n newItem: GridsterItem,\n startingFrom: { y?: number; x?: number } = {}\n ): boolean => {\n if (newItem.cols === -1) {\n newItem.cols = this.$options.defaultItemCols;\n }\n if (newItem.rows === -1) {\n newItem.rows = this.$options.defaultItemRows;\n }\n this.setGridDimensions();\n let rowsIndex = startingFrom.y || 0;\n let colsIndex;\n for (; rowsIndex < this.rows; rowsIndex++) {\n newItem.y = rowsIndex;\n colsIndex = startingFrom.x || 0;\n for (; colsIndex < this.columns; colsIndex++) {\n newItem.x = colsIndex;\n if (!this.checkCollision(newItem)) {\n return true;\n }\n }\n }\n const canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;\n const canAddToColumns =\n this.$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: GridsterItem): GridsterItem => {\n const tmpItem = Object.assign({}, item);\n this.getNextPossiblePosition(tmpItem);\n return tmpItem;\n };\n\n getLastPossiblePosition = (item: GridsterItem): GridsterItem => {\n let farthestItem: { y: number; x: number } = { y: 0, x: 0 };\n farthestItem = this.grid.reduce(\n (\n prev: { y: number; x: number },\n curr: GridsterItemComponentInterface\n ) => {\n const currCoords = {\n y: curr.$item.y + curr.$item.rows - 1,\n x: curr.$item.x + curr.$item.cols - 1\n };\n if (GridsterUtils.compareItems(prev, currCoords) === 1) {\n return currCoords;\n } else {\n return prev;\n }\n },\n farthestItem\n );\n\n const tmpItem = Object.assign({}, item);\n this.getNextPossiblePosition(tmpItem, farthestItem);\n return tmpItem;\n };\n\n pixelsToPositionX(\n x: number,\n roundingMethod: (x: number) => number,\n noLimit?: boolean\n ): 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(\n y: number,\n roundingMethod: (x: number) => number,\n noLimit?: boolean\n ): 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(\n item: GridsterItem\n ): GridsterItemComponentInterface | 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(\n item: GridsterItem\n ): GridsterItemComponentInterface | boolean {\n let collision: GridsterItemComponentInterface | boolean = false;\n if (this.options.itemValidateCallback) {\n collision = !this.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(\n item: GridsterItem\n ): GridsterItemComponentInterface | boolean {\n let widgetsIndex: number = this.grid.length - 1;\n let widget: GridsterItemComponentInterface;\n for (; widgetsIndex > -1; widgetsIndex--) {\n widget = this.grid[widgetsIndex];\n if (\n widget.$item !== item &&\n GridsterComponent.checkCollisionTwoItemsForSwaping(widget.$item, item)\n ) {\n return widget;\n }\n }\n return false;\n }\n\n previewStyle(drag = false): void {\n if (this.movingItem) {\n if (this.compact && drag) {\n this.compact.checkCompactItem(this.movingItem);\n }\n this.previewStyle$.next(this.movingItem);\n } else {\n this.previewStyle$.next(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(\n length: number,\n overallSize: number,\n size: number\n ): 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","\n\n\n\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterPush {\n public fromSouth: string;\n public fromNorth: string;\n public fromEast: string;\n public fromWest: string;\n private pushedItems: GridsterItemComponentInterface[];\n private pushedItemsTemp: GridsterItemComponentInterface[];\n private pushedItemsTempPath: { x: number; y: number }[][];\n private pushedItemsPath: { x: number; y: number }[][];\n private gridsterItem: GridsterItemComponentInterface;\n private gridster: GridsterComponentInterface;\n private pushedItemsOrder: GridsterItemComponentInterface[];\n private tryPattern: {\n fromEast: ((\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ) => boolean)[];\n fromWest: ((\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ) => boolean)[];\n fromNorth: ((\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ) => boolean)[];\n fromSouth: ((\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ) => boolean)[];\n };\n private iteration = 0;\n\n constructor(gridsterItem: GridsterItemComponentInterface) {\n this.pushedItems = [];\n this.pushedItemsTemp = [];\n this.pushedItemsTempPath = [];\n this.pushedItemsPath = [];\n this.gridsterItem = gridsterItem;\n this.gridster = gridsterItem.gridster;\n this.tryPattern = {\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 this.fromSouth = 'fromSouth';\n this.fromNorth = 'fromNorth';\n this.fromEast = 'fromEast';\n this.fromWest = 'fromWest';\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: GridsterItemComponentInterface;\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: GridsterItemComponentInterface;\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(\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): 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: GridsterItemComponentInterface[] =\n 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: GridsterItemComponentInterface;\n let makePush = true;\n const pushedItems: GridsterItemComponentInterface[] = [];\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 (\n this.tryPattern[direction][0].call(this, itemCollision, gridsterItem)\n ) {\n this.pushedItemsOrder.push(itemCollision);\n pushedItems.push(itemCollision);\n } else if (\n this.tryPattern[direction][1].call(this, itemCollision, gridsterItem)\n ) {\n this.pushedItemsOrder.push(itemCollision);\n pushedItems.push(itemCollision);\n } else if (\n this.tryPattern[direction][2].call(this, itemCollision, gridsterItem)\n ) {\n this.pushedItemsOrder.push(itemCollision);\n pushedItems.push(itemCollision);\n } else if (\n this.tryPattern[direction][3].call(this, itemCollision, gridsterItem)\n ) {\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(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ): boolean {\n if (!this.gridster.$options.pushDirections.south) {\n return false;\n }\n this.addToTempPushed(gridsterItemCollide);\n gridsterItemCollide.$item.y =\n 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(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ): boolean {\n if (!this.gridster.$options.pushDirections.north) {\n return false;\n }\n this.addToTempPushed(gridsterItemCollide);\n gridsterItemCollide.$item.y =\n 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(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ): boolean {\n if (!this.gridster.$options.pushDirections.east) {\n return false;\n }\n this.addToTempPushed(gridsterItemCollide);\n gridsterItemCollide.$item.x =\n 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(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface\n ): boolean {\n if (!this.gridster.$options.pushDirections.west) {\n return false;\n }\n this.addToTempPushed(gridsterItemCollide);\n gridsterItemCollide.$item.x =\n 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: GridsterItemComponentInterface): 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(\n gridsterItem: GridsterItemComponentInterface\n ): 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: GridsterItemComponentInterface): 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(\n gridsterItem: GridsterItemComponentInterface\n ): 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(\n pushedItem: GridsterItemComponentInterface,\n i: number\n ): 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 { GridsterResizeEventType } from './gridsterResizeEventType.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nlet scrollSensitivity: number;\nlet scrollSpeed: number;\nconst intervalDuration = 50;\nlet gridsterElement: HTMLElement | null;\nlet resizeEvent: boolean | undefined;\nlet resizeEventType: GridsterResizeEventType | undefined;\nlet intervalE: number;\nlet intervalW: number;\nlet intervalN: number;\nlet intervalS: number;\n\ntype Position = Pick;\n\ntype CalculatePosition = (position: Position) => void;\n\nexport function scroll(\n gridster: GridsterComponentInterface,\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 scrollSensitivity = gridster.$options.scrollSensitivity;\n scrollSpeed = gridster.$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 const elemTopOffset = top - offsetTop;\n const elemBottomOffset = offsetHeight + offsetTop - top - height;\n\n const { clientX, clientY } = event;\n\n if (!gridster.$options.disableScrollVertical) {\n if (lastMouse.clientY < clientY && elemBottomOffset < scrollSensitivity) {\n cancelN();\n if (\n (resizeEvent && resizeEventType && !resizeEventType.south) ||\n intervalS\n ) {\n return;\n }\n intervalS = startVertical(1, calculateItemPosition, lastMouse);\n } else if (\n lastMouse.clientY > clientY &&\n offsetTop > 0 &&\n elemTopOffset < scrollSensitivity\n ) {\n cancelS();\n if (\n (resizeEvent && resizeEventType && !resizeEventType.north) ||\n intervalN\n ) {\n return;\n }\n intervalN = startVertical(-1, calculateItemPosition, lastMouse);\n } else if (lastMouse.clientY !== clientY) {\n cancelVertical();\n }\n }\n\n const elemRightOffset = offsetLeft + offsetWidth - left - width;\n const elemLeftOffset = left - offsetLeft;\n\n if (!gridster.$options.disableScrollHorizontal) {\n if (lastMouse.clientX < clientX && elemRightOffset <= scrollSensitivity) {\n cancelW();\n if (\n (resizeEvent && resizeEventType && !resizeEventType.east) ||\n intervalE\n ) {\n return;\n }\n intervalE = startHorizontal(1, calculateItemPosition, lastMouse);\n } else if (\n lastMouse.clientX > clientX &&\n offsetLeft > 0 &&\n elemLeftOffset < scrollSensitivity\n ) {\n cancelE();\n if (\n (resizeEvent && resizeEventType && !resizeEventType.west) ||\n intervalW\n ) {\n return;\n }\n intervalW = startHorizontal(-1, calculateItemPosition, lastMouse);\n } else if (lastMouse.clientX !== clientX) {\n cancelHorizontal();\n }\n }\n}\n\nfunction startVertical(\n sign: number,\n calculateItemPosition: CalculatePosition,\n lastMouse: Position\n): number {\n let clientY = lastMouse.clientY;\n return window.setInterval(() => {\n if (\n !gridsterElement ||\n (sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0)\n ) {\n cancelVertical();\n }\n gridsterElement!.scrollTop += sign * scrollSpeed;\n clientY += sign * scrollSpeed;\n calculateItemPosition({ clientX: lastMouse.clientX, clientY });\n }, intervalDuration);\n}\n\nfunction startHorizontal(\n sign: number,\n calculateItemPosition: CalculatePosition,\n lastMouse: Position\n): number {\n let clientX = lastMouse.clientX;\n return window.setInterval(() => {\n if (\n !gridsterElement ||\n (sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0)\n ) {\n cancelHorizontal();\n }\n gridsterElement!.scrollLeft += sign * scrollSpeed;\n clientX += sign * scrollSpeed;\n calculateItemPosition({ clientX, clientY: lastMouse.clientY });\n }, intervalDuration);\n}\n\nexport function cancelScroll(): void {\n cancelHorizontal();\n cancelVertical();\n gridsterElement = null;\n}\n\nfunction cancelHorizontal(): void {\n cancelE();\n cancelW();\n}\n\nfunction cancelVertical(): void {\n cancelN();\n cancelS();\n}\n\nfunction cancelE(): void {\n if (intervalE) {\n clearInterval(intervalE);\n intervalE = 0;\n }\n}\n\nfunction cancelW(): void {\n if (intervalW) {\n clearInterval(intervalW);\n intervalW = 0;\n }\n}\n\nfunction cancelS(): void {\n if (intervalS) {\n clearInterval(intervalS);\n intervalS = 0;\n }\n}\n\nfunction cancelN(): void {\n if (intervalN) {\n clearInterval(intervalN);\n intervalN = 0;\n }\n}\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterSwap {\n private swapedItem: GridsterItemComponentInterface | undefined;\n private gridsterItem: GridsterItemComponentInterface;\n private gridster: GridsterComponentInterface;\n\n constructor(gridsterItem: GridsterItemComponentInterface) {\n this.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 x: number = this.swapedItem.$item.x;\n const y: number = this.swapedItem.$item.y;\n this.swapedItem.$item.x = this.swapedItem.item.x || 0;\n this.swapedItem.$item.y = this.swapedItem.item.y || 0;\n if (this.gridster.checkCollision(this.swapedItem.$item)) {\n this.swapedItem.$item.x = x;\n this.swapedItem.$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 this.swapedItem.$item.x = this.swapedItem.item.x || 0;\n this.swapedItem.$item.y = this.swapedItem.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(\n this.swapedItem.$item,\n this.swapedItem.item\n );\n this.swapedItem = undefined;\n }\n }\n\n checkSwap(pushedBy: GridsterItemComponentInterface): void {\n let gridsterItemCollision;\n if (this.gridster.$options.swapWhileDragging) {\n gridsterItemCollision = this.gridster.checkCollisionForSwaping(\n pushedBy.$item\n );\n } else {\n gridsterItemCollision = this.gridster.checkCollision(pushedBy.$item);\n }\n if (\n gridsterItemCollision &&\n gridsterItemCollision !== true &&\n gridsterItemCollision.canBeDragged()\n ) {\n const gridsterItemCollide: GridsterItemComponentInterface =\n gridsterItemCollision;\n const copyCollisionX = gridsterItemCollide.$item.x;\n const copyCollisionY = gridsterItemCollide.$item.y;\n const copyX = pushedBy.$item.x;\n const copyY = pushedBy.$item.y;\n const diffX = copyX - copyCollisionX;\n const diffY = copyY - copyCollisionY;\n gridsterItemCollide.$item.x = pushedBy.item.x - diffX;\n gridsterItemCollide.$item.y = pushedBy.item.y - diffY;\n pushedBy.$item.x = gridsterItemCollide.item.x + diffX;\n pushedBy.$item.y = gridsterItemCollide.item.y + diffY;\n if (\n this.gridster.checkCollision(gridsterItemCollide.$item) ||\n this.gridster.checkCollision(pushedBy.$item)\n ) {\n pushedBy.$item.x = copyX;\n pushedBy.$item.y = copyY;\n gridsterItemCollide.$item.x = copyCollisionX;\n gridsterItemCollide.$item.y = copyCollisionY;\n } else {\n gridsterItemCollide.setSize();\n this.swapedItem = gridsterItemCollide;\n if (this.gridster.$options.swapWhileDragging) {\n this.gridsterItem.checkItemChanges(\n this.gridsterItem.$item,\n this.gridsterItem.item\n );\n this.setSwapItem();\n }\n }\n }\n }\n}\n","import { NgZone } from '@angular/core';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes } from './gridsterConfig.interface';\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterPush } from './gridsterPush.service';\nimport { cancelScroll, scroll } from './gridsterScroll.service';\n\nimport { GridsterSwap } from './gridsterSwap.service';\nimport { GridsterUtils } from './gridsterUtils.service';\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 gridsterItem: GridsterItemComponentInterface;\n gridster: GridsterComponentInterface;\n lastMouse: {\n clientX: number;\n clientY: number;\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: Array<{ x: number; y: number }>;\n collision: GridsterItemComponentInterface | boolean = false;\n\n constructor(\n gridsterItem: GridsterItemComponentInterface,\n gridster: GridsterComponentInterface,\n private zone: NgZone\n ) {\n this.gridsterItem = gridsterItem;\n this.gridster = gridster;\n this.lastMouse = {\n clientX: 0,\n clientY: 0\n };\n this.path = [];\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) {\n return;\n }\n\n if (\n this.gridster.options.draggable &&\n this.gridster.options.draggable.start\n ) {\n this.gridster.options.draggable.start(\n this.gridsterItem.item,\n this.gridsterItem,\n e\n );\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n this.zone.runOutsideAngular(() => {\n this.mousemove = this.gridsterItem.renderer.listen(\n 'document',\n 'mousemove',\n this.dragMove\n );\n this.touchmove = this.gridster.renderer.listen(\n this.gridster.el,\n 'touchmove',\n this.dragMove\n );\n });\n this.mouseup = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseup',\n this.dragStop\n );\n this.mouseleave = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseleave',\n this.dragStop\n );\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\n 'window',\n 'blur',\n this.dragStop\n );\n this.touchend = this.gridsterItem.renderer.listen(\n 'document',\n 'touchend',\n this.dragStop\n );\n this.touchcancel = this.gridsterItem.renderer.listen(\n 'document',\n 'touchcancel',\n this.dragStop\n );\n this.gridsterItem.renderer.addClass(\n this.gridsterItem.el,\n 'gridster-item-moving'\n );\n this.margin = this.gridster.$options.margin;\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\n this.outerMarginLeft = this.gridster.$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 (this.gridster.$options.dirType === DirTypes.RTL) {\n this.diffLeft =\n 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 if (this.gridster.options.enableBoundaryControl) {\n // prevent moving up at the top of gridster\n if (\n directions.includes(Direction.UP) &&\n this.gridsterItem.el.getBoundingClientRect().top <\n this.gridster.el.getBoundingClientRect().top +\n (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 <\n this.gridster.el.getBoundingClientRect().left +\n (this.outerMarginLeft ?? this.margin)\n ) {\n directions = directions.filter(\n direction => direction != Direction.LEFT\n );\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 >\n this.gridster.el.getBoundingClientRect().right -\n (this.outerMarginRight ?? this.margin)\n ) {\n directions = directions.filter(\n direction => direction != Direction.RIGHT\n );\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 - \n (this.outerMarginBottom ?? this.margin)\n ) {\n directions = directions.filter(\n direction => direction != Direction.DOWN\n );\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 =\n this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n scroll(\n this.gridster,\n this.left,\n this.top,\n this.width,\n this.height,\n e,\n this.lastMouse,\n this.calculateItemPositionFromMousePosition\n );\n\n this.calculateItemPositionFromMousePosition(e);\n }\n };\n\n calculateItemPositionFromMousePosition = (e: MouseEvent): void => {\n if (this.gridster.options.scale) {\n this.calculateItemPositionWithScale(e, this.gridster.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(() => {\n this.gridster.updateGrid();\n });\n };\n\n calculateItemPositionWithScale(e: MouseEvent, scale: number): void {\n if (this.gridster.$options.dirType === DirTypes.RTL) {\n this.left =\n this.gridster.el.scrollWidth -\n this.originalClientX +\n (e.clientX - this.originalClientX) / scale +\n this.diffLeft;\n } else {\n this.left =\n this.originalClientX +\n (e.clientX - this.originalClientX) / scale +\n this.offsetLeft -\n this.diffLeft;\n }\n this.top =\n this.originalClientY +\n (e.clientY - this.originalClientY) / scale +\n this.offsetTop -\n this.diffTop;\n }\n\n calculateItemPositionWithoutScale(e: MouseEvent): void {\n if (this.gridster.$options.dirType === DirTypes.RTL) {\n this.left = this.gridster.el.scrollWidth - e.clientX + 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(\n this.gridsterItem.el,\n 'gridster-item-moving'\n );\n this.gridster.dragInProgress = false;\n this.gridster.updateGrid();\n this.path = [];\n if (\n this.gridster.options.draggable &&\n this.gridster.options.draggable.stop\n ) {\n Promise.resolve(\n this.gridster.options.draggable.stop(\n this.gridsterItem.item,\n this.gridsterItem,\n e\n )\n ).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 }\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 if (\n this.gridster.$options.draggable.dropOverItems &&\n this.gridster.options.draggable &&\n this.gridster.options.draggable.dropOverItemsCallback &&\n this.collision &&\n this.collision !== true &&\n this.collision.$item\n ) {\n this.gridster.options.draggable.dropOverItemsCallback(\n this.gridsterItem.item,\n this.collision.item,\n this.gridster\n );\n }\n this.collision = false;\n this.gridsterItem.setSize();\n this.gridsterItem.checkItemChanges(\n this.gridsterItem.$item,\n this.gridsterItem.item\n );\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 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 = this.gridsterItem.$item.x;\n this.positionYBackup = this.gridsterItem.$item.y;\n this.gridsterItem.$item.x = this.positionX;\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.x = this.positionXBackup;\n }\n this.gridsterItem.$item.y = this.positionY;\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.y = this.positionYBackup;\n }\n this.gridster.gridRenderer.setCellPosition(\n this.gridsterItem.renderer,\n this.gridsterItem.el,\n this.left,\n this.top\n );\n\n if (\n this.positionXBackup !== this.gridsterItem.$item.x ||\n this.positionYBackup !== this.gridsterItem.$item.y\n ) {\n const lastPosition = this.path[this.path.length - 1];\n let direction = '';\n if (lastPosition.x < this.gridsterItem.$item.x) {\n direction = this.push.fromWest;\n } else if (lastPosition.x > this.gridsterItem.$item.x) {\n direction = this.push.fromEast;\n } else if (lastPosition.y < this.gridsterItem.$item.y) {\n direction = this.push.fromNorth;\n } else if (lastPosition.y > this.gridsterItem.$item.y) {\n direction = this.push.fromSouth;\n }\n this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);\n this.swap.swapItems();\n this.collision = this.gridster.checkCollision(this.gridsterItem.$item);\n if (this.collision) {\n this.gridsterItem.$item.x = this.positionXBackup;\n this.gridsterItem.$item.y = this.positionYBackup;\n if (\n this.gridster.$options.draggable.dropOverItems &&\n this.collision !== true &&\n this.collision.$item\n ) {\n this.gridster.movingItem = null;\n }\n } else {\n this.path.push({\n x: this.gridsterItem.$item.x,\n y: this.gridsterItem.$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(\n this.gridsterItem.el,\n 'mousedown',\n this.dragStartDelay\n );\n this.touchstart = this.gridsterItem.renderer.listen(\n this.gridsterItem.el,\n 'touchstart',\n this.dragStartDelay\n );\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 if (!this.gridster.$options.draggable.delayStart) {\n this.dragStart(e);\n return;\n }\n const timeout = setTimeout(() => {\n this.dragStart(e);\n cancelDrag();\n }, this.gridster.$options.draggable.delayStart);\n const cancelMouse = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseup',\n cancelDrag\n );\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseleave',\n cancelDrag\n );\n const cancelOnBlur = this.gridsterItem.renderer.listen(\n 'window',\n 'blur',\n cancelDrag\n );\n const cancelTouchMove = this.gridsterItem.renderer.listen(\n 'document',\n 'touchmove',\n cancelMove\n );\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\n 'document',\n 'touchend',\n cancelDrag\n );\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\n 'document',\n 'touchcancel',\n cancelDrag\n );\n\n function cancelMove(eventMove: MouseEvent): void {\n GridsterUtils.checkTouchEvent(eventMove);\n if (\n Math.abs(eventMove.clientX - e.clientX) > 9 ||\n Math.abs(eventMove.clientY - e.clientY) > 9\n ) {\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 {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterPushResize {\n public fromSouth: string;\n public fromNorth: string;\n public fromEast: string;\n public fromWest: string;\n private pushedItems: Array;\n private pushedItemsPath: Array>;\n private gridsterItem: GridsterItemComponentInterface;\n private gridster: GridsterComponentInterface;\n private tryPattern: {\n fromEast: (\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ) => boolean;\n fromWest: (\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ) => boolean;\n fromNorth: (\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ) => boolean;\n fromSouth: (\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ) => boolean;\n };\n\n constructor(gridsterItem: GridsterItemComponentInterface) {\n this.pushedItems = [];\n this.pushedItemsPath = [];\n this.gridsterItem = gridsterItem;\n this.gridster = gridsterItem.gridster;\n this.tryPattern = {\n fromEast: this.tryWest,\n fromWest: this.tryEast,\n fromNorth: this.trySouth,\n fromSouth: this.tryNorth\n };\n this.fromSouth = 'fromSouth';\n this.fromNorth = 'fromNorth';\n this.fromEast = 'fromEast';\n this.fromWest = 'fromWest';\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: GridsterItemComponentInterface;\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.$item.cols = pushedItem.item.cols || 1;\n pushedItem.$item.row = pushedItem.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: GridsterItemComponentInterface;\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(\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): boolean {\n const gridsterItemCollision: GridsterItemComponentInterface | boolean =\n this.gridster.checkCollision(gridsterItem.$item);\n if (\n gridsterItemCollision &&\n gridsterItemCollision !== true &&\n gridsterItemCollision !== this.gridsterItem &&\n gridsterItemCollision.canBeResized()\n ) {\n if (\n this.tryPattern[direction].call(\n this,\n gridsterItemCollision,\n gridsterItem,\n direction\n )\n ) {\n return true;\n }\n } else if (gridsterItemCollision === false) {\n return true;\n }\n return false;\n }\n\n private trySouth(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): boolean {\n const backUpY = gridsterItemCollide.$item.y;\n const backUpRows = gridsterItemCollide.$item.rows;\n gridsterItemCollide.$item.y =\n gridsterItem.$item.y + gridsterItem.$item.rows;\n gridsterItemCollide.$item.rows =\n backUpRows + backUpY - gridsterItemCollide.$item.y;\n if (\n !this.gridster.checkCollisionTwoItems(\n gridsterItemCollide.$item,\n gridsterItem.$item\n ) &&\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n ) {\n gridsterItemCollide.setSize();\n this.addToPushed(gridsterItemCollide);\n this.push(gridsterItem, direction);\n return true;\n } else {\n gridsterItemCollide.$item.y = backUpY;\n gridsterItemCollide.$item.rows = backUpRows;\n }\n return false;\n }\n\n private tryNorth(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): boolean {\n const backUpRows = gridsterItemCollide.$item.rows;\n gridsterItemCollide.$item.rows =\n gridsterItem.$item.y - gridsterItemCollide.$item.y;\n if (\n !this.gridster.checkCollisionTwoItems(\n gridsterItemCollide.$item,\n gridsterItem.$item\n ) &&\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n ) {\n gridsterItemCollide.setSize();\n this.addToPushed(gridsterItemCollide);\n this.push(gridsterItem, direction);\n return true;\n } else {\n gridsterItemCollide.$item.rows = backUpRows;\n }\n return false;\n }\n\n private tryEast(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): boolean {\n const backUpX = gridsterItemCollide.$item.x;\n const backUpCols = gridsterItemCollide.$item.cols;\n gridsterItemCollide.$item.x =\n gridsterItem.$item.x + gridsterItem.$item.cols;\n gridsterItemCollide.$item.cols =\n backUpCols + backUpX - gridsterItemCollide.$item.x;\n if (\n !this.gridster.checkCollisionTwoItems(\n gridsterItemCollide.$item,\n gridsterItem.$item\n ) &&\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n ) {\n gridsterItemCollide.setSize();\n this.addToPushed(gridsterItemCollide);\n this.push(gridsterItem, direction);\n return true;\n } else {\n gridsterItemCollide.$item.x = backUpX;\n gridsterItemCollide.$item.cols = backUpCols;\n }\n return false;\n }\n\n private tryWest(\n gridsterItemCollide: GridsterItemComponentInterface,\n gridsterItem: GridsterItemComponentInterface,\n direction: string\n ): boolean {\n const backUpCols = gridsterItemCollide.$item.cols;\n gridsterItemCollide.$item.cols =\n gridsterItem.$item.x - gridsterItemCollide.$item.x;\n if (\n !this.gridster.checkCollisionTwoItems(\n gridsterItemCollide.$item,\n gridsterItem.$item\n ) &&\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n ) {\n gridsterItemCollide.setSize();\n this.addToPushed(gridsterItemCollide);\n this.push(gridsterItem, direction);\n return true;\n } else {\n gridsterItemCollide.$item.cols = backUpCols;\n }\n return false;\n }\n\n private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\n if (this.pushedItems.indexOf(gridsterItem) < 0) {\n this.pushedItems.push(gridsterItem);\n this.pushedItemsPath.push([\n {\n x: gridsterItem.item.x || 0,\n y: gridsterItem.item.y || 0,\n cols: gridsterItem.item.cols || 0,\n rows: gridsterItem.item.rows || 0\n },\n {\n x: gridsterItem.$item.x,\n y: gridsterItem.$item.y,\n cols: gridsterItem.$item.cols,\n rows: gridsterItem.$item.rows\n }\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 cols: gridsterItem.$item.cols,\n rows: gridsterItem.$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(\n pushedItem: GridsterItemComponentInterface,\n i: number\n ): boolean {\n const path = this.pushedItemsPath[i];\n let j = path.length - 2;\n let lastPosition: { x: number; y: number; cols: number; rows: number };\n let x;\n let y;\n let cols;\n let rows;\n for (; j > -1; j--) {\n lastPosition = path[j];\n x = pushedItem.$item.x;\n y = pushedItem.$item.y;\n cols = pushedItem.$item.cols;\n rows = pushedItem.$item.rows;\n pushedItem.$item.x = lastPosition.x;\n pushedItem.$item.y = lastPosition.y;\n pushedItem.$item.cols = lastPosition.cols;\n pushedItem.$item.rows = lastPosition.rows;\n if (!this.gridster.findItemWithItem(pushedItem.$item)) {\n pushedItem.setSize();\n path.splice(j + 1, path.length - 1 - j);\n } else {\n pushedItem.$item.x = x;\n pushedItem.$item.y = y;\n pushedItem.$item.cols = cols;\n pushedItem.$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 } from '@angular/core';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes } from './gridsterConfig.interface';\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterPush } from './gridsterPush.service';\nimport { GridsterPushResize } from './gridsterPushResize.service';\nimport { GridsterResizeEventType } from './gridsterResizeEventType.interface';\n\nimport { cancelScroll, scroll } from './gridsterScroll.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\nexport class GridsterResizable {\n gridsterItem: GridsterItemComponentInterface;\n gridster: GridsterComponentInterface;\n lastMouse: {\n clientX: number;\n clientY: number;\n };\n itemBackup: number[];\n resizeEventScrollType: GridsterResizeEventType;\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:\n | ((event: Pick) => void)\n | null = null;\n\n resizeEnabled: boolean;\n resizableHandles: {\n s: boolean;\n e: boolean;\n n: boolean;\n w: boolean;\n se: boolean;\n ne: boolean;\n sw: boolean;\n nw: boolean;\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 newPosition: number;\n\n constructor(\n gridsterItem: GridsterItemComponentInterface,\n gridster: GridsterComponentInterface,\n private zone: NgZone\n ) {\n this.gridsterItem = gridsterItem;\n this.gridster = gridster;\n this.lastMouse = {\n clientX: 0,\n clientY: 0\n };\n this.itemBackup = [0, 0, 0, 0];\n this.resizeEventScrollType = {\n west: false,\n east: false,\n north: false,\n south: false\n };\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) {\n return;\n }\n if (\n this.gridster.options.resizable &&\n this.gridster.options.resizable.start\n ) {\n this.gridster.options.resizable.start(\n this.gridsterItem.item,\n this.gridsterItem,\n e\n );\n }\n e.stopPropagation();\n e.preventDefault();\n\n this.zone.runOutsideAngular(() => {\n this.mousemove = this.gridsterItem.renderer.listen(\n 'document',\n 'mousemove',\n this.dragMove\n );\n this.touchmove = this.gridster.renderer.listen(\n this.gridster.el,\n 'touchmove',\n this.dragMove\n );\n });\n this.mouseup = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseup',\n this.dragStop\n );\n this.mouseleave = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseleave',\n this.dragStop\n );\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\n 'window',\n 'blur',\n this.dragStop\n );\n this.touchend = this.gridsterItem.renderer.listen(\n 'document',\n 'touchend',\n this.dragStop\n );\n this.touchcancel = this.gridsterItem.renderer.listen(\n 'document',\n 'touchcancel',\n this.dragStop\n );\n\n this.gridsterItem.renderer.addClass(\n this.gridsterItem.el,\n 'gridster-item-resizing'\n );\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 = this.gridster.$options.margin;\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\n this.outerMarginLeft = this.gridster.$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 =\n this.gridster.positionYToPixels(\n this.gridsterItem.$item.minItemRows ||\n this.gridster.$options.minItemRows\n ) - this.margin;\n this.minWidth =\n this.gridster.positionXToPixels(\n this.gridsterItem.$item.minItemCols ||\n this.gridster.$options.minItemCols\n ) - 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.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 (this.gridster.$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 (this.gridster.$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 (this.gridster.$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 (this.gridster.$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 (this.gridster.$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 (this.gridster.$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(\n 'The `directionFunction` has not been set before calling `dragMove`.'\n );\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(\n this.gridster,\n this.left,\n this.top,\n this.width,\n this.height,\n e,\n this.lastMouse,\n this.directionFunction,\n true,\n this.resizeEventScrollType\n );\n\n const scale = this.gridster.options.scale || 1;\n this.directionFunction({\n clientX:\n 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.gridster.updateGrid();\n if (\n this.gridster.options.resizable &&\n this.gridster.options.resizable.stop\n ) {\n Promise.resolve(\n this.gridster.options.resizable.stop(\n this.gridsterItem.item,\n this.gridsterItem,\n e\n )\n ).then(this.makeResize, this.cancelResize);\n } else {\n this.makeResize();\n }\n setTimeout(() => {\n this.gridsterItem.renderer.removeClass(\n this.gridsterItem.el,\n 'gridster-item-resizing'\n );\n if (this.gridster) {\n this.gridster.movingItem = null;\n this.gridster.previewStyle();\n }\n });\n };\n\n cancelResize = (): void => {\n this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;\n this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;\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 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(\n this.gridsterItem.$item,\n this.gridsterItem.item\n );\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 handleNorth = (e: MouseEvent): void => {\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 this.newPosition = this.gridster.pixelsToPositionY(\n this.top + marginTop,\n Math.floor\n );\n if (this.gridsterItem.$item.y !== this.newPosition) {\n this.itemBackup[1] = this.gridsterItem.$item.y;\n this.itemBackup[3] = this.gridsterItem.$item.rows;\n this.gridsterItem.$item.rows +=\n this.gridsterItem.$item.y - this.newPosition;\n this.gridsterItem.$item.y = this.newPosition;\n this.pushResize.pushItems(this.pushResize.fromSouth);\n this.push.pushItems(\n this.push.fromSouth,\n this.gridster.$options.disablePushOnResize\n );\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.y = this.itemBackup[1];\n this.gridsterItem.$item.rows = this.itemBackup[3];\n this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);\n this.setItemTop(\n this.gridster.positionYToPixels(this.gridsterItem.$item.y)\n );\n this.setItemHeight(\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\n this.margin\n );\n return;\n } else {\n this.gridster.previewStyle();\n }\n this.pushResize.checkPushBack();\n this.push.checkPushBack();\n }\n this.setItemTop(this.top);\n this.setItemHeight(this.height);\n };\n\n private handleWest = (e: MouseEvent): void => {\n const clientX =\n this.gridster.$options.dirType === DirTypes.RTL\n ? this.originalClientX + (this.originalClientX - e.clientX)\n : 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 (this.gridster.options.enableBoundaryControl) {\n this.left = Math.max(0, this.left);\n this.width = this.right - this.left;\n }\n const marginLeft = this.gridster.options.pushItems ? this.margin : 0;\n this.newPosition = this.gridster.pixelsToPositionX(\n this.left + marginLeft,\n Math.floor\n );\n if (this.gridsterItem.$item.x !== this.newPosition) {\n this.itemBackup[0] = this.gridsterItem.$item.x;\n this.itemBackup[2] = this.gridsterItem.$item.cols;\n this.gridsterItem.$item.cols +=\n this.gridsterItem.$item.x - this.newPosition;\n this.gridsterItem.$item.x = this.newPosition;\n this.pushResize.pushItems(this.pushResize.fromEast);\n this.push.pushItems(\n this.push.fromEast,\n this.gridster.$options.disablePushOnResize\n );\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.x = this.itemBackup[0];\n this.gridsterItem.$item.cols = this.itemBackup[2];\n this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);\n this.setItemLeft(\n this.gridster.positionXToPixels(this.gridsterItem.$item.x)\n );\n this.setItemWidth(\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\n this.margin\n );\n return;\n } else {\n this.gridster.previewStyle();\n }\n this.pushResize.checkPushBack();\n this.push.checkPushBack();\n }\n this.setItemLeft(this.left);\n this.setItemWidth(this.width);\n };\n\n private handleSouth = (e: MouseEvent): void => {\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 if (this.gridster.options.enableBoundaryControl) {\n const margin = this.outerMarginBottom ?? this.margin;\n const box = this.gridster.el.getBoundingClientRect();\n this.bottom = Math.min(\n this.bottom,\n box.bottom - box.top - 2 * margin\n );\n this.height = this.bottom - this.top;\n }\n const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;\n this.newPosition = this.gridster.pixelsToPositionY(\n this.bottom + marginBottom,\n Math.ceil\n );\n if (\n this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==\n this.newPosition\n ) {\n this.itemBackup[3] = this.gridsterItem.$item.rows;\n this.gridsterItem.$item.rows =\n this.newPosition - this.gridsterItem.$item.y;\n this.pushResize.pushItems(this.pushResize.fromNorth);\n this.push.pushItems(\n this.push.fromNorth,\n this.gridster.$options.disablePushOnResize\n );\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.rows = this.itemBackup[3];\n this.setItemHeight(\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\n this.margin\n );\n return;\n } else {\n this.gridster.previewStyle();\n }\n this.pushResize.checkPushBack();\n this.push.checkPushBack();\n }\n this.setItemHeight(this.height);\n };\n\n private handleEast = (e: MouseEvent): void => {\n const clientX =\n this.gridster.$options.dirType === DirTypes.RTL\n ? this.originalClientX + (this.originalClientX - e.clientX)\n : 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 (this.gridster.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 = this.gridster.options.pushItems ? 0 : this.margin;\n this.newPosition = this.gridster.pixelsToPositionX(\n this.right + marginRight,\n Math.ceil\n );\n if (\n this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==\n this.newPosition\n ) {\n this.itemBackup[2] = this.gridsterItem.$item.cols;\n this.gridsterItem.$item.cols =\n this.newPosition - this.gridsterItem.$item.x;\n this.pushResize.pushItems(this.pushResize.fromWest);\n this.push.pushItems(\n this.push.fromWest,\n this.gridster.$options.disablePushOnResize\n );\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n this.gridsterItem.$item.cols = this.itemBackup[2];\n this.setItemWidth(\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\n this.margin\n );\n return;\n } else {\n this.gridster.previewStyle();\n }\n this.pushResize.checkPushBack();\n this.push.checkPushBack();\n }\n this.setItemWidth(this.width);\n };\n\n private handleNorthWest = (e: MouseEvent): void => {\n this.handleNorth(e);\n this.handleWest(e);\n };\n\n private handleNorthEast = (e: MouseEvent): void => {\n this.handleNorth(e);\n this.handleEast(e);\n };\n\n private handleSouthWest = (e: MouseEvent): void => {\n this.handleSouth(e);\n this.handleWest(e);\n };\n\n private handleSouthEast = (e: MouseEvent): void => {\n this.handleSouth(e);\n this.handleEast(e);\n };\n\n toggle(): void {\n this.resizeEnabled = this.gridsterItem.canBeResized();\n this.resizableHandles = 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 {\n cancelMouse,\n cancelMouseLeave,\n cancelOnBlur,\n cancelTouchMove,\n cancelTouchEnd,\n cancelTouchCancel\n } = this.zone.runOutsideAngular(() => {\n // Note: all of these events are being added within the `` 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(\n 'document',\n 'mouseup',\n cancelDrag\n );\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\n 'document',\n 'mouseleave',\n cancelDrag\n );\n const cancelOnBlur = this.gridsterItem.renderer.listen(\n 'window',\n 'blur',\n cancelDrag\n );\n const cancelTouchMove = this.gridsterItem.renderer.listen(\n 'document',\n 'touchmove',\n cancelMove\n );\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\n 'document',\n 'touchend',\n cancelDrag\n );\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\n 'document',\n 'touchcancel',\n cancelDrag\n );\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 (\n Math.abs(eventMove.clientX - (e as MouseEvent).clientX) > 9 ||\n Math.abs(eventMove.clientY - (e as MouseEvent).clientY) > 9\n ) {\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(\n this.gridsterItem.renderer,\n this.gridsterItem.el,\n this.left,\n top\n );\n }\n\n setItemLeft(left: number): void {\n this.gridster.gridRenderer.setCellPosition(\n this.gridsterItem.renderer,\n this.gridsterItem.el,\n left,\n this.top\n );\n }\n\n setItemHeight(height: number): void {\n this.gridsterItem.renderer.setStyle(\n this.gridsterItem.el,\n 'height',\n height + 'px'\n );\n }\n\n setItemWidth(width: number): void {\n this.gridsterItem.renderer.setStyle(\n this.gridsterItem.el,\n 'width',\n width + 'px'\n );\n }\n}\n","import { NgIf } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { GridsterComponent } from './gridster.component';\n\nimport { GridsterDraggable } from './gridsterDraggable.service';\nimport {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterResizable } from './gridsterResizable.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\n@Component({\n selector: 'gridster-item',\n templateUrl: './gridsterItem.html',\n styleUrls: ['./gridsterItem.css'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf]\n})\nexport class GridsterItemComponent\n implements OnInit, OnDestroy, OnChanges, GridsterItemComponentInterface\n{\n @Input() item: GridsterItem;\n @Output() itemInit = new EventEmitter<{\n item: GridsterItem;\n itemComponent: GridsterItemComponentInterface;\n }>();\n @Output() itemChange = new EventEmitter<{\n item: GridsterItem;\n itemComponent: GridsterItemComponentInterface;\n }>();\n @Output() itemResize = new EventEmitter<{\n item: GridsterItem;\n itemComponent: GridsterItemComponentInterface;\n }>();\n $item: GridsterItem;\n el: HTMLElement;\n gridster: GridsterComponent;\n top: number;\n left: number;\n width: number;\n height: number;\n drag: GridsterDraggable;\n resize: GridsterResizable;\n notPlaced: boolean;\n init: boolean;\n\n @HostBinding('style.z-index')\n get zIndex(): number {\n return this.getLayerIndex() + this.gridster.$options.baseLayerIndex;\n }\n\n constructor(\n @Inject(ElementRef) el: ElementRef,\n gridster: GridsterComponent,\n @Inject(Renderer2) public renderer: Renderer2,\n @Inject(NgZone) private zone: NgZone\n ) {\n this.el = el.nativeElement;\n this.$item = {\n cols: -1,\n rows: -1,\n x: -1,\n y: -1\n };\n this.gridster = gridster;\n this.drag = new GridsterDraggable(this, gridster, this.zone);\n this.resize = new GridsterResizable(this, gridster, this.zone);\n }\n\n ngOnInit(): void {\n this.gridster.addItem(this);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.item) {\n this.updateOptions();\n\n if (!this.init) {\n this.gridster.calculateLayout$.next();\n }\n }\n if (changes.item && changes.item.previousValue) {\n this.setSize();\n }\n }\n\n updateOptions(): void {\n this.$item = GridsterUtils.merge(this.$item, 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 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\n ngOnDestroy(): void {\n this.gridster.removeItem(this);\n this.drag.destroy();\n this.resize.destroy();\n this.gridster = 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 top = this.$item.y * this.gridster.curRowHeight;\n const left = this.$item.x * this.gridster.curColWidth;\n const width =\n this.$item.cols * this.gridster.curColWidth -\n this.gridster.$options.margin;\n const height =\n this.$item.rows * this.gridster.curRowHeight -\n this.gridster.$options.margin;\n\n this.top = top;\n this.left = left;\n\n if (!this.init && width > 0 && height > 0) {\n this.init = true;\n if (this.item.initCallback) {\n this.item.initCallback(this.item, this);\n }\n if (this.gridster.options.itemInitCallback) {\n this.gridster.options.itemInitCallback(this.item, this);\n }\n this.itemInit.next({ item: this.item, itemComponent: this });\n if (this.gridster.$options.scrollToNewItems) {\n this.el.scrollIntoView(false);\n }\n }\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n if (this.gridster.options.itemResizeCallback) {\n this.gridster.options.itemResizeCallback(this.item, this);\n }\n this.itemResize.next({ item: this.item, itemComponent: this });\n }\n }\n\n itemChanged(): void {\n if (this.gridster.options.itemChangeCallback) {\n this.gridster.options.itemChangeCallback(this.item, this);\n }\n this.itemChange.next({ item: this.item, itemComponent: this });\n }\n\n checkItemChanges(newValue: GridsterItem, oldValue: GridsterItem): void {\n if (\n newValue.rows === oldValue.rows &&\n newValue.cols === oldValue.cols &&\n newValue.x === oldValue.x &&\n newValue.y === oldValue.y\n ) {\n return;\n }\n if (this.gridster.checkCollision(this.$item)) {\n this.$item.x = oldValue.x || 0;\n this.$item.y = oldValue.y || 0;\n this.$item.cols = oldValue.cols || 1;\n this.$item.rows = oldValue.rows || 1;\n this.setSize();\n } else {\n this.item.cols = this.$item.cols;\n this.item.rows = this.$item.rows;\n this.item.x = this.$item.x;\n this.item.y = this.$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 itemDragEnabled =\n this.$item.dragEnabled === undefined\n ? gridDragEnabled\n : this.$item.dragEnabled;\n return !this.gridster.mobile && gridDragEnabled && itemDragEnabled;\n }\n\n canBeResized(): boolean {\n const gridResizable = this.gridster.$options.resizable.enabled;\n const itemResizable =\n this.$item.resizeEnabled === undefined\n ? gridResizable\n : this.$item.resizeEnabled;\n return !this.gridster.mobile && gridResizable && itemResizable;\n }\n\n getResizableHandles() {\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 =\n 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 =\n targetIndex < 0 ? 0 : targetIndex;\n }\n }\n\n private getLayerIndex(): number {\n if (this.item.layerIndex !== undefined) {\n return this.item.layerIndex;\n }\n if (this.gridster.$options.defaultLayerIndex !== undefined) {\n return this.gridster.$options.defaultLayerIndex;\n }\n return 0;\n }\n}\n","\n\n\n\n\n\n\n\n\n","import { GridsterDraggable } from './gridsterDraggable.service';\nimport { Renderer2 } from '@angular/core';\nimport { GridsterResizable } from './gridsterResizable.service';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport abstract class GridsterItemComponentInterface {\n item: GridsterItem;\n $item: GridsterItem;\n top: number;\n left: number;\n width: number;\n height: number;\n drag: GridsterDraggable;\n resize: GridsterResizable;\n notPlaced: boolean;\n updateOptions: () => void;\n itemChanged: () => void;\n setSize: () => void;\n checkItemChanges: (newValue: GridsterItem, oldValue: GridsterItem) => void;\n canBeDragged: () => boolean;\n canBeResized: () => boolean;\n getResizableHandles: () => {\n s: boolean;\n e: boolean;\n n: boolean;\n w: boolean;\n se: boolean;\n ne: boolean;\n sw: boolean;\n nw: boolean;\n };\n bringToFront: (offset: number) => void;\n sendToBack: (v: number) => void;\n el: HTMLElement;\n gridster: GridsterComponentInterface;\n renderer: Renderer2;\n}\n\nexport interface GridsterItem {\n x: number;\n y: number;\n rows: number;\n cols: number;\n layerIndex?: number;\n initCallback?: (\n item: GridsterItem,\n itemComponent: GridsterItemComponentInterface\n ) => void;\n dragEnabled?: boolean;\n resizeEnabled?: boolean;\n resizableHandles?: {\n s?: boolean;\n e?: boolean;\n n?: boolean;\n w?: boolean;\n se?: boolean;\n ne?: boolean;\n sw?: boolean;\n nw?: boolean;\n };\n compactEnabled?: boolean;\n maxItemRows?: number;\n minItemRows?: number;\n maxItemCols?: number;\n minItemCols?: number;\n minItemArea?: number;\n maxItemArea?: number;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [propName: string]: any;\n}\n","import { GridsterConfigS } from './gridsterConfigS.interface';\nimport { ChangeDetectorRef, NgZone, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\nimport { GridsterCompact } from './gridsterCompact.service';\nimport { GridsterConfig } from './gridsterConfig.interface';\nimport {\n GridsterItem,\n GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterRenderer } from './gridsterRenderer.service';\n\nexport abstract class GridsterComponentInterface {\n $options: GridsterConfigS;\n grid: GridsterItemComponentInterface[];\n checkCollision: (\n item: GridsterItem\n ) => GridsterItemComponentInterface | boolean;\n checkCollisionForSwaping: (\n item: GridsterItem\n ) => GridsterItemComponentInterface | boolean;\n positionXToPixels: (x: number) => number;\n pixelsToPositionX: (\n x: number,\n roundingMethod: (x: number) => number,\n noLimit?: boolean\n ) => number;\n positionYToPixels: (y: number) => number;\n pixelsToPositionY: (\n y: number,\n roundingMethod: (x: number) => number,\n noLimit?: boolean\n ) => number;\n findItemWithItem: (\n item: GridsterItem\n ) => GridsterItemComponentInterface | boolean;\n findItemsWithItem: (item: GridsterItem) => GridsterItemComponentInterface[];\n checkGridCollision: (item: GridsterItem) => boolean;\n checkCollisionTwoItems: (item: GridsterItem, item2: GridsterItem) => boolean;\n getItemComponent: (\n item: GridsterItem\n ) => GridsterItemComponentInterface | undefined;\n el: HTMLElement;\n renderer: Renderer2;\n gridRenderer: GridsterRenderer;\n cdRef: ChangeDetectorRef;\n options: GridsterConfig;\n calculateLayout$: Subject;\n updateGrid: () => void;\n movingItem: GridsterItem | null;\n addItem: (item: GridsterItemComponentInterface) => void;\n removeItem: (item: GridsterItemComponentInterface) => void;\n previewStyle: (drag?: boolean) => void;\n mobile: boolean;\n curWidth: number;\n curHeight: number;\n columns: number;\n rows: number;\n curColWidth: number;\n curRowHeight: number;\n windowResize: (() => void) | null;\n setGridDimensions: () => void;\n dragInProgress: boolean;\n emptyCell: GridsterEmptyCell;\n compact: GridsterCompact;\n zone: NgZone;\n gridRows: Array;\n gridColumns: Array;\n}\n","import { NgModule } from '@angular/core';\n\nimport { GridsterComponent } from './gridster.component';\nimport { GridsterItemComponent } from './gridsterItem.component';\n\n@NgModule({\n imports: [GridsterComponent, GridsterItemComponent],\n exports: [GridsterComponent, GridsterItemComponent]\n})\nexport class GridsterModule {}\n","/*\n * Public API Surface of gridster\n */\n\nexport { GridsterComponent } from './lib/gridster.component';\nexport { GridsterItemComponent } from './lib/gridsterItem.component';\nexport {\n GridsterItemComponentInterface,\n GridsterItem\n} from './lib/gridsterItem.interface';\nexport { GridsterComponentInterface } from './lib/gridster.interface';\nexport {\n GridsterConfig,\n GridType,\n DisplayGrid,\n CompactType,\n Draggable,\n Resizable,\n PushDirections,\n DirTypes\n} from './lib/gridsterConfig.interface';\nexport { GridsterConfigService } from './lib/gridsterConfig.constant';\nexport { GridsterModule } from './lib/gridster.module';\nexport { GridsterPush } from './lib/gridsterPush.service';\nexport { GridsterPushResize } from './lib/gridsterPushResize.service';\nexport { GridsterSwap } from './lib/gridsterSwap.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.GridsterComponent"],"mappings":"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"}