@syncfusion/ej2-layouts 19.3.44 → 19.4.43

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.
Files changed (77) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +41 -0
  2. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +27 -0
  3. package/CHANGELOG.md +4 -4
  4. package/README.md +1 -1
  5. package/dist/ej2-layouts.umd.min.js +2 -2
  6. package/dist/ej2-layouts.umd.min.js.map +1 -1
  7. package/dist/es6/ej2-layouts.es2015.js +32 -30
  8. package/dist/es6/ej2-layouts.es2015.js.map +1 -1
  9. package/dist/es6/ej2-layouts.es5.js +33 -32
  10. package/dist/es6/ej2-layouts.es5.js.map +1 -1
  11. package/dist/global/ej2-layouts.min.js +2 -2
  12. package/dist/global/ej2-layouts.min.js.map +1 -1
  13. package/dist/global/index.d.ts +1 -1
  14. package/package.json +6 -6
  15. package/src/dashboard-layout/dashboard-layout.js +0 -5
  16. package/src/splitter/splitter.d.ts +5 -0
  17. package/src/splitter/splitter.js +33 -27
  18. package/styles/avatar/_fluent-definition.scss +25 -0
  19. package/styles/avatar/_layout.scss +5 -5
  20. package/styles/bootstrap-dark.css +8 -2
  21. package/styles/bootstrap.css +8 -2
  22. package/styles/bootstrap4.css +8 -2
  23. package/styles/bootstrap5-dark.css +8 -2
  24. package/styles/bootstrap5.css +8 -2
  25. package/styles/card/_bootstrap-dark-definition.scss +1 -0
  26. package/styles/card/_bootstrap-definition.scss +1 -0
  27. package/styles/card/_bootstrap5-definition.scss +1 -0
  28. package/styles/card/_fabric-dark-definition.scss +1 -0
  29. package/styles/card/_fabric-definition.scss +1 -0
  30. package/styles/card/_fluent-definition.scss +124 -0
  31. package/styles/card/_highcontrast-definition.scss +1 -0
  32. package/styles/card/_highcontrast-light-definition.scss +1 -0
  33. package/styles/card/_material-dark-definition.scss +1 -0
  34. package/styles/card/_material-definition.scss +1 -0
  35. package/styles/card/_tailwind-definition.scss +1 -0
  36. package/styles/card/_theme.scss +11 -0
  37. package/styles/dashboard-layout/_fluent-definition.scss +112 -0
  38. package/styles/dashboard-layout/_layout.scss +1 -1
  39. package/styles/dashboard-layout/_theme.scss +1 -1
  40. package/styles/dashboard-layout/icons/_bootstrap5.scss +1 -1
  41. package/styles/dashboard-layout/icons/_fluent.scss +81 -0
  42. package/styles/fabric-dark.css +8 -2
  43. package/styles/fabric.css +8 -2
  44. package/styles/highcontrast-light.css +8 -2
  45. package/styles/highcontrast.css +8 -2
  46. package/styles/material-dark.css +8 -2
  47. package/styles/material.css +8 -2
  48. package/styles/splitter/_bootstrap-dark-definition.scss +4 -1
  49. package/styles/splitter/_bootstrap-definition.scss +4 -1
  50. package/styles/splitter/_bootstrap4-definition.scss +4 -1
  51. package/styles/splitter/_bootstrap5-definition.scss +4 -1
  52. package/styles/splitter/_fabric-dark-definition.scss +4 -1
  53. package/styles/splitter/_fabric-definition.scss +4 -1
  54. package/styles/splitter/_fluent-definition.scss +28 -0
  55. package/styles/splitter/_highcontrast-definition.scss +4 -1
  56. package/styles/splitter/_highcontrast-light-definition.scss +4 -1
  57. package/styles/splitter/_layout.scss +2 -1
  58. package/styles/splitter/_material-dark-definition.scss +4 -1
  59. package/styles/splitter/_material-definition.scss +4 -1
  60. package/styles/splitter/_tailwind-definition.scss +4 -1
  61. package/styles/splitter/_theme.scss +6 -1
  62. package/styles/splitter/bootstrap-dark.css +8 -2
  63. package/styles/splitter/bootstrap.css +8 -2
  64. package/styles/splitter/bootstrap4.css +8 -2
  65. package/styles/splitter/bootstrap5-dark.css +8 -2
  66. package/styles/splitter/bootstrap5.css +8 -2
  67. package/styles/splitter/fabric-dark.css +8 -2
  68. package/styles/splitter/fabric.css +8 -2
  69. package/styles/splitter/highcontrast-light.css +8 -2
  70. package/styles/splitter/highcontrast.css +8 -2
  71. package/styles/splitter/icons/_fluent.scss +39 -0
  72. package/styles/splitter/material-dark.css +8 -2
  73. package/styles/splitter/material.css +8 -2
  74. package/styles/splitter/tailwind-dark.css +8 -2
  75. package/styles/splitter/tailwind.css +8 -2
  76. package/styles/tailwind-dark.css +8 -2
  77. package/styles/tailwind.css +8 -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 var _this = _super.call(this, options, element) || this;\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 return _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.preRender = function () {\n this.onReportWindowSize = this.reportWindowSize.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; i < children.length; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n for (var j = 0; j < this.allBars.length; 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; i < this.allPanes.length; i++) {\n if (!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; j < flexPaneIndexes.length; 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.allPanes[i].offsetWidth < 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.allPanes[i].offsetWidth;\n var isPercent = updatePane.style.flexBasis.indexOf('%') > -1;\n updatePane.style.flexBasis = isPercent ? this.convertPixelToPercentage(updatePane.offsetWidth + sizeDiff) + '%'\n : (updatePane.offsetWidth + sizeDiff) + 'px';\n flexPane.style.flexBasis = flexPane.style.flexBasis.indexOf('%') > -1 ?\n this.convertPixelToPercentage(flexPane.offsetWidth - sizeDiff) + '%' : (flexPane.offsetWidth - sizeDiff) + 'px';\n }\n }\n }\n }\n };\n Splitter.prototype.wireResizeEvents = function () {\n EventHandler.add(document, 'mousemove', this.onMouseMove, this);\n EventHandler.add(document, 'mouseup', this.onMouseUp, this);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n EventHandler.add(document, touchMoveEvent, this.onMouseMove, this);\n EventHandler.add(document, touchEndEvent, this.onMouseUp, this);\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 EventHandler.remove(document, 'mousemove', this.onMouseMove);\n EventHandler.remove(document, 'mouseup', this.onMouseUp);\n EventHandler.remove(document, touchMoveEvent, this.onMouseMove);\n EventHandler.remove(document, touchEndEvent, this.onMouseUp);\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 var totalWidth = 0;\n var children = this.element.children;\n for (var i = 0; i < children.length; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n if (totalWidth > this.element.offsetWidth) {\n this.updateSplitterSize();\n }\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 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 else {\n panes[i].style.flexGrow = '';\n }\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 }\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 :\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 else if (this.elementX + this.elementWidth + dX > this.maxLeft) {\n currentX = this.maxLeft - this.elementX - 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 for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[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.updatePanelLayout(ele, cellInstance);\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 heightValue = ((this.maxRow()) *\n (this.element.parentElement && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio) +\n (this.maxRow() - 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].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","_this","call","allPanes","paneOrder","separatorOrder","allBars","previousCoordinates","currentCoordinates","updatePrePaneInPercentage","updateNextPaneInPercentage","panesDimensions","border","validDataAttributes","validElementAttributes","iconsDelay","templateElement","collapseFlag","expandFlag","onPropertyChanged","newProp","oldProp","classList","contains","_i","_a","keys","setSplitterSize","height","width","setCssClass","cssClass","isEnabled","enabled","setReversePane","setSeparatorSize","separatorSize","changeOrientation","orientation","paneSettings","destroyPaneSettings","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","add","preRender","onReportWindowSize","reportWindowSize","bind","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","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","getComputedStyle","marginLeft","marginTop","marginBottom","diff","updatePane","flexPane","sizeDiff","isPercent","convertPixelToPercentage","wireResizeEvents","onMouseMove","onMouseUp","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","top","window","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","len","moveItemUpwards","updateGridLines","availableRow","availableColumn","rowValue","columnValue","column","oldRow","updateLayout","cellInstance","removeResizeClasses","checkDragging","sortPanels","this_1","filter","panel","updatedPanel","updatedRows","updatedHeight","getRowColumn","setHeightWidth","heightValue","widthValue","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; i < children.length; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n for (var j = 0; j < this.allBars.length; 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; i < this.allPanes.length; i++) {\n if (!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; j < flexPaneIndexes.length; 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.allPanes[i].offsetWidth < 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.allPanes[i].offsetWidth;\n var isPercent = updatePane.style.flexBasis.indexOf('%') > -1;\n updatePane.style.flexBasis = isPercent ? this.convertPixelToPercentage(updatePane.offsetWidth + sizeDiff) + '%'\n : (updatePane.offsetWidth + sizeDiff) + 'px';\n flexPane.style.flexBasis = flexPane.style.flexBasis.indexOf('%') > -1 ?\n this.convertPixelToPercentage(flexPane.offsetWidth - sizeDiff) + '%' : (flexPane.offsetWidth - 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 var totalWidth = 0;\n var children = this.element.children;\n for (var i = 0; i < children.length; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n if (totalWidth > this.element.offsetWidth) {\n this.updateSplitterSize();\n }\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 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 else {\n panes[i].style.flexGrow = '';\n }\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 }\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 :\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 for (var i = 0; i < this.element.querySelectorAll('.e-panel').length; i++) {\n var ele = this.element.querySelectorAll('.e-panel')[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 heightValue = ((this.maxRow()) *\n (this.element.parentElement && ((this.element.parentElement.offsetWidth)) / this.cellAspectRatio) +\n (this.maxRow() - 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].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","getComputedStyle","marginLeft","marginTop","marginBottom","diff","updatePane","flexPane","sizeDiff","isPercent","convertPixelToPercentage","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","top","window","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","len","moveItemUpwards","updateGridLines","availableRow","availableColumn","rowValue","columnValue","column","oldRow","updateLayout","cellInstance","removeResizeClasses","checkDragging","sortPanels","this_1","filter","panel","updatedPanel","updatedRows","updatedHeight","getRowColumn","setHeightWidth","heightValue","widthValue","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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"}