@syncfusion/ej2-layouts 20.2.45 → 20.2.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/ej2-layouts.umd.min.js +2 -2
- package/dist/ej2-layouts.umd.min.js.map +1 -1
- package/dist/es6/ej2-layouts.es2015.js +2 -2
- package/dist/es6/ej2-layouts.es2015.js.map +1 -1
- package/dist/es6/ej2-layouts.es5.js +2 -2
- package/dist/es6/ej2-layouts.es5.js.map +1 -1
- package/dist/global/ej2-layouts.min.js +2 -2
- package/dist/global/ej2-layouts.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +6 -6
- package/src/dashboard-layout/dashboard-layout.js +2 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ej2-layouts.min.js","sources":["../../src/splitter/splitter.js","../../src/dashboard-layout/dashboard-layout.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, setStyleAttribute, ChildProperty, compile } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, addClass, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, selectAll, removeClass, select, Browser, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nvar ROOT = 'e-splitter';\nvar HORIZONTAL_PANE = 'e-splitter-horizontal';\nvar VERTICAL_PANE = 'e-splitter-vertical';\nvar PANE = 'e-pane';\nvar SPLIT_H_PANE = 'e-pane-horizontal';\nvar SPLIT_V_PANE = 'e-pane-vertical';\nvar SPLIT_BAR = 'e-split-bar';\nvar SPLIT_H_BAR = 'e-split-bar-horizontal';\nvar SPLIT_V_BAR = 'e-split-bar-vertical';\nvar STATIC_PANE = 'e-static-pane';\nvar SCROLL_PANE = 'e-scrollable';\nvar RESIZE_BAR = 'e-resize-handler';\nvar RESIZABLE_BAR = 'e-resizable-split-bar';\nvar SPLIT_BAR_HOVER = 'e-split-bar-hover';\nvar SPLIT_BAR_ACTIVE = 'e-split-bar-active';\nvar HIDE_HANDLER = 'e-hide-handler';\nvar SPLIT_TOUCH = 'e-splitter-touch';\nvar DISABLED = 'e-disabled';\nvar RTL = 'e-rtl';\nvar E_ICONS = 'e-icons';\nvar COLLAPSIBLE = 'e-collapsible';\nvar NAVIGATE_ARROW = 'e-navigate-arrow';\nvar ARROW_RIGHT = 'e-arrow-right';\nvar ARROW_LEFT = 'e-arrow-left';\nvar ARROW_UP = 'e-arrow-up';\nvar ARROW_DOWN = 'e-arrow-down';\nvar HIDE_ICON = 'e-icon-hidden';\nvar EXPAND_PANE = 'e-expanded';\nvar COLLAPSE_PANE = 'e-collapsed';\nvar PANE_HIDDEN = 'e-pane-hidden';\nvar RESIZABLE_PANE = 'e-resizable';\nvar LAST_BAR = 'e-last-bar';\nvar BAR_SIZE_DEFAULT = 1;\n/**\n * Interface to configure pane properties such as its content, size, min, max, resizable, collapsed and collapsible.\n */\nvar PaneProperties = /** @class */ (function (_super) {\n __extends(PaneProperties, _super);\n function PaneProperties() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], PaneProperties.prototype, \"size\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsible\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsed\", void 0);\n __decorate([\n Property(true)\n ], PaneProperties.prototype, \"resizable\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"max\", void 0);\n __decorate([\n Property()\n ], PaneProperties.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], PaneProperties.prototype, \"cssClass\", void 0);\n return PaneProperties;\n}(ChildProperty));\nexport { PaneProperties };\n/**\n * Splitter is a layout user interface (UI) control that has resizable and collapsible split panes.\n * The container can be split into multiple panes, which are oriented horizontally or vertically.\n * The separator (divider) splits the panes and resizes and expands/collapses the panes.\n * The splitter is placed inside the split pane to make a nested layout user interface.\n *\n * ```html\n * <div id=\"splitter\">\n * <div> Left Pane </div>\n * <div> Center Pane </div>\n * <div> Right Pane </div>\n * </div>\n * ```\n * ```typescript\n * <script>\n * var splitterObj = new Splitter({ width: '300px', height: '200px'});\n * splitterObj.appendTo('#splitter');\n * </script>\n * ```\n */\nvar Splitter = /** @class */ (function (_super) {\n __extends(Splitter, _super);\n /**\n * Initializes a new instance of the Splitter class.\n *\n * @param options - Specifies Splitter model properties as options.\n * @param element - Specifies the element that is rendered as an Splitter.\n */\n function Splitter(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {SplitterModel} newProp - specifies the new property\n * @param {SplitterModel} oldProp - specifies the old property\n * @returns {void}\n * @private\n */\n Splitter.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n this.setSplitterSize(this.element, newProp.height, 'height');\n break;\n case 'width':\n this.setSplitterSize(this.element, newProp.width, 'width');\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass);\n break;\n case 'enabled':\n this.isEnabled(this.enabled);\n break;\n case 'enableReversePanes':\n this.setReversePane();\n break;\n case 'separatorSize':\n this.setSeparatorSize(newProp.separatorSize);\n break;\n case 'orientation':\n this.changeOrientation(newProp.orientation);\n break;\n case 'paneSettings': {\n if (!(newProp.paneSettings instanceof Array && oldProp.paneSettings instanceof Array)) {\n var paneCounts = Object.keys(newProp.paneSettings);\n for (var i = 0; i < paneCounts.length; i++) {\n var index = parseInt(Object.keys(newProp.paneSettings)[i], 10);\n var changedPropsCount = Object.keys(newProp.paneSettings[index]).length;\n for (var j = 0; j < changedPropsCount; j++) {\n var property = Object.keys(newProp.paneSettings[index])[j];\n switch (property) {\n case 'content': {\n var newValue = Object(newProp.paneSettings[index])[property];\n if (!isNullOrUndefined(newValue)) {\n this.allPanes[index].innerHTML = '';\n this.setTemplate(newValue, this.allPanes[index]);\n }\n break;\n }\n case 'resizable': {\n var newVal = Object(newProp.paneSettings[index])[property];\n this.resizableModel(index, newVal);\n break;\n }\n case 'collapsible':\n this.collapsibleModelUpdate(index);\n break;\n case 'collapsed':\n // eslint-disable-next-line\n newProp.paneSettings[index].collapsed ? this.isCollapsed(index) : this.collapsedOnchange(index);\n break;\n case 'cssClass':\n this.setCssClass(this.allPanes[index], newProp.paneSettings[index].cssClass);\n break;\n case 'size': {\n var newValSize = Object(newProp.paneSettings[index])[property];\n if (newValSize !== '' && !isNullOrUndefined(newValSize)) {\n this.updatePaneSize(newValSize, index);\n }\n break;\n }\n }\n }\n }\n }\n else {\n this.destroyPaneSettings();\n this.allBars = [];\n this.allPanes = [];\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setRTL(this.enableRtl);\n this.isCollapsed();\n }\n break;\n }\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n }\n }\n };\n Splitter.prototype.updatePaneSize = function (newValSize, index) {\n this.allPanes[index].style.flexBasis = newValSize;\n var flexPaneIndexes = [];\n var staticPaneWidth;\n var flexCount = 0;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.paneSettings[i].size && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n else if (this.paneSettings[i].size) {\n staticPaneWidth = this.orientation === 'Horizontal' ? this.allPanes[index].offsetWidth : this.allPanes[index].offsetHeight;\n }\n }\n staticPaneWidth = this.orientation === 'Horizontal' ? (this.allBars[0].offsetWidth * this.allBars.length) + staticPaneWidth :\n (this.allBars[0].offsetHeight * this.allBars.length) + staticPaneWidth;\n var flexPaneWidth = (this.orientation === 'Horizontal' ? this.element.offsetWidth : this.element.offsetHeight)\n - staticPaneWidth - (this.border * 2);\n var avgDiffWidth = flexPaneWidth / flexPaneIndexes.length;\n for (var j = 0; j < flexPaneIndexes.length; j++) {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = avgDiffWidth + 'px';\n }\n this.allPanes[index].classList.add(STATIC_PANE);\n };\n Splitter.prototype.initializeValues = function () {\n this.allPanes = [];\n this.paneOrder = [];\n this.separatorOrder = [];\n this.allBars = [];\n this.previousCoordinates = {};\n this.currentCoordinates = {};\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n this.panesDimensions = [];\n this.border = 0;\n this.validDataAttributes = ['data-size', 'data-min', 'data-max', 'data-collapsible',\n 'data-resizable', 'data-content', 'data-collapsed'];\n this.validElementAttributes = ['data-orientation', 'data-width', 'data-height'];\n this.iconsDelay = 300;\n this.templateElement = [];\n this.collapseFlag = false;\n this.expandFlag = true;\n };\n Splitter.prototype.preRender = function () {\n this.initializeValues();\n this.onReportWindowSize = this.reportWindowSize.bind(this);\n this.onMouseMoveHandler = this.onMouseMove.bind(this);\n this.onMouseUpHandler = this.onMouseUp.bind(this);\n this.onTouchMoveHandler = this.onMouseMove.bind(this);\n this.onTouchEndHandler = this.onMouseUp.bind(this);\n this.wrapper = this.element.cloneNode(true);\n this.wrapperParent = this.element.parentElement;\n removeClass([this.wrapper], ['e-control', 'e-lib', ROOT]);\n var orientation = this.orientation === 'Horizontal' ? HORIZONTAL_PANE : VERTICAL_PANE;\n addClass([this.element], orientation);\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : '';\n this.setCssClass(this.element, css);\n if (Browser.isDevice) {\n addClass([this.element], SPLIT_TOUCH);\n }\n };\n Splitter.prototype.getPersistData = function () {\n return this.addOnPersist(['paneSettings']);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - returns the string value\n * @private\n */\n Splitter.prototype.getModuleName = function () {\n return 'splitter';\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Splitter.prototype.render = function () {\n this.checkDataAttributes();\n this.setCssClass(this.element, this.cssClass);\n this.isEnabled(this.enabled);\n this.setDimension(this.getHeight(this.element), this.getWidth(this.element));\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setPaneSettings();\n this.setRTL(this.enableRtl);\n if (this.enableReversePanes) {\n this.setReversePane();\n }\n this.collapseFlag = true;\n this.isCollapsed();\n this.collapseFlag = false;\n EventHandler.add(document, 'touchstart click', this.onDocumentClick, this);\n this.renderComplete();\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onReportWindowSize, true);\n EventHandler.add(this.element, 'keydown', this.onMove, this);\n };\n Splitter.prototype.onDocumentClick = function (e) {\n if (!e.target.classList.contains(SPLIT_BAR) && !isNullOrUndefined(this.currentSeparator)) {\n this.currentSeparator.classList.remove(SPLIT_BAR_HOVER);\n this.currentSeparator.classList.remove(SPLIT_BAR_ACTIVE);\n }\n };\n Splitter.prototype.checkPaneSize = function (e) {\n var prePaneSize = this.orientation === 'Horizontal' ? this.previousPane.offsetWidth : this.previousPane.offsetHeight;\n var nextPaneSize = this.orientation === 'Horizontal' ? this.nextPane.offsetWidth : this.nextPane.offsetHeight;\n var splitBarSize = isNullOrUndefined(this.separatorSize) ? BAR_SIZE_DEFAULT : this.separatorSize;\n if ((this.previousPane.style.flexBasis.indexOf('%') > 0 || this.nextPane.style.flexBasis.indexOf('%') > 0)) {\n var previousFlexBasis = this.updatePaneFlexBasis(this.previousPane);\n var nextFlexBasis = this.updatePaneFlexBasis(this.nextPane);\n this.totalPercent = previousFlexBasis + nextFlexBasis;\n this.totalWidth = this.convertPercentageToPixel(this.totalPercent + '%');\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) <\n this.convertPercentageToPixel((nextFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis + 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis - 1) + '%';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) <\n this.convertPercentageToPixel((previousFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis - 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis + 1) + '%';\n }\n }\n }\n else {\n this.totalWidth = (this.orientation === 'Horizontal') ? this.previousPane.offsetWidth + this.nextPane.offsetWidth :\n this.previousPane.offsetHeight + this.nextPane.offsetHeight;\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) < (nextPaneSize + splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize + splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize < splitBarSize) ? '0px' :\n (nextPaneSize - splitBarSize) + 'px';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) < (prePaneSize - splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize < splitBarSize) ? '0px' :\n (prePaneSize - splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize + splitBarSize) + 'px';\n }\n }\n }\n };\n Splitter.prototype.onMove = function (event) {\n if (this.allPanes.length > 1) {\n var index = this.getSeparatorIndex(this.currentSeparator);\n var isPrevpaneCollapsed = this.previousPane.classList.contains(COLLAPSE_PANE);\n var isPrevpaneExpanded = this.previousPane.classList.contains(EXPAND_PANE);\n var isNextpaneCollapsed = this.nextPane.classList.contains(COLLAPSE_PANE);\n if (((this.orientation !== 'Horizontal' && event.keyCode === 38) || (this.orientation === 'Horizontal' &&\n event.keyCode === 39) ||\n (this.orientation === 'Horizontal' && event.keyCode === 37) || (this.orientation !== 'Horizontal' && event.keyCode === 40))\n && (!isPrevpaneExpanded && !isNextpaneCollapsed && !isPrevpaneCollapsed || (isPrevpaneExpanded) && !isNextpaneCollapsed) &&\n document.activeElement.classList.contains(SPLIT_BAR) && (this.paneSettings[index].resizable &&\n this.paneSettings[index + 1].resizable)) {\n event.preventDefault();\n this.checkPaneSize(event);\n this.triggerResizing(event);\n }\n else if (event.keyCode === 13 && this.paneSettings[index].collapsible &&\n document.activeElement.classList.contains(SPLIT_BAR) && this.currentSeparator.classList.contains(SPLIT_BAR_ACTIVE)) {\n if (!this.previousPane.classList.contains(COLLAPSE_PANE)) {\n this.collapse(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n else {\n this.expand(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n }\n }\n };\n Splitter.prototype.getMinInPixel = function (minValue) {\n var min;\n if (isNullOrUndefined(minValue)) {\n return 0;\n }\n var paneMinRange = this.convertPixelToNumber(minValue.toString());\n if (minValue.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(minValue);\n }\n min = this.convertPixelToNumber((paneMinRange).toString());\n return min;\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {string} returns the string\n * @hidden\n */\n Splitter.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n this.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n };\n Splitter.prototype.checkDataAttributes = function () {\n var api;\n var value;\n // Element values\n for (var dataIndex = 0; dataIndex < this.validElementAttributes.length; dataIndex++) {\n value = this.element.getAttribute(this.validElementAttributes[dataIndex]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validElementAttributes[dataIndex]);\n // eslint-disable-next-line\n this[api] = value;\n }\n }\n // Pane values\n for (var paneIndex = 0; paneIndex < this.element.children.length; paneIndex++) {\n for (var dataAttr = 0; dataAttr < this.validDataAttributes.length; dataAttr++) {\n value = this.element.children[paneIndex].getAttribute(this.validDataAttributes[dataAttr]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validDataAttributes[dataAttr]);\n value = (api === 'collapsible' || api === 'resizable') ? (value === 'true') : value;\n if (isNullOrUndefined(this.paneSettings[paneIndex])) {\n this.paneSettings[paneIndex] = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsible: false,\n collapsed: false\n };\n }\n // eslint-disable-next-line\n var paneAPI = this.paneSettings[paneIndex][api];\n if (api === 'resizable' || api === 'collapsible' || api === 'collapsed') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n if (isNullOrUndefined(paneAPI) || paneAPI === '') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n }\n }\n }\n };\n Splitter.prototype.destroyPaneSettings = function () {\n [].slice.call(this.element.children).forEach(function (el) {\n detach(el);\n });\n this.restoreElem();\n };\n Splitter.prototype.setPaneSettings = function () {\n var childCount = this.allPanes.length;\n var paneCollection = [];\n var paneValue = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsed: false,\n collapsible: false,\n cssClass: ''\n };\n for (var i = 0; i < childCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i])) {\n paneCollection[i] = paneValue;\n }\n else {\n paneCollection[i] = this.paneSettings[i];\n }\n }\n this.setProperties({ 'paneSettings': paneCollection }, true);\n };\n Splitter.prototype.checkArrow = function (paneIndex, targetArrow) {\n return (this.allBars[paneIndex].querySelector('.' + NAVIGATE_ARROW + '.' + targetArrow));\n };\n Splitter.prototype.removeDataPrefix = function (attribute) {\n return attribute.slice(attribute.lastIndexOf('-') + 1);\n };\n Splitter.prototype.setRTL = function (rtl) {\n // eslint-disable-next-line\n rtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Splitter.prototype.setReversePane = function () {\n this.allPanes = this.allPanes.reverse();\n this.allBars = this.allBars.reverse();\n addClass([this.allBars[this.allBars.length - 1]], LAST_BAR);\n removeClass([this.allBars[0]], LAST_BAR);\n this.setProperties({ 'paneSettings': this.paneSettings.reverse() }, true);\n if (this.enableReversePanes) {\n this.element.setAttribute('dir', 'rtl');\n }\n else {\n this.element.removeAttribute('dir');\n }\n };\n Splitter.prototype.setSplitterSize = function (element, size, property) {\n var style = property === 'width' ? { 'width': formatUnit(size) } : { 'height': formatUnit(size) };\n setStyleAttribute(element, style);\n };\n Splitter.prototype.getPanesDimensions = function () {\n for (var index = 0; index < this.allPanes.length; index++) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().width) :\n this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().height);\n }\n };\n Splitter.prototype.setCssClass = function (element, className) {\n if (className) {\n addClass([element], className.split(className.indexOf(',') > -1 ? ',' : ' '));\n }\n };\n Splitter.prototype.hideResizer = function (target) {\n addClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n };\n Splitter.prototype.showResizer = function (target) {\n if (!isNullOrUndefined(this.previousPane) && this.previousPane.classList.contains(RESIZABLE_PANE) &&\n !isNullOrUndefined(this.nextPane) && this.nextPane.classList.contains(RESIZABLE_PANE)) {\n removeClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n }\n };\n Splitter.prototype.resizableModel = function (index, newVal) {\n var paneIndex = (index === (this.allBars.length)) ? (index - 1) : index;\n var i = index;\n EventHandler.remove(this.allBars[paneIndex], 'mousedown', this.onMouseDown);\n if (newVal) {\n EventHandler.add(this.allBars[paneIndex], 'mousedown', this.onMouseDown, this);\n if (this.isResizable()) {\n this.showResizer(this.allBars[paneIndex]);\n removeClass([select('.' + RESIZE_BAR, this.allBars[paneIndex])], HIDE_HANDLER);\n this.allBars[paneIndex].classList.add(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.add(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.add(RESIZABLE_PANE);\n this.updateResizablePanes(i);\n }\n }\n else {\n this.updateResizablePanes(i);\n this.hideResizer(this.allBars[paneIndex]);\n this.allBars[paneIndex].classList.remove(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.remove(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.remove(RESIZABLE_PANE);\n }\n };\n Splitter.prototype.collapsibleModelUpdate = function (index) {\n var paneIndex = index === (this.allBars.length) ? (index - 1) : index;\n var arrow2 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_LEFT) : this.checkArrow(paneIndex, ARROW_UP);\n var arrow1 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_RIGHT) : this.checkArrow(paneIndex, ARROW_DOWN);\n this.paneCollapsible(this.allPanes[index], index);\n this.updateCollapseIcons(paneIndex, arrow1, arrow2);\n };\n Splitter.prototype.collapseArrow = function (barIndex, arrow) {\n return selectAll('.' + arrow, this.allBars[barIndex])[0];\n };\n Splitter.prototype.updateIsCollapsed = function (index, collapseArrow, lastBarArrow) {\n if (!isNullOrUndefined(index)) {\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, lastBarArrow) : this.collapseArrow(barIndex, collapseArrow);\n }\n targetEle.click();\n }\n };\n Splitter.prototype.isCollapsed = function (index) {\n var _this = this;\n if (!isNullOrUndefined(index) && this.paneSettings[index].collapsed\n && isNullOrUndefined(this.allPanes[index].classList.contains(COLLAPSE_PANE))) {\n return;\n }\n this.expandFlag = false;\n if (!isNullOrUndefined(index)) {\n this.collapseFlag = true;\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, this.targetArrows().lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, this.targetArrows().lastBarArrow) :\n this.collapseArrow(barIndex, this.targetArrows().collapseArrow);\n }\n var event_1 = { target: targetEle };\n var eventArgs = this.beforeAction(event_1);\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n var collapsedindex = [];\n collapsedindex[0] = index;\n var j = 1;\n for (var i = 0; i < _this.allPanes.length; i++) {\n if (_this.allPanes[i].classList.contains(COLLAPSE_PANE)) {\n collapsedindex[j] = i;\n j++;\n }\n }\n collapsedindex = collapsedindex.sort();\n _this.updateIsCollapsed(index, _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n for (var i = 0; i < collapsedindex.length; i++) {\n if (!_this.allPanes[collapsedindex[i]].classList.contains(COLLAPSE_PANE)) {\n _this.updateIsCollapsed(collapsedindex[i], _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n }\n }\n for (var i = collapsedindex.length; i > 0; i--) {\n if (!_this.allPanes[collapsedindex[i - 1]].classList.contains(COLLAPSE_PANE)) {\n var targetArrow = _this.targetArrows();\n _this.updateIsCollapsed(collapsedindex[i - 1], targetArrow.collapseArrow, targetArrow.lastBarArrow);\n }\n }\n var collapseEventArgs = _this.afterAction(event_1);\n _this.trigger('collapsed', collapseEventArgs);\n _this.collapseFlag = false;\n }\n });\n }\n else {\n for (var m = 0; m < this.allPanes.length; m++) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed) {\n this.updateIsCollapsed(m, this.targetArrows().collapseArrow, this.targetArrows().lastBarArrow);\n }\n }\n for (var m = this.allPanes.length - 1; m >= 0; m--) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed &&\n !this.allPanes[m].classList.contains(COLLAPSE_PANE)) {\n var collapseArrow = this.orientation === 'Horizontal' ? ARROW_RIGHT : ARROW_DOWN;\n if (m !== 0) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n if (!this.nextPane.classList.contains(COLLAPSE_PANE)) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n }\n }\n }\n this.expandFlag = true;\n };\n Splitter.prototype.targetArrows = function () {\n this.splitterProperty();\n return {\n collapseArrow: (this.orientation === 'Horizontal') ? ARROW_LEFT : ARROW_UP,\n lastBarArrow: (this.orientation === 'Vertical') ? ARROW_DOWN : ARROW_RIGHT\n };\n };\n Splitter.prototype.collapsedOnchange = function (index) {\n if (!isNullOrUndefined(this.paneSettings[index]) && !isNullOrUndefined(this.paneSettings[index].collapsed)\n && this.allPanes[index].classList.contains(COLLAPSE_PANE)) {\n this.updateIsCollapsed(index, this.targetArrows().lastBarArrow, this.targetArrows().collapseArrow);\n }\n };\n Splitter.prototype.isEnabled = function (enabled) {\n // eslint-disable-next-line\n enabled ? removeClass([this.element], DISABLED) : addClass([this.element], DISABLED);\n };\n Splitter.prototype.setSeparatorSize = function (size) {\n var sizeValue = isNullOrUndefined(size) ? 'auto' : size + 'px';\n var separator = this.orientation === 'Horizontal' ? SPLIT_H_BAR : SPLIT_V_BAR;\n for (var index = 0; index < this.allBars.length; index++) {\n var splitBar = selectAll('.' + separator, this.element)[index];\n var resizeBar = selectAll('.' + RESIZE_BAR, splitBar)[0];\n if (this.orientation === 'Horizontal') {\n splitBar.style.width = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.width = sizeValue;\n }\n }\n else {\n splitBar.style.height = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.height = sizeValue;\n }\n }\n }\n };\n Splitter.prototype.changeOrientation = function (orientation) {\n var isVertical = orientation === 'Vertical';\n this.element.classList.remove(isVertical ? HORIZONTAL_PANE : VERTICAL_PANE);\n this.element.classList.add(isVertical ? VERTICAL_PANE : HORIZONTAL_PANE);\n for (var index = 0; index < this.allPanes.length; index++) {\n this.allPanes[index].classList.remove(isVertical ? SPLIT_H_PANE : SPLIT_V_PANE);\n this.allPanes[index].classList.add(isVertical ? SPLIT_V_PANE : SPLIT_H_PANE);\n }\n for (var index = 0; index < this.allBars.length; index++) {\n detach(this.allBars[index]);\n }\n this.allBars = [];\n this.addSeparator(this.element);\n };\n Splitter.prototype.checkSplitPane = function (currentBar, elementIndex) {\n var paneEle = this.collectPanes(currentBar.parentElement.children)[elementIndex];\n return paneEle;\n };\n Splitter.prototype.collectPanes = function (childNodes) {\n var elements = [];\n for (var i = 0; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains(PANE)) {\n elements.push(childNodes[i]);\n }\n }\n return elements;\n };\n Splitter.prototype.getPrevPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order + 1) : this.getOrderPane(order - 1);\n };\n Splitter.prototype.getNextPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order - 1) : this.getOrderPane(order + 1);\n };\n Splitter.prototype.getOrderPane = function (order) {\n var pane;\n for (var i = 0; i < this.element.children.length; i++) {\n if (parseInt(this.element.children[i].style.order, 10) === order) {\n pane = this.element.children[i];\n }\n }\n return pane;\n };\n Splitter.prototype.getOrderIndex = function (order, type) {\n var index;\n var panes;\n if (type === 'pane') {\n panes = this.allPanes;\n }\n else {\n panes = this.allBars;\n }\n for (var i = 0; i < panes.length; i++) {\n if (parseInt(panes[i].style.order, 10) === order) {\n index = i;\n }\n }\n return index;\n };\n Splitter.prototype.updateSeparatorSize = function (resizeHanlder) {\n var sizeValue = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? (resizeHanlder.style.width = sizeValue) : resizeHanlder.style.height = sizeValue;\n };\n Splitter.prototype.addResizeHandler = function (currentBar) {\n var resizeHanlder = this.createElement('div');\n addClass([resizeHanlder], [RESIZE_BAR, E_ICONS]);\n this.updateSeparatorSize(resizeHanlder);\n currentBar.appendChild(resizeHanlder);\n };\n Splitter.prototype.getHeight = function (target) {\n var height = this.height;\n height = target.style.height !== '' && this.height === '100%' ? target.style.height : this.height;\n return height;\n };\n Splitter.prototype.getWidth = function (target) {\n var width = this.width;\n width = target.style.width !== '' && this.width === '100%' ? target.style.width : this.width;\n return width;\n };\n Splitter.prototype.setDimension = function (height, width) {\n setStyleAttribute(this.element, { 'height': height, 'width': width });\n };\n Splitter.prototype.updateCollapseIcons = function (index, arrow1, arrow2) {\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? removeClass([arrow2], [HIDE_ICON]) : addClass([arrow2], [HIDE_ICON]);\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n if ((this.paneSettings[index + 1].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n }\n }\n }\n };\n Splitter.prototype.updateIconClass = function () {\n if (this.orientation === 'Horizontal') {\n this.leftArrow = ARROW_LEFT;\n this.rightArrow = ARROW_RIGHT;\n }\n else {\n this.leftArrow = ARROW_UP;\n this.rightArrow = ARROW_DOWN;\n }\n };\n Splitter.prototype.createSeparator = function (i) {\n var separator = this.createElement('div');\n this.allBars.push(separator);\n var arrow1 = this.createElement('button');\n var arrow2 = this.createElement('button');\n arrow1.setAttribute('tabindex', '-1');\n arrow2.setAttribute('tabindex', '-1');\n arrow1.setAttribute('aria-label', 'Toggle navigation');\n arrow2.setAttribute('aria-label', 'Toggle navigation');\n arrow1.setAttribute('type', 'button');\n arrow2.setAttribute('type', 'button');\n var size = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n var proxy = this;\n if (this.orientation === 'Horizontal') {\n this.updateIconClass();\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_LEFT, HIDE_ICON]);\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_RIGHT, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_H_BAR]);\n separator.style.width = size;\n }\n else {\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_DOWN, HIDE_ICON]);\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_UP, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_V_BAR]);\n this.updateIconClass();\n separator.style.height = size;\n }\n this.addMouseActions(separator);\n separator.appendChild(arrow2);\n this.addResizeHandler(separator);\n separator.appendChild(arrow1);\n this.updateCollapseIcons(i, arrow1, arrow2);\n separator.setAttribute('tabindex', '0');\n if (this.enableReversePanes) {\n separator.setAttribute('dir', 'ltr');\n }\n else {\n separator.removeAttribute('dir');\n }\n separator.addEventListener('focus', function () {\n separator.classList.add(SPLIT_BAR_ACTIVE);\n proxy.currentSeparator = separator;\n proxy.getPaneDetails();\n });\n separator.addEventListener('blur', function () {\n separator.classList.remove(SPLIT_BAR_ACTIVE);\n });\n return separator;\n };\n Splitter.prototype.updateResizablePanes = function (index) {\n this.getPaneDetails();\n // eslint-disable-next-line\n this.isResizable() ? this.allPanes[index].classList.add(RESIZABLE_PANE) : this.allPanes[index].classList.remove(RESIZABLE_PANE);\n };\n Splitter.prototype.addSeparator = function (target) {\n var childCount = this.allPanes.length;\n var clonedEle = target.children;\n var separator;\n var proxy;\n for (var i = 0; i < childCount; i++) {\n if (i < childCount - 1) {\n separator = this.createSeparator(i);\n setStyleAttribute(separator, { 'order': (i * 2) + 1 });\n this.separatorOrder.push((i * 2) + 1);\n clonedEle[i].parentNode.appendChild(separator);\n this.currentSeparator = separator;\n separator.setAttribute('role', 'separator');\n separator.setAttribute('aria-orientation', this.orientation.toLowerCase());\n this.wireClickEvents();\n if (!isNullOrUndefined(separator)) {\n if (this.isResizable()) {\n EventHandler.add(separator, 'mousedown', this.onMouseDown, this);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(separator, eventName, this.onMouseDown, this);\n separator.classList.add(RESIZABLE_BAR);\n this.updateResizablePanes(i);\n }\n else {\n addClass([select('.' + RESIZE_BAR, separator)], HIDE_HANDLER);\n }\n }\n }\n else {\n if (separator) {\n addClass([separator], LAST_BAR);\n }\n if (childCount > 1) {\n this.updateResizablePanes(i);\n }\n }\n }\n if (Browser.info.name === 'msie') {\n var allBar = this.element.querySelectorAll('.e-splitter .e-resize-handler');\n for (var i = 0; i < allBar.length; i++) {\n var sepSize = isNullOrUndefined(this.separatorSize) ? 1 : this.separatorSize;\n allBar[i].style.paddingLeft = sepSize / 2 + 'px';\n allBar[i].style.paddingRight = sepSize / 2 + 'px';\n }\n }\n };\n Splitter.prototype.isResizable = function () {\n var resizable = false;\n if ((!isNullOrUndefined(this.paneSettings[this.getPreviousPaneIndex()]) &&\n this.paneSettings[this.getPreviousPaneIndex()].resizable &&\n !isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()]) &&\n this.paneSettings[this.getNextPaneIndex()].resizable) ||\n isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()])) {\n resizable = true;\n }\n return resizable;\n };\n Splitter.prototype.addMouseActions = function (separator) {\n var _this = this;\n var sTout;\n var hoverTimeOut;\n separator.addEventListener('mouseenter', function () {\n /* istanbul ignore next */\n sTout = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n }, _this.iconsDelay);\n });\n separator.addEventListener('mouseleave', function () {\n clearTimeout(sTout);\n removeClass([separator], [SPLIT_BAR_HOVER]);\n });\n separator.addEventListener('mouseout', function () {\n clearTimeout(hoverTimeOut);\n });\n separator.addEventListener('mouseover', function () {\n /* istanbul ignore next */\n hoverTimeOut = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n }, _this.iconsDelay);\n });\n };\n Splitter.prototype.getEventType = function (e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n };\n Splitter.prototype.updateCurrentSeparator = function (target) {\n this.currentSeparator = this.isSeparator(target) ? target.parentElement : target;\n };\n Splitter.prototype.isSeparator = function (target) {\n return (target.classList.contains(SPLIT_BAR) ? false : true);\n };\n Splitter.prototype.isMouseEvent = function (e) {\n var isMouse = false;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType) &&\n this.getEventType(e.pointerType) === 'mouse')) {\n isMouse = true;\n }\n return isMouse;\n };\n Splitter.prototype.updateCursorPosition = function (e, type) {\n if (this.isMouseEvent(e)) {\n this.changeCoordinates({ x: e.pageX, y: e.pageY }, type);\n }\n else {\n var eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;\n this.changeCoordinates({ x: eventType.pageX, y: eventType.pageY }, type);\n }\n };\n Splitter.prototype.changeCoordinates = function (coordinates, type) {\n if (type === 'previous') {\n this.previousCoordinates = coordinates;\n }\n else {\n this.currentCoordinates = coordinates;\n }\n };\n Splitter.prototype.reportWindowSize = function () {\n var _this = this;\n var paneCount = this.allPanes.length;\n if (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onReportWindowSize);\n return;\n }\n for (var i = 0; i < paneCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n if (paneCount - 1 === i) {\n var staticPaneCount = this.element.querySelectorAll('.' + STATIC_PANE).length;\n if (staticPaneCount === paneCount) {\n removeClass([this.allPanes[i]], STATIC_PANE);\n }\n }\n }\n if (paneCount > 0) {\n setTimeout(function () {\n _this.updateSplitterSize(true);\n }, 200);\n }\n };\n Splitter.prototype.updateSplitterSize = function (iswindowResize) {\n var totalWidth = 0;\n var flexPaneIndexes = [];\n var flexCount = 0;\n var children = this.element.children;\n for (var i = 0, len = children.length; i < len; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n for (var j = 0, len = this.allBars.length; j < len; j++) {\n totalWidth += this.orientation === 'Horizontal' ? parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) +\n parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) : parseInt(getComputedStyle(this.allBars[j]).marginTop, 10) +\n parseInt(getComputedStyle(this.allBars[j]).marginBottom, 10);\n }\n var diff = this.orientation === 'Horizontal' ? this.element.offsetWidth -\n ((this.border * 2) + totalWidth) :\n this.element.offsetHeight - ((this.border * 2) + totalWidth);\n for (var i = 0, len = this.allPanes.length; i < len; i++) {\n if (this.allPanes[i].innerText === '' ? !(this.paneSettings[i].size) || !(this.allPanes[i].innerText === '')\n : !(this.paneSettings[i].size) && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n }\n var avgDiffWidth = diff / flexPaneIndexes.length;\n for (var j = 0, len = flexPaneIndexes.length; j < len; j++) {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = this.orientation === 'Horizontal' ?\n (this.allPanes[flexPaneIndexes[j]].offsetWidth + avgDiffWidth) + 'px' :\n (this.allPanes[flexPaneIndexes[j]].offsetHeight + avgDiffWidth) + 'px';\n }\n if (this.allPanes.length === 2 && iswindowResize) {\n var paneCount = this.allPanes.length;\n var minValue = void 0;\n var paneMinRange = void 0;\n var paneIndex = 0;\n var updatePane = void 0;\n var flexPane = void 0;\n for (var i = 0; i < paneCount; i++) {\n if (!isNullOrUndefined(this.paneSettings[i].min)) {\n paneMinRange = this.convertPixelToNumber((this.paneSettings[i].min).toString());\n if (this.paneSettings[i].min.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(this.paneSettings[i].min);\n }\n minValue = this.convertPixelToNumber((paneMinRange).toString());\n if ((this.orientation === 'Horizontal' ? this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight) < minValue) {\n if (i === paneIndex) {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i + 1];\n }\n else {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i - 1];\n }\n var sizeDiff = minValue - (this.orientation === 'Horizontal' ?\n this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight);\n var isPercent = updatePane.style.flexBasis.indexOf('%') > -1;\n var updatePaneOffset = this.orientation === 'Horizontal' ? updatePane.offsetWidth : updatePane.offsetHeight;\n updatePane.style.flexBasis = isPercent ? this.convertPixelToPercentage(updatePaneOffset + sizeDiff) + '%'\n : (updatePaneOffset + sizeDiff) + 'px';\n var flexPaneOffset = this.orientation === 'Horizontal' ? flexPane.offsetWidth : flexPane.offsetHeight;\n flexPane.style.flexBasis = flexPane.style.flexBasis.indexOf('%') > -1 ?\n this.convertPixelToPercentage(flexPaneOffset - sizeDiff) + '%' : (flexPaneOffset - sizeDiff) + 'px';\n }\n }\n }\n }\n };\n Splitter.prototype.wireResizeEvents = function () {\n document.addEventListener('mousemove', this.onMouseMoveHandler, true);\n document.addEventListener('mouseup', this.onMouseUpHandler, true);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.addEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.addEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.unwireResizeEvents = function () {\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.removeEventListener('mousemove', this.onMouseMoveHandler, true);\n document.removeEventListener('mouseup', this.onMouseUpHandler, true);\n document.removeEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.removeEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.wireClickEvents = function () {\n EventHandler.add(this.currentSeparator, 'touchstart click', this.clickHandler, this);\n };\n Splitter.prototype.clickHandler = function (e) {\n if (!e.target.classList.contains(NAVIGATE_ARROW)) {\n var hoverBars = selectAll('.' + ROOT + ' > .' + SPLIT_BAR + '.' + SPLIT_BAR_HOVER);\n if (hoverBars.length > 0) {\n removeClass(hoverBars, SPLIT_BAR_HOVER);\n }\n e.target.classList.add(SPLIT_BAR_HOVER);\n }\n var icon = e.target;\n if (icon.classList.contains(ARROW_LEFT) || icon.classList.contains(ARROW_UP)) {\n this.collapseAction(e);\n }\n if (icon.classList.contains(ARROW_RIGHT) || icon.classList.contains(ARROW_DOWN)) {\n this.expandAction(e);\n }\n this.updateSplitterSize();\n };\n Splitter.prototype.expandAction = function (e) {\n var _this = this;\n this.splitterDetails(e);\n var eventArgs = this.beforeAction(e);\n if (this.expandFlag) {\n this.trigger('beforeExpand', eventArgs, function (beforeExpandArgs) {\n if (!beforeExpandArgs.cancel) {\n _this.expandPane(e);\n }\n var expandEventArgs = _this.afterAction(e);\n _this.trigger('expanded', expandEventArgs);\n });\n }\n else {\n this.expandPane(e);\n }\n };\n Splitter.prototype.expandPane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (!this.previousPane.classList.contains(COLLAPSE_PANE) &&\n this.previousPane.classList.contains(STATIC_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.nextPane.classList.contains(EXPAND_PANE) && this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) && !(collapseCount === this.allPanes.length - 2));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n if (!this.previousPane.classList.contains(COLLAPSE_PANE)) {\n removeClass([this.nextPane], EXPAND_PANE);\n removeClass([this.previousPane], collapseClass);\n addClass([this.previousPane], EXPAND_PANE);\n addClass([this.nextPane], collapseClass);\n if (this.expandFlag) {\n this.updatePaneSettings(this.nextPaneIndex, true);\n }\n }\n else {\n removeClass([this.previousPane], collapseClass);\n removeClass([this.nextPane], EXPAND_PANE);\n if (this.expandFlag) {\n this.updatePaneSettings(this.prevPaneIndex, false);\n }\n }\n this.updateIconsOnExpand(e);\n this.previousPane.setAttribute('aria-expanded', 'true');\n this.nextPane.setAttribute('aria-expanded', 'false');\n this.updateFlexGrow(this.checkStaticPanes());\n if (flexStatus) {\n this.previousPane.classList.remove(EXPAND_PANE);\n this.previousPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.checkStaticPanes = function () {\n var staticPane = true;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.allPanes[i].classList.contains(COLLAPSE_PANE) && staticPane) {\n if (this.allPanes[i].classList.contains(STATIC_PANE)) {\n staticPane = true;\n }\n else {\n staticPane = false;\n }\n }\n }\n return staticPane;\n };\n Splitter.prototype.updateFlexGrow = function (status) {\n var collapseCount = 0;\n for (var j = 0; j < this.element.children.length; j++) {\n if (this.element.children[j].classList.contains(COLLAPSE_PANE)) {\n collapseCount = collapseCount + 1;\n }\n }\n var visiblePane = collapseCount === this.allPanes.length - 2;\n var panes = this.allPanes;\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.flexGrow = '';\n if (status && !this.nextPane.classList.contains(COLLAPSE_PANE)) {\n this.nextPane.style.flexGrow = '1';\n }\n if (visiblePane && this.allPanes[i].classList.contains(COLLAPSE_PANE) && this.paneSettings[i].size &&\n i !== this.allPanes.length - 1) {\n panes[i].style.flexGrow = '';\n }\n if (panes[i].classList.contains(EXPAND_PANE)) {\n panes[i].style.flexGrow = '1';\n }\n else if (panes[i].classList.contains(COLLAPSE_PANE)) {\n panes[i].style.flexGrow = '0';\n }\n }\n };\n Splitter.prototype.hideTargetBarIcon = function (targetBar, targetArrow) {\n addClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.showTargetBarIcon = function (targetBar, targetArrow) {\n removeClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.updateIconsOnCollapse = function (e) {\n this.splitterProperty();\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE)) {\n addClass([e.target], HIDE_ICON);\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n this.resizableModel(this.currentBarIndex, false);\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (this.previousPane.previousElementSibling && !this.previousPane.previousElementSibling.classList.contains(COLLAPSE_PANE)) {\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showTargetBarIcon(this.prevBar, this.leftArrow);\n }\n else if (!this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.leftArrow);\n }\n }\n if (!isNullOrUndefined(this.prevBar)) {\n this.resizableModel(this.currentBarIndex - 1, false);\n this.hideTargetBarIcon(this.prevBar, this.arrow);\n }\n if (!this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else if (!this.splitInstance.prevPaneCollapsed && !this.splitInstance.nextPaneExpanded) {\n if (this.paneSettings[this.currentBarIndex].resizable) {\n this.resizableModel(this.currentBarIndex, true);\n }\n if (!this.splitInstance.nextPaneNextEle.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.currentBarIndex + 1].resizable) {\n this.resizableModel(this.currentBarIndex + 1, true);\n }\n if (!this.paneSettings[this.currentBarIndex].collapsible) {\n addClass([e.target], HIDE_ICON);\n }\n if (this.previousPane && this.prevPaneIndex === 0 && (this.paneSettings[this.prevPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.currentSeparator, this.leftArrow);\n }\n if (this.nextPane && this.nextPaneIndex === this.allPanes.length - 1 && (this.paneSettings[this.nextPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.getPrevBar(this.nextPaneIndex), this.rightArrow);\n }\n if (!(this.previousPane.classList.contains(COLLAPSE_PANE)) && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n if (!isNullOrUndefined(this.nextBar)) {\n if (this.nextPane.nextElementSibling && (this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.nextPaneIndex + 1].collapsible) ||\n (!this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.nextPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.nextBar, this.leftArrow);\n }\n else if (!this.paneSettings[this.splitInstance.nextPaneIndex + 1].collapsible &&\n this.paneSettings[this.currentBarIndex]) {\n this.hideTargetBarIcon(this.nextBar, this.arrow);\n }\n }\n if (!(this.nextPaneIndex === this.allPanes.length - 1) && this.nextPane.nextElementSibling &&\n !this.nextPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE)\n && !this.paneSettings[this.nextPaneIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.nextBar, this.rightArrow);\n }\n }\n };\n Splitter.prototype.collapseAction = function (e) {\n var _this = this;\n this.splitterDetails(e);\n var eventArgs = this.beforeAction(e);\n if (this.collapseFlag) {\n this.collapsePane(e);\n }\n else {\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n _this.collapsePane(e);\n var collapseEventArgs = _this.afterAction(e);\n _this.trigger('collapsed', collapseEventArgs);\n }\n });\n }\n };\n Splitter.prototype.collapsePane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (this.previousPane.classList.contains(STATIC_PANE) &&\n !this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n !(collapseCount === this.allPanes.length - 2)) || (this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.previousPane.classList.contains(STATIC_PANE) && this.nextPane.classList.contains(STATIC_PANE));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n if (this.nextPane.classList.contains(COLLAPSE_PANE)) {\n removeClass([this.previousPane], EXPAND_PANE);\n removeClass([this.nextPane], collapseClass);\n if (!this.collapseFlag) {\n this.updatePaneSettings(this.nextPaneIndex, false);\n }\n }\n else {\n removeClass([this.previousPane], EXPAND_PANE);\n removeClass([this.nextPane], collapseClass);\n addClass([this.nextPane], EXPAND_PANE);\n addClass([this.previousPane], collapseClass);\n if (!this.collapseFlag) {\n this.updatePaneSettings(this.prevPaneIndex, true);\n }\n }\n this.updateIconsOnCollapse(e);\n this.previousPane.setAttribute('aria-expanded', 'false');\n this.nextPane.setAttribute('aria-expanded', 'true');\n this.updateFlexGrow(this.checkStaticPanes());\n if (flexStatus) {\n this.nextPane.classList.remove(EXPAND_PANE);\n this.nextPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.removeStaticPanes = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n }\n };\n Splitter.prototype.beforeAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n cancel: false\n };\n return eventArgs;\n };\n Splitter.prototype.updatePaneSettings = function (index, collapsed) {\n var paneValues = this.paneSettings;\n paneValues[index].collapsed = collapsed;\n this.setProperties({ 'paneSettings': paneValues }, true);\n };\n Splitter.prototype.splitterProperty = function () {\n this.splitInstance = {\n currentBarIndex: this.currentBarIndex,\n nextPaneCollapsible: this.nextPane.classList.contains(COLLAPSIBLE),\n prevPaneCollapsible: this.previousPane.classList.contains(COLLAPSIBLE),\n prevPaneExpanded: this.previousPane.classList.contains(EXPAND_PANE),\n nextPaneExpanded: this.nextPane.classList.contains(EXPAND_PANE),\n nextPaneCollapsed: this.nextPane.classList.contains(COLLAPSE_PANE),\n prevPaneCollapsed: this.previousPane.classList.contains(COLLAPSE_PANE),\n nextPaneIndex: this.getNextPaneIndex(),\n prevPaneIndex: this.getPreviousPaneIndex(),\n nextPaneNextEle: this.nextPane.nextElementSibling,\n prevPanePreEle: this.previousPane.previousElementSibling\n };\n };\n Splitter.prototype.showCurrentBarIcon = function () {\n removeClass([select('.' + this.arrow, this.currentSeparator)], HIDE_ICON);\n };\n Splitter.prototype.updateIconsOnExpand = function (e) {\n this.splitterProperty();\n addClass([e.target], HIDE_ICON);\n if (!this.splitInstance.prevPaneExpanded && !this.splitInstance.nextPaneCollapsed) {\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n if (this.paneSettings[this.nextPaneIndex].collapsible) {\n removeClass([e.target], HIDE_ICON);\n }\n if (this.paneSettings[this.currentBarIndex].resizable) {\n this.resizableModel(this.currentBarIndex, true);\n }\n if (!isNullOrUndefined(this.prevBar) &&\n !this.splitInstance.prevPanePreEle.classList.contains(COLLAPSE_PANE)) {\n if (this.paneSettings[this.currentBarIndex - 1].resizable) {\n this.resizableModel(this.currentBarIndex - 1, true);\n }\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (!this.paneSettings[this.currentBarIndex - 1].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.arrow);\n if (this.paneSettings[this.currentBarIndex].collapsible &&\n !this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else if (this.paneSettings[this.currentBarIndex].collapsible &&\n !this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else {\n if (this.previousPane.previousElementSibling && this.paneSettings[this.prevPaneIndex].collapsible &&\n (this.previousPane.previousElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.prevPaneIndex - 1].collapsible)) {\n this.showTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (!this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n }\n else if (this.splitInstance.prevPaneExpanded && this.splitInstance.nextPaneCollapsed) {\n this.resizableModel(this.currentBarIndex, false);\n this.resizableModel(this.currentBarIndex + 1, false);\n if (this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n if (!isNullOrUndefined(this.nextBar)) {\n this.hideTargetBarIcon(this.nextBar, this.arrow);\n }\n if (this.nextPane && this.nextPaneIndex === this.allPanes.length - 1 && (!this.paneSettings[this.nextPaneIndex].collapsible &&\n this.splitInstance.nextPaneCollapsed)) {\n this.hideTargetBarIcon(this.currentSeparator, this.arrow);\n }\n if (!(this.nextPaneIndex === this.allPanes.length - 1) && this.nextPane.nextElementSibling &&\n this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE)\n && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showTargetBarIcon(this.nextBar, this.rightArrow);\n }\n }\n };\n Splitter.prototype.afterAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator\n };\n return eventArgs;\n };\n Splitter.prototype.currentIndex = function (e) {\n this.currentBarIndex = this.getOrderIndex(parseInt(e.target.parentElement.style.order, 10), 'splitbar');\n };\n Splitter.prototype.getSeparatorIndex = function (target) {\n var array = [].slice.call(this.allBars);\n array = this.enableReversePanes ? array.reverse() : array;\n return array.indexOf(target);\n };\n Splitter.prototype.getPrevBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar - 1)];\n return prevbar;\n };\n Splitter.prototype.getNextBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar + 1)];\n return prevbar;\n };\n Splitter.prototype.updateBars = function (index) {\n this.prevBar = this.getPrevBar(index);\n this.nextBar = this.getNextBar(index);\n };\n Splitter.prototype.splitterDetails = function (e) {\n if (this.orientation === 'Horizontal') {\n this.arrow = e.target.classList.contains(ARROW_LEFT) ? ARROW_RIGHT : ARROW_LEFT;\n }\n else {\n this.arrow = e.target.classList.contains(ARROW_UP) ? ARROW_DOWN : ARROW_UP;\n }\n this.updateCurrentSeparator(e.target);\n this.currentIndex(e);\n this.updateBars(this.currentBarIndex);\n this.getPaneDetails();\n };\n Splitter.prototype.triggerResizing = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n paneSize: [this.prePaneDimenson, this.nextPaneDimension],\n separator: this.currentSeparator\n };\n this.trigger('resizing', eventArgs);\n };\n Splitter.prototype.onMouseDown = function (e) {\n var _this = this;\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(NAVIGATE_ARROW)) {\n return;\n }\n this.updateCurrentSeparator(target);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.updateCursorPosition(e, 'previous');\n this.getPaneDetails();\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.getPreviousPaneIndex(), this.getNextPaneIndex()],\n separator: this.currentSeparator,\n cancel: false\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'none';\n }\n this.trigger('resizeStart', eventArgs, function (resizeStartArgs) {\n if (!resizeStartArgs.cancel) {\n _this.wireResizeEvents();\n _this.checkPaneSize(e);\n }\n });\n };\n Splitter.prototype.updatePaneFlexBasis = function (pane) {\n var previous;\n if (pane.style.flexBasis.indexOf('%') > 0) {\n previous = this.removePercentageUnit(pane.style.flexBasis);\n }\n else {\n if (pane.style.flexBasis !== '') {\n previous = this.convertPixelToPercentage(this.convertPixelToNumber(pane.style.flexBasis));\n }\n else {\n var offset = (this.orientation === 'Horizontal') ? (pane.offsetWidth) : (pane.offsetHeight);\n previous = this.convertPixelToPercentage(offset);\n }\n }\n return previous;\n };\n Splitter.prototype.removePercentageUnit = function (value) {\n return parseFloat(value.slice(0, value.indexOf('%')));\n };\n Splitter.prototype.convertPercentageToPixel = function (value, targetElement) {\n var percentage = value.toString();\n var convertedValue;\n if (percentage.indexOf('%') > -1) {\n convertedValue = parseFloat(percentage.slice(0, percentage.indexOf('%')));\n var offsetValue = void 0;\n if (!isNullOrUndefined(targetElement)) {\n offsetValue = this.panesDimensions[this.allPanes.indexOf(targetElement)];\n }\n else {\n offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n }\n convertedValue = Math.ceil(offsetValue * (convertedValue / 100));\n }\n else {\n convertedValue = parseInt(percentage, 10);\n }\n return convertedValue;\n };\n Splitter.prototype.convertPixelToPercentage = function (value) {\n var offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return (value / offsetValue) * 100;\n };\n Splitter.prototype.convertPixelToNumber = function (value) {\n if (value.indexOf('p') > -1) {\n return parseFloat(value.slice(0, value.indexOf('p')));\n }\n else {\n return parseFloat(value);\n }\n };\n Splitter.prototype.calcDragPosition = function (rectValue, offsetValue) {\n var separatorPosition = this.orientation === 'Horizontal' ? (this.currentCoordinates.x - rectValue) :\n (this.currentCoordinates.y - rectValue);\n var separator;\n separator = separatorPosition / offsetValue;\n separator = (separator > 1) ? 1 : (separator < 0) ? 0 : separator;\n return separator * offsetValue;\n };\n Splitter.prototype.getSeparatorPosition = function (e) {\n this.updateCursorPosition(e, 'current');\n var rectBound = (this.orientation === 'Horizontal') ? this.element.getBoundingClientRect().left + window.scrollX :\n this.element.getBoundingClientRect().top + window.scrollY;\n var offSet = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return this.calcDragPosition(rectBound, offSet);\n };\n Splitter.prototype.getMinMax = function (paneIndex, target, selection) {\n var defaultVal = selection === 'min' ? 0 : null;\n // eslint-disable-next-line\n var paneValue = null;\n if (selection === 'min') {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneValue = this.paneSettings[paneIndex].min;\n }\n }\n else {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneValue = this.paneSettings[paneIndex].max;\n }\n }\n if (this.paneSettings.length > 0 && !isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(paneValue)) {\n if (paneValue.indexOf('%') > 0) {\n paneValue = this.convertPercentageToPixel(paneValue).toString();\n }\n return this.convertPixelToNumber(paneValue);\n }\n else {\n return defaultVal;\n }\n };\n Splitter.prototype.getPreviousPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) + 1 :\n parseInt(this.currentSeparator.style.order, 10) - 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getNextPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) - 1 :\n parseInt(this.currentSeparator.style.order, 10) + 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getPaneDetails = function () {\n var prevPane = null;\n var nextPane = null;\n this.order = parseInt(this.currentSeparator.style.order, 10);\n if (this.allPanes.length > 1) {\n prevPane = this.getPrevPane(this.order);\n nextPane = this.getNextPane(this.order);\n }\n if (prevPane && nextPane) {\n this.previousPane = prevPane;\n this.nextPane = nextPane;\n this.prevPaneIndex = this.getPreviousPaneIndex();\n this.nextPaneIndex = this.getNextPaneIndex();\n }\n else {\n return;\n }\n };\n Splitter.prototype.getPaneHeight = function (pane) {\n return ((this.orientation === 'Horizontal') ? pane.offsetWidth.toString() :\n pane.offsetHeight.toString());\n };\n Splitter.prototype.isValidSize = function (paneIndex) {\n var isValid = false;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].size) &&\n this.paneSettings[paneIndex].size.indexOf('%') > -1) {\n isValid = true;\n }\n return isValid;\n };\n Splitter.prototype.getPaneDimensions = function () {\n this.previousPaneHeightWidth = (this.previousPane.style.flexBasis === '') ? this.getPaneHeight(this.previousPane) :\n this.previousPane.style.flexBasis;\n this.nextPaneHeightWidth = (this.nextPane.style.flexBasis === '') ? this.getPaneHeight(this.nextPane) :\n this.nextPane.style.flexBasis;\n if (this.isValidSize(this.prevPaneIndex)) {\n this.previousPaneHeightWidth = this.convertPercentageToPixel(this.previousPaneHeightWidth).toString();\n this.updatePrePaneInPercentage = true;\n }\n if (this.isValidSize(this.nextPaneIndex)) {\n this.nextPaneHeightWidth = this.convertPercentageToPixel(this.nextPaneHeightWidth).toString();\n this.updateNextPaneInPercentage = true;\n }\n this.prePaneDimenson = this.convertPixelToNumber(this.previousPaneHeightWidth.toString());\n this.nextPaneDimension = this.convertPixelToNumber(this.nextPaneHeightWidth.toString());\n };\n Splitter.prototype.checkCoordinates = function (pageX, pageY) {\n var coordinatesChanged = true;\n if ((pageX === this.previousCoordinates.x || pageY === this.previousCoordinates.y)) {\n coordinatesChanged = false;\n }\n return coordinatesChanged;\n };\n Splitter.prototype.isCursorMoved = function (e) {\n var cursorMoved = true;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType)) &&\n this.getEventType(e.pointerType) === 'mouse') {\n cursorMoved = this.checkCoordinates(e.pageX, e.pageY);\n }\n else {\n cursorMoved = (Browser.info.name !== 'msie') ?\n this.checkCoordinates(e.touches[0].pageX, e.touches[0].pageY) :\n this.checkCoordinates(e.pageX, e.pageY);\n }\n return cursorMoved;\n };\n Splitter.prototype.getBorder = function () {\n this.border = 0;\n var border = this.orientation === 'Horizontal' ? ((this.element.offsetWidth - this.element.clientWidth) / 2) :\n (this.element.offsetHeight - this.element.clientHeight) / 2;\n this.border = Browser.info.name !== 'chrome' ? this.border : border;\n };\n Splitter.prototype.onMouseMove = function (e) {\n if (!this.isCursorMoved(e)) {\n return;\n }\n this.getPaneDetails();\n this.getPaneDimensions();\n this.triggerResizing(e);\n var left = this.validateDraggedPosition(this.getSeparatorPosition(e), this.prePaneDimenson, this.nextPaneDimension);\n var separatorNewPosition;\n this.getBorder();\n if (this.orientation === 'Horizontal') {\n separatorNewPosition = (this.element.getBoundingClientRect().left + left) -\n this.currentSeparator.getBoundingClientRect().left + this.border;\n }\n else {\n separatorNewPosition = (this.element.getBoundingClientRect().top + left) -\n this.currentSeparator.getBoundingClientRect().top + this.border;\n }\n this.nextPaneHeightWidth =\n (typeof (this.nextPaneHeightWidth) === 'string' && this.nextPaneHeightWidth.indexOf('p') > -1) ?\n this.convertPixelToNumber(this.nextPaneHeightWidth) : parseInt(this.nextPaneHeightWidth, 10);\n this.prevPaneCurrentWidth = separatorNewPosition + this.convertPixelToNumber(this.previousPaneHeightWidth);\n this.nextPaneCurrentWidth = this.nextPaneHeightWidth - separatorNewPosition;\n this.validateMinMaxValues();\n if (this.nextPaneCurrentWidth < 0) {\n this.nextPaneCurrentWidth = 0;\n }\n /* istanbul ignore next */\n if (this.prevPaneCurrentWidth < 0) {\n this.prevPaneCurrentWidth = 0;\n }\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) > this.totalWidth) {\n if (this.nextPaneCurrentWidth < this.prevPaneCurrentWidth) {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n else {\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n }\n /* istanbul ignore next */\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) < this.totalWidth) {\n var difference = this.totalWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth));\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + difference;\n }\n this.calculateCurrentDimensions();\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = this.prevPaneCurrentWidth;\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n if (!(this.allPanes.length > 2)) {\n this.updateSplitterSize();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMinRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMinRange = null;\n var paneMinDimensions;\n var difference = 0;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneMinRange = this.paneSettings[paneIndex].min.toString();\n }\n if (!isNullOrUndefined(paneMinRange)) {\n if (paneMinRange.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(paneMinRange).toString();\n }\n paneMinDimensions = this.convertPixelToNumber(paneMinRange);\n if (paneCurrentWidth < paneMinDimensions) {\n difference = (paneCurrentWidth - paneMinDimensions) <= 0 ? 0 :\n (paneCurrentWidth - paneMinDimensions);\n this.totalWidth = this.totalWidth - difference;\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMinDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMaxRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMaxRange = null;\n var paneMaxDimensions;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneMaxRange = this.paneSettings[paneIndex].max.toString();\n }\n if (!isNullOrUndefined(paneMaxRange)) {\n if (paneMaxRange.indexOf('%') > 0) {\n paneMaxRange = this.convertPercentageToPixel(paneMaxRange).toString();\n }\n paneMaxDimensions = this.convertPixelToNumber(paneMaxRange);\n if (paneCurrentWidth > paneMaxDimensions) {\n this.totalWidth = this.totalWidth - (paneCurrentWidth - paneMaxDimensions);\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMaxDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n Splitter.prototype.validateMinMaxValues = function () {\n //validate previous pane minimum range\n this.prevPaneCurrentWidth = this.validateMinRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // Validate next pane minimum range\n this.nextPaneCurrentWidth = this.validateMinRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n // validate previous pane maximum range\n this.prevPaneCurrentWidth = this.validateMaxRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // validate next pane maximum range\n this.nextPaneCurrentWidth = this.validateMaxRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n };\n Splitter.prototype.equatePaneWidths = function () {\n var difference;\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) > this.totalPercent) {\n difference = (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) - this.totalPercent;\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - (difference / 2) + '%';\n }\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) < this.totalPercent) {\n difference = this.totalPercent - (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth);\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + (difference / 2) + '%';\n }\n };\n Splitter.prototype.calculateCurrentDimensions = function () {\n if (this.updatePrePaneInPercentage || this.updateNextPaneInPercentage) {\n this.prevPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.prevPaneCurrentWidth)\n * 10) / 10));\n this.nextPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.nextPaneCurrentWidth)\n * 10) / 10));\n if (this.prevPaneCurrentWidth === 0) {\n this.nextPaneCurrentWidth = this.totalPercent;\n }\n if (this.nextPaneCurrentWidth === 0) {\n this.prevPaneCurrentWidth = this.totalPercent;\n }\n if (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth !== this.totalPercent) {\n this.equatePaneWidths();\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + '%';\n }\n this.prevPaneCurrentWidth = (this.updatePrePaneInPercentage) ? this.prevPaneCurrentWidth :\n this.convertPercentageToPixel(this.prevPaneCurrentWidth) + 'px';\n this.nextPaneCurrentWidth = (this.updateNextPaneInPercentage) ? this.nextPaneCurrentWidth :\n this.convertPercentageToPixel(this.nextPaneCurrentWidth) + 'px';\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + 'px';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + 'px';\n }\n };\n Splitter.prototype.addStaticPaneClass = function () {\n if (!this.previousPane.classList.contains(STATIC_PANE)) {\n this.previousPane.classList.add(STATIC_PANE);\n }\n if (!this.nextPane.classList.contains(STATIC_PANE)) {\n this.nextPane.classList.add(STATIC_PANE);\n }\n };\n Splitter.prototype.validateDraggedPosition = function (draggedPos, prevPaneHeightWidth, nextPaneHeightWidth) {\n var separatorTopLeft = (this.orientation === 'Horizontal') ? this.currentSeparator.offsetLeft :\n this.currentSeparator.offsetTop;\n var prePaneRange = separatorTopLeft - prevPaneHeightWidth;\n var nextPaneRange = nextPaneHeightWidth + separatorTopLeft;\n var pane1MinSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'min');\n var pane2MinSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'min');\n var pane1MaxSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'max');\n var pane2MaxSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'max');\n var validatedSize = draggedPos;\n if (draggedPos > nextPaneRange - pane2MinSize) {\n validatedSize = nextPaneRange - pane2MinSize;\n }\n else if (draggedPos < prePaneRange + pane1MinSize) {\n validatedSize = prePaneRange + pane1MinSize;\n }\n if (!isNullOrUndefined(pane1MaxSize)) {\n if (draggedPos > prePaneRange + pane1MaxSize) {\n validatedSize = prePaneRange + pane1MaxSize;\n }\n }\n else if (!isNullOrUndefined(pane2MaxSize)) {\n if (draggedPos < nextPaneRange - pane2MaxSize) {\n validatedSize = nextPaneRange - pane2MaxSize;\n }\n }\n return validatedSize;\n };\n Splitter.prototype.onMouseUp = function (e) {\n removeClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.unwireResizeEvents();\n var eventArgs = {\n event: e,\n element: this.element,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n paneSize: [this.prePaneDimenson, this.nextPaneDimension]\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'auto';\n }\n this.trigger('resizeStop', eventArgs);\n if (this.enablePersistence) {\n var paneValues = this.paneSettings;\n paneValues[this.getPreviousPaneIndex()].size = this.allPanes[this.getPreviousPaneIndex()].style.flexBasis;\n paneValues[this.getNextPaneIndex()].size = this.allPanes[this.getNextPaneIndex()].style.flexBasis;\n this.setProperties({ 'paneSettings': paneValues }, true);\n }\n };\n Splitter.prototype.panesDimension = function (index, child) {\n var childCount = child.length;\n var size;\n parseInt(this.getHeight(this.element), 10);\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].size)) {\n size = this.paneSettings[index].size;\n if (index < childCount) {\n setStyleAttribute(child[index], { 'flex-basis': size, 'order': index * 2 });\n if (index < childCount - 1 && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n else if (!this.sizeFlag) {\n child[index].style.flexBasis = null;\n }\n if ((index === childCount - 1) && this.sizeFlag && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n }\n }\n else {\n this.sizeFlag = true;\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n }\n else {\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n this.paneOrder.push(index * 2);\n };\n Splitter.prototype.setTemplate = function (template, toElement) {\n toElement.innerHTML = '';\n template = typeof (template) === 'string' ? this.sanitizeHelper(template) : template;\n this.templateCompile(toElement, template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.templateCompile = function (ele, cnt) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n [].slice.call(tempEle.childNodes).forEach(function (childEle) {\n ele.appendChild(childEle);\n });\n }\n };\n Splitter.prototype.compileElement = function (ele, val, prop) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n if (typeof (val) === 'string') {\n if (val[0] === '.' || val[0] === '#') {\n var eleVal = document.querySelector(val);\n if (!isNullOrUndefined(eleVal)) {\n this.templateElement.push(eleVal);\n if (eleVal.style.display === 'none') {\n eleVal.style.removeProperty('display');\n }\n if (eleVal.getAttribute('style') === '') {\n eleVal.removeAttribute('style');\n }\n ele.appendChild(eleVal);\n return;\n }\n else {\n val = val.trim();\n }\n }\n else {\n val = val.trim();\n }\n }\n var templateFn;\n if (!isNullOrUndefined(val.outerHTML)) {\n templateFn = compile(val.outerHTML);\n }\n else {\n templateFn = compile(val);\n }\n var templateFUN;\n if (!isNullOrUndefined(templateFn)) {\n templateFUN = templateFn({}, this, prop, this.element.id + 'content' + this.allPanes.length.toString(), true);\n }\n if (!isNullOrUndefined(templateFn) && templateFUN && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Splitter.prototype.paneCollapsible = function (pane, index) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? addClass([pane], COLLAPSIBLE) : removeClass([pane], COLLAPSIBLE);\n };\n Splitter.prototype.createSplitPane = function (target) {\n var childCount = target.children.length;\n for (var i = 0; i < this.paneSettings.length; i++) {\n if (childCount < this.paneSettings.length) {\n var childElement = this.createElement('div');\n this.element.appendChild(childElement);\n childCount = childCount + 1;\n }\n }\n childCount = target.children.length;\n var child = [].slice.call(target.children);\n this.sizeFlag = false;\n if (childCount > 0) {\n for (var i = 0; i < childCount; i++) {\n // To accept only div and span element as pane\n if (child[i].nodeName === 'DIV' || child[i].nodeName === 'SPAN') {\n this.allPanes.push(child[i]);\n if (this.orientation === 'Horizontal') {\n addClass([child[i]], [PANE, SPLIT_H_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n else {\n addClass([child[i]], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && !isNullOrUndefined(this.paneSettings[i].content)) {\n this.setTemplate(this.paneSettings[i].content, child[i]);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && this.paneSettings[i].cssClass) {\n this.setCssClass(child[i], this.paneSettings[i].cssClass);\n }\n if (!isNullOrUndefined(this.paneSettings[i])) {\n this.paneCollapsible(child[i], i);\n }\n }\n }\n }\n };\n /**\n * expands corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be expanded at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.expand = function (index) {\n this.collapsedOnchange(index);\n this.updatePaneSettings(index, false);\n };\n /**\n * collapses corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be collapsed at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.collapse = function (index) {\n this.isCollapsed(index);\n this.updatePaneSettings(index, true);\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n Splitter.prototype.destroy = function () {\n if (!this.isDestroyed) {\n _super.prototype.destroy.call(this);\n EventHandler.remove(document, 'touchstart click', this.onDocumentClick);\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize, true);\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n this.element.innerHTML = this.wrapper.innerHTML;\n for (var i = 0; i < this.wrapper.attributes.length; i++) {\n this.element.setAttribute(this.wrapper.attributes[i].name, this.wrapper.attributes[i].value);\n }\n if (this.refreshing) {\n addClass([this.element], ['e-control', 'e-lib', ROOT]);\n this.allBars = [];\n this.allPanes = [];\n }\n this.restoreElem();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n }\n };\n Splitter.prototype.restoreElem = function () {\n if (this.templateElement.length > 0) {\n for (var i = 0; i < this.templateElement.length; i++) {\n this.templateElement[i].style.display = 'none';\n document.body.appendChild(this.templateElement[i]);\n }\n }\n };\n Splitter.prototype.addPaneClass = function (pane) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? addClass([pane], [PANE, SPLIT_H_PANE, SCROLL_PANE]) :\n addClass([pane], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n return pane;\n };\n Splitter.prototype.removePaneOrders = function (paneClass) {\n var childNodes = this.element.childNodes;\n var panes = [];\n for (var i = 0; childNodes.length < 0; i++) {\n if (childNodes[i].classList.contains(paneClass)) {\n panes.push(childNodes[i]);\n }\n }\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.removeProperty('order');\n }\n };\n Splitter.prototype.setPaneOrder = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n this.panesDimension(i, this.allPanes);\n }\n };\n Splitter.prototype.removeSeparator = function () {\n for (var i = 0; i < this.allBars.length; i++) {\n detach(this.allBars[i]);\n }\n this.allBars = [];\n };\n Splitter.prototype.updatePanes = function () {\n this.setPaneOrder();\n this.removeSeparator();\n this.addSeparator(this.element);\n };\n /**\n * Allows you to add a pane dynamically to the specified index position by passing the pane properties.\n *\n * @param { PanePropertiesModel } paneProperties - Specifies the pane’s properties that apply to new pane.\n * @param { number } index - Specifies the index where the pane will be inserted.\n * @returns {void}\n */\n Splitter.prototype.addPane = function (paneProperties, index) {\n var newPane = this.createElement('div');\n newPane = this.addPaneClass(newPane);\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var paneDetails = {\n size: isNullOrUndefined(paneProperties.size) ? '' : paneProperties.size,\n min: isNullOrUndefined(paneProperties.min) ? null : paneProperties.min,\n max: isNullOrUndefined(paneProperties.max) ? null : paneProperties.max,\n content: isNullOrUndefined(paneProperties.content) ? '' : paneProperties.content,\n resizable: isNullOrUndefined(paneProperties.resizable) ? true : paneProperties.resizable,\n collapsible: isNullOrUndefined(paneProperties.collapsible) ? false : paneProperties.collapsible,\n collapsed: isNullOrUndefined(paneProperties.collapsed) ? false : paneProperties.collapsed,\n cssClass: isNullOrUndefined(paneProperties.cssClass) ? '' : paneProperties.cssClass\n };\n this.paneSettings.splice(index, 0, paneDetails);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.orientation === 'Horizontal') {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_H_PANE)[index]);\n this.removePaneOrders(SPLIT_H_PANE);\n }\n else {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_V_PANE)[index]);\n this.removePaneOrders(SPLIT_V_PANE);\n }\n this.allPanes.splice(index, 0, newPane);\n this.updatePanes();\n this.setTemplate(this.paneSettings[index].content, newPane);\n this.setCssClass(this.allPanes[index], paneProperties.cssClass);\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n };\n /**\n * Allows you to remove the specified pane dynamically by passing its index value.\n *\n * @param { number } index - Specifies the index value to remove the corresponding pane.\n * @returns {void}\n */\n Splitter.prototype.removePane = function (index) {\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var elementClass = (this.orientation === 'Horizontal') ? SPLIT_H_PANE : SPLIT_V_PANE;\n if (isNullOrUndefined(this.element.querySelectorAll('.' + elementClass)[index])) {\n return;\n }\n detach(this.element.querySelectorAll('.' + elementClass)[index]);\n this.allPanes.splice(index, 1);\n this.removePaneOrders(elementClass);\n this.updatePanes();\n this.paneSettings.splice(index, 1);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.allPanes.length > 0) {\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n }\n };\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enableReversePanes\", void 0);\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enablePersistence\", void 0);\n __decorate([\n Collection([], PaneProperties)\n ], Splitter.prototype, \"paneSettings\", void 0);\n __decorate([\n Property('Horizontal')\n ], Splitter.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Splitter.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(null)\n ], Splitter.prototype, \"separatorSize\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeCollapse\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeExpand\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"expanded\", void 0);\n Splitter = __decorate([\n NotifyPropertyChanges\n ], Splitter);\n return Splitter;\n}(Component));\nexport { Splitter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, isUndefined } from '@syncfusion/ej2-base';\nimport { Collection, Draggable, isNullOrUndefined, append, setValue } from '@syncfusion/ej2-base';\nimport { Event, formatUnit, ChildProperty, compile, closest, SanitizeHtmlHelper, getValue } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, detach, removeClass, EventHandler, Browser, extend } from '@syncfusion/ej2-base';\n// constant class definitions\nvar preventSelect = 'e-prevent';\nvar dragging = 'e-dragging';\nvar draggable = 'e-draggable';\nvar dragRestrict = 'e-drag-restrict';\nvar drag = 'e-drag';\nvar resize = 'e-resize';\nvar resizeicon = 'e-dl-icon';\nvar responsive = 'e-responsive';\nvar east = 'e-east';\nvar west = 'e-west';\nvar north = 'e-north';\nvar south = 'e-south';\nvar single = 'e-single';\nvar double = 'e-double';\nvar northEast = 'e-north-east';\nvar southEast = 'e-south-east';\nvar northWest = 'e-north-west';\nvar southWest = 'e-south-west';\nvar panel = 'e-panel';\nvar panelContent = 'e-panel-content';\nvar panelContainer = 'e-panel-container';\nvar disable = 'e-disabled';\nvar header = 'e-panel-header';\nvar panelTransition = 'e-panel-transition';\n/**\n * Defines the panel of the DashboardLayout component.\n */\nvar Panel = /** @class */ (function (_super) {\n __extends(Panel, _super);\n function Panel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Panel.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"header\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Panel.prototype, \"enabled\", void 0);\n __decorate([\n Property(0)\n ], Panel.prototype, \"row\", void 0);\n __decorate([\n Property(0)\n ], Panel.prototype, \"col\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"sizeX\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"sizeY\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"minSizeY\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"minSizeX\", void 0);\n __decorate([\n Property(null)\n ], Panel.prototype, \"maxSizeY\", void 0);\n __decorate([\n Property(null)\n ], Panel.prototype, \"maxSizeX\", void 0);\n __decorate([\n Property(1000)\n ], Panel.prototype, \"zIndex\", void 0);\n return Panel;\n}(ChildProperty));\nexport { Panel };\n/**\n * The DashboardLayout is a grid structured layout control, that helps to create a dashboard with panels.\n * Panels hold the UI components or data to be visualized with flexible options like resize, reorder, drag-n-drop, remove and add,\n * that allows users to easily place the panels at a desired position within the grid layout.\n * ```html\n * <div id=\"default-layout\">\n * ```\n * ```typescript\n * <script>\n * let dashBoardObject : DashboardLayout = new DashboardLayout();\n * dashBoardObject.appendTo('#default-layout');\n * </script>\n * ```\n */\nvar DashboardLayout = /** @class */ (function (_super) {\n __extends(DashboardLayout, _super);\n function DashboardLayout(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.rows = 1;\n _this.panelID = 0;\n _this.movePanelCalled = false;\n _this.resizeCalled = false;\n _this.mOffX = 0;\n _this.mOffY = 0;\n _this.maxTop = 9999;\n _this.maxRows = 100;\n _this.mouseX = 0;\n _this.mouseY = 0;\n _this.minTop = 0;\n _this.minLeft = 0;\n _this.isInlineRendering = false;\n _this.removeAllCalled = false;\n // to check whether removePanel is executed in mobile device\n _this.isPanelRemoved = false;\n // to maintain sizeY in mobile device\n _this.panelsSizeY = 0;\n _this.resizeHeight = false;\n setValue('mergePersistData', _this.mergePersistPanelData, _this);\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n */\n DashboardLayout.prototype.preRender = function () {\n this.panelCollection = [];\n this.sortedArray = [];\n this.gridPanelCollection = [];\n this.overlapElement = [];\n this.overlapElementClone = [];\n this.overlapSubElementClone = [];\n this.collisionChecker = {};\n this.dragCollection = [];\n this.elementRef = { top: '', left: '', height: '', width: '' };\n this.dimensions = [];\n this.allItems = [];\n this.oldRowCol = {};\n this.availableClasses = [];\n this.setOldRowCol();\n this.calculateCellSize();\n this.contentTemplateChild = [].slice.call(this.element.children);\n };\n DashboardLayout.prototype.setOldRowCol = function () {\n for (var i = 0; i < this.panels.length; i++) {\n if (!this.panels[i].id) {\n this.panelPropertyChange(this.panels[i], { id: 'layout_' + this.panelID.toString() });\n this.panelID = this.panelID + 1;\n }\n this.oldRowCol[this.panels[i].id] = { row: this.panels[i].row, col: this.panels[i].col };\n }\n };\n DashboardLayout.prototype.createPanelElement = function (cssClass, idValue) {\n var ele = this.createElement('div');\n if (cssClass && cssClass.length > 0) {\n addClass([ele], cssClass);\n }\n if (idValue) {\n ele.setAttribute('id', idValue);\n }\n return ele;\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns void\n * @private\n */\n DashboardLayout.prototype.render = function () {\n this.initialize();\n this.isRenderComplete = true;\n if (this.showGridLines && !this.checkMediaQuery()) {\n this.initGridLines();\n }\n this.updateDragArea();\n this.renderComplete();\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.initGridLines = function () {\n this.table = document.createElement('table');\n var tbody = document.createElement('tbody');\n this.table.classList.add('e-dashboard-gridline-table');\n for (var i = 0; i < this.maxRow(); i++) {\n var tr = document.createElement('tr');\n for (var j = 0; j < this.columns; j++) {\n var td = document.createElement('td');\n td.classList.add('e-dashboard-gridline');\n this.setAttributes({ value: { row: i.toString(), col: j.toString(), sizeX: '1', sizeY: '1' } }, td);\n td.setAttribute('id', '' + j);\n this.setPanelPosition(td, i, j);\n this.setHeightAndWidth(td, { row: i, col: j, sizeX: 1, sizeY: 1 });\n tr.appendChild(td);\n }\n tbody.appendChild(tr);\n }\n this.table.appendChild(tbody);\n this.element.appendChild(this.table);\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.initialize = function () {\n this.updateRowHeight();\n if (this.element.childElementCount > 0 && this.element.querySelectorAll('.e-panel').length > 0) {\n var panelElements = [];\n this.setProperties({ panels: [] }, true);\n this.isInlineRendering = true;\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n panelElements.push((this.element.querySelectorAll('.e-panel')[i]));\n }\n for (var i = 0; i < panelElements.length; i++) {\n var panelElement = panelElements[i];\n if (this.enableRtl) {\n addClass([panelElement], 'e-rtl');\n }\n this.getInlinePanels(panelElement);\n this.maxCol();\n this.maxRow();\n }\n for (var i = 0; i < this.panels.length; i++) {\n var panelElement = this.element.querySelector('#' + this.panels[i].id);\n this.setMinMaxValues(this.panels[i]);\n if (this.maxColumnValue < this.panels[i].col || this.maxColumnValue < (this.panels[i].col + this.panels[i].sizeX)) {\n var colValue = this.maxColumnValue - this.panels[i].sizeX;\n this.panelPropertyChange(this.panels[i], { col: colValue < 0 ? 0 : colValue });\n }\n this.setXYAttributes(panelElement, this.panels[i]);\n var panel_1 = this.renderPanels(panelElement, this.panels[i], this.panels[i].id, false);\n this.panelCollection.push(panel_1);\n this.setHeightAndWidth(panelElement, this.panels[i]);\n this.tempObject = this;\n if (this.mediaQuery && !window.matchMedia('(' + this.mediaQuery + ')').matches) {\n this.setPanelPosition(panelElement, this.panels[i].row, this.panels[i].col);\n this.mainElement = panelElement;\n this.updatePanelLayout(panelElement, this.panels[i]);\n this.mainElement = null;\n }\n this.setClasses([panelElement]);\n }\n this.updateOldRowColumn();\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n }\n else {\n this.renderDashBoardCells(this.panels);\n }\n if (this.allowDragging && (this.mediaQuery ? !window.matchMedia('(' + this.mediaQuery + ')').matches : true)) {\n this.enableDraggingContent(this.panelCollection);\n }\n this.sortedPanel();\n this.bindEvents();\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkColumnValue = this.maxColumnValue;\n if (!(this.checkMediaQuery())) {\n this.panelResponsiveUpdate();\n }\n this.setEnableRtl();\n };\n DashboardLayout.prototype.checkMediaQuery = function () {\n return (this.mediaQuery && window.matchMedia('(' + this.mediaQuery + ')').matches);\n };\n DashboardLayout.prototype.calculateCellSize = function () {\n this.cellSize = [];\n if ((this.checkMediaQuery())) {\n this.cellSize[1] = this.element.parentElement\n && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio;\n }\n else {\n this.cellSize[0] = this.element.parentElement &&\n ((this.element.parentElement.offsetWidth));\n this.cellSize[0] = this.element.parentElement\n && ((this.element.parentElement.offsetWidth - ((this.maxCol() - 1) * this.cellSpacing[0]))\n / (this.maxCol()));\n this.cellSize[1] = this.cellSize[0] / this.cellAspectRatio;\n }\n };\n DashboardLayout.prototype.maxRow = function (recheck) {\n var maxRow = 1;\n if (this.rows > 1 && isNullOrUndefined(recheck)) {\n maxRow = this.rows;\n return maxRow;\n }\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].sizeY + this.panels[i].row > maxRow) {\n maxRow = this.panels[i].sizeY + this.panels[i].row;\n }\n }\n if (this.panels.length === 0) {\n maxRow = this.columns;\n }\n return maxRow;\n };\n DashboardLayout.prototype.maxCol = function () {\n var maxCol = 1;\n maxCol = this.columns;\n this.maxColumnValue = maxCol;\n return maxCol;\n };\n DashboardLayout.prototype.updateOldRowColumn = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var id = this.panels[i].id;\n if (document.getElementById(id)) {\n var row = parseInt(document.getElementById(id).getAttribute('data-row'), 10);\n var col = parseInt(document.getElementById(id).getAttribute('data-col'), 10);\n this.oldRowCol[this.panels[i].id] = { row: row, col: col };\n }\n else {\n continue;\n }\n }\n };\n DashboardLayout.prototype.createSubElement = function (cssClass, idValue, className) {\n var element = this.createElement('div');\n if (className) {\n addClass([element], [className]);\n }\n if (cssClass && cssClass.length > 0) {\n addClass([element], cssClass);\n }\n if (idValue) {\n element.setAttribute('id', idValue);\n }\n return element;\n };\n // eslint-disable-next-line\n DashboardLayout.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n var sanitizedValue = SanitizeHtmlHelper.sanitize(template);\n return compile((this.enableHtmlSanitizer && typeof (template) === 'string') ? sanitizedValue : template);\n }\n }\n return undefined;\n };\n DashboardLayout.prototype.renderTemplate = function (content, appendElement, type, isStringTemplate, prop) {\n // eslint-disable-next-line\n var templateFn = this.templateParser(content);\n var templateElements = [];\n if ((content[0] === '.' || content[0] === '#') &&\n document.querySelector(content).tagName !== 'SCRIPT') {\n var eleVal = document.querySelector(content);\n if (!isNullOrUndefined(eleVal)) {\n if (eleVal.style.display === 'none') {\n eleVal.style.removeProperty('display');\n }\n if (eleVal.getAttribute('style') === '') {\n eleVal.removeAttribute('style');\n }\n appendElement.appendChild(eleVal);\n return;\n }\n else {\n content = content.trim();\n }\n }\n else {\n // eslint-disable-next-line\n var compilerFn = templateFn({}, this, prop, type, isStringTemplate, null, appendElement);\n if (compilerFn) {\n for (var _i = 0, compilerFn_1 = compilerFn; _i < compilerFn_1.length; _i++) {\n var item = compilerFn_1[_i];\n templateElements.push(item);\n }\n append([].slice.call(templateElements), appendElement);\n }\n }\n };\n DashboardLayout.prototype.renderPanels = function (cellElement, panelModel, panelId, isStringTemplate) {\n addClass([cellElement], [panel, panelTransition]);\n var cssClass = panelModel.cssClass ? panelModel.cssClass.split(' ') : null;\n this.panelContent = cellElement.querySelector('.e-panel-container') ?\n cellElement.querySelector('.e-panel-container') :\n this.createSubElement(cssClass, cellElement.id + '_content', panelContainer);\n cellElement.appendChild(this.panelContent);\n if (!panelModel.enabled) {\n this.disablePanel(cellElement);\n }\n if (panelModel.header) {\n var headerTemplateElement = cellElement.querySelector('.e-panel-header') ?\n cellElement.querySelector('.e-panel-header') : this.createSubElement([], cellElement.id + 'template', '');\n addClass([headerTemplateElement], [header]);\n if (!cellElement.querySelector('.e-panel-header')) {\n var id = this.element.id + 'HeaderTemplate' + panelId;\n this.renderTemplate(panelModel.header, headerTemplateElement, id, isStringTemplate, 'header');\n this.panelContent.appendChild(headerTemplateElement);\n this.renderReactTemplates();\n }\n }\n if (panelModel.content) {\n var cssClass_1 = panelModel.cssClass ? panelModel.cssClass.split(' ') : null;\n this.panelBody = cellElement.querySelector('.e-panel-content') ? cellElement.querySelector('.e-panel-content') :\n this.createSubElement(cssClass_1, cellElement.id + '_body', panelContent);\n var headerHeight = this.panelContent.querySelector('.e-panel-header') ?\n window.getComputedStyle(this.panelContent.querySelector('.e-panel-header')).height : '0px';\n var contentHeightValue = 'calc( 100% - ' + headerHeight + ')';\n setStyle(this.panelBody, { height: contentHeightValue });\n if (!cellElement.querySelector('.e-panel-content')) {\n var id = this.element.id + 'ContentTemplate' + panelId;\n this.renderTemplate(panelModel.content, this.panelBody, id, isStringTemplate, 'content');\n this.panelContent.appendChild(this.panelBody);\n this.renderReactTemplates();\n }\n }\n return cellElement;\n };\n DashboardLayout.prototype.disablePanel = function (panelElement) {\n addClass([panelElement], [disable]);\n };\n DashboardLayout.prototype.getInlinePanels = function (panelElement) {\n var model = {\n sizeX: panelElement.hasAttribute('data-sizex') ? parseInt(panelElement.getAttribute('data-sizex'), 10) : 1,\n sizeY: panelElement.hasAttribute('data-sizey') ? parseInt(panelElement.getAttribute('data-sizey'), 10) : 1,\n minSizeX: panelElement.hasAttribute('data-minsizex') ? parseInt(panelElement.getAttribute('data-minsizex'), 10) : 1,\n minSizeY: panelElement.hasAttribute('data-minsizey') ? parseInt(panelElement.getAttribute('data-minsizey'), 10) : 1,\n maxSizeX: panelElement.hasAttribute('data-maxsizex') ? parseInt(panelElement.getAttribute('data-maxsizex'), 10) : null,\n maxSizeY: panelElement.hasAttribute('data-maxsizey') ? parseInt(panelElement.getAttribute('data-maxsizey'), 10) : null,\n row: panelElement.hasAttribute('data-row') ? parseInt(panelElement.getAttribute('data-row'), 10) : 0,\n col: panelElement.hasAttribute('data-col') ? parseInt(panelElement.getAttribute('data-col'), 10) : 0,\n id: panelElement.getAttribute('id'),\n zIndex: panelElement.hasAttribute('data-zindex') ? parseInt(panelElement.getAttribute('data-zIndex'), 10) : 1000,\n header: panelElement.querySelector('.e-panel-header') && '.e-panel-header',\n content: panelElement.querySelector('.e-panel-content') && '.e-panel-content'\n };\n if (!model.id) {\n model.id = 'layout_' + this.panelID.toString();\n panelElement.setAttribute('id', model.id);\n this.panelID = this.panelID + 1;\n }\n if (isUndefined(model.enabled)) {\n model.enabled = true;\n }\n panelElement.style.zIndex = '' + model.zIndex;\n // eslint-disable-next-line\n var panelProp = new Panel(this, 'panels', model, true);\n this.panels.push(panelProp);\n };\n DashboardLayout.prototype.resizeEvents = function () {\n if (this.allowResizing) {\n var panelElements = this.element.querySelectorAll('.e-panel .e-panel-container .e-resize');\n for (var i = 0; i < panelElements.length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n EventHandler.add(panelElements[i], eventName, this.downResizeHandler, this);\n if (Browser.info.name !== 'msie') {\n EventHandler.add(panelElements[i], 'touchstart', this.touchDownResizeHandler, this);\n }\n }\n }\n };\n DashboardLayout.prototype.bindEvents = function () {\n this.refreshListener = this.refresh.bind(this);\n // eslint-disable-next-line\n EventHandler.add(window, 'resize', this.refreshListener);\n this.resizeEvents();\n };\n DashboardLayout.prototype.downResizeHandler = function (e) {\n this.downHandler(e);\n this.lastMouseX = e.pageX;\n this.lastMouseY = e.pageY;\n var moveEventName = (Browser.info.name === 'msie') ? 'mousemove pointermove' : 'mousemove';\n var upEventName = (Browser.info.name === 'msie') ? 'mouseup pointerup' : 'mouseup';\n if (!this.isMouseMoveBound) {\n EventHandler.add(document, moveEventName, this.moveResizeHandler, this);\n this.isMouseMoveBound = true;\n }\n if (!this.isMouseUpBound) {\n EventHandler.add(document, upEventName, this.upResizeHandler, this);\n this.isMouseUpBound = true;\n }\n };\n DashboardLayout.prototype.downHandler = function (e) {\n this.resizeCalled = false;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var el = closest((e.currentTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n this.trigger('resizeStart', args);\n this.downTarget = e.currentTarget;\n this.shadowEle = document.createElement('div');\n this.shadowEle.classList.add('e-holder');\n addClass([this.element], [preventSelect]);\n this.element.appendChild(this.shadowEle);\n this.renderReactTemplates();\n this.elementX = parseFloat(el.style.left);\n this.elementY = parseFloat(el.style.top);\n this.elementWidth = el.offsetWidth;\n this.elementHeight = el.offsetHeight;\n this.originalWidth = this.getCellInstance(el.id).sizeX;\n this.originalHeight = this.getCellInstance(el.id).sizeY;\n this.previousRow = this.getCellInstance(el.id).row;\n };\n DashboardLayout.prototype.touchDownResizeHandler = function (e) {\n this.downHandler(e);\n this.lastMouseX = e.changedTouches[0].pageX;\n this.lastMouseY = e.changedTouches[0].pageY;\n if (!this.isMouseMoveBound) {\n EventHandler.add(document, 'touchmove', this.touchMoveResizeHandler, this);\n this.isMouseMoveBound = true;\n }\n if (!this.isMouseUpBound) {\n EventHandler.add(document, 'touchend', this.upResizeHandler, this);\n this.isMouseUpBound = true;\n }\n };\n DashboardLayout.prototype.getCellSize = function () {\n return [this.cellSize[0], this.cellSize[1]];\n };\n DashboardLayout.prototype.updateMaxTopLeft = function (e) {\n this.moveTarget = this.downTarget;\n var el = closest((this.moveTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n this.trigger('resize', args);\n };\n DashboardLayout.prototype.updateResizeElement = function (el) {\n this.maxLeft = this.element.offsetWidth - 1;\n this.maxTop = this.cellSize[1] * this.maxRows - 1;\n removeClass([el], 'e-panel-transition');\n addClass([el], [dragging]);\n var handleArray = [east, west, north, south, southEast, northEast, northWest, southWest];\n for (var i = 0; i < this.moveTarget.classList.length; i++) {\n if (handleArray.indexOf(this.moveTarget.classList[i]) !== -1) {\n this.handleClass = (this.moveTarget.classList[i]);\n }\n }\n };\n DashboardLayout.prototype.moveResizeHandler = function (e) {\n this.updateMaxTopLeft(e);\n var el = closest((this.moveTarget), '.e-panel');\n if (this.lastMouseX === e.pageX || this.lastMouseY === e.pageY) {\n return;\n }\n this.updateResizeElement(el);\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n var diffY = this.mouseY - this.lastMouseY + this.mOffY;\n var diffX = this.mouseX - this.lastMouseX + this.mOffX;\n this.mOffX = this.mOffY = 0;\n this.lastMouseY = this.mouseY;\n this.lastMouseX = this.mouseX;\n this.resizingPanel(el, panelModel, diffX, diffY);\n };\n DashboardLayout.prototype.touchMoveResizeHandler = function (e) {\n this.updateMaxTopLeft(e);\n var el = closest((this.moveTarget), '.e-panel');\n if (this.lastMouseX === e.changedTouches[0].pageX || this.lastMouseY === e.changedTouches[0].pageY) {\n return;\n }\n this.updateResizeElement(el);\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.mouseX = e.changedTouches[0].pageX;\n this.mouseY = e.changedTouches[0].pageY;\n var diffX = this.mouseX - this.lastMouseX + this.mOffX;\n var diffY = this.mouseY - this.lastMouseY + this.mOffY;\n this.mOffX = this.mOffY = 0;\n this.lastMouseX = this.mouseX;\n this.lastMouseY = this.mouseY;\n this.resizingPanel(el, panelModel, diffX, diffY);\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.resizingPanel = function (el, panelModel, currentX, currentY) {\n var oldSizeX = this.getCellInstance(el.id).sizeX;\n var oldSizeY = this.getCellInstance(el.id).sizeY;\n var dY = currentY;\n var dX = currentX;\n if (this.handleClass.indexOf('north') >= 0) {\n if (this.elementHeight - dY < this.getMinHeight(panelModel)) {\n currentY = this.elementHeight - this.getMinHeight(panelModel);\n this.mOffY = dY - currentY;\n }\n else if (panelModel.maxSizeY && this.elementHeight - dY > this.getMaxHeight(panelModel)) {\n currentY = this.elementHeight - this.getMaxHeight(panelModel);\n this.mOffY = dY - currentY;\n }\n else if (this.elementY + dY < this.minTop) {\n currentY = this.minTop - this.elementY;\n this.mOffY = dY - currentY;\n }\n this.elementY += currentY;\n this.elementHeight -= currentY;\n }\n if (this.handleClass.indexOf('south') >= 0) {\n if (this.elementHeight + dY < this.getMinHeight(panelModel)) {\n currentY = this.getMinHeight(panelModel) - this.elementHeight;\n this.mOffY = dY - currentY;\n }\n else if (panelModel.maxSizeY && this.elementHeight + dY > this.getMaxHeight(panelModel)) {\n currentY = this.getMaxHeight(panelModel) - this.elementHeight;\n this.mOffY = dY - currentY;\n }\n this.elementHeight += currentY;\n }\n if (this.handleClass.indexOf('west') >= 0) {\n if (this.elementWidth - dX < this.getMinWidth(panelModel)) {\n currentX = this.elementWidth - this.getMinWidth(panelModel);\n this.mOffX = dX - currentX;\n }\n else if (panelModel.maxSizeX && this.elementWidth - dX > this.getMaxWidth(panelModel)) {\n currentX = this.elementWidth - this.getMaxWidth(panelModel);\n this.mOffX = dX - currentX;\n }\n else if (this.elementX + dX < this.minLeft) {\n currentX = this.minLeft - this.elementX;\n this.mOffX = dX - currentX;\n }\n this.elementX += currentX;\n this.elementWidth -= currentX;\n }\n if (this.handleClass.indexOf('east') >= 0) {\n if (this.elementWidth + dX < this.getMinWidth(panelModel)) {\n currentX = this.getMinWidth(panelModel) - this.elementWidth;\n this.mOffX = dX - currentX;\n }\n else if (panelModel.maxSizeX && this.elementWidth + dX > this.getMaxWidth(panelModel)) {\n currentX = this.getMaxWidth(panelModel) - this.elementWidth;\n this.mOffX = dX - currentX;\n }\n this.elementWidth += currentX;\n }\n el.style.top = this.elementY + 'px';\n el.style.left = this.elementX + 'px';\n el.style.width = this.elementWidth + 'px';\n el.style.height = this.elementHeight + 'px';\n var item = this.getResizeRowColumn(panelModel);\n if (item.col + item.sizeX > this.columns) {\n this.panelPropertyChange(item, { sizeX: item.sizeX - 1 });\n }\n this.shadowEle.style.top = ((item.row * this.getCellSize()[1] + (item.row * this.cellSpacing[1]))) + 'px';\n this.shadowEle.style.left = ((item.col * this.getCellSize()[0]) + ((item.col) * this.cellSpacing[0])) + 'px';\n this.shadowEle.style.height = ((item.sizeY * (this.getCellSize()[1] + (this.cellSpacing[1])))) + 'px';\n this.shadowEle.style.width = ((item.sizeX * (this.getCellSize()[0] + (this.cellSpacing[0])))) + 'px';\n if (oldSizeX !== item.sizeX || oldSizeY !== item.sizeY) {\n oldSizeX = item.sizeX;\n oldSizeY = item.sizeY;\n var model = this.getCellInstance(el.id);\n var value = {\n attributes: {\n row: model.row.toString(),\n col: model.col.toString(),\n sizeX: model.sizeX.toString(),\n sizeY: model.sizeY.toString()\n }\n };\n this.setAttributes(value, el);\n this.mainElement = el;\n this.updatePanelLayout(el, this.getCellInstance(el.id));\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n };\n DashboardLayout.prototype.upResizeHandler = function (e) {\n if (isNullOrUndefined(this.downTarget)) {\n return;\n }\n this.upTarget = this.downTarget;\n var el = closest((this.upTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n if (el) {\n addClass([el], 'e-panel-transition');\n var moveEventName = (Browser.info.name === 'msie') ? 'mousemove pointermove' : 'mousemove';\n var upEventName = (Browser.info.name === 'msie') ? 'mouseup pointerup' : 'mouseup';\n EventHandler.remove(document, moveEventName, this.moveResizeHandler);\n EventHandler.remove(document, upEventName, this.upResizeHandler);\n if (Browser.info.name !== 'msie') {\n EventHandler.remove(document, 'touchmove', this.touchMoveResizeHandler);\n EventHandler.remove(document, 'touchend', this.upResizeHandler);\n }\n this.isMouseUpBound = false;\n this.isMouseMoveBound = false;\n if (this.shadowEle) {\n detach(this.shadowEle);\n }\n this.shadowEle = null;\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.setPanelPosition(el, panelModel.row, panelModel.col);\n this.setHeightAndWidth(el, panelModel);\n }\n removeClass([el], [dragging]);\n this.trigger('resizeStop', args);\n this.resizeCalled = false;\n this.lastMouseX = this.lastMouseY = undefined;\n this.mOffX = this.mOffY = 0;\n this.mainElement = null;\n if (this.allowFloating) {\n this.moveItemsUpwards();\n }\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkForChanges(true);\n };\n DashboardLayout.prototype.getResizeRowColumn = function (item) {\n var isChanged = false;\n var col = item.col;\n if (['e-west', 'e-south-west'].indexOf(this.handleClass) !== -1) {\n col = this.pixelsToColumns(this.elementX, false);\n }\n var row = item.row;\n if (['e-north'].indexOf(this.handleClass) !== -1) {\n row = this.pixelsToRows(this.elementY, false);\n if (this.previousRow !== row) {\n this.previousRow = row;\n isChanged = true;\n }\n }\n var sizeX = item.sizeX;\n if (['e-north', 'e-south'].indexOf(this.handleClass) === -1) {\n sizeX = this.pixelsToColumns(this.elementWidth - (sizeX) * this.cellSpacing[1], true);\n }\n var sizeY = item.sizeY;\n if (['e-east', 'e-west'].indexOf(this.handleClass) === -1) {\n if (this.handleClass === 'e-north' ? isChanged : true) {\n sizeY = this.pixelsToRows(this.elementHeight - (sizeY) * this.cellSpacing[0], true);\n }\n }\n if (item.col + item.sizeX > this.columns) {\n item.sizeX = item.sizeX - 1;\n }\n var canOccupy = row > -1 && col > -1 && sizeX + col <= this.maxCol() && sizeY + row <= this.maxRow();\n if (canOccupy && (this.collisions(row, col, sizeX, sizeY, this.getPanelBase(item.id)).length === 0)\n || this.allowPushing !== false) {\n this.panelPropertyChange(item, { row: row, col: col, sizeX: sizeX, sizeY: sizeY });\n }\n return item;\n };\n DashboardLayout.prototype.pixelsToColumns = function (pixels, isCeil) {\n var curColWidth = this.cellSize[0];\n if (isCeil) {\n return Math.ceil(pixels / curColWidth);\n }\n else {\n return Math.floor(pixels / curColWidth);\n }\n };\n DashboardLayout.prototype.pixelsToRows = function (pixels, isCeil) {\n if (isCeil) {\n return Math.round(pixels / this.cellSize[1]);\n }\n else {\n return Math.round(pixels / (this.cellSize[1] + this.cellSpacing[0]));\n }\n };\n DashboardLayout.prototype.getMinWidth = function (item) {\n return (item.minSizeX) * this.getCellSize()[0];\n };\n DashboardLayout.prototype.getMaxWidth = function (item) {\n return (item.maxSizeX) * this.getCellSize()[0];\n };\n DashboardLayout.prototype.getMinHeight = function (item) {\n return (item.minSizeY) * this.getCellSize()[1];\n };\n DashboardLayout.prototype.getMaxHeight = function (item) {\n return (item.maxSizeY) * this.getCellSize()[1];\n };\n DashboardLayout.prototype.sortedPanel = function () {\n this.sortedArray = [];\n for (var i = 0, l = this.panelCollection.length; i < l; ++i) {\n this.sortItem(this.panelCollection[i]);\n }\n };\n DashboardLayout.prototype.moveItemsUpwards = function () {\n if (this.allowFloating === false) {\n return;\n }\n for (var rowIndex = 0, l = this.sortedArray.length; rowIndex < l; ++rowIndex) {\n var columns = this.sortedArray[rowIndex];\n if (!columns) {\n continue;\n }\n for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\n var item = columns[colIndex];\n if (item) {\n this.moveItemUpwards(item);\n }\n }\n }\n this.updateGridLines();\n };\n DashboardLayout.prototype.moveItemUpwards = function (item) {\n if (this.allowFloating === false || item === this.mainElement) {\n return;\n }\n var colIndex = this.getCellInstance(item.id).col;\n var sizeY = parseInt(item.getAttribute('data-sizeY'), 10);\n var sizeX = parseInt(item.getAttribute('data-sizeX'), 10);\n var availableRow = null;\n var availableColumn = null;\n var rowIndex = parseInt(item.getAttribute('data-row'), 10) - 1;\n while (rowIndex > -1) {\n var items = this.collisions(rowIndex, colIndex, sizeX, sizeY, item);\n if (items.length !== 0) {\n break;\n }\n availableRow = rowIndex;\n availableColumn = colIndex;\n --rowIndex;\n }\n if (availableRow !== null) {\n this.sortItem(item, availableRow, availableColumn);\n }\n };\n DashboardLayout.prototype.sortItem = function (item, rowValue, columnValue) {\n this.overlapElement = [];\n var column = parseInt(item.getAttribute('data-col'), 10);\n var row = parseInt(item.getAttribute('data-row'), 10);\n if (!this.sortedArray[row]) {\n this.sortedArray[row] = [];\n }\n this.sortedArray[row][column] = item;\n if (item !== undefined && rowValue !== undefined && columnValue !== undefined) {\n if (this.oldRowCol[item.id] !== undefined && this.oldRowCol[item.id].row !== null &&\n typeof this.oldRowCol[item.id].col !== 'undefined') {\n {\n var oldRow = this.sortedArray[this.oldRowCol[item.id].row];\n if (this.oldRowCol[item.id] && oldRow[this.oldRowCol[item.id].col] === item) {\n delete oldRow[this.oldRowCol[item.id].col];\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n }\n }\n this.oldRowCol[item.id].row = rowValue;\n this.oldRowCol[item.id].row = columnValue;\n if (!this.sortedArray[row]) {\n this.sortedArray[row] = [];\n }\n this.sortedArray[row][column] = item;\n if (this.allItems.indexOf(item) === -1) {\n this.allItems.push(item);\n }\n this.panelPropertyChange(this.getCellInstance(item.id), { row: rowValue, col: columnValue });\n var panelModel = this.getCellInstance(item.id);\n this.setAttributes({ value: { col: panelModel.col.toString(), row: panelModel.row.toString() } }, item);\n this.updateLayout(item, this.getCellInstance(item.id));\n }\n };\n DashboardLayout.prototype.updateLayout = function (element, panelModel) {\n this.setPanelPosition(element, panelModel.row, panelModel.col);\n this.setHeightAndWidth(element, panelModel);\n this.updateRowHeight();\n this.sortedPanel();\n };\n DashboardLayout.prototype.refresh = function () {\n this.panelsSizeY = 0;\n this.updateDragArea();\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n else {\n if (this.element.classList.contains(responsive)) {\n removeClass([this.element], [responsive]);\n var internalPanels = this.element.querySelectorAll(((this.element.id) ? '#' + this.element.id + ' > ' : '') + '.e-panel');\n for (var i = 0; i < internalPanels.length; i++) {\n var ele = internalPanels[i];\n var cellInstance = this.getCellInstance(ele.id);\n var row = parseInt(ele.getAttribute('data-row'), 10);\n var col = parseInt(ele.getAttribute('data-col'), 10);\n this.panelPropertyChange(cellInstance, { row: row, col: col });\n this.setHeightAndWidth(ele, this.getCellInstance(ele.id));\n this.setPanelPosition(ele, row, col);\n this.updateRowHeight();\n }\n }\n this.panelResponsiveUpdate();\n this.updateGridLines();\n }\n this.removeResizeClasses(this.panelCollection);\n this.setClasses(this.panelCollection);\n this.resizeEvents();\n this.checkDragging(this.dragCollection);\n };\n DashboardLayout.prototype.updateGridLines = function () {\n if (this.element.querySelector('.e-dashboard-gridline-table')) {\n if (this.table) {\n detach(this.table);\n }\n this.initGridLines();\n }\n };\n DashboardLayout.prototype.checkDragging = function (dragCollection) {\n if (this.checkMediaQuery() || !this.allowDragging) {\n for (var i = 0; i < dragCollection.length; i++) {\n dragCollection[i].destroy();\n }\n }\n else {\n for (var i = 0; i < dragCollection.length; i++) {\n dragCollection[i].destroy();\n }\n this.enableDraggingContent(this.panelCollection);\n }\n };\n DashboardLayout.prototype.sortPanels = function () {\n var model = [];\n var _loop_1 = function (row) {\n var _loop_2 = function (col) {\n this_1.panels.filter(function (panel) {\n if (panel.row === row && panel.col === col) {\n model.push(panel);\n }\n });\n };\n for (var col = 0; col < this_1.columns; col++) {\n _loop_2(col);\n }\n };\n var this_1 = this;\n for (var row = 0; row <= this.rows; row++) {\n _loop_1(row);\n }\n return model;\n };\n DashboardLayout.prototype.checkMediaQuerySizing = function () {\n addClass([this.element], [responsive]);\n var updatedPanel;\n if (this.isPanelRemoved && this.panels) {\n updatedPanel = this.panels;\n }\n else {\n updatedPanel = this.sortPanels();\n }\n this.updatedRows = updatedPanel.length;\n for (var i = 0; i < updatedPanel.length; i++) {\n var panelElement = document.getElementById(updatedPanel[i].id);\n // eslint-disable-next-line\n var updatedHeight = void 0;\n if (panelElement) {\n setStyle(panelElement, { 'width': '100%' });\n panelElement.style.height = ' ' + ((this.element.parentElement\n && this.element.parentElement.offsetWidth / this.cellAspectRatio) * updatedPanel[i].sizeY) + 'px';\n if (updatedPanel[i].sizeY > 1) {\n updatedHeight = ((this.element.parentElement\n && this.element.parentElement.offsetWidth / this.cellAspectRatio) * updatedPanel[i].sizeY) +\n // eslint-disable-next-line radix\n parseInt((Math.round(updatedPanel[i].sizeY / 2) * this.cellSpacing[1]).toString(), 0);\n panelElement.style.height = '' + updatedHeight + 'px';\n }\n this.resizeHeight = true;\n this.panelPropertyChange(updatedPanel[i], { row: i, col: 0 });\n this.setPanelPosition(panelElement, updatedPanel[i].row, updatedPanel[i].col);\n this.panelsSizeY = this.panelsSizeY + updatedPanel[i].sizeY;\n this.setClasses(this.panelCollection);\n this.checkDragging(this.dragCollection);\n this.removeResizeClasses(this.panelCollection);\n }\n }\n this.updateRowHeight();\n };\n DashboardLayout.prototype.panelResponsiveUpdate = function () {\n this.element.classList.add('e-responsive');\n this.calculateCellSize();\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[i];\n var panelModel = this.getCellInstance(ele.id);\n this.setHeightAndWidth(ele, panelModel);\n }\n for (var i = 0; i < this.panels.length; i++) {\n this.setPanelPosition(document.getElementById(this.panels[i].id), this.panels[i].row, this.panels[i].col);\n }\n this.updateRowHeight();\n };\n DashboardLayout.prototype.updateRowHeight = function () {\n this.getRowColumn();\n this.setHeightWidth();\n };\n DashboardLayout.prototype.setHeightWidth = function () {\n var heightValue;\n var widthValue;\n if (this.checkMediaQuery()) {\n var entirePanelsY = 0;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].sizeY) {\n entirePanelsY += this.panels[i].sizeY;\n }\n }\n heightValue = ((entirePanelsY) *\n (this.element.parentElement && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio) +\n (entirePanelsY - 1) * this.cellSpacing[1]) + 'px';\n }\n else {\n heightValue = ((this.maxRow()) *\n (this.cellSize[0] / this.cellAspectRatio) + (this.maxRow() - 1) * this.cellSpacing[1]) + 'px';\n }\n setStyle(this.element, { 'height': heightValue });\n // eslint-disable-next-line prefer-const\n widthValue = window.getComputedStyle(this.element).width;\n setStyle(this.element, { 'width': widthValue });\n };\n DashboardLayout.prototype.setHeightAndWidth = function (panelElement, panelModel) {\n setStyle(panelElement, { 'height': formatUnit(this.setXYDimensions(panelModel)[0]) });\n setStyle(panelElement, { 'width': formatUnit(this.setXYDimensions(panelModel)[1]) });\n };\n DashboardLayout.prototype.renderCell = function (panel, isStringTemplate, index) {\n var cellElement;\n this.dimensions = this.setXYDimensions(panel);\n if (isUndefined(panel.enabled)) {\n panel.enabled = true;\n }\n if (this.contentTemplateChild.length > 0 && !isNullOrUndefined(index)) {\n cellElement = this.contentTemplateChild[index];\n if (panel.cssClass) {\n addClass([cellElement], [panel.cssClass]);\n }\n if (panel.id) {\n cellElement.setAttribute('id', panel.id);\n }\n }\n else {\n cellElement = this.createPanelElement(panel.cssClass ? panel.cssClass.split(' ') : null, panel.id);\n }\n cellElement.style.zIndex = '' + panel.zIndex;\n this.element.appendChild(cellElement);\n this.renderReactTemplates();\n var dashBoardCell = this.renderPanels(cellElement, panel, panel.id, isStringTemplate);\n this.panelCollection.push(dashBoardCell);\n this.setXYAttributes(cellElement, panel);\n this.setHeightAndWidth(cellElement, panel);\n return cellElement;\n };\n DashboardLayout.prototype.setPanelPosition = function (cellElement, row, col) {\n if (!cellElement) {\n return;\n }\n if (this.checkMediaQuery()) {\n this.calculateCellSize();\n }\n var heightValue = this.getCellSize()[1];\n var widthValue = this.getCellSize()[0];\n var left = col === 0 ? 0 : (((col) * ((widthValue) + this.cellSpacing[0])));\n var top = row === 0 ? 0 : (((row) * ((heightValue) + this.cellSpacing[1])));\n if (this.checkMediaQuery()) {\n top = row === 0 ? 0 : ((this.panelsSizeY) * ((heightValue) + this.cellSpacing[1]));\n }\n setStyle(cellElement, { 'left': left + 'px', 'top': top + 'px' });\n };\n DashboardLayout.prototype.getRowColumn = function () {\n this.rows = null;\n if (this.element.querySelectorAll('.e-panel').length > 0 && !this.updatedRows) {\n var panelElements = this.element.querySelectorAll('.e-panel');\n for (var i = 0; i < panelElements.length; i++) {\n var panelElement = panelElements[i];\n var rowValue = parseInt(panelElement.getAttribute('data-row'), 10);\n var xValue = parseInt(panelElement.getAttribute('data-sizeY'), 10);\n this.rows = Math.max(this.rows, (rowValue + xValue));\n }\n }\n else {\n if (this.updatedRows) {\n this.rows = this.updatedRows;\n this.updatedRows = null;\n }\n for (var i = 0; i < this.panels.length; i++) {\n this.rows = Math.max(this.rows, this.panels[i].row);\n }\n }\n };\n DashboardLayout.prototype.setMinMaxValues = function (panel) {\n if (!panel.sizeX || panel.sizeX < panel.minSizeX) {\n this.panelPropertyChange(panel, { sizeX: panel.minSizeX });\n }\n else if ((panel.maxSizeX && panel.sizeX > panel.maxSizeX)) {\n this.panelPropertyChange(panel, { sizeX: panel.maxSizeX });\n }\n else if (panel.sizeX > this.columns) {\n this.panelPropertyChange(panel, { sizeX: this.columns });\n }\n else {\n this.panelPropertyChange(panel, { sizeX: panel.sizeX });\n }\n if (!panel.sizeY || panel.sizeY < panel.minSizeY) {\n this.panelPropertyChange(panel, { sizeY: panel.minSizeY });\n }\n else if (panel.maxSizeY && panel.sizeY > panel.maxSizeY) {\n this.panelPropertyChange(panel, { sizeY: panel.maxSizeY });\n }\n else {\n this.panelPropertyChange(panel, { sizeY: panel.sizeY });\n }\n };\n DashboardLayout.prototype.checkMinMaxValues = function (panel) {\n if (panel.col + panel.sizeX > this.columns) {\n this.panelPropertyChange(panel, { sizeX: panel.sizeX + (this.columns - (panel.col + panel.sizeX)) });\n }\n };\n DashboardLayout.prototype.panelPropertyChange = function (panel, value) {\n // eslint-disable-next-line\n panel.setProperties(value, true);\n };\n DashboardLayout.prototype.renderDashBoardCells = function (cells) {\n if (this.element.querySelectorAll('.e-panel').length > 0 || this.panels.length > 0) {\n for (var j = 0; j < cells.length; j++) {\n this.gridPanelCollection.push(cells[j]);\n this.setMinMaxValues(cells[j]);\n if (this.maxColumnValue < cells[j].col || this.maxColumnValue < (cells[j].col + cells[j].sizeX)) {\n this.panelPropertyChange(cells[j], { col: this.maxColumnValue - cells[j].sizeX });\n }\n var cell = this.renderCell(cells[j], false, j);\n if (this.enableRtl) {\n addClass([cell], 'e-rtl');\n }\n this.element.appendChild(cell);\n this.renderReactTemplates();\n if (this.checkMediaQuery() && j === cells.length - 1) {\n this.checkMediaQuerySizing();\n }\n else {\n this.setPanelPosition(cell, cells[j].row, cells[j].col);\n this.mainElement = cell;\n this.updatePanelLayout(cell, cells[j]);\n this.mainElement = null;\n }\n }\n }\n this.setClasses(this.panelCollection);\n };\n DashboardLayout.prototype.collisions = function (row, col, sizeX, sizeY, ignore) {\n var items = [];\n if (!sizeX || !sizeY) {\n sizeX = sizeY = 1;\n }\n if (ignore && !(ignore instanceof Array)) {\n ignore = [ignore];\n }\n var item;\n for (var h = 0; h < sizeY; ++h) {\n for (var w = 0; w < sizeX; ++w) {\n item = this.getPanel(row + h, col + w, ignore);\n if (item && (!ignore || ignore.indexOf(document.getElementById(item.id)) === -1) &&\n items.indexOf(document.getElementById(item.id)) === -1) {\n items.push(document.getElementById(item.id));\n }\n }\n }\n return items;\n };\n DashboardLayout.prototype.rightWardsSpaceChecking = function (rowElements, col, ele) {\n var _this = this;\n var columns = [];\n var spacedColumns = [];\n rowElements.forEach(function (element) {\n var columnValue = parseInt(element.getAttribute('data-col'), 10);\n var sizeXValue = parseInt(element.getAttribute('data-sizeX'), 10);\n if (col < _this.columns && columnValue >= col) {\n if (sizeXValue > 1) {\n for (var i = columnValue; i < columnValue + sizeXValue; i++) {\n columns.push(i);\n }\n }\n else {\n columns.push(columnValue);\n }\n }\n });\n if (columns.length > 0) {\n for (var i = col + 1; i <= this.columns - 1; i++) {\n if (columns.indexOf(i) === -1 && i !== col) {\n if (spacedColumns.indexOf(i) === -1) {\n spacedColumns.push(i);\n }\n }\n }\n }\n var occupiedValues = this.getOccupiedColumns(ele);\n occupiedValues.forEach(function (colValue) {\n if (colValue > col && spacedColumns.indexOf(colValue) !== -1) {\n spacedColumns.splice(spacedColumns.indexOf(colValue), 1);\n }\n });\n var eleOccupiedValues = this.getOccupiedColumns(this.checkingElement);\n eleOccupiedValues.forEach(function (col) {\n if (col > parseInt(ele.getAttribute('data-col'), 10) && occupiedValues.indexOf(col) === -1 &&\n spacedColumns.indexOf(col) === -1) {\n spacedColumns.push(col);\n }\n });\n spacedColumns = spacedColumns.sort(function (next, previous) { return next - previous; });\n return spacedColumns;\n };\n DashboardLayout.prototype.getOccupiedColumns = function (element) {\n var occupiedItems = [];\n var sizeX = parseInt(element.getAttribute('data-sizeX'), 10);\n var col = parseInt(element.getAttribute('data-col'), 10);\n for (var i = col; (i < col + sizeX && i <= this.columns); i++) {\n occupiedItems.push(i);\n }\n return occupiedItems;\n };\n DashboardLayout.prototype.leftWardsSpaceChecking = function (rowElements, col, ele) {\n var _this = this;\n var spacedColumns = [];\n var columns = [];\n rowElements.forEach(function (element) {\n var colValue = parseInt(element.getAttribute('data-col'), 10);\n var xValue = parseInt(element.getAttribute('data-sizeX'), 10);\n if (col <= _this.columns && colValue <= col) {\n if (xValue > 1) {\n for (var i = colValue; i < colValue + xValue; i++) {\n columns.push(i);\n }\n }\n else {\n columns.push(colValue);\n }\n }\n });\n if (columns.length > 0) {\n for (var j = 0; j <= col; j++) {\n if (columns.indexOf(j) === -1 && j !== col) {\n if (spacedColumns.indexOf(j) === -1) {\n spacedColumns.push(j);\n }\n }\n }\n }\n var occupiedValues = this.getOccupiedColumns(ele);\n occupiedValues.forEach(function (colValue) {\n if (colValue < col && spacedColumns.indexOf(colValue) !== -1) {\n spacedColumns.splice(spacedColumns.indexOf(colValue), 1);\n }\n });\n var eleOccupiedValues = this.getOccupiedColumns(this.checkingElement);\n eleOccupiedValues.forEach(function (col) {\n if (col < parseInt(ele.getAttribute('data-col'), 10) && occupiedValues.indexOf(col) === -1 &&\n spacedColumns.indexOf(col) === -1) {\n spacedColumns.push(col);\n }\n });\n spacedColumns = spacedColumns.sort(function (next, prev) { return next - prev; });\n spacedColumns = spacedColumns.reverse();\n return spacedColumns;\n };\n DashboardLayout.prototype.adjustmentAvailable = function (row, col, sizeY, sizeX, ele) {\n this.leftAdjustable = undefined;\n this.rightAdjustable = undefined;\n var isAdjustable = false;\n var rightSpacing;\n var rowElement = [];\n this.topAdjustable = undefined;\n var eleSizeX = parseInt(ele.getAttribute('data-sizeX'), 10);\n var eleCol = parseInt(ele.getAttribute('data-col'), 10);\n rowElement = this.getRowElements(this.collisions(row, 0, this.columns, sizeY, []));\n if (rowElement.indexOf(ele) === -1) {\n rowElement.push(ele);\n }\n var leftSpacing = this.leftWardsSpaceChecking(rowElement, col, ele);\n if (leftSpacing.length > 0) {\n this.leftAdjustable = this.isLeftAdjustable(leftSpacing, ele, row, col, sizeX, sizeY);\n if (this.spacedColumnValue !== eleCol - this.getCellInstance(this.checkingElement.id).sizeX) {\n this.leftAdjustable = false;\n }\n if (this.leftAdjustable) {\n this.rightAdjustable = false;\n }\n else {\n this.leftAdjustable = false;\n rightSpacing = this.rightWardsSpaceChecking(rowElement, col, ele);\n this.rightAdjustable = rightSpacing.length > 0 ? this.isRightAdjustable(rightSpacing, ele, row, col, sizeX, sizeY) : false;\n if (this.spacedColumnValue !== eleSizeX + eleCol) {\n this.rightAdjustable = false;\n }\n if (!this.rightAdjustable) {\n this.rightAdjustable = false;\n }\n }\n }\n else {\n rightSpacing = this.rightWardsSpaceChecking(rowElement, col, ele);\n this.rightAdjustable = rightSpacing.length > 0 ? this.isRightAdjustable(rightSpacing, ele, row, col, sizeX, sizeY) : false;\n if (this.spacedColumnValue !== eleSizeX + eleCol) {\n this.rightAdjustable = false;\n }\n if (this.rightAdjustable) {\n this.leftAdjustable = false;\n }\n }\n if (!this.rightAdjustable && !this.leftAdjustable && row > 0) {\n var endRow = this.getCellInstance(ele.id).row;\n var topCheck = false;\n if (this.startRow !== endRow) {\n topCheck = true;\n }\n for (var rowValue = row; rowValue >= 0; rowValue--) {\n var element = (this.getCellInstance(ele.id).sizeY > 1 && topCheck) ? this.checkingElement : ele;\n if ((rowValue !== endRow) && (rowValue === endRow - sizeY) &&\n this.collisions(rowValue, col, sizeX, sizeY, element).length === 0) {\n topCheck = false;\n this.topAdjustable = true;\n this.spacedRowValue = isNullOrUndefined(this.spacedRowValue) ? rowValue : this.spacedRowValue;\n this.spacedColumnValue = col;\n }\n }\n }\n if (this.rightAdjustable || this.leftAdjustable || this.topAdjustable) {\n isAdjustable = true;\n if (isNullOrUndefined(this.spacedRowValue)) {\n this.spacedRowValue = row;\n }\n }\n return isAdjustable;\n };\n DashboardLayout.prototype.isXSpacingAvailable = function (spacing, sizeX) {\n var isSpaceAvailable = false;\n var subSpacingColumns = [];\n for (var i = 0; i < spacing.length; i++) {\n if (spacing[i + 1] - spacing[i] === 1 || spacing[i + 1] - spacing[i] === -1) {\n subSpacingColumns.push(spacing[i]);\n if (sizeX === 2) {\n subSpacingColumns.push(spacing[i + 1]);\n }\n if (i === spacing.length - 2) {\n subSpacingColumns.push(spacing[i + 1]);\n if (subSpacingColumns.length > sizeX) {\n subSpacingColumns.splice(-1);\n }\n }\n if (subSpacingColumns.length === sizeX) {\n isSpaceAvailable = true;\n this.spacedColumnValue = subSpacingColumns.sort(function (next, previous) { return next - previous; })[0];\n if (this.spacedColumnValue < 0) {\n this.spacedColumnValue = 1;\n }\n return isSpaceAvailable;\n }\n }\n else {\n subSpacingColumns = [];\n continue;\n }\n }\n return isSpaceAvailable;\n };\n DashboardLayout.prototype.getRowElements = function (base) {\n var rowElements = [];\n for (var i = 0; i < base.length; i++) {\n rowElements.push(base[i]);\n }\n return rowElements;\n };\n DashboardLayout.prototype.isLeftAdjustable = function (spaces, ele, row, col, sizeX, sizeY) {\n var isLeftAdjudtable;\n if (sizeX === 1 && sizeY === 1 && spaces.length > 0) {\n this.spacedColumnValue = spaces[0];\n isLeftAdjudtable = true;\n }\n else if (sizeX > 1 && sizeY === 1) {\n isLeftAdjudtable = this.isXSpacingAvailable(spaces, sizeX);\n }\n else if (sizeY > 1) {\n if (sizeX === 1) {\n var xAdjust = void 0;\n if (spaces.length >= 1) {\n xAdjust = true;\n }\n if (xAdjust) {\n for (var i = 0; i < spaces.length; i++) {\n var collisionValue = this.collisions(row, spaces[i], sizeX, sizeY, this.checkingElement);\n if (collisionValue.length === 0) {\n this.spacedColumnValue = spaces[i];\n isLeftAdjudtable = true;\n return isLeftAdjudtable;\n }\n else {\n isLeftAdjudtable = false;\n }\n }\n }\n }\n else {\n isLeftAdjudtable = this.replacable(spaces, sizeX, row, sizeY, ele);\n }\n }\n return isLeftAdjudtable;\n };\n DashboardLayout.prototype.isRightAdjustable = function (spacing, ele, row, col, sizeX, sizeY) {\n var isRightAdjudtable;\n if (sizeX === 1 && sizeY === 1 && spacing.length > 0) {\n this.spacedColumnValue = spacing[0];\n isRightAdjudtable = true;\n }\n else if (sizeX > 1 && sizeY === 1) {\n isRightAdjudtable = this.isXSpacingAvailable(spacing, sizeX);\n }\n else if (sizeY > 1) {\n if (sizeX === 1) {\n var xAdjust = void 0;\n if (spacing.length >= 1) {\n xAdjust = true;\n }\n if (xAdjust) {\n for (var i = 0; i < spacing.length; i++) {\n var collisionValue = this.collisions(row, spacing[i], sizeX, sizeY, this.checkingElement);\n for (var collision = 0; collision < collisionValue.length; collision++) {\n if (parseInt(ele.getAttribute('data-col'), 10) !== spacing[i]) {\n collisionValue.splice(collisionValue.indexOf(collisionValue[collision]), 1);\n }\n }\n if (collisionValue.length === 0) {\n isRightAdjudtable = true;\n this.spacedColumnValue = spacing[i];\n return isRightAdjudtable;\n }\n else {\n isRightAdjudtable = false;\n }\n }\n }\n }\n else {\n isRightAdjudtable = this.replacable(spacing, sizeX, row, sizeY, ele);\n }\n }\n return isRightAdjudtable;\n };\n DashboardLayout.prototype.replacable = function (spacing, sizeX, row, sizeY, ele) {\n var isRightAdjudtable;\n var updatedCollision = [];\n for (var j = 0; j < spacing.length; j++) {\n var xAdjust = this.isXSpacingAvailable(spacing, sizeX);\n if (xAdjust) {\n var exclusions = [];\n exclusions.push(this.checkingElement);\n exclusions.push(ele);\n if (updatedCollision.length === 0) {\n isRightAdjudtable = true;\n // eslint-disable-next-line no-self-assign\n this.spacedColumnValue = this.spacedColumnValue;\n return isRightAdjudtable;\n }\n else {\n isRightAdjudtable = false;\n }\n }\n }\n return isRightAdjudtable;\n };\n DashboardLayout.prototype.sortCollisionItems = function (collisionItems) {\n var updatedCollision = [];\n var rowElements;\n var _loop_3 = function (row) {\n rowElements = [];\n collisionItems.forEach(function (element) {\n if (element && element.getAttribute('data-row') === row.toString()) {\n rowElements.push(element);\n }\n });\n var _loop_4 = function (column) {\n rowElements.forEach(function (item) {\n if (item && item.getAttribute('data-col') === column.toString()) {\n updatedCollision.push(item);\n }\n });\n };\n for (var column = this_2.columns - 1; column >= 0; column--) {\n _loop_4(column);\n }\n };\n var this_2 = this;\n for (var row = this.rows - 1; row >= 0; row--) {\n _loop_3(row);\n }\n return updatedCollision;\n };\n DashboardLayout.prototype.updatedModels = function (collisionItems, panelModel, ele) {\n var _this = this;\n var removeableElement = [];\n if (!this.mainElement) {\n this.sortedPanel();\n }\n collisionItems.forEach(function (element) {\n _this.checkingElement = element;\n var model = _this.getCellInstance(element.id);\n var adjust = !_this.adjustmentAvailable(model.row, model.col, model.sizeY, model.sizeX, ele);\n if (model.sizeX > 1 && adjust) {\n for (var rowValue = model.row; rowValue < panelModel.row + panelModel.sizeY; rowValue++) {\n var collisions = _this.collisions(rowValue, model.col, model.sizeX, model.sizeY, element);\n collisions.forEach(function (item) {\n if (collisionItems.indexOf(item) >= 0 && removeableElement.indexOf(item) === -1) {\n removeableElement.push(item);\n }\n });\n }\n }\n });\n removeableElement.forEach(function (item) {\n if (removeableElement.indexOf(item) >= 0) {\n collisionItems.splice(collisionItems.indexOf(item), 1);\n }\n });\n return collisionItems;\n };\n DashboardLayout.prototype.resetLayout = function (model) {\n var collisions = this.collisions(model.row, model.col, model.sizeX, model.sizeY, this.mainElement);\n if (!this.mainElement || this.addPanelCalled || this.resizeCalled || this.movePanelCalled) {\n return collisions;\n }\n if (this.mainElement && this.oldRowCol !== this.cloneObject) {\n for (var i = 0; i < this.panels.length; i++) {\n var element = document.getElementById(this.panels[i].id);\n if (element === this.mainElement) {\n continue;\n }\n var rowValue = this.cloneObject[element.id].row;\n var colValue = this.cloneObject[element.id].col;\n this.setPanelPosition(element, rowValue, colValue);\n this.panelPropertyChange(this.getCellInstance(element.id), { row: rowValue, col: colValue });\n this.setAttributes({ value: { col: colValue.toString(), row: rowValue.toString() } }, element);\n this.updateOldRowColumn();\n }\n }\n this.sortedArray = this.cloneArray;\n collisions = this.collisions(model.row, model.col, model.sizeX, model.sizeY, this.mainElement);\n this.sortedPanel();\n this.updateOldRowColumn();\n if (this.checkCollision && this.checkCollision.length > 0 && collisions.indexOf(this.checkCollision[0]) === -1 &&\n this.cloneObject[this.checkCollision[0].id].row === model.row) {\n collisions.push(this.checkCollision[0]);\n }\n return collisions;\n };\n DashboardLayout.prototype.swapAvailability = function (collisions, element) {\n var available = true;\n var eleModel = this.getCellInstance(element.id);\n for (var count = 0; count < collisions.length; count++) {\n var collideModel = this.getCellInstance(collisions[count].id);\n for (var i = 1; i < eleModel.sizeY; i++) {\n var excludeEle = [];\n excludeEle.push(element);\n excludeEle.push(collisions[count]);\n var collision = this.collisions(eleModel.row + i, collideModel.col, collideModel.sizeX, collideModel.sizeY, excludeEle);\n if (collision.length > 0) {\n available = false;\n return false;\n }\n else {\n continue;\n }\n }\n }\n return available;\n };\n DashboardLayout.prototype.checkForSwapping = function (collisions, element) {\n if (!this.mainElement || collisions.length === 0) {\n return false;\n }\n var direction;\n var eleSwapRow = parseInt(collisions[0].getAttribute('data-row'), 10);\n if (this.startRow < eleSwapRow) {\n direction = 1;\n }\n else if (this.startRow > eleSwapRow) {\n direction = 0;\n }\n if (!this.swapAvailability(collisions, element)) {\n return false;\n }\n var isSwappable = false;\n for (var count1 = 0; count1 < collisions.length; count1++) {\n if (collisions.length >= 1 && this.cloneObject[this.mainElement.id] && this.cloneObject[this.mainElement.id].row === this.oldRowCol[this.mainElement.id].row) {\n return false;\n }\n }\n var updatedRow = direction === 0 ?\n this.getCellInstance(this.mainElement.id).row + this.getCellInstance(this.mainElement.id).sizeY\n : this.startRow;\n for (var count = 0; count < collisions.length; count++) {\n var collideInstance = this.getCellInstance(collisions[count].id);\n var elementinstance = this.getCellInstance(element.id);\n var ignore = [];\n if (collideInstance.sizeY === 1 && ignore.indexOf(collisions[count]) === -1) {\n ignore.push(collisions[count]);\n }\n else if (collideInstance.sizeY > 1 && ignore.indexOf(collisions[count]) === -1) {\n if (direction === 1 && elementinstance.row === (this.cloneObject[collideInstance.id].row + collideInstance.sizeY - 1)) {\n ignore.push(collisions[count]);\n }\n else if (direction === 0 && elementinstance.row === (this.cloneObject[collideInstance.id].row)) {\n ignore.push(collisions[count]);\n }\n else {\n return false;\n }\n }\n if (collideInstance.sizeY <= elementinstance.sizeY && ignore.indexOf(collisions[count]) === -1) {\n ignore.push(collisions[count]);\n }\n ignore.push(this.mainElement);\n var swapCollision = this.collisions(updatedRow, collideInstance.col, collideInstance.sizeX, collideInstance.sizeY, ignore);\n if (swapCollision.length > 0) {\n isSwappable = false;\n return isSwappable;\n }\n else {\n if (count === collisions.length - 1) {\n isSwappable = true;\n }\n continue;\n }\n }\n return isSwappable;\n };\n DashboardLayout.prototype.swapItems = function (collisions, element, panelModel) {\n var _this = this;\n var direction;\n var swappedElements = [];\n swappedElements.push(element);\n var eleSwapRow = parseInt(collisions[0].getAttribute('data-row'), 10);\n if (this.startRow < eleSwapRow) {\n direction = 1;\n }\n else if (this.startRow > eleSwapRow) {\n direction = 0;\n }\n var collisionItemsRow = direction === 0 ? eleSwapRow + panelModel.sizeY : this.startRow;\n if (!this.movePanelCalled) {\n var collisionInstance = this.getCellInstance(collisions[0].id);\n this.panelPropertyChange(panelModel, { row: direction === 0 ? eleSwapRow : collisionItemsRow + collisionInstance.sizeY });\n }\n for (var count = 0; count < collisions.length; count++) {\n swappedElements.push(collisions[count]);\n this.setPanelPosition(collisions[count], collisionItemsRow, (this.getCellInstance(collisions[count].id)).col);\n this.panelPropertyChange(this.getCellInstance(collisions[count].id), { row: collisionItemsRow });\n collisions[count].setAttribute('data-row', collisionItemsRow.toString());\n }\n element.setAttribute('data-row', panelModel.row.toString());\n this.setPanelPosition(this.shadowEle, panelModel.row, panelModel.col);\n for (var i = 0; i < this.panels.length; i++) {\n this.oldRowCol[this.panels[i].id] = { row: this.panels[i].row, col: this.panels[i].col };\n }\n this.startRow = panelModel.row;\n this.updateOldRowColumn();\n swappedElements.forEach(function (item) {\n _this.cloneObject[item.id] = _this.oldRowCol[item.id];\n var itemModel = _this.getCellInstance(item.id);\n for (var i = 0; i < _this.sortedArray.length; i++) {\n if (!_this.sortedArray[i]) {\n continue;\n }\n for (var j = 0; j < _this.sortedArray[i].length; j++) {\n if (_this.sortedArray[i][j] === item) {\n _this.sortedArray[i][j] = undefined;\n }\n }\n }\n if (!_this.sortedArray[itemModel.row]) {\n _this.sortedArray[itemModel.row] = [];\n }\n _this.sortedArray[itemModel.row][itemModel.col] = item;\n _this.cloneArray = _this.sortedArray;\n });\n };\n DashboardLayout.prototype.updatePanelLayout = function (element, panelModel) {\n this.collisionChecker = {};\n var initialModel = [];\n var checkForAdjustment;\n var collisionModels = [];\n var swappingAvailable;\n if (this.mainElement && this.isRenderComplete) {\n initialModel = this.resetLayout(panelModel);\n }\n else {\n initialModel = this.collisions(panelModel.row, panelModel.col, panelModel.sizeX, panelModel.sizeY, element);\n }\n if (initialModel.length > 0) {\n initialModel = this.sortCollisionItems(initialModel);\n initialModel = this.updatedModels(initialModel, panelModel, element);\n swappingAvailable = !isNullOrUndefined(this.startRow) ? this.checkForSwapping(initialModel, element) : false;\n if (swappingAvailable) {\n this.swapItems(initialModel, element, panelModel);\n }\n else {\n for (var i = 0; i < initialModel.length; i++) {\n var model = this.getCellInstance(initialModel[i].id);\n this.checkingElement = initialModel[i];\n this.spacedRowValue = null;\n this.spacedColumnValue = null;\n checkForAdjustment = this.adjustmentAvailable(model.row, model.col, model.sizeY, model.sizeX, element);\n if (checkForAdjustment && !isNullOrUndefined(this.spacedColumnValue)) {\n this.setPanelPosition(initialModel[i], this.spacedRowValue, this.spacedColumnValue);\n this.oldRowCol[(initialModel[i].id)] = { row: this.spacedRowValue, col: this.spacedColumnValue };\n var value = {\n attributes: {\n row: this.spacedRowValue.toString(),\n col: this.spacedColumnValue.toString()\n }\n };\n this.setAttributes(value, initialModel[i]);\n this.panelPropertyChange(model, { col: this.spacedColumnValue, row: this.spacedRowValue });\n // updated the panel model array as inTopAdjustable case with floating enabled instead of dragging and extra row\n if (this.topAdjustable && this.allowFloating) {\n this.updatePanels();\n this.updateCloneArrayObject();\n }\n this.spacedRowValue = null;\n if (i < initialModel.length) {\n continue;\n }\n }\n else {\n collisionModels.push(initialModel[i]);\n }\n }\n }\n }\n if (collisionModels.length > 0) {\n // eslint-disable-next-line\n var proxy_1 = this;\n collisionModels.forEach(function (item1) {\n if (proxy_1.overlapElement.indexOf(item1) === -1) {\n proxy_1.overlapElement.push(item1);\n }\n });\n if (this.overlapElement && this.overlapElement.indexOf(element) !== -1) {\n this.overlapElement.splice(this.overlapElement.indexOf(element), 1);\n }\n if (collisionModels.length > 0) {\n this.updateRowColumn(panelModel.row, this.overlapElement, element);\n this.checkForCompletePushing();\n }\n }\n if (!this.isSubValue) {\n this.sortedPanel();\n }\n this.updateRowHeight();\n this.updateGridLines();\n };\n DashboardLayout.prototype.checkForCompletePushing = function () {\n for (var i = 0; i < this.panels.length; i++) {\n if (this.collisionChecker[this.panels[i].id] && this.collisionChecker[this.panels[i].id] !== null) {\n this.overlapElement = [this.collisionChecker[this.panels[i].id].ele];\n var key = this.panels[i].id;\n this.updateRowColumn(this.collisionChecker[key].row, this.overlapElement, this.collisionChecker[key].srcEle);\n }\n }\n };\n DashboardLayout.prototype.updateCollisionChecked = function (item) {\n for (var count = 0; count < Object.keys(this.collisionChecker).length; count++) {\n this.collisionChecker[item.id] = null;\n }\n };\n DashboardLayout.prototype.updateRowColumn = function (row, ele, srcEle) {\n if (!srcEle) {\n return;\n }\n var eleSizeY = parseInt(srcEle.getAttribute('data-sizeY'), 10);\n var eleRow = parseInt(srcEle.getAttribute('data-row'), 10);\n this.overlapElementClone = this.overlapElement && !this.shouldRestrict ? this.overlapElement : this.overlapElement;\n for (var i = 0; i < this.overlapElementClone.length; i++) {\n if (this.overlapElementClone.length === 0) {\n return;\n }\n for (var i_1 = 0; i_1 < this.overlapElementClone.length; i_1++) {\n this.collisionChecker[this.overlapElementClone[i_1].id] = {\n ele: this.overlapElementClone[i_1],\n row: row,\n srcEle: srcEle\n };\n }\n var updatedRow = eleRow + eleSizeY;\n var collisionY = parseInt(this.overlapElementClone[i].getAttribute('data-sizeY'), 10);\n var collisionCol = parseInt(this.overlapElementClone[i].getAttribute('data-col'), 10);\n var collisionX = parseInt(this.overlapElementClone[i].getAttribute('data-sizeX'), 10);\n var colValue = void 0;\n var collisionModels = void 0;\n if (this.overlapSubElementClone.indexOf(srcEle) === -1) {\n this.overlapSubElementClone.push(srcEle);\n }\n if (this.overlapSubElementClone.indexOf(this.overlapElementClone[i]) === -1) {\n this.overlapSubElementClone.push(this.overlapElementClone[i]);\n }\n if (collisionY > 1 || collisionX > 1) {\n var overlapElementModel = this.getCellInstance(this.overlapElementClone[i].id);\n colValue = overlapElementModel.col;\n var ele_1 = document.getElementById(overlapElementModel.id);\n for (var k = overlapElementModel.row; k < eleRow + eleSizeY; k++) {\n this.isSubValue = true;\n this.panelPropertyChange(overlapElementModel, { row: overlapElementModel.row + 1 });\n ele_1.setAttribute('data-row', overlapElementModel.row.toString());\n this.setPanelPosition(ele_1, overlapElementModel.row, colValue);\n this.updateCollisionChecked(ele_1);\n this.oldRowCol[(ele_1.id)] = { row: overlapElementModel.row, col: colValue };\n var panelModel = this.getCellInstance(ele_1.id);\n this.panelPropertyChange(panelModel, { col: colValue, row: overlapElementModel.row });\n var eleRow_1 = parseInt(ele_1.getAttribute('data-row'), 10);\n var eleCol = parseInt(ele_1.getAttribute('data-col'), 10);\n var sizeX = parseInt(ele_1.getAttribute('data-sizeX'), 10);\n var sizeY = parseInt(ele_1.getAttribute('data-sizeY'), 10);\n var excludeElements = [];\n excludeElements.push(ele_1);\n excludeElements.push(srcEle);\n collisionModels = this.collisions(eleRow_1, eleCol, sizeX, sizeY, excludeElements);\n if (this.mainElement && collisionModels.indexOf(this.mainElement) !== -1) {\n collisionModels.splice(collisionModels.indexOf(this.mainElement), 1);\n }\n this.collisionPanel(collisionModels, eleCol, eleRow_1, ele_1);\n }\n this.isSubValue = false;\n }\n else {\n if (this.addPanelCalled) {\n this.addPanelCalled = false;\n }\n this.overlapElementClone[i].setAttribute('data-row', updatedRow.toString());\n var excludeEle = [];\n excludeEle.push(this.overlapElementClone[i]);\n excludeEle.push(srcEle);\n collisionModels = this.collisions(updatedRow, collisionCol, collisionX, collisionY, excludeEle);\n if (this.mainElement && collisionModels.indexOf(this.mainElement) !== -1) {\n collisionModels.splice(collisionModels.indexOf(this.mainElement), 1);\n }\n colValue = parseInt(this.overlapElementClone[i].getAttribute('data-col'), 10);\n this.setPanelPosition(this.overlapElementClone[i], updatedRow, colValue);\n this.updateCollisionChecked(this.overlapElementClone[i]);\n this.oldRowCol[(this.overlapElementClone[i].id)] = { row: updatedRow, col: colValue };\n var panelModel = this.getCellInstance(this.overlapElementClone[i].id);\n this.panelPropertyChange(panelModel, { col: colValue, row: updatedRow });\n this.collisionPanel(collisionModels, colValue, updatedRow, this.overlapElementClone[i]);\n }\n }\n };\n DashboardLayout.prototype.collisionPanel = function (collisionModels, colValue, updatedRow, clone) {\n var panelModel = this.getCellInstance(clone.id);\n this.panelPropertyChange(panelModel, { row: updatedRow, col: colValue });\n if (collisionModels.length > 0) {\n // eslint-disable-next-line\n var proxy_2 = this;\n this.overlapElement = [];\n this.shouldRestrict = true;\n collisionModels.forEach(function (item1) {\n proxy_2.overlapElement.push(item1);\n });\n var overlapElementRow1 = parseInt(clone.getAttribute('data-row'), 10);\n for (var m = 0; m < this.overlapElement.length; m++) {\n this.updateRowColumn(overlapElementRow1, this.overlapElement, clone);\n }\n this.shouldRestrict = false;\n }\n else {\n if (!this.addPanelCalled) {\n this.sortedPanel();\n }\n if (this.overlapSubElementClone.length > 0) {\n var _loop_5 = function (p) {\n var rowVal = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-row'), 10);\n var colValue_1 = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-col'), 10);\n var sizeX = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-sizeX'), 10);\n var sizeY = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-sizeY'), 10);\n var collisionModels1 = this_3.collisions(rowVal, colValue_1, sizeX, sizeY, this_3.overlapSubElementClone);\n if (this_3.mainElement && collisionModels1.indexOf(this_3.mainElement) !== -1) {\n collisionModels1.splice(collisionModels1.indexOf(this_3.mainElement), 1);\n }\n // eslint-disable-next-line\n var proxy = this_3;\n collisionModels1.forEach(function (item1) {\n proxy.overlapElement.push(item1);\n });\n if (collisionModels1.length > 0) {\n this_3.updateRowColumn(rowVal, this_3.overlapElement, this_3.overlapSubElementClone[p]);\n }\n };\n var this_3 = this;\n for (var p = 0; p < this.overlapSubElementClone.length; p++) {\n _loop_5(p);\n }\n }\n this.overlapSubElementClone = [];\n }\n };\n DashboardLayout.prototype.removeResizeClasses = function (panelElements) {\n for (var i = 0; i < panelElements.length; i++) {\n var element = panelElements[i];\n var resizerElements = element.querySelectorAll('.e-resize');\n for (var i_2 = 0; i_2 < resizerElements.length; i_2++) {\n detach(resizerElements[i_2]);\n }\n }\n };\n DashboardLayout.prototype.ensureDrag = function () {\n this.checkDragging(this.dragCollection);\n var dragPanels = this.element.querySelectorAll('.' + drag);\n removeClass(dragPanels, [drag]);\n this.setClasses(this.panelCollection);\n };\n DashboardLayout.prototype.setClasses = function (panelCollection) {\n for (var i = 0; i < panelCollection.length; i++) {\n var element = panelCollection[i];\n var containerEle = panelCollection[i].querySelector('.e-panel-container');\n if (this.allowDragging) {\n if (this.draggableHandle && element.querySelectorAll(this.draggableHandle)[0]) {\n addClass([element.querySelectorAll(this.draggableHandle)[0]], [drag]);\n }\n else {\n addClass([element], [drag]);\n }\n }\n if (this.allowResizing &&\n this.mediaQuery ? !(this.checkMediaQuery()) : false) {\n this.setResizingClass(element, containerEle);\n }\n }\n };\n DashboardLayout.prototype.setResizingClass = function (ele, container) {\n this.availableClasses = this.resizableHandles;\n if (!ele.querySelector(\".e-resize\")) {\n for (var j = 0; j < this.availableClasses.length; j++) {\n var spanEle = this.createElement('span');\n var addClassValue = void 0;\n container.appendChild(spanEle);\n if (this.availableClasses[j] === 'e-east' || this.availableClasses[j] === 'e-west' ||\n this.availableClasses[j] === 'e-north' || this.availableClasses[j] === 'e-south') {\n addClassValue = single;\n }\n else {\n addClassValue = double;\n }\n addClass([spanEle], [addClassValue, this.availableClasses[j], resize, resizeicon]);\n }\n }\n };\n DashboardLayout.prototype.setXYAttributes = function (element, panelModel) {\n var value = {\n value: {\n sizeX: panelModel.sizeX.toString(),\n sizeY: panelModel.sizeY.toString(),\n minSizeX: panelModel.minSizeX.toString(),\n minSizeY: panelModel.minSizeY.toString(),\n maxSizeX: !isNullOrUndefined(panelModel.maxSizeX) ? panelModel.maxSizeX.toString() : undefined,\n maxSizeY: !isNullOrUndefined(panelModel.maxSizeY) ? panelModel.maxSizeY.toString() : undefined,\n row: panelModel.row.toString(),\n col: panelModel.col.toString()\n }\n };\n this.setAttributes(value, element);\n };\n DashboardLayout.prototype.setXYDimensions = function (panelModel) {\n var cellHeight = this.getCellSize()[1];\n var cellWidth = this.getCellSize()[0];\n var widthValue;\n var heigthValue;\n if (panelModel && typeof (cellWidth) === 'number' && typeof (panelModel.sizeX) === 'number' && panelModel.sizeX > 1) {\n widthValue = (panelModel.sizeX * cellWidth) + (panelModel.sizeX - 1) * this.cellSpacing[0];\n }\n else {\n widthValue = cellWidth;\n }\n if (panelModel && typeof (cellHeight) === 'number' && panelModel.sizeY > 1 && typeof (panelModel.sizeY) === 'number') {\n heigthValue = (panelModel.sizeY * cellHeight) + (panelModel.sizeY - 1) * this.cellSpacing[1];\n }\n else {\n heigthValue = formatUnit(cellHeight);\n }\n return [heigthValue, widthValue];\n };\n DashboardLayout.prototype.getRowColumnDragValues = function (args) {\n var value = [];\n var elementTop = parseFloat(args.element.style.top);\n var elementLeft = parseFloat(args.element.style.left);\n var row = Math.round(elementTop / (this.getCellSize()[1] + this.cellSpacing[1]));\n var col = Math.round(elementLeft / (this.getCellSize()[0] + +this.cellSpacing[0]));\n value = [row, col];\n return value;\n };\n DashboardLayout.prototype.checkForChanges = function (isInteracted, added, removed) {\n var changedPanels = [];\n if (this.removeAllCalled) {\n changedPanels = [];\n }\n else {\n for (var i = 0; i < this.panels.length; i++) {\n if (((!isNullOrUndefined(added) ? (this.panels[i].id !== added[0].id) : true) &&\n (!isNullOrUndefined(removed) ? (this.panels[i].id !== removed[0].id) : true)) &&\n (this.panels[i].row !== this.panelsInitialModel[i].row || this.panels[i].col !== this.panelsInitialModel[i].col)) {\n changedPanels.push(this.panels[i]);\n }\n }\n }\n if (changedPanels.length > 0 || this.removeAllCalled) {\n var changedArgs = {\n changedPanels: changedPanels, isInteracted: isInteracted,\n addedPanels: !isNullOrUndefined(added) ? added : [], removedPanels: !isNullOrUndefined(removed) ? removed : []\n };\n this.trigger('change', changedArgs);\n }\n };\n DashboardLayout.prototype.enableDraggingContent = function (collections) {\n var _this = this;\n for (var i = 0; i < collections.length; i++) {\n var abortArray = ['.e-resize', '.' + dragRestrict];\n var cellElement = collections[i];\n {\n this.dragobj = new Draggable(cellElement, {\n preventDefault: false,\n clone: false,\n dragArea: this.element,\n isDragScroll: true,\n handle: this.draggableHandle ? this.draggableHandle : '.e-panel',\n abort: abortArray,\n dragStart: this.onDraggingStart.bind(this),\n dragStop: function (args) {\n var model = _this.getCellInstance(_this.mainElement.id);\n if (_this.allowPushing &&\n _this.collisions(model.row, model.col, model.sizeX, model.sizeY, _this.mainElement).length > 0) {\n _this.setHolderPosition(args);\n _this.setPanelPosition(_this.mainElement, model.row, model.col);\n _this.updatePanelLayout(_this.mainElement, model);\n }\n else {\n _this.setPanelPosition(_this.mainElement, model.row, model.col);\n }\n _this.mainElement = null;\n var item = _this.getPanelBase(args);\n if (_this.shadowEle) {\n detach(_this.shadowEle);\n }\n removeClass([_this.element], [preventSelect]);\n removeClass([args.element], [dragging]);\n _this.shadowEle = null;\n args.element.classList.remove('e-dragging');\n var row = _this.getRowColumnDragValues(args)[0];\n var col = _this.getRowColumnDragValues(args)[1];\n var panelModel = _this.getCellInstance(args.element.id);\n if (_this.allowPushing &&\n _this.collisions(row, col, panelModel.sizeX, panelModel.sizeY, document.getElementById(item.id)).length === 0) {\n _this.panelPropertyChange(_this.getCellInstance(args.element.id), { row: row, col: col });\n _this.oldRowCol[args.element.id].row = row;\n _this.oldRowCol[args.element.id].col = col;\n _this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n _this.sortedPanel();\n }\n else {\n _this.panelPropertyChange(_this.getCellInstance(args.element.id), {\n row: _this.oldRowCol[args.element.id].row,\n col: _this.oldRowCol[args.element.id].col\n });\n args.element.setAttribute('data-col', _this.getCellInstance(args.element.id).col.toString());\n args.element.setAttribute('data-row', _this.getCellInstance(args.element.id).row.toString());\n _this.sortedPanel();\n }\n var panelInstance = _this.getCellInstance(args.element.id);\n _this.setPanelPosition(args.element, panelInstance.row, panelInstance.col);\n _this.updatePanels();\n _this.updateCloneArrayObject();\n _this.checkForChanges(true);\n _this.dragStopEventArgs = { event: args.event, element: args.element };\n _this.trigger('dragStop', args);\n _this.resizeEvents();\n _this.rows = _this.maxRow(true);\n _this.setHeightWidth();\n _this.updateDragArea();\n },\n drag: function (args) {\n _this.draggedEventArgs = {\n event: args.event,\n element: args.element,\n target: closest((args.target), '.e-panel')\n };\n _this.trigger('drag', _this.draggedEventArgs);\n _this.onDragStart(args);\n }\n });\n if (this.dragCollection.indexOf(this.dragobj) === -1) {\n this.dragCollection.push(this.dragobj);\n }\n }\n }\n };\n DashboardLayout.prototype.updatePanels = function () {\n this.moveItemsUpwards();\n this.updateOldRowColumn();\n this.sortedPanel();\n };\n DashboardLayout.prototype.updateDragArea = function () {\n this.dragCollection.forEach(function (dragobj) {\n // eslint-disable-next-line\n dragobj.setDragArea();\n });\n };\n DashboardLayout.prototype.updateRowsHeight = function (row, sizeY, addRows) {\n if (row + sizeY >= this.rows) {\n this.rows = this.rows + addRows;\n this.setHeightWidth();\n }\n };\n DashboardLayout.prototype.onDraggingStart = function (args) {\n var dragArgs = args;\n this.trigger('dragStart', dragArgs, function (dragArgs) {\n });\n this.panelsInitialModel = this.cloneModels(this.panels);\n this.mainElement = args.element;\n this.cloneObject = JSON.parse(JSON.stringify(this.cloneObject));\n var eleRowValue = this.startRow = parseInt(args.element.getAttribute('data-row'), 10);\n this.startCol = parseInt(args.element.getAttribute('data-col'), 10);\n var eleSizeY = parseInt(args.element.getAttribute('data-sizeY'), 10);\n this.updateRowsHeight(eleRowValue, eleSizeY, eleSizeY);\n this.updateDragArea();\n this.shadowEle = document.createElement('div');\n this.shadowEle.classList.add('e-holder');\n this.shadowEle.classList.add('e-holder-transition');\n setStyle(this.shadowEle, { 'position': 'absolute' });\n addClass([this.element], [preventSelect]);\n addClass([args.element], [dragging]);\n this.element.appendChild(this.shadowEle);\n this.renderReactTemplates();\n this.shadowEle = document.querySelector('.e-holder');\n this.shadowEle.style.height = (this.getCellInstance(args.element.id).sizeY * this.cellSize[1]) + 'px';\n this.shadowEle.style.width = (this.getCellInstance(args.element.id).sizeX * this.cellSize[0]) + 'px';\n var panelInstance = this.getCellInstance(args.element.id);\n this.setPanelPosition(this.shadowEle, panelInstance.row, panelInstance.col);\n };\n // eslint-disable-next-line\n DashboardLayout.prototype.cloneModels = function (source, target) {\n if (target === undefined) {\n target = [];\n }\n for (var i = 0; i < source.length; i++) {\n // tslint:disable-next-line\n if (!target[i]) {\n target[i] = {};\n }\n // eslint-disable-next-line guard-for-in\n for (var k in source[i]) {\n target[i][k] = source[i][k];\n }\n }\n return target;\n };\n DashboardLayout.prototype.onDragStart = function (args) {\n var endCol;\n var endRow;\n var dragCol;\n var col = dragCol = this.getRowColumnDragValues(args)[1];\n var row = this.getRowColumnDragValues(args)[0];\n if (col < 0 || row < 0) {\n return;\n }\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n var panelModel = this.getCellInstance(args.element.id);\n this.updateRowsHeight(panelModel.row, panelModel.sizeY, 1);\n this.updateDragArea();\n if (this.allowPushing) {\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n endCol = this.oldRowCol[(args.element.id)].col;\n endRow = this.oldRowCol[(args.element.id)].row;\n this.oldRowCol[(args.element.id)] = { row: row, col: col };\n this.updateOldRowColumn();\n if (this.startCol !== endCol || this.startRow !== endRow) {\n this.setHolderPosition(args);\n if (this.startCol !== endCol) {\n this.startRow = endRow;\n }\n if (this.startRow !== endRow) {\n this.startCol = endCol;\n }\n if (this.allowPushing) {\n this.mainElement = args.element;\n var model = panelModel;\n this.checkCollision = this.collisions(model.row, model.col, model.sizeX, model.sizeY, args.element);\n if (panelModel.col >= this.checkColumnValue) {\n this.checkCollision = [];\n }\n this.updatePanelLayout(args.element, panelModel);\n this.moveItemsUpwards();\n }\n }\n }\n if (this.allowPushing !== false) {\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n }\n if (this.oldRowCol[args.element.id].row !== row || this.oldRowCol[args.element.id].col !== col) {\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n }\n if (this.startCol !== dragCol) {\n this.startCol = endCol;\n this.moveItemsUpwards();\n }\n if (!this.allowPushing) {\n this.setHolderPosition(args);\n }\n this.removeResizeClasses(this.panelCollection);\n this.setClasses(this.panelCollection);\n if (this.allowPushing === false) {\n return;\n }\n };\n DashboardLayout.prototype.getPanelBase = function (args) {\n var item;\n for (var i = 0; i < this.panelCollection.length; i++) {\n if (this.panelCollection[i].id === ((args.element\n && args.element.id) || args)) {\n item = this.panelCollection[i];\n }\n }\n return item;\n };\n DashboardLayout.prototype.getPanel = function (row, column, excludeItems) {\n if (excludeItems && !(excludeItems instanceof Array)) {\n excludeItems = [excludeItems];\n }\n var sizeY = 1;\n while (row > -1) {\n var sizeX = 1;\n var col = column;\n while (col > -1) {\n var items = this.sortedArray[row];\n if (items) {\n var item = items[col];\n if (item && (!excludeItems ||\n excludeItems.indexOf(item) === -1) && parseInt(item.getAttribute('data-sizeX'), 10) >= sizeX\n && parseInt(item.getAttribute('data-sizeY'), 10) >= sizeY) {\n return item;\n }\n }\n ++sizeX;\n --col;\n }\n --row;\n ++sizeY;\n }\n return null;\n };\n DashboardLayout.prototype.setHolderPosition = function (args) {\n var sizeY = parseInt(args.element.getAttribute('data-sizeY'), 10);\n var col = parseInt(args.element.getAttribute('data-col'), 10);\n var row = parseInt(args.element.getAttribute('data-row'), 10);\n var sizeX = parseInt(args.element.getAttribute('data-sizeX'), 10);\n var widthValue = this.getCellSize()[0];\n var heightValue = this.getCellSize()[1];\n var top = row === 0 ? 0 : (((row) * (heightValue + this.cellSpacing[1])));\n var left = col === 0 ? 0 : (((col) * (widthValue + this.cellSpacing[0])));\n var cellSizeOne = this.getCellSize()[1];\n var cellSizeZero = this.getCellSize()[0];\n this.elementRef.top = this.shadowEle.style.top = top + 'px';\n this.elementRef.left = this.shadowEle.style.left = left + 'px';\n this.elementRef.height = this.shadowEle.style.height = ((sizeY * cellSizeOne) + ((sizeY - 1) * this.cellSpacing[1])) + 'px';\n this.elementRef.width = this.shadowEle.style.width = ((sizeX * cellSizeZero) + ((sizeX - 1) * this.cellSpacing[0])) + 'px';\n };\n DashboardLayout.prototype.getCellInstance = function (idValue) {\n var currentCellInstance;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].id === idValue) {\n currentCellInstance = this.panels[i];\n }\n }\n return currentCellInstance;\n };\n /**\n * Allows to add a panel to the Dashboardlayout.\n *\n * @param {panel} panel - Defines the panel element.\n *\n * @returns void\n * @deprecated\n */\n DashboardLayout.prototype.addPanel = function (panel) {\n this.panelsSizeY = 0;\n this.maxCol();\n if (!panel.minSizeX) {\n panel.minSizeX = 1;\n }\n if (!panel.minSizeY) {\n panel.minSizeY = 1;\n }\n if (!panel.id) {\n panel.id = 'layout_' + this.panelID.toString();\n this.panelID = this.panelID + 1;\n }\n // eslint-disable-next-line\n var panelProp = new Panel(this, 'panels', panel, true);\n this.panels.push(panelProp);\n this.panelsInitialModel = this.cloneModels(this.panels);\n this.setMinMaxValues(panelProp);\n if (this.maxColumnValue < panelProp.col || this.maxColumnValue < (panelProp.col + panelProp.sizeX)) {\n this.panelPropertyChange(panelProp, { col: this.maxColumnValue - panelProp.sizeX });\n }\n var cell = this.renderCell(panelProp, true, null);\n this.oldRowCol[panelProp.id] = { row: panelProp.row, col: panelProp.col };\n this.cloneObject[panelProp.id] = { row: panelProp.row, col: panelProp.col };\n this.updateOldRowColumn();\n this.element.insertAdjacentElement('afterbegin', cell);\n this.addPanelCalled = true;\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n this.removeResizeClasses(this.panelCollection);\n }\n else {\n this.mainElement = cell;\n if (!this.checkCollision) {\n this.checkCollision = [];\n }\n this.setPanelPosition(cell, panelProp.row, panelProp.col);\n this.updatePanelLayout(cell, panelProp);\n }\n this.addPanelCalled = false;\n if (this.allowDragging &&\n this.mediaQuery ? !(this.checkMediaQuery()) : false) {\n this.enableDraggingContent([document.getElementById(panelProp.id)]);\n }\n this.setClasses([cell]);\n if (this.allowFloating) {\n this.mainElement = null;\n this.moveItemsUpwards();\n }\n this.updateOldRowColumn();\n this.sortedPanel();\n this.updateCloneArrayObject();\n if (this.allowResizing) {\n for (var i = 0; i < cell.querySelectorAll('.e-resize').length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n EventHandler.add(cell.querySelectorAll('.e-resize')[i], eventName, this.downResizeHandler, this);\n if (Browser.info.name !== 'msie') {\n EventHandler.add(cell.querySelectorAll('.e-resize')[i], 'touchstart', this.touchDownResizeHandler, this);\n }\n }\n }\n this.checkForChanges(false, [panelProp]);\n };\n /**\n * Allows to update a panel in the DashboardLayout.\n *\n * @param {panel} panel - Defines the panel element.\n *\n * @returns void\n * @deprecated\n */\n DashboardLayout.prototype.updatePanel = function (panel) {\n this.panelsSizeY = 0;\n if (!panel.id) {\n return;\n }\n var panelInstance = this.getCellInstance(panel.id);\n if (!panelInstance) {\n return;\n }\n this.maxCol();\n panel.col = (panel.col < 1) ? 0 : ((panel.col > this.columns)) ? this.columns - 1 : panel.col;\n if (isNullOrUndefined(panel.col)) {\n panel.col = panelInstance.col;\n }\n this.panelPropertyChange(panelInstance, panel);\n this.setMinMaxValues(panelInstance);\n var cell = document.getElementById(panel.id);\n this.mainElement = cell;\n var cssClass = panelInstance.cssClass ? panelInstance.cssClass.split(' ') : null;\n this.panelContent = cell.querySelector('.e-panel-container') ?\n cell.querySelector('.e-panel-container') :\n this.createSubElement(cssClass, cell.id + '_content', panelContainer);\n cell.appendChild(this.panelContent);\n if (panelInstance.header) {\n var headerTemplateElement = cell.querySelector('.e-panel-header') ?\n cell.querySelector('.e-panel-header') : this.createSubElement([], cell.id + 'template', '');\n addClass([headerTemplateElement], [header]);\n headerTemplateElement.innerHTML = '';\n var id = this.element.id + 'HeaderTemplate' + panelInstance.id;\n this.renderTemplate(panelInstance.header, headerTemplateElement, id, true, 'header');\n this.panelContent.appendChild(headerTemplateElement);\n this.renderReactTemplates();\n }\n else {\n if (cell.querySelector('.e-panel-header')) {\n detach(cell.querySelector('.e-panel-header'));\n }\n }\n if (panelInstance.content) {\n var cssClass_2 = panelInstance.cssClass ? panelInstance.cssClass.split(' ') : null;\n this.panelBody = cell.querySelector('.e-panel-content') ? cell.querySelector('.e-panel-content') :\n this.createSubElement(cssClass_2, cell.id + '_body', panelContent);\n this.panelBody.innerHTML = '';\n var headerHeight = this.panelContent.querySelector('.e-panel-header') ?\n window.getComputedStyle(this.panelContent.querySelector('.e-panel-header')).height : '0px';\n var contentHeightValue = 'calc( 100% - ' + headerHeight + ')';\n setStyle(this.panelBody, { height: contentHeightValue });\n var id = this.element.id + 'ContentTemplate' + panelInstance.id;\n this.renderTemplate(panelInstance.content, this.panelBody, id, true, 'content');\n this.panelContent.appendChild(this.panelBody);\n this.renderReactTemplates();\n }\n else {\n if (cell.querySelector('.e-panel-content')) {\n detach(cell.querySelector('.e-panel-content'));\n }\n }\n this.setXYAttributes(cell, panelInstance);\n this.setHeightAndWidth(cell, panelInstance);\n this.setPanelPosition(cell, panelInstance.row, panelInstance.col);\n this.updatePanelLayout(cell, panelInstance);\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n this.mainElement = null;\n this.updatePanels();\n this.updateCloneArrayObject();\n };\n DashboardLayout.prototype.updateCloneArrayObject = function () {\n this.cloneArray = this.sortedArray;\n this.cloneObject = JSON.parse(JSON.stringify(this.oldRowCol));\n };\n /**\n * Returns the panels object of the DashboardLayout.\n *\n * @returns [`PanelModel[]`](./panelModel)\n */\n DashboardLayout.prototype.serialize = function () {\n var cloneModel = this.cloneModels(this.panels);\n var customObject = [];\n for (var i = 0; i < cloneModel.length; i++) {\n customObject.push({\n id: cloneModel[i].id, row: cloneModel[i].row, col: cloneModel[i].col, sizeX: cloneModel[i].sizeX,\n sizeY: cloneModel[i].sizeY, minSizeX: cloneModel[i].minSizeX, minSizeY: cloneModel[i].minSizeY,\n maxSizeX: cloneModel[i].maxSizeX, maxSizeY: cloneModel[i].maxSizeY\n });\n }\n return (customObject);\n };\n /**\n * Removes all the panels from the DashboardLayout.\n */\n DashboardLayout.prototype.removeAll = function () {\n this.removeAllCalled = true;\n for (var i = 0; i < this.panelCollection.length; i++) {\n detach(this.panelCollection[i]);\n this.clearTemplate();\n }\n this.removeAllPanel();\n this.rows = 0;\n this.gridPanelCollection = [];\n this.setHeightWidth();\n this.sortedPanel();\n this.sortedArray = [];\n this.overlapElementClone = [];\n this.overlapElement = [];\n this.overlapSubElementClone = [];\n this.panelCollection = [];\n this.oldRowCol = {};\n this.cloneObject = {};\n var clonedPanels = this.cloneModels(this.panels);\n this.setProperties({ panels: [] }, true);\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkForChanges(false, null, clonedPanels);\n this.removeAllCalled = false;\n };\n /**\n * Removes the panel from the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @returns void\n */\n DashboardLayout.prototype.removePanel = function (id) {\n var _this = this;\n this.panelsSizeY = 0;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var removedPanel;\n for (var i = 0; i < this.panelCollection.length; i++) {\n if (this.panelCollection[i].id === id) {\n detach(this.panelCollection[i]);\n this.panelCollection.splice(i, 1);\n }\n if (this.panels[i].id === id) {\n removedPanel = this.panels[i];\n this.panels.splice(i, 1);\n this.panelsInitialModel.splice(i, 1);\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n }\n this.updatePanels();\n if (this.checkMediaQuery()) {\n this.isPanelRemoved = true;\n this.checkMediaQuerySizing();\n this.isPanelRemoved = false;\n }\n this.gridPanelCollection.forEach(function (item) {\n if (item.id === id) {\n _this.gridPanelCollection.splice(_this.gridPanelCollection.indexOf(item), 1);\n }\n });\n this.updateCloneArrayObject();\n this.checkForChanges(false, null, [removedPanel]);\n };\n /**\n *Moves the panel in the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @param {number} row - Defines the row of dashboard layout.\n *\n * @param {number} col - Defines the column of dashboard layout.\n *\n * @returns void\n */\n DashboardLayout.prototype.movePanel = function (id, row, col) {\n this.movePanelCalled = true;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var panelInstance = this.getCellInstance(id);\n if ((isNaN(row) || row === null) || (isNaN(col) || col === null) || !panelInstance) {\n return;\n }\n if (col < 0) {\n col = 0;\n }\n else if (col > this.columns) {\n col = this.columns - panelInstance.sizeX;\n }\n this.panelPropertyChange(panelInstance, { row: row, col: col });\n var ele = document.getElementById(id);\n this.mainElement = ele;\n this.startRow = parseInt(ele.getAttribute('data-row'), 10);\n this.startCol = parseInt(ele.getAttribute('data-col'), 10);\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, ele);\n this.updateOldRowColumn();\n this.setPanelPosition(ele, row, col);\n this.updatePanelLayout(ele, panelInstance);\n this.updateRowHeight();\n this.updatePanels();\n this.updateCloneArrayObject();\n this.mainElement = null;\n if (this.allowFloating) {\n this.moveItemsUpwards();\n }\n this.movePanelCalled = false;\n this.checkForChanges(false);\n };\n DashboardLayout.prototype.setAttributes = function (value, ele) {\n for (var i = 0; i < Object.keys(value).length; i++) {\n if (Object.keys(value)) {\n if (value[Object.keys(value)[i]].col) {\n ele.setAttribute('data-col', value[Object.keys(value)[i]].col.toString());\n }\n if (value[Object.keys(value)[i]].row) {\n ele.setAttribute('data-row', value[Object.keys(value)[i]].row.toString());\n }\n if (value[Object.keys(value)[i]].sizeX) {\n ele.setAttribute('data-sizeX', value[Object.keys(value)[i]].sizeX.toString());\n }\n if (value[Object.keys(value)[i]].sizeY) {\n ele.setAttribute('data-sizeY', value[Object.keys(value)[i]].sizeY.toString());\n }\n if (value[Object.keys(value)[i]].minSizeX) {\n ele.setAttribute('data-minSizeX', value[Object.keys(value)[i]].minSizeX.toString());\n }\n if (value[Object.keys(value)[i]].minSizeY) {\n ele.setAttribute('data-minSizeY', value[Object.keys(value)[i]].minSizeY.toString());\n }\n if (value[Object.keys(value)[i]].maxSizeX) {\n ele.setAttribute('data-maxSizeY', value[Object.keys(value)[i]].maxSizeX.toString());\n }\n if (value[Object.keys(value)[i]].maxSizeY) {\n ele.setAttribute('data-maxSizeY', value[Object.keys(value)[i]].maxSizeY.toString());\n }\n }\n }\n };\n /**\n * Resize the panel in the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @param {number} sizeX - Defines the sizeX of dashboard layout.\n *\n * @param {number} sizeY - Defines the sizeY of dashboard layout.\n */\n DashboardLayout.prototype.resizePanel = function (id, sizeX, sizeY) {\n this.panelsInitialModel = this.cloneModels(this.panels);\n var panelInstance = this.getCellInstance(id);\n this.resizeCalled = true;\n var ele = document.getElementById(id);\n var args = { event: null, element: ele, isInteracted: false };\n this.trigger('resizeStart', args);\n this.panelPropertyChange(panelInstance, { sizeX: sizeX, sizeY: sizeY });\n this.setMinMaxValues(panelInstance);\n this.checkMinMaxValues(panelInstance);\n this.mainElement = ele;\n this.setAttributes({ value: { sizeX: panelInstance.sizeX.toString(), sizeY: panelInstance.sizeY.toString() } }, ele);\n this.setHeightAndWidth(ele, panelInstance);\n this.updatePanelLayout(ele, panelInstance);\n this.updatePanels();\n this.updateRowHeight();\n this.resizeCalled = false;\n this.trigger('resizeStop', args);\n this.checkForChanges(false);\n };\n /**\n * Destroys the DashboardLayout component\n *\n * @returns void\n */\n DashboardLayout.prototype.destroy = function () {\n // eslint-disable-next-line\n EventHandler.remove(window, 'resize', this.refreshListener);\n removeClass([this.element], ['e-dashboardlayout', 'e-lib', 'e-responsive', 'e-control']);\n this.element.removeAttribute('style');\n for (var i = 0; i < this.dragCollection.length; i++) {\n this.dragCollection[i].destroy();\n }\n this.removeAllPanel();\n _super.prototype.destroy.call(this);\n this.clearTemplate();\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.removeAllPanel = function () {\n while (this.element.firstElementChild) {\n detach(this.element.firstElementChild);\n this.clearTemplate();\n }\n };\n DashboardLayout.prototype.setEnableRtl = function () {\n if (this.enableRtl === true) {\n addClass([this.element], 'e-rtl');\n }\n else {\n removeClass([this.element], 'e-rtl');\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n *\n * @private\n */\n DashboardLayout.prototype.updateCellSizeAndSpacing = function () {\n this.panelResponsiveUpdate();\n this.setHeightWidth();\n this.getRowColumn();\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[i];\n var panelModel = this.getCellInstance(ele.id);\n this.setHeightAndWidth(ele, panelModel);\n this.setPanelPosition(ele, panelModel.row, panelModel.col);\n }\n };\n DashboardLayout.prototype.updatePanelsDynamically = function (panels) {\n this.removeAll();\n this.setProperties({ panels: panels }, true);\n this.setOldRowCol();\n if (this.table) {\n this.table.remove();\n }\n this.initialize();\n if (this.checkMediaQuery()) {\n this.refresh();\n }\n if (this.showGridLines) {\n this.initGridLines();\n }\n };\n DashboardLayout.prototype.checkForIDValues = function (panels) {\n var _this = this;\n if (!isNullOrUndefined(panels) && panels.length > 0) {\n this.panelID = 0;\n panels.forEach(function (panel) {\n if (!panel.id) {\n _this.panelPropertyChange(panel, { id: 'layout_' + _this.panelID.toString() });\n _this.panelID = _this.panelID + 1;\n }\n });\n }\n else {\n this.restrictDynamicUpdate = true;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * returns void\n *\n * @private\n */\n // eslint-disable-next-line\n DashboardLayout.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (newProp.panels && newProp.panels.length > 0 && newProp.panels[0] instanceof Panel) {\n this.checkForIDValues(newProp.panels);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'mediaQuery':\n this.setProperties({ mediaQuery: newProp.mediaQuery }, true);\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n break;\n case 'allowDragging':\n this.setProperties({ allowDragging: newProp.allowDragging }, true);\n this.ensureDrag();\n break;\n case 'allowResizing':\n this.setProperties({ allowResizing: newProp.allowResizing }, true);\n if (this.allowResizing) {\n this.setClasses(this.panelCollection);\n this.resizeEvents();\n }\n else {\n var panelElements = this.element.querySelectorAll('.e-panel .e-panel-container .e-resize');\n for (var i = 0; i < panelElements.length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n var element = panelElements[i];\n EventHandler.remove(element, eventName, this.downResizeHandler);\n if (Browser.info.name !== 'msie') {\n EventHandler.remove(element, 'touchstart', this.touchDownResizeHandler);\n }\n }\n this.removeResizeClasses(this.panelCollection);\n }\n break;\n case 'cellSpacing':\n this.setProperties({ cellSpacing: newProp.cellSpacing }, true);\n this.updateCellSizeAndSpacing();\n this.updateGridLines();\n break;\n case 'draggableHandle':\n this.setProperties({ draggableHandle: newProp.draggableHandle }, true);\n this.ensureDrag();\n break;\n case 'allowFloating':\n this.setProperties({ allowFloating: newProp.allowFloating }, true);\n this.moveItemsUpwards();\n break;\n case 'showGridLines':\n if (this.showGridLines) {\n this.setProperties({ showGridLines: newProp.showGridLines }, true);\n this.initGridLines();\n }\n else {\n if (this.table) {\n detach(this.table);\n }\n }\n break;\n case 'allowPushing':\n this.setProperties({ allowPushing: newProp.allowPushing }, true);\n break;\n case 'panels':\n if (!newProp.columns && !this.restrictDynamicUpdate && (newProp.panels[0] && newProp.panels.length > 0)) {\n this.isRenderComplete = false;\n this.updatePanelsDynamically(newProp.panels);\n this.isRenderComplete = true;\n }\n else if (!(newProp.panels[0] && newProp.panels.length)) {\n this.isRenderComplete = false;\n this.updatePanelsDynamically(this.panels);\n this.isRenderComplete = true;\n }\n else {\n this.restrictDynamicUpdate = false;\n }\n break;\n case 'columns':\n this.isRenderComplete = false;\n if (newProp.panels) {\n this.updatePanelsDynamically(newProp.panels);\n }\n this.setProperties({ columns: newProp.columns }, true);\n this.panelCollection = [];\n this.maxColumnValue = this.columns;\n this.calculateCellSize();\n this.panels.forEach(function (panel) {\n _this.setMinMaxValues(panel);\n if (_this.maxColumnValue < panel.col || _this.maxColumnValue < (panel.col + panel.sizeX)) {\n var colValue = _this.maxColumnValue - panel.sizeX;\n _this.panelPropertyChange(panel, { col: colValue < 0 ? 0 : colValue });\n _this.setXYAttributes(document.getElementById(panel.id), panel);\n }\n _this.setHeightAndWidth(document.getElementById(panel.id), panel);\n _this.panelCollection.push(document.getElementById(panel.id));\n _this.setPanelPosition(document.getElementById(panel.id), panel.row, panel.col);\n _this.mainElement = document.getElementById(panel.id);\n _this.updatePanelLayout(document.getElementById(panel.id), panel);\n _this.mainElement = null;\n });\n this.updatePanels();\n this.updateCloneArrayObject();\n this.isRenderComplete = true;\n this.updateGridLines();\n break;\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns string\n * @private\n */\n DashboardLayout.prototype.getPersistData = function () {\n var keyEntity = ['panels'];\n return this.addOnPersist(keyEntity);\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.mergePersistPanelData = function (persistedData) {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === '')) || !isNullOrUndefined(persistedData)) {\n var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof getValue(key, this) === 'object' && !isNullOrUndefined(getValue(key, this)))) {\n if (Array.isArray(getValue(key, this)) && key === 'panels') {\n this.mergePanels(dataObj[key], this[key]);\n }\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.mergePanels = function (sortedPanels, panels) {\n var storedColumns = sortedPanels;\n var _loop_6 = function (i) {\n this_4.checkForIDValues(panels);\n var localPanel = panels.filter(function (pan) { return pan.id === storedColumns[i].id; })[0];\n if (!isNullOrUndefined(localPanel)) {\n storedColumns[i] = extend(localPanel, storedColumns[i], {}, true);\n }\n };\n var this_4 = this;\n for (var i = 0; i < storedColumns.length; i++) {\n _loop_6(i);\n }\n };\n /**\n * Returns the current module name.\n *\n * @returns string\n *\n * @private\n */\n DashboardLayout.prototype.getModuleName = function () {\n return 'DashboardLayout';\n };\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowDragging\", void 0);\n __decorate([\n Property(false)\n ], DashboardLayout.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowPushing\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowFloating\", void 0);\n __decorate([\n Property(1)\n ], DashboardLayout.prototype, \"cellAspectRatio\", void 0);\n __decorate([\n Property([5, 5])\n ], DashboardLayout.prototype, \"cellSpacing\", void 0);\n __decorate([\n Property(1)\n ], DashboardLayout.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], DashboardLayout.prototype, \"showGridLines\", void 0);\n __decorate([\n Property(null)\n ], DashboardLayout.prototype, \"draggableHandle\", void 0);\n __decorate([\n Property('en-US')\n ], DashboardLayout.prototype, \"locale\", void 0);\n __decorate([\n Property('max-width: 600px')\n ], DashboardLayout.prototype, \"mediaQuery\", void 0);\n __decorate([\n Collection([], Panel)\n ], DashboardLayout.prototype, \"panels\", void 0);\n __decorate([\n Property(['e-south-east'])\n ], DashboardLayout.prototype, \"resizableHandles\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"destroyed\", void 0);\n DashboardLayout = __decorate([\n NotifyPropertyChanges\n ], DashboardLayout);\n return DashboardLayout;\n}(Component));\nexport { DashboardLayout };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ROOT","PANE","SPLIT_H_PANE","SPLIT_V_PANE","SPLIT_BAR","STATIC_PANE","RESIZE_BAR","ARROW_LEFT","ARROW_UP","ARROW_DOWN","HIDE_ICON","PaneProperties","_super","apply","Property","ChildProperty","Splitter","options","element","call","onPropertyChanged","newProp","oldProp","classList","contains","_i","_a","keys","setSplitterSize","height","width","setCssClass","cssClass","isEnabled","enabled","setReversePane","setSeparatorSize","separatorSize","changeOrientation","orientation","paneSettings","destroyPaneSettings","allBars","allPanes","createSplitPane","addSeparator","getPanesDimensions","setRTL","enableRtl","isCollapsed","paneCounts","index","parseInt","changedPropsCount","j","property","newValue","isNullOrUndefined","innerHTML","setTemplate","newVal","resizableModel","collapsibleModelUpdate","collapsed","collapsedOnchange","newValSize","updatePaneSize","style","flexBasis","staticPaneWidth","flexPaneIndexes","flexCount","size","innerText","offsetWidth","offsetHeight","avgDiffWidth","border","add","initializeValues","paneOrder","separatorOrder","previousCoordinates","currentCoordinates","updatePrePaneInPercentage","updateNextPaneInPercentage","panesDimensions","validDataAttributes","validElementAttributes","iconsDelay","templateElement","collapseFlag","expandFlag","preRender","onReportWindowSize","reportWindowSize","bind","onMouseMoveHandler","onMouseMove","onMouseUpHandler","onMouseUp","onTouchMoveHandler","onTouchEndHandler","wrapper","cloneNode","wrapperParent","parentElement","removeClass","addClass","css","Browser","info","name","isDevice","getPersistData","addOnPersist","getModuleName","render","checkDataAttributes","setDimension","getHeight","getWidth","setPaneSettings","enableReversePanes","EventHandler","document","onDocumentClick","renderComplete","ownerDocument","defaultView","addEventListener","onMove","e","currentSeparator","remove","checkPaneSize","prePaneSize","previousPane","nextPaneSize","nextPane","splitBarSize","indexOf","previousFlexBasis","updatePaneFlexBasis","nextFlexBasis","totalPercent","totalWidth","convertPercentageToPixel","type","keyCode","getMinInPixel","nextPaneIndex","min","prevPaneIndex","addStaticPaneClass","event","getSeparatorIndex","isPrevpaneCollapsed","isPrevpaneExpanded","isNextpaneCollapsed","activeElement","resizable","preventDefault","triggerResizing","collapsible","expand","collapse","minValue","paneMinRange","convertPixelToNumber","toString","sanitizeHelper","value","enableHtmlSanitizer","item","SanitizeHtmlHelper","beforeSanitize","beforeEvent","cancel","helper","extend","trigger","serializeValue","api","dataIndex","getAttribute","removeDataPrefix","paneIndex","children","dataAttr","max","content","paneAPI","slice","forEach","el","detach","restoreElem","childCount","paneCollection","paneValue","setProperties","checkArrow","targetArrow","querySelector","attribute","lastIndexOf","rtl","reverse","setAttribute","removeAttribute","formatUnit","setStyleAttribute","push","getBoundingClientRect","className","split","hideResizer","select","showResizer","onMouseDown","isResizable","updateResizablePanes","arrow2","arrow1","paneCollapsible","updateCollapseIcons","collapseArrow","barIndex","arrow","selectAll","updateIsCollapsed","lastBarArrow","lastBarIndex","click","_this","m","targetArrows","targetEle","event_1","eventArgs","beforeAction","beforeCollapseArgs","collapsedindex","sort","collapseEventArgs","afterAction","splitterProperty","sizeValue","separator","splitBar","resizeBar","isVertical","checkSplitPane","currentBar","elementIndex","collectPanes","childNodes","elements","getPrevPane","order","getOrderPane","getNextPane","pane","getOrderIndex","panes","updateSeparatorSize","resizeHanlder","addResizeHandler","createElement","appendChild","updateIconClass","leftArrow","rightArrow","createSeparator","proxy","addMouseActions","getPaneDetails","clonedEle","parentNode","toLowerCase","wireClickEvents","eventName","allBar","querySelectorAll","sepSize","paddingLeft","paddingRight","getPreviousPaneIndex","getNextPaneIndex","sTout","hoverTimeOut","setTimeout","clearTimeout","getEventType","updateCurrentSeparator","isSeparator","isMouseEvent","isMouse","pointerType","updateCursorPosition","changeCoordinates","x","pageX","y","pageY","eventType","touches","coordinates","paneCount","body","removeEventListener","updateSplitterSize","iswindowResize","len","getComputedStyle","marginLeft","marginTop","marginBottom","diff","updatePane","flexPane","sizeDiff","isPercent","updatePaneOffset","convertPixelToPercentage","flexPaneOffset","wireResizeEvents","touchMoveEvent","touchEndEvent","unwireResizeEvents","clickHandler","hoverBars","icon","collapseAction","expandAction","splitterDetails","beforeExpandArgs","expandPane","expandEventArgs","removeStaticPanes","collapseCount","flexStatus","nextElementSibling","collapseClass","updatePaneSettings","updateIconsOnExpand","updateFlexGrow","checkStaticPanes","flexGrow","staticPane","status","visiblePane","hideTargetBarIcon","targetBar","showTargetBarIcon","updateIconsOnCollapse","showCurrentBarIcon","currentBarIndex","prevBar","previousElementSibling","splitInstance","prevPaneCollapsed","nextPaneExpanded","nextPaneNextEle","getPrevBar","nextBar","collapsePane","paneValues","nextPaneCollapsible","prevPaneCollapsible","prevPaneExpanded","nextPaneCollapsed","prevPanePreEle","currentIndex","array","getNextBar","updateBars","paneSize","prePaneDimenson","nextPaneDimension","pointerEvents","resizeStartArgs","previous","removePercentageUnit","offset","parseFloat","targetElement","convertedValue","percentage","offsetValue","Math","ceil","calcDragPosition","rectValue","getSeparatorPosition","rectBound","left","window","scrollX","top","scrollY","offSet","getMinMax","selection","defaultVal","separatorIndex","prevPane","getPaneHeight","isValidSize","isValid","getPaneDimensions","previousPaneHeightWidth","nextPaneHeightWidth","checkCoordinates","coordinatesChanged","isCursorMoved","getBorder","clientWidth","clientHeight","separatorNewPosition","validateDraggedPosition","prevPaneCurrentWidth","nextPaneCurrentWidth","validateMinMaxValues","difference","calculateCurrentDimensions","validateMinRange","paneCurrentWidth","paneMinDimensions","validatedVal","validateMaxRange","paneMaxDimensions","paneMaxRange","equatePaneWidths","round","Number","draggedPos","prevPaneHeightWidth","separatorTopLeft","offsetLeft","offsetTop","prePaneRange","nextPaneRange","pane1MinSize","pane2MinSize","pane1MaxSize","pane2MaxSize","validatedSize","enablePersistence","panesDimension","child","sizeFlag","flex-basis","template","toElement","templateCompile","isReact","renderReactTemplates","ele","cnt","tempEle","compileElement","childEle","val","prop","eleVal","display","removeProperty","trim","templateFn","outerHTML","compile","templateFUN","id","childElement","nodeName","destroy","isDestroyed","attributes","refreshing","clearTemplate","addPaneClass","removePaneOrders","paneClass","setPaneOrder","removeSeparator","updatePanes","addPane","paneProperties","newPane","paneDetails","splice","insertBefore","removePane","elementClass","Collection","Event","NotifyPropertyChanges","Component","drag","Panel","DashboardLayout","rows","panelID","movePanelCalled","resizeCalled","mOffX","mOffY","maxTop","maxRows","mouseX","mouseY","minTop","minLeft","isInlineRendering","removeAllCalled","isPanelRemoved","panelsSizeY","resizeHeight","setValue","mergePersistPanelData","panelCollection","sortedArray","gridPanelCollection","overlapElement","overlapElementClone","overlapSubElementClone","collisionChecker","dragCollection","elementRef","dimensions","allItems","oldRowCol","availableClasses","setOldRowCol","calculateCellSize","contentTemplateChild","panels","panelPropertyChange","row","col","createPanelElement","idValue","initialize","isRenderComplete","showGridLines","checkMediaQuery","initGridLines","updateDragArea","table","tbody","maxRow","tr","columns","td","setAttributes","sizeX","sizeY","setPanelPosition","setHeightAndWidth","updateRowHeight","childElementCount","panelElements","panelElement","getInlinePanels","maxCol","setMinMaxValues","maxColumnValue","colValue","setXYAttributes","panel_1","renderPanels","tempObject","mediaQuery","matchMedia","matches","mainElement","updatePanelLayout","setClasses","updateOldRowColumn","checkMediaQuerySizing","renderDashBoardCells","allowDragging","enableDraggingContent","sortedPanel","bindEvents","updatePanels","updateCloneArrayObject","checkColumnValue","panelResponsiveUpdate","setEnableRtl","cellSize","cellAspectRatio","cellSpacing","recheck","getElementById","createSubElement","templateParser","error","sanitizedValue","sanitize","renderTemplate","appendElement","isStringTemplate","templateElements","tagName","compilerFn","compilerFn_1","append","cellElement","panelModel","panelId","panelContent","disablePanel","header","headerTemplateElement","cssClass_1","panelBody","contentHeightValue","setStyle","model","hasAttribute","minSizeX","minSizeY","maxSizeX","maxSizeY","zIndex","isUndefined","panelProp","resizeEvents","allowResizing","downResizeHandler","touchDownResizeHandler","refreshListener","refresh","downHandler","lastMouseX","lastMouseY","moveEventName","upEventName","isMouseMoveBound","moveResizeHandler","isMouseUpBound","upResizeHandler","panelsInitialModel","cloneModels","closest","args","isInteracted","downTarget","currentTarget","shadowEle","elementX","elementY","elementWidth","elementHeight","originalWidth","getCellInstance","originalHeight","previousRow","changedTouches","touchMoveResizeHandler","getCellSize","updateMaxTopLeft","moveTarget","updateResizeElement","maxLeft","handleArray","handleClass","diffY","diffX","resizingPanel","currentX","currentY","oldSizeX","oldSizeY","dY","dX","getMinHeight","getMaxHeight","getMinWidth","getMaxWidth","getResizeRowColumn","upTarget","undefined","allowFloating","moveItemsUpwards","checkForChanges","isChanged","pixelsToColumns","pixelsToRows","collisions","getPanelBase","allowPushing","pixels","isCeil","curColWidth","floor","l","sortItem","rowIndex","colIndex","moveItemUpwards","updateGridLines","availableRow","availableColumn","rowValue","columnValue","column","oldRow","updateLayout","internalPanels","cellInstance","removeResizeClasses","checkDragging","sortPanels","this_1","filter","panel","updatedPanel","updatedRows","updatedHeight","getRowColumn","setHeightWidth","heightValue","widthValue","entirePanelsY","setXYDimensions","renderCell","dashBoardCell","xValue","checkMinMaxValues","cells","cell","ignore","items","h","w","getPanel","rightWardsSpaceChecking","rowElements","spacedColumns","sizeXValue","occupiedValues","getOccupiedColumns","checkingElement","next","occupiedItems","leftWardsSpaceChecking","prev","adjustmentAvailable","leftAdjustable","rightAdjustable","rightSpacing","isAdjustable","rowElement","topAdjustable","eleSizeX","eleCol","getRowElements","leftSpacing","isLeftAdjustable","spacedColumnValue","isRightAdjustable","endRow","topCheck","startRow","spacedRowValue","isXSpacingAvailable","spacing","isSpaceAvailable","subSpacingColumns","base","spaces","isLeftAdjudtable","xAdjust","replacable","isRightAdjudtable","collisionValue","collision","updatedCollision","exclusions","sortCollisionItems","collisionItems","this_2","updatedModels","removeableElement","adjust","resetLayout","addPanelCalled","cloneObject","cloneArray","checkCollision","swapAvailability","available","eleModel","count","collideModel","excludeEle","checkForSwapping","direction","eleSwapRow","isSwappable","count1","updatedRow","collideInstance","elementinstance","swapItems","swappedElements","collisionItemsRow","collisionInstance","itemModel","initialModel","collisionModels","proxy_1","item1","updateRowColumn","checkForCompletePushing","isSubValue","srcEle","updateCollisionChecked","eleSizeY","eleRow","shouldRestrict","i_1","collisionY","collisionCol","collisionX","overlapElementModel","ele_1","k","eleRow_1","excludeElements","collisionPanel","clone","proxy_2","overlapElementRow1","this_3","rowVal","colValue_1","collisionModels1","resizerElements","i_2","ensureDrag","dragPanels","containerEle","draggableHandle","setResizingClass","container","resizableHandles","spanEle","addClassValue","heigthValue","cellHeight","cellWidth","getRowColumnDragValues","elementTop","elementLeft","added","removed","changedPanels","changedArgs","addedPanels","removedPanels","collections","abortArray","dragobj","Draggable","dragArea","isDragScroll","handle","abort","dragStart","onDraggingStart","dragStop","setHolderPosition","panelInstance","dragStopEventArgs","draggedEventArgs","onDragStart","setDragArea","updateRowsHeight","addRows","dragArgs","JSON","parse","stringify","eleRowValue","startCol","position","source","endCol","dragCol","excludeItems","cellSizeOne","cellSizeZero","currentCellInstance","addPanel","insertAdjacentElement","updatePanel","cssClass_2","serialize","cloneModel","customObject","removeAll","removeAllPanel","clonedPanels","removePanel","removedPanel","movePanel","isNaN","resizePanel","firstElementChild","updateCellSizeAndSpacing","updatePanelsDynamically","checkForIDValues","restrictDynamicUpdate","keyEntity","persistedData","data","localStorage","getItem","dataObj","isProtectedOnChange","keys_1","getValue","isArray","mergePanels","sortedPanels","storedColumns","this_4","localPanel","pan"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ej2-layouts.min.js","sources":["../../src/splitter/splitter.js","../../src/dashboard-layout/dashboard-layout.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, setStyleAttribute, ChildProperty, compile } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, addClass, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, selectAll, removeClass, select, Browser, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nvar ROOT = 'e-splitter';\nvar HORIZONTAL_PANE = 'e-splitter-horizontal';\nvar VERTICAL_PANE = 'e-splitter-vertical';\nvar PANE = 'e-pane';\nvar SPLIT_H_PANE = 'e-pane-horizontal';\nvar SPLIT_V_PANE = 'e-pane-vertical';\nvar SPLIT_BAR = 'e-split-bar';\nvar SPLIT_H_BAR = 'e-split-bar-horizontal';\nvar SPLIT_V_BAR = 'e-split-bar-vertical';\nvar STATIC_PANE = 'e-static-pane';\nvar SCROLL_PANE = 'e-scrollable';\nvar RESIZE_BAR = 'e-resize-handler';\nvar RESIZABLE_BAR = 'e-resizable-split-bar';\nvar SPLIT_BAR_HOVER = 'e-split-bar-hover';\nvar SPLIT_BAR_ACTIVE = 'e-split-bar-active';\nvar HIDE_HANDLER = 'e-hide-handler';\nvar SPLIT_TOUCH = 'e-splitter-touch';\nvar DISABLED = 'e-disabled';\nvar RTL = 'e-rtl';\nvar E_ICONS = 'e-icons';\nvar COLLAPSIBLE = 'e-collapsible';\nvar NAVIGATE_ARROW = 'e-navigate-arrow';\nvar ARROW_RIGHT = 'e-arrow-right';\nvar ARROW_LEFT = 'e-arrow-left';\nvar ARROW_UP = 'e-arrow-up';\nvar ARROW_DOWN = 'e-arrow-down';\nvar HIDE_ICON = 'e-icon-hidden';\nvar EXPAND_PANE = 'e-expanded';\nvar COLLAPSE_PANE = 'e-collapsed';\nvar PANE_HIDDEN = 'e-pane-hidden';\nvar RESIZABLE_PANE = 'e-resizable';\nvar LAST_BAR = 'e-last-bar';\nvar BAR_SIZE_DEFAULT = 1;\n/**\n * Interface to configure pane properties such as its content, size, min, max, resizable, collapsed and collapsible.\n */\nvar PaneProperties = /** @class */ (function (_super) {\n __extends(PaneProperties, _super);\n function PaneProperties() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], PaneProperties.prototype, \"size\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsible\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsed\", void 0);\n __decorate([\n Property(true)\n ], PaneProperties.prototype, \"resizable\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"max\", void 0);\n __decorate([\n Property()\n ], PaneProperties.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], PaneProperties.prototype, \"cssClass\", void 0);\n return PaneProperties;\n}(ChildProperty));\nexport { PaneProperties };\n/**\n * Splitter is a layout user interface (UI) control that has resizable and collapsible split panes.\n * The container can be split into multiple panes, which are oriented horizontally or vertically.\n * The separator (divider) splits the panes and resizes and expands/collapses the panes.\n * The splitter is placed inside the split pane to make a nested layout user interface.\n *\n * ```html\n * <div id=\"splitter\">\n * <div> Left Pane </div>\n * <div> Center Pane </div>\n * <div> Right Pane </div>\n * </div>\n * ```\n * ```typescript\n * <script>\n * var splitterObj = new Splitter({ width: '300px', height: '200px'});\n * splitterObj.appendTo('#splitter');\n * </script>\n * ```\n */\nvar Splitter = /** @class */ (function (_super) {\n __extends(Splitter, _super);\n /**\n * Initializes a new instance of the Splitter class.\n *\n * @param options - Specifies Splitter model properties as options.\n * @param element - Specifies the element that is rendered as an Splitter.\n */\n function Splitter(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {SplitterModel} newProp - specifies the new property\n * @param {SplitterModel} oldProp - specifies the old property\n * @returns {void}\n * @private\n */\n Splitter.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n this.setSplitterSize(this.element, newProp.height, 'height');\n break;\n case 'width':\n this.setSplitterSize(this.element, newProp.width, 'width');\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass);\n break;\n case 'enabled':\n this.isEnabled(this.enabled);\n break;\n case 'enableReversePanes':\n this.setReversePane();\n break;\n case 'separatorSize':\n this.setSeparatorSize(newProp.separatorSize);\n break;\n case 'orientation':\n this.changeOrientation(newProp.orientation);\n break;\n case 'paneSettings': {\n if (!(newProp.paneSettings instanceof Array && oldProp.paneSettings instanceof Array)) {\n var paneCounts = Object.keys(newProp.paneSettings);\n for (var i = 0; i < paneCounts.length; i++) {\n var index = parseInt(Object.keys(newProp.paneSettings)[i], 10);\n var changedPropsCount = Object.keys(newProp.paneSettings[index]).length;\n for (var j = 0; j < changedPropsCount; j++) {\n var property = Object.keys(newProp.paneSettings[index])[j];\n switch (property) {\n case 'content': {\n var newValue = Object(newProp.paneSettings[index])[property];\n if (!isNullOrUndefined(newValue)) {\n this.allPanes[index].innerHTML = '';\n this.setTemplate(newValue, this.allPanes[index]);\n }\n break;\n }\n case 'resizable': {\n var newVal = Object(newProp.paneSettings[index])[property];\n this.resizableModel(index, newVal);\n break;\n }\n case 'collapsible':\n this.collapsibleModelUpdate(index);\n break;\n case 'collapsed':\n // eslint-disable-next-line\n newProp.paneSettings[index].collapsed ? this.isCollapsed(index) : this.collapsedOnchange(index);\n break;\n case 'cssClass':\n this.setCssClass(this.allPanes[index], newProp.paneSettings[index].cssClass);\n break;\n case 'size': {\n var newValSize = Object(newProp.paneSettings[index])[property];\n if (newValSize !== '' && !isNullOrUndefined(newValSize)) {\n this.updatePaneSize(newValSize, index);\n }\n break;\n }\n }\n }\n }\n }\n else {\n this.destroyPaneSettings();\n this.allBars = [];\n this.allPanes = [];\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setRTL(this.enableRtl);\n this.isCollapsed();\n }\n break;\n }\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n }\n }\n };\n Splitter.prototype.updatePaneSize = function (newValSize, index) {\n this.allPanes[index].style.flexBasis = newValSize;\n var flexPaneIndexes = [];\n var staticPaneWidth;\n var flexCount = 0;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.paneSettings[i].size && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n else if (this.paneSettings[i].size) {\n staticPaneWidth = this.orientation === 'Horizontal' ? this.allPanes[index].offsetWidth : this.allPanes[index].offsetHeight;\n }\n }\n staticPaneWidth = this.orientation === 'Horizontal' ? (this.allBars[0].offsetWidth * this.allBars.length) + staticPaneWidth :\n (this.allBars[0].offsetHeight * this.allBars.length) + staticPaneWidth;\n var flexPaneWidth = (this.orientation === 'Horizontal' ? this.element.offsetWidth : this.element.offsetHeight)\n - staticPaneWidth - (this.border * 2);\n var avgDiffWidth = flexPaneWidth / flexPaneIndexes.length;\n for (var j = 0; j < flexPaneIndexes.length; j++) {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = avgDiffWidth + 'px';\n }\n this.allPanes[index].classList.add(STATIC_PANE);\n };\n Splitter.prototype.initializeValues = function () {\n this.allPanes = [];\n this.paneOrder = [];\n this.separatorOrder = [];\n this.allBars = [];\n this.previousCoordinates = {};\n this.currentCoordinates = {};\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n this.panesDimensions = [];\n this.border = 0;\n this.validDataAttributes = ['data-size', 'data-min', 'data-max', 'data-collapsible',\n 'data-resizable', 'data-content', 'data-collapsed'];\n this.validElementAttributes = ['data-orientation', 'data-width', 'data-height'];\n this.iconsDelay = 300;\n this.templateElement = [];\n this.collapseFlag = false;\n this.expandFlag = true;\n };\n Splitter.prototype.preRender = function () {\n this.initializeValues();\n this.onReportWindowSize = this.reportWindowSize.bind(this);\n this.onMouseMoveHandler = this.onMouseMove.bind(this);\n this.onMouseUpHandler = this.onMouseUp.bind(this);\n this.onTouchMoveHandler = this.onMouseMove.bind(this);\n this.onTouchEndHandler = this.onMouseUp.bind(this);\n this.wrapper = this.element.cloneNode(true);\n this.wrapperParent = this.element.parentElement;\n removeClass([this.wrapper], ['e-control', 'e-lib', ROOT]);\n var orientation = this.orientation === 'Horizontal' ? HORIZONTAL_PANE : VERTICAL_PANE;\n addClass([this.element], orientation);\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : '';\n this.setCssClass(this.element, css);\n if (Browser.isDevice) {\n addClass([this.element], SPLIT_TOUCH);\n }\n };\n Splitter.prototype.getPersistData = function () {\n return this.addOnPersist(['paneSettings']);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - returns the string value\n * @private\n */\n Splitter.prototype.getModuleName = function () {\n return 'splitter';\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Splitter.prototype.render = function () {\n this.checkDataAttributes();\n this.setCssClass(this.element, this.cssClass);\n this.isEnabled(this.enabled);\n this.setDimension(this.getHeight(this.element), this.getWidth(this.element));\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setPaneSettings();\n this.setRTL(this.enableRtl);\n if (this.enableReversePanes) {\n this.setReversePane();\n }\n this.collapseFlag = true;\n this.isCollapsed();\n this.collapseFlag = false;\n EventHandler.add(document, 'touchstart click', this.onDocumentClick, this);\n this.renderComplete();\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onReportWindowSize, true);\n EventHandler.add(this.element, 'keydown', this.onMove, this);\n };\n Splitter.prototype.onDocumentClick = function (e) {\n if (!e.target.classList.contains(SPLIT_BAR) && !isNullOrUndefined(this.currentSeparator)) {\n this.currentSeparator.classList.remove(SPLIT_BAR_HOVER);\n this.currentSeparator.classList.remove(SPLIT_BAR_ACTIVE);\n }\n };\n Splitter.prototype.checkPaneSize = function (e) {\n var prePaneSize = this.orientation === 'Horizontal' ? this.previousPane.offsetWidth : this.previousPane.offsetHeight;\n var nextPaneSize = this.orientation === 'Horizontal' ? this.nextPane.offsetWidth : this.nextPane.offsetHeight;\n var splitBarSize = isNullOrUndefined(this.separatorSize) ? BAR_SIZE_DEFAULT : this.separatorSize;\n if ((this.previousPane.style.flexBasis.indexOf('%') > 0 || this.nextPane.style.flexBasis.indexOf('%') > 0)) {\n var previousFlexBasis = this.updatePaneFlexBasis(this.previousPane);\n var nextFlexBasis = this.updatePaneFlexBasis(this.nextPane);\n this.totalPercent = previousFlexBasis + nextFlexBasis;\n this.totalWidth = this.convertPercentageToPixel(this.totalPercent + '%');\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) <\n this.convertPercentageToPixel((nextFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis + 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis - 1) + '%';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) <\n this.convertPercentageToPixel((previousFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis - 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis + 1) + '%';\n }\n }\n }\n else {\n this.totalWidth = (this.orientation === 'Horizontal') ? this.previousPane.offsetWidth + this.nextPane.offsetWidth :\n this.previousPane.offsetHeight + this.nextPane.offsetHeight;\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) < (nextPaneSize + splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize + splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize < splitBarSize) ? '0px' :\n (nextPaneSize - splitBarSize) + 'px';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) < (prePaneSize - splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize < splitBarSize) ? '0px' :\n (prePaneSize - splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize + splitBarSize) + 'px';\n }\n }\n }\n };\n Splitter.prototype.onMove = function (event) {\n if (this.allPanes.length > 1) {\n var index = this.getSeparatorIndex(this.currentSeparator);\n var isPrevpaneCollapsed = this.previousPane.classList.contains(COLLAPSE_PANE);\n var isPrevpaneExpanded = this.previousPane.classList.contains(EXPAND_PANE);\n var isNextpaneCollapsed = this.nextPane.classList.contains(COLLAPSE_PANE);\n if (((this.orientation !== 'Horizontal' && event.keyCode === 38) || (this.orientation === 'Horizontal' &&\n event.keyCode === 39) ||\n (this.orientation === 'Horizontal' && event.keyCode === 37) || (this.orientation !== 'Horizontal' && event.keyCode === 40))\n && (!isPrevpaneExpanded && !isNextpaneCollapsed && !isPrevpaneCollapsed || (isPrevpaneExpanded) && !isNextpaneCollapsed) &&\n document.activeElement.classList.contains(SPLIT_BAR) && (this.paneSettings[index].resizable &&\n this.paneSettings[index + 1].resizable)) {\n event.preventDefault();\n this.checkPaneSize(event);\n this.triggerResizing(event);\n }\n else if (event.keyCode === 13 && this.paneSettings[index].collapsible &&\n document.activeElement.classList.contains(SPLIT_BAR) && this.currentSeparator.classList.contains(SPLIT_BAR_ACTIVE)) {\n if (!this.previousPane.classList.contains(COLLAPSE_PANE)) {\n this.collapse(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n else {\n this.expand(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n }\n }\n };\n Splitter.prototype.getMinInPixel = function (minValue) {\n var min;\n if (isNullOrUndefined(minValue)) {\n return 0;\n }\n var paneMinRange = this.convertPixelToNumber(minValue.toString());\n if (minValue.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(minValue);\n }\n min = this.convertPixelToNumber((paneMinRange).toString());\n return min;\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {string} returns the string\n * @hidden\n */\n Splitter.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n this.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n };\n Splitter.prototype.checkDataAttributes = function () {\n var api;\n var value;\n // Element values\n for (var dataIndex = 0; dataIndex < this.validElementAttributes.length; dataIndex++) {\n value = this.element.getAttribute(this.validElementAttributes[dataIndex]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validElementAttributes[dataIndex]);\n // eslint-disable-next-line\n this[api] = value;\n }\n }\n // Pane values\n for (var paneIndex = 0; paneIndex < this.element.children.length; paneIndex++) {\n for (var dataAttr = 0; dataAttr < this.validDataAttributes.length; dataAttr++) {\n value = this.element.children[paneIndex].getAttribute(this.validDataAttributes[dataAttr]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validDataAttributes[dataAttr]);\n value = (api === 'collapsible' || api === 'resizable') ? (value === 'true') : value;\n if (isNullOrUndefined(this.paneSettings[paneIndex])) {\n this.paneSettings[paneIndex] = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsible: false,\n collapsed: false\n };\n }\n // eslint-disable-next-line\n var paneAPI = this.paneSettings[paneIndex][api];\n if (api === 'resizable' || api === 'collapsible' || api === 'collapsed') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n if (isNullOrUndefined(paneAPI) || paneAPI === '') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n }\n }\n }\n };\n Splitter.prototype.destroyPaneSettings = function () {\n [].slice.call(this.element.children).forEach(function (el) {\n detach(el);\n });\n this.restoreElem();\n };\n Splitter.prototype.setPaneSettings = function () {\n var childCount = this.allPanes.length;\n var paneCollection = [];\n var paneValue = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsed: false,\n collapsible: false,\n cssClass: ''\n };\n for (var i = 0; i < childCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i])) {\n paneCollection[i] = paneValue;\n }\n else {\n paneCollection[i] = this.paneSettings[i];\n }\n }\n this.setProperties({ 'paneSettings': paneCollection }, true);\n };\n Splitter.prototype.checkArrow = function (paneIndex, targetArrow) {\n return (this.allBars[paneIndex].querySelector('.' + NAVIGATE_ARROW + '.' + targetArrow));\n };\n Splitter.prototype.removeDataPrefix = function (attribute) {\n return attribute.slice(attribute.lastIndexOf('-') + 1);\n };\n Splitter.prototype.setRTL = function (rtl) {\n // eslint-disable-next-line\n rtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Splitter.prototype.setReversePane = function () {\n this.allPanes = this.allPanes.reverse();\n this.allBars = this.allBars.reverse();\n addClass([this.allBars[this.allBars.length - 1]], LAST_BAR);\n removeClass([this.allBars[0]], LAST_BAR);\n this.setProperties({ 'paneSettings': this.paneSettings.reverse() }, true);\n if (this.enableReversePanes) {\n this.element.setAttribute('dir', 'rtl');\n }\n else {\n this.element.removeAttribute('dir');\n }\n };\n Splitter.prototype.setSplitterSize = function (element, size, property) {\n var style = property === 'width' ? { 'width': formatUnit(size) } : { 'height': formatUnit(size) };\n setStyleAttribute(element, style);\n };\n Splitter.prototype.getPanesDimensions = function () {\n for (var index = 0; index < this.allPanes.length; index++) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().width) :\n this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().height);\n }\n };\n Splitter.prototype.setCssClass = function (element, className) {\n if (className) {\n addClass([element], className.split(className.indexOf(',') > -1 ? ',' : ' '));\n }\n };\n Splitter.prototype.hideResizer = function (target) {\n addClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n };\n Splitter.prototype.showResizer = function (target) {\n if (!isNullOrUndefined(this.previousPane) && this.previousPane.classList.contains(RESIZABLE_PANE) &&\n !isNullOrUndefined(this.nextPane) && this.nextPane.classList.contains(RESIZABLE_PANE)) {\n removeClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n }\n };\n Splitter.prototype.resizableModel = function (index, newVal) {\n var paneIndex = (index === (this.allBars.length)) ? (index - 1) : index;\n var i = index;\n EventHandler.remove(this.allBars[paneIndex], 'mousedown', this.onMouseDown);\n if (newVal) {\n EventHandler.add(this.allBars[paneIndex], 'mousedown', this.onMouseDown, this);\n if (this.isResizable()) {\n this.showResizer(this.allBars[paneIndex]);\n removeClass([select('.' + RESIZE_BAR, this.allBars[paneIndex])], HIDE_HANDLER);\n this.allBars[paneIndex].classList.add(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.add(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.add(RESIZABLE_PANE);\n this.updateResizablePanes(i);\n }\n }\n else {\n this.updateResizablePanes(i);\n this.hideResizer(this.allBars[paneIndex]);\n this.allBars[paneIndex].classList.remove(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.remove(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.remove(RESIZABLE_PANE);\n }\n };\n Splitter.prototype.collapsibleModelUpdate = function (index) {\n var paneIndex = index === (this.allBars.length) ? (index - 1) : index;\n var arrow2 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_LEFT) : this.checkArrow(paneIndex, ARROW_UP);\n var arrow1 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_RIGHT) : this.checkArrow(paneIndex, ARROW_DOWN);\n this.paneCollapsible(this.allPanes[index], index);\n this.updateCollapseIcons(paneIndex, arrow1, arrow2);\n };\n Splitter.prototype.collapseArrow = function (barIndex, arrow) {\n return selectAll('.' + arrow, this.allBars[barIndex])[0];\n };\n Splitter.prototype.updateIsCollapsed = function (index, collapseArrow, lastBarArrow) {\n if (!isNullOrUndefined(index)) {\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, lastBarArrow) : this.collapseArrow(barIndex, collapseArrow);\n }\n targetEle.click();\n }\n };\n Splitter.prototype.isCollapsed = function (index) {\n var _this = this;\n if (!isNullOrUndefined(index) && this.paneSettings[index].collapsed\n && isNullOrUndefined(this.allPanes[index].classList.contains(COLLAPSE_PANE))) {\n return;\n }\n this.expandFlag = false;\n if (!isNullOrUndefined(index)) {\n this.collapseFlag = true;\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, this.targetArrows().lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, this.targetArrows().lastBarArrow) :\n this.collapseArrow(barIndex, this.targetArrows().collapseArrow);\n }\n var event_1 = { target: targetEle };\n var eventArgs = this.beforeAction(event_1);\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n var collapsedindex = [];\n collapsedindex[0] = index;\n var j = 1;\n for (var i = 0; i < _this.allPanes.length; i++) {\n if (_this.allPanes[i].classList.contains(COLLAPSE_PANE)) {\n collapsedindex[j] = i;\n j++;\n }\n }\n collapsedindex = collapsedindex.sort();\n _this.updateIsCollapsed(index, _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n for (var i = 0; i < collapsedindex.length; i++) {\n if (!_this.allPanes[collapsedindex[i]].classList.contains(COLLAPSE_PANE)) {\n _this.updateIsCollapsed(collapsedindex[i], _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n }\n }\n for (var i = collapsedindex.length; i > 0; i--) {\n if (!_this.allPanes[collapsedindex[i - 1]].classList.contains(COLLAPSE_PANE)) {\n var targetArrow = _this.targetArrows();\n _this.updateIsCollapsed(collapsedindex[i - 1], targetArrow.collapseArrow, targetArrow.lastBarArrow);\n }\n }\n var collapseEventArgs = _this.afterAction(event_1);\n _this.trigger('collapsed', collapseEventArgs);\n _this.collapseFlag = false;\n }\n });\n }\n else {\n for (var m = 0; m < this.allPanes.length; m++) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed) {\n this.updateIsCollapsed(m, this.targetArrows().collapseArrow, this.targetArrows().lastBarArrow);\n }\n }\n for (var m = this.allPanes.length - 1; m >= 0; m--) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed &&\n !this.allPanes[m].classList.contains(COLLAPSE_PANE)) {\n var collapseArrow = this.orientation === 'Horizontal' ? ARROW_RIGHT : ARROW_DOWN;\n if (m !== 0) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n if (!this.nextPane.classList.contains(COLLAPSE_PANE)) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n }\n }\n }\n this.expandFlag = true;\n };\n Splitter.prototype.targetArrows = function () {\n this.splitterProperty();\n return {\n collapseArrow: (this.orientation === 'Horizontal') ? ARROW_LEFT : ARROW_UP,\n lastBarArrow: (this.orientation === 'Vertical') ? ARROW_DOWN : ARROW_RIGHT\n };\n };\n Splitter.prototype.collapsedOnchange = function (index) {\n if (!isNullOrUndefined(this.paneSettings[index]) && !isNullOrUndefined(this.paneSettings[index].collapsed)\n && this.allPanes[index].classList.contains(COLLAPSE_PANE)) {\n this.updateIsCollapsed(index, this.targetArrows().lastBarArrow, this.targetArrows().collapseArrow);\n }\n };\n Splitter.prototype.isEnabled = function (enabled) {\n // eslint-disable-next-line\n enabled ? removeClass([this.element], DISABLED) : addClass([this.element], DISABLED);\n };\n Splitter.prototype.setSeparatorSize = function (size) {\n var sizeValue = isNullOrUndefined(size) ? 'auto' : size + 'px';\n var separator = this.orientation === 'Horizontal' ? SPLIT_H_BAR : SPLIT_V_BAR;\n for (var index = 0; index < this.allBars.length; index++) {\n var splitBar = selectAll('.' + separator, this.element)[index];\n var resizeBar = selectAll('.' + RESIZE_BAR, splitBar)[0];\n if (this.orientation === 'Horizontal') {\n splitBar.style.width = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.width = sizeValue;\n }\n }\n else {\n splitBar.style.height = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.height = sizeValue;\n }\n }\n }\n };\n Splitter.prototype.changeOrientation = function (orientation) {\n var isVertical = orientation === 'Vertical';\n this.element.classList.remove(isVertical ? HORIZONTAL_PANE : VERTICAL_PANE);\n this.element.classList.add(isVertical ? VERTICAL_PANE : HORIZONTAL_PANE);\n for (var index = 0; index < this.allPanes.length; index++) {\n this.allPanes[index].classList.remove(isVertical ? SPLIT_H_PANE : SPLIT_V_PANE);\n this.allPanes[index].classList.add(isVertical ? SPLIT_V_PANE : SPLIT_H_PANE);\n }\n for (var index = 0; index < this.allBars.length; index++) {\n detach(this.allBars[index]);\n }\n this.allBars = [];\n this.addSeparator(this.element);\n };\n Splitter.prototype.checkSplitPane = function (currentBar, elementIndex) {\n var paneEle = this.collectPanes(currentBar.parentElement.children)[elementIndex];\n return paneEle;\n };\n Splitter.prototype.collectPanes = function (childNodes) {\n var elements = [];\n for (var i = 0; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains(PANE)) {\n elements.push(childNodes[i]);\n }\n }\n return elements;\n };\n Splitter.prototype.getPrevPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order + 1) : this.getOrderPane(order - 1);\n };\n Splitter.prototype.getNextPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order - 1) : this.getOrderPane(order + 1);\n };\n Splitter.prototype.getOrderPane = function (order) {\n var pane;\n for (var i = 0; i < this.element.children.length; i++) {\n if (parseInt(this.element.children[i].style.order, 10) === order) {\n pane = this.element.children[i];\n }\n }\n return pane;\n };\n Splitter.prototype.getOrderIndex = function (order, type) {\n var index;\n var panes;\n if (type === 'pane') {\n panes = this.allPanes;\n }\n else {\n panes = this.allBars;\n }\n for (var i = 0; i < panes.length; i++) {\n if (parseInt(panes[i].style.order, 10) === order) {\n index = i;\n }\n }\n return index;\n };\n Splitter.prototype.updateSeparatorSize = function (resizeHanlder) {\n var sizeValue = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? (resizeHanlder.style.width = sizeValue) : resizeHanlder.style.height = sizeValue;\n };\n Splitter.prototype.addResizeHandler = function (currentBar) {\n var resizeHanlder = this.createElement('div');\n addClass([resizeHanlder], [RESIZE_BAR, E_ICONS]);\n this.updateSeparatorSize(resizeHanlder);\n currentBar.appendChild(resizeHanlder);\n };\n Splitter.prototype.getHeight = function (target) {\n var height = this.height;\n height = target.style.height !== '' && this.height === '100%' ? target.style.height : this.height;\n return height;\n };\n Splitter.prototype.getWidth = function (target) {\n var width = this.width;\n width = target.style.width !== '' && this.width === '100%' ? target.style.width : this.width;\n return width;\n };\n Splitter.prototype.setDimension = function (height, width) {\n setStyleAttribute(this.element, { 'height': height, 'width': width });\n };\n Splitter.prototype.updateCollapseIcons = function (index, arrow1, arrow2) {\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? removeClass([arrow2], [HIDE_ICON]) : addClass([arrow2], [HIDE_ICON]);\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n if ((this.paneSettings[index + 1].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n }\n }\n }\n };\n Splitter.prototype.updateIconClass = function () {\n if (this.orientation === 'Horizontal') {\n this.leftArrow = ARROW_LEFT;\n this.rightArrow = ARROW_RIGHT;\n }\n else {\n this.leftArrow = ARROW_UP;\n this.rightArrow = ARROW_DOWN;\n }\n };\n Splitter.prototype.createSeparator = function (i) {\n var separator = this.createElement('div');\n this.allBars.push(separator);\n var arrow1 = this.createElement('button');\n var arrow2 = this.createElement('button');\n arrow1.setAttribute('tabindex', '-1');\n arrow2.setAttribute('tabindex', '-1');\n arrow1.setAttribute('aria-label', 'Toggle navigation');\n arrow2.setAttribute('aria-label', 'Toggle navigation');\n arrow1.setAttribute('type', 'button');\n arrow2.setAttribute('type', 'button');\n var size = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n var proxy = this;\n if (this.orientation === 'Horizontal') {\n this.updateIconClass();\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_LEFT, HIDE_ICON]);\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_RIGHT, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_H_BAR]);\n separator.style.width = size;\n }\n else {\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_DOWN, HIDE_ICON]);\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_UP, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_V_BAR]);\n this.updateIconClass();\n separator.style.height = size;\n }\n this.addMouseActions(separator);\n separator.appendChild(arrow2);\n this.addResizeHandler(separator);\n separator.appendChild(arrow1);\n this.updateCollapseIcons(i, arrow1, arrow2);\n separator.setAttribute('tabindex', '0');\n if (this.enableReversePanes) {\n separator.setAttribute('dir', 'ltr');\n }\n else {\n separator.removeAttribute('dir');\n }\n separator.addEventListener('focus', function () {\n separator.classList.add(SPLIT_BAR_ACTIVE);\n proxy.currentSeparator = separator;\n proxy.getPaneDetails();\n });\n separator.addEventListener('blur', function () {\n separator.classList.remove(SPLIT_BAR_ACTIVE);\n });\n return separator;\n };\n Splitter.prototype.updateResizablePanes = function (index) {\n this.getPaneDetails();\n // eslint-disable-next-line\n this.isResizable() ? this.allPanes[index].classList.add(RESIZABLE_PANE) : this.allPanes[index].classList.remove(RESIZABLE_PANE);\n };\n Splitter.prototype.addSeparator = function (target) {\n var childCount = this.allPanes.length;\n var clonedEle = target.children;\n var separator;\n var proxy;\n for (var i = 0; i < childCount; i++) {\n if (i < childCount - 1) {\n separator = this.createSeparator(i);\n setStyleAttribute(separator, { 'order': (i * 2) + 1 });\n this.separatorOrder.push((i * 2) + 1);\n clonedEle[i].parentNode.appendChild(separator);\n this.currentSeparator = separator;\n separator.setAttribute('role', 'separator');\n separator.setAttribute('aria-orientation', this.orientation.toLowerCase());\n this.wireClickEvents();\n if (!isNullOrUndefined(separator)) {\n if (this.isResizable()) {\n EventHandler.add(separator, 'mousedown', this.onMouseDown, this);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(separator, eventName, this.onMouseDown, this);\n separator.classList.add(RESIZABLE_BAR);\n this.updateResizablePanes(i);\n }\n else {\n addClass([select('.' + RESIZE_BAR, separator)], HIDE_HANDLER);\n }\n }\n }\n else {\n if (separator) {\n addClass([separator], LAST_BAR);\n }\n if (childCount > 1) {\n this.updateResizablePanes(i);\n }\n }\n }\n if (Browser.info.name === 'msie') {\n var allBar = this.element.querySelectorAll('.e-splitter .e-resize-handler');\n for (var i = 0; i < allBar.length; i++) {\n var sepSize = isNullOrUndefined(this.separatorSize) ? 1 : this.separatorSize;\n allBar[i].style.paddingLeft = sepSize / 2 + 'px';\n allBar[i].style.paddingRight = sepSize / 2 + 'px';\n }\n }\n };\n Splitter.prototype.isResizable = function () {\n var resizable = false;\n if ((!isNullOrUndefined(this.paneSettings[this.getPreviousPaneIndex()]) &&\n this.paneSettings[this.getPreviousPaneIndex()].resizable &&\n !isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()]) &&\n this.paneSettings[this.getNextPaneIndex()].resizable) ||\n isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()])) {\n resizable = true;\n }\n return resizable;\n };\n Splitter.prototype.addMouseActions = function (separator) {\n var _this = this;\n var sTout;\n var hoverTimeOut;\n separator.addEventListener('mouseenter', function () {\n /* istanbul ignore next */\n sTout = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n }, _this.iconsDelay);\n });\n separator.addEventListener('mouseleave', function () {\n clearTimeout(sTout);\n removeClass([separator], [SPLIT_BAR_HOVER]);\n });\n separator.addEventListener('mouseout', function () {\n clearTimeout(hoverTimeOut);\n });\n separator.addEventListener('mouseover', function () {\n /* istanbul ignore next */\n hoverTimeOut = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n }, _this.iconsDelay);\n });\n };\n Splitter.prototype.getEventType = function (e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n };\n Splitter.prototype.updateCurrentSeparator = function (target) {\n this.currentSeparator = this.isSeparator(target) ? target.parentElement : target;\n };\n Splitter.prototype.isSeparator = function (target) {\n return (target.classList.contains(SPLIT_BAR) ? false : true);\n };\n Splitter.prototype.isMouseEvent = function (e) {\n var isMouse = false;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType) &&\n this.getEventType(e.pointerType) === 'mouse')) {\n isMouse = true;\n }\n return isMouse;\n };\n Splitter.prototype.updateCursorPosition = function (e, type) {\n if (this.isMouseEvent(e)) {\n this.changeCoordinates({ x: e.pageX, y: e.pageY }, type);\n }\n else {\n var eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;\n this.changeCoordinates({ x: eventType.pageX, y: eventType.pageY }, type);\n }\n };\n Splitter.prototype.changeCoordinates = function (coordinates, type) {\n if (type === 'previous') {\n this.previousCoordinates = coordinates;\n }\n else {\n this.currentCoordinates = coordinates;\n }\n };\n Splitter.prototype.reportWindowSize = function () {\n var _this = this;\n var paneCount = this.allPanes.length;\n if (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onReportWindowSize);\n return;\n }\n for (var i = 0; i < paneCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n if (paneCount - 1 === i) {\n var staticPaneCount = this.element.querySelectorAll('.' + STATIC_PANE).length;\n if (staticPaneCount === paneCount) {\n removeClass([this.allPanes[i]], STATIC_PANE);\n }\n }\n }\n if (paneCount > 0) {\n setTimeout(function () {\n _this.updateSplitterSize(true);\n }, 200);\n }\n };\n Splitter.prototype.updateSplitterSize = function (iswindowResize) {\n var totalWidth = 0;\n var flexPaneIndexes = [];\n var flexCount = 0;\n var children = this.element.children;\n for (var i = 0, len = children.length; i < len; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n for (var j = 0, len = this.allBars.length; j < len; j++) {\n totalWidth += this.orientation === 'Horizontal' ? parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) +\n parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) : parseInt(getComputedStyle(this.allBars[j]).marginTop, 10) +\n parseInt(getComputedStyle(this.allBars[j]).marginBottom, 10);\n }\n var diff = this.orientation === 'Horizontal' ? this.element.offsetWidth -\n ((this.border * 2) + totalWidth) :\n this.element.offsetHeight - ((this.border * 2) + totalWidth);\n for (var i = 0, len = this.allPanes.length; i < len; i++) {\n if (this.allPanes[i].innerText === '' ? !(this.paneSettings[i].size) || !(this.allPanes[i].innerText === '')\n : !(this.paneSettings[i].size) && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n }\n var avgDiffWidth = diff / flexPaneIndexes.length;\n for (var j = 0, len = flexPaneIndexes.length; j < len; j++) {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = this.orientation === 'Horizontal' ?\n (this.allPanes[flexPaneIndexes[j]].offsetWidth + avgDiffWidth) + 'px' :\n (this.allPanes[flexPaneIndexes[j]].offsetHeight + avgDiffWidth) + 'px';\n }\n if (this.allPanes.length === 2 && iswindowResize) {\n var paneCount = this.allPanes.length;\n var minValue = void 0;\n var paneMinRange = void 0;\n var paneIndex = 0;\n var updatePane = void 0;\n var flexPane = void 0;\n for (var i = 0; i < paneCount; i++) {\n if (!isNullOrUndefined(this.paneSettings[i].min)) {\n paneMinRange = this.convertPixelToNumber((this.paneSettings[i].min).toString());\n if (this.paneSettings[i].min.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(this.paneSettings[i].min);\n }\n minValue = this.convertPixelToNumber((paneMinRange).toString());\n if ((this.orientation === 'Horizontal' ? this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight) < minValue) {\n if (i === paneIndex) {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i + 1];\n }\n else {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i - 1];\n }\n var sizeDiff = minValue - (this.orientation === 'Horizontal' ?\n this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight);\n var isPercent = updatePane.style.flexBasis.indexOf('%') > -1;\n var updatePaneOffset = this.orientation === 'Horizontal' ? updatePane.offsetWidth : updatePane.offsetHeight;\n updatePane.style.flexBasis = isPercent ? this.convertPixelToPercentage(updatePaneOffset + sizeDiff) + '%'\n : (updatePaneOffset + sizeDiff) + 'px';\n var flexPaneOffset = this.orientation === 'Horizontal' ? flexPane.offsetWidth : flexPane.offsetHeight;\n flexPane.style.flexBasis = flexPane.style.flexBasis.indexOf('%') > -1 ?\n this.convertPixelToPercentage(flexPaneOffset - sizeDiff) + '%' : (flexPaneOffset - sizeDiff) + 'px';\n }\n }\n }\n }\n };\n Splitter.prototype.wireResizeEvents = function () {\n document.addEventListener('mousemove', this.onMouseMoveHandler, true);\n document.addEventListener('mouseup', this.onMouseUpHandler, true);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.addEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.addEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.unwireResizeEvents = function () {\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.removeEventListener('mousemove', this.onMouseMoveHandler, true);\n document.removeEventListener('mouseup', this.onMouseUpHandler, true);\n document.removeEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.removeEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.wireClickEvents = function () {\n EventHandler.add(this.currentSeparator, 'touchstart click', this.clickHandler, this);\n };\n Splitter.prototype.clickHandler = function (e) {\n if (!e.target.classList.contains(NAVIGATE_ARROW)) {\n var hoverBars = selectAll('.' + ROOT + ' > .' + SPLIT_BAR + '.' + SPLIT_BAR_HOVER);\n if (hoverBars.length > 0) {\n removeClass(hoverBars, SPLIT_BAR_HOVER);\n }\n e.target.classList.add(SPLIT_BAR_HOVER);\n }\n var icon = e.target;\n if (icon.classList.contains(ARROW_LEFT) || icon.classList.contains(ARROW_UP)) {\n this.collapseAction(e);\n }\n if (icon.classList.contains(ARROW_RIGHT) || icon.classList.contains(ARROW_DOWN)) {\n this.expandAction(e);\n }\n this.updateSplitterSize();\n };\n Splitter.prototype.expandAction = function (e) {\n var _this = this;\n this.splitterDetails(e);\n var eventArgs = this.beforeAction(e);\n if (this.expandFlag) {\n this.trigger('beforeExpand', eventArgs, function (beforeExpandArgs) {\n if (!beforeExpandArgs.cancel) {\n _this.expandPane(e);\n }\n var expandEventArgs = _this.afterAction(e);\n _this.trigger('expanded', expandEventArgs);\n });\n }\n else {\n this.expandPane(e);\n }\n };\n Splitter.prototype.expandPane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (!this.previousPane.classList.contains(COLLAPSE_PANE) &&\n this.previousPane.classList.contains(STATIC_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.nextPane.classList.contains(EXPAND_PANE) && this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) && !(collapseCount === this.allPanes.length - 2));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n if (!this.previousPane.classList.contains(COLLAPSE_PANE)) {\n removeClass([this.nextPane], EXPAND_PANE);\n removeClass([this.previousPane], collapseClass);\n addClass([this.previousPane], EXPAND_PANE);\n addClass([this.nextPane], collapseClass);\n if (this.expandFlag) {\n this.updatePaneSettings(this.nextPaneIndex, true);\n }\n }\n else {\n removeClass([this.previousPane], collapseClass);\n removeClass([this.nextPane], EXPAND_PANE);\n if (this.expandFlag) {\n this.updatePaneSettings(this.prevPaneIndex, false);\n }\n }\n this.updateIconsOnExpand(e);\n this.previousPane.setAttribute('aria-expanded', 'true');\n this.nextPane.setAttribute('aria-expanded', 'false');\n this.updateFlexGrow(this.checkStaticPanes());\n if (flexStatus) {\n this.previousPane.classList.remove(EXPAND_PANE);\n this.previousPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.checkStaticPanes = function () {\n var staticPane = true;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.allPanes[i].classList.contains(COLLAPSE_PANE) && staticPane) {\n if (this.allPanes[i].classList.contains(STATIC_PANE)) {\n staticPane = true;\n }\n else {\n staticPane = false;\n }\n }\n }\n return staticPane;\n };\n Splitter.prototype.updateFlexGrow = function (status) {\n var collapseCount = 0;\n for (var j = 0; j < this.element.children.length; j++) {\n if (this.element.children[j].classList.contains(COLLAPSE_PANE)) {\n collapseCount = collapseCount + 1;\n }\n }\n var visiblePane = collapseCount === this.allPanes.length - 2;\n var panes = this.allPanes;\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.flexGrow = '';\n if (status && !this.nextPane.classList.contains(COLLAPSE_PANE)) {\n this.nextPane.style.flexGrow = '1';\n }\n if (visiblePane && this.allPanes[i].classList.contains(COLLAPSE_PANE) && this.paneSettings[i].size &&\n i !== this.allPanes.length - 1) {\n panes[i].style.flexGrow = '';\n }\n if (panes[i].classList.contains(EXPAND_PANE)) {\n panes[i].style.flexGrow = '1';\n }\n else if (panes[i].classList.contains(COLLAPSE_PANE)) {\n panes[i].style.flexGrow = '0';\n }\n }\n };\n Splitter.prototype.hideTargetBarIcon = function (targetBar, targetArrow) {\n addClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.showTargetBarIcon = function (targetBar, targetArrow) {\n removeClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.updateIconsOnCollapse = function (e) {\n this.splitterProperty();\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE)) {\n addClass([e.target], HIDE_ICON);\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n this.resizableModel(this.currentBarIndex, false);\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (this.previousPane.previousElementSibling && !this.previousPane.previousElementSibling.classList.contains(COLLAPSE_PANE)) {\n if (this.previousPane.classList.contains(COLLAPSE_PANE) && this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showTargetBarIcon(this.prevBar, this.leftArrow);\n }\n else if (!this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.leftArrow);\n }\n }\n if (!isNullOrUndefined(this.prevBar)) {\n this.resizableModel(this.currentBarIndex - 1, false);\n this.hideTargetBarIcon(this.prevBar, this.arrow);\n }\n if (!this.paneSettings[this.prevPaneIndex].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else if (!this.splitInstance.prevPaneCollapsed && !this.splitInstance.nextPaneExpanded) {\n if (this.paneSettings[this.currentBarIndex].resizable) {\n this.resizableModel(this.currentBarIndex, true);\n }\n if (!this.splitInstance.nextPaneNextEle.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.currentBarIndex + 1].resizable) {\n this.resizableModel(this.currentBarIndex + 1, true);\n }\n if (!this.paneSettings[this.currentBarIndex].collapsible) {\n addClass([e.target], HIDE_ICON);\n }\n if (this.previousPane && this.prevPaneIndex === 0 && (this.paneSettings[this.prevPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.currentSeparator, this.leftArrow);\n }\n if (this.nextPane && this.nextPaneIndex === this.allPanes.length - 1 && (this.paneSettings[this.nextPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.getPrevBar(this.nextPaneIndex), this.rightArrow);\n }\n if (!(this.previousPane.classList.contains(COLLAPSE_PANE)) && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n if (!isNullOrUndefined(this.nextBar)) {\n if (this.nextPane.nextElementSibling && (this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.nextPaneIndex + 1].collapsible) ||\n (!this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.nextPaneIndex].collapsible)) {\n this.showTargetBarIcon(this.nextBar, this.leftArrow);\n }\n else if (!this.paneSettings[this.splitInstance.nextPaneIndex + 1].collapsible &&\n this.paneSettings[this.currentBarIndex]) {\n this.hideTargetBarIcon(this.nextBar, this.arrow);\n }\n }\n if (!(this.nextPaneIndex === this.allPanes.length - 1) && this.nextPane.nextElementSibling &&\n !this.nextPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE)\n && !this.paneSettings[this.nextPaneIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.nextBar, this.rightArrow);\n }\n }\n };\n Splitter.prototype.collapseAction = function (e) {\n var _this = this;\n this.splitterDetails(e);\n var eventArgs = this.beforeAction(e);\n if (this.collapseFlag) {\n this.collapsePane(e);\n }\n else {\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n _this.collapsePane(e);\n var collapseEventArgs = _this.afterAction(e);\n _this.trigger('collapsed', collapseEventArgs);\n }\n });\n }\n };\n Splitter.prototype.collapsePane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (this.previousPane.classList.contains(STATIC_PANE) &&\n !this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n !(collapseCount === this.allPanes.length - 2)) || (this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.previousPane.classList.contains(STATIC_PANE) && this.nextPane.classList.contains(STATIC_PANE));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n if (this.nextPane.classList.contains(COLLAPSE_PANE)) {\n removeClass([this.previousPane], EXPAND_PANE);\n removeClass([this.nextPane], collapseClass);\n if (!this.collapseFlag) {\n this.updatePaneSettings(this.nextPaneIndex, false);\n }\n }\n else {\n removeClass([this.previousPane], EXPAND_PANE);\n removeClass([this.nextPane], collapseClass);\n addClass([this.nextPane], EXPAND_PANE);\n addClass([this.previousPane], collapseClass);\n if (!this.collapseFlag) {\n this.updatePaneSettings(this.prevPaneIndex, true);\n }\n }\n this.updateIconsOnCollapse(e);\n this.previousPane.setAttribute('aria-expanded', 'false');\n this.nextPane.setAttribute('aria-expanded', 'true');\n this.updateFlexGrow(this.checkStaticPanes());\n if (flexStatus) {\n this.nextPane.classList.remove(EXPAND_PANE);\n this.nextPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.removeStaticPanes = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n }\n };\n Splitter.prototype.beforeAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n cancel: false\n };\n return eventArgs;\n };\n Splitter.prototype.updatePaneSettings = function (index, collapsed) {\n var paneValues = this.paneSettings;\n paneValues[index].collapsed = collapsed;\n this.setProperties({ 'paneSettings': paneValues }, true);\n };\n Splitter.prototype.splitterProperty = function () {\n this.splitInstance = {\n currentBarIndex: this.currentBarIndex,\n nextPaneCollapsible: this.nextPane.classList.contains(COLLAPSIBLE),\n prevPaneCollapsible: this.previousPane.classList.contains(COLLAPSIBLE),\n prevPaneExpanded: this.previousPane.classList.contains(EXPAND_PANE),\n nextPaneExpanded: this.nextPane.classList.contains(EXPAND_PANE),\n nextPaneCollapsed: this.nextPane.classList.contains(COLLAPSE_PANE),\n prevPaneCollapsed: this.previousPane.classList.contains(COLLAPSE_PANE),\n nextPaneIndex: this.getNextPaneIndex(),\n prevPaneIndex: this.getPreviousPaneIndex(),\n nextPaneNextEle: this.nextPane.nextElementSibling,\n prevPanePreEle: this.previousPane.previousElementSibling\n };\n };\n Splitter.prototype.showCurrentBarIcon = function () {\n removeClass([select('.' + this.arrow, this.currentSeparator)], HIDE_ICON);\n };\n Splitter.prototype.updateIconsOnExpand = function (e) {\n this.splitterProperty();\n addClass([e.target], HIDE_ICON);\n if (!this.splitInstance.prevPaneExpanded && !this.splitInstance.nextPaneCollapsed) {\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n if (this.paneSettings[this.nextPaneIndex].collapsible) {\n removeClass([e.target], HIDE_ICON);\n }\n if (this.paneSettings[this.currentBarIndex].resizable) {\n this.resizableModel(this.currentBarIndex, true);\n }\n if (!isNullOrUndefined(this.prevBar) &&\n !this.splitInstance.prevPanePreEle.classList.contains(COLLAPSE_PANE)) {\n if (this.paneSettings[this.currentBarIndex - 1].resizable) {\n this.resizableModel(this.currentBarIndex - 1, true);\n }\n if (this.paneSettings[this.prevPaneIndex].collapsible) {\n this.showTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (!this.paneSettings[this.currentBarIndex - 1].collapsible) {\n this.hideTargetBarIcon(this.prevBar, this.arrow);\n if (this.paneSettings[this.currentBarIndex].collapsible &&\n !this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else if (this.paneSettings[this.currentBarIndex].collapsible &&\n !this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n else {\n if (this.previousPane.previousElementSibling && this.paneSettings[this.prevPaneIndex].collapsible &&\n (this.previousPane.previousElementSibling.classList.contains(COLLAPSE_PANE) &&\n this.paneSettings[this.prevPaneIndex - 1].collapsible)) {\n this.showTargetBarIcon(this.prevBar, this.rightArrow);\n }\n if (!this.paneSettings[this.currentBarIndex + 1].collapsible) {\n this.hideTargetBarIcon(this.currentSeparator, this.rightArrow);\n }\n }\n }\n else if (this.splitInstance.prevPaneExpanded && this.splitInstance.nextPaneCollapsed) {\n this.resizableModel(this.currentBarIndex, false);\n this.resizableModel(this.currentBarIndex + 1, false);\n if (this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showCurrentBarIcon();\n }\n if (!isNullOrUndefined(this.nextBar)) {\n this.hideTargetBarIcon(this.nextBar, this.arrow);\n }\n if (this.nextPane && this.nextPaneIndex === this.allPanes.length - 1 && (!this.paneSettings[this.nextPaneIndex].collapsible &&\n this.splitInstance.nextPaneCollapsed)) {\n this.hideTargetBarIcon(this.currentSeparator, this.arrow);\n }\n if (!(this.nextPaneIndex === this.allPanes.length - 1) && this.nextPane.nextElementSibling &&\n this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE)\n && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showTargetBarIcon(this.nextBar, this.rightArrow);\n }\n }\n };\n Splitter.prototype.afterAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator\n };\n return eventArgs;\n };\n Splitter.prototype.currentIndex = function (e) {\n this.currentBarIndex = this.getOrderIndex(parseInt(e.target.parentElement.style.order, 10), 'splitbar');\n };\n Splitter.prototype.getSeparatorIndex = function (target) {\n var array = [].slice.call(this.allBars);\n array = this.enableReversePanes ? array.reverse() : array;\n return array.indexOf(target);\n };\n Splitter.prototype.getPrevBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar - 1)];\n return prevbar;\n };\n Splitter.prototype.getNextBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar + 1)];\n return prevbar;\n };\n Splitter.prototype.updateBars = function (index) {\n this.prevBar = this.getPrevBar(index);\n this.nextBar = this.getNextBar(index);\n };\n Splitter.prototype.splitterDetails = function (e) {\n if (this.orientation === 'Horizontal') {\n this.arrow = e.target.classList.contains(ARROW_LEFT) ? ARROW_RIGHT : ARROW_LEFT;\n }\n else {\n this.arrow = e.target.classList.contains(ARROW_UP) ? ARROW_DOWN : ARROW_UP;\n }\n this.updateCurrentSeparator(e.target);\n this.currentIndex(e);\n this.updateBars(this.currentBarIndex);\n this.getPaneDetails();\n };\n Splitter.prototype.triggerResizing = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n paneSize: [this.prePaneDimenson, this.nextPaneDimension],\n separator: this.currentSeparator\n };\n this.trigger('resizing', eventArgs);\n };\n Splitter.prototype.onMouseDown = function (e) {\n var _this = this;\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(NAVIGATE_ARROW)) {\n return;\n }\n this.updateCurrentSeparator(target);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.updateCursorPosition(e, 'previous');\n this.getPaneDetails();\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.getPreviousPaneIndex(), this.getNextPaneIndex()],\n separator: this.currentSeparator,\n cancel: false\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'none';\n }\n this.trigger('resizeStart', eventArgs, function (resizeStartArgs) {\n if (!resizeStartArgs.cancel) {\n _this.wireResizeEvents();\n _this.checkPaneSize(e);\n }\n });\n };\n Splitter.prototype.updatePaneFlexBasis = function (pane) {\n var previous;\n if (pane.style.flexBasis.indexOf('%') > 0) {\n previous = this.removePercentageUnit(pane.style.flexBasis);\n }\n else {\n if (pane.style.flexBasis !== '') {\n previous = this.convertPixelToPercentage(this.convertPixelToNumber(pane.style.flexBasis));\n }\n else {\n var offset = (this.orientation === 'Horizontal') ? (pane.offsetWidth) : (pane.offsetHeight);\n previous = this.convertPixelToPercentage(offset);\n }\n }\n return previous;\n };\n Splitter.prototype.removePercentageUnit = function (value) {\n return parseFloat(value.slice(0, value.indexOf('%')));\n };\n Splitter.prototype.convertPercentageToPixel = function (value, targetElement) {\n var percentage = value.toString();\n var convertedValue;\n if (percentage.indexOf('%') > -1) {\n convertedValue = parseFloat(percentage.slice(0, percentage.indexOf('%')));\n var offsetValue = void 0;\n if (!isNullOrUndefined(targetElement)) {\n offsetValue = this.panesDimensions[this.allPanes.indexOf(targetElement)];\n }\n else {\n offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n }\n convertedValue = Math.ceil(offsetValue * (convertedValue / 100));\n }\n else {\n convertedValue = parseInt(percentage, 10);\n }\n return convertedValue;\n };\n Splitter.prototype.convertPixelToPercentage = function (value) {\n var offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return (value / offsetValue) * 100;\n };\n Splitter.prototype.convertPixelToNumber = function (value) {\n if (value.indexOf('p') > -1) {\n return parseFloat(value.slice(0, value.indexOf('p')));\n }\n else {\n return parseFloat(value);\n }\n };\n Splitter.prototype.calcDragPosition = function (rectValue, offsetValue) {\n var separatorPosition = this.orientation === 'Horizontal' ? (this.currentCoordinates.x - rectValue) :\n (this.currentCoordinates.y - rectValue);\n var separator;\n separator = separatorPosition / offsetValue;\n separator = (separator > 1) ? 1 : (separator < 0) ? 0 : separator;\n return separator * offsetValue;\n };\n Splitter.prototype.getSeparatorPosition = function (e) {\n this.updateCursorPosition(e, 'current');\n var rectBound = (this.orientation === 'Horizontal') ? this.element.getBoundingClientRect().left + window.scrollX :\n this.element.getBoundingClientRect().top + window.scrollY;\n var offSet = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return this.calcDragPosition(rectBound, offSet);\n };\n Splitter.prototype.getMinMax = function (paneIndex, target, selection) {\n var defaultVal = selection === 'min' ? 0 : null;\n // eslint-disable-next-line\n var paneValue = null;\n if (selection === 'min') {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneValue = this.paneSettings[paneIndex].min;\n }\n }\n else {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneValue = this.paneSettings[paneIndex].max;\n }\n }\n if (this.paneSettings.length > 0 && !isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(paneValue)) {\n if (paneValue.indexOf('%') > 0) {\n paneValue = this.convertPercentageToPixel(paneValue).toString();\n }\n return this.convertPixelToNumber(paneValue);\n }\n else {\n return defaultVal;\n }\n };\n Splitter.prototype.getPreviousPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) + 1 :\n parseInt(this.currentSeparator.style.order, 10) - 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getNextPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) - 1 :\n parseInt(this.currentSeparator.style.order, 10) + 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getPaneDetails = function () {\n var prevPane = null;\n var nextPane = null;\n this.order = parseInt(this.currentSeparator.style.order, 10);\n if (this.allPanes.length > 1) {\n prevPane = this.getPrevPane(this.order);\n nextPane = this.getNextPane(this.order);\n }\n if (prevPane && nextPane) {\n this.previousPane = prevPane;\n this.nextPane = nextPane;\n this.prevPaneIndex = this.getPreviousPaneIndex();\n this.nextPaneIndex = this.getNextPaneIndex();\n }\n else {\n return;\n }\n };\n Splitter.prototype.getPaneHeight = function (pane) {\n return ((this.orientation === 'Horizontal') ? pane.offsetWidth.toString() :\n pane.offsetHeight.toString());\n };\n Splitter.prototype.isValidSize = function (paneIndex) {\n var isValid = false;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].size) &&\n this.paneSettings[paneIndex].size.indexOf('%') > -1) {\n isValid = true;\n }\n return isValid;\n };\n Splitter.prototype.getPaneDimensions = function () {\n this.previousPaneHeightWidth = (this.previousPane.style.flexBasis === '') ? this.getPaneHeight(this.previousPane) :\n this.previousPane.style.flexBasis;\n this.nextPaneHeightWidth = (this.nextPane.style.flexBasis === '') ? this.getPaneHeight(this.nextPane) :\n this.nextPane.style.flexBasis;\n if (this.isValidSize(this.prevPaneIndex)) {\n this.previousPaneHeightWidth = this.convertPercentageToPixel(this.previousPaneHeightWidth).toString();\n this.updatePrePaneInPercentage = true;\n }\n if (this.isValidSize(this.nextPaneIndex)) {\n this.nextPaneHeightWidth = this.convertPercentageToPixel(this.nextPaneHeightWidth).toString();\n this.updateNextPaneInPercentage = true;\n }\n this.prePaneDimenson = this.convertPixelToNumber(this.previousPaneHeightWidth.toString());\n this.nextPaneDimension = this.convertPixelToNumber(this.nextPaneHeightWidth.toString());\n };\n Splitter.prototype.checkCoordinates = function (pageX, pageY) {\n var coordinatesChanged = true;\n if ((pageX === this.previousCoordinates.x || pageY === this.previousCoordinates.y)) {\n coordinatesChanged = false;\n }\n return coordinatesChanged;\n };\n Splitter.prototype.isCursorMoved = function (e) {\n var cursorMoved = true;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType)) &&\n this.getEventType(e.pointerType) === 'mouse') {\n cursorMoved = this.checkCoordinates(e.pageX, e.pageY);\n }\n else {\n cursorMoved = (Browser.info.name !== 'msie') ?\n this.checkCoordinates(e.touches[0].pageX, e.touches[0].pageY) :\n this.checkCoordinates(e.pageX, e.pageY);\n }\n return cursorMoved;\n };\n Splitter.prototype.getBorder = function () {\n this.border = 0;\n var border = this.orientation === 'Horizontal' ? ((this.element.offsetWidth - this.element.clientWidth) / 2) :\n (this.element.offsetHeight - this.element.clientHeight) / 2;\n this.border = Browser.info.name !== 'chrome' ? this.border : border;\n };\n Splitter.prototype.onMouseMove = function (e) {\n if (!this.isCursorMoved(e)) {\n return;\n }\n this.getPaneDetails();\n this.getPaneDimensions();\n this.triggerResizing(e);\n var left = this.validateDraggedPosition(this.getSeparatorPosition(e), this.prePaneDimenson, this.nextPaneDimension);\n var separatorNewPosition;\n this.getBorder();\n if (this.orientation === 'Horizontal') {\n separatorNewPosition = (this.element.getBoundingClientRect().left + left) -\n this.currentSeparator.getBoundingClientRect().left + this.border;\n }\n else {\n separatorNewPosition = (this.element.getBoundingClientRect().top + left) -\n this.currentSeparator.getBoundingClientRect().top + this.border;\n }\n this.nextPaneHeightWidth =\n (typeof (this.nextPaneHeightWidth) === 'string' && this.nextPaneHeightWidth.indexOf('p') > -1) ?\n this.convertPixelToNumber(this.nextPaneHeightWidth) : parseInt(this.nextPaneHeightWidth, 10);\n this.prevPaneCurrentWidth = separatorNewPosition + this.convertPixelToNumber(this.previousPaneHeightWidth);\n this.nextPaneCurrentWidth = this.nextPaneHeightWidth - separatorNewPosition;\n this.validateMinMaxValues();\n if (this.nextPaneCurrentWidth < 0) {\n this.nextPaneCurrentWidth = 0;\n }\n /* istanbul ignore next */\n if (this.prevPaneCurrentWidth < 0) {\n this.prevPaneCurrentWidth = 0;\n }\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) > this.totalWidth) {\n if (this.nextPaneCurrentWidth < this.prevPaneCurrentWidth) {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n else {\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n }\n /* istanbul ignore next */\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) < this.totalWidth) {\n var difference = this.totalWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth));\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + difference;\n }\n this.calculateCurrentDimensions();\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = this.prevPaneCurrentWidth;\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n if (!(this.allPanes.length > 2)) {\n this.updateSplitterSize();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMinRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMinRange = null;\n var paneMinDimensions;\n var difference = 0;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneMinRange = this.paneSettings[paneIndex].min.toString();\n }\n if (!isNullOrUndefined(paneMinRange)) {\n if (paneMinRange.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(paneMinRange).toString();\n }\n paneMinDimensions = this.convertPixelToNumber(paneMinRange);\n if (paneCurrentWidth < paneMinDimensions) {\n difference = (paneCurrentWidth - paneMinDimensions) <= 0 ? 0 :\n (paneCurrentWidth - paneMinDimensions);\n this.totalWidth = this.totalWidth - difference;\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMinDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMaxRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMaxRange = null;\n var paneMaxDimensions;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneMaxRange = this.paneSettings[paneIndex].max.toString();\n }\n if (!isNullOrUndefined(paneMaxRange)) {\n if (paneMaxRange.indexOf('%') > 0) {\n paneMaxRange = this.convertPercentageToPixel(paneMaxRange).toString();\n }\n paneMaxDimensions = this.convertPixelToNumber(paneMaxRange);\n if (paneCurrentWidth > paneMaxDimensions) {\n this.totalWidth = this.totalWidth - (paneCurrentWidth - paneMaxDimensions);\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMaxDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n Splitter.prototype.validateMinMaxValues = function () {\n //validate previous pane minimum range\n this.prevPaneCurrentWidth = this.validateMinRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // Validate next pane minimum range\n this.nextPaneCurrentWidth = this.validateMinRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n // validate previous pane maximum range\n this.prevPaneCurrentWidth = this.validateMaxRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // validate next pane maximum range\n this.nextPaneCurrentWidth = this.validateMaxRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n };\n Splitter.prototype.equatePaneWidths = function () {\n var difference;\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) > this.totalPercent) {\n difference = (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) - this.totalPercent;\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - (difference / 2) + '%';\n }\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) < this.totalPercent) {\n difference = this.totalPercent - (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth);\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + (difference / 2) + '%';\n }\n };\n Splitter.prototype.calculateCurrentDimensions = function () {\n if (this.updatePrePaneInPercentage || this.updateNextPaneInPercentage) {\n this.prevPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.prevPaneCurrentWidth)\n * 10) / 10));\n this.nextPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.nextPaneCurrentWidth)\n * 10) / 10));\n if (this.prevPaneCurrentWidth === 0) {\n this.nextPaneCurrentWidth = this.totalPercent;\n }\n if (this.nextPaneCurrentWidth === 0) {\n this.prevPaneCurrentWidth = this.totalPercent;\n }\n if (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth !== this.totalPercent) {\n this.equatePaneWidths();\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + '%';\n }\n this.prevPaneCurrentWidth = (this.updatePrePaneInPercentage) ? this.prevPaneCurrentWidth :\n this.convertPercentageToPixel(this.prevPaneCurrentWidth) + 'px';\n this.nextPaneCurrentWidth = (this.updateNextPaneInPercentage) ? this.nextPaneCurrentWidth :\n this.convertPercentageToPixel(this.nextPaneCurrentWidth) + 'px';\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + 'px';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + 'px';\n }\n };\n Splitter.prototype.addStaticPaneClass = function () {\n if (!this.previousPane.classList.contains(STATIC_PANE)) {\n this.previousPane.classList.add(STATIC_PANE);\n }\n if (!this.nextPane.classList.contains(STATIC_PANE)) {\n this.nextPane.classList.add(STATIC_PANE);\n }\n };\n Splitter.prototype.validateDraggedPosition = function (draggedPos, prevPaneHeightWidth, nextPaneHeightWidth) {\n var separatorTopLeft = (this.orientation === 'Horizontal') ? this.currentSeparator.offsetLeft :\n this.currentSeparator.offsetTop;\n var prePaneRange = separatorTopLeft - prevPaneHeightWidth;\n var nextPaneRange = nextPaneHeightWidth + separatorTopLeft;\n var pane1MinSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'min');\n var pane2MinSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'min');\n var pane1MaxSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'max');\n var pane2MaxSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'max');\n var validatedSize = draggedPos;\n if (draggedPos > nextPaneRange - pane2MinSize) {\n validatedSize = nextPaneRange - pane2MinSize;\n }\n else if (draggedPos < prePaneRange + pane1MinSize) {\n validatedSize = prePaneRange + pane1MinSize;\n }\n if (!isNullOrUndefined(pane1MaxSize)) {\n if (draggedPos > prePaneRange + pane1MaxSize) {\n validatedSize = prePaneRange + pane1MaxSize;\n }\n }\n else if (!isNullOrUndefined(pane2MaxSize)) {\n if (draggedPos < nextPaneRange - pane2MaxSize) {\n validatedSize = nextPaneRange - pane2MaxSize;\n }\n }\n return validatedSize;\n };\n Splitter.prototype.onMouseUp = function (e) {\n removeClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.unwireResizeEvents();\n var eventArgs = {\n event: e,\n element: this.element,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n paneSize: [this.prePaneDimenson, this.nextPaneDimension]\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'auto';\n }\n this.trigger('resizeStop', eventArgs);\n if (this.enablePersistence) {\n var paneValues = this.paneSettings;\n paneValues[this.getPreviousPaneIndex()].size = this.allPanes[this.getPreviousPaneIndex()].style.flexBasis;\n paneValues[this.getNextPaneIndex()].size = this.allPanes[this.getNextPaneIndex()].style.flexBasis;\n this.setProperties({ 'paneSettings': paneValues }, true);\n }\n };\n Splitter.prototype.panesDimension = function (index, child) {\n var childCount = child.length;\n var size;\n parseInt(this.getHeight(this.element), 10);\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].size)) {\n size = this.paneSettings[index].size;\n if (index < childCount) {\n setStyleAttribute(child[index], { 'flex-basis': size, 'order': index * 2 });\n if (index < childCount - 1 && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n else if (!this.sizeFlag) {\n child[index].style.flexBasis = null;\n }\n if ((index === childCount - 1) && this.sizeFlag && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n }\n }\n else {\n this.sizeFlag = true;\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n }\n else {\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n this.paneOrder.push(index * 2);\n };\n Splitter.prototype.setTemplate = function (template, toElement) {\n toElement.innerHTML = '';\n template = typeof (template) === 'string' ? this.sanitizeHelper(template) : template;\n this.templateCompile(toElement, template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.templateCompile = function (ele, cnt) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n [].slice.call(tempEle.childNodes).forEach(function (childEle) {\n ele.appendChild(childEle);\n });\n }\n };\n Splitter.prototype.compileElement = function (ele, val, prop) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n if (typeof (val) === 'string') {\n if (val[0] === '.' || val[0] === '#') {\n var eleVal = document.querySelector(val);\n if (!isNullOrUndefined(eleVal)) {\n this.templateElement.push(eleVal);\n if (eleVal.style.display === 'none') {\n eleVal.style.removeProperty('display');\n }\n if (eleVal.getAttribute('style') === '') {\n eleVal.removeAttribute('style');\n }\n ele.appendChild(eleVal);\n return;\n }\n else {\n val = val.trim();\n }\n }\n else {\n val = val.trim();\n }\n }\n var templateFn;\n if (!isNullOrUndefined(val.outerHTML)) {\n templateFn = compile(val.outerHTML);\n }\n else {\n templateFn = compile(val);\n }\n var templateFUN;\n if (!isNullOrUndefined(templateFn)) {\n templateFUN = templateFn({}, this, prop, this.element.id + 'content' + this.allPanes.length.toString(), true);\n }\n if (!isNullOrUndefined(templateFn) && templateFUN && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Splitter.prototype.paneCollapsible = function (pane, index) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? addClass([pane], COLLAPSIBLE) : removeClass([pane], COLLAPSIBLE);\n };\n Splitter.prototype.createSplitPane = function (target) {\n var childCount = target.children.length;\n for (var i = 0; i < this.paneSettings.length; i++) {\n if (childCount < this.paneSettings.length) {\n var childElement = this.createElement('div');\n this.element.appendChild(childElement);\n childCount = childCount + 1;\n }\n }\n childCount = target.children.length;\n var child = [].slice.call(target.children);\n this.sizeFlag = false;\n if (childCount > 0) {\n for (var i = 0; i < childCount; i++) {\n // To accept only div and span element as pane\n if (child[i].nodeName === 'DIV' || child[i].nodeName === 'SPAN') {\n this.allPanes.push(child[i]);\n if (this.orientation === 'Horizontal') {\n addClass([child[i]], [PANE, SPLIT_H_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n else {\n addClass([child[i]], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && !isNullOrUndefined(this.paneSettings[i].content)) {\n this.setTemplate(this.paneSettings[i].content, child[i]);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && this.paneSettings[i].cssClass) {\n this.setCssClass(child[i], this.paneSettings[i].cssClass);\n }\n if (!isNullOrUndefined(this.paneSettings[i])) {\n this.paneCollapsible(child[i], i);\n }\n }\n }\n }\n };\n /**\n * expands corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be expanded at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.expand = function (index) {\n this.collapsedOnchange(index);\n this.updatePaneSettings(index, false);\n };\n /**\n * collapses corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be collapsed at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.collapse = function (index) {\n this.isCollapsed(index);\n this.updatePaneSettings(index, true);\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n Splitter.prototype.destroy = function () {\n if (!this.isDestroyed) {\n _super.prototype.destroy.call(this);\n EventHandler.remove(document, 'touchstart click', this.onDocumentClick);\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize, true);\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n this.element.innerHTML = this.wrapper.innerHTML;\n for (var i = 0; i < this.wrapper.attributes.length; i++) {\n this.element.setAttribute(this.wrapper.attributes[i].name, this.wrapper.attributes[i].value);\n }\n if (this.refreshing) {\n addClass([this.element], ['e-control', 'e-lib', ROOT]);\n this.allBars = [];\n this.allPanes = [];\n }\n this.restoreElem();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n }\n };\n Splitter.prototype.restoreElem = function () {\n if (this.templateElement.length > 0) {\n for (var i = 0; i < this.templateElement.length; i++) {\n this.templateElement[i].style.display = 'none';\n document.body.appendChild(this.templateElement[i]);\n }\n }\n };\n Splitter.prototype.addPaneClass = function (pane) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? addClass([pane], [PANE, SPLIT_H_PANE, SCROLL_PANE]) :\n addClass([pane], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n return pane;\n };\n Splitter.prototype.removePaneOrders = function (paneClass) {\n var childNodes = this.element.childNodes;\n var panes = [];\n for (var i = 0; childNodes.length < 0; i++) {\n if (childNodes[i].classList.contains(paneClass)) {\n panes.push(childNodes[i]);\n }\n }\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.removeProperty('order');\n }\n };\n Splitter.prototype.setPaneOrder = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n this.panesDimension(i, this.allPanes);\n }\n };\n Splitter.prototype.removeSeparator = function () {\n for (var i = 0; i < this.allBars.length; i++) {\n detach(this.allBars[i]);\n }\n this.allBars = [];\n };\n Splitter.prototype.updatePanes = function () {\n this.setPaneOrder();\n this.removeSeparator();\n this.addSeparator(this.element);\n };\n /**\n * Allows you to add a pane dynamically to the specified index position by passing the pane properties.\n *\n * @param { PanePropertiesModel } paneProperties - Specifies the pane’s properties that apply to new pane.\n * @param { number } index - Specifies the index where the pane will be inserted.\n * @returns {void}\n */\n Splitter.prototype.addPane = function (paneProperties, index) {\n var newPane = this.createElement('div');\n newPane = this.addPaneClass(newPane);\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var paneDetails = {\n size: isNullOrUndefined(paneProperties.size) ? '' : paneProperties.size,\n min: isNullOrUndefined(paneProperties.min) ? null : paneProperties.min,\n max: isNullOrUndefined(paneProperties.max) ? null : paneProperties.max,\n content: isNullOrUndefined(paneProperties.content) ? '' : paneProperties.content,\n resizable: isNullOrUndefined(paneProperties.resizable) ? true : paneProperties.resizable,\n collapsible: isNullOrUndefined(paneProperties.collapsible) ? false : paneProperties.collapsible,\n collapsed: isNullOrUndefined(paneProperties.collapsed) ? false : paneProperties.collapsed,\n cssClass: isNullOrUndefined(paneProperties.cssClass) ? '' : paneProperties.cssClass\n };\n this.paneSettings.splice(index, 0, paneDetails);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.orientation === 'Horizontal') {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_H_PANE)[index]);\n this.removePaneOrders(SPLIT_H_PANE);\n }\n else {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_V_PANE)[index]);\n this.removePaneOrders(SPLIT_V_PANE);\n }\n this.allPanes.splice(index, 0, newPane);\n this.updatePanes();\n this.setTemplate(this.paneSettings[index].content, newPane);\n this.setCssClass(this.allPanes[index], paneProperties.cssClass);\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n };\n /**\n * Allows you to remove the specified pane dynamically by passing its index value.\n *\n * @param { number } index - Specifies the index value to remove the corresponding pane.\n * @returns {void}\n */\n Splitter.prototype.removePane = function (index) {\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var elementClass = (this.orientation === 'Horizontal') ? SPLIT_H_PANE : SPLIT_V_PANE;\n if (isNullOrUndefined(this.element.querySelectorAll('.' + elementClass)[index])) {\n return;\n }\n detach(this.element.querySelectorAll('.' + elementClass)[index]);\n this.allPanes.splice(index, 1);\n this.removePaneOrders(elementClass);\n this.updatePanes();\n this.paneSettings.splice(index, 1);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.allPanes.length > 0) {\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n }\n };\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enableReversePanes\", void 0);\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enablePersistence\", void 0);\n __decorate([\n Collection([], PaneProperties)\n ], Splitter.prototype, \"paneSettings\", void 0);\n __decorate([\n Property('Horizontal')\n ], Splitter.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Splitter.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(null)\n ], Splitter.prototype, \"separatorSize\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeCollapse\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeExpand\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"expanded\", void 0);\n Splitter = __decorate([\n NotifyPropertyChanges\n ], Splitter);\n return Splitter;\n}(Component));\nexport { Splitter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, isUndefined } from '@syncfusion/ej2-base';\nimport { Collection, Draggable, isNullOrUndefined, append, setValue } from '@syncfusion/ej2-base';\nimport { Event, formatUnit, ChildProperty, compile, closest, SanitizeHtmlHelper, getValue } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, detach, removeClass, EventHandler, Browser, extend } from '@syncfusion/ej2-base';\n// constant class definitions\nvar preventSelect = 'e-prevent';\nvar dragging = 'e-dragging';\nvar draggable = 'e-draggable';\nvar dragRestrict = 'e-drag-restrict';\nvar drag = 'e-drag';\nvar resize = 'e-resize';\nvar resizeicon = 'e-dl-icon';\nvar responsive = 'e-responsive';\nvar east = 'e-east';\nvar west = 'e-west';\nvar north = 'e-north';\nvar south = 'e-south';\nvar single = 'e-single';\nvar double = 'e-double';\nvar northEast = 'e-north-east';\nvar southEast = 'e-south-east';\nvar northWest = 'e-north-west';\nvar southWest = 'e-south-west';\nvar panel = 'e-panel';\nvar panelContent = 'e-panel-content';\nvar panelContainer = 'e-panel-container';\nvar disable = 'e-disabled';\nvar header = 'e-panel-header';\nvar panelTransition = 'e-panel-transition';\n/**\n * Defines the panel of the DashboardLayout component.\n */\nvar Panel = /** @class */ (function (_super) {\n __extends(Panel, _super);\n function Panel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Panel.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"header\", void 0);\n __decorate([\n Property('')\n ], Panel.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Panel.prototype, \"enabled\", void 0);\n __decorate([\n Property(0)\n ], Panel.prototype, \"row\", void 0);\n __decorate([\n Property(0)\n ], Panel.prototype, \"col\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"sizeX\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"sizeY\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"minSizeY\", void 0);\n __decorate([\n Property(1)\n ], Panel.prototype, \"minSizeX\", void 0);\n __decorate([\n Property(null)\n ], Panel.prototype, \"maxSizeY\", void 0);\n __decorate([\n Property(null)\n ], Panel.prototype, \"maxSizeX\", void 0);\n __decorate([\n Property(1000)\n ], Panel.prototype, \"zIndex\", void 0);\n return Panel;\n}(ChildProperty));\nexport { Panel };\n/**\n * The DashboardLayout is a grid structured layout control, that helps to create a dashboard with panels.\n * Panels hold the UI components or data to be visualized with flexible options like resize, reorder, drag-n-drop, remove and add,\n * that allows users to easily place the panels at a desired position within the grid layout.\n * ```html\n * <div id=\"default-layout\">\n * ```\n * ```typescript\n * <script>\n * let dashBoardObject : DashboardLayout = new DashboardLayout();\n * dashBoardObject.appendTo('#default-layout');\n * </script>\n * ```\n */\nvar DashboardLayout = /** @class */ (function (_super) {\n __extends(DashboardLayout, _super);\n function DashboardLayout(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.rows = 1;\n _this.panelID = 0;\n _this.movePanelCalled = false;\n _this.resizeCalled = false;\n _this.mOffX = 0;\n _this.mOffY = 0;\n _this.maxTop = 9999;\n _this.maxRows = 100;\n _this.mouseX = 0;\n _this.mouseY = 0;\n _this.minTop = 0;\n _this.minLeft = 0;\n _this.isInlineRendering = false;\n _this.removeAllCalled = false;\n // to check whether removePanel is executed in mobile device\n _this.isPanelRemoved = false;\n // to maintain sizeY in mobile device\n _this.panelsSizeY = 0;\n _this.resizeHeight = false;\n setValue('mergePersistData', _this.mergePersistPanelData, _this);\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n */\n DashboardLayout.prototype.preRender = function () {\n this.panelCollection = [];\n this.sortedArray = [];\n this.gridPanelCollection = [];\n this.overlapElement = [];\n this.overlapElementClone = [];\n this.overlapSubElementClone = [];\n this.collisionChecker = {};\n this.dragCollection = [];\n this.elementRef = { top: '', left: '', height: '', width: '' };\n this.dimensions = [];\n this.allItems = [];\n this.oldRowCol = {};\n this.availableClasses = [];\n this.setOldRowCol();\n this.calculateCellSize();\n this.contentTemplateChild = [].slice.call(this.element.children);\n };\n DashboardLayout.prototype.setOldRowCol = function () {\n for (var i = 0; i < this.panels.length; i++) {\n if (!this.panels[i].id) {\n this.panelPropertyChange(this.panels[i], { id: 'layout_' + this.panelID.toString() });\n this.panelID = this.panelID + 1;\n }\n this.oldRowCol[this.panels[i].id] = { row: this.panels[i].row, col: this.panels[i].col };\n }\n };\n DashboardLayout.prototype.createPanelElement = function (cssClass, idValue) {\n var ele = this.createElement('div');\n if (cssClass && cssClass.length > 0) {\n addClass([ele], cssClass);\n }\n if (idValue) {\n ele.setAttribute('id', idValue);\n }\n return ele;\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns void\n * @private\n */\n DashboardLayout.prototype.render = function () {\n this.initialize();\n this.isRenderComplete = true;\n if (this.showGridLines && !this.checkMediaQuery()) {\n this.initGridLines();\n }\n this.updateDragArea();\n this.renderComplete();\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.initGridLines = function () {\n this.table = document.createElement('table');\n var tbody = document.createElement('tbody');\n this.table.classList.add('e-dashboard-gridline-table');\n for (var i = 0; i < this.maxRow(); i++) {\n var tr = document.createElement('tr');\n for (var j = 0; j < this.columns; j++) {\n var td = document.createElement('td');\n td.classList.add('e-dashboard-gridline');\n this.setAttributes({ value: { row: i.toString(), col: j.toString(), sizeX: '1', sizeY: '1' } }, td);\n td.setAttribute('id', '' + j);\n this.setPanelPosition(td, i, j);\n this.setHeightAndWidth(td, { row: i, col: j, sizeX: 1, sizeY: 1 });\n tr.appendChild(td);\n }\n tbody.appendChild(tr);\n }\n this.table.appendChild(tbody);\n this.element.appendChild(this.table);\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.initialize = function () {\n this.updateRowHeight();\n if (this.element.childElementCount > 0 && this.element.querySelectorAll('.e-panel').length > 0) {\n var panelElements = [];\n this.setProperties({ panels: [] }, true);\n this.isInlineRendering = true;\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n panelElements.push((this.element.querySelectorAll('.e-panel')[i]));\n }\n for (var i = 0; i < panelElements.length; i++) {\n var panelElement = panelElements[i];\n if (this.enableRtl) {\n addClass([panelElement], 'e-rtl');\n }\n this.getInlinePanels(panelElement);\n this.maxCol();\n this.maxRow();\n }\n for (var i = 0; i < this.panels.length; i++) {\n var panelElement = this.element.querySelector('#' + this.panels[i].id);\n this.setMinMaxValues(this.panels[i]);\n if (this.maxColumnValue < this.panels[i].col || this.maxColumnValue < (this.panels[i].col + this.panels[i].sizeX)) {\n var colValue = this.maxColumnValue - this.panels[i].sizeX;\n this.panelPropertyChange(this.panels[i], { col: colValue < 0 ? 0 : colValue });\n }\n this.setXYAttributes(panelElement, this.panels[i]);\n var panel_1 = this.renderPanels(panelElement, this.panels[i], this.panels[i].id, false);\n this.panelCollection.push(panel_1);\n this.setHeightAndWidth(panelElement, this.panels[i]);\n this.tempObject = this;\n if (this.mediaQuery && !window.matchMedia('(' + this.mediaQuery + ')').matches) {\n this.setPanelPosition(panelElement, this.panels[i].row, this.panels[i].col);\n this.mainElement = panelElement;\n this.updatePanelLayout(panelElement, this.panels[i]);\n this.mainElement = null;\n }\n this.setClasses([panelElement]);\n }\n this.updateOldRowColumn();\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n }\n else {\n this.renderDashBoardCells(this.panels);\n }\n if (this.allowDragging && (this.mediaQuery ? !window.matchMedia('(' + this.mediaQuery + ')').matches : true)) {\n this.enableDraggingContent(this.panelCollection);\n }\n this.sortedPanel();\n this.bindEvents();\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkColumnValue = this.maxColumnValue;\n if (!(this.checkMediaQuery())) {\n this.panelResponsiveUpdate();\n }\n this.setEnableRtl();\n };\n DashboardLayout.prototype.checkMediaQuery = function () {\n return (this.mediaQuery && window.matchMedia('(' + this.mediaQuery + ')').matches);\n };\n DashboardLayout.prototype.calculateCellSize = function () {\n this.cellSize = [];\n if ((this.checkMediaQuery())) {\n this.cellSize[1] = this.element.parentElement\n && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio;\n }\n else {\n this.cellSize[0] = this.element.parentElement &&\n ((this.element.parentElement.offsetWidth));\n this.cellSize[0] = this.element.parentElement\n && ((this.element.parentElement.offsetWidth - ((this.maxCol() - 1) * this.cellSpacing[0]))\n / (this.maxCol()));\n this.cellSize[1] = this.cellSize[0] / this.cellAspectRatio;\n }\n };\n DashboardLayout.prototype.maxRow = function (recheck) {\n var maxRow = 1;\n if (this.rows > 1 && isNullOrUndefined(recheck)) {\n maxRow = this.rows;\n return maxRow;\n }\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].sizeY + this.panels[i].row > maxRow) {\n maxRow = this.panels[i].sizeY + this.panels[i].row;\n }\n }\n if (this.panels.length === 0) {\n maxRow = this.columns;\n }\n return maxRow;\n };\n DashboardLayout.prototype.maxCol = function () {\n var maxCol = 1;\n maxCol = this.columns;\n this.maxColumnValue = maxCol;\n return maxCol;\n };\n DashboardLayout.prototype.updateOldRowColumn = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var id = this.panels[i].id;\n if (document.getElementById(id)) {\n var row = parseInt(document.getElementById(id).getAttribute('data-row'), 10);\n var col = parseInt(document.getElementById(id).getAttribute('data-col'), 10);\n this.oldRowCol[this.panels[i].id] = { row: row, col: col };\n }\n else {\n continue;\n }\n }\n };\n DashboardLayout.prototype.createSubElement = function (cssClass, idValue, className) {\n var element = this.createElement('div');\n if (className) {\n addClass([element], [className]);\n }\n if (cssClass && cssClass.length > 0) {\n addClass([element], cssClass);\n }\n if (idValue) {\n element.setAttribute('id', idValue);\n }\n return element;\n };\n // eslint-disable-next-line\n DashboardLayout.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n var sanitizedValue = SanitizeHtmlHelper.sanitize(template);\n return compile((this.enableHtmlSanitizer && typeof (template) === 'string') ? sanitizedValue : template);\n }\n }\n return undefined;\n };\n DashboardLayout.prototype.renderTemplate = function (content, appendElement, type, isStringTemplate, prop) {\n // eslint-disable-next-line\n var templateFn = this.templateParser(content);\n var templateElements = [];\n if ((content[0] === '.' || content[0] === '#') &&\n document.querySelector(content).tagName !== 'SCRIPT') {\n var eleVal = document.querySelector(content);\n if (!isNullOrUndefined(eleVal)) {\n if (eleVal.style.display === 'none') {\n eleVal.style.removeProperty('display');\n }\n if (eleVal.getAttribute('style') === '') {\n eleVal.removeAttribute('style');\n }\n appendElement.appendChild(eleVal);\n return;\n }\n else {\n content = content.trim();\n }\n }\n else {\n // eslint-disable-next-line\n var compilerFn = templateFn({}, this, prop, type, isStringTemplate, null, appendElement);\n if (compilerFn) {\n for (var _i = 0, compilerFn_1 = compilerFn; _i < compilerFn_1.length; _i++) {\n var item = compilerFn_1[_i];\n templateElements.push(item);\n }\n append([].slice.call(templateElements), appendElement);\n }\n }\n };\n DashboardLayout.prototype.renderPanels = function (cellElement, panelModel, panelId, isStringTemplate) {\n addClass([cellElement], [panel, panelTransition]);\n var cssClass = panelModel.cssClass ? panelModel.cssClass.split(' ') : null;\n this.panelContent = cellElement.querySelector('.e-panel-container') ?\n cellElement.querySelector('.e-panel-container') :\n this.createSubElement(cssClass, cellElement.id + '_content', panelContainer);\n cellElement.appendChild(this.panelContent);\n if (!panelModel.enabled) {\n this.disablePanel(cellElement);\n }\n if (panelModel.header) {\n var headerTemplateElement = cellElement.querySelector('.e-panel-header') ?\n cellElement.querySelector('.e-panel-header') : this.createSubElement([], cellElement.id + 'template', '');\n addClass([headerTemplateElement], [header]);\n if (!cellElement.querySelector('.e-panel-header')) {\n var id = this.element.id + 'HeaderTemplate' + panelId;\n this.renderTemplate(panelModel.header, headerTemplateElement, id, isStringTemplate, 'header');\n this.panelContent.appendChild(headerTemplateElement);\n this.renderReactTemplates();\n }\n }\n if (panelModel.content) {\n var cssClass_1 = panelModel.cssClass ? panelModel.cssClass.split(' ') : null;\n this.panelBody = cellElement.querySelector('.e-panel-content') ? cellElement.querySelector('.e-panel-content') :\n this.createSubElement(cssClass_1, cellElement.id + '_body', panelContent);\n var headerHeight = this.panelContent.querySelector('.e-panel-header') ?\n window.getComputedStyle(this.panelContent.querySelector('.e-panel-header')).height : '0px';\n var contentHeightValue = 'calc( 100% - ' + headerHeight + ')';\n setStyle(this.panelBody, { height: contentHeightValue });\n if (!cellElement.querySelector('.e-panel-content')) {\n var id = this.element.id + 'ContentTemplate' + panelId;\n this.renderTemplate(panelModel.content, this.panelBody, id, isStringTemplate, 'content');\n this.panelContent.appendChild(this.panelBody);\n this.renderReactTemplates();\n }\n }\n return cellElement;\n };\n DashboardLayout.prototype.disablePanel = function (panelElement) {\n addClass([panelElement], [disable]);\n };\n DashboardLayout.prototype.getInlinePanels = function (panelElement) {\n var model = {\n sizeX: panelElement.hasAttribute('data-sizex') ? parseInt(panelElement.getAttribute('data-sizex'), 10) : 1,\n sizeY: panelElement.hasAttribute('data-sizey') ? parseInt(panelElement.getAttribute('data-sizey'), 10) : 1,\n minSizeX: panelElement.hasAttribute('data-minsizex') ? parseInt(panelElement.getAttribute('data-minsizex'), 10) : 1,\n minSizeY: panelElement.hasAttribute('data-minsizey') ? parseInt(panelElement.getAttribute('data-minsizey'), 10) : 1,\n maxSizeX: panelElement.hasAttribute('data-maxsizex') ? parseInt(panelElement.getAttribute('data-maxsizex'), 10) : null,\n maxSizeY: panelElement.hasAttribute('data-maxsizey') ? parseInt(panelElement.getAttribute('data-maxsizey'), 10) : null,\n row: panelElement.hasAttribute('data-row') ? parseInt(panelElement.getAttribute('data-row'), 10) : 0,\n col: panelElement.hasAttribute('data-col') ? parseInt(panelElement.getAttribute('data-col'), 10) : 0,\n id: panelElement.getAttribute('id'),\n zIndex: panelElement.hasAttribute('data-zindex') ? parseInt(panelElement.getAttribute('data-zIndex'), 10) : 1000,\n header: panelElement.querySelector('.e-panel-header') && '.e-panel-header',\n content: panelElement.querySelector('.e-panel-content') && '.e-panel-content'\n };\n if (!model.id) {\n model.id = 'layout_' + this.panelID.toString();\n panelElement.setAttribute('id', model.id);\n this.panelID = this.panelID + 1;\n }\n if (isUndefined(model.enabled)) {\n model.enabled = true;\n }\n panelElement.style.zIndex = '' + model.zIndex;\n // eslint-disable-next-line\n var panelProp = new Panel(this, 'panels', model, true);\n this.panels.push(panelProp);\n };\n DashboardLayout.prototype.resizeEvents = function () {\n if (this.allowResizing) {\n var panelElements = this.element.querySelectorAll('.e-panel .e-panel-container .e-resize');\n for (var i = 0; i < panelElements.length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n EventHandler.add(panelElements[i], eventName, this.downResizeHandler, this);\n if (Browser.info.name !== 'msie') {\n EventHandler.add(panelElements[i], 'touchstart', this.touchDownResizeHandler, this);\n }\n }\n }\n };\n DashboardLayout.prototype.bindEvents = function () {\n this.refreshListener = this.refresh.bind(this);\n // eslint-disable-next-line\n EventHandler.add(window, 'resize', this.refreshListener);\n this.resizeEvents();\n };\n DashboardLayout.prototype.downResizeHandler = function (e) {\n this.downHandler(e);\n this.lastMouseX = e.pageX;\n this.lastMouseY = e.pageY;\n var moveEventName = (Browser.info.name === 'msie') ? 'mousemove pointermove' : 'mousemove';\n var upEventName = (Browser.info.name === 'msie') ? 'mouseup pointerup' : 'mouseup';\n if (!this.isMouseMoveBound) {\n EventHandler.add(document, moveEventName, this.moveResizeHandler, this);\n this.isMouseMoveBound = true;\n }\n if (!this.isMouseUpBound) {\n EventHandler.add(document, upEventName, this.upResizeHandler, this);\n this.isMouseUpBound = true;\n }\n };\n DashboardLayout.prototype.downHandler = function (e) {\n this.resizeCalled = false;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var el = closest((e.currentTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n this.trigger('resizeStart', args);\n this.downTarget = e.currentTarget;\n this.shadowEle = document.createElement('div');\n this.shadowEle.classList.add('e-holder');\n addClass([this.element], [preventSelect]);\n this.element.appendChild(this.shadowEle);\n this.renderReactTemplates();\n this.elementX = parseFloat(el.style.left);\n this.elementY = parseFloat(el.style.top);\n this.elementWidth = el.offsetWidth;\n this.elementHeight = el.offsetHeight;\n this.originalWidth = this.getCellInstance(el.id).sizeX;\n this.originalHeight = this.getCellInstance(el.id).sizeY;\n this.previousRow = this.getCellInstance(el.id).row;\n };\n DashboardLayout.prototype.touchDownResizeHandler = function (e) {\n this.downHandler(e);\n this.lastMouseX = e.changedTouches[0].pageX;\n this.lastMouseY = e.changedTouches[0].pageY;\n if (!this.isMouseMoveBound) {\n EventHandler.add(document, 'touchmove', this.touchMoveResizeHandler, this);\n this.isMouseMoveBound = true;\n }\n if (!this.isMouseUpBound) {\n EventHandler.add(document, 'touchend', this.upResizeHandler, this);\n this.isMouseUpBound = true;\n }\n };\n DashboardLayout.prototype.getCellSize = function () {\n return [this.cellSize[0], this.cellSize[1]];\n };\n DashboardLayout.prototype.updateMaxTopLeft = function (e) {\n this.moveTarget = this.downTarget;\n var el = closest((this.moveTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n this.trigger('resize', args);\n };\n DashboardLayout.prototype.updateResizeElement = function (el) {\n this.maxLeft = this.element.offsetWidth - 1;\n this.maxTop = this.cellSize[1] * this.maxRows - 1;\n removeClass([el], 'e-panel-transition');\n addClass([el], [dragging]);\n var handleArray = [east, west, north, south, southEast, northEast, northWest, southWest];\n for (var i = 0; i < this.moveTarget.classList.length; i++) {\n if (handleArray.indexOf(this.moveTarget.classList[i]) !== -1) {\n this.handleClass = (this.moveTarget.classList[i]);\n }\n }\n };\n DashboardLayout.prototype.moveResizeHandler = function (e) {\n this.updateMaxTopLeft(e);\n var el = closest((this.moveTarget), '.e-panel');\n if (this.lastMouseX === e.pageX || this.lastMouseY === e.pageY) {\n return;\n }\n this.updateResizeElement(el);\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n var diffY = this.mouseY - this.lastMouseY + this.mOffY;\n var diffX = this.mouseX - this.lastMouseX + this.mOffX;\n this.mOffX = this.mOffY = 0;\n this.lastMouseY = this.mouseY;\n this.lastMouseX = this.mouseX;\n this.resizingPanel(el, panelModel, diffX, diffY);\n };\n DashboardLayout.prototype.touchMoveResizeHandler = function (e) {\n this.updateMaxTopLeft(e);\n var el = closest((this.moveTarget), '.e-panel');\n if (this.lastMouseX === e.changedTouches[0].pageX || this.lastMouseY === e.changedTouches[0].pageY) {\n return;\n }\n this.updateResizeElement(el);\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.mouseX = e.changedTouches[0].pageX;\n this.mouseY = e.changedTouches[0].pageY;\n var diffX = this.mouseX - this.lastMouseX + this.mOffX;\n var diffY = this.mouseY - this.lastMouseY + this.mOffY;\n this.mOffX = this.mOffY = 0;\n this.lastMouseX = this.mouseX;\n this.lastMouseY = this.mouseY;\n this.resizingPanel(el, panelModel, diffX, diffY);\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.resizingPanel = function (el, panelModel, currentX, currentY) {\n var oldSizeX = this.getCellInstance(el.id).sizeX;\n var oldSizeY = this.getCellInstance(el.id).sizeY;\n var dY = currentY;\n var dX = currentX;\n if (this.handleClass.indexOf('north') >= 0) {\n if (this.elementHeight - dY < this.getMinHeight(panelModel)) {\n currentY = this.elementHeight - this.getMinHeight(panelModel);\n this.mOffY = dY - currentY;\n }\n else if (panelModel.maxSizeY && this.elementHeight - dY > this.getMaxHeight(panelModel)) {\n currentY = this.elementHeight - this.getMaxHeight(panelModel);\n this.mOffY = dY - currentY;\n }\n else if (this.elementY + dY < this.minTop) {\n currentY = this.minTop - this.elementY;\n this.mOffY = dY - currentY;\n }\n this.elementY += currentY;\n this.elementHeight -= currentY;\n }\n if (this.handleClass.indexOf('south') >= 0) {\n if (this.elementHeight + dY < this.getMinHeight(panelModel)) {\n currentY = this.getMinHeight(panelModel) - this.elementHeight;\n this.mOffY = dY - currentY;\n }\n else if (panelModel.maxSizeY && this.elementHeight + dY > this.getMaxHeight(panelModel)) {\n currentY = this.getMaxHeight(panelModel) - this.elementHeight;\n this.mOffY = dY - currentY;\n }\n this.elementHeight += currentY;\n }\n if (this.handleClass.indexOf('west') >= 0) {\n if (this.elementWidth - dX < this.getMinWidth(panelModel)) {\n currentX = this.elementWidth - this.getMinWidth(panelModel);\n this.mOffX = dX - currentX;\n }\n else if (panelModel.maxSizeX && this.elementWidth - dX > this.getMaxWidth(panelModel)) {\n currentX = this.elementWidth - this.getMaxWidth(panelModel);\n this.mOffX = dX - currentX;\n }\n else if (this.elementX + dX < this.minLeft) {\n currentX = this.minLeft - this.elementX;\n this.mOffX = dX - currentX;\n }\n this.elementX += currentX;\n this.elementWidth -= currentX;\n }\n if (this.handleClass.indexOf('east') >= 0) {\n if (this.elementWidth + dX < this.getMinWidth(panelModel)) {\n currentX = this.getMinWidth(panelModel) - this.elementWidth;\n this.mOffX = dX - currentX;\n }\n else if (panelModel.maxSizeX && this.elementWidth + dX > this.getMaxWidth(panelModel)) {\n currentX = this.getMaxWidth(panelModel) - this.elementWidth;\n this.mOffX = dX - currentX;\n }\n this.elementWidth += currentX;\n }\n el.style.top = this.elementY + 'px';\n el.style.left = this.elementX + 'px';\n el.style.width = this.elementWidth + 'px';\n el.style.height = this.elementHeight + 'px';\n var item = this.getResizeRowColumn(panelModel);\n if (item.col + item.sizeX > this.columns) {\n this.panelPropertyChange(item, { sizeX: item.sizeX - 1 });\n }\n this.shadowEle.style.top = ((item.row * this.getCellSize()[1] + (item.row * this.cellSpacing[1]))) + 'px';\n this.shadowEle.style.left = ((item.col * this.getCellSize()[0]) + ((item.col) * this.cellSpacing[0])) + 'px';\n this.shadowEle.style.height = ((item.sizeY * (this.getCellSize()[1] + (this.cellSpacing[1])))) + 'px';\n this.shadowEle.style.width = ((item.sizeX * (this.getCellSize()[0] + (this.cellSpacing[0])))) + 'px';\n if (oldSizeX !== item.sizeX || oldSizeY !== item.sizeY) {\n oldSizeX = item.sizeX;\n oldSizeY = item.sizeY;\n var model = this.getCellInstance(el.id);\n var value = {\n attributes: {\n row: model.row.toString(),\n col: model.col.toString(),\n sizeX: model.sizeX.toString(),\n sizeY: model.sizeY.toString()\n }\n };\n this.setAttributes(value, el);\n this.mainElement = el;\n this.updatePanelLayout(el, this.getCellInstance(el.id));\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n };\n DashboardLayout.prototype.upResizeHandler = function (e) {\n if (isNullOrUndefined(this.downTarget)) {\n return;\n }\n this.upTarget = this.downTarget;\n var el = closest((this.upTarget), '.e-panel');\n var args = { event: e, element: el, isInteracted: true };\n if (el) {\n addClass([el], 'e-panel-transition');\n var moveEventName = (Browser.info.name === 'msie') ? 'mousemove pointermove' : 'mousemove';\n var upEventName = (Browser.info.name === 'msie') ? 'mouseup pointerup' : 'mouseup';\n EventHandler.remove(document, moveEventName, this.moveResizeHandler);\n EventHandler.remove(document, upEventName, this.upResizeHandler);\n if (Browser.info.name !== 'msie') {\n EventHandler.remove(document, 'touchmove', this.touchMoveResizeHandler);\n EventHandler.remove(document, 'touchend', this.upResizeHandler);\n }\n this.isMouseUpBound = false;\n this.isMouseMoveBound = false;\n if (this.shadowEle) {\n detach(this.shadowEle);\n }\n this.shadowEle = null;\n var panelModel = this.getCellInstance(el.getAttribute('id'));\n this.setPanelPosition(el, panelModel.row, panelModel.col);\n this.setHeightAndWidth(el, panelModel);\n }\n removeClass([el], [dragging]);\n this.trigger('resizeStop', args);\n this.resizeCalled = false;\n this.lastMouseX = this.lastMouseY = undefined;\n this.mOffX = this.mOffY = 0;\n this.mainElement = null;\n if (this.allowFloating) {\n this.moveItemsUpwards();\n }\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkForChanges(true);\n };\n DashboardLayout.prototype.getResizeRowColumn = function (item) {\n var isChanged = false;\n var col = item.col;\n if (['e-west', 'e-south-west'].indexOf(this.handleClass) !== -1) {\n col = this.pixelsToColumns(this.elementX, false);\n }\n var row = item.row;\n if (['e-north'].indexOf(this.handleClass) !== -1) {\n row = this.pixelsToRows(this.elementY, false);\n if (this.previousRow !== row) {\n this.previousRow = row;\n isChanged = true;\n }\n }\n var sizeX = item.sizeX;\n if (['e-north', 'e-south'].indexOf(this.handleClass) === -1) {\n sizeX = this.pixelsToColumns(this.elementWidth - (sizeX) * this.cellSpacing[1], true);\n }\n var sizeY = item.sizeY;\n if (['e-east', 'e-west'].indexOf(this.handleClass) === -1) {\n if (this.handleClass === 'e-north' ? isChanged : true) {\n sizeY = this.pixelsToRows(this.elementHeight - (sizeY) * this.cellSpacing[0], true);\n }\n }\n if (item.col + item.sizeX > this.columns) {\n item.sizeX = item.sizeX - 1;\n }\n var canOccupy = row > -1 && col > -1 && sizeX + col <= this.maxCol() && sizeY + row <= this.maxRow();\n if (canOccupy && (this.collisions(row, col, sizeX, sizeY, this.getPanelBase(item.id)).length === 0)\n || this.allowPushing !== false) {\n this.panelPropertyChange(item, { row: row, col: col, sizeX: sizeX, sizeY: sizeY });\n }\n return item;\n };\n DashboardLayout.prototype.pixelsToColumns = function (pixels, isCeil) {\n var curColWidth = this.cellSize[0];\n if (isCeil) {\n return Math.ceil(pixels / curColWidth);\n }\n else {\n return Math.floor(pixels / curColWidth);\n }\n };\n DashboardLayout.prototype.pixelsToRows = function (pixels, isCeil) {\n if (isCeil) {\n return Math.round(pixels / this.cellSize[1]);\n }\n else {\n return Math.round(pixels / (this.cellSize[1] + this.cellSpacing[0]));\n }\n };\n DashboardLayout.prototype.getMinWidth = function (item) {\n return (((item.minSizeX) * this.getCellSize()[0]) + (item.minSizeX - 1) * this.cellSpacing[0]);\n };\n DashboardLayout.prototype.getMaxWidth = function (item) {\n return (item.maxSizeX) * this.getCellSize()[0];\n };\n DashboardLayout.prototype.getMinHeight = function (item) {\n return (((item.minSizeY) * this.getCellSize()[1]) + (item.minSizeY - 1) * this.cellSpacing[1]);\n };\n DashboardLayout.prototype.getMaxHeight = function (item) {\n return (item.maxSizeY) * this.getCellSize()[1];\n };\n DashboardLayout.prototype.sortedPanel = function () {\n this.sortedArray = [];\n for (var i = 0, l = this.panelCollection.length; i < l; ++i) {\n this.sortItem(this.panelCollection[i]);\n }\n };\n DashboardLayout.prototype.moveItemsUpwards = function () {\n if (this.allowFloating === false) {\n return;\n }\n for (var rowIndex = 0, l = this.sortedArray.length; rowIndex < l; ++rowIndex) {\n var columns = this.sortedArray[rowIndex];\n if (!columns) {\n continue;\n }\n for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\n var item = columns[colIndex];\n if (item) {\n this.moveItemUpwards(item);\n }\n }\n }\n this.updateGridLines();\n };\n DashboardLayout.prototype.moveItemUpwards = function (item) {\n if (this.allowFloating === false || item === this.mainElement) {\n return;\n }\n var colIndex = this.getCellInstance(item.id).col;\n var sizeY = parseInt(item.getAttribute('data-sizeY'), 10);\n var sizeX = parseInt(item.getAttribute('data-sizeX'), 10);\n var availableRow = null;\n var availableColumn = null;\n var rowIndex = parseInt(item.getAttribute('data-row'), 10) - 1;\n while (rowIndex > -1) {\n var items = this.collisions(rowIndex, colIndex, sizeX, sizeY, item);\n if (items.length !== 0) {\n break;\n }\n availableRow = rowIndex;\n availableColumn = colIndex;\n --rowIndex;\n }\n if (availableRow !== null) {\n this.sortItem(item, availableRow, availableColumn);\n }\n };\n DashboardLayout.prototype.sortItem = function (item, rowValue, columnValue) {\n this.overlapElement = [];\n var column = parseInt(item.getAttribute('data-col'), 10);\n var row = parseInt(item.getAttribute('data-row'), 10);\n if (!this.sortedArray[row]) {\n this.sortedArray[row] = [];\n }\n this.sortedArray[row][column] = item;\n if (item !== undefined && rowValue !== undefined && columnValue !== undefined) {\n if (this.oldRowCol[item.id] !== undefined && this.oldRowCol[item.id].row !== null &&\n typeof this.oldRowCol[item.id].col !== 'undefined') {\n {\n var oldRow = this.sortedArray[this.oldRowCol[item.id].row];\n if (this.oldRowCol[item.id] && oldRow[this.oldRowCol[item.id].col] === item) {\n delete oldRow[this.oldRowCol[item.id].col];\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n }\n }\n this.oldRowCol[item.id].row = rowValue;\n this.oldRowCol[item.id].row = columnValue;\n if (!this.sortedArray[row]) {\n this.sortedArray[row] = [];\n }\n this.sortedArray[row][column] = item;\n if (this.allItems.indexOf(item) === -1) {\n this.allItems.push(item);\n }\n this.panelPropertyChange(this.getCellInstance(item.id), { row: rowValue, col: columnValue });\n var panelModel = this.getCellInstance(item.id);\n this.setAttributes({ value: { col: panelModel.col.toString(), row: panelModel.row.toString() } }, item);\n this.updateLayout(item, this.getCellInstance(item.id));\n }\n };\n DashboardLayout.prototype.updateLayout = function (element, panelModel) {\n this.setPanelPosition(element, panelModel.row, panelModel.col);\n this.setHeightAndWidth(element, panelModel);\n this.updateRowHeight();\n this.sortedPanel();\n };\n DashboardLayout.prototype.refresh = function () {\n this.panelsSizeY = 0;\n this.updateDragArea();\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n else {\n if (this.element.classList.contains(responsive)) {\n removeClass([this.element], [responsive]);\n var internalPanels = this.element.querySelectorAll(((this.element.id) ? '#' + this.element.id + ' > ' : '') + '.e-panel');\n for (var i = 0; i < internalPanels.length; i++) {\n var ele = internalPanels[i];\n var cellInstance = this.getCellInstance(ele.id);\n var row = parseInt(ele.getAttribute('data-row'), 10);\n var col = parseInt(ele.getAttribute('data-col'), 10);\n this.panelPropertyChange(cellInstance, { row: row, col: col });\n this.setHeightAndWidth(ele, this.getCellInstance(ele.id));\n this.setPanelPosition(ele, row, col);\n this.updateRowHeight();\n }\n }\n this.panelResponsiveUpdate();\n this.updateGridLines();\n }\n this.removeResizeClasses(this.panelCollection);\n this.setClasses(this.panelCollection);\n this.resizeEvents();\n this.checkDragging(this.dragCollection);\n };\n DashboardLayout.prototype.updateGridLines = function () {\n if (this.element.querySelector('.e-dashboard-gridline-table')) {\n if (this.table) {\n detach(this.table);\n }\n this.initGridLines();\n }\n };\n DashboardLayout.prototype.checkDragging = function (dragCollection) {\n if (this.checkMediaQuery() || !this.allowDragging) {\n for (var i = 0; i < dragCollection.length; i++) {\n dragCollection[i].destroy();\n }\n }\n else {\n for (var i = 0; i < dragCollection.length; i++) {\n dragCollection[i].destroy();\n }\n this.enableDraggingContent(this.panelCollection);\n }\n };\n DashboardLayout.prototype.sortPanels = function () {\n var model = [];\n var _loop_1 = function (row) {\n var _loop_2 = function (col) {\n this_1.panels.filter(function (panel) {\n if (panel.row === row && panel.col === col) {\n model.push(panel);\n }\n });\n };\n for (var col = 0; col < this_1.columns; col++) {\n _loop_2(col);\n }\n };\n var this_1 = this;\n for (var row = 0; row <= this.rows; row++) {\n _loop_1(row);\n }\n return model;\n };\n DashboardLayout.prototype.checkMediaQuerySizing = function () {\n addClass([this.element], [responsive]);\n var updatedPanel;\n if (this.isPanelRemoved && this.panels) {\n updatedPanel = this.panels;\n }\n else {\n updatedPanel = this.sortPanels();\n }\n this.updatedRows = updatedPanel.length;\n for (var i = 0; i < updatedPanel.length; i++) {\n var panelElement = document.getElementById(updatedPanel[i].id);\n // eslint-disable-next-line\n var updatedHeight = void 0;\n if (panelElement) {\n setStyle(panelElement, { 'width': '100%' });\n panelElement.style.height = ' ' + ((this.element.parentElement\n && this.element.parentElement.offsetWidth / this.cellAspectRatio) * updatedPanel[i].sizeY) + 'px';\n if (updatedPanel[i].sizeY > 1) {\n updatedHeight = ((this.element.parentElement\n && this.element.parentElement.offsetWidth / this.cellAspectRatio) * updatedPanel[i].sizeY) +\n // eslint-disable-next-line radix\n parseInt((Math.round(updatedPanel[i].sizeY / 2) * this.cellSpacing[1]).toString(), 0);\n panelElement.style.height = '' + updatedHeight + 'px';\n }\n this.resizeHeight = true;\n this.panelPropertyChange(updatedPanel[i], { row: i, col: 0 });\n this.setPanelPosition(panelElement, updatedPanel[i].row, updatedPanel[i].col);\n this.panelsSizeY = this.panelsSizeY + updatedPanel[i].sizeY;\n this.setClasses(this.panelCollection);\n this.checkDragging(this.dragCollection);\n this.removeResizeClasses(this.panelCollection);\n }\n }\n this.updateRowHeight();\n };\n DashboardLayout.prototype.panelResponsiveUpdate = function () {\n this.element.classList.add('e-responsive');\n this.calculateCellSize();\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[i];\n var panelModel = this.getCellInstance(ele.id);\n this.setHeightAndWidth(ele, panelModel);\n }\n for (var i = 0; i < this.panels.length; i++) {\n this.setPanelPosition(document.getElementById(this.panels[i].id), this.panels[i].row, this.panels[i].col);\n }\n this.updateRowHeight();\n };\n DashboardLayout.prototype.updateRowHeight = function () {\n this.getRowColumn();\n this.setHeightWidth();\n };\n DashboardLayout.prototype.setHeightWidth = function () {\n var heightValue;\n var widthValue;\n if (this.checkMediaQuery()) {\n var entirePanelsY = 0;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].sizeY) {\n entirePanelsY += this.panels[i].sizeY;\n }\n }\n heightValue = ((entirePanelsY) *\n (this.element.parentElement && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio) +\n (entirePanelsY - 1) * this.cellSpacing[1]) + 'px';\n }\n else {\n heightValue = ((this.maxRow()) *\n (this.cellSize[0] / this.cellAspectRatio) + (this.maxRow() - 1) * this.cellSpacing[1]) + 'px';\n }\n setStyle(this.element, { 'height': heightValue });\n // eslint-disable-next-line prefer-const\n widthValue = window.getComputedStyle(this.element).width;\n setStyle(this.element, { 'width': widthValue });\n };\n DashboardLayout.prototype.setHeightAndWidth = function (panelElement, panelModel) {\n setStyle(panelElement, { 'height': formatUnit(this.setXYDimensions(panelModel)[0]) });\n setStyle(panelElement, { 'width': formatUnit(this.setXYDimensions(panelModel)[1]) });\n };\n DashboardLayout.prototype.renderCell = function (panel, isStringTemplate, index) {\n var cellElement;\n this.dimensions = this.setXYDimensions(panel);\n if (isUndefined(panel.enabled)) {\n panel.enabled = true;\n }\n if (this.contentTemplateChild.length > 0 && !isNullOrUndefined(index)) {\n cellElement = this.contentTemplateChild[index];\n if (panel.cssClass) {\n addClass([cellElement], [panel.cssClass]);\n }\n if (panel.id) {\n cellElement.setAttribute('id', panel.id);\n }\n }\n else {\n cellElement = this.createPanelElement(panel.cssClass ? panel.cssClass.split(' ') : null, panel.id);\n }\n cellElement.style.zIndex = '' + panel.zIndex;\n this.element.appendChild(cellElement);\n this.renderReactTemplates();\n var dashBoardCell = this.renderPanels(cellElement, panel, panel.id, isStringTemplate);\n this.panelCollection.push(dashBoardCell);\n this.setXYAttributes(cellElement, panel);\n this.setHeightAndWidth(cellElement, panel);\n return cellElement;\n };\n DashboardLayout.prototype.setPanelPosition = function (cellElement, row, col) {\n if (!cellElement) {\n return;\n }\n if (this.checkMediaQuery()) {\n this.calculateCellSize();\n }\n var heightValue = this.getCellSize()[1];\n var widthValue = this.getCellSize()[0];\n var left = col === 0 ? 0 : (((col) * ((widthValue) + this.cellSpacing[0])));\n var top = row === 0 ? 0 : (((row) * ((heightValue) + this.cellSpacing[1])));\n if (this.checkMediaQuery()) {\n top = row === 0 ? 0 : ((this.panelsSizeY) * ((heightValue) + this.cellSpacing[1]));\n }\n setStyle(cellElement, { 'left': left + 'px', 'top': top + 'px' });\n };\n DashboardLayout.prototype.getRowColumn = function () {\n this.rows = null;\n if (this.element.querySelectorAll('.e-panel').length > 0 && !this.updatedRows) {\n var panelElements = this.element.querySelectorAll('.e-panel');\n for (var i = 0; i < panelElements.length; i++) {\n var panelElement = panelElements[i];\n var rowValue = parseInt(panelElement.getAttribute('data-row'), 10);\n var xValue = parseInt(panelElement.getAttribute('data-sizeY'), 10);\n this.rows = Math.max(this.rows, (rowValue + xValue));\n }\n }\n else {\n if (this.updatedRows) {\n this.rows = this.updatedRows;\n this.updatedRows = null;\n }\n for (var i = 0; i < this.panels.length; i++) {\n this.rows = Math.max(this.rows, this.panels[i].row);\n }\n }\n };\n DashboardLayout.prototype.setMinMaxValues = function (panel) {\n if (!panel.sizeX || panel.sizeX < panel.minSizeX) {\n this.panelPropertyChange(panel, { sizeX: panel.minSizeX });\n }\n else if ((panel.maxSizeX && panel.sizeX > panel.maxSizeX)) {\n this.panelPropertyChange(panel, { sizeX: panel.maxSizeX });\n }\n else if (panel.sizeX > this.columns) {\n this.panelPropertyChange(panel, { sizeX: this.columns });\n }\n else {\n this.panelPropertyChange(panel, { sizeX: panel.sizeX });\n }\n if (!panel.sizeY || panel.sizeY < panel.minSizeY) {\n this.panelPropertyChange(panel, { sizeY: panel.minSizeY });\n }\n else if (panel.maxSizeY && panel.sizeY > panel.maxSizeY) {\n this.panelPropertyChange(panel, { sizeY: panel.maxSizeY });\n }\n else {\n this.panelPropertyChange(panel, { sizeY: panel.sizeY });\n }\n };\n DashboardLayout.prototype.checkMinMaxValues = function (panel) {\n if (panel.col + panel.sizeX > this.columns) {\n this.panelPropertyChange(panel, { sizeX: panel.sizeX + (this.columns - (panel.col + panel.sizeX)) });\n }\n };\n DashboardLayout.prototype.panelPropertyChange = function (panel, value) {\n // eslint-disable-next-line\n panel.setProperties(value, true);\n };\n DashboardLayout.prototype.renderDashBoardCells = function (cells) {\n if (this.element.querySelectorAll('.e-panel').length > 0 || this.panels.length > 0) {\n for (var j = 0; j < cells.length; j++) {\n this.gridPanelCollection.push(cells[j]);\n this.setMinMaxValues(cells[j]);\n if (this.maxColumnValue < cells[j].col || this.maxColumnValue < (cells[j].col + cells[j].sizeX)) {\n this.panelPropertyChange(cells[j], { col: this.maxColumnValue - cells[j].sizeX });\n }\n var cell = this.renderCell(cells[j], false, j);\n if (this.enableRtl) {\n addClass([cell], 'e-rtl');\n }\n this.element.appendChild(cell);\n this.renderReactTemplates();\n if (this.checkMediaQuery() && j === cells.length - 1) {\n this.checkMediaQuerySizing();\n }\n else {\n this.setPanelPosition(cell, cells[j].row, cells[j].col);\n this.mainElement = cell;\n this.updatePanelLayout(cell, cells[j]);\n this.mainElement = null;\n }\n }\n }\n this.setClasses(this.panelCollection);\n };\n DashboardLayout.prototype.collisions = function (row, col, sizeX, sizeY, ignore) {\n var items = [];\n if (!sizeX || !sizeY) {\n sizeX = sizeY = 1;\n }\n if (ignore && !(ignore instanceof Array)) {\n ignore = [ignore];\n }\n var item;\n for (var h = 0; h < sizeY; ++h) {\n for (var w = 0; w < sizeX; ++w) {\n item = this.getPanel(row + h, col + w, ignore);\n if (item && (!ignore || ignore.indexOf(document.getElementById(item.id)) === -1) &&\n items.indexOf(document.getElementById(item.id)) === -1) {\n items.push(document.getElementById(item.id));\n }\n }\n }\n return items;\n };\n DashboardLayout.prototype.rightWardsSpaceChecking = function (rowElements, col, ele) {\n var _this = this;\n var columns = [];\n var spacedColumns = [];\n rowElements.forEach(function (element) {\n var columnValue = parseInt(element.getAttribute('data-col'), 10);\n var sizeXValue = parseInt(element.getAttribute('data-sizeX'), 10);\n if (col < _this.columns && columnValue >= col) {\n if (sizeXValue > 1) {\n for (var i = columnValue; i < columnValue + sizeXValue; i++) {\n columns.push(i);\n }\n }\n else {\n columns.push(columnValue);\n }\n }\n });\n if (columns.length > 0) {\n for (var i = col + 1; i <= this.columns - 1; i++) {\n if (columns.indexOf(i) === -1 && i !== col) {\n if (spacedColumns.indexOf(i) === -1) {\n spacedColumns.push(i);\n }\n }\n }\n }\n var occupiedValues = this.getOccupiedColumns(ele);\n occupiedValues.forEach(function (colValue) {\n if (colValue > col && spacedColumns.indexOf(colValue) !== -1) {\n spacedColumns.splice(spacedColumns.indexOf(colValue), 1);\n }\n });\n var eleOccupiedValues = this.getOccupiedColumns(this.checkingElement);\n eleOccupiedValues.forEach(function (col) {\n if (col > parseInt(ele.getAttribute('data-col'), 10) && occupiedValues.indexOf(col) === -1 &&\n spacedColumns.indexOf(col) === -1) {\n spacedColumns.push(col);\n }\n });\n spacedColumns = spacedColumns.sort(function (next, previous) { return next - previous; });\n return spacedColumns;\n };\n DashboardLayout.prototype.getOccupiedColumns = function (element) {\n var occupiedItems = [];\n var sizeX = parseInt(element.getAttribute('data-sizeX'), 10);\n var col = parseInt(element.getAttribute('data-col'), 10);\n for (var i = col; (i < col + sizeX && i <= this.columns); i++) {\n occupiedItems.push(i);\n }\n return occupiedItems;\n };\n DashboardLayout.prototype.leftWardsSpaceChecking = function (rowElements, col, ele) {\n var _this = this;\n var spacedColumns = [];\n var columns = [];\n rowElements.forEach(function (element) {\n var colValue = parseInt(element.getAttribute('data-col'), 10);\n var xValue = parseInt(element.getAttribute('data-sizeX'), 10);\n if (col <= _this.columns && colValue <= col) {\n if (xValue > 1) {\n for (var i = colValue; i < colValue + xValue; i++) {\n columns.push(i);\n }\n }\n else {\n columns.push(colValue);\n }\n }\n });\n if (columns.length > 0) {\n for (var j = 0; j <= col; j++) {\n if (columns.indexOf(j) === -1 && j !== col) {\n if (spacedColumns.indexOf(j) === -1) {\n spacedColumns.push(j);\n }\n }\n }\n }\n var occupiedValues = this.getOccupiedColumns(ele);\n occupiedValues.forEach(function (colValue) {\n if (colValue < col && spacedColumns.indexOf(colValue) !== -1) {\n spacedColumns.splice(spacedColumns.indexOf(colValue), 1);\n }\n });\n var eleOccupiedValues = this.getOccupiedColumns(this.checkingElement);\n eleOccupiedValues.forEach(function (col) {\n if (col < parseInt(ele.getAttribute('data-col'), 10) && occupiedValues.indexOf(col) === -1 &&\n spacedColumns.indexOf(col) === -1) {\n spacedColumns.push(col);\n }\n });\n spacedColumns = spacedColumns.sort(function (next, prev) { return next - prev; });\n spacedColumns = spacedColumns.reverse();\n return spacedColumns;\n };\n DashboardLayout.prototype.adjustmentAvailable = function (row, col, sizeY, sizeX, ele) {\n this.leftAdjustable = undefined;\n this.rightAdjustable = undefined;\n var isAdjustable = false;\n var rightSpacing;\n var rowElement = [];\n this.topAdjustable = undefined;\n var eleSizeX = parseInt(ele.getAttribute('data-sizeX'), 10);\n var eleCol = parseInt(ele.getAttribute('data-col'), 10);\n rowElement = this.getRowElements(this.collisions(row, 0, this.columns, sizeY, []));\n if (rowElement.indexOf(ele) === -1) {\n rowElement.push(ele);\n }\n var leftSpacing = this.leftWardsSpaceChecking(rowElement, col, ele);\n if (leftSpacing.length > 0) {\n this.leftAdjustable = this.isLeftAdjustable(leftSpacing, ele, row, col, sizeX, sizeY);\n if (this.spacedColumnValue !== eleCol - this.getCellInstance(this.checkingElement.id).sizeX) {\n this.leftAdjustable = false;\n }\n if (this.leftAdjustable) {\n this.rightAdjustable = false;\n }\n else {\n this.leftAdjustable = false;\n rightSpacing = this.rightWardsSpaceChecking(rowElement, col, ele);\n this.rightAdjustable = rightSpacing.length > 0 ? this.isRightAdjustable(rightSpacing, ele, row, col, sizeX, sizeY) : false;\n if (this.spacedColumnValue !== eleSizeX + eleCol) {\n this.rightAdjustable = false;\n }\n if (!this.rightAdjustable) {\n this.rightAdjustable = false;\n }\n }\n }\n else {\n rightSpacing = this.rightWardsSpaceChecking(rowElement, col, ele);\n this.rightAdjustable = rightSpacing.length > 0 ? this.isRightAdjustable(rightSpacing, ele, row, col, sizeX, sizeY) : false;\n if (this.spacedColumnValue !== eleSizeX + eleCol) {\n this.rightAdjustable = false;\n }\n if (this.rightAdjustable) {\n this.leftAdjustable = false;\n }\n }\n if (!this.rightAdjustable && !this.leftAdjustable && row > 0) {\n var endRow = this.getCellInstance(ele.id).row;\n var topCheck = false;\n if (this.startRow !== endRow) {\n topCheck = true;\n }\n for (var rowValue = row; rowValue >= 0; rowValue--) {\n var element = (this.getCellInstance(ele.id).sizeY > 1 && topCheck) ? this.checkingElement : ele;\n if ((rowValue !== endRow) && (rowValue === endRow - sizeY) &&\n this.collisions(rowValue, col, sizeX, sizeY, element).length === 0) {\n topCheck = false;\n this.topAdjustable = true;\n this.spacedRowValue = isNullOrUndefined(this.spacedRowValue) ? rowValue : this.spacedRowValue;\n this.spacedColumnValue = col;\n }\n }\n }\n if (this.rightAdjustable || this.leftAdjustable || this.topAdjustable) {\n isAdjustable = true;\n if (isNullOrUndefined(this.spacedRowValue)) {\n this.spacedRowValue = row;\n }\n }\n return isAdjustable;\n };\n DashboardLayout.prototype.isXSpacingAvailable = function (spacing, sizeX) {\n var isSpaceAvailable = false;\n var subSpacingColumns = [];\n for (var i = 0; i < spacing.length; i++) {\n if (spacing[i + 1] - spacing[i] === 1 || spacing[i + 1] - spacing[i] === -1) {\n subSpacingColumns.push(spacing[i]);\n if (sizeX === 2) {\n subSpacingColumns.push(spacing[i + 1]);\n }\n if (i === spacing.length - 2) {\n subSpacingColumns.push(spacing[i + 1]);\n if (subSpacingColumns.length > sizeX) {\n subSpacingColumns.splice(-1);\n }\n }\n if (subSpacingColumns.length === sizeX) {\n isSpaceAvailable = true;\n this.spacedColumnValue = subSpacingColumns.sort(function (next, previous) { return next - previous; })[0];\n if (this.spacedColumnValue < 0) {\n this.spacedColumnValue = 1;\n }\n return isSpaceAvailable;\n }\n }\n else {\n subSpacingColumns = [];\n continue;\n }\n }\n return isSpaceAvailable;\n };\n DashboardLayout.prototype.getRowElements = function (base) {\n var rowElements = [];\n for (var i = 0; i < base.length; i++) {\n rowElements.push(base[i]);\n }\n return rowElements;\n };\n DashboardLayout.prototype.isLeftAdjustable = function (spaces, ele, row, col, sizeX, sizeY) {\n var isLeftAdjudtable;\n if (sizeX === 1 && sizeY === 1 && spaces.length > 0) {\n this.spacedColumnValue = spaces[0];\n isLeftAdjudtable = true;\n }\n else if (sizeX > 1 && sizeY === 1) {\n isLeftAdjudtable = this.isXSpacingAvailable(spaces, sizeX);\n }\n else if (sizeY > 1) {\n if (sizeX === 1) {\n var xAdjust = void 0;\n if (spaces.length >= 1) {\n xAdjust = true;\n }\n if (xAdjust) {\n for (var i = 0; i < spaces.length; i++) {\n var collisionValue = this.collisions(row, spaces[i], sizeX, sizeY, this.checkingElement);\n if (collisionValue.length === 0) {\n this.spacedColumnValue = spaces[i];\n isLeftAdjudtable = true;\n return isLeftAdjudtable;\n }\n else {\n isLeftAdjudtable = false;\n }\n }\n }\n }\n else {\n isLeftAdjudtable = this.replacable(spaces, sizeX, row, sizeY, ele);\n }\n }\n return isLeftAdjudtable;\n };\n DashboardLayout.prototype.isRightAdjustable = function (spacing, ele, row, col, sizeX, sizeY) {\n var isRightAdjudtable;\n if (sizeX === 1 && sizeY === 1 && spacing.length > 0) {\n this.spacedColumnValue = spacing[0];\n isRightAdjudtable = true;\n }\n else if (sizeX > 1 && sizeY === 1) {\n isRightAdjudtable = this.isXSpacingAvailable(spacing, sizeX);\n }\n else if (sizeY > 1) {\n if (sizeX === 1) {\n var xAdjust = void 0;\n if (spacing.length >= 1) {\n xAdjust = true;\n }\n if (xAdjust) {\n for (var i = 0; i < spacing.length; i++) {\n var collisionValue = this.collisions(row, spacing[i], sizeX, sizeY, this.checkingElement);\n for (var collision = 0; collision < collisionValue.length; collision++) {\n if (parseInt(ele.getAttribute('data-col'), 10) !== spacing[i]) {\n collisionValue.splice(collisionValue.indexOf(collisionValue[collision]), 1);\n }\n }\n if (collisionValue.length === 0) {\n isRightAdjudtable = true;\n this.spacedColumnValue = spacing[i];\n return isRightAdjudtable;\n }\n else {\n isRightAdjudtable = false;\n }\n }\n }\n }\n else {\n isRightAdjudtable = this.replacable(spacing, sizeX, row, sizeY, ele);\n }\n }\n return isRightAdjudtable;\n };\n DashboardLayout.prototype.replacable = function (spacing, sizeX, row, sizeY, ele) {\n var isRightAdjudtable;\n var updatedCollision = [];\n for (var j = 0; j < spacing.length; j++) {\n var xAdjust = this.isXSpacingAvailable(spacing, sizeX);\n if (xAdjust) {\n var exclusions = [];\n exclusions.push(this.checkingElement);\n exclusions.push(ele);\n if (updatedCollision.length === 0) {\n isRightAdjudtable = true;\n // eslint-disable-next-line no-self-assign\n this.spacedColumnValue = this.spacedColumnValue;\n return isRightAdjudtable;\n }\n else {\n isRightAdjudtable = false;\n }\n }\n }\n return isRightAdjudtable;\n };\n DashboardLayout.prototype.sortCollisionItems = function (collisionItems) {\n var updatedCollision = [];\n var rowElements;\n var _loop_3 = function (row) {\n rowElements = [];\n collisionItems.forEach(function (element) {\n if (element && element.getAttribute('data-row') === row.toString()) {\n rowElements.push(element);\n }\n });\n var _loop_4 = function (column) {\n rowElements.forEach(function (item) {\n if (item && item.getAttribute('data-col') === column.toString()) {\n updatedCollision.push(item);\n }\n });\n };\n for (var column = this_2.columns - 1; column >= 0; column--) {\n _loop_4(column);\n }\n };\n var this_2 = this;\n for (var row = this.rows - 1; row >= 0; row--) {\n _loop_3(row);\n }\n return updatedCollision;\n };\n DashboardLayout.prototype.updatedModels = function (collisionItems, panelModel, ele) {\n var _this = this;\n var removeableElement = [];\n if (!this.mainElement) {\n this.sortedPanel();\n }\n collisionItems.forEach(function (element) {\n _this.checkingElement = element;\n var model = _this.getCellInstance(element.id);\n var adjust = !_this.adjustmentAvailable(model.row, model.col, model.sizeY, model.sizeX, ele);\n if (model.sizeX > 1 && adjust) {\n for (var rowValue = model.row; rowValue < panelModel.row + panelModel.sizeY; rowValue++) {\n var collisions = _this.collisions(rowValue, model.col, model.sizeX, model.sizeY, element);\n collisions.forEach(function (item) {\n if (collisionItems.indexOf(item) >= 0 && removeableElement.indexOf(item) === -1) {\n removeableElement.push(item);\n }\n });\n }\n }\n });\n removeableElement.forEach(function (item) {\n if (removeableElement.indexOf(item) >= 0) {\n collisionItems.splice(collisionItems.indexOf(item), 1);\n }\n });\n return collisionItems;\n };\n DashboardLayout.prototype.resetLayout = function (model) {\n var collisions = this.collisions(model.row, model.col, model.sizeX, model.sizeY, this.mainElement);\n if (!this.mainElement || this.addPanelCalled || this.resizeCalled || this.movePanelCalled) {\n return collisions;\n }\n if (this.mainElement && this.oldRowCol !== this.cloneObject) {\n for (var i = 0; i < this.panels.length; i++) {\n var element = document.getElementById(this.panels[i].id);\n if (element === this.mainElement) {\n continue;\n }\n var rowValue = this.cloneObject[element.id].row;\n var colValue = this.cloneObject[element.id].col;\n this.setPanelPosition(element, rowValue, colValue);\n this.panelPropertyChange(this.getCellInstance(element.id), { row: rowValue, col: colValue });\n this.setAttributes({ value: { col: colValue.toString(), row: rowValue.toString() } }, element);\n this.updateOldRowColumn();\n }\n }\n this.sortedArray = this.cloneArray;\n collisions = this.collisions(model.row, model.col, model.sizeX, model.sizeY, this.mainElement);\n this.sortedPanel();\n this.updateOldRowColumn();\n if (this.checkCollision && this.checkCollision.length > 0 && collisions.indexOf(this.checkCollision[0]) === -1 &&\n this.cloneObject[this.checkCollision[0].id].row === model.row) {\n collisions.push(this.checkCollision[0]);\n }\n return collisions;\n };\n DashboardLayout.prototype.swapAvailability = function (collisions, element) {\n var available = true;\n var eleModel = this.getCellInstance(element.id);\n for (var count = 0; count < collisions.length; count++) {\n var collideModel = this.getCellInstance(collisions[count].id);\n for (var i = 1; i < eleModel.sizeY; i++) {\n var excludeEle = [];\n excludeEle.push(element);\n excludeEle.push(collisions[count]);\n var collision = this.collisions(eleModel.row + i, collideModel.col, collideModel.sizeX, collideModel.sizeY, excludeEle);\n if (collision.length > 0) {\n available = false;\n return false;\n }\n else {\n continue;\n }\n }\n }\n return available;\n };\n DashboardLayout.prototype.checkForSwapping = function (collisions, element) {\n if (!this.mainElement || collisions.length === 0) {\n return false;\n }\n var direction;\n var eleSwapRow = parseInt(collisions[0].getAttribute('data-row'), 10);\n if (this.startRow < eleSwapRow) {\n direction = 1;\n }\n else if (this.startRow > eleSwapRow) {\n direction = 0;\n }\n if (!this.swapAvailability(collisions, element)) {\n return false;\n }\n var isSwappable = false;\n for (var count1 = 0; count1 < collisions.length; count1++) {\n if (collisions.length >= 1 && this.cloneObject[this.mainElement.id] && this.cloneObject[this.mainElement.id].row === this.oldRowCol[this.mainElement.id].row) {\n return false;\n }\n }\n var updatedRow = direction === 0 ?\n this.getCellInstance(this.mainElement.id).row + this.getCellInstance(this.mainElement.id).sizeY\n : this.startRow;\n for (var count = 0; count < collisions.length; count++) {\n var collideInstance = this.getCellInstance(collisions[count].id);\n var elementinstance = this.getCellInstance(element.id);\n var ignore = [];\n if (collideInstance.sizeY === 1 && ignore.indexOf(collisions[count]) === -1) {\n ignore.push(collisions[count]);\n }\n else if (collideInstance.sizeY > 1 && ignore.indexOf(collisions[count]) === -1) {\n if (direction === 1 && elementinstance.row === (this.cloneObject[collideInstance.id].row + collideInstance.sizeY - 1)) {\n ignore.push(collisions[count]);\n }\n else if (direction === 0 && elementinstance.row === (this.cloneObject[collideInstance.id].row)) {\n ignore.push(collisions[count]);\n }\n else {\n return false;\n }\n }\n if (collideInstance.sizeY <= elementinstance.sizeY && ignore.indexOf(collisions[count]) === -1) {\n ignore.push(collisions[count]);\n }\n ignore.push(this.mainElement);\n var swapCollision = this.collisions(updatedRow, collideInstance.col, collideInstance.sizeX, collideInstance.sizeY, ignore);\n if (swapCollision.length > 0) {\n isSwappable = false;\n return isSwappable;\n }\n else {\n if (count === collisions.length - 1) {\n isSwappable = true;\n }\n continue;\n }\n }\n return isSwappable;\n };\n DashboardLayout.prototype.swapItems = function (collisions, element, panelModel) {\n var _this = this;\n var direction;\n var swappedElements = [];\n swappedElements.push(element);\n var eleSwapRow = parseInt(collisions[0].getAttribute('data-row'), 10);\n if (this.startRow < eleSwapRow) {\n direction = 1;\n }\n else if (this.startRow > eleSwapRow) {\n direction = 0;\n }\n var collisionItemsRow = direction === 0 ? eleSwapRow + panelModel.sizeY : this.startRow;\n if (!this.movePanelCalled) {\n var collisionInstance = this.getCellInstance(collisions[0].id);\n this.panelPropertyChange(panelModel, { row: direction === 0 ? eleSwapRow : collisionItemsRow + collisionInstance.sizeY });\n }\n for (var count = 0; count < collisions.length; count++) {\n swappedElements.push(collisions[count]);\n this.setPanelPosition(collisions[count], collisionItemsRow, (this.getCellInstance(collisions[count].id)).col);\n this.panelPropertyChange(this.getCellInstance(collisions[count].id), { row: collisionItemsRow });\n collisions[count].setAttribute('data-row', collisionItemsRow.toString());\n }\n element.setAttribute('data-row', panelModel.row.toString());\n this.setPanelPosition(this.shadowEle, panelModel.row, panelModel.col);\n for (var i = 0; i < this.panels.length; i++) {\n this.oldRowCol[this.panels[i].id] = { row: this.panels[i].row, col: this.panels[i].col };\n }\n this.startRow = panelModel.row;\n this.updateOldRowColumn();\n swappedElements.forEach(function (item) {\n _this.cloneObject[item.id] = _this.oldRowCol[item.id];\n var itemModel = _this.getCellInstance(item.id);\n for (var i = 0; i < _this.sortedArray.length; i++) {\n if (!_this.sortedArray[i]) {\n continue;\n }\n for (var j = 0; j < _this.sortedArray[i].length; j++) {\n if (_this.sortedArray[i][j] === item) {\n _this.sortedArray[i][j] = undefined;\n }\n }\n }\n if (!_this.sortedArray[itemModel.row]) {\n _this.sortedArray[itemModel.row] = [];\n }\n _this.sortedArray[itemModel.row][itemModel.col] = item;\n _this.cloneArray = _this.sortedArray;\n });\n };\n DashboardLayout.prototype.updatePanelLayout = function (element, panelModel) {\n this.collisionChecker = {};\n var initialModel = [];\n var checkForAdjustment;\n var collisionModels = [];\n var swappingAvailable;\n if (this.mainElement && this.isRenderComplete) {\n initialModel = this.resetLayout(panelModel);\n }\n else {\n initialModel = this.collisions(panelModel.row, panelModel.col, panelModel.sizeX, panelModel.sizeY, element);\n }\n if (initialModel.length > 0) {\n initialModel = this.sortCollisionItems(initialModel);\n initialModel = this.updatedModels(initialModel, panelModel, element);\n swappingAvailable = !isNullOrUndefined(this.startRow) ? this.checkForSwapping(initialModel, element) : false;\n if (swappingAvailable) {\n this.swapItems(initialModel, element, panelModel);\n }\n else {\n for (var i = 0; i < initialModel.length; i++) {\n var model = this.getCellInstance(initialModel[i].id);\n this.checkingElement = initialModel[i];\n this.spacedRowValue = null;\n this.spacedColumnValue = null;\n checkForAdjustment = this.adjustmentAvailable(model.row, model.col, model.sizeY, model.sizeX, element);\n if (checkForAdjustment && !isNullOrUndefined(this.spacedColumnValue)) {\n this.setPanelPosition(initialModel[i], this.spacedRowValue, this.spacedColumnValue);\n this.oldRowCol[(initialModel[i].id)] = { row: this.spacedRowValue, col: this.spacedColumnValue };\n var value = {\n attributes: {\n row: this.spacedRowValue.toString(),\n col: this.spacedColumnValue.toString()\n }\n };\n this.setAttributes(value, initialModel[i]);\n this.panelPropertyChange(model, { col: this.spacedColumnValue, row: this.spacedRowValue });\n // updated the panel model array as inTopAdjustable case with floating enabled instead of dragging and extra row\n if (this.topAdjustable && this.allowFloating) {\n this.updatePanels();\n this.updateCloneArrayObject();\n }\n this.spacedRowValue = null;\n if (i < initialModel.length) {\n continue;\n }\n }\n else {\n collisionModels.push(initialModel[i]);\n }\n }\n }\n }\n if (collisionModels.length > 0) {\n // eslint-disable-next-line\n var proxy_1 = this;\n collisionModels.forEach(function (item1) {\n if (proxy_1.overlapElement.indexOf(item1) === -1) {\n proxy_1.overlapElement.push(item1);\n }\n });\n if (this.overlapElement && this.overlapElement.indexOf(element) !== -1) {\n this.overlapElement.splice(this.overlapElement.indexOf(element), 1);\n }\n if (collisionModels.length > 0) {\n this.updateRowColumn(panelModel.row, this.overlapElement, element);\n this.checkForCompletePushing();\n }\n }\n if (!this.isSubValue) {\n this.sortedPanel();\n }\n this.updateRowHeight();\n this.updateGridLines();\n };\n DashboardLayout.prototype.checkForCompletePushing = function () {\n for (var i = 0; i < this.panels.length; i++) {\n if (this.collisionChecker[this.panels[i].id] && this.collisionChecker[this.panels[i].id] !== null) {\n this.overlapElement = [this.collisionChecker[this.panels[i].id].ele];\n var key = this.panels[i].id;\n this.updateRowColumn(this.collisionChecker[key].row, this.overlapElement, this.collisionChecker[key].srcEle);\n }\n }\n };\n DashboardLayout.prototype.updateCollisionChecked = function (item) {\n for (var count = 0; count < Object.keys(this.collisionChecker).length; count++) {\n this.collisionChecker[item.id] = null;\n }\n };\n DashboardLayout.prototype.updateRowColumn = function (row, ele, srcEle) {\n if (!srcEle) {\n return;\n }\n var eleSizeY = parseInt(srcEle.getAttribute('data-sizeY'), 10);\n var eleRow = parseInt(srcEle.getAttribute('data-row'), 10);\n this.overlapElementClone = this.overlapElement && !this.shouldRestrict ? this.overlapElement : this.overlapElement;\n for (var i = 0; i < this.overlapElementClone.length; i++) {\n if (this.overlapElementClone.length === 0) {\n return;\n }\n for (var i_1 = 0; i_1 < this.overlapElementClone.length; i_1++) {\n this.collisionChecker[this.overlapElementClone[i_1].id] = {\n ele: this.overlapElementClone[i_1],\n row: row,\n srcEle: srcEle\n };\n }\n var updatedRow = eleRow + eleSizeY;\n var collisionY = parseInt(this.overlapElementClone[i].getAttribute('data-sizeY'), 10);\n var collisionCol = parseInt(this.overlapElementClone[i].getAttribute('data-col'), 10);\n var collisionX = parseInt(this.overlapElementClone[i].getAttribute('data-sizeX'), 10);\n var colValue = void 0;\n var collisionModels = void 0;\n if (this.overlapSubElementClone.indexOf(srcEle) === -1) {\n this.overlapSubElementClone.push(srcEle);\n }\n if (this.overlapSubElementClone.indexOf(this.overlapElementClone[i]) === -1) {\n this.overlapSubElementClone.push(this.overlapElementClone[i]);\n }\n if (collisionY > 1 || collisionX > 1) {\n var overlapElementModel = this.getCellInstance(this.overlapElementClone[i].id);\n colValue = overlapElementModel.col;\n var ele_1 = document.getElementById(overlapElementModel.id);\n for (var k = overlapElementModel.row; k < eleRow + eleSizeY; k++) {\n this.isSubValue = true;\n this.panelPropertyChange(overlapElementModel, { row: overlapElementModel.row + 1 });\n ele_1.setAttribute('data-row', overlapElementModel.row.toString());\n this.setPanelPosition(ele_1, overlapElementModel.row, colValue);\n this.updateCollisionChecked(ele_1);\n this.oldRowCol[(ele_1.id)] = { row: overlapElementModel.row, col: colValue };\n var panelModel = this.getCellInstance(ele_1.id);\n this.panelPropertyChange(panelModel, { col: colValue, row: overlapElementModel.row });\n var eleRow_1 = parseInt(ele_1.getAttribute('data-row'), 10);\n var eleCol = parseInt(ele_1.getAttribute('data-col'), 10);\n var sizeX = parseInt(ele_1.getAttribute('data-sizeX'), 10);\n var sizeY = parseInt(ele_1.getAttribute('data-sizeY'), 10);\n var excludeElements = [];\n excludeElements.push(ele_1);\n excludeElements.push(srcEle);\n collisionModels = this.collisions(eleRow_1, eleCol, sizeX, sizeY, excludeElements);\n if (this.mainElement && collisionModels.indexOf(this.mainElement) !== -1) {\n collisionModels.splice(collisionModels.indexOf(this.mainElement), 1);\n }\n this.collisionPanel(collisionModels, eleCol, eleRow_1, ele_1);\n }\n this.isSubValue = false;\n }\n else {\n if (this.addPanelCalled) {\n this.addPanelCalled = false;\n }\n this.overlapElementClone[i].setAttribute('data-row', updatedRow.toString());\n var excludeEle = [];\n excludeEle.push(this.overlapElementClone[i]);\n excludeEle.push(srcEle);\n collisionModels = this.collisions(updatedRow, collisionCol, collisionX, collisionY, excludeEle);\n if (this.mainElement && collisionModels.indexOf(this.mainElement) !== -1) {\n collisionModels.splice(collisionModels.indexOf(this.mainElement), 1);\n }\n colValue = parseInt(this.overlapElementClone[i].getAttribute('data-col'), 10);\n this.setPanelPosition(this.overlapElementClone[i], updatedRow, colValue);\n this.updateCollisionChecked(this.overlapElementClone[i]);\n this.oldRowCol[(this.overlapElementClone[i].id)] = { row: updatedRow, col: colValue };\n var panelModel = this.getCellInstance(this.overlapElementClone[i].id);\n this.panelPropertyChange(panelModel, { col: colValue, row: updatedRow });\n this.collisionPanel(collisionModels, colValue, updatedRow, this.overlapElementClone[i]);\n }\n }\n };\n DashboardLayout.prototype.collisionPanel = function (collisionModels, colValue, updatedRow, clone) {\n var panelModel = this.getCellInstance(clone.id);\n this.panelPropertyChange(panelModel, { row: updatedRow, col: colValue });\n if (collisionModels.length > 0) {\n // eslint-disable-next-line\n var proxy_2 = this;\n this.overlapElement = [];\n this.shouldRestrict = true;\n collisionModels.forEach(function (item1) {\n proxy_2.overlapElement.push(item1);\n });\n var overlapElementRow1 = parseInt(clone.getAttribute('data-row'), 10);\n for (var m = 0; m < this.overlapElement.length; m++) {\n this.updateRowColumn(overlapElementRow1, this.overlapElement, clone);\n }\n this.shouldRestrict = false;\n }\n else {\n if (!this.addPanelCalled) {\n this.sortedPanel();\n }\n if (this.overlapSubElementClone.length > 0) {\n var _loop_5 = function (p) {\n var rowVal = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-row'), 10);\n var colValue_1 = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-col'), 10);\n var sizeX = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-sizeX'), 10);\n var sizeY = parseInt(this_3.overlapSubElementClone[p].getAttribute('data-sizeY'), 10);\n var collisionModels1 = this_3.collisions(rowVal, colValue_1, sizeX, sizeY, this_3.overlapSubElementClone);\n if (this_3.mainElement && collisionModels1.indexOf(this_3.mainElement) !== -1) {\n collisionModels1.splice(collisionModels1.indexOf(this_3.mainElement), 1);\n }\n // eslint-disable-next-line\n var proxy = this_3;\n collisionModels1.forEach(function (item1) {\n proxy.overlapElement.push(item1);\n });\n if (collisionModels1.length > 0) {\n this_3.updateRowColumn(rowVal, this_3.overlapElement, this_3.overlapSubElementClone[p]);\n }\n };\n var this_3 = this;\n for (var p = 0; p < this.overlapSubElementClone.length; p++) {\n _loop_5(p);\n }\n }\n this.overlapSubElementClone = [];\n }\n };\n DashboardLayout.prototype.removeResizeClasses = function (panelElements) {\n for (var i = 0; i < panelElements.length; i++) {\n var element = panelElements[i];\n var resizerElements = element.querySelectorAll('.e-resize');\n for (var i_2 = 0; i_2 < resizerElements.length; i_2++) {\n detach(resizerElements[i_2]);\n }\n }\n };\n DashboardLayout.prototype.ensureDrag = function () {\n this.checkDragging(this.dragCollection);\n var dragPanels = this.element.querySelectorAll('.' + drag);\n removeClass(dragPanels, [drag]);\n this.setClasses(this.panelCollection);\n };\n DashboardLayout.prototype.setClasses = function (panelCollection) {\n for (var i = 0; i < panelCollection.length; i++) {\n var element = panelCollection[i];\n var containerEle = panelCollection[i].querySelector('.e-panel-container');\n if (this.allowDragging) {\n if (this.draggableHandle && element.querySelectorAll(this.draggableHandle)[0]) {\n addClass([element.querySelectorAll(this.draggableHandle)[0]], [drag]);\n }\n else {\n addClass([element], [drag]);\n }\n }\n if (this.allowResizing &&\n this.mediaQuery ? !(this.checkMediaQuery()) : false) {\n this.setResizingClass(element, containerEle);\n }\n }\n };\n DashboardLayout.prototype.setResizingClass = function (ele, container) {\n this.availableClasses = this.resizableHandles;\n if (!ele.querySelector(\".e-resize\")) {\n for (var j = 0; j < this.availableClasses.length; j++) {\n var spanEle = this.createElement('span');\n var addClassValue = void 0;\n container.appendChild(spanEle);\n if (this.availableClasses[j] === 'e-east' || this.availableClasses[j] === 'e-west' ||\n this.availableClasses[j] === 'e-north' || this.availableClasses[j] === 'e-south') {\n addClassValue = single;\n }\n else {\n addClassValue = double;\n }\n addClass([spanEle], [addClassValue, this.availableClasses[j], resize, resizeicon]);\n }\n }\n };\n DashboardLayout.prototype.setXYAttributes = function (element, panelModel) {\n var value = {\n value: {\n sizeX: panelModel.sizeX.toString(),\n sizeY: panelModel.sizeY.toString(),\n minSizeX: panelModel.minSizeX.toString(),\n minSizeY: panelModel.minSizeY.toString(),\n maxSizeX: !isNullOrUndefined(panelModel.maxSizeX) ? panelModel.maxSizeX.toString() : undefined,\n maxSizeY: !isNullOrUndefined(panelModel.maxSizeY) ? panelModel.maxSizeY.toString() : undefined,\n row: panelModel.row.toString(),\n col: panelModel.col.toString()\n }\n };\n this.setAttributes(value, element);\n };\n DashboardLayout.prototype.setXYDimensions = function (panelModel) {\n var cellHeight = this.getCellSize()[1];\n var cellWidth = this.getCellSize()[0];\n var widthValue;\n var heigthValue;\n if (panelModel && typeof (cellWidth) === 'number' && typeof (panelModel.sizeX) === 'number' && panelModel.sizeX > 1) {\n widthValue = (panelModel.sizeX * cellWidth) + (panelModel.sizeX - 1) * this.cellSpacing[0];\n }\n else {\n widthValue = cellWidth;\n }\n if (panelModel && typeof (cellHeight) === 'number' && panelModel.sizeY > 1 && typeof (panelModel.sizeY) === 'number') {\n heigthValue = (panelModel.sizeY * cellHeight) + (panelModel.sizeY - 1) * this.cellSpacing[1];\n }\n else {\n heigthValue = formatUnit(cellHeight);\n }\n return [heigthValue, widthValue];\n };\n DashboardLayout.prototype.getRowColumnDragValues = function (args) {\n var value = [];\n var elementTop = parseFloat(args.element.style.top);\n var elementLeft = parseFloat(args.element.style.left);\n var row = Math.round(elementTop / (this.getCellSize()[1] + this.cellSpacing[1]));\n var col = Math.round(elementLeft / (this.getCellSize()[0] + +this.cellSpacing[0]));\n value = [row, col];\n return value;\n };\n DashboardLayout.prototype.checkForChanges = function (isInteracted, added, removed) {\n var changedPanels = [];\n if (this.removeAllCalled) {\n changedPanels = [];\n }\n else {\n for (var i = 0; i < this.panels.length; i++) {\n if (((!isNullOrUndefined(added) ? (this.panels[i].id !== added[0].id) : true) &&\n (!isNullOrUndefined(removed) ? (this.panels[i].id !== removed[0].id) : true)) &&\n (this.panels[i].row !== this.panelsInitialModel[i].row || this.panels[i].col !== this.panelsInitialModel[i].col)) {\n changedPanels.push(this.panels[i]);\n }\n }\n }\n if (changedPanels.length > 0 || this.removeAllCalled) {\n var changedArgs = {\n changedPanels: changedPanels, isInteracted: isInteracted,\n addedPanels: !isNullOrUndefined(added) ? added : [], removedPanels: !isNullOrUndefined(removed) ? removed : []\n };\n this.trigger('change', changedArgs);\n }\n };\n DashboardLayout.prototype.enableDraggingContent = function (collections) {\n var _this = this;\n for (var i = 0; i < collections.length; i++) {\n var abortArray = ['.e-resize', '.' + dragRestrict];\n var cellElement = collections[i];\n {\n this.dragobj = new Draggable(cellElement, {\n preventDefault: false,\n clone: false,\n dragArea: this.element,\n isDragScroll: true,\n handle: this.draggableHandle ? this.draggableHandle : '.e-panel',\n abort: abortArray,\n dragStart: this.onDraggingStart.bind(this),\n dragStop: function (args) {\n var model = _this.getCellInstance(_this.mainElement.id);\n if (_this.allowPushing &&\n _this.collisions(model.row, model.col, model.sizeX, model.sizeY, _this.mainElement).length > 0) {\n _this.setHolderPosition(args);\n _this.setPanelPosition(_this.mainElement, model.row, model.col);\n _this.updatePanelLayout(_this.mainElement, model);\n }\n else {\n _this.setPanelPosition(_this.mainElement, model.row, model.col);\n }\n _this.mainElement = null;\n var item = _this.getPanelBase(args);\n if (_this.shadowEle) {\n detach(_this.shadowEle);\n }\n removeClass([_this.element], [preventSelect]);\n removeClass([args.element], [dragging]);\n _this.shadowEle = null;\n args.element.classList.remove('e-dragging');\n var row = _this.getRowColumnDragValues(args)[0];\n var col = _this.getRowColumnDragValues(args)[1];\n var panelModel = _this.getCellInstance(args.element.id);\n if (_this.allowPushing &&\n _this.collisions(row, col, panelModel.sizeX, panelModel.sizeY, document.getElementById(item.id)).length === 0) {\n _this.panelPropertyChange(_this.getCellInstance(args.element.id), { row: row, col: col });\n _this.oldRowCol[args.element.id].row = row;\n _this.oldRowCol[args.element.id].col = col;\n _this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n _this.sortedPanel();\n }\n else {\n _this.panelPropertyChange(_this.getCellInstance(args.element.id), {\n row: _this.oldRowCol[args.element.id].row,\n col: _this.oldRowCol[args.element.id].col\n });\n args.element.setAttribute('data-col', _this.getCellInstance(args.element.id).col.toString());\n args.element.setAttribute('data-row', _this.getCellInstance(args.element.id).row.toString());\n _this.sortedPanel();\n }\n var panelInstance = _this.getCellInstance(args.element.id);\n _this.setPanelPosition(args.element, panelInstance.row, panelInstance.col);\n _this.updatePanels();\n _this.updateCloneArrayObject();\n _this.checkForChanges(true);\n _this.dragStopEventArgs = { event: args.event, element: args.element };\n _this.trigger('dragStop', args);\n _this.resizeEvents();\n _this.rows = _this.maxRow(true);\n _this.setHeightWidth();\n _this.updateDragArea();\n },\n drag: function (args) {\n _this.draggedEventArgs = {\n event: args.event,\n element: args.element,\n target: closest((args.target), '.e-panel')\n };\n _this.trigger('drag', _this.draggedEventArgs);\n _this.onDragStart(args);\n }\n });\n if (this.dragCollection.indexOf(this.dragobj) === -1) {\n this.dragCollection.push(this.dragobj);\n }\n }\n }\n };\n DashboardLayout.prototype.updatePanels = function () {\n this.moveItemsUpwards();\n this.updateOldRowColumn();\n this.sortedPanel();\n };\n DashboardLayout.prototype.updateDragArea = function () {\n this.dragCollection.forEach(function (dragobj) {\n // eslint-disable-next-line\n dragobj.setDragArea();\n });\n };\n DashboardLayout.prototype.updateRowsHeight = function (row, sizeY, addRows) {\n if (row + sizeY >= this.rows) {\n this.rows = this.rows + addRows;\n this.setHeightWidth();\n }\n };\n DashboardLayout.prototype.onDraggingStart = function (args) {\n var dragArgs = args;\n this.trigger('dragStart', dragArgs, function (dragArgs) {\n });\n this.panelsInitialModel = this.cloneModels(this.panels);\n this.mainElement = args.element;\n this.cloneObject = JSON.parse(JSON.stringify(this.cloneObject));\n var eleRowValue = this.startRow = parseInt(args.element.getAttribute('data-row'), 10);\n this.startCol = parseInt(args.element.getAttribute('data-col'), 10);\n var eleSizeY = parseInt(args.element.getAttribute('data-sizeY'), 10);\n this.updateRowsHeight(eleRowValue, eleSizeY, eleSizeY);\n this.updateDragArea();\n this.shadowEle = document.createElement('div');\n this.shadowEle.classList.add('e-holder');\n this.shadowEle.classList.add('e-holder-transition');\n setStyle(this.shadowEle, { 'position': 'absolute' });\n addClass([this.element], [preventSelect]);\n addClass([args.element], [dragging]);\n this.element.appendChild(this.shadowEle);\n this.renderReactTemplates();\n this.shadowEle = document.querySelector('.e-holder');\n this.shadowEle.style.height = (this.getCellInstance(args.element.id).sizeY * this.cellSize[1]) + 'px';\n this.shadowEle.style.width = (this.getCellInstance(args.element.id).sizeX * this.cellSize[0]) + 'px';\n var panelInstance = this.getCellInstance(args.element.id);\n this.setPanelPosition(this.shadowEle, panelInstance.row, panelInstance.col);\n };\n // eslint-disable-next-line\n DashboardLayout.prototype.cloneModels = function (source, target) {\n if (target === undefined) {\n target = [];\n }\n for (var i = 0; i < source.length; i++) {\n // tslint:disable-next-line\n if (!target[i]) {\n target[i] = {};\n }\n // eslint-disable-next-line guard-for-in\n for (var k in source[i]) {\n target[i][k] = source[i][k];\n }\n }\n return target;\n };\n DashboardLayout.prototype.onDragStart = function (args) {\n var endCol;\n var endRow;\n var dragCol;\n var col = dragCol = this.getRowColumnDragValues(args)[1];\n var row = this.getRowColumnDragValues(args)[0];\n if (col < 0 || row < 0) {\n return;\n }\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n var panelModel = this.getCellInstance(args.element.id);\n this.updateRowsHeight(panelModel.row, panelModel.sizeY, 1);\n this.updateDragArea();\n if (this.allowPushing) {\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n endCol = this.oldRowCol[(args.element.id)].col;\n endRow = this.oldRowCol[(args.element.id)].row;\n this.oldRowCol[(args.element.id)] = { row: row, col: col };\n this.updateOldRowColumn();\n if (this.startCol !== endCol || this.startRow !== endRow) {\n this.setHolderPosition(args);\n if (this.startCol !== endCol) {\n this.startRow = endRow;\n }\n if (this.startRow !== endRow) {\n this.startCol = endCol;\n }\n if (this.allowPushing) {\n this.mainElement = args.element;\n var model = panelModel;\n this.checkCollision = this.collisions(model.row, model.col, model.sizeX, model.sizeY, args.element);\n if (panelModel.col >= this.checkColumnValue) {\n this.checkCollision = [];\n }\n this.updatePanelLayout(args.element, panelModel);\n this.moveItemsUpwards();\n }\n }\n }\n if (this.allowPushing !== false) {\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n }\n if (this.oldRowCol[args.element.id].row !== row || this.oldRowCol[args.element.id].col !== col) {\n this.panelPropertyChange(this.getCellInstance(args.element.id), { row: row, col: col });\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, args.element);\n }\n if (this.startCol !== dragCol) {\n this.startCol = endCol;\n this.moveItemsUpwards();\n }\n if (!this.allowPushing) {\n this.setHolderPosition(args);\n }\n this.removeResizeClasses(this.panelCollection);\n this.setClasses(this.panelCollection);\n if (this.allowPushing === false) {\n return;\n }\n };\n DashboardLayout.prototype.getPanelBase = function (args) {\n var item;\n for (var i = 0; i < this.panelCollection.length; i++) {\n if (this.panelCollection[i].id === ((args.element\n && args.element.id) || args)) {\n item = this.panelCollection[i];\n }\n }\n return item;\n };\n DashboardLayout.prototype.getPanel = function (row, column, excludeItems) {\n if (excludeItems && !(excludeItems instanceof Array)) {\n excludeItems = [excludeItems];\n }\n var sizeY = 1;\n while (row > -1) {\n var sizeX = 1;\n var col = column;\n while (col > -1) {\n var items = this.sortedArray[row];\n if (items) {\n var item = items[col];\n if (item && (!excludeItems ||\n excludeItems.indexOf(item) === -1) && parseInt(item.getAttribute('data-sizeX'), 10) >= sizeX\n && parseInt(item.getAttribute('data-sizeY'), 10) >= sizeY) {\n return item;\n }\n }\n ++sizeX;\n --col;\n }\n --row;\n ++sizeY;\n }\n return null;\n };\n DashboardLayout.prototype.setHolderPosition = function (args) {\n var sizeY = parseInt(args.element.getAttribute('data-sizeY'), 10);\n var col = parseInt(args.element.getAttribute('data-col'), 10);\n var row = parseInt(args.element.getAttribute('data-row'), 10);\n var sizeX = parseInt(args.element.getAttribute('data-sizeX'), 10);\n var widthValue = this.getCellSize()[0];\n var heightValue = this.getCellSize()[1];\n var top = row === 0 ? 0 : (((row) * (heightValue + this.cellSpacing[1])));\n var left = col === 0 ? 0 : (((col) * (widthValue + this.cellSpacing[0])));\n var cellSizeOne = this.getCellSize()[1];\n var cellSizeZero = this.getCellSize()[0];\n this.elementRef.top = this.shadowEle.style.top = top + 'px';\n this.elementRef.left = this.shadowEle.style.left = left + 'px';\n this.elementRef.height = this.shadowEle.style.height = ((sizeY * cellSizeOne) + ((sizeY - 1) * this.cellSpacing[1])) + 'px';\n this.elementRef.width = this.shadowEle.style.width = ((sizeX * cellSizeZero) + ((sizeX - 1) * this.cellSpacing[0])) + 'px';\n };\n DashboardLayout.prototype.getCellInstance = function (idValue) {\n var currentCellInstance;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i].id === idValue) {\n currentCellInstance = this.panels[i];\n }\n }\n return currentCellInstance;\n };\n /**\n * Allows to add a panel to the Dashboardlayout.\n *\n * @param {panel} panel - Defines the panel element.\n *\n * @returns void\n * @deprecated\n */\n DashboardLayout.prototype.addPanel = function (panel) {\n this.panelsSizeY = 0;\n this.maxCol();\n if (!panel.minSizeX) {\n panel.minSizeX = 1;\n }\n if (!panel.minSizeY) {\n panel.minSizeY = 1;\n }\n if (!panel.id) {\n panel.id = 'layout_' + this.panelID.toString();\n this.panelID = this.panelID + 1;\n }\n // eslint-disable-next-line\n var panelProp = new Panel(this, 'panels', panel, true);\n this.panels.push(panelProp);\n this.panelsInitialModel = this.cloneModels(this.panels);\n this.setMinMaxValues(panelProp);\n if (this.maxColumnValue < panelProp.col || this.maxColumnValue < (panelProp.col + panelProp.sizeX)) {\n this.panelPropertyChange(panelProp, { col: this.maxColumnValue - panelProp.sizeX });\n }\n var cell = this.renderCell(panelProp, true, null);\n this.oldRowCol[panelProp.id] = { row: panelProp.row, col: panelProp.col };\n this.cloneObject[panelProp.id] = { row: panelProp.row, col: panelProp.col };\n this.updateOldRowColumn();\n this.element.insertAdjacentElement('afterbegin', cell);\n this.addPanelCalled = true;\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n this.removeResizeClasses(this.panelCollection);\n }\n else {\n this.mainElement = cell;\n if (!this.checkCollision) {\n this.checkCollision = [];\n }\n this.setPanelPosition(cell, panelProp.row, panelProp.col);\n this.updatePanelLayout(cell, panelProp);\n }\n this.addPanelCalled = false;\n if (this.allowDragging &&\n this.mediaQuery ? !(this.checkMediaQuery()) : false) {\n this.enableDraggingContent([document.getElementById(panelProp.id)]);\n }\n this.setClasses([cell]);\n if (this.allowFloating) {\n this.mainElement = null;\n this.moveItemsUpwards();\n }\n this.updateOldRowColumn();\n this.sortedPanel();\n this.updateCloneArrayObject();\n if (this.allowResizing) {\n for (var i = 0; i < cell.querySelectorAll('.e-resize').length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n EventHandler.add(cell.querySelectorAll('.e-resize')[i], eventName, this.downResizeHandler, this);\n if (Browser.info.name !== 'msie') {\n EventHandler.add(cell.querySelectorAll('.e-resize')[i], 'touchstart', this.touchDownResizeHandler, this);\n }\n }\n }\n this.checkForChanges(false, [panelProp]);\n };\n /**\n * Allows to update a panel in the DashboardLayout.\n *\n * @param {panel} panel - Defines the panel element.\n *\n * @returns void\n * @deprecated\n */\n DashboardLayout.prototype.updatePanel = function (panel) {\n this.panelsSizeY = 0;\n if (!panel.id) {\n return;\n }\n var panelInstance = this.getCellInstance(panel.id);\n if (!panelInstance) {\n return;\n }\n this.maxCol();\n panel.col = (panel.col < 1) ? 0 : ((panel.col > this.columns)) ? this.columns - 1 : panel.col;\n if (isNullOrUndefined(panel.col)) {\n panel.col = panelInstance.col;\n }\n this.panelPropertyChange(panelInstance, panel);\n this.setMinMaxValues(panelInstance);\n var cell = document.getElementById(panel.id);\n this.mainElement = cell;\n var cssClass = panelInstance.cssClass ? panelInstance.cssClass.split(' ') : null;\n this.panelContent = cell.querySelector('.e-panel-container') ?\n cell.querySelector('.e-panel-container') :\n this.createSubElement(cssClass, cell.id + '_content', panelContainer);\n cell.appendChild(this.panelContent);\n if (panelInstance.header) {\n var headerTemplateElement = cell.querySelector('.e-panel-header') ?\n cell.querySelector('.e-panel-header') : this.createSubElement([], cell.id + 'template', '');\n addClass([headerTemplateElement], [header]);\n headerTemplateElement.innerHTML = '';\n var id = this.element.id + 'HeaderTemplate' + panelInstance.id;\n this.renderTemplate(panelInstance.header, headerTemplateElement, id, true, 'header');\n this.panelContent.appendChild(headerTemplateElement);\n this.renderReactTemplates();\n }\n else {\n if (cell.querySelector('.e-panel-header')) {\n detach(cell.querySelector('.e-panel-header'));\n }\n }\n if (panelInstance.content) {\n var cssClass_2 = panelInstance.cssClass ? panelInstance.cssClass.split(' ') : null;\n this.panelBody = cell.querySelector('.e-panel-content') ? cell.querySelector('.e-panel-content') :\n this.createSubElement(cssClass_2, cell.id + '_body', panelContent);\n this.panelBody.innerHTML = '';\n var headerHeight = this.panelContent.querySelector('.e-panel-header') ?\n window.getComputedStyle(this.panelContent.querySelector('.e-panel-header')).height : '0px';\n var contentHeightValue = 'calc( 100% - ' + headerHeight + ')';\n setStyle(this.panelBody, { height: contentHeightValue });\n var id = this.element.id + 'ContentTemplate' + panelInstance.id;\n this.renderTemplate(panelInstance.content, this.panelBody, id, true, 'content');\n this.panelContent.appendChild(this.panelBody);\n this.renderReactTemplates();\n }\n else {\n if (cell.querySelector('.e-panel-content')) {\n detach(cell.querySelector('.e-panel-content'));\n }\n }\n this.setXYAttributes(cell, panelInstance);\n this.setHeightAndWidth(cell, panelInstance);\n this.setPanelPosition(cell, panelInstance.row, panelInstance.col);\n this.updatePanelLayout(cell, panelInstance);\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n this.mainElement = null;\n this.updatePanels();\n this.updateCloneArrayObject();\n };\n DashboardLayout.prototype.updateCloneArrayObject = function () {\n this.cloneArray = this.sortedArray;\n this.cloneObject = JSON.parse(JSON.stringify(this.oldRowCol));\n };\n /**\n * Returns the panels object of the DashboardLayout.\n *\n * @returns [`PanelModel[]`](./panelModel)\n */\n DashboardLayout.prototype.serialize = function () {\n var cloneModel = this.cloneModels(this.panels);\n var customObject = [];\n for (var i = 0; i < cloneModel.length; i++) {\n customObject.push({\n id: cloneModel[i].id, row: cloneModel[i].row, col: cloneModel[i].col, sizeX: cloneModel[i].sizeX,\n sizeY: cloneModel[i].sizeY, minSizeX: cloneModel[i].minSizeX, minSizeY: cloneModel[i].minSizeY,\n maxSizeX: cloneModel[i].maxSizeX, maxSizeY: cloneModel[i].maxSizeY\n });\n }\n return (customObject);\n };\n /**\n * Removes all the panels from the DashboardLayout.\n */\n DashboardLayout.prototype.removeAll = function () {\n this.removeAllCalled = true;\n for (var i = 0; i < this.panelCollection.length; i++) {\n detach(this.panelCollection[i]);\n this.clearTemplate();\n }\n this.removeAllPanel();\n this.rows = 0;\n this.gridPanelCollection = [];\n this.setHeightWidth();\n this.sortedPanel();\n this.sortedArray = [];\n this.overlapElementClone = [];\n this.overlapElement = [];\n this.overlapSubElementClone = [];\n this.panelCollection = [];\n this.oldRowCol = {};\n this.cloneObject = {};\n var clonedPanels = this.cloneModels(this.panels);\n this.setProperties({ panels: [] }, true);\n this.updatePanels();\n this.updateCloneArrayObject();\n this.checkForChanges(false, null, clonedPanels);\n this.removeAllCalled = false;\n };\n /**\n * Removes the panel from the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @returns void\n */\n DashboardLayout.prototype.removePanel = function (id) {\n var _this = this;\n this.panelsSizeY = 0;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var removedPanel;\n for (var i = 0; i < this.panelCollection.length; i++) {\n if (this.panelCollection[i].id === id) {\n detach(this.panelCollection[i]);\n this.panelCollection.splice(i, 1);\n }\n if (this.panels[i].id === id) {\n removedPanel = this.panels[i];\n this.panels.splice(i, 1);\n this.panelsInitialModel.splice(i, 1);\n this.updateOldRowColumn();\n this.sortedPanel();\n }\n }\n this.updatePanels();\n if (this.checkMediaQuery()) {\n this.isPanelRemoved = true;\n this.checkMediaQuerySizing();\n this.isPanelRemoved = false;\n }\n this.gridPanelCollection.forEach(function (item) {\n if (item.id === id) {\n _this.gridPanelCollection.splice(_this.gridPanelCollection.indexOf(item), 1);\n }\n });\n this.updateCloneArrayObject();\n this.checkForChanges(false, null, [removedPanel]);\n };\n /**\n *Moves the panel in the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @param {number} row - Defines the row of dashboard layout.\n *\n * @param {number} col - Defines the column of dashboard layout.\n *\n * @returns void\n */\n DashboardLayout.prototype.movePanel = function (id, row, col) {\n this.movePanelCalled = true;\n this.panelsInitialModel = this.cloneModels(this.panels);\n var panelInstance = this.getCellInstance(id);\n if ((isNaN(row) || row === null) || (isNaN(col) || col === null) || !panelInstance) {\n return;\n }\n if (col < 0) {\n col = 0;\n }\n else if (col > this.columns) {\n col = this.columns - panelInstance.sizeX;\n }\n this.panelPropertyChange(panelInstance, { row: row, col: col });\n var ele = document.getElementById(id);\n this.mainElement = ele;\n this.startRow = parseInt(ele.getAttribute('data-row'), 10);\n this.startCol = parseInt(ele.getAttribute('data-col'), 10);\n this.setAttributes({ value: { col: col.toString(), row: row.toString() } }, ele);\n this.updateOldRowColumn();\n this.setPanelPosition(ele, row, col);\n this.updatePanelLayout(ele, panelInstance);\n this.updateRowHeight();\n this.updatePanels();\n this.updateCloneArrayObject();\n this.mainElement = null;\n if (this.allowFloating) {\n this.moveItemsUpwards();\n }\n this.movePanelCalled = false;\n this.checkForChanges(false);\n };\n DashboardLayout.prototype.setAttributes = function (value, ele) {\n for (var i = 0; i < Object.keys(value).length; i++) {\n if (Object.keys(value)) {\n if (value[Object.keys(value)[i]].col) {\n ele.setAttribute('data-col', value[Object.keys(value)[i]].col.toString());\n }\n if (value[Object.keys(value)[i]].row) {\n ele.setAttribute('data-row', value[Object.keys(value)[i]].row.toString());\n }\n if (value[Object.keys(value)[i]].sizeX) {\n ele.setAttribute('data-sizeX', value[Object.keys(value)[i]].sizeX.toString());\n }\n if (value[Object.keys(value)[i]].sizeY) {\n ele.setAttribute('data-sizeY', value[Object.keys(value)[i]].sizeY.toString());\n }\n if (value[Object.keys(value)[i]].minSizeX) {\n ele.setAttribute('data-minSizeX', value[Object.keys(value)[i]].minSizeX.toString());\n }\n if (value[Object.keys(value)[i]].minSizeY) {\n ele.setAttribute('data-minSizeY', value[Object.keys(value)[i]].minSizeY.toString());\n }\n if (value[Object.keys(value)[i]].maxSizeX) {\n ele.setAttribute('data-maxSizeY', value[Object.keys(value)[i]].maxSizeX.toString());\n }\n if (value[Object.keys(value)[i]].maxSizeY) {\n ele.setAttribute('data-maxSizeY', value[Object.keys(value)[i]].maxSizeY.toString());\n }\n }\n }\n };\n /**\n * Resize the panel in the DashboardLayout.\n *\n * @param {string} id - Defines the panel ID.\n *\n * @param {number} sizeX - Defines the sizeX of dashboard layout.\n *\n * @param {number} sizeY - Defines the sizeY of dashboard layout.\n */\n DashboardLayout.prototype.resizePanel = function (id, sizeX, sizeY) {\n this.panelsInitialModel = this.cloneModels(this.panels);\n var panelInstance = this.getCellInstance(id);\n this.resizeCalled = true;\n var ele = document.getElementById(id);\n var args = { event: null, element: ele, isInteracted: false };\n this.trigger('resizeStart', args);\n this.panelPropertyChange(panelInstance, { sizeX: sizeX, sizeY: sizeY });\n this.setMinMaxValues(panelInstance);\n this.checkMinMaxValues(panelInstance);\n this.mainElement = ele;\n this.setAttributes({ value: { sizeX: panelInstance.sizeX.toString(), sizeY: panelInstance.sizeY.toString() } }, ele);\n this.setHeightAndWidth(ele, panelInstance);\n this.updatePanelLayout(ele, panelInstance);\n this.updatePanels();\n this.updateRowHeight();\n this.resizeCalled = false;\n this.trigger('resizeStop', args);\n this.checkForChanges(false);\n };\n /**\n * Destroys the DashboardLayout component\n *\n * @returns void\n */\n DashboardLayout.prototype.destroy = function () {\n // eslint-disable-next-line\n EventHandler.remove(window, 'resize', this.refreshListener);\n removeClass([this.element], ['e-dashboardlayout', 'e-lib', 'e-responsive', 'e-control']);\n this.element.removeAttribute('style');\n for (var i = 0; i < this.dragCollection.length; i++) {\n this.dragCollection[i].destroy();\n }\n this.removeAllPanel();\n _super.prototype.destroy.call(this);\n this.clearTemplate();\n this.renderReactTemplates();\n };\n DashboardLayout.prototype.removeAllPanel = function () {\n while (this.element.firstElementChild) {\n detach(this.element.firstElementChild);\n this.clearTemplate();\n }\n };\n DashboardLayout.prototype.setEnableRtl = function () {\n if (this.enableRtl === true) {\n addClass([this.element], 'e-rtl');\n }\n else {\n removeClass([this.element], 'e-rtl');\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n *\n * @private\n */\n DashboardLayout.prototype.updateCellSizeAndSpacing = function () {\n this.panelResponsiveUpdate();\n this.setHeightWidth();\n this.getRowColumn();\n for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[i];\n var panelModel = this.getCellInstance(ele.id);\n this.setHeightAndWidth(ele, panelModel);\n this.setPanelPosition(ele, panelModel.row, panelModel.col);\n }\n };\n DashboardLayout.prototype.updatePanelsDynamically = function (panels) {\n this.removeAll();\n this.setProperties({ panels: panels }, true);\n this.setOldRowCol();\n if (this.table) {\n this.table.remove();\n }\n this.initialize();\n if (this.checkMediaQuery()) {\n this.refresh();\n }\n if (this.showGridLines) {\n this.initGridLines();\n }\n };\n DashboardLayout.prototype.checkForIDValues = function (panels) {\n var _this = this;\n if (!isNullOrUndefined(panels) && panels.length > 0) {\n this.panelID = 0;\n panels.forEach(function (panel) {\n if (!panel.id) {\n _this.panelPropertyChange(panel, { id: 'layout_' + _this.panelID.toString() });\n _this.panelID = _this.panelID + 1;\n }\n });\n }\n else {\n this.restrictDynamicUpdate = true;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * returns void\n *\n * @private\n */\n // eslint-disable-next-line\n DashboardLayout.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (newProp.panels && newProp.panels.length > 0 && newProp.panels[0] instanceof Panel) {\n this.checkForIDValues(newProp.panels);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'mediaQuery':\n this.setProperties({ mediaQuery: newProp.mediaQuery }, true);\n if (this.checkMediaQuery()) {\n this.checkMediaQuerySizing();\n }\n break;\n case 'allowDragging':\n this.setProperties({ allowDragging: newProp.allowDragging }, true);\n this.ensureDrag();\n break;\n case 'allowResizing':\n this.setProperties({ allowResizing: newProp.allowResizing }, true);\n if (this.allowResizing) {\n this.setClasses(this.panelCollection);\n this.resizeEvents();\n }\n else {\n var panelElements = this.element.querySelectorAll('.e-panel .e-panel-container .e-resize');\n for (var i = 0; i < panelElements.length; i++) {\n var eventName = (Browser.info.name === 'msie') ? 'mousedown pointerdown' : 'mousedown';\n var element = panelElements[i];\n EventHandler.remove(element, eventName, this.downResizeHandler);\n if (Browser.info.name !== 'msie') {\n EventHandler.remove(element, 'touchstart', this.touchDownResizeHandler);\n }\n }\n this.removeResizeClasses(this.panelCollection);\n }\n break;\n case 'cellSpacing':\n this.setProperties({ cellSpacing: newProp.cellSpacing }, true);\n this.updateCellSizeAndSpacing();\n this.updateGridLines();\n break;\n case 'draggableHandle':\n this.setProperties({ draggableHandle: newProp.draggableHandle }, true);\n this.ensureDrag();\n break;\n case 'allowFloating':\n this.setProperties({ allowFloating: newProp.allowFloating }, true);\n this.moveItemsUpwards();\n break;\n case 'showGridLines':\n if (this.showGridLines) {\n this.setProperties({ showGridLines: newProp.showGridLines }, true);\n this.initGridLines();\n }\n else {\n if (this.table) {\n detach(this.table);\n }\n }\n break;\n case 'allowPushing':\n this.setProperties({ allowPushing: newProp.allowPushing }, true);\n break;\n case 'panels':\n if (!newProp.columns && !this.restrictDynamicUpdate && (newProp.panels[0] && newProp.panels.length > 0)) {\n this.isRenderComplete = false;\n this.updatePanelsDynamically(newProp.panels);\n this.isRenderComplete = true;\n }\n else if (!(newProp.panels[0] && newProp.panels.length)) {\n this.isRenderComplete = false;\n this.updatePanelsDynamically(this.panels);\n this.isRenderComplete = true;\n }\n else {\n this.restrictDynamicUpdate = false;\n }\n break;\n case 'columns':\n this.isRenderComplete = false;\n if (newProp.panels) {\n this.updatePanelsDynamically(newProp.panels);\n }\n this.setProperties({ columns: newProp.columns }, true);\n this.panelCollection = [];\n this.maxColumnValue = this.columns;\n this.calculateCellSize();\n this.panels.forEach(function (panel) {\n _this.setMinMaxValues(panel);\n if (_this.maxColumnValue < panel.col || _this.maxColumnValue < (panel.col + panel.sizeX)) {\n var colValue = _this.maxColumnValue - panel.sizeX;\n _this.panelPropertyChange(panel, { col: colValue < 0 ? 0 : colValue });\n _this.setXYAttributes(document.getElementById(panel.id), panel);\n }\n _this.setHeightAndWidth(document.getElementById(panel.id), panel);\n _this.panelCollection.push(document.getElementById(panel.id));\n _this.setPanelPosition(document.getElementById(panel.id), panel.row, panel.col);\n _this.mainElement = document.getElementById(panel.id);\n _this.updatePanelLayout(document.getElementById(panel.id), panel);\n _this.mainElement = null;\n });\n this.updatePanels();\n this.updateCloneArrayObject();\n this.isRenderComplete = true;\n this.updateGridLines();\n break;\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns string\n * @private\n */\n DashboardLayout.prototype.getPersistData = function () {\n var keyEntity = ['panels'];\n return this.addOnPersist(keyEntity);\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.mergePersistPanelData = function (persistedData) {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === '')) || !isNullOrUndefined(persistedData)) {\n var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof getValue(key, this) === 'object' && !isNullOrUndefined(getValue(key, this)))) {\n if (Array.isArray(getValue(key, this)) && key === 'panels') {\n this.mergePanels(dataObj[key], this[key]);\n }\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n /* istanbul ignore next */\n DashboardLayout.prototype.mergePanels = function (sortedPanels, panels) {\n var storedColumns = sortedPanels;\n var _loop_6 = function (i) {\n this_4.checkForIDValues(panels);\n var localPanel = panels.filter(function (pan) { return pan.id === storedColumns[i].id; })[0];\n if (!isNullOrUndefined(localPanel)) {\n storedColumns[i] = extend(localPanel, storedColumns[i], {}, true);\n }\n };\n var this_4 = this;\n for (var i = 0; i < storedColumns.length; i++) {\n _loop_6(i);\n }\n };\n /**\n * Returns the current module name.\n *\n * @returns string\n *\n * @private\n */\n DashboardLayout.prototype.getModuleName = function () {\n return 'DashboardLayout';\n };\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowDragging\", void 0);\n __decorate([\n Property(false)\n ], DashboardLayout.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowPushing\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], DashboardLayout.prototype, \"allowFloating\", void 0);\n __decorate([\n Property(1)\n ], DashboardLayout.prototype, \"cellAspectRatio\", void 0);\n __decorate([\n Property([5, 5])\n ], DashboardLayout.prototype, \"cellSpacing\", void 0);\n __decorate([\n Property(1)\n ], DashboardLayout.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], DashboardLayout.prototype, \"showGridLines\", void 0);\n __decorate([\n Property(null)\n ], DashboardLayout.prototype, \"draggableHandle\", void 0);\n __decorate([\n Property('en-US')\n ], DashboardLayout.prototype, \"locale\", void 0);\n __decorate([\n Property('max-width: 600px')\n ], DashboardLayout.prototype, \"mediaQuery\", void 0);\n __decorate([\n Collection([], Panel)\n ], DashboardLayout.prototype, \"panels\", void 0);\n __decorate([\n Property(['e-south-east'])\n ], DashboardLayout.prototype, \"resizableHandles\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DashboardLayout.prototype, \"destroyed\", void 0);\n DashboardLayout = __decorate([\n NotifyPropertyChanges\n ], DashboardLayout);\n return DashboardLayout;\n}(Component));\nexport { DashboardLayout };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ROOT","PANE","SPLIT_H_PANE","SPLIT_V_PANE","SPLIT_BAR","STATIC_PANE","RESIZE_BAR","ARROW_LEFT","ARROW_UP","ARROW_DOWN","HIDE_ICON","PaneProperties","_super","apply","Property","ChildProperty","Splitter","options","element","call","onPropertyChanged","newProp","oldProp","classList","contains","_i","_a","keys","setSplitterSize","height","width","setCssClass","cssClass","isEnabled","enabled","setReversePane","setSeparatorSize","separatorSize","changeOrientation","orientation","paneSettings","destroyPaneSettings","allBars","allPanes","createSplitPane","addSeparator","getPanesDimensions","setRTL","enableRtl","isCollapsed","paneCounts","index","parseInt","changedPropsCount","j","property","newValue","isNullOrUndefined","innerHTML","setTemplate","newVal","resizableModel","collapsibleModelUpdate","collapsed","collapsedOnchange","newValSize","updatePaneSize","style","flexBasis","staticPaneWidth","flexPaneIndexes","flexCount","size","innerText","offsetWidth","offsetHeight","avgDiffWidth","border","add","initializeValues","paneOrder","separatorOrder","previousCoordinates","currentCoordinates","updatePrePaneInPercentage","updateNextPaneInPercentage","panesDimensions","validDataAttributes","validElementAttributes","iconsDelay","templateElement","collapseFlag","expandFlag","preRender","onReportWindowSize","reportWindowSize","bind","onMouseMoveHandler","onMouseMove","onMouseUpHandler","onMouseUp","onTouchMoveHandler","onTouchEndHandler","wrapper","cloneNode","wrapperParent","parentElement","removeClass","addClass","css","Browser","info","name","isDevice","getPersistData","addOnPersist","getModuleName","render","checkDataAttributes","setDimension","getHeight","getWidth","setPaneSettings","enableReversePanes","EventHandler","document","onDocumentClick","renderComplete","ownerDocument","defaultView","addEventListener","onMove","e","currentSeparator","remove","checkPaneSize","prePaneSize","previousPane","nextPaneSize","nextPane","splitBarSize","indexOf","previousFlexBasis","updatePaneFlexBasis","nextFlexBasis","totalPercent","totalWidth","convertPercentageToPixel","type","keyCode","getMinInPixel","nextPaneIndex","min","prevPaneIndex","addStaticPaneClass","event","getSeparatorIndex","isPrevpaneCollapsed","isPrevpaneExpanded","isNextpaneCollapsed","activeElement","resizable","preventDefault","triggerResizing","collapsible","expand","collapse","minValue","paneMinRange","convertPixelToNumber","toString","sanitizeHelper","value","enableHtmlSanitizer","item","SanitizeHtmlHelper","beforeSanitize","beforeEvent","cancel","helper","extend","trigger","serializeValue","api","dataIndex","getAttribute","removeDataPrefix","paneIndex","children","dataAttr","max","content","paneAPI","slice","forEach","el","detach","restoreElem","childCount","paneCollection","paneValue","setProperties","checkArrow","targetArrow","querySelector","attribute","lastIndexOf","rtl","reverse","setAttribute","removeAttribute","formatUnit","setStyleAttribute","push","getBoundingClientRect","className","split","hideResizer","select","showResizer","onMouseDown","isResizable","updateResizablePanes","arrow2","arrow1","paneCollapsible","updateCollapseIcons","collapseArrow","barIndex","arrow","selectAll","updateIsCollapsed","lastBarArrow","lastBarIndex","click","_this","m","targetArrows","targetEle","event_1","eventArgs","beforeAction","beforeCollapseArgs","collapsedindex","sort","collapseEventArgs","afterAction","splitterProperty","sizeValue","separator","splitBar","resizeBar","isVertical","checkSplitPane","currentBar","elementIndex","collectPanes","childNodes","elements","getPrevPane","order","getOrderPane","getNextPane","pane","getOrderIndex","panes","updateSeparatorSize","resizeHanlder","addResizeHandler","createElement","appendChild","updateIconClass","leftArrow","rightArrow","createSeparator","proxy","addMouseActions","getPaneDetails","clonedEle","parentNode","toLowerCase","wireClickEvents","eventName","allBar","querySelectorAll","sepSize","paddingLeft","paddingRight","getPreviousPaneIndex","getNextPaneIndex","sTout","hoverTimeOut","setTimeout","clearTimeout","getEventType","updateCurrentSeparator","isSeparator","isMouseEvent","isMouse","pointerType","updateCursorPosition","changeCoordinates","x","pageX","y","pageY","eventType","touches","coordinates","paneCount","body","removeEventListener","updateSplitterSize","iswindowResize","len","getComputedStyle","marginLeft","marginTop","marginBottom","diff","updatePane","flexPane","sizeDiff","isPercent","updatePaneOffset","convertPixelToPercentage","flexPaneOffset","wireResizeEvents","touchMoveEvent","touchEndEvent","unwireResizeEvents","clickHandler","hoverBars","icon","collapseAction","expandAction","splitterDetails","beforeExpandArgs","expandPane","expandEventArgs","removeStaticPanes","collapseCount","flexStatus","nextElementSibling","collapseClass","updatePaneSettings","updateIconsOnExpand","updateFlexGrow","checkStaticPanes","flexGrow","staticPane","status","visiblePane","hideTargetBarIcon","targetBar","showTargetBarIcon","updateIconsOnCollapse","showCurrentBarIcon","currentBarIndex","prevBar","previousElementSibling","splitInstance","prevPaneCollapsed","nextPaneExpanded","nextPaneNextEle","getPrevBar","nextBar","collapsePane","paneValues","nextPaneCollapsible","prevPaneCollapsible","prevPaneExpanded","nextPaneCollapsed","prevPanePreEle","currentIndex","array","getNextBar","updateBars","paneSize","prePaneDimenson","nextPaneDimension","pointerEvents","resizeStartArgs","previous","removePercentageUnit","offset","parseFloat","targetElement","convertedValue","percentage","offsetValue","Math","ceil","calcDragPosition","rectValue","getSeparatorPosition","rectBound","left","window","scrollX","top","scrollY","offSet","getMinMax","selection","defaultVal","separatorIndex","prevPane","getPaneHeight","isValidSize","isValid","getPaneDimensions","previousPaneHeightWidth","nextPaneHeightWidth","checkCoordinates","coordinatesChanged","isCursorMoved","getBorder","clientWidth","clientHeight","separatorNewPosition","validateDraggedPosition","prevPaneCurrentWidth","nextPaneCurrentWidth","validateMinMaxValues","difference","calculateCurrentDimensions","validateMinRange","paneCurrentWidth","paneMinDimensions","validatedVal","validateMaxRange","paneMaxDimensions","paneMaxRange","equatePaneWidths","round","Number","draggedPos","prevPaneHeightWidth","separatorTopLeft","offsetLeft","offsetTop","prePaneRange","nextPaneRange","pane1MinSize","pane2MinSize","pane1MaxSize","pane2MaxSize","validatedSize","enablePersistence","panesDimension","child","sizeFlag","flex-basis","template","toElement","templateCompile","isReact","renderReactTemplates","ele","cnt","tempEle","compileElement","childEle","val","prop","eleVal","display","removeProperty","trim","templateFn","outerHTML","compile","templateFUN","id","childElement","nodeName","destroy","isDestroyed","attributes","refreshing","clearTemplate","addPaneClass","removePaneOrders","paneClass","setPaneOrder","removeSeparator","updatePanes","addPane","paneProperties","newPane","paneDetails","splice","insertBefore","removePane","elementClass","Collection","Event","NotifyPropertyChanges","Component","drag","Panel","DashboardLayout","rows","panelID","movePanelCalled","resizeCalled","mOffX","mOffY","maxTop","maxRows","mouseX","mouseY","minTop","minLeft","isInlineRendering","removeAllCalled","isPanelRemoved","panelsSizeY","resizeHeight","setValue","mergePersistPanelData","panelCollection","sortedArray","gridPanelCollection","overlapElement","overlapElementClone","overlapSubElementClone","collisionChecker","dragCollection","elementRef","dimensions","allItems","oldRowCol","availableClasses","setOldRowCol","calculateCellSize","contentTemplateChild","panels","panelPropertyChange","row","col","createPanelElement","idValue","initialize","isRenderComplete","showGridLines","checkMediaQuery","initGridLines","updateDragArea","table","tbody","maxRow","tr","columns","td","setAttributes","sizeX","sizeY","setPanelPosition","setHeightAndWidth","updateRowHeight","childElementCount","panelElements","panelElement","getInlinePanels","maxCol","setMinMaxValues","maxColumnValue","colValue","setXYAttributes","panel_1","renderPanels","tempObject","mediaQuery","matchMedia","matches","mainElement","updatePanelLayout","setClasses","updateOldRowColumn","checkMediaQuerySizing","renderDashBoardCells","allowDragging","enableDraggingContent","sortedPanel","bindEvents","updatePanels","updateCloneArrayObject","checkColumnValue","panelResponsiveUpdate","setEnableRtl","cellSize","cellAspectRatio","cellSpacing","recheck","getElementById","createSubElement","templateParser","error","sanitizedValue","sanitize","renderTemplate","appendElement","isStringTemplate","templateElements","tagName","compilerFn","compilerFn_1","append","cellElement","panelModel","panelId","panelContent","disablePanel","header","headerTemplateElement","cssClass_1","panelBody","contentHeightValue","setStyle","model","hasAttribute","minSizeX","minSizeY","maxSizeX","maxSizeY","zIndex","isUndefined","panelProp","resizeEvents","allowResizing","downResizeHandler","touchDownResizeHandler","refreshListener","refresh","downHandler","lastMouseX","lastMouseY","moveEventName","upEventName","isMouseMoveBound","moveResizeHandler","isMouseUpBound","upResizeHandler","panelsInitialModel","cloneModels","closest","args","isInteracted","downTarget","currentTarget","shadowEle","elementX","elementY","elementWidth","elementHeight","originalWidth","getCellInstance","originalHeight","previousRow","changedTouches","touchMoveResizeHandler","getCellSize","updateMaxTopLeft","moveTarget","updateResizeElement","maxLeft","handleArray","handleClass","diffY","diffX","resizingPanel","currentX","currentY","oldSizeX","oldSizeY","dY","dX","getMinHeight","getMaxHeight","getMinWidth","getMaxWidth","getResizeRowColumn","upTarget","undefined","allowFloating","moveItemsUpwards","checkForChanges","isChanged","pixelsToColumns","pixelsToRows","collisions","getPanelBase","allowPushing","pixels","isCeil","curColWidth","floor","l","sortItem","rowIndex","colIndex","moveItemUpwards","updateGridLines","availableRow","availableColumn","rowValue","columnValue","column","oldRow","updateLayout","internalPanels","cellInstance","removeResizeClasses","checkDragging","sortPanels","this_1","filter","panel","updatedPanel","updatedRows","updatedHeight","getRowColumn","setHeightWidth","heightValue","widthValue","entirePanelsY","setXYDimensions","renderCell","dashBoardCell","xValue","checkMinMaxValues","cells","cell","ignore","items","h","w","getPanel","rightWardsSpaceChecking","rowElements","spacedColumns","sizeXValue","occupiedValues","getOccupiedColumns","checkingElement","next","occupiedItems","leftWardsSpaceChecking","prev","adjustmentAvailable","leftAdjustable","rightAdjustable","rightSpacing","isAdjustable","rowElement","topAdjustable","eleSizeX","eleCol","getRowElements","leftSpacing","isLeftAdjustable","spacedColumnValue","isRightAdjustable","endRow","topCheck","startRow","spacedRowValue","isXSpacingAvailable","spacing","isSpaceAvailable","subSpacingColumns","base","spaces","isLeftAdjudtable","xAdjust","replacable","isRightAdjudtable","collisionValue","collision","updatedCollision","exclusions","sortCollisionItems","collisionItems","this_2","updatedModels","removeableElement","adjust","resetLayout","addPanelCalled","cloneObject","cloneArray","checkCollision","swapAvailability","available","eleModel","count","collideModel","excludeEle","checkForSwapping","direction","eleSwapRow","isSwappable","count1","updatedRow","collideInstance","elementinstance","swapItems","swappedElements","collisionItemsRow","collisionInstance","itemModel","initialModel","collisionModels","proxy_1","item1","updateRowColumn","checkForCompletePushing","isSubValue","srcEle","updateCollisionChecked","eleSizeY","eleRow","shouldRestrict","i_1","collisionY","collisionCol","collisionX","overlapElementModel","ele_1","k","eleRow_1","excludeElements","collisionPanel","clone","proxy_2","overlapElementRow1","this_3","rowVal","colValue_1","collisionModels1","resizerElements","i_2","ensureDrag","dragPanels","containerEle","draggableHandle","setResizingClass","container","resizableHandles","spanEle","addClassValue","heigthValue","cellHeight","cellWidth","getRowColumnDragValues","elementTop","elementLeft","added","removed","changedPanels","changedArgs","addedPanels","removedPanels","collections","abortArray","dragobj","Draggable","dragArea","isDragScroll","handle","abort","dragStart","onDraggingStart","dragStop","setHolderPosition","panelInstance","dragStopEventArgs","draggedEventArgs","onDragStart","setDragArea","updateRowsHeight","addRows","dragArgs","JSON","parse","stringify","eleRowValue","startCol","position","source","endCol","dragCol","excludeItems","cellSizeOne","cellSizeZero","currentCellInstance","addPanel","insertAdjacentElement","updatePanel","cssClass_2","serialize","cloneModel","customObject","removeAll","removeAllPanel","clonedPanels","removePanel","removedPanel","movePanel","isNaN","resizePanel","firstElementChild","updateCellSizeAndSpacing","updatePanelsDynamically","checkForIDValues","restrictDynamicUpdate","keyEntity","persistedData","data","localStorage","getItem","dataObj","isProtectedOnChange","keys_1","getValue","isArray","mergePanels","sortedPanels","storedColumns","this_4","localPanel","pan"],"mappings":"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"}
|