{"version":3,"file":"angular2gridsterv3.mjs","sources":["../../../projects/angular2gridsterv3/src/lib/utils/utils.ts","../../../projects/angular2gridsterv3/src/lib/gridList/gridList.ts","../../../projects/angular2gridsterv3/src/lib/gridster.service.ts","../../../projects/angular2gridsterv3/src/lib/GridsterOptions.ts","../../../projects/angular2gridsterv3/src/lib/gridster-prototype/gridster-prototype.service.ts","../../../projects/angular2gridsterv3/src/lib/gridster.component.ts","../../../projects/angular2gridsterv3/src/lib/gridList/GridListItem.ts","../../../projects/angular2gridsterv3/src/lib/utils/DraggableEvent.ts","../../../projects/angular2gridsterv3/src/lib/utils/draggable.ts","../../../projects/angular2gridsterv3/src/lib/gridster-item/gridster-item.component.ts","../../../projects/angular2gridsterv3/src/lib/gridster-prototype/gridster-item-prototype.directive.ts","../../../projects/angular2gridsterv3/src/lib/gridster.module.ts","../../../projects/angular2gridsterv3/src/public_api.ts","../../../projects/angular2gridsterv3/src/angular2gridsterv3.ts"],"sourcesContent":["\r\nimport { DraggableEvent } from './DraggableEvent';\r\n\r\nexport const utils = {\r\n    setCssElementPosition: function ($element: HTMLElement, position: {x: number, y: number}) {\r\n        $element.style.left = position.x + 'px';\r\n        $element.style.top = position.y + 'px';\r\n    },\r\n    resetCSSElementPosition: function ($element: HTMLElement) {\r\n        $element.style.left = '';\r\n        $element.style.top = '';\r\n    },\r\n    setTransform: function ($element: HTMLElement, position: {x: number, y: number}) {\r\n        const left = position.x;\r\n        const top = position.y;\r\n\r\n        // Replace unitless items with px\r\n        const translate = `translate(${left}px,${top}px)`;\r\n\r\n        $element.style['transform'] = translate;\r\n        $element.style['WebkitTransform'] = translate;\r\n        $element.style['MozTransform'] = translate;\r\n        $element.style['msTransform'] = translate;\r\n        $element.style['OTransform'] = translate;\r\n    },\r\n    resetTransform: function ($element: HTMLElement) {\r\n        $element.style['transform'] = '';\r\n        $element.style['WebkitTransform'] = '';\r\n        $element.style['MozTransform'] = '';\r\n        $element.style['msTransform'] = '';\r\n        $element.style['OTransform'] = '';\r\n    },\r\n    clearSelection: () => {\r\n        if (document['selection']) {\r\n            document['selection'].empty();\r\n        } else if (window.getSelection) {\r\n            window.getSelection().removeAllRanges();\r\n        }\r\n    },\r\n    isElementFitContainer: function (element: HTMLElement, containerEl: HTMLElement): boolean {\r\n        const containerRect = containerEl.getBoundingClientRect();\r\n        const elRect = element.getBoundingClientRect();\r\n\r\n        return elRect.left > containerRect.left &&\r\n            elRect.right < containerRect.right &&\r\n            elRect.top > containerRect.top &&\r\n            elRect.bottom < containerRect.bottom;\r\n    },\r\n    isElementIntersectContainer: function (element: HTMLElement, containerEl: HTMLElement): boolean {\r\n        const containerRect = containerEl.getBoundingClientRect();\r\n        const elRect = element.getBoundingClientRect();\r\n\r\n        const elWidth = elRect.right - elRect.left;\r\n        const elHeight = elRect.bottom - elRect.top;\r\n\r\n        return (elRect.left + (elWidth / 2)) > containerRect.left &&\r\n            (elRect.right - (elWidth / 2)) < containerRect.right &&\r\n            (elRect.top + (elHeight / 2)) > containerRect.top &&\r\n            (elRect.bottom - (elHeight / 2)) < containerRect.bottom;\r\n    },\r\n    isElementTouchContainer: function (element: HTMLElement, containerEl: HTMLElement): boolean {\r\n        const containerRect = containerEl.getBoundingClientRect();\r\n        const elRect = element.getBoundingClientRect();\r\n\r\n        return elRect.right > containerRect.left &&\r\n            elRect.bottom > containerRect.top &&\r\n            elRect.left < containerRect.right &&\r\n            elRect.top < containerRect.bottom;\r\n    },\r\n    isCursorAboveElement: function (event: DraggableEvent, element): boolean {\r\n        const elRect = element.getBoundingClientRect();\r\n\r\n        return event.pageX > elRect.left &&\r\n            event.pageX < elRect.right &&\r\n            event.pageY > elRect.top &&\r\n            event.pageY < elRect.bottom;\r\n    },\r\n    getElementOuterHeight: function ($element: HTMLElement) {\r\n        const styleObj = window.getComputedStyle($element);\r\n        // NOTE: Manually calculating height because IE's `clientHeight` isn't always\r\n        // reliable.\r\n        return parseFloat(styleObj.getPropertyValue('height')) +\r\n            parseFloat(styleObj.getPropertyValue('padding-top')) +\r\n            parseFloat(styleObj.getPropertyValue('padding-bottom'));\r\n    },\r\n    getRelativeCoordinates: (element, parentElement): {top: number, left: number} => {\r\n        const parentElementRect = parentElement.getBoundingClientRect();\r\n        const elementRect = element.getBoundingClientRect();\r\n\r\n        return {\r\n            top: elementRect.top - parentElementRect.top,\r\n            left: elementRect.left - parentElementRect.left\r\n        };\r\n    },\r\n    getScrollableContainer(node) {\r\n        const regex = /(auto|scroll)/;\r\n        const parents = (_node, ps) => {\r\n            if (_node.parentNode === null) {\r\n                return ps;\r\n            }\r\n            return parents(_node.parentNode, ps.concat([_node]));\r\n        };\r\n\r\n        const style = (_node, prop) => {\r\n            return getComputedStyle(_node, null).getPropertyValue(prop);\r\n        };\r\n        const overflow = _node => {\r\n            return (\r\n                style(_node, 'overflow') + style(_node, 'overflow-y') + style(_node, 'overflow-x')\r\n            );\r\n        };\r\n        const scroll = _node => regex.test(overflow(_node));\r\n\r\n        /* eslint-disable consistent-return */\r\n        const scrollParent = _node => {\r\n            if (!(_node instanceof HTMLElement || _node instanceof SVGElement)) {\r\n                return;\r\n            }\r\n\r\n            const ps = parents(_node.parentNode, []);\r\n\r\n            for (let i = 0; i < ps.length; i += 1) {\r\n                if (scroll(ps[i])) {\r\n                    return ps[i];\r\n                }\r\n            }\r\n\r\n            return document.scrollingElement || document.documentElement;\r\n        };\r\n\r\n        return scrollParent(node);\r\n    }\r\n};\r\n","import { GridListItem } from './GridListItem';\r\nimport { IGridsterOptions } from '../IGridsterOptions';\r\n\r\nconst GridCol = function(lanes) {\r\n    for (let i = 0; i < lanes; i++) {\r\n        this.push(null);\r\n    }\r\n};\r\n// Extend the Array prototype\r\nGridCol.prototype = [];\r\n\r\n/**\r\n * A GridList manages the two-dimensional positions from a list of items,\r\n * within a virtual matrix.\r\n *\r\n * The GridList's main function is to convert the item positions from one\r\n * grid size to another, maintaining as much of their order as possible.\r\n *\r\n * The GridList's second function is to handle collisions when moving an item\r\n * over another.\r\n *\r\n * The positioning algorithm places items in columns. Starting from left to\r\n * right, going through each column top to bottom.\r\n *\r\n * The size of an item is expressed using the number of cols and rows it\r\n * takes up within the grid (w and h)\r\n *\r\n * The position of an item is express using the col and row position within\r\n * the grid (x and y)\r\n *\r\n * An item is an object of structure:\r\n * {\r\n *   w: 3, h: 1,\r\n *   x: 0, y: 1\r\n * }\r\n */\r\nexport class GridList {\r\n    items: Array<GridListItem>;\r\n    grid: Array<Array<GridListItem>>;\r\n\r\n    options: IGridsterOptions;\r\n\r\n    constructor(items: Array<GridListItem>, options: IGridsterOptions) {\r\n        this.options = options;\r\n\r\n        this.items = items;\r\n\r\n        this.adjustSizeOfItems();\r\n\r\n        this.generateGrid();\r\n    }\r\n\r\n    /**\r\n     * Illustrates grid as text-based table, using a number identifier for each\r\n     * item. E.g.\r\n     *\r\n     *  #|  0  1  2  3  4  5  6  7  8  9 10 11 12 13\r\n     *  --------------------------------------------\r\n     *  0| 00 02 03 04 04 06 08 08 08 12 12 13 14 16\r\n     *  1| 01 -- 03 05 05 07 09 10 11 11 -- 13 15 --\r\n     *\r\n     * Warn: Does not work if items don't have a width or height specified\r\n     * besides their position in the grid.\r\n     */\r\n    toString() {\r\n        const widthOfGrid = this.grid.length;\r\n        let output = '\\n #|',\r\n            border = '\\n --',\r\n            item,\r\n            i,\r\n            j;\r\n\r\n        // Render the table header\r\n        for (i = 0; i < widthOfGrid; i++) {\r\n            output += ' ' + this.padNumber(i, ' ');\r\n            border += '---';\r\n        }\r\n        output += border;\r\n\r\n        // Render table contents row by row, as we go on the y axis\r\n        for (i = 0; i < this.options.lanes; i++) {\r\n            output += '\\n' + this.padNumber(i, ' ') + '|';\r\n            for (j = 0; j < widthOfGrid; j++) {\r\n                output += ' ';\r\n                item = this.grid[j][i];\r\n                output += item\r\n                    ? this.padNumber(this.items.indexOf(item), '0')\r\n                    : '--';\r\n            }\r\n        }\r\n        output += '\\n';\r\n        return output;\r\n    }\r\n\r\n    setOption(name: string, value: any) {\r\n        this.options[name] = value;\r\n    }\r\n\r\n    /**\r\n     * Build the grid structure from scratch, with the current item positions\r\n     */\r\n    generateGrid() {\r\n        let i;\r\n        this.resetGrid();\r\n        for (i = 0; i < this.items.length; i++) {\r\n            this.markItemPositionToGrid(this.items[i]);\r\n        }\r\n    }\r\n\r\n    resizeGrid(lanes: number) {\r\n        let currentColumn = 0;\r\n\r\n        this.options.lanes = lanes;\r\n        this.adjustSizeOfItems();\r\n\r\n        this.sortItemsByPosition();\r\n        this.resetGrid();\r\n\r\n        // The items will be sorted based on their index within the this.items array,\r\n        // that is their \"1d position\"\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            const item = this.items[i],\r\n                position = this.getItemPosition(item);\r\n\r\n            this.updateItemPosition(\r\n                item,\r\n                this.findPositionForItem(item, { x: currentColumn, y: 0 })\r\n            );\r\n\r\n            // New items should never be placed to the left of previous items\r\n            currentColumn = Math.max(currentColumn, position.x);\r\n        }\r\n\r\n        this.pullItemsToLeft();\r\n    }\r\n\r\n    /**\r\n     * This method has two options for the position we want for the item:\r\n     * - Starting from a certain row/column number and only looking for\r\n     *   positions to its right\r\n     * - Accepting positions for a certain row number only (use-case: items\r\n     *   being shifted to the left/right as a result of collisions)\r\n     *\r\n     * @param Object item\r\n     * @param Object start Position from which to start\r\n     *     the search.\r\n     * @param number [fixedRow] If provided, we're going to try to find a\r\n     *     position for the new item on it. If doesn't fit there, we're going\r\n     *     to put it on the first row.\r\n     *\r\n     * @returns Array x and y.\r\n     */\r\n    findPositionForItem(\r\n        item: GridListItem,\r\n        start: { x: number; y: number },\r\n        fixedRow?: number\r\n    ): Array<number> {\r\n        let x, y, position;\r\n\r\n        // Start searching for a position from the horizontal position of the\r\n        // rightmost item from the grid\r\n        for (x = start.x; x < this.grid.length; x++) {\r\n            if (fixedRow !== undefined) {\r\n                position = [x, fixedRow];\r\n\r\n                if (this.itemFitsAtPosition(item, position)) {\r\n                    return position;\r\n                }\r\n            } else {\r\n                for (y = start.y; y < this.options.lanes; y++) {\r\n                    position = [x, y];\r\n\r\n                    if (this.itemFitsAtPosition(item, position)) {\r\n                        return position;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // If we've reached this point, we need to start a new column\r\n        const newCol = this.grid.length;\r\n        let newRow = 0;\r\n\r\n        if (\r\n            fixedRow !== undefined &&\r\n            this.itemFitsAtPosition(item, [newCol, fixedRow])\r\n        ) {\r\n            newRow = fixedRow;\r\n        }\r\n\r\n        return [newCol, newRow];\r\n    }\r\n\r\n    moveAndResize(\r\n        item: GridListItem,\r\n        newPosition: Array<number>,\r\n        size: { w: number; h: number }\r\n    ) {\r\n        const position = this.getItemPosition({\r\n            x: newPosition[0],\r\n            y: newPosition[1],\r\n            w: item.w,\r\n            h: item.h\r\n        });\r\n        const width = size.w || item.w,\r\n            height = size.h || item.h;\r\n\r\n        this.updateItemPosition(item, [position.x, position.y]);\r\n        this.updateItemSize(item, width, height);\r\n\r\n        this.resolveCollisions(item);\r\n    }\r\n\r\n    moveItemToPosition(item: GridListItem, newPosition: Array<number>) {\r\n        const position = this.getItemPosition({\r\n            x: newPosition[0],\r\n            y: newPosition[1],\r\n            w: item.w,\r\n            h: item.h\r\n        });\r\n\r\n        this.updateItemPosition(item, [position.x, position.y]);\r\n        this.resolveCollisions(item);\r\n    }\r\n\r\n    /**\r\n     * Resize an item and resolve collisions.\r\n     *\r\n     * @param Object item A reference to an item that's part of the grid.\r\n     * @param Object size\r\n     * @param number [size.w=item.w] The new width.\r\n     * @param number [size.h=item.h] The new height.\r\n     */\r\n    resizeItem(item: GridListItem, size: { w: number; h: number }) {\r\n        const width = size.w || item.w,\r\n            height = size.h || item.h;\r\n\r\n        this.updateItemSize(item, width, height);\r\n\r\n        this.pullItemsToLeft(item);\r\n    }\r\n\r\n    /**\r\n     * Compare the current items against a previous snapshot and return only\r\n     * the ones that changed their attributes in the meantime. This includes both\r\n     * position (x, y) and size (w, h)\r\n     *\r\n     * Each item that is returned is not the GridListItem but the helper that holds GridListItem\r\n     * and list of changed properties.\r\n     */\r\n    getChangedItems(\r\n        initialItems: Array<GridListItem>,\r\n        breakpoint?\r\n    ): Array<{\r\n        item: GridListItem;\r\n        changes: Array<string>;\r\n        isNew: boolean;\r\n    }> {\r\n        return this.items\r\n            .map((item: GridListItem) => {\r\n                const changes = [];\r\n                const oldValues: {\r\n                    x?: number;\r\n                    y?: number;\r\n                    w?: number;\r\n                    h?: number;\r\n                } = {};\r\n                const initItem = initialItems.find(\r\n                    initItm => initItm.$element === item.$element\r\n                );\r\n\r\n                if (!initItem) {\r\n                    return { item, changes: ['x', 'y', 'w', 'h'], isNew: true };\r\n                }\r\n\r\n                const oldX = initItem.getValueX(breakpoint);\r\n                if (item.getValueX(breakpoint) !== oldX) {\r\n                    changes.push('x');\r\n                    if (oldX || oldX === 0) {\r\n                        oldValues.x = oldX;\r\n                    }\r\n                }\r\n\r\n                const oldY = initItem.getValueY(breakpoint);\r\n                if (item.getValueY(breakpoint) !== oldY) {\r\n                    changes.push('y');\r\n                    if (oldY || oldY === 0) {\r\n                        oldValues.y = oldY;\r\n                    }\r\n                }\r\n                if (\r\n                    item.getValueW(breakpoint) !==\r\n                    initItem.getValueW(breakpoint)\r\n                ) {\r\n                    changes.push('w');\r\n                    oldValues.w = initItem.w;\r\n                }\r\n                if (\r\n                    item.getValueH(breakpoint) !==\r\n                    initItem.getValueH(breakpoint)\r\n                ) {\r\n                    changes.push('h');\r\n                    oldValues.h = initItem.h;\r\n                }\r\n\r\n                return { item, oldValues, changes, isNew: false };\r\n            })\r\n            .filter(\r\n                (itemChange: {\r\n                    item: GridListItem;\r\n                    changes: Array<string>;\r\n                }) => {\r\n                    return itemChange.changes.length;\r\n                }\r\n            );\r\n    }\r\n\r\n    resolveCollisions(item: GridListItem) {\r\n        if (!this.tryToResolveCollisionsLocally(item)) {\r\n            this.pullItemsToLeft(item);\r\n        }\r\n        if (this.options.floating) {\r\n            this.pullItemsToLeft();\r\n        } else if (this.getItemsCollidingWithItem(item).length) {\r\n            this.pullItemsToLeft();\r\n        }\r\n    }\r\n\r\n    pushCollidingItems(fixedItem?: GridListItem) {\r\n        // Start a fresh grid with the fixed item already placed inside\r\n        this.sortItemsByPosition();\r\n        this.resetGrid();\r\n        this.generateGrid();\r\n\r\n        this.items\r\n            .filter(item => !this.isItemFloating(item) && item !== fixedItem)\r\n            .forEach(item => {\r\n                if (!this.tryToResolveCollisionsLocally(item)) {\r\n                    this.pullItemsToLeft(item);\r\n                }\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Build the grid from scratch, by using the current item positions and\r\n     * pulling them as much to the left as possible, removing as space between\r\n     * them as possible.\r\n     *\r\n     * If a \"fixed item\" is provided, its position will be kept intact and the\r\n     * rest of the items will be layed around it.\r\n     */\r\n    pullItemsToLeft(fixedItem?) {\r\n        if (this.options.direction === 'none') {\r\n            return;\r\n        }\r\n\r\n        // Start a fresh grid with the fixed item already placed inside\r\n        this.sortItemsByPosition();\r\n        this.resetGrid();\r\n\r\n        // Start the grid with the fixed item as the first positioned item\r\n        if (fixedItem) {\r\n            const fixedPosition = this.getItemPosition(fixedItem);\r\n            this.updateItemPosition(fixedItem, [\r\n                fixedPosition.x,\r\n                fixedPosition.y\r\n            ]);\r\n        }\r\n\r\n        this.items\r\n            .filter((item: GridListItem) => {\r\n                return !item.dragAndDrop && item !== fixedItem;\r\n            })\r\n            .forEach((item: GridListItem) => {\r\n                const fixedPosition = this.getItemPosition(item);\r\n                this.updateItemPosition(item, [\r\n                    fixedPosition.x,\r\n                    fixedPosition.y\r\n                ]);\r\n            });\r\n\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            const item = this.items[i],\r\n                position = this.getItemPosition(item);\r\n\r\n            // The fixed item keeps its exact position\r\n            if (\r\n                (fixedItem && item === fixedItem) ||\r\n                !item.dragAndDrop ||\r\n                (!this.options.floating &&\r\n                    this.isItemFloating(item) &&\r\n                    !this.getItemsCollidingWithItem(item).length)\r\n            ) {\r\n                continue;\r\n            }\r\n\r\n            const x = this.findLeftMostPositionForItem(item),\r\n                newPosition = this.findPositionForItem(\r\n                    item,\r\n                    { x: x, y: 0 },\r\n                    position.y\r\n                );\r\n\r\n            this.updateItemPosition(item, newPosition);\r\n        }\r\n    }\r\n\r\n    isOverFixedArea(\r\n        x: number,\r\n        y: number,\r\n        w: number,\r\n        h: number,\r\n        item: GridListItem = null\r\n    ): boolean {\r\n        let itemData = { x, y, w, h };\r\n\r\n        if (this.options.direction !== 'horizontal') {\r\n            itemData = { x: y, y: x, w: h, h: w };\r\n        }\r\n\r\n        for (let i = itemData.x; i < itemData.x + itemData.w; i++) {\r\n            for (let j = itemData.y; j < itemData.y + itemData.h; j++) {\r\n                if (\r\n                    this.grid[i] &&\r\n                    this.grid[i][j] &&\r\n                    this.grid[i][j] !== item &&\r\n                    !this.grid[i][j].dragAndDrop\r\n                ) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    checkItemAboveEmptyArea(\r\n        item: GridListItem,\r\n        newPosition: { x: number; y: number }\r\n    ) {\r\n        let itemData = {\r\n            x: newPosition.x,\r\n            y: newPosition.y,\r\n            w: item.w,\r\n            h: item.h\r\n        };\r\n        if (\r\n            !item.itemPrototype &&\r\n            item.x === newPosition.x &&\r\n            item.y === newPosition.y\r\n        ) {\r\n            return true;\r\n        }\r\n\r\n        if (this.options.direction === 'horizontal') {\r\n            itemData = {\r\n                x: newPosition.y,\r\n                y: newPosition.x,\r\n                w: itemData.h,\r\n                h: itemData.w\r\n            };\r\n        }\r\n        return !this.checkItemsInArea(\r\n            itemData.y,\r\n            itemData.y + itemData.h - 1,\r\n            itemData.x,\r\n            itemData.x + itemData.w - 1,\r\n            item\r\n        );\r\n    }\r\n\r\n    fixItemsPositions(options: IGridsterOptions) {\r\n        // items with x, y that fits gird with size of options.lanes\r\n        const validItems = this.items\r\n            .filter((item: GridListItem) => item.itemComponent)\r\n            .filter((item: GridListItem) =>\r\n                this.isItemValidForGrid(item, options)\r\n            );\r\n        // items that x, y must be generated\r\n        const invalidItems = this.items\r\n            .filter((item: GridListItem) => item.itemComponent)\r\n            .filter(\r\n                (item: GridListItem) => !this.isItemValidForGrid(item, options)\r\n            );\r\n\r\n        const gridList = new GridList([], options);\r\n\r\n        // put items with defined positions to the grid\r\n        gridList.items = validItems.map((item: GridListItem) => {\r\n            return item.copyForBreakpoint(options.breakpoint);\r\n        });\r\n\r\n        gridList.generateGrid();\r\n\r\n        invalidItems.forEach(item => {\r\n            // TODO: check if this change does not broke anything\r\n            // const itemCopy = item.copy();\r\n            const itemCopy = item.copyForBreakpoint(options.breakpoint);\r\n            const position = gridList.findPositionForItem(itemCopy, {\r\n                x: 0,\r\n                y: 0\r\n            });\r\n\r\n            gridList.items.push(itemCopy);\r\n            gridList.setItemPosition(itemCopy, position);\r\n            gridList.markItemPositionToGrid(itemCopy);\r\n        });\r\n\r\n        gridList.pullItemsToLeft();\r\n        gridList.pushCollidingItems();\r\n\r\n        this.items.forEach((itm: GridListItem) => {\r\n            const cachedItem = gridList.items.filter(cachedItm => {\r\n                return cachedItm.$element === itm.$element;\r\n            })[0];\r\n\r\n            itm.setValueX(cachedItem.x, options.breakpoint);\r\n            itm.setValueY(cachedItem.y, options.breakpoint);\r\n            itm.setValueW(cachedItem.w, options.breakpoint);\r\n            itm.setValueH(cachedItem.h, options.breakpoint);\r\n            itm.autoSize = cachedItem.autoSize;\r\n        });\r\n    }\r\n\r\n    deleteItemPositionFromGrid(item: GridListItem) {\r\n        const position = this.getItemPosition(item);\r\n        let x, y;\r\n\r\n        for (x = position.x; x < position.x + position.w; x++) {\r\n            // It can happen to try to remove an item from a position not generated\r\n            // in the grid, probably when loading a persisted grid of items. No need\r\n            // to create a column to be able to remove something from it, though\r\n            if (!this.grid[x]) {\r\n                continue;\r\n            }\r\n\r\n            for (y = position.y; y < position.y + position.h; y++) {\r\n                // Don't clear the cell if it's been occupied by a different widget in\r\n                // the meantime (e.g. when an item has been moved over this one, and\r\n                // thus by continuing to clear this item's previous position you would\r\n                // cancel the first item's move, leaving it without any position even)\r\n                if (this.grid[x][y] === item) {\r\n                    this.grid[x][y] = null;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private isItemFloating(item) {\r\n        if (item.itemComponent && item.itemComponent.isDragging) {\r\n            return false;\r\n        }\r\n        const position = this.getItemPosition(item);\r\n\r\n        if (position.x === 0) {\r\n            return false;\r\n        }\r\n        const rowBelowItem = this.grid[position.x - 1];\r\n\r\n        return (rowBelowItem || [])\r\n            .slice(position.y, position.y + position.h)\r\n            .reduce((isFloating, cellItem) => {\r\n                return isFloating && !cellItem;\r\n            }, true);\r\n    }\r\n\r\n    private isItemValidForGrid(item: GridListItem, options: IGridsterOptions) {\r\n        const itemData =\r\n            options.direction === 'horizontal'\r\n                ? {\r\n                      x: item.getValueY(options.breakpoint),\r\n                      y: item.getValueX(options.breakpoint),\r\n                      w: item.getValueH(options.breakpoint),\r\n                      h: Math.min(\r\n                          item.getValueW(this.options.breakpoint),\r\n                          options.lanes\r\n                      )\r\n                  }\r\n                : {\r\n                      x: item.getValueX(options.breakpoint),\r\n                      y: item.getValueY(options.breakpoint),\r\n                      w: Math.min(\r\n                          item.getValueW(this.options.breakpoint),\r\n                          options.lanes\r\n                      ),\r\n                      h: item.getValueH(options.breakpoint)\r\n                  };\r\n\r\n        return (\r\n            typeof itemData.x === 'number' &&\r\n            typeof itemData.y === 'number' &&\r\n            itemData.x + itemData.w <= options.lanes\r\n        );\r\n    }\r\n\r\n    private findDefaultPositionHorizontal(width: number, height: number) {\r\n        for (const col of this.grid) {\r\n            const colIdx = this.grid.indexOf(col);\r\n            let rowIdx = 0;\r\n            while (rowIdx < col.length - height + 1) {\r\n                if (\r\n                    !this.checkItemsInArea(\r\n                        colIdx,\r\n                        colIdx + width - 1,\r\n                        rowIdx,\r\n                        rowIdx + height - 1\r\n                    )\r\n                ) {\r\n                    return [colIdx, rowIdx];\r\n                }\r\n                rowIdx++;\r\n            }\r\n        }\r\n        return [this.grid.length, 0];\r\n    }\r\n\r\n    private findDefaultPositionVertical(width: number, height: number) {\r\n        for (const row of this.grid) {\r\n            const rowIdx = this.grid.indexOf(row);\r\n            let colIdx = 0;\r\n            while (colIdx < row.length - width + 1) {\r\n                if (\r\n                    !this.checkItemsInArea(\r\n                        rowIdx,\r\n                        rowIdx + height - 1,\r\n                        colIdx,\r\n                        colIdx + width - 1\r\n                    )\r\n                ) {\r\n                    return [colIdx, rowIdx];\r\n                }\r\n                colIdx++;\r\n            }\r\n        }\r\n        return [0, this.grid.length];\r\n    }\r\n\r\n    private checkItemsInArea(\r\n        rowStart: number,\r\n        rowEnd: number,\r\n        colStart: number,\r\n        colEnd: number,\r\n        item?: GridListItem\r\n    ) {\r\n        for (let i = rowStart; i <= rowEnd; i++) {\r\n            for (let j = colStart; j <= colEnd; j++) {\r\n                if (\r\n                    this.grid[i] &&\r\n                    this.grid[i][j] &&\r\n                    (item ? this.grid[i][j] !== item : true)\r\n                ) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private sortItemsByPosition() {\r\n        this.items.sort((item1, item2) => {\r\n            const position1 = this.getItemPosition(item1),\r\n                position2 = this.getItemPosition(item2);\r\n\r\n            // Try to preserve columns.\r\n            if (position1.x !== position2.x) {\r\n                return position1.x - position2.x;\r\n            }\r\n\r\n            if (position1.y !== position2.y) {\r\n                return position1.y - position2.y;\r\n            }\r\n\r\n            // The items are placed on the same position.\r\n            return 0;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Some items can have 100% height or 100% width. Those dimmensions are\r\n     * expressed as 0. We need to ensure a valid width and height for each of\r\n     * those items as the number of items per lane.\r\n     */\r\n    private adjustSizeOfItems() {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            const item = this.items[i];\r\n\r\n            // This can happen only the first time items are checked.\r\n            // We need the property to have a value for all the items so that the\r\n            // `cloneItems` method will merge the properties properly. If we only set\r\n            // it to the items that need it then the following can happen:\r\n            //\r\n            // cloneItems([{id: 1, autoSize: true}, {id: 2}],\r\n            //            [{id: 2}, {id: 1, autoSize: true}]);\r\n            //\r\n            // will result in\r\n            //\r\n            // [{id: 1, autoSize: true}, {id: 2, autoSize: true}]\r\n            if (item.autoSize === undefined) {\r\n                item.autoSize = item.w === 0 || item.h === 0;\r\n            }\r\n\r\n            if (item.autoSize) {\r\n                if (this.options.direction === 'horizontal') {\r\n                    item.h = this.options.lanes;\r\n                } else {\r\n                    item.w = this.options.lanes;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private resetGrid() {\r\n        this.grid = [];\r\n    }\r\n\r\n    /**\r\n     * Check that an item wouldn't overlap with another one if placed at a\r\n     * certain position within the grid\r\n     */\r\n    private itemFitsAtPosition(item: GridListItem, newPosition) {\r\n        const position = this.getItemPosition(item);\r\n        let x, y;\r\n\r\n        // No coordonate can be negative\r\n        if (newPosition[0] < 0 || newPosition[1] < 0) {\r\n            return false;\r\n        }\r\n\r\n        // Make sure the item isn't larger than the entire grid\r\n        if (\r\n            newPosition[1] + Math.min(position.h, this.options.lanes) >\r\n            this.options.lanes\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        if (this.isOverFixedArea(item.x, item.y, item.w, item.h)) {\r\n            return false;\r\n        }\r\n\r\n        // Make sure the position doesn't overlap with an already positioned\r\n        // item.\r\n        for (x = newPosition[0]; x < newPosition[0] + position.w; x++) {\r\n            const col = this.grid[x];\r\n            // Surely a column that hasn't even been created yet is available\r\n            if (!col) {\r\n                continue;\r\n            }\r\n\r\n            for (y = newPosition[1]; y < newPosition[1] + position.h; y++) {\r\n                // Any space occupied by an item can continue to be occupied by the\r\n                // same item.\r\n                if (col[y] && col[y] !== item) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private updateItemPosition(item: GridListItem, position: Array<any>) {\r\n        if (item.x !== null && item.y !== null) {\r\n            this.deleteItemPositionFromGrid(item);\r\n        }\r\n\r\n        this.setItemPosition(item, position);\r\n\r\n        this.markItemPositionToGrid(item);\r\n    }\r\n\r\n    /**\r\n     * @param Object item A reference to a grid item.\r\n     * @param number width The new width.\r\n     * @param number height The new height.\r\n     */\r\n    private updateItemSize(item: GridListItem, width, height) {\r\n        if (item.x !== null && item.y !== null) {\r\n            this.deleteItemPositionFromGrid(item);\r\n        }\r\n\r\n        item.w = width;\r\n        item.h = height;\r\n\r\n        this.markItemPositionToGrid(item);\r\n    }\r\n\r\n    /**\r\n     * Mark the grid cells that are occupied by an item. This prevents items\r\n     * from overlapping in the grid\r\n     */\r\n    private markItemPositionToGrid(item: GridListItem) {\r\n        const position = this.getItemPosition(item);\r\n        let x, y;\r\n\r\n        // Ensure that the grid has enough columns to accomodate the current item.\r\n        this.ensureColumns(position.x + position.w);\r\n\r\n        for (x = position.x; x < position.x + position.w; x++) {\r\n            for (y = position.y; y < position.y + position.h; y++) {\r\n                this.grid[x][y] = item;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Ensure that the grid has at least N columns available.\r\n     */\r\n    private ensureColumns(N) {\r\n        for (let i = 0; i < N; i++) {\r\n            if (!this.grid[i]) {\r\n                this.grid.push(new GridCol(this.options.lanes));\r\n            }\r\n        }\r\n    }\r\n\r\n    private getItemsCollidingWithItem(item: GridListItem): number[] {\r\n        const collidingItems = [];\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            if (\r\n                item !== this.items[i] &&\r\n                this.itemsAreColliding(item, this.items[i])\r\n            ) {\r\n                collidingItems.push(i);\r\n            }\r\n        }\r\n        return collidingItems;\r\n    }\r\n\r\n    private itemsAreColliding(item1: GridListItem, item2: GridListItem) {\r\n        const position1 = this.getItemPosition(item1),\r\n            position2 = this.getItemPosition(item2);\r\n\r\n        return !(\r\n            position2.x >= position1.x + position1.w ||\r\n            position2.x + position2.w <= position1.x ||\r\n            position2.y >= position1.y + position1.h ||\r\n            position2.y + position2.h <= position1.y\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Attempt to resolve the collisions after moving an item over one or more\r\n     * other items within the grid, by shifting the position of the colliding\r\n     * items around the moving one. This might result in subsequent collisions,\r\n     * in which case we will revert all position permutations. To be able to\r\n     * revert to the initial item positions, we create a virtual grid in the\r\n     * process\r\n     */\r\n    private tryToResolveCollisionsLocally(item: GridListItem) {\r\n        const collidingItems = this.getItemsCollidingWithItem(item);\r\n        if (!collidingItems.length) {\r\n            return true;\r\n        }\r\n\r\n        const _gridList = new GridList(\r\n            this.items.map(itm => {\r\n                return itm.copy();\r\n            }),\r\n            this.options\r\n        );\r\n\r\n        let leftOfItem;\r\n        let rightOfItem;\r\n        let aboveOfItem;\r\n        let belowOfItem;\r\n\r\n        for (let i = 0; i < collidingItems.length; i++) {\r\n            const collidingItem = _gridList.items[collidingItems[i]],\r\n                collidingPosition = this.getItemPosition(collidingItem);\r\n\r\n            // We use a simple algorithm for moving items around when collisions occur:\r\n            // In this prioritized order, we try to move a colliding item around the\r\n            // moving one:\r\n            // 1. to its left side\r\n            // 2. above it\r\n            // 3. under it\r\n            // 4. to its right side\r\n            const position = this.getItemPosition(item);\r\n\r\n            leftOfItem = [\r\n                position.x - collidingPosition.w,\r\n                collidingPosition.y\r\n            ];\r\n            rightOfItem = [position.x + position.w, collidingPosition.y];\r\n            aboveOfItem = [\r\n                collidingPosition.x,\r\n                position.y - collidingPosition.h\r\n            ];\r\n            belowOfItem = [collidingPosition.x, position.y + position.h];\r\n\r\n            if (_gridList.itemFitsAtPosition(collidingItem, leftOfItem)) {\r\n                _gridList.updateItemPosition(collidingItem, leftOfItem);\r\n            } else if (\r\n                _gridList.itemFitsAtPosition(collidingItem, aboveOfItem)\r\n            ) {\r\n                _gridList.updateItemPosition(collidingItem, aboveOfItem);\r\n            } else if (\r\n                _gridList.itemFitsAtPosition(collidingItem, belowOfItem)\r\n            ) {\r\n                _gridList.updateItemPosition(collidingItem, belowOfItem);\r\n            } else if (\r\n                _gridList.itemFitsAtPosition(collidingItem, rightOfItem)\r\n            ) {\r\n                _gridList.updateItemPosition(collidingItem, rightOfItem);\r\n            } else {\r\n                // Collisions failed, we must use the pullItemsToLeft method to arrange\r\n                // the other items around this item with fixed position. This is our\r\n                // plan B for when local collision resolving fails.\r\n                return false;\r\n            }\r\n        }\r\n        // If we reached this point it means we managed to resolve the collisions\r\n        // from one single iteration, just by moving the colliding items around. So\r\n        // we accept this scenario and merge the branched-out grid instance into the\r\n        // original one\r\n\r\n        this.items.forEach((itm: GridListItem, idx: number) => {\r\n            const cachedItem = _gridList.items.filter(cachedItm => {\r\n                return cachedItm.$element === itm.$element;\r\n            })[0];\r\n\r\n            itm.x = cachedItem.x;\r\n            itm.y = cachedItem.y;\r\n            itm.w = cachedItem.w;\r\n            itm.h = cachedItem.h;\r\n            itm.autoSize = cachedItem.autoSize;\r\n        });\r\n        this.generateGrid();\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * When pulling items to the left, we need to find the leftmost position for\r\n     * an item, with two considerations in mind:\r\n     * - preserving its current row\r\n     * - preserving the previous horizontal order between items\r\n     */\r\n    private findLeftMostPositionForItem(item) {\r\n        let tail = 0;\r\n        const position = this.getItemPosition(item);\r\n\r\n        for (let i = 0; i < this.grid.length; i++) {\r\n            for (let j = position.y; j < position.y + position.h; j++) {\r\n                const otherItem = this.grid[i][j];\r\n\r\n                if (!otherItem) {\r\n                    continue;\r\n                }\r\n\r\n                const otherPosition = this.getItemPosition(otherItem);\r\n\r\n                if (this.items.indexOf(otherItem) < this.items.indexOf(item)) {\r\n                    tail = otherPosition.x + otherPosition.w;\r\n                }\r\n            }\r\n        }\r\n\r\n        return tail;\r\n    }\r\n\r\n    private findItemByPosition(x: number, y: number): GridListItem {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            if (this.items[i].x === x && this.items[i].y === y) {\r\n                return this.items[i];\r\n            }\r\n        }\r\n    }\r\n\r\n    private getItemByAttribute(key, value) {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            if (this.items[i][key] === value) {\r\n                return this.items[i];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private padNumber(nr, prefix) {\r\n        // Currently works for 2-digit numbers (<100)\r\n        return nr >= 10 ? nr : prefix + nr;\r\n    }\r\n\r\n    /**\r\n     * If the direction is vertical we need to rotate the grid 90 deg to the\r\n     * left. Thus, we simulate the fact that items are being pulled to the top.\r\n     *\r\n     * Since the items have widths and heights, if we apply the classic\r\n     * counter-clockwise 90 deg rotation\r\n     *\r\n     *     [0 -1]\r\n     *     [1  0]\r\n     *\r\n     * then the top left point of an item will become the bottom left point of\r\n     * the rotated item. To adjust for this, we need to subtract from the y\r\n     * position the height of the original item - the width of the rotated item.\r\n     *\r\n     * However, if we do this then we'll reverse some actions: resizing the\r\n     * width of an item will stretch the item to the left instead of to the\r\n     * right; resizing an item that doesn't fit into the grid will push the\r\n     * items around it instead of going on a new row, etc.\r\n     *\r\n     * We found it better to do a vertical flip of the grid after rotating it.\r\n     * This restores the direction of the actions and greatly simplifies the\r\n     * transformations.\r\n     */\r\n    private getItemPosition(item: any) {\r\n        if (this.options.direction === 'horizontal') {\r\n            return item;\r\n        } else {\r\n            return {\r\n                x: item.y,\r\n                y: item.x,\r\n                w: item.h,\r\n                h: item.w\r\n            };\r\n        }\r\n    }\r\n\r\n    /**\r\n     * See getItemPosition.\r\n     */\r\n    private setItemPosition(item, position) {\r\n        if (this.options.direction === 'horizontal') {\r\n            item.x = position[0];\r\n            item.y = position[1];\r\n        } else {\r\n            // We're supposed to subtract the rotated item's height which is actually\r\n            // the non-rotated item's width.\r\n            item.x = position[1];\r\n            item.y = position[0];\r\n        }\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { GridList } from './gridList/gridList';\r\nimport { IGridsterOptions } from './IGridsterOptions';\r\nimport { IGridsterDraggableOptions } from './IGridsterDraggableOptions';\r\nimport { GridListItem } from './gridList/GridListItem';\r\nimport { GridsterComponent } from './gridster.component';\r\nimport { GridsterOptions } from './GridsterOptions';\r\n\r\n@Injectable()\r\nexport class GridsterService {\r\n    $element: HTMLElement;\r\n\r\n    gridList: GridList;\r\n\r\n    items: Array<GridListItem> = [];\r\n    _items: Array<GridListItem> = [];\r\n    _itemsMap: { [breakpoint: string]: Array<GridListItem> } = {};\r\n    disabledItems: Array<GridListItem> = [];\r\n\r\n    options: IGridsterOptions;\r\n    draggableOptions: IGridsterDraggableOptions;\r\n\r\n    gridsterRect: ClientRect;\r\n    gridsterScrollData: { scrollTop: number, scrollLeft: number };\r\n\r\n    gridsterOptions: GridsterOptions;\r\n\r\n    gridsterComponent: GridsterComponent;\r\n\r\n    debounceRenderSubject = new Subject<void>();\r\n\r\n    public $positionHighlight: HTMLElement;\r\n\r\n    public maxItemWidth: number;\r\n    public maxItemHeight: number;\r\n\r\n    public cellWidth: number;\r\n    public cellHeight: number;\r\n\r\n    public itemRemoveSubject: Subject<GridListItem> = new Subject();\r\n\r\n    private _fontSize: number;\r\n\r\n    private previousDragPosition: Array<number>;\r\n    private previousDragSize: Array<number>;\r\n\r\n    private currentElement: HTMLElement;\r\n\r\n    private _maxGridCols: number;\r\n\r\n    private isInit = false;\r\n\r\n    constructor() {\r\n        this.itemRemoveSubject.pipe(debounceTime(0)).subscribe(() => {\r\n            this.gridList.pullItemsToLeft();\r\n            this.render();\r\n            this.updateCachedItems();\r\n        });\r\n\r\n        this.debounceRenderSubject.pipe(debounceTime(0)).subscribe(() => this.render());\r\n    }\r\n\r\n    isInitialized(): boolean {\r\n        return this.isInit;\r\n    }\r\n\r\n    /**\r\n     * Must be called before init\r\n     * @param item\r\n     */\r\n    registerItem(item: GridListItem) {\r\n\r\n        this.items.push(item);\r\n        return item;\r\n    }\r\n\r\n    init(gridsterComponent: GridsterComponent) {\r\n\r\n        this.gridsterComponent = gridsterComponent;\r\n\r\n        this.draggableOptions = gridsterComponent.draggableOptions;\r\n\r\n        this.gridsterOptions = gridsterComponent.gridsterOptions;\r\n    }\r\n\r\n    start() {\r\n        this.updateMaxItemSize();\r\n\r\n        // Used to highlight a position an element will land on upon drop\r\n        if (this.$positionHighlight) {\r\n            this.removePositionHighlight();\r\n        }\r\n\r\n        this.initGridList();\r\n\r\n        this.isInit = true;\r\n\r\n        setTimeout(() => {\r\n            this.copyItems();\r\n            this.fixItemsPositions();\r\n\r\n            this.gridsterComponent.reflowGridster(true);\r\n            this.gridsterComponent.setReady();\r\n        });\r\n    }\r\n\r\n    initGridList() {\r\n        // Create instance of GridList (decoupled lib for handling the grid\r\n        // positioning and sorting post-drag and dropping)\r\n        this.gridList = new GridList(this.items, this.options);\r\n    }\r\n\r\n    render() {\r\n        this.updateMaxItemSize();\r\n        this.gridList.generateGrid();\r\n        this.applySizeToItems();\r\n        this.applyPositionToItems();\r\n        this.refreshLines();\r\n    }\r\n\r\n    reflow() {\r\n        this.calculateCellSize();\r\n        this.render();\r\n    }\r\n\r\n    fixItemsPositions() {\r\n        if (this.options.responsiveSizes) {\r\n            this.gridList.fixItemsPositions(this.options);\r\n        } else {\r\n            this.gridList.fixItemsPositions(this.gridsterOptions.basicOptions);\r\n            this.gridsterOptions.responsiveOptions.forEach((options: IGridsterOptions) => {\r\n                this.gridList.fixItemsPositions(options);\r\n            });\r\n        }\r\n\r\n        this.updateCachedItems();\r\n    }\r\n\r\n    removeItem(item: GridListItem) {\r\n        const idx = this.items.indexOf(item);\r\n\r\n        if (idx >= 0) {\r\n            this.items.splice(this.items.indexOf(item), 1);\r\n        }\r\n\r\n        this.gridList.deleteItemPositionFromGrid(item);\r\n        this.removeItemFromCache(item);\r\n    }\r\n\r\n    onResizeStart(item: GridListItem) {\r\n        this.currentElement = item.$element;\r\n\r\n        this.copyItems();\r\n\r\n        this._maxGridCols = this.gridList.grid.length;\r\n\r\n        this.highlightPositionForItem(item);\r\n\r\n        this.gridsterComponent.isResizing = true;\r\n\r\n        this.refreshLines();\r\n    }\r\n\r\n    onResizeDrag(item: GridListItem) {\r\n        const newSize = this.snapItemSizeToGrid(item);\r\n        const sizeChanged = this.dragSizeChanged(newSize);\r\n        const newPosition = this.snapItemPositionToGrid(item);\r\n        const positionChanged = this.dragPositionChanged(newPosition);\r\n\r\n        if (sizeChanged || positionChanged) {\r\n            // Regenerate the grid with the positions from when the drag started\r\n            this.restoreCachedItems();\r\n            this.gridList.generateGrid();\r\n\r\n            this.previousDragPosition = newPosition;\r\n            this.previousDragSize = newSize;\r\n\r\n            this.gridList.moveAndResize(item, newPosition, {w: newSize[0], h: newSize[1]});\r\n\r\n            // Visually update item positions and highlight shape\r\n            this.applyPositionToItems(true);\r\n            this.highlightPositionForItem(item);\r\n        }\r\n    }\r\n\r\n    onResizeStop(item: GridListItem) {\r\n        this.currentElement = undefined;\r\n        this.updateCachedItems();\r\n        this.previousDragSize = null;\r\n\r\n        this.removePositionHighlight();\r\n\r\n        this.gridsterComponent.isResizing = false;\r\n\r\n        this.gridList.pullItemsToLeft(item);\r\n        this.debounceRenderSubject.next();\r\n\r\n        this.fixItemsPositions();\r\n    }\r\n\r\n    onStart(item: GridListItem) {\r\n        this.currentElement = item.$element;\r\n        // itemCtrl.isDragging = true;\r\n        // Create a deep copy of the items; we use them to revert the item\r\n        // positions after each drag change, making an entire drag operation less\r\n        // distructable\r\n        this.copyItems();\r\n\r\n        // Since dragging actually alters the grid, we need to establish the number\r\n        // of cols (+1 extra) before the drag starts\r\n\r\n        this._maxGridCols = this.gridList.grid.length;\r\n\r\n        this.gridsterComponent.isDragging = true;\r\n        this.gridsterComponent.updateGridsterElementData();\r\n\r\n        this.refreshLines();\r\n    }\r\n\r\n    onDrag(item: GridListItem) {\r\n        const newPosition = this.snapItemPositionToGrid(item);\r\n\r\n        if (this.dragPositionChanged(newPosition)) {\r\n\r\n            // Regenerate the grid with the positions from when the drag started\r\n            this.restoreCachedItems();\r\n            this.gridList.generateGrid();\r\n\r\n            this.previousDragPosition = newPosition;\r\n            if (this.options.direction === 'none' &&\r\n                !this.gridList.checkItemAboveEmptyArea(item, {x: newPosition[0], y: newPosition[1]})) {\r\n                return;\r\n            }\r\n\r\n            // Since the items list is a deep copy, we need to fetch the item\r\n            // corresponding to this drag action again\r\n            this.gridList.moveItemToPosition(item, newPosition);\r\n\r\n            // Visually update item positions and highlight shape\r\n            this.applyPositionToItems(true);\r\n            this.highlightPositionForItem(item);\r\n        }\r\n    }\r\n\r\n    cancel() {\r\n        this.restoreCachedItems();\r\n        this.previousDragPosition = null;\r\n        this.updateMaxItemSize();\r\n        this.applyPositionToItems();\r\n        this.removePositionHighlight();\r\n        this.currentElement = undefined;\r\n        this.gridsterComponent.isDragging = false;\r\n    }\r\n\r\n    onDragOut (item: GridListItem) {\r\n\r\n        this.cancel();\r\n\r\n        const idx = this.items.indexOf(item);\r\n        if (idx >= 0) {\r\n            this.items.splice(idx, 1);\r\n        }\r\n\r\n        this.gridList.pullItemsToLeft();\r\n        this.render();\r\n    }\r\n\r\n    onStop(item: GridListItem) {\r\n        this.currentElement = undefined;\r\n        this.updateCachedItems();\r\n        this.previousDragPosition = null;\r\n\r\n        this.removePositionHighlight();\r\n\r\n        this.gridList.pullItemsToLeft(item);\r\n\r\n        this.gridsterComponent.isDragging = false;\r\n\r\n        this.refreshLines();\r\n    }\r\n\r\n    calculateCellSize() {\r\n        if (this.options.direction === 'horizontal') {\r\n            this.cellHeight = this.calculateCellHeight();\r\n            this.cellWidth = this.options.cellWidth || this.cellHeight * this.options.widthHeightRatio;\r\n        } else {\r\n            this.cellWidth = this.calculateCellWidth();\r\n            this.cellHeight = this.options.cellHeight || this.cellWidth / this.options.widthHeightRatio;\r\n        }\r\n        if (this.options.heightToFontSizeRatio) {\r\n            this._fontSize = this.cellHeight * this.options.heightToFontSizeRatio;\r\n        }\r\n    }\r\n\r\n    applyPositionToItems(increaseGridsterSize?) {\r\n        if (!this.options.shrink) {\r\n            increaseGridsterSize = true;\r\n        }\r\n        // TODO: Implement group separators\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            // Don't interfere with the positions of the dragged items\r\n            if (this.isCurrentElement(this.items[i].$element)) {\r\n                continue;\r\n            }\r\n            this.items[i].applyPosition(this);\r\n        }\r\n\r\n        const child = <HTMLElement>this.gridsterComponent.$element.firstChild;\r\n        // Update the width of the entire grid container with enough room on the\r\n        // right to allow dragging items to the end of the grid.\r\n        if (this.options.direction === 'horizontal') {\r\n            const increaseWidthWith = (increaseGridsterSize) ? this.maxItemWidth : 0;\r\n            child.style.height = '';\r\n            child.style.width = ((this.gridList.grid.length + increaseWidthWith) * this.cellWidth) + 'px';\r\n\r\n        } else if (this.gridList.grid.length) {\r\n            const increaseHeightWith = (increaseGridsterSize) ? this.maxItemHeight : 0;\r\n            child.style.height = ((this.gridList.grid.length + increaseHeightWith) * this.cellHeight) + 'px';\r\n            child.style.width = '';\r\n        }\r\n    }\r\n\r\n    refreshLines() {\r\n        const gridsterContainer = <HTMLElement>this.gridsterComponent.$element.firstChild;\r\n\r\n        if (this.options.lines && this.options.lines.visible &&\r\n            (this.gridsterComponent.isDragging || this.gridsterComponent.isResizing || this.options.lines.always)) {\r\n            const linesColor = this.options.lines.color || '#d8d8d8';\r\n            const linesBgColor = this.options.lines.backgroundColor || 'transparent';\r\n            const linesWidth = this.options.lines.width || 1;\r\n            const bgPosition = linesWidth / 2;\r\n\r\n            gridsterContainer.style.backgroundSize = `${this.cellWidth}px ${this.cellHeight}px`;\r\n            gridsterContainer.style.backgroundPosition = `-${bgPosition}px -${bgPosition}px`;\r\n            gridsterContainer.style.backgroundImage = `\r\n                linear-gradient(to right, ${linesColor} ${linesWidth}px, ${linesBgColor} ${linesWidth}px),\r\n                linear-gradient(to bottom, ${linesColor} ${linesWidth}px, ${linesBgColor} ${linesWidth}px)\r\n            `;\r\n        } else {\r\n            gridsterContainer.style.backgroundSize = '';\r\n            gridsterContainer.style.backgroundPosition = '';\r\n            gridsterContainer.style.backgroundImage = '';\r\n        }\r\n    }\r\n\r\n    private removeItemFromCache(item: GridListItem) {\r\n        this._items = this._items\r\n            .filter(cachedItem => cachedItem.$element !== item.$element);\r\n\r\n        Object.keys(this._itemsMap)\r\n            .forEach((breakpoint: string) => {\r\n                this._itemsMap[breakpoint] = this._itemsMap[breakpoint]\r\n                    .filter(cachedItem => cachedItem.$element !== item.$element);\r\n            });\r\n    }\r\n\r\n    private copyItems(): void {\r\n        this._items = this.items\r\n            .filter(item => this.isValidGridItem(item))\r\n            .map((item: GridListItem) => {\r\n                return item.copyForBreakpoint(null);\r\n            });\r\n\r\n        this.gridsterOptions.responsiveOptions.forEach((options: IGridsterOptions) => {\r\n            this._itemsMap[options.breakpoint] = this.items\r\n                .filter(item => this.isValidGridItem(item))\r\n                .map((item: GridListItem) => {\r\n                    return item.copyForBreakpoint(options.breakpoint);\r\n                });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Update maxItemWidth and maxItemHeight vales according to current state of items\r\n     */\r\n    private updateMaxItemSize() {\r\n        this.maxItemWidth = Math.max.apply(\r\n            null, this.items.map((item) => {\r\n                return item.w;\r\n            }));\r\n        this.maxItemHeight = Math.max.apply(\r\n            null, this.items.map((item) => {\r\n                return item.h;\r\n            }));\r\n    }\r\n\r\n    /**\r\n     * Update items properties of previously cached items\r\n     */\r\n    private restoreCachedItems() {\r\n        const items = this.options.breakpoint ? this._itemsMap[this.options.breakpoint] : this._items;\r\n\r\n        this.items\r\n            .filter(item => this.isValidGridItem(item))\r\n            .forEach((item: GridListItem) => {\r\n                const cachedItem: GridListItem = items.filter(cachedItm => {\r\n                    return cachedItm.$element === item.$element;\r\n                })[0];\r\n\r\n                item.x = cachedItem.x;\r\n                item.y = cachedItem.y;\r\n\r\n                item.w = cachedItem.w;\r\n                item.h = cachedItem.h;\r\n                item.autoSize = cachedItem.autoSize;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * If item should react on grid\r\n     * @param GridListItem item\r\n     * @returns boolean\r\n     */\r\n    private isValidGridItem(item: GridListItem): boolean {\r\n        if (this.options.direction === 'none') {\r\n            return !!item.itemComponent;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    private calculateCellWidth() {\r\n        const gridsterWidth = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).width);\r\n\r\n        return gridsterWidth / this.options.lanes;\r\n    }\r\n\r\n    private calculateCellHeight() {\r\n        const gridsterHeight = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).height);\r\n\r\n        return gridsterHeight / this.options.lanes;\r\n    }\r\n\r\n    private applySizeToItems() {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n            this.items[i].applySize();\r\n\r\n            if (this.options.heightToFontSizeRatio) {\r\n                this.items[i].$element.style['font-size'] = this._fontSize;\r\n            }\r\n        }\r\n    }\r\n\r\n    private isCurrentElement(element) {\r\n        if (!this.currentElement) {\r\n            return false;\r\n        }\r\n        return element === this.currentElement;\r\n    }\r\n\r\n    private snapItemSizeToGrid(item: GridListItem): Array<number> {\r\n        const itemSize = {\r\n            width: parseInt(item.$element.style.width, 10) - 1,\r\n            height: parseInt(item.$element.style.height, 10) - 1\r\n        };\r\n\r\n        let colSize = Math.round(itemSize.width / this.cellWidth);\r\n        let rowSize = Math.round(itemSize.height / this.cellHeight);\r\n\r\n        // Keep item minimum 1\r\n        colSize = Math.max(colSize, 1);\r\n        rowSize = Math.max(rowSize, 1);\r\n\r\n        // check if element is pinned\r\n        if (this.gridList.isOverFixedArea(item.x, item.y, colSize, rowSize, item)) {\r\n            return [item.w, item.h];\r\n        }\r\n\r\n        return [colSize, rowSize];\r\n    }\r\n\r\n    private generateItemPosition(item: GridListItem): { x: number, y: number } {\r\n        let position;\r\n\r\n        if (item.itemPrototype) {\r\n            const coords = item.itemPrototype.getPositionToGridster(this);\r\n            position = {\r\n                x: Math.round(coords.x / this.cellWidth),\r\n                y: Math.round(coords.y / this.cellHeight)\r\n            };\r\n        } else {\r\n            position = {\r\n                x: Math.round(item.positionX / this.cellWidth),\r\n                y: Math.round(item.positionY / this.cellHeight)\r\n            };\r\n        }\r\n\r\n        return position;\r\n    }\r\n\r\n    private snapItemPositionToGrid(item: GridListItem) {\r\n        const position = this.generateItemPosition(item);\r\n        let col = position.x;\r\n        let row = position.y;\r\n\r\n        // Keep item position within the grid and don't let the item create more\r\n        // than one extra column\r\n        col = Math.max(col, 0);\r\n        row = Math.max(row, 0);\r\n\r\n        if (this.options.direction === 'horizontal') {\r\n            col = Math.min(col, this._maxGridCols);\r\n        } else {\r\n            col = Math.min(col, Math.max(0, this.options.lanes - item.w));\r\n        }\r\n\r\n        // check if element is pinned\r\n        if (this.gridList.isOverFixedArea(col, row, item.w, item.h)) {\r\n            return [item.x, item.y];\r\n        }\r\n\r\n        return [col, row];\r\n    }\r\n\r\n    private dragSizeChanged(newSize): boolean {\r\n        if (!this.previousDragSize) {\r\n            return true;\r\n        }\r\n        return (newSize[0] !== this.previousDragSize[0] ||\r\n            newSize[1] !== this.previousDragSize[1]);\r\n    }\r\n\r\n    private dragPositionChanged(newPosition): boolean {\r\n        if (!this.previousDragPosition) {\r\n            return true;\r\n        }\r\n        return (newPosition[0] !== this.previousDragPosition[0] ||\r\n            newPosition[1] !== this.previousDragPosition[1]);\r\n    }\r\n\r\n    private highlightPositionForItem(item) {\r\n        const size = item.calculateSize(this);\r\n        const position = item.calculatePosition(this);\r\n\r\n        this.$positionHighlight.style.width = size.width + 'px';\r\n        this.$positionHighlight.style.height = size.height + 'px';\r\n        this.$positionHighlight.style.left = position.left + 'px';\r\n        this.$positionHighlight.style.top = position.top + 'px';\r\n        this.$positionHighlight.style.display = '';\r\n\r\n        if (this.options.heightToFontSizeRatio) {\r\n            this.$positionHighlight.style['font-size'] = this._fontSize;\r\n        }\r\n    }\r\n\r\n    public updateCachedItems() {\r\n        // Notify the user with the items that changed since the previous snapshot\r\n        this.triggerOnChange(null);\r\n        this.gridsterOptions.responsiveOptions.forEach((options: IGridsterOptions) => {\r\n            this.triggerOnChange(options.breakpoint);\r\n        });\r\n\r\n        this.copyItems();\r\n    }\r\n\r\n    private triggerOnChange(breakpoint?) {\r\n        const items = breakpoint ? this._itemsMap[breakpoint] : this._items;\r\n        const changeItems = this.gridList.getChangedItems(items || [], breakpoint);\r\n\r\n        changeItems\r\n            .filter((itemChange: any) => {\r\n                return itemChange.item.itemComponent;\r\n            })\r\n            .forEach((itemChange: any) => {\r\n\r\n                if (itemChange.changes.indexOf('x') >= 0) {\r\n                    itemChange.item.triggerChangeX(breakpoint);\r\n                }\r\n                if (itemChange.changes.indexOf('y') >= 0) {\r\n                    itemChange.item.triggerChangeY(breakpoint);\r\n                }\r\n                if (itemChange.changes.indexOf('w') >= 0) {\r\n                    itemChange.item.triggerChangeW(breakpoint);\r\n                }\r\n                if (itemChange.changes.indexOf('h') >= 0) {\r\n                    itemChange.item.triggerChangeH(breakpoint);\r\n                }\r\n                // should be called only once (not for each breakpoint)\r\n                itemChange.item.itemComponent.change.emit({\r\n                    item: itemChange.item,\r\n                    oldValues: itemChange.oldValues || {},\r\n                    isNew: itemChange.isNew,\r\n                    changes: itemChange.changes,\r\n                    breakpoint: breakpoint\r\n                });\r\n            });\r\n    }\r\n\r\n    private removePositionHighlight() {\r\n        this.$positionHighlight.style.display = 'none';\r\n    }\r\n\r\n}\r\n","import { Observable, of, fromEvent, pipe, merge } from 'rxjs';\r\nimport { debounceTime, map, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { IGridsterOptions } from './IGridsterOptions';\r\n\r\nexport class GridsterOptions {\r\n    direction: string;\r\n    lanes: number;\r\n    widthHeightRatio: number;\r\n    heightToFontSizeRatio: number;\r\n    responsiveView: boolean;\r\n    responsiveSizes: boolean;\r\n    responsiveToParent: boolean;\r\n    dragAndDrop: boolean;\r\n    resizable: boolean;\r\n    shrink: boolean;\r\n    minWidth: number;\r\n    useCSSTransforms: boolean;\r\n\r\n    defaults: IGridsterOptions = {\r\n        lanes: 5,\r\n        direction: 'horizontal',\r\n        widthHeightRatio: 1,\r\n        shrink: false,\r\n        responsiveView: true,\r\n        responsiveSizes: false,\r\n        responsiveToParent: false,\r\n        dragAndDrop: true,\r\n        resizable: false,\r\n        useCSSTransforms: false,\r\n        floating: true,\r\n        tolerance: 'pointer'\r\n    };\r\n\r\n    change: Observable<IGridsterOptions>;\r\n\r\n    responsiveOptions: Array<IGridsterOptions> = [];\r\n    basicOptions: IGridsterOptions;\r\n\r\n    breakpointsMap = {\r\n        sm: 576, // Small devices\r\n        md: 768, // Medium devices\r\n        lg: 992, // Large devices\r\n        xl: 1200 // Extra large\r\n    };\r\n\r\n    constructor(config: IGridsterOptions, gridsterElement: HTMLElement) {\r\n        const responsiveContainer = config.responsiveToParent ? gridsterElement : window;\r\n\r\n        this.basicOptions = config;\r\n        this.responsiveOptions = this.extendResponsiveOptions(config.responsiveOptions || []);\r\n\r\n        this.change = merge(\r\n                of(this.getOptionsByWidth(this.getElementWidth(responsiveContainer))),\r\n                fromEvent(window, 'resize').pipe(\r\n                    debounceTime(config.responsiveDebounce || 0),\r\n                    map((event: Event) => this.getOptionsByWidth(this.getElementWidth(responsiveContainer)))\r\n                )\r\n            ).pipe(distinctUntilChanged(null, (options: any) => options.minWidth));\r\n    }\r\n\r\n    getOptionsByWidth(width: number): IGridsterOptions {\r\n        let i = 0;\r\n        let options: IGridsterOptions = Object.assign({}, this.defaults, this.basicOptions);\r\n\r\n        while (this.responsiveOptions[i]) {\r\n            if (this.responsiveOptions[i].minWidth <= width) {\r\n                options = this.responsiveOptions[i];\r\n            }\r\n            i++;\r\n        }\r\n\r\n        return options;\r\n    }\r\n\r\n    private extendResponsiveOptions(responsiveOptions: Array<IGridsterOptions>): Array<IGridsterOptions> {\r\n        return responsiveOptions\r\n            // responsive options are valid only with \"breakpoint\" property\r\n            .filter(options => options.breakpoint)\r\n            // set default minWidth if not given\r\n            .map((options) => {\r\n                return Object.assign({\r\n                    minWidth: this.breakpointsMap[options.breakpoint] || 0\r\n                }, options);\r\n            })\r\n            .sort((curr, next) => curr.minWidth - next.minWidth)\r\n            .map((options) => <IGridsterOptions>Object.assign({}, this.defaults, this.basicOptions, options));\r\n    }\r\n\r\n    private getElementWidth($element: any) {\r\n        if ($element === window) {\r\n            return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n        }\r\n\r\n        return $element.clientWidth;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject, merge } from 'rxjs';\r\nimport { takeUntil, switchMap, map, scan, filter, share, tap } from 'rxjs/operators';\r\n\r\nimport { GridsterService } from '../gridster.service';\r\nimport { GridsterItemPrototypeDirective } from './gridster-item-prototype.directive';\r\nimport { utils } from '../utils/utils';\r\nimport { DraggableEvent } from '../utils/DraggableEvent';\r\n\r\n@Injectable()\r\nexport class GridsterPrototypeService {\r\n\r\n    private isDragging = false;\r\n\r\n    private dragSubject = new Subject<any>();\r\n\r\n    private dragStartSubject = new Subject<any>();\r\n\r\n    private dragStopSubject = new Subject<any>();\r\n\r\n    constructor() {}\r\n\r\n    observeDropOver (gridster: GridsterService) {\r\n        return this.dragStopSubject.pipe(\r\n            filter((data) => {\r\n                const gridsterEl = gridster.gridsterComponent.$element;\r\n                const isOverNestedGridster = [].slice.call(gridsterEl.querySelectorAll('gridster'))\r\n                    .reduce((isOverGridster, nestedGridsterEl) => {\r\n                        return isOverGridster ||\r\n                            this.isOverGridster(data.item, nestedGridsterEl, data.event, gridster.options);\r\n                    }, false);\r\n\r\n                if (isOverNestedGridster) {\r\n                    return false;\r\n                }\r\n\r\n                return this.isOverGridster(data.item, gridsterEl, data.event, gridster.options);\r\n            }),\r\n            tap((data) => {\r\n                // TODO: what we should provide as a param?\r\n                // prototype.drop.emit({item: prototype.item});\r\n                data.item.onDrop(gridster);\r\n            })\r\n        );\r\n    }\r\n\r\n    observeDropOut (gridster: GridsterService) {\r\n        return this.dragStopSubject.pipe(\r\n            filter((data) => {\r\n                const gridsterEl = gridster.gridsterComponent.$element;\r\n\r\n                return !this.isOverGridster(data.item, gridsterEl, data.event, gridster.options);\r\n            }),\r\n            tap((data) => {\r\n                // TODO: what we should provide as a param?\r\n                data.item.onCancel();\r\n            })\r\n        );\r\n    }\r\n\r\n    observeDragOver(gridster: GridsterService): {\r\n        dragOver: Observable<GridsterItemPrototypeDirective>,\r\n        dragEnter: Observable<GridsterItemPrototypeDirective>,\r\n        dragOut: Observable<GridsterItemPrototypeDirective>\r\n    } {\r\n        const over = this.dragSubject.pipe(\r\n            map((data) => {\r\n                const gridsterEl = gridster.gridsterComponent.$element;\r\n\r\n                return {\r\n                  item: data.item,\r\n                  event: data.event,\r\n                  isOver: this.isOverGridster(data.item, gridsterEl, data.event, gridster.options),\r\n                  isDrop: false\r\n                };\r\n            })\r\n        );\r\n\r\n        const drop = this.dragStopSubject.pipe(\r\n            map((data) => {\r\n                const gridsterEl = gridster.gridsterComponent.$element;\r\n\r\n                return {\r\n                    item: data.item,\r\n                    event: data.event,\r\n                    isOver: this.isOverGridster(data.item, gridsterEl, data.event, gridster.options),\r\n                    isDrop: true\r\n                };\r\n            })\r\n        );\r\n\r\n        const dragExt = merge(\r\n                // dragStartSubject is connected in case when item prototype is placed above gridster\r\n                // and drag enter is not fired\r\n                this.dragStartSubject.pipe(map(() => ({ item: null, isOver: false, isDrop: false }))),\r\n                over,\r\n                drop\r\n            ).pipe(\r\n                scan((prev: any, next: any) => {\r\n                    return {\r\n                        item: next.item,\r\n                        event: next.event,\r\n                        isOver: next.isOver,\r\n                        isEnter: prev.isOver === false && next.isOver === true,\r\n                        isOut: prev.isOver === true && next.isOver === false && !prev.isDrop,\r\n                        isDrop: next.isDrop\r\n                    };\r\n                }),\r\n                filter((data: any) => {\r\n                    return !data.isDrop;\r\n                }),\r\n                share()\r\n            );\r\n\r\n        const dragEnter = this.createDragEnterObservable(dragExt, gridster);\r\n        const dragOut = this.createDragOutObservable(dragExt, gridster);\r\n        const dragOver = dragEnter\r\n            .pipe(\r\n                switchMap(() => this.dragSubject.pipe(takeUntil(dragOut))),\r\n                map((data: any) => data.item)\r\n            );\r\n\r\n        return { dragEnter, dragOut, dragOver };\r\n    }\r\n\r\n    dragItemStart(item: GridsterItemPrototypeDirective, event: DraggableEvent) {\r\n        this.isDragging = true;\r\n        this.dragStartSubject.next({ item, event });\r\n    }\r\n\r\n    dragItemStop(item: GridsterItemPrototypeDirective, event: DraggableEvent) {\r\n        this.isDragging = false;\r\n        this.dragStopSubject.next({ item, event });\r\n    }\r\n\r\n    updatePrototypePosition(item: GridsterItemPrototypeDirective, event: DraggableEvent) {\r\n        this.dragSubject.next({ item, event });\r\n    }\r\n\r\n    /**\r\n     * Creates observable that is fired on dragging over gridster container.\r\n     */\r\n    private createDragOverObservable (\r\n        dragIsOver: Observable<{item: GridsterItemPrototypeDirective, isOver: boolean}>,\r\n        gridster: GridsterService\r\n    ) {\r\n        return dragIsOver.pipe(\r\n            filter((data: any) => data.isOver && !data.isEnter && !data.isOut),\r\n            map((data: any): GridsterItemPrototypeDirective => data.item),\r\n            tap((item) => item.onOver(gridster))\r\n        );\r\n    }\r\n    /**\r\n     * Creates observable that is fired on drag enter gridster container.\r\n     */\r\n    private createDragEnterObservable (\r\n        dragIsOver: Observable<{item: GridsterItemPrototypeDirective, isOver: boolean}>,\r\n        gridster: GridsterService\r\n    ) {\r\n        return dragIsOver.pipe(\r\n            filter((data: any) => data.isEnter),\r\n            map((data: any): GridsterItemPrototypeDirective => data.item),\r\n            tap((item) => item.onEnter(gridster))\r\n        );\r\n    }\r\n    /**\r\n     * Creates observable that is fired on drag out gridster container.\r\n     */\r\n    private createDragOutObservable (\r\n        dragIsOver: Observable<{item: GridsterItemPrototypeDirective,\r\n        isOver: boolean}>,\r\n        gridster: GridsterService\r\n    ) {\r\n        return dragIsOver.pipe(\r\n            filter((data: any) => data.isOut),\r\n            map((data: any): GridsterItemPrototypeDirective => data.item),\r\n            tap((item) => item.onOut(gridster))\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Checks whether \"element\" position fits inside \"containerEl\" position.\r\n     * It checks if \"element\" is totally covered by \"containerEl\" area.\r\n     */\r\n    private isOverGridster(item: GridsterItemPrototypeDirective, gridsterEl: HTMLElement, event, options): boolean {\r\n        const el = item.$element;\r\n        const parentItem = <HTMLElement>gridsterEl.parentElement &&\r\n            <HTMLElement>gridsterEl.parentElement.closest('gridster-item');\r\n\r\n        if (parentItem) {\r\n            return this.isOverGridster(item, parentItem, event, options);\r\n        }\r\n\r\n        switch (options.tolerance) {\r\n            case 'fit':\r\n                return utils.isElementFitContainer(el, gridsterEl);\r\n            case 'intersect':\r\n                return utils.isElementIntersectContainer(el, gridsterEl);\r\n            case 'touch':\r\n                return utils.isElementTouchContainer(el, gridsterEl);\r\n            default:\r\n                return utils.isCursorAboveElement(event, gridsterEl);\r\n        }\r\n    }\r\n}\r\n","import {\r\n    Component,\r\n    OnInit,\r\n    AfterContentInit,\r\n    OnDestroy,\r\n    ElementRef,\r\n    ViewChild,\r\n    NgZone,\r\n    Input,\r\n    Output,\r\n    EventEmitter,\r\n    ChangeDetectionStrategy,\r\n    HostBinding,\r\n    ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n    Observable,\r\n    Subscription,\r\n    fromEvent,\r\n    ConnectableObservable\r\n} from 'rxjs';\r\nimport { debounceTime, filter, publish } from 'rxjs/operators';\r\n\r\nimport { utils } from './utils/utils';\r\nimport { GridsterService } from './gridster.service';\r\nimport { IGridsterOptions } from './IGridsterOptions';\r\nimport { IGridsterDraggableOptions } from './IGridsterDraggableOptions';\r\nimport { GridsterPrototypeService } from './gridster-prototype/gridster-prototype.service';\r\nimport { GridsterItemPrototypeDirective } from './gridster-prototype/gridster-item-prototype.directive';\r\nimport { GridListItem } from './gridList/GridListItem';\r\nimport { GridsterOptions } from './GridsterOptions';\r\n\r\n@Component({\r\n    selector: 'ngx-gridster',\r\n    template: `<div class=\"gridster-container\">\r\n      <ng-content></ng-content>\r\n      <div class=\"position-highlight\" style=\"display:none;\" #positionHighlight>\r\n        <div class=\"inner\"></div>\r\n      </div>\r\n    </div>`,\r\n    styles: [\r\n        `\r\n            ngx-gridster {\r\n                position: relative;\r\n                display: block;\r\n                left: 0;\r\n                width: 100%;\r\n            }\r\n\r\n            ngx-gridster.gridster--dragging {\r\n                -moz-user-select: none;\r\n                -khtml-user-select: none;\r\n                -webkit-user-select: none;\r\n                -ms-user-select: none;\r\n                user-select: none;\r\n            }\r\n\r\n            ngx-gridster .gridster-container {\r\n                position: relative;\r\n                width: 100%;\r\n                list-style: none;\r\n                -webkit-transition: width 0.2s, height 0.2s;\r\n                transition: width 0.2s, height 0.2s;\r\n            }\r\n\r\n            ngx-gridster .position-highlight {\r\n                display: block;\r\n                position: absolute;\r\n                z-index: 1;\r\n            }\r\n        `\r\n    ],\r\n    providers: [GridsterService],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GridsterComponent implements OnInit, AfterContentInit, OnDestroy {\r\n    @Input() options: IGridsterOptions;\r\n    @Output() optionsChange = new EventEmitter<any>();\r\n    @Output() ready = new EventEmitter<any>();\r\n    @Output() reflow = new EventEmitter<any>();\r\n    @Output() prototypeDrop = new EventEmitter<{ item: GridListItem }>();\r\n    @Output() prototypeEnter = new EventEmitter<{ item: GridListItem }>();\r\n    @Output() prototypeOut = new EventEmitter<{ item: GridListItem }>();\r\n    @Input() draggableOptions: IGridsterDraggableOptions = {};\r\n    @Input() parent: GridsterComponent;\r\n\r\n    @ViewChild('positionHighlight', { static: true }) $positionHighlight;\r\n    @HostBinding('class.gridster--dragging') isDragging = false;\r\n    @HostBinding('class.gridster--resizing') isResizing = false;\r\n\r\n    @HostBinding('class.gridster--ready') isReady = false;\r\n    gridster: GridsterService;\r\n    $element: HTMLElement;\r\n\r\n    gridsterOptions: GridsterOptions;\r\n    isPrototypeEntered = false;\r\n    private isDisabled = false;\r\n    private subscription = new Subscription();\r\n\r\n    constructor(\r\n        private zone: NgZone,\r\n        elementRef: ElementRef,\r\n        gridster: GridsterService,\r\n        private gridsterPrototype: GridsterPrototypeService\r\n    ) {\r\n        this.gridster = gridster;\r\n        this.$element = elementRef.nativeElement;\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.gridsterOptions = new GridsterOptions(this.options, this.$element);\r\n\r\n        if (this.options.useCSSTransforms) {\r\n            this.$element.classList.add('css-transform');\r\n        }\r\n\r\n        this.subscription.add(\r\n            this.gridsterOptions.change.subscribe(options => {\r\n                this.gridster.options = options;\r\n                if (this.gridster.gridList) {\r\n                    this.gridster.gridList.options = options;\r\n                }\r\n                setTimeout(() => this.optionsChange.emit(options));\r\n            })\r\n        );\r\n\r\n        this.gridster.init(this);\r\n\r\n        this.subscription.add(\r\n            fromEvent(window, 'resize')\r\n                .pipe(\r\n                    debounceTime(this.gridster.options.responsiveDebounce || 0),\r\n                    filter(() => this.gridster.options.responsiveView)\r\n                )\r\n                .subscribe(() => this.reload())\r\n        );\r\n\r\n        this.zone.runOutsideAngular(() => {\r\n            this.subscription.add(\r\n                fromEvent(document, 'scroll', { passive: true }).subscribe(() =>\r\n                    this.updateGridsterElementData()\r\n                )\r\n            );\r\n            const scrollableContainer = utils.getScrollableContainer(this.$element);\r\n            if (scrollableContainer) {\r\n                this.subscription.add(\r\n                    fromEvent(scrollableContainer, 'scroll', { passive: true })\r\n                    .subscribe(() =>\r\n                        this.updateGridsterElementData()\r\n                    )\r\n                );\r\n            }\r\n        });\r\n    }\r\n\r\n    ngAfterContentInit() {\r\n        this.gridster.start();\r\n\r\n        this.updateGridsterElementData();\r\n\r\n        this.connectGridsterPrototype();\r\n\r\n        this.gridster.$positionHighlight = this.$positionHighlight.nativeElement;\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.subscription.unsubscribe();\r\n    }\r\n\r\n    /**\r\n     * Change gridster config option and rebuild\r\n     * @param string name\r\n     * @param any value\r\n     * @return GridsterComponent\r\n     */\r\n    setOption(name: string, value: any) {\r\n        if (name === 'dragAndDrop') {\r\n            if (value) {\r\n                this.enableDraggable();\r\n            } else {\r\n                this.disableDraggable();\r\n            }\r\n        }\r\n        if (name === 'resizable') {\r\n            if (value) {\r\n                this.enableResizable();\r\n            } else {\r\n                this.disableResizable();\r\n            }\r\n        }\r\n        if (name === 'lanes') {\r\n            this.gridster.options.lanes = value;\r\n\r\n            this.gridster.gridList.fixItemsPositions(this.gridster.options);\r\n            this.reflowGridster();\r\n        }\r\n        if (name === 'direction') {\r\n            this.gridster.options.direction = value;\r\n            this.gridster.gridList.pullItemsToLeft();\r\n        }\r\n        if (name === 'widthHeightRatio') {\r\n            this.gridster.options.widthHeightRatio = parseFloat(value || 1);\r\n        }\r\n        if (name === 'responsiveView') {\r\n            this.gridster.options.responsiveView = !!value;\r\n        }\r\n        this.gridster.gridList.setOption(name, value);\r\n\r\n        return this;\r\n    }\r\n\r\n    reload() {\r\n        setTimeout(() => {\r\n            this.gridster.fixItemsPositions();\r\n            this.reflowGridster();\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    reflowGridster(isInit = false) {\r\n        this.gridster.reflow();\r\n        this.reflow.emit({\r\n            isInit: isInit,\r\n            gridsterComponent: this\r\n        });\r\n    }\r\n\r\n    updateGridsterElementData() {\r\n        this.gridster.gridsterScrollData = this.getScrollPositionFromParents(\r\n            this.$element\r\n        );\r\n        this.gridster.gridsterRect = this.$element.getBoundingClientRect();\r\n    }\r\n\r\n    setReady() {\r\n        setTimeout(() => (this.isReady = true));\r\n        this.ready.emit();\r\n    }\r\n\r\n    adjustItemsHeightToContent(\r\n        scrollableItemElementSelector: string = '.gridster-item-inner'\r\n    ) {\r\n        this.gridster.items\r\n            // convert each item to object with information about content height and scroll height\r\n            .map((item: GridListItem) => {\r\n                const scrollEl = item.$element.querySelector(\r\n                    scrollableItemElementSelector\r\n                );\r\n                const contentEl = scrollEl.lastElementChild;\r\n                const scrollElDistance = utils.getRelativeCoordinates(\r\n                    scrollEl,\r\n                    item.$element\r\n                );\r\n                const scrollElRect = scrollEl.getBoundingClientRect();\r\n                const contentRect = contentEl.getBoundingClientRect();\r\n\r\n                return {\r\n                    item,\r\n                    contentHeight: contentRect.bottom - scrollElRect.top,\r\n                    scrollElDistance\r\n                };\r\n            })\r\n            // calculate required height in lanes amount and update item \"h\"\r\n            .forEach(data => {\r\n                data.item.h = Math.ceil(<any>(\r\n                    (data.contentHeight /\r\n                        (this.gridster.cellHeight - data.scrollElDistance.top))\r\n                ));\r\n            });\r\n\r\n        this.gridster.fixItemsPositions();\r\n        this.gridster.reflow();\r\n    }\r\n\r\n    disable(item) {\r\n        const itemIdx = this.gridster.items.indexOf(item.itemComponent);\r\n\r\n        this.isDisabled = true;\r\n        if (itemIdx >= 0) {\r\n            delete this.gridster.items[\r\n                this.gridster.items.indexOf(item.itemComponent)\r\n            ];\r\n        }\r\n        this.gridster.onDragOut(item);\r\n    }\r\n\r\n    enable() {\r\n        this.isDisabled = false;\r\n    }\r\n\r\n    private getScrollPositionFromParents(\r\n        element: Element,\r\n        data = { scrollTop: 0, scrollLeft: 0 }\r\n    ): { scrollTop: number; scrollLeft: number } {\r\n        if (element.parentElement && element.parentElement !== document.body) {\r\n            data.scrollTop += element.parentElement.scrollTop;\r\n            data.scrollLeft += element.parentElement.scrollLeft;\r\n\r\n            return this.getScrollPositionFromParents(\r\n                element.parentElement,\r\n                data\r\n            );\r\n        }\r\n\r\n        return {\r\n            scrollTop: data.scrollTop,\r\n            scrollLeft: data.scrollLeft\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Connect gridster prototype item to gridster dragging hooks (onStart, onDrag, onStop).\r\n     */\r\n    private connectGridsterPrototype() {\r\n        this.gridsterPrototype.observeDropOut(this.gridster).subscribe();\r\n\r\n        const dropOverObservable = <ConnectableObservable<any>>(\r\n            this.gridsterPrototype\r\n                .observeDropOver(this.gridster)\r\n                .pipe(publish())\r\n        );\r\n\r\n        const dragObservable = this.gridsterPrototype.observeDragOver(\r\n            this.gridster\r\n        );\r\n\r\n        dragObservable.dragOver\r\n            .pipe(filter(() => !this.isDisabled))\r\n            .subscribe((prototype: GridsterItemPrototypeDirective) => {\r\n                if (!this.isPrototypeEntered) {\r\n                    return;\r\n                }\r\n                this.gridster.onDrag(prototype.item);\r\n            });\r\n\r\n        dragObservable.dragEnter\r\n            .pipe(filter(() => !this.isDisabled))\r\n            .subscribe((prototype: GridsterItemPrototypeDirective) => {\r\n                this.isPrototypeEntered = true;\r\n\r\n                if (this.gridster.items.indexOf(prototype.item) < 0) {\r\n                    this.gridster.items.push(prototype.item);\r\n                }\r\n                this.gridster.onStart(prototype.item);\r\n                prototype.setDragContextGridster(this.gridster);\r\n\r\n                if (this.parent) {\r\n                    this.parent.disable(prototype.item);\r\n                }\r\n                this.prototypeEnter.emit({ item: prototype.item });\r\n            });\r\n\r\n        dragObservable.dragOut\r\n            .pipe(filter(() => !this.isDisabled))\r\n            .subscribe((prototype: GridsterItemPrototypeDirective) => {\r\n                if (!this.isPrototypeEntered) {\r\n                    return;\r\n                }\r\n                this.gridster.onDragOut(prototype.item);\r\n                this.isPrototypeEntered = false;\r\n\r\n                this.prototypeOut.emit({ item: prototype.item });\r\n\r\n                if (this.parent) {\r\n                    this.parent.enable();\r\n\r\n                    this.parent.isPrototypeEntered = true;\r\n                    if (\r\n                        this.parent.gridster.items.indexOf(prototype.item) < 0\r\n                    ) {\r\n                        this.parent.gridster.items.push(prototype.item);\r\n                    }\r\n                    this.parent.gridster.onStart(prototype.item);\r\n                    prototype.setDragContextGridster(this.parent.gridster);\r\n                    // timeout is needed to be sure that \"enter\" event is fired after \"out\"\r\n                    setTimeout(() => {\r\n                        this.parent.prototypeEnter.emit({\r\n                            item: prototype.item\r\n                        });\r\n                        prototype.onEnter(this.parent.gridster);\r\n                    });\r\n                }\r\n            });\r\n\r\n        dropOverObservable\r\n            .pipe(filter(() => !this.isDisabled))\r\n            .subscribe(data => {\r\n                if (!this.isPrototypeEntered) {\r\n                    return;\r\n                }\r\n\r\n                this.gridster.onStop(data.item.item);\r\n                this.gridster.removeItem(data.item.item);\r\n\r\n                this.isPrototypeEntered = false;\r\n                if (this.parent) {\r\n                    this.parent.enable();\r\n                }\r\n                this.prototypeDrop.emit({ item: data.item.item });\r\n            });\r\n\r\n        dropOverObservable.connect();\r\n    }\r\n\r\n    private enableDraggable() {\r\n        this.gridster.options.dragAndDrop = true;\r\n\r\n        this.gridster.items\r\n            .filter(\r\n                item => item.itemComponent && item.itemComponent.dragAndDrop\r\n            )\r\n            .forEach((item: GridListItem) =>\r\n                item.itemComponent.enableDragDrop()\r\n            );\r\n    }\r\n\r\n    private disableDraggable() {\r\n        this.gridster.options.dragAndDrop = false;\r\n\r\n        this.gridster.items\r\n            .filter(item => item.itemComponent)\r\n            .forEach((item: GridListItem) =>\r\n                item.itemComponent.disableDraggable()\r\n            );\r\n    }\r\n\r\n    private enableResizable() {\r\n        this.gridster.options.resizable = true;\r\n\r\n        this.gridster.items\r\n            .filter(item => item.itemComponent && item.itemComponent.resizable)\r\n            .forEach((item: GridListItem) =>\r\n                item.itemComponent.enableResizable()\r\n            );\r\n    }\r\n\r\n    private disableResizable() {\r\n        this.gridster.options.resizable = false;\r\n\r\n        this.gridster.items.forEach((item: GridListItem) =>\r\n            item.itemComponent.disableResizable()\r\n        );\r\n    }\r\n}\r\n","import { GridsterItemComponent } from '../gridster-item/gridster-item.component';\r\nimport { GridsterItemPrototypeDirective } from '../gridster-prototype/gridster-item-prototype.directive';\r\nimport { GridsterService } from '../gridster.service';\r\n\r\nexport class GridListItem {\r\n    static BREAKPOINTS: Array<string> = ['sm', 'md', 'lg', 'xl'];\r\n    static X_PROPERTY_MAP: any = {\r\n        sm: 'xSm',\r\n        md: 'xMd',\r\n        lg: 'xLg',\r\n        xl: 'xXl'\r\n    };\r\n\r\n    static Y_PROPERTY_MAP: any = {\r\n        sm: 'ySm',\r\n        md: 'yMd',\r\n        lg: 'yLg',\r\n        xl: 'yXl'\r\n    };\r\n\r\n    static W_PROPERTY_MAP: any = {\r\n        sm: 'wSm',\r\n        md: 'wMd',\r\n        lg: 'wLg',\r\n        xl: 'wXl'\r\n    };\r\n\r\n    static H_PROPERTY_MAP: any = {\r\n        sm: 'hSm',\r\n        md: 'hMd',\r\n        lg: 'hLg',\r\n        xl: 'hXl'\r\n    };\r\n\r\n    itemComponent: GridsterItemComponent;\r\n    itemPrototype: GridsterItemPrototypeDirective;\r\n    itemObject: any;\r\n\r\n    get $element () {\r\n        return this.getItem().$element;\r\n    }\r\n\r\n    get x () {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        return this.getValueX(breakpoint);\r\n    }\r\n    set x (value: number) {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        this.setValueX(value, breakpoint);\r\n    }\r\n\r\n    get y () {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        return this.getValueY(breakpoint);\r\n    }\r\n    set y (value: number) {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        this.setValueY(value, breakpoint);\r\n    }\r\n\r\n    get w () {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        return this.getValueW(breakpoint);\r\n    }\r\n    set w (value: number) {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        this.setValueW(value, breakpoint);\r\n    }\r\n\r\n    get h () {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        return this.getValueH(breakpoint);\r\n    }\r\n    set h (value: number) {\r\n        const item = this.getItem();\r\n        const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;\r\n\r\n        this.setValueH(value, breakpoint);\r\n    }\r\n\r\n    get autoSize () {\r\n        return this.getItem().autoSize;\r\n    }\r\n    set autoSize (value: boolean) {\r\n        this.getItem().autoSize = value;\r\n    }\r\n\r\n    get dragAndDrop() {\r\n        return !!this.getItem().dragAndDrop;\r\n    }\r\n\r\n    get resizable() {\r\n        return !!this.getItem().resizable;\r\n    }\r\n\r\n    get positionX() {\r\n        const item = this.itemComponent || this.itemPrototype;\r\n\r\n        if (!item) {\r\n            return null;\r\n        }\r\n\r\n        return item.positionX;\r\n    }\r\n\r\n    get positionY() {\r\n        const item = this.itemComponent || this.itemPrototype;\r\n\r\n        if (!item) {\r\n            return null;\r\n        }\r\n\r\n        return item.positionY;\r\n    }\r\n\r\n    public setFromGridsterItem (item: GridsterItemComponent): GridListItem {\r\n        if (this.isItemSet()) {\r\n            throw new Error('GridListItem is already set.');\r\n        }\r\n        this.itemComponent = item;\r\n        return this;\r\n    }\r\n\r\n    public setFromGridsterItemPrototype (item: GridsterItemPrototypeDirective): GridListItem {\r\n        if (this.isItemSet()) {\r\n            throw new Error('GridListItem is already set.');\r\n        }\r\n        this.itemPrototype = item;\r\n        return this;\r\n    }\r\n\r\n    public setFromObjectLiteral (item: Object): GridListItem {\r\n        if (this.isItemSet()) {\r\n            throw new Error('GridListItem is already set.');\r\n        }\r\n        this.itemObject = item;\r\n        return this;\r\n    }\r\n\r\n    public copy() {\r\n        const itemCopy = new GridListItem();\r\n\r\n        return itemCopy.setFromObjectLiteral({\r\n            $element: this.$element,\r\n            x: this.x,\r\n            y: this.y,\r\n            w: this.w,\r\n            h: this.h,\r\n            autoSize: this.autoSize,\r\n            dragAndDrop: this.dragAndDrop,\r\n            resizable: this.resizable\r\n        });\r\n    }\r\n\r\n    public copyForBreakpoint(breakpoint?) {\r\n        const itemCopy = new GridListItem();\r\n\r\n        return itemCopy.setFromObjectLiteral({\r\n            $element: this.$element,\r\n            x: this.getValueX(breakpoint),\r\n            y: this.getValueY(breakpoint),\r\n            w: this.getValueW(breakpoint),\r\n            h: this.getValueH(breakpoint),\r\n            autoSize: this.autoSize,\r\n            dragAndDrop: this.dragAndDrop,\r\n            resizable: this.resizable\r\n        });\r\n    }\r\n\r\n    public getValueX(breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        return item[this.getXProperty(breakpoint)];\r\n    }\r\n\r\n    public getValueY(breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        return item[this.getYProperty(breakpoint)];\r\n    }\r\n\r\n    public getValueW(breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        return item[this.getWProperty(breakpoint)] || 1;\r\n    }\r\n\r\n    public getValueH(breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        return item[this.getHProperty(breakpoint)] || 1;\r\n    }\r\n\r\n    public setValueX(value: number, breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        item[this.getXProperty(breakpoint)] = value;\r\n    }\r\n\r\n    public setValueY(value: number, breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        item[this.getYProperty(breakpoint)] = value;\r\n    }\r\n\r\n    public setValueW(value: number, breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        item[this.getWProperty(breakpoint)] = value;\r\n    }\r\n\r\n    public setValueH(value: number, breakpoint?) {\r\n        const item = this.getItem();\r\n\r\n        item[this.getHProperty(breakpoint)] = value;\r\n    }\r\n\r\n    public triggerChangeX(breakpoint?) {\r\n        const item = this.itemComponent;\r\n        if (item) {\r\n            item[this.getXProperty(breakpoint) + 'Change'].emit(this.getValueX(breakpoint));\r\n        }\r\n    }\r\n\r\n    public triggerChangeY(breakpoint?) {\r\n        const item = this.itemComponent;\r\n        if (item) {\r\n            item[this.getYProperty(breakpoint) + 'Change'].emit(this.getValueY(breakpoint));\r\n        }\r\n    }\r\n\r\n    public triggerChangeW(breakpoint?) {\r\n        const item = this.itemComponent;\r\n        if (item) {\r\n            item[this.getWProperty(breakpoint) + 'Change'].emit(this.getValueW(breakpoint));\r\n        }\r\n    }\r\n\r\n    public triggerChangeH(breakpoint?) {\r\n        const item = this.itemComponent;\r\n        if (item) {\r\n            item[this.getHProperty(breakpoint) + 'Change'].emit(this.getValueH(breakpoint));\r\n        }\r\n    }\r\n\r\n    public hasPositions(breakpoint?) {\r\n        const x = this.getValueX(breakpoint);\r\n        const y = this.getValueY(breakpoint);\r\n\r\n        return (x || x === 0) && (y || y === 0);\r\n    }\r\n\r\n    public applyPosition(gridster?: GridsterService) {\r\n        const position = this.calculatePosition(gridster);\r\n\r\n        this.itemComponent.positionX = position.left;\r\n        this.itemComponent.positionY = position.top;\r\n        this.itemComponent.updateElemenetPosition();\r\n    }\r\n\r\n    public calculatePosition(gridster?: GridsterService): {left: number, top: number} {\r\n        if (!gridster && !this.itemComponent) {\r\n            return {left: 0, top: 0};\r\n        }\r\n        gridster = gridster || this.itemComponent.gridster;\r\n\r\n        return {\r\n            left: this.x * gridster.cellWidth,\r\n            top: this.y * gridster.cellHeight\r\n        };\r\n    }\r\n\r\n    public applySize(gridster?: GridsterService): void {\r\n        const size = this.calculateSize(gridster);\r\n\r\n        this.$element.style.width = size.width + 'px';\r\n        this.$element.style.height = size.height + 'px';\r\n    }\r\n\r\n    public calculateSize(gridster?: GridsterService): {width: number, height: number} {\r\n        if (!gridster && !this.itemComponent) {\r\n            return {width: 0, height: 0};\r\n        }\r\n        gridster = gridster || this.itemComponent.gridster;\r\n\r\n        let width = this.getValueW(gridster.options.breakpoint);\r\n        let height = this.getValueH(gridster.options.breakpoint);\r\n\r\n        if (gridster.options.direction === 'vertical') {\r\n            width = Math.min(width, gridster.options.lanes);\r\n        }\r\n        if (gridster.options.direction === 'horizontal') {\r\n            height = Math.min(height, gridster.options.lanes);\r\n        }\r\n\r\n        return {\r\n            width: width * gridster.cellWidth,\r\n            height: height * gridster.cellHeight\r\n        };\r\n    }\r\n\r\n    private getXProperty(breakpoint?: string) {\r\n\r\n        if (breakpoint && this.itemComponent) {\r\n            return GridListItem.X_PROPERTY_MAP[breakpoint];\r\n        } else {\r\n            return 'x';\r\n        }\r\n    }\r\n\r\n    private getYProperty(breakpoint?: string) {\r\n\r\n        if (breakpoint && this.itemComponent) {\r\n            return GridListItem.Y_PROPERTY_MAP[breakpoint];\r\n        } else {\r\n            return 'y';\r\n        }\r\n    }\r\n\r\n    private getWProperty(breakpoint?: string) {\r\n        if (this.itemPrototype) {\r\n            return this.itemPrototype[GridListItem.W_PROPERTY_MAP[breakpoint]] ?\r\n                GridListItem.W_PROPERTY_MAP[breakpoint] : 'w';\r\n        }\r\n\r\n        const item = this.getItem();\r\n        const responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;\r\n\r\n        if (breakpoint && responsiveSizes) {\r\n            return GridListItem.W_PROPERTY_MAP[breakpoint];\r\n        } else {\r\n            return 'w';\r\n        }\r\n    }\r\n\r\n    private getHProperty(breakpoint?: string) {\r\n        if (this.itemPrototype) {\r\n            return this.itemPrototype[GridListItem.H_PROPERTY_MAP[breakpoint]] ?\r\n                GridListItem.H_PROPERTY_MAP[breakpoint] : 'h';\r\n        }\r\n\r\n        const item = this.getItem();\r\n        const responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;\r\n\r\n        if (breakpoint && responsiveSizes) {\r\n            return GridListItem.H_PROPERTY_MAP[breakpoint];\r\n        } else {\r\n            return 'h';\r\n        }\r\n    }\r\n\r\n    private getItem(): any {\r\n        const item = this.itemComponent || this.itemPrototype || this.itemObject;\r\n\r\n        if (!item) {\r\n            throw new Error('GridListItem is not set.');\r\n        }\r\n        return item;\r\n    }\r\n\r\n    private isItemSet() {\r\n        return this.itemComponent || this.itemPrototype || this.itemObject;\r\n    }\r\n}\r\n","export class DraggableEvent {\r\n    clientX: number;\r\n\r\n    clientY: number;\r\n\r\n    pageX: number;\r\n\r\n    pageY: number;\r\n\r\n    target: any;\r\n\r\n    type: string;\r\n\r\n\r\n    private touchEvent: TouchEvent;\r\n\r\n    private mouseEvent: MouseEvent;\r\n\r\n    constructor(event: any) {\r\n        if (event.touches) {\r\n            this.touchEvent = (<TouchEvent>event);\r\n            this.setDataFromTouchEvent(this.touchEvent);\r\n        } else {\r\n            this.mouseEvent = (<MouseEvent>event);\r\n            this.setDataFromMouseEvent(this.mouseEvent);\r\n        }\r\n    }\r\n\r\n    isTouchEvent(): boolean {\r\n        return !!this.touchEvent;\r\n    }\r\n\r\n    pauseEvent() {\r\n        const event: Event = this.touchEvent || this.mouseEvent;\r\n\r\n        if (event.stopPropagation) {\r\n            event.stopPropagation();\r\n        }\r\n        if (event.preventDefault) {\r\n            event.preventDefault();\r\n        }\r\n        event.cancelBubble = true;\r\n        event.returnValue = false;\r\n        return false;\r\n    }\r\n\r\n    getRelativeCoordinates(container: HTMLElement): {x: number, y: number} {\r\n        const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\r\n        const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;\r\n\r\n        const rect = container.getBoundingClientRect();\r\n\r\n        return {\r\n            x: this.pageX - rect.left - scrollLeft,\r\n            y: this.pageY - rect.top - scrollTop,\r\n        };\r\n    }\r\n\r\n    private setDataFromMouseEvent(event: MouseEvent): void {\r\n        this.target = event.target;\r\n        this.clientX = event.clientX;\r\n        this.clientY = event.clientY;\r\n        this.pageX = event.pageX;\r\n        this.pageY = event.pageY;\r\n        this.type = event.type;\r\n    }\r\n\r\n    private setDataFromTouchEvent(event: TouchEvent): void {\r\n        const touch = event.touches[0] || event.changedTouches[0];\r\n\r\n        this.target = event.target;\r\n        this.clientX = touch.clientX;\r\n        this.clientY = touch.clientY;\r\n        this.pageX = touch.pageX;\r\n        this.pageY = touch.pageY;\r\n        this.type = event.type;\r\n\r\n    }\r\n}\r\n","import { Observable, fromEvent, merge, pipe } from 'rxjs';\r\nimport { share, map, filter, tap, switchMap, takeUntil, take, skip } from 'rxjs/operators';\r\n\r\nimport { DraggableEvent } from './DraggableEvent';\r\nimport { utils } from './utils';\r\n\r\nexport class Draggable {\r\n    static SCROLL_SPEED = 20;\r\n    element: Element;\r\n\r\n    dragStart: Observable<DraggableEvent>;\r\n    dragMove: Observable<DraggableEvent>;\r\n    dragStop: Observable<DraggableEvent>;\r\n    // A simple requestAnimationFrame polyfill\r\n    private requestAnimationFrame: Function;\r\n    private cancelAnimationFrame: Function;\r\n    private mousemove: Observable<{} | Event> = merge(\r\n        fromEvent(document, 'mousemove'),\r\n        fromEvent(document, 'touchmove', { passive: false })\r\n    ).pipe(share());\r\n    private mouseup: Observable<{} | Event> = merge(\r\n        fromEvent(document, 'mouseup'),\r\n        fromEvent(document, 'touchend'),\r\n        fromEvent(document, 'touchcancel')\r\n    ).pipe(share());\r\n    private mousedown: Observable<{} | Event>;\r\n    private config = {\r\n        handlerClass: null,\r\n        scroll: true,\r\n        scrollEdge: 36,\r\n        scrollDirection: null\r\n    };\r\n    // reference to auto scrolling listeners\r\n    private autoScrollingInterval = [];\r\n\r\n    constructor(element: Element, config = {}) {\r\n        this.element = element;\r\n        this.mousedown = merge(\r\n            fromEvent(element, 'mousedown'),\r\n            fromEvent(element, 'touchstart')\r\n        ).pipe(share());\r\n\r\n        this.config = { ...this.config, ...config };\r\n\r\n        this.dragStart = this.createDragStartObservable().pipe(share());\r\n        this.dragMove = this.createDragMoveObservable(this.dragStart);\r\n        this.dragStop = this.createDragStopObservable(this.dragStart);\r\n\r\n        this.fixProblemWithDnDForIE(element);\r\n\r\n        this.requestAnimationFrame =\r\n            window.requestAnimationFrame || (callback => setTimeout(callback, 1000 / 60));\r\n        this.cancelAnimationFrame = window.cancelAnimationFrame || (cafID => clearTimeout(cafID));\r\n    }\r\n\r\n    private createDragStartObservable(): Observable<DraggableEvent> {\r\n        return this.mousedown.pipe(\r\n            map(md => new DraggableEvent(md)),\r\n            filter((event: DraggableEvent) => this.isDragingByHandler(event)),\r\n            tap(e => {\r\n                if (!e.isTouchEvent()) {\r\n                    e.pauseEvent();\r\n                }\r\n                if (document.activeElement) {\r\n                    (<any>document.activeElement).blur();\r\n                }\r\n                // prevents rendering performance issues while dragging item with selection inside\r\n                utils.clearSelection();\r\n            }),\r\n            switchMap((startEvent: DraggableEvent) => {\r\n                return this.mousemove.pipe(\r\n                    map(mm => new DraggableEvent(mm)),\r\n                    filter((moveEvent: DraggableEvent) => this.inRange(startEvent, moveEvent, 5)),\r\n                    map(() => startEvent),\r\n                    takeUntil(this.mouseup),\r\n                    take(1)\r\n                );\r\n            })\r\n        );\r\n    }\r\n\r\n    private createDragMoveObservable(\r\n        dragStart: Observable<DraggableEvent>\r\n    ): Observable<DraggableEvent> {\r\n        return dragStart.pipe(\r\n            tap(event => {\r\n                this.addTouchActionNone(event.target);\r\n            }),\r\n            switchMap(startEvent => {\r\n                return this.mousemove.pipe(\r\n                    skip(1),\r\n                    map(mm => new DraggableEvent(mm)),\r\n                    tap(event => {\r\n                        event.pauseEvent();\r\n                        startEvent.pauseEvent();\r\n                    }),\r\n                    takeUntil(this.mouseup)\r\n                );\r\n            }),\r\n            filter(val => !!val),\r\n            tap((event: DraggableEvent) => {\r\n                if (this.config.scroll) {\r\n                    this.startScroll(this.element, event);\r\n                }\r\n            })\r\n        );\r\n    }\r\n\r\n    private createDragStopObservable(dragStart: Observable<DraggableEvent>): Observable<any> {\r\n        return dragStart.pipe(\r\n            switchMap(() => {\r\n                return this.mouseup.pipe(take(1));\r\n            }),\r\n            map(e => new DraggableEvent(e)),\r\n            tap(e => {\r\n                if (e.target) {\r\n                    this.removeTouchActionNone(e.target);\r\n                }\r\n                this.autoScrollingInterval.forEach(raf => this.cancelAnimationFrame(raf));\r\n            })\r\n        );\r\n    }\r\n\r\n    private startScroll(item: Element, event: DraggableEvent) {\r\n        const scrollContainer = this.getScrollContainer(item);\r\n        this.autoScrollingInterval.forEach(raf => this.cancelAnimationFrame(raf));\r\n\r\n        if (scrollContainer) {\r\n            this.startScrollForContainer(event, scrollContainer);\r\n        } else {\r\n            this.startScrollForWindow(event);\r\n        }\r\n    }\r\n\r\n    private startScrollForContainer(event: DraggableEvent, scrollContainer: HTMLElement): void {\r\n        if (!this.config.scrollDirection || this.config.scrollDirection === 'vertical') {\r\n            this.startScrollVerticallyForContainer(event, scrollContainer);\r\n        }\r\n\r\n        if (!this.config.scrollDirection || this.config.scrollDirection === 'horizontal') {\r\n            this.startScrollHorizontallyForContainer(event, scrollContainer);\r\n        }\r\n    }\r\n\r\n    private startScrollVerticallyForContainer(\r\n        event: DraggableEvent,\r\n        scrollContainer: HTMLElement\r\n    ): void {\r\n        if (event.pageY - this.getOffset(scrollContainer).top < this.config.scrollEdge) {\r\n            this.startAutoScrolling(scrollContainer, -Draggable.SCROLL_SPEED, 'scrollTop');\r\n        } else if (\r\n            this.getOffset(scrollContainer).top +\r\n                scrollContainer.getBoundingClientRect().height -\r\n                event.pageY <\r\n            this.config.scrollEdge\r\n        ) {\r\n            this.startAutoScrolling(scrollContainer, Draggable.SCROLL_SPEED, 'scrollTop');\r\n        }\r\n    }\r\n\r\n    private startScrollHorizontallyForContainer(\r\n        event: DraggableEvent,\r\n        scrollContainer: HTMLElement\r\n    ): void {\r\n        if (event.pageX - scrollContainer.getBoundingClientRect().left < this.config.scrollEdge) {\r\n            this.startAutoScrolling(scrollContainer, -Draggable.SCROLL_SPEED, 'scrollLeft');\r\n        } else if (\r\n            this.getOffset(scrollContainer).left +\r\n                scrollContainer.getBoundingClientRect().width -\r\n                event.pageX <\r\n            this.config.scrollEdge\r\n        ) {\r\n            this.startAutoScrolling(scrollContainer, Draggable.SCROLL_SPEED, 'scrollLeft');\r\n        }\r\n    }\r\n\r\n    private startScrollForWindow(event) {\r\n        if (!this.config.scrollDirection || this.config.scrollDirection === 'vertical') {\r\n            this.startScrollVerticallyForWindow(event);\r\n        }\r\n\r\n        if (!this.config.scrollDirection || this.config.scrollDirection === 'horizontal') {\r\n            this.startScrollHorizontallyForWindow(event);\r\n        }\r\n    }\r\n\r\n    private startScrollVerticallyForWindow(event: DraggableEvent): void {\r\n        const scrollingElement =\r\n            document.scrollingElement || document.documentElement || document.body;\r\n\r\n        // NOTE: Using `window.pageYOffset` here because IE doesn't have `window.scrollY`.\r\n        if (event.pageY - window.pageYOffset < this.config.scrollEdge) {\r\n            this.startAutoScrolling(scrollingElement, -Draggable.SCROLL_SPEED, 'scrollTop');\r\n        } else if (\r\n            window.innerHeight - (event.pageY - window.pageYOffset) <\r\n            this.config.scrollEdge\r\n        ) {\r\n            this.startAutoScrolling(scrollingElement, Draggable.SCROLL_SPEED, 'scrollTop');\r\n        }\r\n    }\r\n\r\n    private startScrollHorizontallyForWindow(event: DraggableEvent): void {\r\n        const scrollingElement =\r\n            document.scrollingElement || document.documentElement || document.body;\r\n\r\n        // NOTE: Using `window.pageXOffset` here because IE doesn't have `window.scrollX`.\r\n        if (event.pageX - window.pageXOffset < this.config.scrollEdge) {\r\n            this.startAutoScrolling(scrollingElement, -Draggable.SCROLL_SPEED, 'scrollLeft');\r\n        } else if (\r\n            window.innerWidth - (event.pageX - window.pageXOffset) <\r\n            this.config.scrollEdge\r\n        ) {\r\n            this.startAutoScrolling(scrollingElement, Draggable.SCROLL_SPEED, 'scrollLeft');\r\n        }\r\n    }\r\n\r\n    private getScrollContainer(node): HTMLElement {\r\n        const nodeOuterHeight = utils.getElementOuterHeight(node);\r\n\r\n        if (node.scrollHeight > Math.ceil(nodeOuterHeight)) {\r\n            return node;\r\n        }\r\n\r\n        if (!new RegExp('(body|html)', 'i').test(node.parentNode.tagName)) {\r\n            return this.getScrollContainer(node.parentNode);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    private startAutoScrolling(node, amount, direction) {\r\n        this.autoScrollingInterval.push(\r\n            this.requestAnimationFrame(\r\n                function() {\r\n                    this.startAutoScrolling(node, amount, direction);\r\n                }.bind(this)\r\n            )\r\n        );\r\n\r\n        return (node[direction] += amount * 0.25);\r\n    }\r\n\r\n    private getOffset(el) {\r\n        const rect = el.getBoundingClientRect();\r\n        return {\r\n            left: rect.left + this.getScroll('scrollLeft', 'pageXOffset'),\r\n            top: rect.top + this.getScroll('scrollTop', 'pageYOffset')\r\n        };\r\n    }\r\n\r\n    private getScroll(scrollProp, offsetProp) {\r\n        if (typeof window[offsetProp] !== 'undefined') {\r\n            return window[offsetProp];\r\n        }\r\n        if (document.documentElement.clientHeight) {\r\n            return document.documentElement[scrollProp];\r\n        }\r\n        return document.body[scrollProp];\r\n    }\r\n\r\n    private isDragingByHandler(event: DraggableEvent): boolean {\r\n        if (!this.isValidDragHandler(event.target)) {\r\n            return false;\r\n        }\r\n\r\n        return (\r\n            !this.config.handlerClass ||\r\n            (this.config.handlerClass &&\r\n                this.hasElementWithClass(this.config.handlerClass, event.target))\r\n        );\r\n    }\r\n\r\n    private isValidDragHandler(targetEl: any): boolean {\r\n        return ['input', 'textarea'].indexOf(targetEl.tagName.toLowerCase()) === -1;\r\n    }\r\n\r\n    private inRange(startEvent: DraggableEvent, moveEvent: DraggableEvent, range: number): boolean {\r\n        return (\r\n            Math.abs(moveEvent.clientX - startEvent.clientX) > range ||\r\n            Math.abs(moveEvent.clientY - startEvent.clientY) > range\r\n        );\r\n    }\r\n\r\n    private hasElementWithClass(className: string, target: any): boolean {\r\n        while (target !== this.element) {\r\n            if (target.classList.contains(className)) {\r\n                return true;\r\n            }\r\n            target = target.parentElement;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private pauseEvent(e: Event): void {\r\n        if (e.stopPropagation) {\r\n            e.stopPropagation();\r\n        }\r\n        if (e.preventDefault) {\r\n            e.preventDefault();\r\n        }\r\n        e.cancelBubble = true;\r\n        e.returnValue = false;\r\n    }\r\n\r\n    private fixProblemWithDnDForIE(element: Element) {\r\n        if (this.isTouchDevice() && this.isIEorEdge() && (<HTMLElement>element).style) {\r\n            (<HTMLElement>element).style['touch-action'] = 'none';\r\n        }\r\n    }\r\n\r\n    private removeTouchActionNone(element: Element) {\r\n        if (!(<HTMLElement>element).style) {\r\n            return;\r\n        }\r\n        (<HTMLElement>element).style['touch-action'] = '';\r\n    }\r\n\r\n    private addTouchActionNone(element) {\r\n        if (!(<HTMLElement>element).style) {\r\n            return;\r\n        }\r\n        (<HTMLElement>element).style['touch-action'] = 'none';\r\n    }\r\n\r\n    private isTouchDevice() {\r\n        return (\r\n            'ontouchstart' in window || navigator.maxTouchPoints // works on most browsers\r\n        ); // works on IE10/11 and Surface\r\n    }\r\n\r\n    private isIEorEdge() {\r\n        const ua = window.navigator.userAgent;\r\n\r\n        const msie = ua.indexOf('MSIE ');\r\n        if (msie > 0) {\r\n            // IE 10 or older => return version number\r\n            return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n        }\r\n\r\n        const trident = ua.indexOf('Trident/');\r\n        if (trident > 0) {\r\n            // IE 11 => return version number\r\n            const rv = ua.indexOf('rv:');\r\n            return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n        }\r\n\r\n        const edge = ua.indexOf('Edge/');\r\n        if (edge > 0) {\r\n            // Edge (IE 12+) => return version number\r\n            return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n        }\r\n\r\n        // other browser\r\n        return false;\r\n    }\r\n}\r\n","import { Component, OnInit, ElementRef, Inject, Host, Input, Output,\r\n    EventEmitter, SimpleChanges, OnChanges, OnDestroy, HostBinding,\r\n    ChangeDetectionStrategy, AfterViewInit, NgZone, ViewEncapsulation } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { GridsterService } from '../gridster.service';\r\nimport { GridsterPrototypeService } from '../gridster-prototype/gridster-prototype.service';\r\n\r\nimport { GridListItem } from '../gridList/GridListItem';\r\nimport { DraggableEvent } from '../utils/DraggableEvent';\r\nimport { Draggable } from '../utils/draggable';\r\nimport { IGridsterOptions } from '../IGridsterOptions';\r\nimport { GridList } from '../gridList/gridList';\r\nimport { utils } from '../utils/utils';\r\n\r\n@Component({\r\n    selector: 'ngx-gridster-item',\r\n    template: `<div class=\"gridster-item-inner\">\r\n      <ng-content></ng-content>\r\n      <div class=\"gridster-item-resizable-handler handle-s\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-e\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-n\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-w\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-se\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-ne\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-sw\"></div>\r\n      <div class=\"gridster-item-resizable-handler handle-nw\"></div>\r\n    </div>`,\r\n    styles: [`\r\n    ngx-gridster-item {\r\n        display: block;\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        z-index: 1;\r\n        -webkit-transition: none;\r\n        transition: none;\r\n    }\r\n\r\n    .gridster--ready ngx-gridster-item {\r\n        transition: all 200ms ease;\r\n        transition-property: left, top;\r\n    }\r\n\r\n    .gridster--ready.css-transform ngx-gridster-item  {\r\n        transition-property: transform;\r\n    }\r\n\r\n    .gridster--ready ngx-gridster-item.is-dragging,\r\n    .gridster--ready ngx-gridster-item.is-resizing {\r\n        -webkit-transition: none;\r\n        transition: none;\r\n        z-index: 9999;\r\n    }\r\n\r\n    ngx-gridster-item.no-transition {\r\n        -webkit-transition: none;\r\n        transition: none;\r\n    }\r\n    ngx-gridster-item .gridster-item-resizable-handler {\r\n        position: absolute;\r\n        z-index: 2;\r\n        display: none;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-n {\r\n      cursor: n-resize;\r\n      height: 10px;\r\n      right: 0;\r\n      top: 0;\r\n      left: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-e {\r\n      cursor: e-resize;\r\n      width: 10px;\r\n      bottom: 0;\r\n      right: 0;\r\n      top: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-s {\r\n      cursor: s-resize;\r\n      height: 10px;\r\n      right: 0;\r\n      bottom: 0;\r\n      left: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-w {\r\n      cursor: w-resize;\r\n      width: 10px;\r\n      left: 0;\r\n      top: 0;\r\n      bottom: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-ne {\r\n      cursor: ne-resize;\r\n      width: 10px;\r\n      height: 10px;\r\n      right: 0;\r\n      top: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-nw {\r\n      cursor: nw-resize;\r\n      width: 10px;\r\n      height: 10px;\r\n      left: 0;\r\n      top: 0;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-se {\r\n      cursor: se-resize;\r\n      width: 0;\r\n      height: 0;\r\n      right: 0;\r\n      bottom: 0;\r\n      border-style: solid;\r\n      border-width: 0 0 10px 10px;\r\n      border-color: transparent;\r\n    }\r\n\r\n    ngx-gridster-item .gridster-item-resizable-handler.handle-sw {\r\n      cursor: sw-resize;\r\n      width: 10px;\r\n      height: 10px;\r\n      left: 0;\r\n      bottom: 0;\r\n    }\r\n\r\n    ngx-gridster-item:hover .gridster-item-resizable-handler.handle-se {\r\n      border-color: transparent transparent #ccc\r\n    }\r\n    `],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GridsterItemComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n    @Input() x: number;\r\n    @Output() xChange = new EventEmitter<number>(true);\r\n    @Input() y: number;\r\n    @Output() yChange = new EventEmitter<number>(true);\r\n\r\n    @Input() xSm: number;\r\n    @Output() xSmChange = new EventEmitter<number>(true);\r\n    @Input() ySm: number;\r\n    @Output() ySmChange = new EventEmitter<number>(true);\r\n\r\n    @Input() xMd: number;\r\n    @Output() xMdChange = new EventEmitter<number>(true);\r\n    @Input() yMd: number;\r\n    @Output() yMdChange = new EventEmitter<number>(true);\r\n\r\n    @Input() xLg: number;\r\n    @Output() xLgChange = new EventEmitter<number>(true);\r\n    @Input() yLg: number;\r\n    @Output() yLgChange = new EventEmitter<number>(true);\r\n\r\n    @Input() xXl: number;\r\n    @Output() xXlChange = new EventEmitter<number>(true);\r\n    @Input() yXl: number;\r\n    @Output() yXlChange = new EventEmitter<number>(true);\r\n\r\n\r\n    @Input() w: number;\r\n    @Output() wChange = new EventEmitter<number>(true);\r\n    @Input() h: number;\r\n    @Output() hChange = new EventEmitter<number>(true);\r\n\r\n    @Input() wSm: number;\r\n    @Output() wSmChange = new EventEmitter<number>(true);\r\n    @Input() hSm: number;\r\n    @Output() hSmChange = new EventEmitter<number>(true);\r\n\r\n    @Input() wMd: number;\r\n    @Output() wMdChange = new EventEmitter<number>(true);\r\n    @Input() hMd: number;\r\n    @Output() hMdChange = new EventEmitter<number>(true);\r\n\r\n    @Input() wLg: number;\r\n    @Output() wLgChange = new EventEmitter<number>(true);\r\n    @Input() hLg: number;\r\n    @Output() hLgChange = new EventEmitter<number>(true);\r\n\r\n    @Input() wXl: number;\r\n    @Output() wXlChange = new EventEmitter<number>(true);\r\n    @Input() hXl: number;\r\n    @Output() hXlChange = new EventEmitter<number>(true);\r\n\r\n    @Output() change = new EventEmitter<any>(true);\r\n    @Output() start = new EventEmitter<any>(true);\r\n    @Output() end = new EventEmitter<any>(true);\r\n\r\n    @Input() dragAndDrop = true;\r\n    @Input() resizable = true;\r\n\r\n    @Input() options: any = {};\r\n\r\n    autoSize: boolean;\r\n\r\n    @HostBinding('class.is-dragging') isDragging = false;\r\n    @HostBinding('class.is-resizing') isResizing = false;\r\n\r\n    $element: HTMLElement;\r\n    elementRef: ElementRef;\r\n    /**\r\n     * Gridster provider service\r\n     */\r\n    gridster: GridsterService;\r\n\r\n    item: GridListItem;\r\n\r\n    set positionX(value: number) {\r\n        this._positionX = value;\r\n    }\r\n    get positionX() {\r\n        return this._positionX;\r\n    }\r\n    set positionY(value: number) {\r\n        this._positionY = value;\r\n    }\r\n    get positionY() {\r\n        return this._positionY;\r\n    }\r\n    private _positionX: number;\r\n    private _positionY: number;\r\n\r\n    private defaultOptions: any = {\r\n        minWidth: 1,\r\n        minHeight: 1,\r\n        maxWidth: Infinity,\r\n        maxHeight: Infinity,\r\n        defaultWidth: 1,\r\n        defaultHeight: 1\r\n    };\r\n    private subscriptions: Array<Subscription> = [];\r\n    private dragSubscriptions: Array<Subscription> = [];\r\n    private resizeSubscriptions: Array<Subscription> = [];\r\n\r\n    constructor(private zone: NgZone,\r\n                private gridsterPrototypeService: GridsterPrototypeService,\r\n                @Inject(ElementRef) elementRef: ElementRef,\r\n                @Inject(GridsterService) gridster: GridsterService) {\r\n\r\n        this.gridster = gridster;\r\n        this.elementRef = elementRef;\r\n        this.$element = elementRef.nativeElement;\r\n\r\n        this.item = (new GridListItem()).setFromGridsterItem(this);\r\n\r\n        // if gridster is initialized do not show animation on new grid-item construct\r\n        if (this.gridster.isInitialized()) {\r\n            this.preventAnimation();\r\n        }\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.options = Object.assign(this.defaultOptions, this.options);\r\n\r\n        this.w = this.w || this.options.defaultWidth;\r\n        this.h = this.h || this.options.defaultHeight;\r\n        this.wSm = this.wSm || this.w;\r\n        this.hSm = this.hSm || this.h;\r\n        this.wMd = this.wMd || this.w;\r\n        this.hMd = this.hMd || this.h;\r\n        this.wLg = this.wLg || this.w;\r\n        this.hLg = this.hLg || this.h;\r\n        this.wXl = this.wXl || this.w;\r\n        this.hXl = this.hXl || this.h;\r\n\r\n        if (this.gridster.isInitialized()) {\r\n            this.setPositionsOnItem();\r\n        }\r\n\r\n        this.gridster.registerItem(this.item);\r\n\r\n        this.gridster.calculateCellSize();\r\n        this.item.applySize();\r\n        this.item.applyPosition();\r\n\r\n        if (this.gridster.options.dragAndDrop && this.dragAndDrop) {\r\n            this.enableDragDrop();\r\n        }\r\n\r\n        if (this.gridster.isInitialized()) {\r\n            this.gridster.render();\r\n            this.gridster.updateCachedItems();\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        if (this.gridster.options.resizable && this.item.resizable) {\r\n            this.enableResizable();\r\n        }\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        if (!this.gridster.gridList) {\r\n            return;\r\n        }\r\n        let rerender = false;\r\n\r\n        ['w', ...Object.keys(GridListItem.W_PROPERTY_MAP).map(breakpoint => GridListItem.W_PROPERTY_MAP[breakpoint])]\r\n        .filter(propName => changes[propName] && !changes[propName].isFirstChange())\r\n        .forEach((propName: string) => {\r\n            if (changes[propName].currentValue > this.options.maxWidth) {\r\n                this[propName] = this.options.maxWidth;\r\n                setTimeout(() => this[propName + 'Change'].emit(this[propName]));\r\n            }\r\n            rerender = true;\r\n        });\r\n\r\n        ['h', ...Object.keys(GridListItem.H_PROPERTY_MAP).map(breakpoint => GridListItem.H_PROPERTY_MAP[breakpoint])]\r\n            .filter(propName => changes[propName] && !changes[propName].isFirstChange())\r\n            .forEach((propName: string) => {\r\n                if (changes[propName].currentValue > this.options.maxHeight) {\r\n                    this[propName] = this.options.maxHeight;\r\n                    setTimeout(() => this[propName + 'Change'].emit(this[propName]));\r\n                }\r\n                rerender = true;\r\n            });\r\n\r\n        ['x', 'y',\r\n        ...Object.keys(GridListItem.X_PROPERTY_MAP).map(breakpoint => GridListItem.X_PROPERTY_MAP[breakpoint]),\r\n        ...Object.keys(GridListItem.Y_PROPERTY_MAP).map(breakpoint => GridListItem.Y_PROPERTY_MAP[breakpoint])]\r\n            .filter(propName => changes[propName] && !changes[propName].isFirstChange())\r\n            .forEach((propName: string) => rerender = true);\r\n\r\n        if (changes['dragAndDrop'] && !changes['dragAndDrop'].isFirstChange()) {\r\n            if (changes['dragAndDrop'].currentValue && this.gridster.options.dragAndDrop) {\r\n                this.enableDragDrop();\r\n            } else {\r\n                this.disableDraggable();\r\n            }\r\n        }\r\n        if (changes['resizable'] && !changes['resizable'].isFirstChange()) {\r\n            if (changes['resizable'].currentValue && this.gridster.options.resizable) {\r\n                this.enableResizable();\r\n            } else {\r\n                this.disableResizable();\r\n            }\r\n        }\r\n\r\n        if (rerender && this.gridster.gridsterComponent.isReady) {\r\n            this.gridster.debounceRenderSubject.next();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.gridster.removeItem(this.item);\r\n        this.gridster.itemRemoveSubject.next(this.item);\r\n\r\n        this.subscriptions.forEach((sub: Subscription) => {\r\n            sub.unsubscribe();\r\n        });\r\n        this.disableDraggable();\r\n        this.disableResizable();\r\n    }\r\n\r\n    updateElemenetPosition() {\r\n        if (this.gridster.options.useCSSTransforms) {\r\n            utils.setTransform(this.$element, {x: this._positionX, y: this._positionY});\r\n        } else {\r\n            utils.setCssElementPosition(this.$element, {x: this._positionX, y: this._positionY});\r\n        }\r\n    }\r\n\r\n    setPositionsOnItem() {\r\n        if (!this.item.hasPositions(this.gridster.options.breakpoint)) {\r\n            this.setPositionsForGrid(this.gridster.options);\r\n        }\r\n\r\n        this.gridster.gridsterOptions.responsiveOptions\r\n            .filter((options: IGridsterOptions) => !this.item.hasPositions(options.breakpoint))\r\n            .forEach((options: IGridsterOptions) => this.setPositionsForGrid(options));\r\n    }\r\n\r\n    public enableResizable() {\r\n        if (this.resizeSubscriptions.length) {\r\n            return;\r\n        }\r\n\r\n        this.zone.runOutsideAngular(() => {\r\n            this.getResizeHandlers().forEach((handler) => {\r\n                const direction = this.getResizeDirection(handler);\r\n\r\n                if (this.hasResizableHandle(direction)) {\r\n                    handler.style.display = 'block';\r\n                }\r\n\r\n                const draggable = new Draggable(handler, this.getResizableOptions());\r\n\r\n                let startEvent;\r\n                let startData;\r\n                let cursorToElementPosition;\r\n\r\n                const dragStartSub = draggable.dragStart\r\n                    .subscribe((event: DraggableEvent) => {\r\n                        this.zone.run(() => {\r\n                            this.isResizing = true;\r\n\r\n                            startEvent = event;\r\n                            startData = this.createResizeStartObject(direction);\r\n                            cursorToElementPosition = event.getRelativeCoordinates(this.$element);\r\n\r\n                            this.gridster.onResizeStart(this.item);\r\n                            this.onStart('resize');\r\n                        });\r\n                    });\r\n\r\n                const dragSub = draggable.dragMove\r\n                    .subscribe((event: DraggableEvent) => {\r\n                        const scrollData = this.gridster.gridsterScrollData;\r\n\r\n                        this.resizeElement({\r\n                            direction,\r\n                            startData,\r\n                            position: {\r\n                                x: event.clientX - cursorToElementPosition.x - this.gridster.gridsterRect.left,\r\n                                y: event.clientY - cursorToElementPosition.y - this.gridster.gridsterRect.top\r\n                            },\r\n                            startEvent,\r\n                            moveEvent: event,\r\n                            scrollDiffX: scrollData.scrollLeft - startData.scrollLeft,\r\n                            scrollDiffY: scrollData.scrollTop - startData.scrollTop\r\n                        });\r\n\r\n                        this.gridster.onResizeDrag(this.item);\r\n                    });\r\n\r\n                const dragStopSub = draggable.dragStop\r\n                    .subscribe(() => {\r\n                        this.zone.run(() => {\r\n                            this.isResizing = false;\r\n\r\n                            this.gridster.onResizeStop(this.item);\r\n                            this.onEnd('resize');\r\n                        });\r\n                    });\r\n\r\n                this.resizeSubscriptions = this.resizeSubscriptions.concat([dragStartSub, dragSub, dragStopSub]);\r\n\r\n            });\r\n        });\r\n    }\r\n\r\n    public disableResizable() {\r\n        this.resizeSubscriptions.forEach((sub: Subscription) => {\r\n            sub.unsubscribe();\r\n        });\r\n        this.resizeSubscriptions = [];\r\n\r\n        [].forEach.call(this.$element.querySelectorAll('.gridster-item-resizable-handler'), (handler) => {\r\n            handler.style.display = '';\r\n        });\r\n    }\r\n\r\n    public enableDragDrop() {\r\n        if (this.dragSubscriptions.length) {\r\n            return;\r\n        }\r\n        this.zone.runOutsideAngular(() => {\r\n            let cursorToElementPosition;\r\n\r\n            const draggable = new Draggable(this.$element, this.getDraggableOptions());\r\n\r\n            const dragStartSub = draggable.dragStart\r\n                .subscribe((event: DraggableEvent) => {\r\n                    this.zone.run(() => {\r\n                        this.gridster.onStart(this.item);\r\n                        this.isDragging = true;\r\n                        this.onStart('drag');\r\n\r\n                        cursorToElementPosition = event.getRelativeCoordinates(this.$element);\r\n                    });\r\n                });\r\n\r\n            const dragSub = draggable.dragMove\r\n                .subscribe((event: DraggableEvent) => {\r\n\r\n                    this.positionY = (event.clientY - cursorToElementPosition.y -\r\n                        this.gridster.gridsterRect.top);\r\n                    this.positionX = (event.clientX - cursorToElementPosition.x -\r\n                        this.gridster.gridsterRect.left);\r\n                    this.updateElemenetPosition();\r\n\r\n                    this.gridster.onDrag(this.item);\r\n                });\r\n\r\n            const dragStopSub = draggable.dragStop\r\n                .subscribe(() => {\r\n                    this.zone.run(() => {\r\n                        this.gridster.onStop(this.item);\r\n                        this.gridster.debounceRenderSubject.next();\r\n                        this.isDragging = false;\r\n                        this.onEnd('drag');\r\n                    });\r\n                });\r\n\r\n            this.dragSubscriptions = this.dragSubscriptions.concat([dragStartSub, dragSub, dragStopSub]);\r\n        });\r\n    }\r\n\r\n    public disableDraggable() {\r\n        this.dragSubscriptions.forEach((sub: Subscription) => {\r\n            sub.unsubscribe();\r\n        });\r\n        this.dragSubscriptions = [];\r\n    }\r\n\r\n    private getResizeHandlers(): HTMLElement[]  {\r\n        return [].filter.call(this.$element.children[0].children, (el) => {\r\n\r\n            return el.classList.contains('gridster-item-resizable-handler');\r\n        });\r\n    }\r\n\r\n    private getDraggableOptions() {\r\n        return { scrollDirection: this.gridster.options.direction, ...this.gridster.draggableOptions };\r\n    }\r\n\r\n    private getResizableOptions() {\r\n        const resizableOptions: any = {};\r\n\r\n        if (this.gridster.draggableOptions.scroll || this.gridster.draggableOptions.scroll === false) {\r\n            resizableOptions.scroll = this.gridster.draggableOptions.scroll;\r\n        }\r\n        if (this.gridster.draggableOptions.scrollEdge) {\r\n            resizableOptions.scrollEdge = this.gridster.draggableOptions.scrollEdge;\r\n        }\r\n\r\n        resizableOptions.scrollDirection = this.gridster.options.direction;\r\n\r\n        return resizableOptions;\r\n    }\r\n\r\n    private hasResizableHandle(direction: string): boolean {\r\n        const isItemResizable = this.gridster.options.resizable && this.item.resizable;\r\n        const resizeHandles = this.gridster.options.resizeHandles;\r\n\r\n        return isItemResizable && (!resizeHandles || (resizeHandles && !!resizeHandles[direction]));\r\n    }\r\n\r\n    private setPositionsForGrid(options: IGridsterOptions) {\r\n        let x, y;\r\n\r\n        const position = this.findPosition(options);\r\n        x = options.direction === 'horizontal' ? position[0] : position[1];\r\n        y = options.direction === 'horizontal' ? position[1] : position[0];\r\n\r\n        this.item.setValueX(x, options.breakpoint);\r\n        this.item.setValueY(y, options.breakpoint);\r\n\r\n        setTimeout(() => {\r\n            this.item.triggerChangeX(options.breakpoint);\r\n            this.item.triggerChangeY(options.breakpoint);\r\n        });\r\n    }\r\n\r\n    private findPosition(options: IGridsterOptions): Array<number> {\r\n        const gridList = new GridList(\r\n            this.gridster.items.map(item => item.copyForBreakpoint(options.breakpoint)),\r\n            options\r\n        );\r\n\r\n        return gridList.findPositionForItem(this.item, {x: 0, y: 0});\r\n    }\r\n\r\n    private createResizeStartObject(direction: string) {\r\n        const scrollData = this.gridster.gridsterScrollData;\r\n\r\n        return {\r\n            top: this.positionY,\r\n            left: this.positionX,\r\n            height: parseInt(this.$element.style.height, 10),\r\n            width: parseInt(this.$element.style.width, 10),\r\n            minX: Math.max(this.item.x + this.item.w - this.options.maxWidth, 0),\r\n            maxX: this.item.x + this.item.w - this.options.minWidth,\r\n            minY: Math.max(this.item.y + this.item.h - this.options.maxHeight, 0),\r\n            maxY: this.item.y + this.item.h - this.options.minHeight,\r\n            minW: this.options.minWidth,\r\n            maxW: Math.min(\r\n                this.options.maxWidth,\r\n                (this.gridster.options.direction === 'vertical' && direction.indexOf('w') < 0) ?\r\n                this.gridster.options.lanes - this.item.x : this.options.maxWidth,\r\n                direction.indexOf('w') >= 0 ?\r\n                this.item.x + this.item.w : this.options.maxWidth\r\n            ),\r\n            minH: this.options.minHeight,\r\n            maxH: Math.min(\r\n                this.options.maxHeight,\r\n                (this.gridster.options.direction === 'horizontal' && direction.indexOf('n') < 0) ?\r\n                this.gridster.options.lanes - this.item.y : this.options.maxHeight,\r\n                direction.indexOf('n') >= 0 ?\r\n                this.item.y + this.item.h : this.options.maxHeight\r\n            ),\r\n            scrollLeft: scrollData.scrollLeft,\r\n            scrollTop: scrollData.scrollTop\r\n        };\r\n    }\r\n\r\n    private onEnd(actionType: string): void {\r\n        this.end.emit({action: actionType, item: this.item});\r\n    }\r\n\r\n    private onStart(actionType: string): void {\r\n        this.start.emit({action: actionType, item: this.item});\r\n    }\r\n\r\n    /**\r\n     * Assign class for short while to prevent animation of grid item component\r\n     */\r\n    private preventAnimation(): GridsterItemComponent {\r\n        this.$element.classList.add('no-transition');\r\n        setTimeout(() => {\r\n            this.$element.classList.remove('no-transition');\r\n        }, 500);\r\n\r\n        return this;\r\n    }\r\n\r\n    private getResizeDirection(handler: Element): string {\r\n        for (let i = handler.classList.length - 1; i >= 0; i--) {\r\n            if (handler.classList[i].match('handle-')) {\r\n                return handler.classList[i].split('-')[1];\r\n            }\r\n        }\r\n    }\r\n\r\n    private resizeElement(config: any): void {\r\n        // north\r\n        if (config.direction.indexOf('n') >= 0) {\r\n            this.resizeToNorth(config);\r\n        }\r\n        // west\r\n        if (config.direction.indexOf('w') >= 0) {\r\n            this.resizeToWest(config);\r\n        }\r\n        // east\r\n        if (config.direction.indexOf('e') >= 0) {\r\n            this.resizeToEast(config);\r\n        }\r\n        // south\r\n        if (config.direction.indexOf('s') >= 0) {\r\n            this.resizeToSouth(config);\r\n        }\r\n    }\r\n\r\n    private resizeToNorth(config: any): void {\r\n        const height = config.startData.height + config.startEvent.clientY -\r\n            config.moveEvent.clientY - config.scrollDiffY;\r\n\r\n        if (height < (config.startData.minH * this.gridster.cellHeight)) {\r\n            this.setMinHeight('n', config);\r\n        } else if (height > (config.startData.maxH * this.gridster.cellHeight)) {\r\n            this.setMaxHeight('n', config);\r\n        } else {\r\n            this.positionY = config.position.y;\r\n            this.$element.style.height = height + 'px';\r\n        }\r\n    }\r\n\r\n    private resizeToWest(config: any): void {\r\n        const width = config.startData.width + config.startEvent.clientX -\r\n            config.moveEvent.clientX - config.scrollDiffX;\r\n\r\n        if (width < (config.startData.minW * this.gridster.cellWidth)) {\r\n            this.setMinWidth('w', config);\r\n        } else if (width > (config.startData.maxW * this.gridster.cellWidth)) {\r\n            this.setMaxWidth('w', config);\r\n        } else {\r\n            this.positionX = config.position.x;\r\n            this.updateElemenetPosition();\r\n            this.$element.style.width = width + 'px';\r\n        }\r\n    }\r\n\r\n    private resizeToEast(config: any): void {\r\n        const width = config.startData.width + config.moveEvent.clientX -\r\n            config.startEvent.clientX + config.scrollDiffX;\r\n\r\n        if (width > (config.startData.maxW * this.gridster.cellWidth)) {\r\n            this.setMaxWidth('e', config);\r\n        } else if (width < (config.startData.minW * this.gridster.cellWidth)) {\r\n            this.setMinWidth('e', config);\r\n        } else {\r\n            this.$element.style.width = width + 'px';\r\n        }\r\n    }\r\n\r\n    private resizeToSouth(config: any): void {\r\n        const height = config.startData.height + config.moveEvent.clientY -\r\n            config.startEvent.clientY + config.scrollDiffY;\r\n\r\n        if (height > config.startData.maxH * this.gridster.cellHeight) {\r\n            this.setMaxHeight('s', config);\r\n        } else if (height < config.startData.minH * this.gridster.cellHeight) {\r\n            this.setMinHeight('s', config);\r\n        } else {\r\n            this.$element.style.height = height + 'px';\r\n        }\r\n    }\r\n\r\n    private setMinHeight(direction: string, config: any): void {\r\n        if (direction === 'n') {\r\n            this.$element.style.height = (config.startData.minH * this.gridster.cellHeight) + 'px';\r\n            this.positionY = config.startData.maxY * this.gridster.cellHeight;\r\n        } else {\r\n            this.$element.style.height = (config.startData.minH * this.gridster.cellHeight) + 'px';\r\n        }\r\n    }\r\n\r\n    private setMinWidth(direction: string, config: any): void {\r\n        if (direction === 'w') {\r\n            this.$element.style.width = (config.startData.minW * this.gridster.cellWidth) + 'px';\r\n            this.positionX = config.startData.maxX * this.gridster.cellWidth;\r\n            this.updateElemenetPosition();\r\n        } else {\r\n            this.$element.style.width = (config.startData.minW * this.gridster.cellWidth) + 'px';\r\n        }\r\n    }\r\n\r\n    private setMaxHeight(direction: string, config: any): void {\r\n\r\n        if (direction === 'n') {\r\n            this.$element.style.height = (config.startData.maxH * this.gridster.cellHeight) + 'px';\r\n            this.positionY = config.startData.minY * this.gridster.cellHeight;\r\n        } else {\r\n            this.$element.style.height = (config.startData.maxH * this.gridster.cellHeight) + 'px';\r\n        }\r\n    }\r\n\r\n    private setMaxWidth(direction: string, config: any): void {\r\n\r\n        if (direction === 'w') {\r\n            this.$element.style.width = (config.startData.maxW * this.gridster.cellWidth) + 'px';\r\n            this.positionX = config.startData.minX * this.gridster.cellWidth;\r\n            this.updateElemenetPosition();\r\n        } else {\r\n            this.$element.style.width = (config.startData.maxW * this.gridster.cellWidth) + 'px';\r\n        }\r\n    }\r\n}\r\n","import { Directive, ElementRef, Input, Output, HostBinding, EventEmitter, OnInit, OnDestroy,\r\n    NgZone} from '@angular/core';\r\nimport { Observable, Subscription, fromEvent } from 'rxjs';\r\n\r\nimport { GridsterPrototypeService } from './gridster-prototype.service';\r\nimport { GridListItem } from '../gridList/GridListItem';\r\nimport { GridsterService } from '../gridster.service';\r\nimport { DraggableEvent } from '../utils/DraggableEvent';\r\nimport { Draggable } from '../utils/draggable';\r\nimport { utils } from '../utils/utils';\r\n\r\n@Directive({\r\n    selector: '[ngxGridsterItemPrototype]'\r\n})\r\nexport class GridsterItemPrototypeDirective implements OnInit, OnDestroy {\r\n    @Output() drop = new EventEmitter();\r\n    @Output() start = new EventEmitter();\r\n    @Output() cancel = new EventEmitter();\r\n    @Output() enter = new EventEmitter();\r\n    @Output() out = new EventEmitter();\r\n\r\n    @Input() data: any;\r\n    @Input() config: any = {};\r\n\r\n    public x = 0;\r\n    public y = 0;\r\n    @Input() w: number;\r\n    @Input() wSm: number;\r\n    @Input() wMd: number;\r\n    @Input() wLg: number;\r\n    @Input() wXl: number;\r\n    @Input() h: number;\r\n    @Input() hSm: number;\r\n    @Input() hMd: number;\r\n    @Input() hLg: number;\r\n    @Input() hXl: number;\r\n\r\n    positionX: number;\r\n    positionY: number;\r\n\r\n    autoSize = false;\r\n\r\n    $element: HTMLElement;\r\n\r\n    /**\r\n     * Mouse drag observable\r\n     */\r\n    drag: Observable<any>;\r\n\r\n    /**\r\n     * Subscribtion for drag observable\r\n     */\r\n    dragSubscription: Subscription;\r\n\r\n    isDragging = false;\r\n\r\n    item: GridListItem;\r\n\r\n    containerRectange: ClientRect;\r\n\r\n    private dragContextGridster: GridsterService;\r\n    private parentRect: ClientRect;\r\n    private parentOffset: {left: number, top: number};\r\n\r\n    private subscribtions: Array<Subscription> = [];\r\n\r\n    // must be set to true because of item dragAndDrop configuration\r\n    get dragAndDrop(): boolean {\r\n        return true;\r\n    }\r\n\r\n    get gridster(): GridsterService {\r\n        return this.dragContextGridster;\r\n    }\r\n\r\n    constructor(private zone: NgZone,\r\n                private elementRef: ElementRef,\r\n                private gridsterPrototype: GridsterPrototypeService) {\r\n\r\n        this.item = (new GridListItem()).setFromGridsterItemPrototype(this);\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.wSm = this.wSm || this.w;\r\n        this.hSm = this.hSm || this.h;\r\n        this.wMd = this.wMd || this.w;\r\n        this.hMd = this.hMd || this.h;\r\n        this.wLg = this.wLg || this.w;\r\n        this.hLg = this.hLg || this.h;\r\n        this.wXl = this.wXl || this.w;\r\n        this.hXl = this.hXl || this.h;\r\n        this.zone.runOutsideAngular(() => {\r\n            this.enableDragDrop();\r\n        });\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.subscribtions.forEach((sub: Subscription) => {\r\n            sub.unsubscribe();\r\n        });\r\n    }\r\n\r\n    onDrop (gridster: GridsterService): void {\r\n        if (!this.config.helper) {\r\n            this.$element.parentNode.removeChild(this.$element);\r\n        }\r\n\r\n        this.drop.emit({\r\n            item: this.item,\r\n            gridster: gridster\r\n        });\r\n    }\r\n\r\n    onCancel (): void {\r\n        this.cancel.emit({item: this.item});\r\n    }\r\n\r\n    onEnter (gridster: GridsterService): void {\r\n        this.enter.emit({\r\n            item: this.item,\r\n            gridster: gridster\r\n        });\r\n    }\r\n\r\n    onOver (gridster: GridsterService): void {}\r\n\r\n    onOut (gridster: GridsterService): void {\r\n        this.out.emit({\r\n            item: this.item,\r\n            gridster: gridster\r\n        });\r\n    }\r\n\r\n    getPositionToGridster(gridster: GridsterService) {\r\n        const relativeContainerCoords = this.getContainerCoordsToGridster(gridster);\r\n\r\n        return {\r\n            y: this.positionY - relativeContainerCoords.top,\r\n            x: this.positionX - relativeContainerCoords.left\r\n        };\r\n    }\r\n\r\n    setDragContextGridster(gridster: GridsterService) {\r\n        this.dragContextGridster = gridster;\r\n    }\r\n\r\n    private getContainerCoordsToGridster(gridster: GridsterService): {top: number, left: number} {\r\n        return {\r\n            left: gridster.gridsterRect.left - this.parentRect.left,\r\n            top: gridster.gridsterRect.top - this.parentRect.top\r\n        };\r\n    }\r\n\r\n    private enableDragDrop() {\r\n        let cursorToElementPosition;\r\n        const draggable = new Draggable(this.elementRef.nativeElement);\r\n\r\n        const dragStartSub = draggable.dragStart\r\n            .subscribe((event: DraggableEvent) => {\r\n                this.zone.run(() => {\r\n                    this.$element = this.provideDragElement();\r\n                    this.containerRectange = this.$element.parentElement.getBoundingClientRect();\r\n                    this.updateParentElementData();\r\n                    this.onStart(event);\r\n\r\n                    cursorToElementPosition = event.getRelativeCoordinates(this.$element);\r\n                });\r\n            });\r\n\r\n        const dragSub = draggable.dragMove\r\n            .subscribe((event: DraggableEvent) => {\r\n\r\n                this.setElementPosition(this.$element, {\r\n                    x: event.clientX - cursorToElementPosition.x  - this.parentRect.left,\r\n                    y: event.clientY - cursorToElementPosition.y  - this.parentRect.top\r\n                });\r\n\r\n                this.onDrag(event);\r\n            });\r\n\r\n        const dragStopSub = draggable.dragStop\r\n            .subscribe((event: DraggableEvent) => {\r\n                this.zone.run(() => {\r\n                    this.onStop(event);\r\n                    this.$element = null;\r\n                });\r\n            });\r\n\r\n        const scrollSub = fromEvent(document, 'scroll')\r\n            .subscribe(() => {\r\n                if (this.$element) {\r\n                    this.updateParentElementData();\r\n                }\r\n            });\r\n\r\n        this.subscribtions = this.subscribtions.concat([dragStartSub, dragSub, dragStopSub, scrollSub]);\r\n    }\r\n\r\n    private setElementPosition(element: HTMLElement, position: {x: number, y: number}) {\r\n        this.positionX = position.x;\r\n        this.positionY = position.y;\r\n        utils.setCssElementPosition(element, position);\r\n    }\r\n\r\n    private updateParentElementData() {\r\n        this.parentRect = this.$element.parentElement.getBoundingClientRect();\r\n        this.parentOffset = {\r\n            left: this.$element.parentElement.offsetLeft,\r\n            top: this.$element.parentElement.offsetTop\r\n        };\r\n    }\r\n\r\n    private onStart (event: DraggableEvent): void {\r\n        this.isDragging = true;\r\n\r\n        this.$element.style.pointerEvents = 'none';\r\n        this.$element.style.position = 'absolute';\r\n\r\n        this.gridsterPrototype.dragItemStart(this, event);\r\n\r\n        this.start.emit({item: this.item});\r\n    }\r\n\r\n    private onDrag (event: DraggableEvent): void {\r\n        this.gridsterPrototype.updatePrototypePosition(this, event);\r\n    }\r\n\r\n    private onStop (event: DraggableEvent): void {\r\n        this.gridsterPrototype.dragItemStop(this, event);\r\n\r\n        this.isDragging = false;\r\n        this.$element.style.pointerEvents = 'auto';\r\n        this.$element.style.position = '';\r\n        utils.resetCSSElementPosition(this.$element);\r\n\r\n        if (this.config.helper) {\r\n            this.$element.parentNode.removeChild(this.$element);\r\n        }\r\n    }\r\n\r\n    private provideDragElement (): HTMLElement {\r\n        let dragElement = this.elementRef.nativeElement;\r\n\r\n        if (this.config.helper) {\r\n            dragElement = <any>(dragElement).cloneNode(true);\r\n\r\n            document.body.appendChild(this.fixStylesForBodyHelper(dragElement));\r\n        } else {\r\n            this.fixStylesForRelativeElement(dragElement);\r\n        }\r\n\r\n        return dragElement;\r\n    }\r\n\r\n    private fixStylesForRelativeElement(el: HTMLElement) {\r\n        if (window.getComputedStyle(el).position === 'absolute') {\r\n            return el;\r\n        }\r\n        const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n        this.containerRectange = el.parentElement.getBoundingClientRect();\r\n\r\n        el.style.position = 'absolute';\r\n        this.setElementPosition(el, {\r\n            x: rect.left - this.containerRectange.left,\r\n            y: rect.top - this.containerRectange.top\r\n        });\r\n\r\n        return el;\r\n    }\r\n\r\n    /**\r\n     * When element is cloned and append to body it should have position absolute and coords set by original\r\n     * relative prototype element position.\r\n     */\r\n    private fixStylesForBodyHelper (el: HTMLElement) {\r\n        const bodyRect = document.body.getBoundingClientRect();\r\n        const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n        el.style.position = 'absolute';\r\n        this.setElementPosition(el, {\r\n            x: rect.left - bodyRect.left,\r\n            y: rect.top - bodyRect.top\r\n        });\r\n\r\n        return el;\r\n    }\r\n\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { GridsterComponent } from './gridster.component';\r\nimport { GridsterItemComponent } from './gridster-item/gridster-item.component';\r\nimport { GridsterItemPrototypeDirective } from './gridster-prototype/gridster-item-prototype.directive';\r\nimport { GridsterPrototypeService } from './gridster-prototype/gridster-prototype.service';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    declarations: [\r\n        GridsterComponent,\r\n        GridsterItemComponent,\r\n        GridsterItemPrototypeDirective\r\n    ],\r\n    exports: [\r\n        GridsterComponent,\r\n        GridsterItemComponent,\r\n        GridsterItemPrototypeDirective\r\n    ]\r\n})\r\nexport class GridsterModule {\r\n    static forRoot(): ModuleWithProviders<GridsterModule> {\r\n    return {\r\n        ngModule: GridsterModule,\r\n        providers: [GridsterPrototypeService]\r\n    };\r\n}\r\n}\r\n\r\n","/*\r\n * Public API Surface of gridster\r\n */\r\n\r\nexport * from './lib/gridster.module';\r\nexport * from './lib/gridster.component';\r\nexport * from './lib/gridster-item/gridster-item.component';\r\nexport * from './lib/gridster-prototype/gridster-item-prototype.directive';\r\nexport * from './lib/IGridsterOptions';\r\nexport * from './lib/IGridsterDraggableOptions';\r\nexport * from './lib/GridsterOptions';\r\nexport * from './lib/gridster-prototype/gridster-prototype.service';\r\nexport * from './lib/gridster.service';\r\nexport * from './lib/gridList/GridListItem';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.GridsterService","i2.GridsterPrototypeService","i1.GridsterPrototypeService"],"mappings":"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"}