@syncfusion/ej2-ribbon 23.2.5 → 24.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -34
- package/dist/ej2-ribbon.umd.min.js +2 -2
- package/dist/ej2-ribbon.umd.min.js.map +1 -1
- package/dist/es6/ej2-ribbon.es2015.js +198 -32
- package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
- package/dist/es6/ej2-ribbon.es5.js +198 -32
- package/dist/es6/ej2-ribbon.es5.js.map +1 -1
- package/dist/global/ej2-ribbon.min.js +2 -2
- package/dist/global/ej2-ribbon.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +13 -13
- package/src/ribbon/base/interface.d.ts +17 -0
- package/src/ribbon/base/ribbon-model.d.ts +15 -1
- package/src/ribbon/base/ribbon.d.ts +14 -1
- package/src/ribbon/base/ribbon.js +95 -21
- package/src/ribbon/items/ribbon-colorpicker.js +16 -0
- package/src/ribbon/items/ribbon-combobox.js +16 -0
- package/src/ribbon/items/ribbon-dropdown.js +5 -3
- package/src/ribbon/items/ribbon-groupbutton.d.ts +3 -1
- package/src/ribbon/items/ribbon-groupbutton.js +50 -7
- package/src/ribbon/models/ribbon-colorpicker-settings-model.d.ts +8 -1
- package/src/ribbon/models/ribbon-colorpicker-settings.d.ts +7 -1
- package/src/ribbon/models/ribbon-colorpicker-settings.js +4 -1
- package/src/ribbon/models/ribbon-combobox-settings-model.d.ts +7 -0
- package/src/ribbon/models/ribbon-combobox-settings.d.ts +6 -0
- package/src/ribbon/models/ribbon-combobox-settings.js +3 -0
- package/src/ribbon/models/ribbon-group-button-settings-model.d.ts +7 -0
- package/src/ribbon/models/ribbon-group-button-settings.d.ts +6 -0
- package/src/ribbon/models/ribbon-group-button-settings.js +3 -0
- package/src/ribbon/models/ribbon-group-model.d.ts +7 -0
- package/src/ribbon/models/ribbon-group.d.ts +6 -0
- package/src/ribbon/models/ribbon-group.js +3 -0
- package/src/ribbon/modules/ribbon-backstage.js +3 -0
- package/styles/bootstrap-dark.css +105 -26
- package/styles/bootstrap.css +104 -25
- package/styles/bootstrap4.css +104 -25
- package/styles/bootstrap5-dark.css +105 -26
- package/styles/bootstrap5.css +104 -25
- package/styles/fabric-dark.css +103 -24
- package/styles/fabric.css +104 -25
- package/styles/fluent-dark.css +104 -25
- package/styles/fluent.css +104 -25
- package/styles/highcontrast-light.css +103 -24
- package/styles/highcontrast.css +103 -24
- package/styles/material-dark.css +105 -26
- package/styles/material.css +105 -26
- package/styles/material3-dark.css +105 -26
- package/styles/material3.css +105 -26
- package/styles/ribbon/_bootstrap-dark-definition.scss +8 -0
- package/styles/ribbon/_bootstrap-definition.scss +8 -0
- package/styles/ribbon/_bootstrap4-definition.scss +8 -0
- package/styles/ribbon/_bootstrap5-definition.scss +8 -0
- package/styles/ribbon/_fabric-dark-definition.scss +8 -0
- package/styles/ribbon/_fabric-definition.scss +8 -0
- package/styles/ribbon/_fluent-definition.scss +8 -0
- package/styles/ribbon/_fusionnew-definition.scss +8 -0
- package/styles/ribbon/_highcontrast-definition.scss +8 -0
- package/styles/ribbon/_highcontrast-light-definition.scss +8 -0
- package/styles/ribbon/_layout.scss +69 -5
- package/styles/ribbon/_material-dark-definition.scss +9 -1
- package/styles/ribbon/_material-definition.scss +9 -1
- package/styles/ribbon/_material3-definition.scss +8 -2
- package/styles/ribbon/_tailwind-definition.scss +8 -0
- package/styles/ribbon/_theme.scss +34 -13
- package/styles/ribbon/bootstrap-dark.css +105 -26
- package/styles/ribbon/bootstrap.css +104 -25
- package/styles/ribbon/bootstrap4.css +104 -25
- package/styles/ribbon/bootstrap5-dark.css +105 -26
- package/styles/ribbon/bootstrap5.css +104 -25
- package/styles/ribbon/fabric-dark.css +103 -24
- package/styles/ribbon/fabric.css +104 -25
- package/styles/ribbon/fluent-dark.css +104 -25
- package/styles/ribbon/fluent.css +104 -25
- package/styles/ribbon/highcontrast-light.css +103 -24
- package/styles/ribbon/highcontrast.css +103 -24
- package/styles/ribbon/material-dark.css +105 -26
- package/styles/ribbon/material.css +105 -26
- package/styles/ribbon/material3-dark.css +105 -26
- package/styles/ribbon/material3.css +105 -26
- package/styles/ribbon/tailwind-dark.css +104 -25
- package/styles/ribbon/tailwind.css +104 -25
- package/styles/tailwind-dark.css +104 -25
- package/styles/tailwind.css +104 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select, addClass } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if (item.id === id) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n/**\n * Sets the HTML attributes of an element\n *\n * @param {HTMLElement} element - The HTML element for which attributes are to be updated.\n * @param {commonProperties} attributes - An object containing key-value pairs of attributes to be updated.\n * @returns {void}\n * @hidden\n */\nexport function setCustomAttributes(element, attributes) {\n for (var key in attributes) {\n if (key === 'class') {\n var elementClass = attributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'style') {\n var prevStyles = element.getAttribute('style') || '';\n var value = \"\" + prevStyles + attributes[\"\" + key];\n element.setAttribute(\"\" + key, value);\n }\n else {\n element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n Property({})\n ], RibbonButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"clicked\", void 0);\n return RibbonButtonSettings;\n}(ChildProperty));\nexport { RibbonButtonSettings };\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon checkbox item.\n */\nvar RibbonCheckBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonCheckBoxSettings, _super);\n function RibbonCheckBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of checkbox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCheckBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonCheckBoxSettings.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RibbonCheckBoxSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property({})\n ], RibbonCheckBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Picker')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Property({})\n ], RibbonColorPickerSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\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 { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n Property({})\n ], RibbonComboBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"select\", void 0);\n return RibbonComboBoxSettings;\n}(ChildProperty));\nexport { RibbonComboBoxSettings };\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 { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon DropDownButton item.\n */\nvar RibbonDropDownSettings = /** @class */ (function (_super) {\n __extends(RibbonDropDownSettings, _super);\n function RibbonDropDownSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonDropDownSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonDropDownSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], RibbonDropDownSettings.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property({})\n ], RibbonDropDownSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"select\", void 0);\n return RibbonDropDownSettings;\n}(ChildProperty));\nexport { RibbonDropDownSettings };\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 { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon SplitButton item.\n */\nvar RibbonSplitButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonSplitButtonSettings, _super);\n function RibbonSplitButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonSplitButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonSplitButtonSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"target\", void 0);\n __decorate([\n Property({})\n ], RibbonSplitButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\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 { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\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 { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Property({})\n ], RibbonGroupButtonItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\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 { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\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 { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\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 { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\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 { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\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 { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_POPUP_CONTROL, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonButton = /** @class */ (function () {\n function RibbonButton(parent) {\n this.parent = parent;\n }\n RibbonButton.prototype.getModuleName = function () {\n return 'ribbonButton';\n };\n RibbonButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates button.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.createButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var btnSettings = item.buttonSettings;\n new Button({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n iconCss: btnSettings.iconCss,\n disabled: item.disabled,\n cssClass: (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (btnSettings.cssClass ? btnSettings.cssClass : '')).trim(),\n content: item.activeSize === RibbonItemSize.Small ? '' : btnSettings.content,\n isPrimary: btnSettings.isPrimary,\n isToggle: btnSettings.isToggle,\n created: btnSettings.created\n }, buttonEle);\n if (btnSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, btnSettings.htmlAttributes);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n buttonEle.setAttribute('aria-label', btnSettings.content);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n buttonEle.setAttribute('data-control', item.type.toString());\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({ cssClass: buttonObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCheckBox = /** @class */ (function () {\n function RibbonCheckBox(parent) {\n this.parent = parent;\n }\n RibbonCheckBox.prototype.getModuleName = function () {\n return 'ribbonCheckBox';\n };\n RibbonCheckBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the check box.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.createCheckBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var checkBoxSettings = item.checkBoxSettings;\n new CheckBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n checked: checkBoxSettings.checked,\n cssClass: (RIBBON_CONTROL + SPACE + (checkBoxSettings.cssClass ? checkBoxSettings.cssClass : '')).trim(),\n label: checkBoxSettings.label,\n labelPosition: checkBoxSettings.labelPosition,\n disabled: item.disabled,\n created: checkBoxSettings.created,\n htmlAttributes: checkBoxSettings.htmlAttributes,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement, setCustomAttributes } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: colorPickerSettings.change,\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n if (colorPickerSettings.htmlAttributes) {\n setCustomAttributes(inputEle, colorPickerSettings.htmlAttributes);\n }\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonComboBox = /** @class */ (function () {\n function RibbonComboBox(parent) {\n this.parent = parent;\n }\n RibbonComboBox.prototype.getModuleName = function () {\n return 'ribbonComboBox';\n };\n RibbonComboBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the combobox.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.createComboBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var comboBoxSettings = item.comboBoxSettings;\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n htmlAttributes: comboBoxSettings.htmlAttributes,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","import { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip, setCustomAttributes } from '../base/index';\nimport { DROPDOWN_ID, ITEM_VERTICAL_CENTER, OVERFLOW_ID, RIBBON_CONTROL, RIBBON_GROUP_OVERFLOW_DDB, RIBBON_POPUP_CONTROL, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonDropDown = /** @class */ (function () {\n function RibbonDropDown(parent) {\n this.parent = parent;\n }\n RibbonDropDown.prototype.getModuleName = function () {\n return 'ribbonDropDown';\n };\n RibbonDropDown.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createDropDown = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var dropDownSettings = item.dropDownSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (dropDownSettings.cssClass ?\n dropDownSettings.cssClass : '')).trim();\n new DropDownButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: dropDownSettings.closeActionEvents,\n content: item.activeSize === RibbonItemSize.Small ? '' : dropDownSettings.content,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: dropDownSettings.iconCss,\n items: dropDownSettings.items,\n target: dropDownSettings.target,\n createPopupOnClick: dropDownSettings.createPopupOnClick,\n beforeClose: function (e) {\n if (dropDownSettings.beforeClose) {\n dropDownSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: dropDownSettings.beforeItemRender,\n beforeOpen: dropDownSettings.beforeOpen,\n close: function (e) {\n if (dropDownSettings.close) {\n dropDownSettings.close.call(_this, e);\n }\n },\n created: dropDownSettings.created,\n open: dropDownSettings.open,\n select: dropDownSettings.select\n }).appendTo(buttonEle);\n if (dropDownSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, dropDownSettings.htmlAttributes);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var items = target.querySelectorAll('.e-control');\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && e.target.classList.contains('e-control')) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonSplitButton = /** @class */ (function () {\n function RibbonSplitButton(parent) {\n this.parent = parent;\n }\n RibbonSplitButton.prototype.getModuleName = function () {\n return 'ribbonSplitButton';\n };\n RibbonSplitButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates SplitButton.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.createSplitButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var splitButtonSettings = item.splitButtonSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (splitButtonSettings.cssClass ?\n splitButtonSettings.cssClass : '')).trim();\n var splitbutton = new SplitButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: splitButtonSettings.closeActionEvents,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: splitButtonSettings.iconCss,\n items: splitButtonSettings.items,\n target: splitButtonSettings.target,\n beforeClose: function (e) {\n if (splitButtonSettings.beforeClose) {\n splitButtonSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: splitButtonSettings.beforeItemRender,\n beforeOpen: splitButtonSettings.beforeOpen,\n close: function () {\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.close) {\n splitButtonSettings.close.call(_this);\n }\n },\n created: splitButtonSettings.created,\n open: function () {\n splitbutton['wrapper'].classList.add(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.open) {\n splitButtonSettings.open.call(_this);\n }\n },\n select: splitButtonSettings.select,\n click: function (e) {\n if (splitButtonSettings.click) {\n splitButtonSettings.click.call(_this, e);\n }\n }\n }, buttonEle);\n if (splitButtonSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, splitButtonSettings.htmlAttributes);\n }\n var dropdownEle = buttonEle.parentElement.querySelector('.e-dropdown-btn');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n this.setContent(item, splitbutton);\n var wrapper = splitbutton['wrapper'];\n EventHandler.add(wrapper, 'mouseenter', function () { wrapper.classList.add(RIBBON_HOVER); }, this);\n EventHandler.add(wrapper, 'mouseleave', function () { wrapper.classList.remove(RIBBON_HOVER); }, this);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n splitButtonEle.setAttribute('data-control', item.type.toString());\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n splitbutton.cssClass = splitbutton.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n splitbutton.dataBind();\n var dropdownEle = splitButtonEle.parentElement.querySelector('.e-dropdown-btn');\n var ddbId = dropdownEle.getAttribute('id');\n var popupEle = document.querySelector('#' + ddbId + '-popup');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n popupEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.preventDefault();\n splitbutton['wrapper'].classList.remove('e-ribbon-open');\n popupEle.querySelector('.e-focused').click();\n }\n };\n var target;\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n overflowButton.toggle();\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n var cssClass = splitbutton.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n splitbutton.cssClass = cssClass.join(SPACE);\n splitbutton.dataBind();\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n };\n };\n RibbonSplitButton.prototype.setContent = function (item, control) {\n control['primaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Medium) ? item.splitButtonSettings.content : '' });\n control['secondaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Large) ? item.splitButtonSettings.content : '' });\n };\n RibbonSplitButton.prototype.getSplitButtonObj = function (controlId) {\n var splitButtonEle = getItemElement(this.parent, controlId);\n return getComponent(splitButtonEle, SplitButton);\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the SplitButton items.\n * @param {string} text - Gets the text of the splitbutton item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonSplitButton.prototype.addItems = function (controlId, Items, text) {\n this.getSplitButtonObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonSplitButton.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getSplitButtonObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonSplitButton.prototype.toggle = function (controlId) {\n this.getSplitButtonObj(controlId).toggle();\n };\n /**\n * Updates the splitbutton.\n *\n * @param {RibbonSplitButtonSettingsModel} prop - Gets the splitbutton property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonSplitButton.prototype.updateSplitButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.splitButtonSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, SplitButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.open;\n delete prop.click;\n delete prop.close;\n delete prop.beforeClose;\n control.setProperties(prop);\n if (prop.content) {\n this.setContent(itemProp.item, control);\n }\n };\n /**\n * Updated SplitButton size\n *\n * @param {HTMLElement} element - Gets the splibutton element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.updateSplitButtonSize = function (element, item) {\n var control = getComponent(element, SplitButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n this.setContent(item, control);\n };\n return RibbonSplitButton;\n}());\nexport { RibbonSplitButton };\n","import { EventHandler, getComponent, remove } from '@syncfusion/ej2-base';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { RibbonGroupButtonSelection, RibbonItemSize } from '../base/interface';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { createTooltip, isTooltipPresent, setCustomAttributes } from '../base/utils';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGroupButton = /** @class */ (function () {\n function RibbonGroupButton(parent) {\n this.parent = parent;\n this.isSelected = false;\n }\n RibbonGroupButton.prototype.getModuleName = function () {\n return 'ribbonGroupButton';\n };\n RibbonGroupButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Group Button\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.createGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n this.count = 0;\n var btnContainerEle = this.parent.createElement('div', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID,\n className: 'e-btn-group'\n });\n itemElement.appendChild(btnContainerEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if ((groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss)) {\n var groupButtonEle = this.parent.createElement('button', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID + i,\n className: constants.RIBBON_GROUP_BUTTON\n });\n btnContainerEle.appendChild(groupButtonEle);\n new Button({\n iconCss: groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss,\n disabled: item.disabled,\n enableRtl: this.parent.enableRtl,\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left'\n }, groupButtonEle);\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes) {\n setCustomAttributes(groupButtonEle, groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes);\n }\n var buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n btnContainerEle.classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n else {\n btnContainerEle.classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].selected) {\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n buttonEle.classList.add('e-active');\n }\n else {\n if (this.count < 1) {\n buttonEle.classList.add('e-active');\n this.count++;\n }\n }\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n btnContainerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(btnContainerEle, this.parent);\n this.isSelected = false;\n }\n };\n RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {\n var previousItems = [], selectingItems = [], selectedItems = [];\n var groupButtonEle;\n var dropdown;\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n previousItems.push(grpBtnSettings.items[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (!(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n selectingItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs = {\n cancel: false, previousItems: previousItems, selectingItems: selectingItems\n };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n else {\n if (grpBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_MULTIPLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.remove('e-active');\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active') && this.parent.activeLayout === 'Simplified') {\n this.grpBtnIndex = itemIndex;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n var activeEleCount = 0;\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active') && this.parent.activeLayout === 'Simplified' && n !== itemIndex) {\n this.isSelected = true;\n activeEleCount++;\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = null;\n var itemsCount = 0;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n containerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(containerEle, this.parent);\n }\n else {\n var groupButtonEle = itemElement.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n itemElement.appendChild(dropdown.target);\n if (groupButtonEle) {\n dropdown.destroy();\n remove(groupButtonEle);\n }\n }\n };\n RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n var isOverflowPopup = false;\n if (this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n isOverflowPopup = true;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var groupBtnSettings = item.groupButtonSettings;\n if ((e.key === 'ArrowRight' && !isOverflowPopup) || (e.key === 'ArrowDown' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowDown' && isOverflowPopup)) {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n else if ((e.key === 'ArrowLeft' && !isOverflowPopup) || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP });\n var targetEle = dropdown.target;\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.element.focus();\n dropdown.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE) });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\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 { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu } from '../models/index';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';\nimport { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonGroupButton } from '../items/index';\nimport { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';\nimport * as constants from './constant';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.isAddRemove = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this] }, { member: 'ribbonDropDown', args: [this] }, { member: 'ribbonSplitButton', args: [this] }, { member: 'ribbonCheckBox', args: [this] }, { member: 'ribbonColorPicker', args: [this] }, { member: 'ribbonComboBox', args: [this] }, { member: 'ribbonGroupButton', args: [this] }, { member: 'ribbonFileMenu', args: [this] }, { member: 'ribbonBackstage', args: [this] });\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n addClass([this.element], ['e-rbn'].concat((this.cssClass ? this.cssClass.split(constants.SPACE) : [])));\n if (this.enableRtl) {\n this.element.classList.add(constants.RTL_CSS);\n }\n this.element.style.width = formatUnit(this.width);\n this.renderTabs();\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.createFileMenu(this.fileMenu);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.createBackStage(this.backStageMenu);\n }\n this.createHelpPaneTemplate();\n var toolbar = this.tabObj['tbObj'];\n toolbar.refreshOverflow();\n createTooltip(this.element, this);\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n };\n Ribbon.prototype.wireKeyboardEvent = function () {\n this.keyboardModuleRibbon = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n Ribbon.prototype.keyActionHandler = function (e) {\n if (((e.key === 'Tab') && (!(e.target.classList.contains('e-tab-wrap')) && !(e.target.classList.contains('e-combobox'))))) {\n e.preventDefault();\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var ribbonControls = activeContent.querySelectorAll('.e-control');\n var comboBoxElements = activeContent.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < ribbonControls.length; i++) {\n if (ribbonControls[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (ribbonControls[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.currentControlIndex = i;\n }\n }\n }\n }\n if (this.currentControlIndex === 0) {\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-collapse-btn') || e.target.classList.contains('e-ribbon-last-item') ||\n e.target.classList.contains('e-ribbon-first-item') || e.target.classList.contains('e-ribbon-group-of-btn') ||\n e.target.classList.contains('e-ribbon-overall-of-btn')) {\n switch (e.action) {\n case 'rightarrow':\n this.handleNavigation(e, !this.enableRtl, ribbonControls);\n break;\n case 'leftarrow':\n this.handleNavigation(e, this.enableRtl, ribbonControls);\n break;\n case 'tab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex < ribbonControls.length - 1) {\n this.currentControlIndex++;\n }\n }\n break;\n case 'shiftTab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex > 0) {\n this.currentControlIndex--;\n }\n }\n else {\n this.tabObj.element.querySelector('.e-toolbar-item.e-active').querySelector('.e-tab-wrap').focus();\n this.currentControlIndex = 0;\n }\n }\n }\n };\n Ribbon.prototype.handleNavigation = function (e, enableRtl, ribbonControls) {\n var groupContainer;\n var prevGroupId;\n if (enableRtl) {\n if (this.currentControlIndex < ribbonControls.length - 1 && ribbonControls[this.currentControlIndex + 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex++;\n }\n }\n else {\n if (this.currentControlIndex > 0 && ribbonControls[this.currentControlIndex - 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex--;\n }\n }\n if ((!enableRtl && (this.currentControlIndex > 0)) || (enableRtl && (this.currentControlIndex < ribbonControls.length - 1))) {\n if (!e.target.classList.contains('e-combobox') && e.target.classList.contains('e-control') && !e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n this.currentControlIndex++;\n }\n else {\n var prevGroupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (prevGroupContainer) {\n prevGroupId = prevGroupContainer.getAttribute('id');\n }\n this.currentControlIndex--;\n }\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n if (((enableRtl && this.currentControlIndex === ribbonControls.length - 1) ||\n (!enableRtl && this.currentControlIndex === 0))) {\n if (ribbonControls[this.currentControlIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n enableRtl ? this.currentControlIndex++ : this.currentControlIndex--;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (this.activeLayout === 'Classic') {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (enableRtl) {\n var launcherIconEle = void 0;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n var items = groupContainer.querySelectorAll('.e-ribbon-item');\n items[items.length - 1].querySelector('.e-control').classList.add('e-ribbon-last-item');\n }\n }\n else {\n if (groupContainer) {\n var groupContainerId = groupContainer.getAttribute('id');\n if (prevGroupId !== groupContainerId) {\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n ribbonControls[parseInt((this.currentControlIndex + 1).toString(), 10)].classList.add('e-ribbon-first-item');\n }\n }\n }\n }\n }\n else {\n if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-first-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-first-item');\n }\n else if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n }\n }\n else {\n if (this.activeLayout === 'Classic') {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n if (this.activeLayout === 'Simplified') {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if (enableRtl && (overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n }\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n else {\n this.currentControlIndex--;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (!enableRtl && e.target.classList.contains('e-ribbon-first-item')) {\n groupContainer = ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n if (enableRtl) {\n this.currentControlIndex++;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.currentControlIndex;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-collapse-btn')) {\n if (enableRtl) {\n this.currentControlIndex = 0;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n else {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if ((overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex--;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n }\n if (this.activeLayout === 'Simplified' && e.target.classList.contains('e-ribbon-overall-of-btn')) {\n if (enableRtl) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n };\n Ribbon.prototype.resizeHandler = function () {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n };\n Ribbon.prototype.renderTabs = function () {\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal = this.checkID(this.tabsInternal, 'tab', this.element.id);\n this.setProperties({ tabs: this.tabsInternal }, true);\n var tabEle = this.createElement('div', {\n id: this.element.id + constants.TAB_ID\n });\n this.element.appendChild(tabEle);\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n this.tabObj = new Tab({\n cssClass: constants.RIBBON_TAB,\n selectedItem: this.selectedTab,\n overflowMode: 'Popup',\n width: this.width,\n items: tabItems,\n enableRtl: this.enableRtl,\n created: this.tabCreated.bind(this),\n selected: this.ribbonTabSelected.bind(this),\n selecting: this.ribbonTabSelecting.bind(this)\n });\n this.tabObj.appendTo(tabEle);\n //Set the width value as \"0px\" with unit for proper calculation.\n this.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, '0px');\n this.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n var toolbar = getComponent(toolbarEle, Toolbar);\n toolbar.setProperties({ width: 'calc(100% - var(--fileMenuWidth) - var(--helpTemplateWidth))' });\n this.element.classList[this.isMinimized ? 'add' : 'remove'](constants.RIBBON_MINIMIZE);\n };\n Ribbon.prototype.minimize = function (val) {\n var _this = this;\n if (val === this.isMinimized) {\n return;\n }\n var eventArgs = { cancel: false };\n this.trigger(val ? 'ribbonCollapsing' : 'ribbonExpanding', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.setProperties({ isMinimized: val }, true);\n _this.element.classList.toggle(constants.RIBBON_MINIMIZE, _this.isMinimized);\n //to overwrite inline styles from hscroll\n _this.tabObj.element.querySelector('.e-content').style.display = val ? 'none' : 'block';\n if (!val) {\n _this.refreshLayout();\n }\n });\n };\n Ribbon.prototype.toggleLayout = function () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n this.isAddRemove = false;\n var selectedTabId = e.selectedItem.getAttribute('data-id');\n var selectedIndex = getIndex(this.tabs, (function (tab) { return (tab.id === selectedTabId); }));\n selectedIndex = selectedIndex === -1 ? this.selectedTab : selectedIndex;\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.checkOverflow(selectedIndex, e.selectedContent.firstChild);\n if (this.activeLayout === 'Simplified' && this.overflowDDB) {\n var overflowTarget = this.overflowDDB.target;\n var ofTabContainer = overflowTarget.querySelector('.' + constants.RIBBON_TAB_ACTIVE);\n if (ofTabContainer) {\n ofTabContainer.classList.remove(constants.RIBBON_TAB_ACTIVE);\n }\n var activeTab = overflowTarget.querySelector('#' + selectedTabId + constants.OVERFLOW_ID);\n if (activeTab) {\n activeTab.classList.add(constants.RIBBON_TAB_ACTIVE);\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n this.checkOverflowHiddenItems(false, selectedIndex);\n }\n else {\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n this.trigger('tabSelected', eventArgs);\n };\n Ribbon.prototype.checkOverflow = function (tabIndex, activeContent) {\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n var isOverFlow = tabContent.offsetWidth < activeContent.offsetWidth;\n if (isOverFlow && !this.scrollModule) {\n if (this.activeLayout === 'Classic') {\n // Defines whether the shrinking is breaked due to insufficient space.\n var isBreak = false;\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, true);\n if (!isBreak && (tabContent.offsetWidth < activeContent.offsetWidth)) {\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, false);\n }\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createOverflowDropdown(tabIndex, tabContent, activeContent);\n }\n }\n else {\n this.checkSimplifiedItemShrinking(tabIndex, tabContent, activeContent);\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createSimplfiedOverflow(tabContent, activeContent, tabIndex);\n }\n }\n //Adds Scroll if the tabwidth is less the content width even after adding overflow dropdown.\n if ((tabContent.offsetWidth < activeContent.offsetWidth) && (!this.scrollModule)) {\n this.scrollModule = new HScroll({\n enableRtl: this.enableRtl\n }, this.tabObj.element.querySelector('.' + constants.TAB_CONTENT));\n }\n }\n else if (!isOverFlow) {\n this.destroyScroll();\n if (this.activeLayout === 'Classic') {\n var isBreak = false;\n isBreak = this.removeOverflowDropdown(tabContent, activeContent, false, tabIndex);\n //Check for expanding small items to medium items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, true);\n }\n //Check for expanding medium items to large items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, false);\n }\n }\n else {\n this.removeSimplfiedOverflow(tabContent, activeContent, tabIndex);\n if (tabContent.offsetWidth > activeContent.offsetWidth) {\n this.checkSimplifiedItemExpanding(tabIndex, tabContent, activeContent);\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemShrinking = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Medium) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n itemContainer.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemExpanding = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth > activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth > activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Small) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var valString = itemContainer.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (tabContent.offsetWidth > value)) {\n itemContainer.removeAttribute('data-medium-width');\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.createSimplfiedOverflow = function (tabContent, activeContent, tabIndex) {\n var orderedGroups = this.getGroupResizeOrder(true, tabIndex);\n var isEmptyCollection;\n for (var i = 0; ((i < orderedGroups.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = group.collections.length; ((j >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); j--) {\n var collection = group.collections[parseInt((j - 1).toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n var itemContainer = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n itemContainer.setAttribute('data-simplified-width', activeContent.offsetWidth.toString());\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemContainer, groupContainer, true);\n if (item.activeSize === RibbonItemSize.Small) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, true);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength && !group.enableGroupOverflow) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (isEmptyCollection) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);\n }\n };\n Ribbon.prototype.checkEmptyCollection = function (itemsLength) {\n var isEmptyCollection = true;\n for (var i = 0; i < itemsLength.length; i++) {\n if (!(itemsLength[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {\n isEmptyCollection = false;\n break;\n }\n }\n return isEmptyCollection;\n };\n Ribbon.prototype.updatePopupItems = function (item, itemEle, isGroupOF, isMenu) {\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.GroupButton) ? DropDownButton : SplitButton);\n var dropDownPopup = dropdown.dropDown;\n // popup is on right if (isGroupOF && isMenu)\n // The position is reversed if RTL is enabled.\n // isRight = ((isGroupOF && isMenu) && !this.enableRtl ) || (!(isGroupOF && isMenu) && this.enableRtl) ==> (isGroupOF && isMenu) !== this.enableRtl\n var isLeft = (isGroupOF && isMenu) === this.enableRtl;\n if (dropDownPopup) {\n dropDownPopup.setProperties({ position: { X: isLeft ? 'left' : 'right', Y: isMenu ? 'top' : 'bottom' } }, true);\n if (isMenu) {\n dropdown.beforeOpen = function () {\n if (isLeft) {\n dropDownPopup.element.style.setProperty('visibility', 'hidden');\n dropDownPopup.element.style.setProperty('display', 'block');\n dropDownPopup.setProperties({ offsetX: -1 * dropDownPopup.element.offsetWidth });\n dropDownPopup.element.style.removeProperty('display');\n dropDownPopup.element.style.removeProperty('visibility');\n }\n };\n }\n else {\n dropDownPopup.setProperties({ offsetX: 0 }, true);\n dropdown.beforeOpen = null;\n }\n }\n };\n Ribbon.prototype.removeSimplfiedOverflow = function (tabContent, activeContent, tabIndex, isClear) {\n if (isClear === void 0) { isClear = false; }\n var orderedGroups = this.getGroupResizeOrder(false, tabIndex);\n var flag = true;\n var isEmptyCollection;\n for (var i = 0; ((i < orderedGroups.length) && flag); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (group.enableGroupOverflow) {\n var overflowDDBEle = tabContent.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n else {\n overflowDDB = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n for (var j = 0; ((j < group.collections.length) && flag); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n // eslint-disable-next-line max-len\n for (var k = 0; ((k < collection.items.length) && flag && !isClear && (tabContent.offsetWidth > activeContent.offsetWidth)); k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemContainer = void 0;\n if (overflowtarget) {\n itemContainer = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n var width = parseInt(itemContainer.getAttribute('data-simplified-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle_1 = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle_1.append(itemContainer);\n this.removeOverflowEvent(item, itemContainer);\n if (item.allowedSizes & RibbonItemSize.Small) {\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemContainer.querySelector('#' + item.id), item);\n }\n }\n }\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var itemEle = groupEle.querySelector('.' + constants.RIBBON_ITEM);\n if (groupEle.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (!isEmptyCollection) {\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n }\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n else {\n var ofGroupContainer = overflowtarget.querySelector('#' + group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = overflowtarget.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n }\n this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n if (overflowEle.childElementCount === 0) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n }\n };\n Ribbon.prototype.checkOverflowHiddenItems = function (isGroupOF, tabIndex, groupId) {\n if (isGroupOF) {\n var overflowDDB = document.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (overflowDDB) {\n var overflowButton = getInstance(overflowDDB, DropDownButton);\n var overflowBtnTarget = overflowButton.target;\n var itemEle = overflowBtnTarget.querySelectorAll('.e-ribbon-item');\n var isHidden = true;\n for (var i = 0; i < itemEle.length; i++) {\n if (!(itemEle[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {\n isHidden = false;\n break;\n }\n }\n overflowButton.element.classList[isHidden ? 'add' : 'remove']('e-hidden');\n }\n }\n else {\n if (this.overflowDDB) {\n var isGroupHidden = true;\n var isItemHidden = void 0;\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n for (var k = 0; k < ofTabContainer.children.length; k++) {\n isItemHidden = true;\n var overflowTab = ofTabContainer.children[parseInt(k.toString(), 10)];\n var groupTabContainer = overflowTab.querySelectorAll('.e-ribbon-item');\n for (var n = 0; n < groupTabContainer.length; n++) {\n if (!(groupTabContainer[parseInt(n.toString(), 10)].classList.contains('e-hidden'))) {\n isItemHidden = false;\n break;\n }\n }\n overflowTab.classList[isItemHidden ? 'add' : 'remove']('e-hide-group');\n if (!(overflowTab.classList.contains('e-hide-group')) && !(overflowTab.classList.contains('e-hidden'))) {\n isGroupHidden = false;\n }\n }\n this.overflowDDB.element.classList[isGroupHidden ? 'add' : 'remove'](constants.HIDE_CSS);\n }\n }\n }\n };\n Ribbon.prototype.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {\n var overflowButton;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n if (isGroupOF) {\n var overflowDDB = groupContainer.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (!overflowDDB) {\n overflowButton = this.addOverflowButton(groupId + constants.GROUPOF_BUTTON_ID);\n overflowButton.element.classList.add(constants.RIBBON_GROUP_OF_BUTTON);\n groupContainer.appendChild(overflowButton.element);\n }\n else {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n var overflowBtnTarget = overflowButton.target;\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n overflowBtnTarget.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n overflowBtnTarget.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n overflowBtnTarget.classList.add('e-hide-group');\n }\n }\n isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))\n : overflowBtnTarget.append(itemEle);\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID);\n this.tabObj.element.insertBefore(this.overflowDDB.element, this.collapseButton);\n this.overflowDDB.element.classList.add(constants.RIBBON_OVERALL_OF_BUTTON);\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n else {\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);\n if (!ofGroupContainer) {\n ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n ofTabContainer.append(ofGroupContainer);\n }\n isResize ? ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM)) : ofGroupContainer.append(itemEle);\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n };\n Ribbon.prototype.addOverflowEvents = function (item, itemEle, overflowButton) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'GroupButton':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n ofGroupContainer.append(itemEle);\n ofTabContainer.append(ofGroupContainer);\n if (tabIndex === this.selectedTab) {\n ofTabContainer.classList.add(constants.RIBBON_TAB_ACTIVE);\n }\n var groupEle = document.querySelector('#' + groupId);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n };\n Ribbon.prototype.checkGroupShrinking = function (tabIndex, tabContent, activeContent, isLarge) {\n var isOverFlow = true;\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = (tab.groups.length - 1); (isOverFlow && (j >= 0)); j--) {\n // eslint-disable-next-line max-len\n isBreak = isLarge ? this.checkLargeToMedium(tabIndex, tab, j, tabContent, activeContent) : this.checkMediumToSmall(tabIndex, tab, j, tabContent, activeContent);\n isOverFlow = !isBreak && (tabContent.offsetWidth < activeContent.offsetWidth);\n }\n return isBreak;\n };\n Ribbon.prototype.checkValidCollectionLength = function (collections) {\n var count = 0;\n for (var i = 0; i < collections.length; i++) {\n var items = collections[parseInt(i.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n count++;\n break;\n }\n }\n if (count > 1) {\n return false;\n }\n }\n return count === 1;\n };\n Ribbon.prototype.checkClassicCollection = function (collections, n, isIncrement) {\n var items = collections[parseInt(n.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n return n;\n }\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === collections.length) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n };\n Ribbon.prototype.checkClassicItem = function (items, n, isIncrement) {\n var item = items[parseInt(n.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n return n;\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === items.length) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n };\n Ribbon.prototype.checkLargeToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var canReduceCollection = function (collection) {\n return (collection.items.length === 1) && canReduceItem(collection.items[0]);\n };\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Large);\n };\n var createShrinkEle = function (id, firstItem, start, end) {\n var shrinkEle = _this.createElement('div', {\n className: 'e-ribbon-shrink' + constants.SPACE + constants.RIBBON_ROW,\n id: id + '_shrink_container' + start,\n attrs: { 'data-start': start.toString(), 'data-end': end.toString() }\n });\n firstItem.parentElement.insertBefore(shrinkEle, firstItem);\n if (!shouldSkip) {\n shrinkEle.setAttribute('data-large-width', activeContent.offsetWidth.toString());\n }\n return shrinkEle;\n };\n var moveItemToColumn = function (start, end) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[0];\n var firstItem = activeContent.querySelector('#' + collection.items[parseInt(start.toString(), 10)].id + constants.CONTAINER_ID);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + collection.id + '_shrink_container' + start) :\n createShrinkEle(collection.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (!(item.displayOptions & DisplayMode.Classic)) {\n continue;\n }\n var ele = activeContent.querySelector('#' + item.id + constants.CONTAINER_ID);\n shrinkEle.appendChild(ele);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID), item);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + item.id), item);\n }\n }\n };\n var moveCollectionToColumn = function (start, end) {\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n var firstItem = activeContent.querySelector('#' + group.collections[parseInt(start.toString(), 10)].id);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + group.id + '_shrink_container' + start) :\n createShrinkEle(group.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n var ele = activeContent.querySelector('#' + collection.id);\n shrinkEle.appendChild(ele);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID), collection.items[0]);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id), collection.items[0]);\n }\n }\n };\n var orientation = group.orientation;\n if (orientation === ItemOrientation.Column) {\n for (var k = (group.collections.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second collection\n k = this.checkClassicCollection(group.collections, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(k.toString(), 10)])) {\n l = this.checkClassicCollection(group.collections, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n if (m >= 0) {\n m = this.checkClassicCollection(group.collections, m, false);\n }\n //Checks the element rendered at position n-2\n if ((m >= 0) && canReduceCollection(group.collections[parseInt(m.toString(), 10)])) {\n moveCollectionToColumn(m, k);\n }\n else {\n moveCollectionToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n var collection = group.collections[0];\n for (var k = (collection.items.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second item\n k = this.checkClassicItem(collection.items, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceItem(collection.items[parseInt(k.toString(), 10)])) {\n l = this.checkClassicItem(collection.items, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceItem(collection.items[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n //Checks the element rendered at position n-2\n if (m >= 0) {\n m = this.checkClassicItem(collection.items, m, false);\n }\n if ((m >= 0) && canReduceItem(collection.items[parseInt(m.toString(), 10)])) {\n moveItemToColumn(m, k);\n }\n else {\n moveItemToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToSmall = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Small) && (item.activeSize === RibbonItemSize.Medium);\n };\n var reduceItemsToSmall = function (collectionIndex, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var reduce = function (i) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_1 = activeContent.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_1 = activeContent.querySelector('#' + item.id + '_grpbtn');\n }\n _this.setItemSize(ele_1, item);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var reduceCollectionsToSmall = function (index, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n if (!shouldSkip) {\n shrinkColumns[parseInt(index.toString(), 10)].setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n var reduce = function (i) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var ele_2 = activeContent.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_2 = activeContent.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_2, collection.items[0]);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var setWidth = function (id) {\n if (!shouldSkip) {\n var ele_3 = activeContent.querySelector('#' + id);\n ele_3.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n };\n if (orientation === ItemOrientation.Column) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var start = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var l = this.checkClassicCollection(group.collections, start + 1, false); //next valid item\n if (canReduceItem(group.collections[parseInt(start.toString(), 10)].items[0])\n && canReduceItem(group.collections[parseInt(l.toString(), 10)].items[0])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n reduceCollectionsToSmall(k, start, end);\n }\n else if (canReduceItem(group.collections[parseInt(end.toString(), 10)].items[0])) {\n reduceCollectionsToSmall(k, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n //If items length is 1 then, it would have been already check for shrinked column\n if ((classicItems.length > 1)) {\n if (canReduceItem(collection.items[classicItems[0]]) && canReduceItem(collection.items[classicItems[1]])) {\n if (classicItems.length === 2) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[1]);\n }\n else if (canReduceItem(collection.items[classicItems[2]])) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[2], classicItems[1]);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, false); //next valid item\n if (canReduceItem(group.collections[0].items[parseInt(start.toString(), 10)])\n && canReduceItem(group.collections[0].items[parseInt(l.toString(), 10)])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end);\n }\n else if (canReduceItem(group.collections[0].items[parseInt(end.toString(), 10)])) {\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = (collection.items.length - 1); l >= 0; l--) {\n l = this.checkClassicItem(collection.items, l, false);\n if (l < 0) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canReduceItem(item)) {\n item.type !== RibbonItemType.GroupButton ? setWidth(item.id) : setWidth(item.id + constants.RIBBON_GROUP_BUTTON_ID);\n reduceItemsToSmall(k, l, l);\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkGroupExpanding = function (tabIndex, tabContent, activeContent, isSmall) {\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = 0; (!isBreak && (j < tab.groups.length)); j++) {\n isBreak = isSmall ? this.checkSmallToMedium(tabIndex, tab, j, tabContent, activeContent, false, true) :\n this.checkMediumToLarge(tabIndex, tab, j, tabContent, activeContent, false, true);\n }\n return isBreak;\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.checkSmallToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canExpandItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Small);\n };\n var expandItemToMedium = function (collectionIndex, index, parentEle) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var item = collection.items[parseInt(index.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_4 = parentEle.id === item.id ? parentEle : parentEle.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_4 = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_4, item);\n }\n };\n var expandCollectionsToMedium = function (i) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections;\n var item = collections[parseInt(i.toString(), 10)].items[0];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id);\n collections[parseInt(i.toString(), 10)].items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_5, collections[parseInt(i.toString(), 10)].items[0]);\n }\n };\n if (orientation === ItemOrientation.Row) {\n // collection length is 1, then the it wll be covered in shrinked columns\n if (!this.checkValidCollectionLength(group.collections)) {\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n l = this.checkClassicItem(collection.items, l, true);\n if (l === collection.items.length) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canExpandItem(item)) {\n var itemEle = activeContent.querySelector('#' + item.id);\n if (item.type === 'GroupButton') {\n itemEle = activeContent.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, l, itemEle);\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n }\n }\n else {\n for (var k = 0; k < group.collections.length; k++) {\n //If items length is 1 then, it will be handled in shrinked column\n if ((group.collections[parseInt(k.toString(), 10)].items.length > 1)) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var itemEle = activeContent.querySelector('#' + collection.id);\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n if ((classicItems.length > 1) && value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, classicItems[0], itemEle);\n expandItemToMedium(k, classicItems[1], itemEle);\n if (classicItems.length === 3) {\n expandItemToMedium(k, classicItems[2], itemEle);\n }\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n if (shrinkColumns.length > 0) {\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n expandItemToMedium(0, start, shrinkColumn);\n expandItemToMedium(0, l, shrinkColumn);\n // if l == end, then l is the last item, else L is the middle item. If l is middle then call the method for end.\n if (l !== end) {\n expandItemToMedium(0, end, shrinkColumn);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n expandCollectionsToMedium(start);\n expandCollectionsToMedium(m);\n if (m !== end) {\n expandCollectionsToMedium(end);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToLarge = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n if (shrinkColumns.length === 0) {\n return false;\n }\n var expandItemsToLarge = function (start, end, parentEle, middle) {\n var items = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections[0].items;\n var reduce = function (i) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var container = parentEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele_6 = container.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_6 = container.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_6, item);\n parentEle.insertAdjacentElement('beforebegin', container);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n var expandCollectionsToLarge = function (start, end, parentEle, middle) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections;\n var reduce = function (i) {\n var collection = collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var collectionEle = parentEle.querySelector('#' + collection.id);\n var ele_7 = collectionEle.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_7 = collectionEle.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_7, collection.items[0]);\n parentEle.insertAdjacentElement('beforebegin', collectionEle);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-large-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n if (l === end) {\n expandItemsToLarge(start, end, shrinkColumn);\n }\n else {\n expandItemsToLarge(start, end, shrinkColumn, l);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n if (m === end) {\n expandCollectionsToLarge(start, end, shrinkColumn);\n }\n else {\n expandCollectionsToLarge(start, end, shrinkColumn, m);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-large-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n return false;\n };\n Ribbon.prototype.handleContentSize = function (itemEle, isRemoveOverflow) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_GROUP_CONTENT);\n (isRemoveOverflow ? (itemContainer.classList.add(constants.RIBBON_CONTENT_HEIGHT)) : (itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT)));\n };\n Ribbon.prototype.setItemSize = function (itemEle, item) {\n if (itemEle) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_ITEM);\n if (item.type === RibbonItemType.Button) {\n this.ribbonButtonModule.updateButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.DropDown) {\n this.ribbonDropDownModule.updateDropDownSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.SplitButton) {\n this.ribbonSplitButtonModule.updateSplitButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.Template) {\n remove(itemEle);\n this.createTemplateContent(item, itemContainer);\n }\n else if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.updateGroupButtonSize(itemEle, item);\n }\n itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT, constants.RIBBON_LARGE_ITEM, constants.RIBBON_MEDIUM_ITEM, constants.RIBBON_SMALL_ITEM);\n if (item.activeSize === RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((item.activeSize === RibbonItemSize.Medium) ?\n constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n }\n };\n Ribbon.prototype.createOverflowDropdown = function (tabIndex, tabContent, activeContent) {\n var collapseOrder = this.getGroupResizeOrder(true, tabIndex);\n if (collapseOrder.length === 0) {\n return;\n }\n var _loop_1 = function (i) {\n var group = collapseOrder[parseInt(i.toString(), 10)];\n var groupEle = this_1.tabObj.element.querySelector('#' + group.id);\n groupEle.setAttribute('data-expanded-width', activeContent.offsetWidth.toString());\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupOverFlow = this_1.createElement('div', {\n className: constants.RIBBON_GROUP_OVERFLOW + constants.SPACE + constants.RIBBON_LARGE_ITEM,\n id: group.id + constants.OVERFLOW_ID + constants.CONTAINER_ID\n });\n groupEle.insertBefore(groupOverFlow, groupContainer);\n var groupIndex = getIndex(this_1.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n var tab = this_1.tabs[parseInt(tabIndex.toString(), 10)];\n //Expanding the items in the group to their original expanded state\n this_1.checkSmallToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n this_1.checkMediumToLarge(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n var dropdown = this_1.ribbonDropDownModule.createOverFlowDropDown(group.id, group.header, group.groupIconCss, groupContainer, groupOverFlow, this_1.enableRtl);\n this_1.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: true }, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupContainer.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_1.handleContentSize(itemEle);\n this_1.addOverflowEvents(item, itemEle, dropdown);\n }\n }\n }\n };\n var this_1 = this;\n for (var i = 0; ((i < collapseOrder.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n _loop_1(i);\n }\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.removeOverflowDropdown = function (tabContent, activeContent, isClear, tabIndex) {\n if (isClear === void 0) { isClear = false; }\n var expandOrder = this.getGroupResizeOrder(false, tabIndex);\n if (expandOrder.length === 0) {\n return false;\n }\n var _loop_2 = function (i) {\n var group = expandOrder[parseInt(i.toString(), 10)];\n var groupEle = this_2.tabObj.element.querySelector('#' + group.id);\n if (!groupEle) {\n return \"break\";\n } //to handle the rerendering of tabcontrol when a ribbon tab is added/removed\n var width = parseInt(groupEle.getAttribute('data-expanded-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n return { value: true };\n }\n this_2.removeDropdown(group.id);\n var groupIndex = getIndex(this_2.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n this_2.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: false }, true);\n var tab = this_2.tabs[parseInt(tabIndex.toString(), 10)];\n //Shrinking the items in the group to their previous shrinked state (before moving to dropdown)\n this_2.checkLargeToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n this_2.checkMediumToSmall(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_2.handleContentSize(itemEle, true);\n this_2.removeOverflowEvent(item, itemEle);\n }\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < expandOrder.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n return false;\n };\n Ribbon.prototype.removeDropdown = function (groupId) {\n var dropdownElement = this.tabObj.element.querySelector('#' + groupId + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n if (dropdownElement) {\n var groupOverFlow = dropdownElement.parentElement;\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n remove(groupOverFlow);\n }\n };\n Ribbon.prototype.getGroupResizeOrder = function (isCollapse, tabIndex) {\n var _this = this;\n var groups = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n groups = groups.filter(function (e) {\n // (isUndefined(e.isCollapsible) || e.isCollapsible) => check whethe rhte item is collapsible\n // if a isCollapsed property is undefined, then it is considered collapsible and included in collapsible list\n // ((isCollapse && !e.isCollapsed)||(!isCollapse && e.isCollapsed)) => isCollapse !== e.isCollapsed\n return (_this.activeLayout === 'Classic') ? (isUndefined(e.isCollapsible) || e.isCollapsible) && ((isCollapse &&\n isUndefined(e.isCollapsed)) || (!isUndefined(e.isCollapsed) && (isCollapse !== e.isCollapsed))) : true;\n });\n //sort the collapsible groups based on the priority\n groups.sort(function (a, b) { return a.priority - b.priority; });\n //reverse the sorted array to return the array in descending order while collapsing.\n return isCollapse ? groups.reverse() : groups;\n };\n Ribbon.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Ribbon.prototype.clearOverflowDropDown = function (index) {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(index.toString(), 10)].id + constants.CONTENT_ID);\n if (!activeContent) {\n return;\n }\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n this.removeSimplfiedOverflow(activeContent, tabContent, index, true);\n }\n else {\n this.removeOverflowDropdown(activeContent, tabContent, true, index);\n }\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem.getAttribute('data-id');\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var previousIndex = getIndex(this.tabs, (function (tab) { return (tab.id === previousTabId); }));\n nextIndex = nextIndex === -1 ? this.selectedTab : nextIndex;\n var eventArgs = {\n cancel: e.cancel, isInteracted: e.isInteracted, previousIndex: previousIndex, selectedIndex: nextIndex\n };\n this.trigger('tabSelecting', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.destroyScroll();\n if (!_this.isAddRemove && (previousIndex !== -1)) {\n _this.clearOverflowDropDown(previousIndex);\n }\n var selectedTabContent = _this.tabObj.items[parseInt(nextIndex.toString(), 10)].content;\n if ((!selectedTabContent.querySelector('.' + constants.RIBBON_GROUP)) && (_this.tabs[parseInt(nextIndex.toString(), 10)].groups.length !== 0)) {\n var elements = _this.createGroups(_this.tabs[parseInt(nextIndex.toString(), 10)].groups, nextIndex);\n append(elements, selectedTabContent);\n }\n });\n };\n Ribbon.prototype.createTabItems = function (tabs) {\n var _this = this;\n var tabItems = [];\n for (var i = 0; i < tabs.length; i++) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n header.onclick = function () { _this.minimize(false); };\n header.ondblclick = function () { _this.minimize(true); };\n var tab = { header: { text: header }, id: ribbonTab.id, cssClass: ribbonTab.cssClass };\n var content = this.createElement('div', {\n className: tab.cssClass,\n id: ribbonTab.id + constants.CONTENT_ID\n });\n content.classList.add(constants.RIBBON_TAB_ITEM);\n tab.content = content;\n tabItems.push(tab);\n }\n return tabItems;\n };\n Ribbon.prototype.renderInitialTab = function (index) {\n var elements = this.createGroups(this.tabs[parseInt(index.toString(), 10)].groups, index);\n var content = this.tabObj.items[parseInt(index.toString(), 10)].content;\n append(elements, content);\n if (this.activeLayout === 'Simplified') {\n this.element.classList.add(constants.RIBBON_SIMPLIFIED_MODE);\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId) {\n var _this = this;\n var overflowButton = this.createElement('button', {\n id: btnId\n });\n var overflowTarget = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_TARGET,\n attrs: { 'tabindex': '0' }\n });\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n if (ele) {\n args.cancel = true;\n }\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n var isGroupOf;\n overflowButton.onkeydown = overflowButton.onclick = function () { _this.itemIndex = -1; isGroupOf = overflowButton.classList.contains('e-ribbon-overall-of-btn') ? false : true; };\n overflowTarget.onkeydown = function (e) { return (_this.upDownKeyHandler(e, overflowTarget, isGroupOf), _this); };\n return overflowDDB;\n };\n Ribbon.prototype.upDownKeyHandler = function (e, target, isGroupOf) {\n var items;\n if (isGroupOf) {\n items = target.getElementsByClassName('e-ribbon-item');\n }\n else {\n var currentList = target.querySelector('.e-ribbon-of-tab.e-ribbon-active');\n items = currentList.getElementsByClassName('e-ribbon-item');\n }\n var comboBoxEle = items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-control').classList.contains('e-combobox') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;\n var ribbonItem;\n if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {\n if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {\n if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {\n this.itemIndex = 0;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n if (comboBoxEle && e.key === 'Tab') {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {\n this.itemIndex++;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n }\n }\n else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n if (comboBoxEle === null || (e.key === 'Tab')) {\n if (!this.itemIndex || this.itemIndex === -1) {\n this.itemIndex = items.length - 1;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {\n this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n }\n }\n }\n target.setAttribute('index', this.itemIndex.toString());\n }\n var currentItemIndex = parseInt(target.getAttribute('index'), 10);\n var itemType = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').getAttribute('data-control') : null;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {\n if (itemType === 'ColorPicker') {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-split-colorpicker').focus();\n }\n else {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n if (e.key === ' ' && (itemType === 'CheckBox')) {\n var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n var checkBox = getComponent(checkBoxEle, CheckBox);\n this.itemIndex = -1;\n checkBox.click();\n }\n }\n if (((itemType === 'SplitButton') && (e.key === 'ArrowRight' || e.key === 'ArrowLeft'))) {\n if (e.key === 'ArrowRight') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n if (e.key === 'ArrowLeft') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n }\n if (e.key === 'Enter') {\n this.itemIndex = -1;\n }\n };\n Ribbon.prototype.findDisabledItem = function (ribbonItem, items, isIncrease) {\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (isIncrease) {\n if (this.itemIndex === items.length - 1 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = -1;\n }\n }\n else {\n if (this.itemIndex === 0 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = items.length;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isIncrease ? this.itemIndex++ : this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n };\n Ribbon.prototype.removeOverflowButton = function (overflowDDB) {\n if (overflowDDB) {\n var btnEle = overflowDDB.element;\n destroyTooltip(overflowDDB.target);\n overflowDDB.destroy();\n btnEle.remove();\n }\n };\n Ribbon.prototype.removeOverflowEvent = function (item, itemEle) {\n if (itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n }\n }\n };\n Ribbon.prototype.createGroupContainer = function (groupId, groupHeader) {\n var ofGroupContainer = this.createElement('div', {\n className: constants.RIBBON_OF_GROUP_CONTAINER,\n id: groupId + constants.CONTAINER_ID\n });\n var ofGroupHeader = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_HEADER,\n id: groupId + constants.HEADER_ID,\n innerHTML: groupHeader\n });\n ofGroupContainer.append(ofGroupHeader);\n return ofGroupContainer;\n };\n Ribbon.prototype.addExpandCollapse = function () {\n var _this = this;\n this.collapseButton = this.createElement('span', {\n className: constants.RIBBON_COLLAPSE_BUTTON + constants.SPACE + constants.EXPAND_COLLAPSE_ICON,\n id: this.tabObj.element.id + constants.COLLAPSE_BUTTON_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Layout Switcher', 'role': 'button' }\n });\n this.collapseButton.onclick = function () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n };\n Ribbon.prototype.removeExpandCollapse = function () {\n var _this = this;\n var index = getIndex(this.tooltipData, function (e) { return e.id === _this.collapseButton.id; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n this.element.classList.remove(constants.RIBBON_COLLAPSIBLE);\n remove(this.tabObj.element.querySelector('.' + constants.RIBBON_COLLAPSE_BUTTON));\n this.collapseButton = null;\n };\n Ribbon.prototype.reRenderTabs = function (tabs) {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\n for (var key in tabs) {\n var index = parseInt(key, 10);\n var tab = tabs[parseInt(index.toString(), 10)];\n var isNewTab = false;\n for (var j = 0; j < (this.tabObj.items.length); j++) {\n if (this.tabs[parseInt(index.toString(), 10)].id === this.tabObj.items[parseInt(j.toString(), 10)].id) {\n isNewTab = true;\n break;\n }\n }\n if (!isNewTab) {\n this.destroyTabItems(this.tabsInternal);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n if (this.selectedTab >= this.tabs.length) {\n this.selectedTab = this.tabs.length - 1;\n }\n this.tabObj.setProperties({ items: tabItems, selectedItem: this.selectedTab });\n break;\n }\n else {\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n if (groups) {\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n this.tabObj.items[parseInt(index.toString(), 10)].header.text.innerText = ribbonTab.header;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabObj.items[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n }\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\n var group = groups_1[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n }\n }\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.switchLayout = function () {\n this.currentControlIndex = 0;\n this.destroyScroll();\n this.collapseButton.classList.toggle(constants.RIBBON_EXPAND_BUTTON, this.activeLayout === 'Simplified');\n this.element.classList.toggle(constants.RIBBON_SIMPLIFIED_MODE, this.activeLayout === 'Simplified');\n for (var i = 0; i <= (this.tabs.length - 1); i++) {\n var tabIndex = i;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n for (var i_1 = 0; i_1 < groupList.length; i_1++) {\n var group = groupList[parseInt(i_1.toString(), 10)];\n var alignType = groupList[parseInt(i_1.toString(), 10)].orientation;\n if (group.isCollapsed) {\n group.setProperties({ isCollapsed: false }, true);\n this.removeDropdown(group.id);\n }\n else {\n this.checkSmallToMedium(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var shrinkColumns = groupContainer.querySelectorAll('.' + 'e-ribbon-shrink');\n for (var i_2 = 0; i_2 < shrinkColumns.length; i_2++) {\n shrinkColumns[parseInt(i_2.toString(), 10)].remove();\n }\n var groupHeader = groupContainer.querySelector('#' + group.id + constants.HEADER_ID);\n groupHeader.remove();\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n groupContent.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n groupContent.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n groupCollection.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && (item.displayOptions === DisplayMode.Classic)) {\n k++;\n var itemEle_1 = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele = itemEle_1.querySelector('#' + item.id);\n this.destroyFunction(item, ele);\n itemEle_1.remove();\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var size = ((item.allowedSizes === RibbonItemSize.Large) ||\n (item.allowedSizes & RibbonItemSize.Medium)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n size = (!(item.displayOptions & DisplayMode.Simplified) && (item.displayOptions & DisplayMode.Overflow))\n ? RibbonItemSize.Medium : size;\n var itemEle = void 0;\n if (!(item.displayOptions & DisplayMode.Classic)) {\n itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer)[0];\n if (item.displayOptions & DisplayMode.Simplified) {\n groupCollection.append(itemEle);\n }\n }\n else {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)) {\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, true);\n }\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n item.setProperties({ activeSize: size }, true);\n if (itemEle) {\n var ele = itemEle.querySelector('#' + item.id);\n this.setItemSize(ele, item);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n }\n else {\n this.element.classList.remove(constants.RIBBON_OVERFLOW);\n for (var i_3 = 0; i_3 < groupList.length; i_3++) {\n var group = groupList[parseInt(i_3.toString(), 10)];\n var alignType = groupList[parseInt(i_3.toString(), 10)].orientation;\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n if (alignType === 'Row') {\n groupContent.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n groupContent.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (!group.enableGroupOverflow) {\n overflowDDB = this.overflowDDB;\n if (overflowDDB) {\n overflowtarget = this.overflowDDB.target;\n }\n }\n else {\n var overflowDDBEle = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n if (alignType === 'Column') {\n groupCollection.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && !(item.displayOptions & DisplayMode.Classic)) {\n k++;\n var itemEle = void 0;\n if ((item.displayOptions & DisplayMode.Simplified) || (item.displayOptions & DisplayMode.Overflow)) {\n if (item.displayOptions & DisplayMode.Simplified) {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n else {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (itemEle !== null) {\n var ele_8 = itemEle.querySelector('#' + item.id);\n this.destroyFunction(item, ele_8);\n itemEle.remove();\n }\n }\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n if (!(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) {\n var itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex)[0];\n groupCollection.append(itemEle);\n }\n else {\n var itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (!itemEle && overflowtarget) {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, false);\n }\n this.removeOverflowEvent(item, itemEle);\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n if (itemEle) {\n groupCollection.append(itemEle);\n }\n }\n var ele = groupContainer.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = groupContainer.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var itemsize = (item.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (item.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: itemsize }, true);\n this.setItemSize(ele, item);\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n }\n }\n }\n if (this.selectedTab === tabIndex) {\n this.checkOverflow(tabIndex, activeContent);\n }\n }\n }\n if (this.activeLayout === 'Classic') {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.createLauncherIcon = function (groupId, groupContainer) {\n var _this = this;\n var launcherIcon = this.createElement('div', {\n className: constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss ? this.launcherIconCss : constants.RIBBON_LAUNCHER_ICON),\n id: groupId + constants.LAUNCHER_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Launcher Icon', 'role': 'button' }\n });\n groupContainer.appendChild(launcherIcon);\n groupContainer.classList.add(constants.RIBBON_LAUNCHER);\n EventHandler.add(launcherIcon, 'click', this.launcherIconClicked.bind(this, groupId), this);\n EventHandler.add(launcherIcon, 'keydown', function (e) {\n if (e.key === 'Enter') {\n _this.launcherIconClicked(groupId);\n }\n }, this);\n };\n Ribbon.prototype.launcherIconClicked = function (id) {\n var eventArgs = { groupId: id };\n this.trigger('launcherIconClick', eventArgs);\n };\n Ribbon.prototype.createGroups = function (groupList, tabIndex) {\n var groupElements = [];\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n var alignType = group.orientation;\n var groupEle = this.createElement('div', {\n className: group.cssClass,\n id: group.id\n });\n groupEle.classList.add(constants.RIBBON_GROUP);\n groupElements.push(groupEle);\n var groupContainer = this.createElement('div', {\n className: group.cssClass,\n id: group.id + constants.CONTAINER_ID\n });\n groupContainer.classList.add(constants.RIBBON_GROUP_CONTAINER);\n groupEle.appendChild(groupContainer);\n var groupContent = this.createElement('div', {\n className: this.activeLayout === 'Simplified' ? constants.RIBBON_GROUP_CONTENT : (constants.RIBBON_GROUP_CONTENT + constants.SPACE + constants.RIBBON_CONTENT_HEIGHT),\n id: group.id + constants.CONTENT_ID\n });\n groupContent.classList.add(((alignType === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n groupContainer.appendChild(groupContent);\n if (this.activeLayout === 'Classic') {\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n }\n if (group.showLauncherIcon) {\n this.createLauncherIcon(group.id, groupContainer);\n }\n var elements = this.createCollection(group.collections, group.orientation, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer);\n append(elements, groupContent);\n var isItemsHidden = true;\n for (var j = 0; j < elements.length; j++) {\n if (isItemsHidden) {\n for (var k = 0; k < elements[parseInt(j.toString(), 10)].children.length; k++) {\n if (!(elements[parseInt(j.toString(), 10)].children[parseInt(k.toString(), 10)].classList.contains('e-hidden'))) {\n isItemsHidden = false;\n break;\n }\n }\n }\n }\n if (isItemsHidden) {\n groupEle.classList.add('e-hide-group');\n }\n if ((this.activeLayout === 'Simplified') && !(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (initialProps) {\n if (initialProps.hiddenGroups && initialProps.hiddenGroups.length) {\n this.updateGroupProps('hiddenGroups', initialProps, groupEle);\n }\n if (initialProps.disabledGroups && initialProps.disabledGroups.length) {\n this.updateGroupProps('disabledGroups', initialProps, groupEle);\n }\n }\n }\n if (this.initialPropsData[parseInt(tabIndex.toString(), 10)]) {\n delete this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n return groupElements;\n };\n Ribbon.prototype.updateGroupProps = function (key, initialProps, groupEle) {\n // eslint-disable-next-line\n var groupIndex = initialProps[key].indexOf(groupEle.id);\n if (groupIndex !== -1) {\n key === 'hiddenGroups' ? groupEle.classList.add('e-hidden') : groupEle.classList.add('e-disabled');\n }\n };\n Ribbon.prototype.validateItemSize = function () {\n for (var k = 0; k < this.tabs.length; k++) {\n var groupList = this.tabs[parseInt(k.toString(), 10)].groups;\n for (var l = 0; l < groupList.length; l++) {\n var collectionList = groupList[parseInt(l.toString(), 10)].collections;\n var alignType = groupList[parseInt(l.toString(), 10)].orientation;\n for (var i = 0; i < collectionList.length; i++) {\n var items = collectionList[parseInt(i.toString(), 10)].items;\n for (var j = 0; j < items.length; j++) {\n var ribbonitem = items[parseInt(j.toString(), 10)];\n if (!ribbonitem.allowedSizes || (ribbonitem.allowedSizes === 0)) {\n ribbonitem.setProperties({\n allowedSizes: (RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n }, true);\n }\n if ((ribbonitem.type === 'ColorPicker') && (ribbonitem.allowedSizes !== RibbonItemSize.Small)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Small }, true);\n }\n else if ((ribbonitem.type === 'ComboBox' || ribbonitem.type === 'CheckBox') &&\n (ribbonitem.allowedSizes !== RibbonItemSize.Medium)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Medium }, true);\n }\n else if (((alignType === 'Column') && (items.length > 1)) || ((alignType === 'Row') && (collectionList.length > 1))) {\n if (ribbonitem.allowedSizes & RibbonItemSize.Large) {\n // To remove large size, perform 'and' with 011(3).\n var sizeVal = ribbonitem.allowedSizes & (RibbonItemSize.Small | RibbonItemSize.Medium);\n sizeVal = sizeVal ? sizeVal : RibbonItemSize.Medium;\n ribbonitem.setProperties({ allowedSizes: sizeVal }, true);\n }\n }\n var itemsize = (ribbonitem.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (ribbonitem.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonitem.setProperties({ activeSize: itemsize }, true);\n }\n }\n }\n }\n };\n Ribbon.prototype.createCollection = function (collectionList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var collectionElements = [];\n for (var i = 0; i < collectionList.length; i++) {\n var collection = collectionList[parseInt(i.toString(), 10)];\n var collectionEle = this.createElement('div', {\n className: collection.cssClass,\n id: collection.id\n });\n collectionEle.classList.add(constants.RIBBON_COLLECTION);\n collectionEle.classList.add(((alignType !== 'Column') || (this.activeLayout === 'Simplified')) ?\n constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n collectionElements.push(collectionEle);\n var elements = this.createItems(collection.items, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer);\n append(elements, collectionEle);\n if ((alignType === 'Row') && (i === 2)) {\n break;\n }\n }\n return collectionElements;\n };\n Ribbon.prototype.createRibbonItem = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.createButton(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.createDropDown(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.createSplitButton(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.createCheckBox(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.createColorPicker(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.createComboBox(item, itemEle);\n break;\n case 'Template':\n this.createTemplateContent(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.createGroupButton(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createItems = function (itemList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var _a;\n var itemElements = [];\n for (var i = 0; i < itemList.length; i++) {\n var item = itemList[parseInt(i.toString(), 10)];\n //To stop rendering of items with simplified mode position type as none\n var flag = true;\n while (flag &&\n (((this.activeLayout === 'Simplified') && !(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) ||\n ((this.activeLayout === 'Classic') && !(item.displayOptions & DisplayMode.Classic)))) {\n i++;\n if (i < itemList.length) {\n item = itemList[parseInt(i.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var itemEle = this.createElement('div', {\n className: item.cssClass,\n id: item.id + constants.CONTAINER_ID\n });\n (_a = itemEle.classList).add.apply(_a, [constants.RIBBON_ITEM].concat((item.disabled ? [constants.DISABLED_CSS] : [])));\n // To avoid undefined items condition is added\n if (item.ribbonTooltipSettings && isTooltipPresent(item.ribbonTooltipSettings)) {\n itemEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemEle.id, data: item.ribbonTooltipSettings });\n }\n var size = item.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((item.allowedSizes === RibbonItemSize.Large) || (item.allowedSizes & RibbonItemSize.Medium) ||\n (item.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemEle.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemEle.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (initialProps && initialProps.hiddenItems && initialProps.hiddenItems.length) {\n var itemIndex = initialProps.hiddenItems.indexOf(item.id);\n if (itemIndex !== -1) {\n itemEle.classList.add('e-hidden');\n }\n }\n this.createRibbonItem(item, itemEle);\n if ((this.activeLayout === 'Simplified') && ((item.displayOptions === DisplayMode.Overflow) || (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)))) {\n this.createOverflowPopup(item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, isGroupOF, true);\n }\n }\n else {\n // For normal mode and Simplified mode position type as Group and Auto\n itemElements.push(itemEle);\n }\n if ((alignType === 'Column') && (i === 2)) {\n break;\n }\n }\n return itemElements;\n };\n Ribbon.prototype.createHelpPaneTemplate = function () {\n if (this.helpPaneTemplate) {\n var templateName = 'helpPaneTemplate';\n this.clearTemplate([templateName]);\n this.ribbonTempEle = this.createElement('div', {\n className: constants.RIBBON_HELP_TEMPLATE,\n id: this.element.id + constants.RIBBON_HELP_PANE_TEMPLATE_ID\n });\n var templateFunction = getTemplateFunction(this.helpPaneTemplate);\n append(templateFunction({}, this, templateName, 'helpPaneTemplate', this.isStringTemplate), this.ribbonTempEle);\n var tabEle = this.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n toolbarEle.after(this.ribbonTempEle);\n tabEle.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, this.ribbonTempEle.offsetWidth + 'px');\n this.renderReactTemplates();\n }\n };\n Ribbon.prototype.createTemplateContent = function (item, itemElement) {\n var itemEle = this.createElement('div', {\n className: item.cssClass ? (constants.RIBBON_TEMPLATE + constants.SPACE + item.cssClass) : constants.RIBBON_TEMPLATE,\n id: item.id\n });\n if (item.disabled) {\n itemEle.classList.add(constants.DISABLED_CSS);\n itemEle.setAttribute('disabled', '');\n }\n itemElement.appendChild(itemEle);\n this.renderItemTemplate(item, itemEle);\n };\n Ribbon.prototype.renderItemTemplate = function (item, itemElement) {\n var templateName = 'ribbon' + item.id + 'itemTemplate';\n this.clearTemplate([templateName]);\n var templateFunction = getTemplateFunction(item.itemTemplate);\n append(templateFunction({ activeSize: RibbonItemSize[item.activeSize] }, this, templateName, (item.id + 'itemTemplate'), this.isStringTemplate), itemElement);\n this.renderReactTemplates();\n };\n Ribbon.prototype.checkID = function (list, type, initId) {\n var key = type === 'tab' ? constants.TAB_ID : type === 'group' ? constants.GROUP_ID :\n type === 'collection' ? constants.COLLECTION_ID : constants.ITEM_ID;\n for (var i = 0; i < list.length; i++) {\n var listitem = list[parseInt(i.toString(), 10)];\n if (!listitem.id) {\n listitem.setProperties({ id: initId + key + (this.idIndex++) }, true);\n }\n switch (type) {\n case 'tab':\n listitem.setProperties({ groups: this.checkID(listitem.groups, 'group', listitem.id) }, true);\n break;\n case 'group':\n listitem.setProperties({ collections: this.checkID(listitem.collections, 'collection', listitem.id) }, true);\n break;\n case 'collection':\n listitem.setProperties({ items: this.checkID(listitem.items, 'item', listitem.id) }, true);\n break;\n default:\n break;\n }\n }\n return list;\n };\n Ribbon.prototype.updateCommonProperty = function (commonProp) {\n this.tabObj.setProperties(commonProp);\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.setCommonProperties(commonProp);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.setCommonProperties(commonProp);\n }\n for (var i = 0; i < this.tabs.length; i++) {\n var tab = this.tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n if (contentEle.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n if (dropdown) {\n updateTooltipProp(dropdown.target, commonProp);\n dropdown.setProperties(commonProp);\n }\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : item.type === RibbonItemType.GroupButton ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id);\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n if (item.type === 'DropDown') {\n this.updatePopupItems(item, dropdown.target, group.enableGroupOverflow, true);\n }\n }\n }\n if (ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i_4 = 0; i_4 < item.groupButtonSettings.items.length; i_4++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_4);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateCommonProperty(ele, 'dropdown-btn', commonProp);\n for (var i_5 = 0; i_5 < item.groupButtonSettings.items.length; i_5++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_5);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else {\n updateCommonProperty(ele, moduleName, commonProp);\n }\n }\n else if (!isNullOrUndefined(commonProp.enableRtl)) {\n ele.classList.toggle(constants.RTL_CSS, commonProp.enableRtl);\n }\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.removeLauncherIcon = function (groupId, dropdownElement, contentEle) {\n var containerId = groupId + constants.CONTAINER_ID;\n var containerEle = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, containerId) : contentEle.querySelector('#' + containerId);\n if (containerEle) {\n containerEle.classList.remove(constants.RIBBON_LAUNCHER);\n var launcherIcon = containerEle.querySelector('#' + groupId + constants.LAUNCHER_ID);\n remove(launcherIcon);\n }\n };\n Ribbon.prototype.destroyTabItems = function (tabs) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n if (group.showLauncherIcon) {\n this.removeLauncherIcon(group.id, dropdownElement, contentEle);\n }\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) :\n contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown ? dropdown.target.querySelector('#' + item.id) : null;\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if ((this.activeLayout === RibbonLayout.Classic) && dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n else if ((this.activeLayout === RibbonLayout.Simplified) && group.enableGroupOverflow && dropdownElement) {\n this.removeOverflowButton(dropdown);\n }\n }\n }\n if (this.overflowDDB) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.destroyFunction = function (item, ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName === 'colorpicker') {\n this.ribbonColorPickerModule.unwireColorPickerEvents(ele);\n }\n else if (moduleName === 'group-btn') {\n if (this.activeLayout === 'Classic') {\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (btnEle) {\n destroyControl(btnEle, 'btn');\n }\n }\n }\n else {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n var _loop_3 = function (i) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings) {\n var groupButtonID_1 = item.id + constants.RIBBON_GROUP_BUTTON_ID + i;\n var index = getIndex(this_3.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_3.tooltipData.splice(index, 1);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_3(i);\n }\n }\n else if (moduleName !== 'template') {\n destroyControl(ele, moduleName);\n }\n if (item.ribbonTooltipSettings) {\n var index = getIndex(this.tooltipData, function (e) { return e.id === item.id + constants.CONTAINER_ID; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n }\n if (item.type === 'GroupButton') {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n };\n Ribbon.prototype.getItemModuleName = function (item) {\n switch (item.type) {\n case 'Button':\n return 'btn';\n case 'DropDown':\n return 'dropdown-btn';\n case 'SplitButton':\n return 'split-btn';\n case 'CheckBox':\n return 'checkbox';\n case 'ColorPicker':\n return 'colorpicker';\n case 'ComboBox':\n return 'combobox';\n case 'GroupButton':\n return 'group-btn';\n default:\n return 'template';\n }\n };\n Ribbon.prototype.clearOverflowResize = function () {\n this.destroyScroll();\n this.clearOverflowDropDown(this.selectedTab);\n var tab = this.tabs[this.selectedTab];\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n for (var j = 0; (j < tab.groups.length); j++) {\n this.checkSmallToMedium(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n this.checkMediumToLarge(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n }\n };\n /**\n * Refreshes the layout.\n *\n * @returns {void}\n */\n Ribbon.prototype.refreshLayout = function () {\n this.resizeHandler();\n };\n /**\n * Selects the tab\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.selectTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId) {\n this.showHideTab(tabId, false);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId) {\n this.showHideTab(tabId, true);\n };\n Ribbon.prototype.showHideTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n };\n /**\n * Enables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableTab = function (tabId) {\n this.enableDisableTab(tabId, true);\n };\n /**\n * Disables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableTab = function (tabId) {\n this.enableDisableTab(tabId, false);\n };\n Ribbon.prototype.enableDisableTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.enableTab(index, value);\n };\n /**\n * Adds the ribbon tab.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model\n * @param {string} targetId - Gets the ID of the target tab to add the new tab.\n * @param {boolean} isAfter - Defines whether the tab is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addTab = function (tab, targetId, isAfter) {\n var index = targetId ? getIndex(this.tabs, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? this.tabs.length : (index + (isAfter ? 1 : 0));\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 0, tab);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.checkID([this.tabs[parseInt(index.toString(), 10)]], 'tab', this.element.id);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItem = this.createTabItems([tab]);\n this.tabObj.addTab(tabItem, index);\n };\n /**\n * Removes the ribbon tab.\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.removeTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n if (groups && (contentEle.innerHTML !== '')) {\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\n var group = groups_2[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 1);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.tabObj.removeTab(index);\n };\n /**\n * Adds the ribbon group.\n *\n * @param {string} tabId - Gets the tab ID.\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @param {string} targetId - Gets the ID of the target group to add the new group.\n * @param {boolean} isAfter - Defines whether the group is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addGroup = function (tabId, group, targetId, isAfter) {\n var tabIndex = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (tabIndex === -1) {\n return;\n }\n if (this.selectedTab === tabIndex) {\n this.clearOverflowResize();\n }\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var ribbonGroups = tab.groups.slice();\n var index = targetId ? getIndex(ribbonGroups, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonGroups.length : (index + (isAfter ? 1 : 0));\n ribbonGroups.splice(index, 0, group);\n tab.setProperties({ groups: ribbonGroups }, true);\n this.checkID([tab.groups[parseInt(index.toString(), 10)]], 'group', tabId);\n this.validateItemSize();\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var element = this.createGroups([tab.groups[parseInt(index.toString(), 10)]], tabIndex)[0];\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.append(element);\n }\n }\n if (this.selectedTab === tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon group.\n *\n * @param {string} groupId -Gets the group ID.\n * @returns {void}\n */\n Ribbon.prototype.removeGroup = function (groupId) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n var groupEle = contentEle.querySelector('#' + groupId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroups = this.tabs[itemProp.tabIndex].groups.slice();\n ribbonGroups.splice(itemProp.groupIndex, 1);\n this.tabs[itemProp.tabIndex].setProperties({ groups: ribbonGroups }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideGroup = function (groupID) {\n this.showHideGroup(groupID, true);\n };\n /**\n * Shows a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showGroup = function (groupID) {\n this.showHideGroup(groupID, false);\n };\n Ribbon.prototype.showHideGroup = function (groupID, isHidden) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n if (groupEle) {\n isHidden ? groupEle.classList.add('e-hidden') : groupEle.classList.remove('e-hidden');\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, groupID, 'hiddenGroups', isHidden);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hidden') : overflowtarget.classList.remove('e-hidden');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hidden') : grpContainer.classList.remove('e-hidden');\n }\n }\n }\n this.refreshLayout();\n };\n /**\n * Disables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableGroup = function (groupID) {\n this.enableDisableGroup(groupID, true);\n };\n /**\n * Enables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableGroup = function (groupID) {\n this.enableDisableGroup(groupID, false);\n };\n Ribbon.prototype.enableDisableGroup = function (groupID, isDisabled) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n if (groupEle) {\n isDisabled ? groupEle.classList.add('e-disabled') : groupEle.classList.remove('e-disabled');\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, groupID, 'disabledGroups', isDisabled);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isDisabled ? overflowtarget.classList.add('e-disabled') : overflowtarget.classList.remove('e-disabled');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isDisabled ? grpContainer.classList.add('e-disabled') : grpContainer.classList.remove('e-disabled');\n }\n }\n }\n };\n /**\n * adds the ribbon collection.\n *\n * @param {string} groupId - Gets the ribbon group ID.\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @param {string} targetId - Gets the ID of the target collection to add the new collection.\n * @param {boolean} isAfter - Defines whether the collection is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addCollection = function (groupId, collection, targetId, isAfter) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Row') && (itemProp.group.collections.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonCollections = itemProp.group.collections.slice();\n var index = targetId ? getIndex(ribbonCollections, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonCollections.length : (index + (isAfter ? 1 : 0));\n ribbonCollections.splice(index, 0, collection);\n itemProp.group.setProperties({ collections: ribbonCollections }, true);\n this.checkID([itemProp.group.collections[parseInt(index.toString(), 10)]], 'collection', groupId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var collection_1 = itemProp.group.collections[parseInt(index.toString(), 10)];\n var element = this.createCollection([collection_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.querySelector('#' + groupId + constants.CONTENT_ID).append(element);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon collection.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @returns {void}\n */\n Ribbon.prototype.removeCollection = function (collectionId) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n var groupEle = contentEle.querySelector('#' + collectionId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroup = itemProp.group;\n var ribbonCollections = ribbonGroup.collections.slice();\n ribbonCollections.splice(itemProp.collectionIndex, 1);\n ribbonGroup.setProperties({ collections: ribbonCollections }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Adds ribbon item.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {string} targetId - Gets the ID of the target item to add the new item.\n * @param {boolean} isAfter - Defines whether the item is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addItem = function (collectionId, item, targetId, isAfter) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Column') && (itemProp.collection.items.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonItems = itemProp.collection.items.slice();\n var index = targetId ? getIndex(ribbonItems, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonItems.length : (index + (isAfter ? 1 : 0));\n ribbonItems.splice(index, 0, item);\n itemProp.collection.setProperties({ items: ribbonItems }, true);\n this.checkID([itemProp.collection.items[parseInt(index.toString(), 10)]], 'item', collectionId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (contentEle.innerHTML !== '') {\n var item_1 = itemProp.collection.items[parseInt(index.toString(), 10)];\n var element = this.createItems([item_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.closest('.' + constants.RIBBON_ITEM).insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n if (element) {\n contentEle.querySelector('#' + collectionId).append(element);\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.removeItem = function (itemId) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n var item = itemProp.item;\n this.removeItemElement(contentEle, item, dropdown);\n }\n var ribbonCollection = itemProp.collection;\n var ribbonItems = ribbonCollection.items;\n ribbonItems.splice(itemProp.itemIndex, 1);\n ribbonCollection.setProperties({ items: ribbonItems }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideItem = function (itemId) {\n this.showHideItem(itemId, true);\n };\n /**\n * Shows a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showItem = function (itemId) {\n this.showHideItem(itemId, false);\n };\n Ribbon.prototype.showHideItem = function (itemId, isHidden) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n isHidden ? itemEle.classList.add('e-hidden') : itemEle.classList.remove('e-hidden');\n this.checkHiddenItems(itemProp.group, isHidden, itemProp.tabIndex);\n this.refreshLayout();\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, itemId, 'hiddenItems', isHidden);\n }\n };\n Ribbon.prototype.updateInitialProps = function (tabIndex, id, key, isInsert) {\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (!initialProps) {\n this.initialPropsData[parseInt(tabIndex.toString(), 10)] = {};\n initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n if (initialProps) {\n /* eslint-disable */\n if (!initialProps[key])\n initialProps[key] = [];\n var itemIndex = initialProps[key].indexOf(id);\n if (isInsert) {\n if (itemIndex === -1)\n initialProps[key].push(id);\n }\n else {\n if (itemIndex !== -1)\n initialProps[key].splice(itemIndex, 1);\n initialProps[key].length === 0 && delete initialProps[key];\n /* eslint-enable */\n if (Object.keys(initialProps).length === 0) {\n delete this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n }\n }\n };\n Ribbon.prototype.checkHiddenItems = function (group, isHidden, tabIndex) {\n var isItemsHidden = true;\n var isEmptyCollection;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var groupEle = contentEle.querySelector('#' + group.id);\n if (isHidden) {\n for (var i = 0; i < group.collections.length; i++) {\n if (isItemsHidden) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n for (var j = 0; j < collection.items.length; j++) {\n var item = collection.items[parseInt(j.toString(), 10)];\n var itemEle = void 0;\n if (item.type === 'GroupButton') {\n var itemProp = getItem(this.tabs, item.id);\n itemEle = getItemElement(this, item.id + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n itemEle = getItemElement(this, item.id);\n }\n var itemContainer = itemEle ? itemEle.closest('.e-ribbon-item') : null;\n if (!(itemContainer.classList.contains('e-hidden'))) {\n isItemsHidden = false;\n break;\n }\n }\n }\n }\n if (isItemsHidden) {\n groupEle.classList.add('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n }\n else {\n groupEle.classList.remove('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n if (this.activeLayout === 'Simplified' && !group.enableGroupOverflow) {\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n groupEle.classList[isEmptyCollection ? 'add' : 'remove']('e-ribbon-emptyCollection');\n }\n }\n };\n Ribbon.prototype.checkOverflowItems = function (isHidden, contentEle, isGroupOF, tabIndex, groupID) {\n var overflowDDB;\n var overflowtarget;\n if (isGroupOF) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hide-group') : overflowtarget.classList.remove('e-hide-group');\n }\n }\n else {\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hide-group') : grpContainer.classList.remove('e-hide-group');\n }\n }\n }\n }\n };\n /**\n * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model.\n * @returns {void}\n */\n Ribbon.prototype.updateTab = function (tab) {\n var tabId = tab.id;\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n if (groups && (contentEle.innerHTML !== '')) {\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabs[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n }\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_3 = groups; _i < groups_3.length; _i++) {\n var group = groups_3[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML === '') {\n // Check whether group is passed by the user and sets the updated values.\n if (tab.groups) {\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n if (this.selectedTab === index) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (tab.cssClass) {\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n tabEle.querySelector('#' + tabId + constants.HEADER_ID).innerText = ribbonTab.header;\n }\n }\n };\n /**\n * group - Gets the ribbon group to be updated. The id of the group is a required property. Other properties are optional.\n *\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @returns {void}\n */\n Ribbon.prototype.updateGroup = function (group) {\n var groupId = group.id;\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (group.cssClass) {\n if (itemProp.group.cssClass) {\n groupEle.classList.remove(itemProp.group.cssClass);\n if (groupContainer) {\n groupContainer.classList.remove(itemProp.group.cssClass);\n }\n }\n }\n // Check whether collections or orientation is passed by the user, and if it is, then remove the old values.\n if (group.collections || group.orientation) {\n if (itemProp.group.collections || itemProp.group.orientation) {\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n var collectionElements = groupEle.querySelectorAll('.e-ribbon-collection');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n collectionElements.forEach(function (collectionEle) { collectionEle.remove(); });\n if (group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n var removeCss = groupContent.classList.value.match(/(e-ribbon-[column|row]+)/g);\n if (removeCss) {\n removeClass([groupContent], removeCss);\n }\n }\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n }\n var ribbongroup = itemProp.group;\n ribbongroup.setProperties(group, true);\n ribbongroup.setProperties({ collections: this.checkID(ribbongroup.collections, 'collection', ribbongroup.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n // Check whether showLauncherIcon or orientation is passed by the user and sets the updated values.\n if (group.showLauncherIcon) {\n this.createLauncherIcon(ribbongroup.id, groupContainer);\n }\n // Check whether collections or orientation is passed by the user and sets the updated values.\n if (group.collections || group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n groupContent.classList.add(((ribbongroup.orientation === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n var elements = this.createCollection(ribbongroup.collections, ribbongroup.orientation, ribbongroup.id, ribbongroup.header, ribbongroup.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, groupContent);\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (group.cssClass) {\n groupEle.classList.add(ribbongroup.cssClass);\n if (groupContainer) {\n groupContainer.classList.add(ribbongroup.cssClass);\n }\n }\n // Check whether header is passed by the user and sets the updated values.\n if (group.header) {\n if (this.activeLayout === RibbonLayout.Simplified && !group.enableGroupOverflow) {\n var overflowHeader = dropdown.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n else if (this.activeLayout === RibbonLayout.Classic && !ribbongroup.isCollapsed) {\n groupEle.querySelector('.e-ribbon-group-header').innerText = ribbongroup.header;\n }\n else if (this.activeLayout === RibbonLayout.Classic && ribbongroup.isCollapsed) {\n var overflowEle = groupEle.querySelector('#' + ribbongroup.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n // need to set instance for dropdown\n var dropDownBtn = getInstance(overflowEle, DropDownButton);\n var overflowHeader = dropDownBtn.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n }\n }\n };\n /**\n * collection - Gets the ribbon collection to be updated. The id of the collection is a required property. Other properties are optional.\n *\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @returns {void}\n */\n Ribbon.prototype.updateCollection = function (collection) {\n var collectionId = collection.id;\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var collectionEle = contentEle.querySelector('#' + collectionId);\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (collection.cssClass) {\n if (itemProp.collection.cssClass) {\n collectionEle.classList.remove(itemProp.collection.cssClass);\n }\n }\n if (collection.items) {\n if (itemProp.collection.items) {\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n }\n }\n var ribboncollection = itemProp.collection;\n ribboncollection.setProperties(collection, true);\n ribboncollection.setProperties({ items: this.checkID(ribboncollection.items, 'item', ribboncollection.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (collection.items) {\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var elements = this.createItems(ribboncollection.items, itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, collectionEle);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (collection.cssClass) {\n collectionEle.classList.add(ribboncollection.cssClass);\n }\n };\n /**\n * item - Gets the ribbon item to be updated. The id of the item is a required property. Other properties are optional.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n */\n Ribbon.prototype.updateItem = function (item) {\n var itemId = item.id;\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + itemProp.group.id);\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n if (this.activeLayout === RibbonLayout.Simplified && itemProp.item.displayOptions === DisplayMode.Overflow) {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = dropdown.target.querySelector('#' + itemId);\n if (item.displayOptions && item.displayOptions !== DisplayMode.Overflow) {\n var collectionEle = groupContainer.querySelector('#' + itemProp.collection.id);\n if (collectionEle) {\n collectionEle.appendChild(itemContainer);\n }\n }\n }\n else {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = contentEle.querySelector('#' + itemId);\n if (itemProp.item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Classic) {\n itemEle = contentEle.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (this.activeLayout === RibbonLayout.Simplified && item.displayOptions === DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n if ((itemProp.item.type === RibbonItemType.DropDown) || (itemProp.item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(itemProp.item, itemContainer, itemProp.group.enableGroupOverflow, true);\n }\n }\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (item.cssClass) {\n if (itemProp.item.cssClass) {\n itemContainer.classList.remove(itemProp.item.cssClass);\n }\n }\n this.destroyFunction(itemProp.item, itemEle);\n itemEle.remove();\n var removeCss = itemContainer.classList.value.match(/(e-ribbon-[large|medium|small]+-item)/g);\n if (removeCss) {\n removeClass([itemContainer], removeCss);\n }\n }\n var ribbonItem = itemProp.item;\n ribbonItem.setProperties(item, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n if (item.cssClass) {\n itemContainer.classList.add(ribbonItem.cssClass);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n };\n Ribbon.prototype.removeItemElement = function (contentEle, item, dropdown) {\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id) : null;\n if (item.type === 'GroupButton') {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n if (item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Simplified) {\n document.getElementById(item.id + constants.CONTAINER_ID).remove();\n }\n else {\n ele.closest('#' + item.id + constants.CONTAINER_ID).remove();\n }\n }\n };\n /**\n * Enables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.enableItem = function (itemId) {\n this.enableDisableItem(itemId, false);\n };\n /**\n * Disables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.disableItem = function (itemId) {\n this.enableDisableItem(itemId, true);\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n var moduleName = this.getItemModuleName(itemProp.item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateControlDisabled(ele, 'dropdown-btn', isDisabled);\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = document.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n this.destroyTabItems(this.tabs);\n if (!this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n this.collapseButton = undefined;\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n }\n _super.prototype.destroy.call(this);\n this.tabObj.destroy();\n this.tabObj = undefined;\n this.initialPropsData = {};\n remove(this.element.querySelector('#' + this.element.id + constants.TAB_ID));\n this.element.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.element.style.removeProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH);\n this.element.style.removeProperty('width');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(constants.SPACE));\n }\n this.element.classList.remove(constants.RTL_CSS, constants.RIBBON_SIMPLIFIED_MODE, constants.RIBBON_OVERFLOW, constants.RIBBON_COLLAPSIBLE, constants.RIBBON_MINIMIZE, 'e-rbn');\n this.unwireEvents();\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RibbonModel} newProp - Specifies new properties\n * @param {RibbonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Ribbon.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _a, _b;\n for (var _i = 0, _c = Object.keys(newProp); _i < _c.length; _i++) {\n var prop = _c[_i];\n switch (prop) {\n case 'activeLayout':\n this.switchLayout();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n (_a = this.element.classList).remove.apply(_a, oldProp.cssClass.split(constants.SPACE));\n }\n if (newProp.cssClass) {\n (_b = this.element.classList).add.apply(_b, newProp.cssClass.split(constants.SPACE));\n }\n break;\n case 'isMinimized':\n this.element.classList.toggle(constants.RIBBON_MINIMIZE, this.isMinimized);\n this.tabObj.element.querySelector('.e-content').style.display = this.isMinimized ? 'none' : 'block';\n if (!this.isMinimized) {\n this.refreshLayout();\n }\n break;\n case 'locale':\n this.updateCommonProperty({ locale: this.locale });\n break;\n case 'enablePersistence':\n this.updateCommonProperty({ enablePersistence: this.enablePersistence });\n break;\n case 'enableRtl':\n this.element.classList.toggle(constants.RTL_CSS, this.enableRtl);\n this.updateCommonProperty({ enableRtl: newProp.enableRtl });\n if (this.scrollModule) {\n this.scrollModule.setProperties({ enableRtl: newProp.enableRtl });\n }\n break;\n case 'launcherIconCss':\n for (var i = 0; i < this.tabs.length; i++) {\n var tabContent = this.tabObj.items[parseInt(i.toString(), 10)].content;\n var tab = this.tabs[parseInt(i.toString(), 10)];\n if (tabContent.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _d = 0, _e = tab.groups; _d < _e.length; _d++) {\n var group = _e[_d];\n if (group.showLauncherIcon) {\n var className = constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss || constants.RIBBON_LAUNCHER_ICON);\n if (group.isCollapsed) {\n var element = tabContent.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var dropdown = getComponent(element, DropDownButton);\n var launcherIconEle = dropdown.target.querySelector('#' + group.id + constants.LAUNCHER_ID);\n launcherIconEle.className = className;\n }\n else {\n var element = tabContent.querySelector('#' + group.id + constants.LAUNCHER_ID);\n element.className = className;\n }\n }\n }\n }\n }\n break;\n case 'selectedTab':\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n break;\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'width':\n this.element.style.width = formatUnit(newProp.width);\n this.refreshLayout();\n break;\n case 'fileMenu':\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.updateFileMenu(this.fileMenu);\n }\n var toolbarEle = this.tabObj['tbObj'];\n toolbarEle.refreshOverflow();\n break;\n case 'backStageMenu':\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.updateBackStageMenu(this.backStageMenu);\n }\n var toolbarElement = this.tabObj['tbObj'];\n toolbarElement.refreshOverflow();\n break;\n case 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n case 'hideLayoutSwitcher':\n this.hideLayoutSwitcher ? this.removeExpandCollapse() : this.addExpandCollapse();\n break;\n }\n }\n };\n var Ribbon_1;\n __decorate([\n Property('Classic')\n ], Ribbon.prototype, \"activeLayout\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, FileMenuSettings)\n ], Ribbon.prototype, \"fileMenu\", void 0);\n __decorate([\n Complex({}, BackStageMenu)\n ], Ribbon.prototype, \"backStageMenu\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"launcherIconCss\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"isMinimized\", void 0);\n __decorate([\n Property('en-us')\n ], Ribbon.prototype, \"locale\", void 0);\n __decorate([\n Property(0)\n ], Ribbon.prototype, \"selectedTab\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Ribbon.prototype, \"tabAnimation\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], Ribbon.prototype, \"tabs\", void 0);\n __decorate([\n Property('100%')\n ], Ribbon.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"helpPaneTemplate\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"hideLayoutSwitcher\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelecting\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelected\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonExpanding\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonCollapsing\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.addFileMenuTooltip(fileMenuOptions);\n }\n else {\n this.createFileMenu(fileMenuOptions);\n }\n }\n else if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonFileMenu.prototype.destroyMenu = function () {\n if (this.menuctrl) {\n this.menuctrl.destroy();\n this.menuctrl = null;\n }\n };\n RibbonFileMenu.prototype.destroyDDB = function () {\n this.removeFileMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.fileMenuDDB.destroy();\n this.fileMenuDDB = null;\n remove(this.ddbElement);\n this.ddbElement = null;\n };\n RibbonFileMenu.prototype.removeFileMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.ddbElement.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to FileMenu.\n *\n * @param {MenuItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.addItems = function (items, target, isAfter, isUniqueId) {\n if (isAfter) {\n this.menuctrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuctrl.insertBefore(items, target, isUniqueId);\n }\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Remove items from FileMenu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.removeItems = function (items, isUniqueId) {\n this.menuctrl.removeItems(items, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Enable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be enabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.enableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, true, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Disable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be disabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.disableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, false, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Update items in FileMenu.\n *\n * @param {MenuItem} item - Gets the item to be updated.\n * @param {boolean} id - Gets the id of the item to be updated.\n * @param {boolean} isUniqueId - Gets whether the id provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.setItem = function (item, id, isUniqueId) {\n this.menuctrl.setItem(item, id, isUniqueId);\n this.menuctrl.refresh();\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n return RibbonFileMenu;\n}());\nexport { RibbonFileMenu };\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})();\nimport { remove, append, Component, EventHandler } from '@syncfusion/ej2-base';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex } from '../base/index';\nimport { getTemplateFunction, isTooltipPresent } from '../base/utils';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonBackstage = /** @class */ (function (_super) {\n __extends(RibbonBackstage, _super);\n function RibbonBackstage(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.render = function () {\n // render code\n };\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.preRender = function () {\n // pre render code\n };\n RibbonBackstage.prototype.getPersistData = function () {\n return '';\n };\n /**\n * This method is abstract member of the Component<HTMLElement>.\n *\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.onPropertyChanged = function () {\n // onProperty changes code\n };\n RibbonBackstage.prototype.getModuleName = function () {\n return 'ribbonBackstage';\n };\n RibbonBackstage.prototype.destroy = function () {\n if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates Backstage Menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.createBackStage = function (backStageOptions) {\n var _this = this;\n if (!backStageOptions.visible) {\n return;\n }\n this.backstageButtonEle = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.backstageButtonEle, toolbarEle);\n this.backstageButton = new Button({\n content: backStageOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE,\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.backstageButtonEle.offsetWidth + 'px');\n }\n }, this.backstageButtonEle);\n this.createBackStagePopup(backStageOptions);\n if (this.parent.backStageMenu.template) {\n this.createBackStageTemplate(this.parent.backStageMenu.template);\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n if (this.menuCtrl) {\n this.checkMenuItems(this.menuCtrl.items);\n }\n if (this.footerMenuCtrl) {\n this.checkMenuItems(this.footerMenuCtrl.items);\n }\n }\n this.backstageButtonEle.onclick = function (e) {\n e.stopPropagation();\n _this.showBackstage();\n _this.popupHTMLElement.classList.add(constants.RIBBON_BACKSTAGE_OPEN);\n var menuItem = _this.menuWrapper.querySelector('.e-menu-item.e-selected');\n if (menuItem) {\n menuItem.classList.remove('e-selected');\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (!item.isFooter && _this.menuCtrl.items[0].text === item.text) {\n var firstMenuEle = _this.popupHTMLElement.querySelector('#' + _this.menuCtrl.items[0].id);\n if (firstMenuEle) {\n firstMenuEle.classList.add('e-selected');\n firstMenuEle.focus();\n }\n _this.createBackStageContent(_this.menuCtrl.items[0].id, item.content);\n break;\n }\n else {\n continue;\n }\n }\n };\n this.parent.tabObj.refreshActiveTabBorder();\n this.addBackStageMenuTooltip(backStageOptions);\n EventHandler.add(document, 'click', this.onClickEvent, this);\n };\n RibbonBackstage.prototype.onClickEvent = function (e) {\n var targetEle = e.target;\n if (this.popupHTMLElement.contains(targetEle)) {\n return;\n }\n else {\n this.hideBackstage();\n }\n };\n RibbonBackstage.prototype.addBackStageMenuTooltip = function (backStageOptions) {\n if (isTooltipPresent(backStageOptions.ribbonTooltipSettings)) {\n this.backstageButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.backstageButtonEle.id, data: backStageOptions.ribbonTooltipSettings });\n }\n };\n RibbonBackstage.prototype.checkMenuItems = function (backStageItems) {\n for (var i = 0; i < backStageItems.length; i++) {\n var item = backStageItems[parseInt(i.toString(), 10)];\n if (!item.iconCss) {\n var menuItemEle = this.popupHTMLElement.querySelector('#' + item.id);\n menuItemEle.classList.add(constants.RIBBON_BACKSTAGE_TEXT_MENU);\n }\n }\n };\n RibbonBackstage.prototype.createBackStagePopup = function (backStageOptions) {\n var _this = this;\n this.popupHTMLElement = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_POPUP_ID,\n className: constants.RIBBON_BACKSTAGE_POPUP\n });\n var targetEle;\n if (backStageOptions.target) {\n targetEle = backStageOptions.target instanceof HTMLElement ? backStageOptions.target : document.querySelector(backStageOptions.target);\n targetEle.appendChild(this.popupHTMLElement);\n }\n else {\n this.parent.element.appendChild(this.popupHTMLElement);\n }\n this.popupEle = new Popup(this.popupHTMLElement, {\n height: backStageOptions.height,\n width: backStageOptions.width,\n relateTo: backStageOptions.target || this.parent.element,\n enableRtl: this.parent.enableRtl\n });\n if (this.parent.enableRtl) {\n this.updatePopupPositionOnRtl(this.parent.enableRtl);\n }\n this.popupHTMLElement.onkeydown = function (e) { if (e.code === 'Escape') {\n _this.hideBackstage();\n } };\n this.hideBackstage();\n };\n RibbonBackstage.prototype.updatePopupPositionOnRtl = function (enableRtl) {\n var popupStyle = this.popupHTMLElement.style;\n if (enableRtl) {\n popupStyle.right = popupStyle.left;\n popupStyle.left = 'unset';\n }\n else {\n popupStyle.left = popupStyle.right;\n popupStyle.right = 'unset';\n }\n };\n RibbonBackstage.prototype.createBackstageMenu = function (menuOptions, isFooter) {\n var _this = this;\n var wrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_wrapper');\n if (!wrapperEle) {\n this.menuWrapper = this.parent.createElement('div', {\n id: this.parent.element.id + '_wrapper',\n className: constants.RIBBON_BACKSTAGE_MENU_WRAPPER\n });\n this.popupHTMLElement.appendChild(this.menuWrapper);\n }\n if (menuOptions.backButton.visible && !isFooter) {\n var closeBtnEle = this.parent.createElement('button', {\n id: this.parent.element.id + '_close',\n className: 'e-ribbon-close-btn'\n });\n this.closeBtn = new Button({\n content: menuOptions.backButton.text,\n iconCss: menuOptions.backButton.iconCss ? menuOptions.backButton.iconCss : constants.BACKSTAGE_CLOSE_ICON,\n enableRtl: this.parent.enableRtl\n }, closeBtnEle);\n this.menuWrapper.append(closeBtnEle);\n closeBtnEle.onclick = function () {\n _this.popupHTMLElement.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n _this.hideBackstage();\n _this.isBackButtonClicked = true;\n };\n }\n var itemsWrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_itemswrapper');\n if (!itemsWrapperEle) {\n this.itemsWrapperEle = this.parent.createElement('div', {\n id: this.parent.element.id + '_itemswrapper',\n className: constants.RIBBON_BACKSTAGE_ITEMS_WRAPPER\n });\n this.menuWrapper.append(this.itemsWrapperEle);\n }\n var ulFooterElem;\n if (isFooter) {\n ulFooterElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FOOTER_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(ulFooterElem);\n }\n else {\n this.ulMenuElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(this.ulMenuElem);\n }\n if (!isFooter) {\n this.menuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, this.ulMenuElem);\n }\n else {\n this.footerMenuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneFooterMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, ulFooterElem);\n }\n };\n RibbonBackstage.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.cloneFooterMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (!item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.createBackStageContent = function (itemId, content) {\n var templateName = 'backstageContent';\n this.clearTemplate([templateName]);\n if (!this.backstageContentEle) {\n this.backstageContentEle = this.parent.createElement('div', {\n id: itemId + constants.CONTENT_ID,\n className: constants.RIBBON_BACKSTAGE_CONTENT\n });\n }\n else {\n this.backstageContentEle.innerHTML = '';\n this.backstageContentEle.id = itemId + constants.CONTENT_ID;\n }\n var templateFunction = getTemplateFunction(content);\n append(templateFunction({}, this, templateName, 'backstageContent', this.parent.isStringTemplate), this.backstageContentEle);\n if (content) {\n this.popupHTMLElement.append(this.backstageContentEle);\n }\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.createBackStageTemplate = function (template) {\n var templateName = 'backstageTemplate';\n this.clearTemplate([templateName]);\n this.backstageTempEle = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID + '_template',\n className: constants.RIBBON_BACKSTAGE_TEMPLATE\n });\n var templateFunction = getTemplateFunction(template);\n append(templateFunction({}, this, templateName, 'backstageTemplate', this.parent.isStringTemplate), this.backstageTempEle);\n this.popupHTMLElement.append(this.backstageTempEle);\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.menuSelect = function (menuOptions, args) {\n for (var i = 0; i < menuOptions.items.length; i++) {\n var item = menuOptions.items[parseInt(i.toString(), 10)];\n if (item.text === args.item.text) {\n this.contentItem = item;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element, item: this.contentItem, isBackButton: this.isBackButtonClicked };\n if (this.contentItem.backStageItemClick) {\n this.contentItem.backStageItemClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.setCommonProperties = function (commonProp) {\n if (this.backstageButton) {\n this.backstageButton.setProperties(commonProp);\n if (this.popupEle) {\n this.popupEle.setProperties(commonProp);\n if (this.popupHTMLElement)\n this.updatePopupPositionOnRtl(commonProp.enableRtl);\n if (this.menuCtrl) {\n this.menuCtrl.setProperties(commonProp);\n if (this.closeBtn) {\n this.closeBtn.setProperties(commonProp);\n }\n }\n }\n }\n };\n /**\n * Update Backstage menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage menu.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.updateBackStageMenu = function (backStageOptions) {\n if (backStageOptions.visible) {\n if (this.backstageButton) {\n if (backStageOptions.text) {\n this.backstageButton.setProperties({\n content: backStageOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.backstageButtonEle.offsetWidth + 'px');\n }\n if (this.popupEle) {\n this.popupEle.setProperties({\n height: backStageOptions.height,\n width: backStageOptions.width,\n target: backStageOptions.target || this.parent.element,\n });\n }\n if (backStageOptions.template) {\n if (this.backstageTempEle) {\n remove(this.backstageTempEle);\n this.backstageTempEle = null;\n }\n this.createBackStageTemplate(backStageOptions.template);\n }\n else {\n if (this.menuCtrl) {\n this.menuCtrl.setProperties({\n items: this.cloneMenuItem(backStageOptions.items)\n });\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties({\n items: this.cloneFooterMenuItem(backStageOptions.items)\n });\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n }\n }\n this.removeBackstageMenuTooltip();\n this.addBackStageMenuTooltip(backStageOptions);\n }\n else {\n this.createBackStage(backStageOptions);\n }\n }\n else if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonBackstage.prototype.destroyMenu = function () {\n if (this.menuCtrl) {\n this.menuCtrl.destroy();\n this.menuCtrl = null;\n }\n };\n RibbonBackstage.prototype.destroyDDB = function () {\n this.removeBackstageMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.backstageButton.destroy();\n this.backstageButton = null;\n remove(this.backstageButtonEle);\n this.backstageButtonEle = null;\n EventHandler.remove(document, 'click', this.onClickEvent);\n };\n RibbonBackstage.prototype.removeBackstageMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.backstageButtonEle.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to Backstage Menu.\n *\n * @param {BackstageItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.addBackstageItems = function (items, target, isAfter, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n isAfter ? this.footerMenuCtrl.insertAfter(items, target, isUniqueId) : this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n else {\n isAfter ? this.menuCtrl.insertAfter(items, target, isUniqueId) : this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n var backStageOptions = this.parent.backStageMenu;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n for (var i_1 = 0; i_1 < backstageItems.length; i_1++) {\n var item1 = backstageItems[parseInt(i_1.toString(), 10)];\n if (item.text === item1.text) {\n item1.content = item.content;\n break;\n }\n }\n }\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Remove items from Backstage Menu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.removeBackstageItems = function (items, isUniqueId) {\n this.menuCtrl.removeItems(items, isUniqueId);\n this.footerMenuCtrl.removeItems(items, isUniqueId);\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Renders the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.showBackstage = function () {\n this.popupEle.show();\n };\n /**\n * Hides the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.hideBackstage = function () {\n if (this.popupEle.element.classList.contains(constants.RIBBON_BACKSTAGE_OPEN)) {\n this.popupEle.element.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n }\n this.popupEle.hide();\n };\n return RibbonBackstage;\n}(Component));\nexport { RibbonBackstage };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","setCustomAttributes","attributes","key","elementClass","replace","trim","addClass","split","value","setAttribute","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","isPrimary","isToggle","created","htmlAttributes","onclick","clicked","addOverFlowEvents","overflowButton","type","buttonObj","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","querySelectorAll","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","insertBefore","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","grpBtnIndex","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","targetEle","isOverflowPopup","destroyDropDown","updateGroupButtonSize","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","idIndex","initialPropsData","isAddRemove","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","getUniqueID","concat","style","formatUnit","renderTabs","ribbonFileMenuModule","createFileMenu","fileMenu","ribbonBackstageModule","createBackStage","backStageMenu","createHelpPaneTemplate","refreshOverflow","wireEvents","wireKeyboardEvent","currentControlIndex","window","resizeHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","activeContent","selectedTab","ribbonControls","action","prevGroupId","prevGroupContainer","checkOverflow","scrollModule","scrollEle","scrollStep","offsetWidth","tabsInternal","slice","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","selectedTabId","selectedIndex","previousIndex","selectedContent","firstChild","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","checkOverflowHiddenItems","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","collectionEle","Overflow","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","itemsLength","checkEmptyCollection","isEmptyCollection","isGroupOF","isMenu","dropDownPopup","isLeft","position","X","Y","offsetX","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","getInstance","groupEle_1","removeOverflowEvent","childElementCount","removeOverflowButton","ofGroupContainer","groupId","isHidden","isGroupHidden","isItemHidden","children","overflowTab","groupTabContainer","groupHeader","isResize","addOverflowButton","overflowBtnTarget","createGroupContainer","createOfTabContainer","collapseButton","addOverflowEvents","ribbonButtonModule","ribbonSplitButtonModule","ribbonCheckBoxModule","ribbonColorPickerModule","ribbonComboBoxModule","ribbonGroupButtonModule","isLarge","checkLargeToMedium","checkMediumToSmall","checkValidCollectionLength","ind","checkClassicCollection","isIncrement","checkClassicItem","shouldSkip","isCollapsed","canReduceCollection","canReduceItem","createShrinkEle","firstItem","start","end","shrinkEle","constants.RIBBON_ROW","attrs","data-start","data-end","moveItemToColumn","moveCollectionToColumn","orientation","Column","m","shrinkColumns","reduceItemsToSmall","middle","reduce","ele_1","reduceCollectionsToSmall","ele_2","setWidth","classicItems","shrinkColumn","isSmall","checkSmallToMedium","checkMediumToLarge","shouldClear","expandItemToMedium","parentEle","ele_4","expandCollectionsToMedium","ele_5","Row","expandItemsToLarge","container","ele_6","insertAdjacentElement","expandCollectionsToLarge","ele_7","handleContentSize","isRemoveOverflow","Template","createTemplateContent","collapseOrder","this_1","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","groupIconCss","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","isCollapsible","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","previousItem","nextIndex","isInteracted","selectedTabContent","elements","createGroups","ribbonTab","ondblclick","btnId","tabindex","constants.DROPDOWNBUTTON_HIDE","constants.RIBBON_POPUP_CONTROL","isGroupOf","upDownKeyHandler","getElementsByClassName","findDisabledItem","currentItemIndex","itemType","checkBoxEle","checkBox","isIncrease","ofGroupHeader","constants.RIBBON_COLLAPSE_BUTTON","aria-label","role","removeExpandCollapse","splice","reRenderTabs","isNewTab","destroyTabItems","innerText","_i","groups_1","_a","_b","_c","_d","destroyFunction","forEach","groupList","i_1","alignType","i_2","groupContent","groupCollection","itemList","itemEle_1","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","isItemsHidden","initialProps","hiddenGroups","updateGroupProps","disabledGroups","indexOf","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","hiddenItems","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_e","getItemModuleName","i_4","i_5","removeLauncherIcon","containerId","this_3","groupButtonID_1","clearOverflowResize","selectTab","tabId","showTab","showHideTab","hideTab","enableTab","enableDisableTab","disableTab","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","hideGroup","groupID","showHideGroup","showGroup","updateInitialProps","grpContainer","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","checkHiddenItems","isInsert","keys","checkOverflowItems","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","overflowHeader","updateCollection","ribboncollection","updateItem","enableDisableItem","getElementById","enableItem","disableItem","toggleAttribute","unwireEvents","undefined","onPropertyChanged","newProp","oldProp","animation","tabAnimation","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","visible","ddbElement","ddbBeforeEvent","ddbAfterEvent","popupTemplate","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","isOpen","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","menuItems","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","destroyMenu","removeFileMenuTooltip","insertAfter","enableItems","disableItems","setItem","refresh","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","itemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","createBackStageContent","addBackStageMenuTooltip","onClickEvent","hideBackstage","backStageItems","HTMLElement","Popup","height","relateTo","updatePopupPositionOnRtl","code","popupStyle","right","left","backButton","closeBtnEle","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","addBackstageItems","backstageItems","item1","removeBackstageItems","show","hide","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select, addClass } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if (item.id === id) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n/**\n * Sets the HTML attributes of an element\n *\n * @param {HTMLElement} element - The HTML element for which attributes are to be updated.\n * @param {commonProperties} attributes - An object containing key-value pairs of attributes to be updated.\n * @returns {void}\n * @hidden\n */\nexport function setCustomAttributes(element, attributes) {\n for (var key in attributes) {\n if (key === 'class') {\n var elementClass = attributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'style') {\n var prevStyles = element.getAttribute('style') || '';\n var value = \"\" + prevStyles + attributes[\"\" + key];\n element.setAttribute(\"\" + key, value);\n }\n else {\n element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n Property({})\n ], RibbonButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"clicked\", void 0);\n return RibbonButtonSettings;\n}(ChildProperty));\nexport { RibbonButtonSettings };\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon checkbox item.\n */\nvar RibbonCheckBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonCheckBoxSettings, _super);\n function RibbonCheckBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of checkbox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCheckBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonCheckBoxSettings.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RibbonCheckBoxSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property({})\n ], RibbonCheckBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\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 { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"label\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Palette')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Property({})\n ], RibbonColorPickerSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\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 { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n Property({})\n ], RibbonComboBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"select\", void 0);\n return RibbonComboBoxSettings;\n}(ChildProperty));\nexport { RibbonComboBoxSettings };\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 { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon DropDownButton item.\n */\nvar RibbonDropDownSettings = /** @class */ (function (_super) {\n __extends(RibbonDropDownSettings, _super);\n function RibbonDropDownSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonDropDownSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonDropDownSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], RibbonDropDownSettings.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property({})\n ], RibbonDropDownSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"select\", void 0);\n return RibbonDropDownSettings;\n}(ChildProperty));\nexport { RibbonDropDownSettings };\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 { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon SplitButton item.\n */\nvar RibbonSplitButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonSplitButtonSettings, _super);\n function RibbonSplitButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonSplitButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonSplitButtonSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"target\", void 0);\n __decorate([\n Property({})\n ], RibbonSplitButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\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 { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\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 { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Property({})\n ], RibbonGroupButtonItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonSettings.prototype, \"header\", void 0);\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\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 { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"overflowHeader\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\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 { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\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 { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\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 { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\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 { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\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 { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_POPUP_CONTROL, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonButton = /** @class */ (function () {\n function RibbonButton(parent) {\n this.parent = parent;\n }\n RibbonButton.prototype.getModuleName = function () {\n return 'ribbonButton';\n };\n RibbonButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates button.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.createButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var btnSettings = item.buttonSettings;\n new Button({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n iconCss: btnSettings.iconCss,\n disabled: item.disabled,\n cssClass: (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (btnSettings.cssClass ? btnSettings.cssClass : '')).trim(),\n content: item.activeSize === RibbonItemSize.Small ? '' : btnSettings.content,\n isPrimary: btnSettings.isPrimary,\n isToggle: btnSettings.isToggle,\n created: btnSettings.created\n }, buttonEle);\n if (btnSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, btnSettings.htmlAttributes);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n buttonEle.setAttribute('aria-label', btnSettings.content);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n buttonEle.setAttribute('data-control', item.type.toString());\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({ cssClass: buttonObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCheckBox = /** @class */ (function () {\n function RibbonCheckBox(parent) {\n this.parent = parent;\n }\n RibbonCheckBox.prototype.getModuleName = function () {\n return 'ribbonCheckBox';\n };\n RibbonCheckBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the check box.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.createCheckBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var checkBoxSettings = item.checkBoxSettings;\n new CheckBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n checked: checkBoxSettings.checked,\n cssClass: (RIBBON_CONTROL + SPACE + (checkBoxSettings.cssClass ? checkBoxSettings.cssClass : '')).trim(),\n label: checkBoxSettings.label,\n labelPosition: checkBoxSettings.labelPosition,\n disabled: item.disabled,\n created: checkBoxSettings.created,\n htmlAttributes: checkBoxSettings.htmlAttributes,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement, setCustomAttributes } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: colorPickerSettings.change,\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n if (colorPickerSettings.htmlAttributes) {\n setCustomAttributes(inputEle, colorPickerSettings.htmlAttributes);\n }\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-colorpicker-label',\n id: item.id + '_label',\n innerHTML: colorPickerSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonComboBox = /** @class */ (function () {\n function RibbonComboBox(parent) {\n this.parent = parent;\n }\n RibbonComboBox.prototype.getModuleName = function () {\n return 'ribbonComboBox';\n };\n RibbonComboBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the combobox.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.createComboBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var comboBoxSettings = item.comboBoxSettings;\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n htmlAttributes: comboBoxSettings.htmlAttributes,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-combobox-label',\n id: item.id + '_label',\n innerHTML: comboBoxSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","import { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip, setCustomAttributes } from '../base/index';\nimport { DROPDOWN_ID, ITEM_VERTICAL_CENTER, OVERFLOW_ID, RIBBON_CONTROL, RIBBON_GROUP_OVERFLOW_DDB, RIBBON_POPUP_CONTROL, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonDropDown = /** @class */ (function () {\n function RibbonDropDown(parent) {\n this.parent = parent;\n }\n RibbonDropDown.prototype.getModuleName = function () {\n return 'ribbonDropDown';\n };\n RibbonDropDown.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createDropDown = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var dropDownSettings = item.dropDownSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (dropDownSettings.cssClass ?\n dropDownSettings.cssClass : '')).trim();\n new DropDownButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: dropDownSettings.closeActionEvents,\n content: item.activeSize === RibbonItemSize.Small ? '' : dropDownSettings.content,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: dropDownSettings.iconCss,\n items: dropDownSettings.items,\n target: dropDownSettings.target,\n createPopupOnClick: dropDownSettings.createPopupOnClick,\n beforeClose: function (e) {\n if (dropDownSettings.beforeClose) {\n dropDownSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: dropDownSettings.beforeItemRender,\n beforeOpen: dropDownSettings.beforeOpen,\n close: function (e) {\n if (dropDownSettings.close) {\n dropDownSettings.close.call(_this, e);\n }\n },\n created: dropDownSettings.created,\n open: dropDownSettings.open,\n select: dropDownSettings.select\n }).appendTo(buttonEle);\n if (dropDownSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, dropDownSettings.htmlAttributes);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var controlElements = Array.prototype.slice.call(target.querySelectorAll('.e-control'));\n var templateElements = Array.prototype.slice.call(target.querySelectorAll('.e-ribbon-template'));\n var items = controlElements.concat(templateElements);\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template'))) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonSplitButton = /** @class */ (function () {\n function RibbonSplitButton(parent) {\n this.parent = parent;\n }\n RibbonSplitButton.prototype.getModuleName = function () {\n return 'ribbonSplitButton';\n };\n RibbonSplitButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates SplitButton.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.createSplitButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var splitButtonSettings = item.splitButtonSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (splitButtonSettings.cssClass ?\n splitButtonSettings.cssClass : '')).trim();\n var splitbutton = new SplitButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: splitButtonSettings.closeActionEvents,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: splitButtonSettings.iconCss,\n items: splitButtonSettings.items,\n target: splitButtonSettings.target,\n beforeClose: function (e) {\n if (splitButtonSettings.beforeClose) {\n splitButtonSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: splitButtonSettings.beforeItemRender,\n beforeOpen: splitButtonSettings.beforeOpen,\n close: function () {\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.close) {\n splitButtonSettings.close.call(_this);\n }\n },\n created: splitButtonSettings.created,\n open: function () {\n splitbutton['wrapper'].classList.add(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.open) {\n splitButtonSettings.open.call(_this);\n }\n },\n select: splitButtonSettings.select,\n click: function (e) {\n if (splitButtonSettings.click) {\n splitButtonSettings.click.call(_this, e);\n }\n }\n }, buttonEle);\n if (splitButtonSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, splitButtonSettings.htmlAttributes);\n }\n var dropdownEle = buttonEle.parentElement.querySelector('.e-dropdown-btn');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n this.setContent(item, splitbutton);\n var wrapper = splitbutton['wrapper'];\n EventHandler.add(wrapper, 'mouseenter', function () { wrapper.classList.add(RIBBON_HOVER); }, this);\n EventHandler.add(wrapper, 'mouseleave', function () { wrapper.classList.remove(RIBBON_HOVER); }, this);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n splitButtonEle.setAttribute('data-control', item.type.toString());\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n splitbutton.cssClass = splitbutton.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n splitbutton.dataBind();\n var dropdownEle = splitButtonEle.parentElement.querySelector('.e-dropdown-btn');\n var ddbId = dropdownEle.getAttribute('id');\n var popupEle = document.querySelector('#' + ddbId + '-popup');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n popupEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.preventDefault();\n splitbutton['wrapper'].classList.remove('e-ribbon-open');\n popupEle.querySelector('.e-focused').click();\n }\n };\n var target;\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n overflowButton.toggle();\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n var cssClass = splitbutton.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n splitbutton.cssClass = cssClass.join(SPACE);\n splitbutton.dataBind();\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n };\n };\n RibbonSplitButton.prototype.setContent = function (item, control) {\n control['primaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Medium) ? item.splitButtonSettings.content : '' });\n control['secondaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Large) ? item.splitButtonSettings.content : '' });\n };\n RibbonSplitButton.prototype.getSplitButtonObj = function (controlId) {\n var splitButtonEle = getItemElement(this.parent, controlId);\n return getComponent(splitButtonEle, SplitButton);\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the SplitButton items.\n * @param {string} text - Gets the text of the splitbutton item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonSplitButton.prototype.addItems = function (controlId, Items, text) {\n this.getSplitButtonObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonSplitButton.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getSplitButtonObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonSplitButton.prototype.toggle = function (controlId) {\n this.getSplitButtonObj(controlId).toggle();\n };\n /**\n * Updates the splitbutton.\n *\n * @param {RibbonSplitButtonSettingsModel} prop - Gets the splitbutton property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonSplitButton.prototype.updateSplitButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.splitButtonSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, SplitButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.open;\n delete prop.click;\n delete prop.close;\n delete prop.beforeClose;\n control.setProperties(prop);\n if (prop.content) {\n this.setContent(itemProp.item, control);\n }\n };\n /**\n * Updated SplitButton size\n *\n * @param {HTMLElement} element - Gets the splibutton element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.updateSplitButtonSize = function (element, item) {\n var control = getComponent(element, SplitButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n this.setContent(item, control);\n };\n return RibbonSplitButton;\n}());\nexport { RibbonSplitButton };\n","import { EventHandler, getComponent, remove } from '@syncfusion/ej2-base';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { RibbonGroupButtonSelection, RibbonItemSize } from '../base/interface';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { createTooltip, isTooltipPresent, setCustomAttributes } from '../base/utils';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGroupButton = /** @class */ (function () {\n function RibbonGroupButton(parent) {\n this.parent = parent;\n this.isSelected = false;\n }\n RibbonGroupButton.prototype.getModuleName = function () {\n return 'ribbonGroupButton';\n };\n RibbonGroupButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Group Button\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.createGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n this.count = 0;\n var btnContainerEle = this.parent.createElement('div', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID,\n className: 'e-btn-group'\n });\n itemElement.appendChild(btnContainerEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if ((groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss)) {\n var groupButtonEle = this.parent.createElement('button', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID + i,\n className: constants.RIBBON_GROUP_BUTTON\n });\n btnContainerEle.appendChild(groupButtonEle);\n new Button({\n iconCss: groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss,\n disabled: item.disabled,\n enableRtl: this.parent.enableRtl,\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left'\n }, groupButtonEle);\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes) {\n setCustomAttributes(groupButtonEle, groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes);\n }\n var buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n btnContainerEle.classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n else {\n btnContainerEle.classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].selected) {\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n buttonEle.classList.add('e-active');\n }\n else {\n if (this.count < 1) {\n buttonEle.classList.add('e-active');\n this.count++;\n }\n }\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n btnContainerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(btnContainerEle, this.parent);\n this.isSelected = false;\n }\n };\n RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {\n var previousItems = [];\n var selectingItems = [];\n var selectedItems = [];\n var groupButtonEle;\n var dropdown;\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n previousItems.push(grpBtnSettings.items[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (!(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n selectingItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs = {\n cancel: false, previousItems: previousItems, selectingItems: selectingItems\n };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n else {\n if (grpBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_MULTIPLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.remove('e-active');\n grpBtnSettings.items[parseInt(j.toString(), 10)].selected = false;\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = true;\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active') && this.parent.activeLayout === 'Simplified') {\n this.grpBtnIndex = itemIndex;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = true;\n }\n else {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = false;\n }\n var activeEleCount = 0;\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active') && this.parent.activeLayout === 'Simplified' && n !== itemIndex) {\n this.isSelected = true;\n activeEleCount++;\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = null;\n var itemsCount = 0;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n containerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(containerEle, this.parent);\n }\n else {\n var groupButtonEle = itemElement.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n itemElement.appendChild(dropdown.target);\n if (groupButtonEle) {\n dropdown.destroy();\n remove(groupButtonEle);\n }\n }\n };\n RibbonGroupButton.prototype.addGroupButtonHeader = function (itemID, groupBtnSettings, popupEle) {\n var groupButtonHeader = this.parent.createElement('div', {\n className: 'e-ribbon-groupbutton-header',\n id: itemID + constants.HEADER_ID,\n innerHTML: groupBtnSettings.header\n });\n popupEle.insertBefore(groupButtonHeader, popupEle.firstChild);\n };\n RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n var isOverflowPopup = false;\n if (this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n isOverflowPopup = true;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var groupBtnSettings = item.groupButtonSettings;\n if ((e.key === 'ArrowRight' && !isOverflowPopup) || (e.key === 'ArrowDown' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowDown' && isOverflowPopup)) {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n else if ((e.key === 'ArrowLeft' && !isOverflowPopup) || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var isIconOnly = true;\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP, content: groupBtnSettings.header ? groupBtnSettings.header : '' });\n var targetEle = dropdown.target;\n if (targetEle.children.length) {\n for (var i = 0; i < targetEle.children.length; i++) {\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n isIconOnly = false;\n break;\n }\n }\n if (isIconOnly) {\n targetEle.classList.add('e-icon-btn');\n }\n }\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.toggle();\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n if (targetEle.classList.contains('e-icon-btn')) {\n targetEle.classList.remove('e-icon-btn');\n }\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE), content: '' });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\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 { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu } from '../models/index';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';\nimport { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonGroupButton } from '../items/index';\nimport { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';\nimport * as constants from './constant';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.isAddRemove = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this] }, { member: 'ribbonDropDown', args: [this] }, { member: 'ribbonSplitButton', args: [this] }, { member: 'ribbonCheckBox', args: [this] }, { member: 'ribbonColorPicker', args: [this] }, { member: 'ribbonComboBox', args: [this] }, { member: 'ribbonGroupButton', args: [this] }, { member: 'ribbonFileMenu', args: [this] }, { member: 'ribbonBackstage', args: [this] });\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n addClass([this.element], ['e-rbn'].concat((this.cssClass ? this.cssClass.split(constants.SPACE) : [])));\n if (this.enableRtl) {\n this.element.classList.add(constants.RTL_CSS);\n }\n this.element.style.width = formatUnit(this.width);\n this.renderTabs();\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.createFileMenu(this.fileMenu);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.createBackStage(this.backStageMenu);\n }\n this.createHelpPaneTemplate();\n var toolbar = this.tabObj['tbObj'];\n toolbar.refreshOverflow();\n createTooltip(this.element, this);\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n };\n Ribbon.prototype.wireKeyboardEvent = function () {\n this.keyboardModuleRibbon = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n Ribbon.prototype.keyActionHandler = function (e) {\n if (((e.key === 'Tab') && (!(e.target.classList.contains('e-tab-wrap')) && !(e.target.classList.contains('e-combobox'))))) {\n e.preventDefault();\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var controlElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-control'));\n var templateElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-template'));\n var ribbonControls = controlElements.concat(templateElements);\n var comboBoxElements = activeContent.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < ribbonControls.length; i++) {\n if (ribbonControls[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (ribbonControls[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.currentControlIndex = i;\n }\n }\n }\n }\n if (this.currentControlIndex === 0) {\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-collapse-btn') || e.target.classList.contains('e-ribbon-last-item') ||\n e.target.classList.contains('e-ribbon-first-item') || e.target.classList.contains('e-ribbon-group-of-btn') ||\n e.target.classList.contains('e-ribbon-overall-of-btn') || e.target.classList.contains('e-ribbon-template')) {\n switch (e.action) {\n case 'rightarrow':\n this.handleNavigation(e, !this.enableRtl, ribbonControls);\n break;\n case 'leftarrow':\n this.handleNavigation(e, this.enableRtl, ribbonControls);\n break;\n case 'tab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex < ribbonControls.length - 1) {\n this.currentControlIndex++;\n }\n }\n break;\n case 'shiftTab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex > 0) {\n this.currentControlIndex--;\n }\n }\n else {\n this.tabObj.element.querySelector('.e-toolbar-item.e-active').querySelector('.e-tab-wrap').focus();\n this.currentControlIndex = 0;\n }\n }\n }\n };\n Ribbon.prototype.handleNavigation = function (e, enableRtl, ribbonControls) {\n var groupContainer;\n var prevGroupId;\n if (enableRtl) {\n if (this.currentControlIndex < ribbonControls.length - 1 && ribbonControls[this.currentControlIndex + 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex++;\n }\n }\n else {\n if (this.currentControlIndex > 0 && ribbonControls[this.currentControlIndex - 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex--;\n }\n }\n if ((!enableRtl && (this.currentControlIndex > 0)) || (enableRtl && (this.currentControlIndex < ribbonControls.length - 1))) {\n if (!e.target.classList.contains('e-combobox') && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template')) && !e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n this.currentControlIndex++;\n }\n else {\n var prevGroupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (prevGroupContainer) {\n prevGroupId = prevGroupContainer.getAttribute('id');\n }\n this.currentControlIndex--;\n }\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n if (((enableRtl && this.currentControlIndex === ribbonControls.length - 1) ||\n (!enableRtl && this.currentControlIndex === 0))) {\n if (ribbonControls[this.currentControlIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n enableRtl ? this.currentControlIndex++ : this.currentControlIndex--;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (this.activeLayout === 'Classic') {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (enableRtl) {\n var launcherIconEle = void 0;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n var items = groupContainer.querySelectorAll('.e-ribbon-item');\n var elem = items[items.length - 1].querySelector('.e-control');\n if (elem) {\n elem.classList.add('e-ribbon-last-item');\n }\n }\n }\n else {\n if (groupContainer) {\n var groupContainerId = groupContainer.getAttribute('id');\n if (prevGroupId !== groupContainerId) {\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n ribbonControls[parseInt((this.currentControlIndex + 1).toString(), 10)].classList.add('e-ribbon-first-item');\n }\n }\n }\n }\n }\n else {\n if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-first-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-first-item');\n }\n else if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n }\n }\n else {\n if (this.activeLayout === 'Classic') {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n if (this.activeLayout === 'Simplified') {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if (enableRtl && (overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n }\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n else {\n this.currentControlIndex--;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (!enableRtl && e.target.classList.contains('e-ribbon-first-item')) {\n groupContainer = ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n if (enableRtl) {\n this.currentControlIndex++;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.currentControlIndex;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-collapse-btn')) {\n if (enableRtl) {\n this.currentControlIndex = 0;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n else {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if ((overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex--;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n }\n if (this.activeLayout === 'Simplified' && e.target.classList.contains('e-ribbon-overall-of-btn')) {\n if (enableRtl) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n };\n Ribbon.prototype.resizeHandler = function () {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n if (this.activeLayout === 'Simplified') {\n var activePopup = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active, .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active');\n if (activePopup.length) {\n for (var i = 0; i < activePopup.length; i++) {\n var dropDownBtn = getInstance(activePopup[parseInt(i.toString(), 10)], DropDownButton);\n dropDownBtn.toggle();\n }\n }\n }\n };\n Ribbon.prototype.renderTabs = function () {\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal = this.checkID(this.tabsInternal, 'tab', this.element.id);\n this.setProperties({ tabs: this.tabsInternal }, true);\n var tabEle = this.createElement('div', {\n id: this.element.id + constants.TAB_ID\n });\n this.element.appendChild(tabEle);\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n this.tabObj = new Tab({\n cssClass: constants.RIBBON_TAB,\n selectedItem: this.selectedTab,\n overflowMode: 'Popup',\n width: this.width,\n items: tabItems,\n enableRtl: this.enableRtl,\n created: this.tabCreated.bind(this),\n selected: this.ribbonTabSelected.bind(this),\n selecting: this.ribbonTabSelecting.bind(this)\n });\n this.tabObj.appendTo(tabEle);\n //Set the width value as \"0px\" with unit for proper calculation.\n this.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, '0px');\n this.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n var toolbar = getComponent(toolbarEle, Toolbar);\n toolbar.setProperties({ width: 'calc(100% - var(--fileMenuWidth) - var(--helpTemplateWidth))' });\n this.element.classList[this.isMinimized ? 'add' : 'remove'](constants.RIBBON_MINIMIZE);\n };\n Ribbon.prototype.minimize = function (val) {\n var _this = this;\n if (val === this.isMinimized) {\n return;\n }\n var eventArgs = { cancel: false };\n this.trigger(val ? 'ribbonCollapsing' : 'ribbonExpanding', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.setProperties({ isMinimized: val }, true);\n _this.element.classList.toggle(constants.RIBBON_MINIMIZE, _this.isMinimized);\n //to overwrite inline styles from hscroll\n _this.tabObj.element.querySelector('.e-content').style.display = val ? 'none' : 'block';\n if (!val) {\n _this.refreshLayout();\n }\n });\n };\n Ribbon.prototype.toggleLayout = function () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n this.isAddRemove = false;\n var selectedTabId = e.selectedItem.getAttribute('data-id');\n var selectedIndex = getIndex(this.tabs, (function (tab) { return (tab.id === selectedTabId); }));\n selectedIndex = selectedIndex === -1 ? this.selectedTab : selectedIndex;\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.checkOverflow(selectedIndex, e.selectedContent.firstChild);\n if (this.activeLayout === 'Simplified' && this.overflowDDB) {\n var overflowTarget = this.overflowDDB.target;\n var ofTabContainer = overflowTarget.querySelector('.' + constants.RIBBON_TAB_ACTIVE);\n if (ofTabContainer) {\n ofTabContainer.classList.remove(constants.RIBBON_TAB_ACTIVE);\n }\n var activeTab = overflowTarget.querySelector('#' + selectedTabId + constants.OVERFLOW_ID);\n if (activeTab) {\n activeTab.classList.add(constants.RIBBON_TAB_ACTIVE);\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n this.checkOverflowHiddenItems(false, selectedIndex);\n }\n else {\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n this.trigger('tabSelected', eventArgs);\n };\n Ribbon.prototype.checkOverflow = function (tabIndex, activeContent) {\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n var isOverFlow = tabContent.offsetWidth < activeContent.offsetWidth;\n if (isOverFlow && !this.scrollModule) {\n if (this.activeLayout === 'Classic') {\n // Defines whether the shrinking is breaked due to insufficient space.\n var isBreak = false;\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, true);\n if (!isBreak && (tabContent.offsetWidth < activeContent.offsetWidth)) {\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, false);\n }\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createOverflowDropdown(tabIndex, tabContent, activeContent);\n }\n }\n else {\n this.checkSimplifiedItemShrinking(tabIndex, tabContent, activeContent);\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createSimplfiedOverflow(tabContent, activeContent, tabIndex);\n }\n }\n //Adds Scroll if the tabwidth is less the content width even after adding overflow dropdown.\n if ((tabContent.offsetWidth < activeContent.offsetWidth) && (!this.scrollModule)) {\n this.scrollModule = new HScroll({\n enableRtl: this.enableRtl\n }, this.tabObj.element.querySelector('.' + constants.TAB_CONTENT));\n }\n }\n else if (!isOverFlow) {\n this.destroyScroll();\n if (this.activeLayout === 'Classic') {\n var isBreak = false;\n isBreak = this.removeOverflowDropdown(tabContent, activeContent, false, tabIndex);\n //Check for expanding small items to medium items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, true);\n }\n //Check for expanding medium items to large items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, false);\n }\n }\n else {\n this.removeSimplfiedOverflow(tabContent, activeContent, tabIndex);\n if (tabContent.offsetWidth > activeContent.offsetWidth) {\n this.checkSimplifiedItemExpanding(tabIndex, tabContent, activeContent);\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemShrinking = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Medium) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n itemContainer.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemExpanding = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth > activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth > activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Small) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var valString = itemContainer.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (tabContent.offsetWidth > value)) {\n itemContainer.removeAttribute('data-medium-width');\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.createSimplfiedOverflow = function (tabContent, activeContent, tabIndex) {\n var orderedGroups = this.getGroupResizeOrder(true, tabIndex);\n var isEmptyCollection;\n for (var i = 0; ((i < orderedGroups.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = group.collections.length; ((j >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); j--) {\n var collection = group.collections[parseInt((j - 1).toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n var itemContainer = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n itemContainer.setAttribute('data-simplified-width', activeContent.offsetWidth.toString());\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemContainer, groupContainer, true);\n if (item.activeSize === RibbonItemSize.Small) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, true);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength && !group.enableGroupOverflow) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (isEmptyCollection) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);\n }\n };\n Ribbon.prototype.checkEmptyCollection = function (itemsLength) {\n var isEmptyCollection = true;\n for (var i = 0; i < itemsLength.length; i++) {\n if (!(itemsLength[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {\n isEmptyCollection = false;\n break;\n }\n }\n return isEmptyCollection;\n };\n Ribbon.prototype.updatePopupItems = function (item, itemEle, isGroupOF, isMenu) {\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.GroupButton) ? DropDownButton : SplitButton);\n var dropDownPopup = dropdown.dropDown;\n // popup is on right if (isGroupOF && isMenu)\n // The position is reversed if RTL is enabled.\n // isRight = ((isGroupOF && isMenu) && !this.enableRtl ) || (!(isGroupOF && isMenu) && this.enableRtl) ==> (isGroupOF && isMenu) !== this.enableRtl\n var isLeft = (isGroupOF && isMenu) === this.enableRtl;\n if (dropDownPopup) {\n dropDownPopup.setProperties({ position: { X: isLeft ? 'left' : 'right', Y: isMenu ? 'top' : 'bottom' } }, true);\n if (isMenu) {\n dropdown.beforeOpen = function () {\n if (isLeft) {\n dropDownPopup.element.style.setProperty('visibility', 'hidden');\n dropDownPopup.element.style.setProperty('display', 'block');\n dropDownPopup.setProperties({ offsetX: -1 * dropDownPopup.element.offsetWidth });\n dropDownPopup.element.style.removeProperty('display');\n dropDownPopup.element.style.removeProperty('visibility');\n }\n };\n }\n else {\n dropDownPopup.setProperties({ offsetX: 0 }, true);\n dropdown.beforeOpen = null;\n }\n }\n };\n Ribbon.prototype.removeSimplfiedOverflow = function (tabContent, activeContent, tabIndex, isClear) {\n if (isClear === void 0) { isClear = false; }\n var orderedGroups = this.getGroupResizeOrder(false, tabIndex);\n var flag = true;\n var isEmptyCollection;\n for (var i = 0; ((i < orderedGroups.length) && flag); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (group.enableGroupOverflow) {\n var overflowDDBEle = tabContent.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n else {\n overflowDDB = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n for (var j = 0; ((j < group.collections.length) && flag); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n // eslint-disable-next-line max-len\n for (var k = 0; ((k < collection.items.length) && flag && !isClear && (tabContent.offsetWidth > activeContent.offsetWidth)); k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemContainer = void 0;\n if (overflowtarget) {\n itemContainer = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n var width = parseInt(itemContainer.getAttribute('data-simplified-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle_1 = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle_1.append(itemContainer);\n this.removeOverflowEvent(item, itemContainer);\n if (item.allowedSizes & RibbonItemSize.Small) {\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemContainer.querySelector('#' + item.id), item);\n }\n }\n }\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var itemEle = groupEle.querySelector('.' + constants.RIBBON_ITEM);\n if (groupEle.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (!isEmptyCollection) {\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n }\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0 || (overflowtarget.childElementCount === 1 && this.isHeaderVisible(overflowtarget, group.id))) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n else {\n var ofGroupContainer = overflowtarget.querySelector('#' + group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = overflowtarget.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n }\n this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n if (overflowEle.childElementCount === 0) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n }\n };\n Ribbon.prototype.checkOverflowHiddenItems = function (isGroupOF, tabIndex, groupId) {\n if (isGroupOF) {\n var overflowDDB = document.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (overflowDDB) {\n var overflowButton = getInstance(overflowDDB, DropDownButton);\n var overflowBtnTarget = overflowButton.target;\n var itemEle = overflowBtnTarget.querySelectorAll('.e-ribbon-item');\n var isHidden = true;\n for (var i = 0; i < itemEle.length; i++) {\n if (!(itemEle[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {\n isHidden = false;\n break;\n }\n }\n overflowButton.element.classList[isHidden ? 'add' : 'remove']('e-hidden');\n }\n }\n else {\n if (this.overflowDDB) {\n var isGroupHidden = true;\n var isItemHidden = void 0;\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n for (var k = 0; k < ofTabContainer.children.length; k++) {\n isItemHidden = true;\n var overflowTab = ofTabContainer.children[parseInt(k.toString(), 10)];\n var groupTabContainer = overflowTab.querySelectorAll('.e-ribbon-item');\n for (var n = 0; n < groupTabContainer.length; n++) {\n if (!(groupTabContainer[parseInt(n.toString(), 10)].classList.contains('e-hidden'))) {\n isItemHidden = false;\n break;\n }\n }\n overflowTab.classList[isItemHidden ? 'add' : 'remove']('e-hide-group');\n if (!(overflowTab.classList.contains('e-hide-group')) && !(overflowTab.classList.contains('e-hidden'))) {\n isGroupHidden = false;\n }\n }\n this.overflowDDB.element.classList[isGroupHidden ? 'add' : 'remove'](constants.HIDE_CSS);\n }\n }\n }\n };\n Ribbon.prototype.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {\n var overflowButton;\n var itemProp = getGroup(this.tabs, groupId);\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n if (isGroupOF) {\n var overflowDDB = groupContainer.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (!overflowDDB) {\n overflowButton = this.addOverflowButton(groupId + constants.GROUPOF_BUTTON_ID);\n overflowButton.element.classList.add(constants.RIBBON_GROUP_OF_BUTTON);\n groupContainer.appendChild(overflowButton.element);\n }\n else {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n var overflowBtnTarget = overflowButton.target;\n var headerEle = overflowBtnTarget.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID + constants.HEADER_ID);\n if (!headerEle) {\n if (itemProp.group.overflowHeader) {\n var groupHeader_1 = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_HEADER,\n id: groupId + constants.GROUPOF_BUTTON_ID + constants.HEADER_ID,\n innerHTML: itemProp.group.overflowHeader\n });\n overflowBtnTarget.append(groupHeader_1);\n }\n }\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n overflowBtnTarget.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n overflowBtnTarget.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n overflowBtnTarget.classList.add('e-hide-group');\n }\n }\n isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))\n : overflowBtnTarget.append(itemEle);\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID);\n this.tabObj.element.insertBefore(this.overflowDDB.element, this.collapseButton);\n this.overflowDDB.element.classList.add(constants.RIBBON_OVERALL_OF_BUTTON);\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n else {\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);\n if (!ofGroupContainer) {\n ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n ofTabContainer.append(ofGroupContainer);\n }\n isResize ? ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM)) : ofGroupContainer.append(itemEle);\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n };\n Ribbon.prototype.addOverflowEvents = function (item, itemEle, overflowButton) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'GroupButton':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var itemProp = getGroup(this.tabs, groupId);\n var ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);\n ofGroupContainer.append(itemEle);\n ofTabContainer.append(ofGroupContainer);\n if (tabIndex === this.selectedTab) {\n ofTabContainer.classList.add(constants.RIBBON_TAB_ACTIVE);\n }\n var groupEle = document.querySelector('#' + groupId);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n };\n Ribbon.prototype.checkGroupShrinking = function (tabIndex, tabContent, activeContent, isLarge) {\n var isOverFlow = true;\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = (tab.groups.length - 1); (isOverFlow && (j >= 0)); j--) {\n // eslint-disable-next-line max-len\n isBreak = isLarge ? this.checkLargeToMedium(tabIndex, tab, j, tabContent, activeContent) : this.checkMediumToSmall(tabIndex, tab, j, tabContent, activeContent);\n isOverFlow = !isBreak && (tabContent.offsetWidth < activeContent.offsetWidth);\n }\n return isBreak;\n };\n Ribbon.prototype.checkValidCollectionLength = function (collections) {\n var count = 0;\n for (var i = 0; i < collections.length; i++) {\n var items = collections[parseInt(i.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n count++;\n break;\n }\n }\n if (count > 1) {\n return false;\n }\n }\n return count === 1;\n };\n Ribbon.prototype.checkClassicCollection = function (collections, n, isIncrement) {\n var items = collections[parseInt(n.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n return n;\n }\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === collections.length) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n };\n Ribbon.prototype.checkClassicItem = function (items, n, isIncrement) {\n var item = items[parseInt(n.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n return n;\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === items.length) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n };\n Ribbon.prototype.checkLargeToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var canReduceCollection = function (collection) {\n return (collection.items.length === 1) && canReduceItem(collection.items[0]);\n };\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Large);\n };\n var createShrinkEle = function (id, firstItem, start, end) {\n var shrinkEle = _this.createElement('div', {\n className: 'e-ribbon-shrink' + constants.SPACE + constants.RIBBON_ROW,\n id: id + '_shrink_container' + start,\n attrs: { 'data-start': start.toString(), 'data-end': end.toString() }\n });\n firstItem.parentElement.insertBefore(shrinkEle, firstItem);\n if (!shouldSkip) {\n shrinkEle.setAttribute('data-large-width', activeContent.offsetWidth.toString());\n }\n return shrinkEle;\n };\n var moveItemToColumn = function (start, end) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[0];\n var firstItem = activeContent.querySelector('#' + collection.items[parseInt(start.toString(), 10)].id + constants.CONTAINER_ID);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + collection.id + '_shrink_container' + start) :\n createShrinkEle(collection.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (!(item.displayOptions & DisplayMode.Classic)) {\n continue;\n }\n var ele = activeContent.querySelector('#' + item.id + constants.CONTAINER_ID);\n shrinkEle.appendChild(ele);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID), item);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + item.id), item);\n }\n }\n };\n var moveCollectionToColumn = function (start, end) {\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n var firstItem = activeContent.querySelector('#' + group.collections[parseInt(start.toString(), 10)].id);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + group.id + '_shrink_container' + start) :\n createShrinkEle(group.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n var ele = activeContent.querySelector('#' + collection.id);\n shrinkEle.appendChild(ele);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID), collection.items[0]);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id), collection.items[0]);\n }\n }\n };\n var orientation = group.orientation;\n if (orientation === ItemOrientation.Column) {\n for (var k = (group.collections.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second collection\n k = this.checkClassicCollection(group.collections, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(k.toString(), 10)])) {\n l = this.checkClassicCollection(group.collections, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n if (m >= 0) {\n m = this.checkClassicCollection(group.collections, m, false);\n }\n //Checks the element rendered at position n-2\n if ((m >= 0) && canReduceCollection(group.collections[parseInt(m.toString(), 10)])) {\n moveCollectionToColumn(m, k);\n }\n else {\n moveCollectionToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n var collection = group.collections[0];\n for (var k = (collection.items.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second item\n k = this.checkClassicItem(collection.items, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceItem(collection.items[parseInt(k.toString(), 10)])) {\n l = this.checkClassicItem(collection.items, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceItem(collection.items[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n //Checks the element rendered at position n-2\n if (m >= 0) {\n m = this.checkClassicItem(collection.items, m, false);\n }\n if ((m >= 0) && canReduceItem(collection.items[parseInt(m.toString(), 10)])) {\n moveItemToColumn(m, k);\n }\n else {\n moveItemToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToSmall = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Small) && (item.activeSize === RibbonItemSize.Medium);\n };\n var reduceItemsToSmall = function (collectionIndex, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var reduce = function (i) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_1 = activeContent.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_1 = activeContent.querySelector('#' + item.id + '_grpbtn');\n }\n _this.setItemSize(ele_1, item);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var reduceCollectionsToSmall = function (index, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n if (!shouldSkip) {\n shrinkColumns[parseInt(index.toString(), 10)].setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n var reduce = function (i) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var ele_2 = activeContent.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_2 = activeContent.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_2, collection.items[0]);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var setWidth = function (id) {\n if (!shouldSkip) {\n var ele_3 = activeContent.querySelector('#' + id);\n ele_3.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n };\n if (orientation === ItemOrientation.Column) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var start = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var l = this.checkClassicCollection(group.collections, start + 1, false); //next valid item\n if (canReduceItem(group.collections[parseInt(start.toString(), 10)].items[0])\n && canReduceItem(group.collections[parseInt(l.toString(), 10)].items[0])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n reduceCollectionsToSmall(k, start, end);\n }\n else if (canReduceItem(group.collections[parseInt(end.toString(), 10)].items[0])) {\n reduceCollectionsToSmall(k, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n //If items length is 1 then, it would have been already check for shrinked column\n if ((classicItems.length > 1)) {\n if (canReduceItem(collection.items[classicItems[0]]) && canReduceItem(collection.items[classicItems[1]])) {\n if (classicItems.length === 2) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[1]);\n }\n else if (canReduceItem(collection.items[classicItems[2]])) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[2], classicItems[1]);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, false); //next valid item\n if (canReduceItem(group.collections[0].items[parseInt(start.toString(), 10)])\n && canReduceItem(group.collections[0].items[parseInt(l.toString(), 10)])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end);\n }\n else if (canReduceItem(group.collections[0].items[parseInt(end.toString(), 10)])) {\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = (collection.items.length - 1); l >= 0; l--) {\n l = this.checkClassicItem(collection.items, l, false);\n if (l < 0) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canReduceItem(item)) {\n item.type !== RibbonItemType.GroupButton ? setWidth(item.id) : setWidth(item.id + constants.RIBBON_GROUP_BUTTON_ID);\n reduceItemsToSmall(k, l, l);\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkGroupExpanding = function (tabIndex, tabContent, activeContent, isSmall) {\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = 0; (!isBreak && (j < tab.groups.length)); j++) {\n isBreak = isSmall ? this.checkSmallToMedium(tabIndex, tab, j, tabContent, activeContent, false, true) :\n this.checkMediumToLarge(tabIndex, tab, j, tabContent, activeContent, false, true);\n }\n return isBreak;\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.checkSmallToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canExpandItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Small);\n };\n var expandItemToMedium = function (collectionIndex, index, parentEle) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var item = collection.items[parseInt(index.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_4 = parentEle.id === item.id ? parentEle : parentEle.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_4 = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_4, item);\n }\n };\n var expandCollectionsToMedium = function (i) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections;\n var item = collections[parseInt(i.toString(), 10)].items[0];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id);\n collections[parseInt(i.toString(), 10)].items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_5, collections[parseInt(i.toString(), 10)].items[0]);\n }\n };\n if (orientation === ItemOrientation.Row) {\n // collection length is 1, then the it wll be covered in shrinked columns\n if (!this.checkValidCollectionLength(group.collections)) {\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n l = this.checkClassicItem(collection.items, l, true);\n if (l === collection.items.length) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canExpandItem(item)) {\n var itemEle = activeContent.querySelector('#' + item.id);\n if (item.type === 'GroupButton') {\n itemEle = activeContent.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, l, itemEle);\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n }\n }\n else {\n for (var k = 0; k < group.collections.length; k++) {\n //If items length is 1 then, it will be handled in shrinked column\n if ((group.collections[parseInt(k.toString(), 10)].items.length > 1)) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var itemEle = activeContent.querySelector('#' + collection.id);\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n if ((classicItems.length > 1) && value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, classicItems[0], itemEle);\n expandItemToMedium(k, classicItems[1], itemEle);\n if (classicItems.length === 3) {\n expandItemToMedium(k, classicItems[2], itemEle);\n }\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n if (shrinkColumns.length > 0) {\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n expandItemToMedium(0, start, shrinkColumn);\n expandItemToMedium(0, l, shrinkColumn);\n // if l == end, then l is the last item, else L is the middle item. If l is middle then call the method for end.\n if (l !== end) {\n expandItemToMedium(0, end, shrinkColumn);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n expandCollectionsToMedium(start);\n expandCollectionsToMedium(m);\n if (m !== end) {\n expandCollectionsToMedium(end);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToLarge = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n if (shrinkColumns.length === 0) {\n return false;\n }\n var expandItemsToLarge = function (start, end, parentEle, middle) {\n var items = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections[0].items;\n var reduce = function (i) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var container = parentEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele_6 = container.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_6 = container.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_6, item);\n parentEle.insertAdjacentElement('beforebegin', container);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n var expandCollectionsToLarge = function (start, end, parentEle, middle) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections;\n var reduce = function (i) {\n var collection = collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var collectionEle = parentEle.querySelector('#' + collection.id);\n var ele_7 = collectionEle.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_7 = collectionEle.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_7, collection.items[0]);\n parentEle.insertAdjacentElement('beforebegin', collectionEle);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-large-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n if (l === end) {\n expandItemsToLarge(start, end, shrinkColumn);\n }\n else {\n expandItemsToLarge(start, end, shrinkColumn, l);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n if (m === end) {\n expandCollectionsToLarge(start, end, shrinkColumn);\n }\n else {\n expandCollectionsToLarge(start, end, shrinkColumn, m);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-large-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n return false;\n };\n Ribbon.prototype.handleContentSize = function (itemEle, isRemoveOverflow) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_GROUP_CONTENT);\n (isRemoveOverflow ? (itemContainer.classList.add(constants.RIBBON_CONTENT_HEIGHT)) : (itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT)));\n };\n Ribbon.prototype.setItemSize = function (itemEle, item) {\n if (itemEle) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_ITEM);\n if (item.type === RibbonItemType.Button) {\n this.ribbonButtonModule.updateButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.DropDown) {\n this.ribbonDropDownModule.updateDropDownSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.SplitButton) {\n this.ribbonSplitButtonModule.updateSplitButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.Template) {\n remove(itemEle);\n this.createTemplateContent(item, itemContainer);\n }\n else if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.updateGroupButtonSize(itemEle, item);\n }\n itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT, constants.RIBBON_LARGE_ITEM, constants.RIBBON_MEDIUM_ITEM, constants.RIBBON_SMALL_ITEM);\n if (item.activeSize === RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((item.activeSize === RibbonItemSize.Medium) ?\n constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n }\n };\n Ribbon.prototype.createOverflowDropdown = function (tabIndex, tabContent, activeContent) {\n var collapseOrder = this.getGroupResizeOrder(true, tabIndex);\n if (collapseOrder.length === 0) {\n return;\n }\n var _loop_1 = function (i) {\n var group = collapseOrder[parseInt(i.toString(), 10)];\n var groupEle = this_1.tabObj.element.querySelector('#' + group.id);\n groupEle.setAttribute('data-expanded-width', activeContent.offsetWidth.toString());\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupOverFlow = this_1.createElement('div', {\n className: constants.RIBBON_GROUP_OVERFLOW + constants.SPACE + constants.RIBBON_LARGE_ITEM,\n id: group.id + constants.OVERFLOW_ID + constants.CONTAINER_ID\n });\n groupEle.insertBefore(groupOverFlow, groupContainer);\n var groupIndex = getIndex(this_1.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n var tab = this_1.tabs[parseInt(tabIndex.toString(), 10)];\n //Expanding the items in the group to their original expanded state\n this_1.checkSmallToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n this_1.checkMediumToLarge(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n var dropdown = this_1.ribbonDropDownModule.createOverFlowDropDown(group.id, group.header, group.groupIconCss, groupContainer, groupOverFlow, this_1.enableRtl);\n this_1.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: true }, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupContainer.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_1.handleContentSize(itemEle);\n this_1.addOverflowEvents(item, itemEle, dropdown);\n }\n }\n }\n };\n var this_1 = this;\n for (var i = 0; ((i < collapseOrder.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n _loop_1(i);\n }\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.removeOverflowDropdown = function (tabContent, activeContent, isClear, tabIndex) {\n if (isClear === void 0) { isClear = false; }\n var expandOrder = this.getGroupResizeOrder(false, tabIndex);\n if (expandOrder.length === 0) {\n return false;\n }\n var _loop_2 = function (i) {\n var group = expandOrder[parseInt(i.toString(), 10)];\n var groupEle = this_2.tabObj.element.querySelector('#' + group.id);\n if (!groupEle) {\n return \"break\";\n } //to handle the rerendering of tabcontrol when a ribbon tab is added/removed\n var width = parseInt(groupEle.getAttribute('data-expanded-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n return { value: true };\n }\n this_2.removeDropdown(group.id);\n var groupIndex = getIndex(this_2.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n this_2.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: false }, true);\n var tab = this_2.tabs[parseInt(tabIndex.toString(), 10)];\n //Shrinking the items in the group to their previous shrinked state (before moving to dropdown)\n this_2.checkLargeToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n this_2.checkMediumToSmall(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_2.handleContentSize(itemEle, true);\n this_2.removeOverflowEvent(item, itemEle);\n }\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < expandOrder.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n return false;\n };\n Ribbon.prototype.removeDropdown = function (groupId) {\n var dropdownElement = this.tabObj.element.querySelector('#' + groupId + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n if (dropdownElement) {\n var groupOverFlow = dropdownElement.parentElement;\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n remove(groupOverFlow);\n }\n };\n Ribbon.prototype.getGroupResizeOrder = function (isCollapse, tabIndex) {\n var _this = this;\n var groups = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n groups = groups.filter(function (e) {\n // (isUndefined(e.isCollapsible) || e.isCollapsible) => check whethe rhte item is collapsible\n // if a isCollapsed property is undefined, then it is considered collapsible and included in collapsible list\n // ((isCollapse && !e.isCollapsed)||(!isCollapse && e.isCollapsed)) => isCollapse !== e.isCollapsed\n return (_this.activeLayout === 'Classic') ? (isUndefined(e.isCollapsible) || e.isCollapsible) && ((isCollapse &&\n isUndefined(e.isCollapsed)) || (!isUndefined(e.isCollapsed) && (isCollapse !== e.isCollapsed))) : true;\n });\n //sort the collapsible groups based on the priority\n groups.sort(function (a, b) { return a.priority - b.priority; });\n //reverse the sorted array to return the array in descending order while collapsing.\n return isCollapse ? groups.reverse() : groups;\n };\n Ribbon.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Ribbon.prototype.clearOverflowDropDown = function (index) {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(index.toString(), 10)].id + constants.CONTENT_ID);\n if (!activeContent) {\n return;\n }\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n this.removeSimplfiedOverflow(activeContent, tabContent, index, true);\n }\n else {\n this.removeOverflowDropdown(activeContent, tabContent, true, index);\n }\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem.getAttribute('data-id');\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var previousIndex = getIndex(this.tabs, (function (tab) { return (tab.id === previousTabId); }));\n nextIndex = nextIndex === -1 ? this.selectedTab : nextIndex;\n var eventArgs = {\n cancel: e.cancel, isInteracted: e.isInteracted, previousIndex: previousIndex, selectedIndex: nextIndex\n };\n this.trigger('tabSelecting', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.destroyScroll();\n if (!_this.isAddRemove && (previousIndex !== -1)) {\n _this.clearOverflowDropDown(previousIndex);\n }\n var selectedTabContent = _this.tabObj.items[parseInt(nextIndex.toString(), 10)].content;\n if ((!selectedTabContent.querySelector('.' + constants.RIBBON_GROUP)) && (_this.tabs[parseInt(nextIndex.toString(), 10)].groups.length !== 0)) {\n var elements = _this.createGroups(_this.tabs[parseInt(nextIndex.toString(), 10)].groups, nextIndex);\n append(elements, selectedTabContent);\n }\n });\n };\n Ribbon.prototype.createTabItems = function (tabs) {\n var _this = this;\n var tabItems = [];\n for (var i = 0; i < tabs.length; i++) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n header.onclick = function () { _this.minimize(false); };\n header.ondblclick = function () { _this.minimize(true); };\n var tab = { header: { text: header }, id: ribbonTab.id, cssClass: ribbonTab.cssClass };\n var content = this.createElement('div', {\n className: tab.cssClass,\n id: ribbonTab.id + constants.CONTENT_ID\n });\n content.classList.add(constants.RIBBON_TAB_ITEM);\n tab.content = content;\n tabItems.push(tab);\n }\n return tabItems;\n };\n Ribbon.prototype.renderInitialTab = function (index) {\n var elements = this.createGroups(this.tabs[parseInt(index.toString(), 10)].groups, index);\n var content = this.tabObj.items[parseInt(index.toString(), 10)].content;\n append(elements, content);\n if (this.activeLayout === 'Simplified') {\n this.element.classList.add(constants.RIBBON_SIMPLIFIED_MODE);\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId) {\n var _this = this;\n var overflowButton = this.createElement('button', {\n id: btnId\n });\n var overflowTarget = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_TARGET,\n attrs: { 'tabindex': '0' }\n });\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeOpen: function (args) {\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupOpen', eventArgs, function (ribbonArgs) {\n if (ribbonArgs.cancel) {\n args.cancel = true;\n }\n });\n },\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n var groupButtonEle = args.event ? closest(args.event.target, '.e-ribbon-group-button-overflow-popup') : null;\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupClose', eventArgs, function (ribbonArgs) {\n if (ele || ribbonArgs.cancel || groupButtonEle) {\n args.cancel = true;\n }\n });\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n var isGroupOf;\n overflowButton.onkeydown = overflowButton.onclick = function () { _this.itemIndex = -1; isGroupOf = overflowButton.classList.contains('e-ribbon-overall-of-btn') ? false : true; };\n overflowTarget.onkeydown = function (e) { return (_this.upDownKeyHandler(e, overflowTarget, isGroupOf), _this); };\n return overflowDDB;\n };\n Ribbon.prototype.upDownKeyHandler = function (e, target, isGroupOf) {\n var items;\n if (isGroupOf) {\n items = target.getElementsByClassName('e-ribbon-item');\n }\n else {\n var currentList = target.querySelector('.e-ribbon-of-tab.e-ribbon-active');\n items = currentList.getElementsByClassName('e-ribbon-item');\n }\n var control = items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-control');\n var comboBoxEle = control && control.classList.contains('e-combobox') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;\n var ribbonItem;\n var templateEle;\n if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {\n if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {\n if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {\n this.itemIndex = 0;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n if (comboBoxEle && e.key === 'Tab') {\n e.preventDefault();\n var item = items[this.itemIndex].querySelector('.e-control');\n if (item) {\n item.focus();\n }\n }\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {\n this.itemIndex++;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n if (templateEle) {\n templateEle.focus();\n }\n }\n else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n if (comboBoxEle === null || (e.key === 'Tab')) {\n if (!this.itemIndex || this.itemIndex === -1) {\n this.itemIndex = items.length - 1;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {\n e.preventDefault();\n var item = items[this.itemIndex].querySelector('.e-control');\n if (item) {\n item.focus();\n }\n }\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {\n this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n if (templateEle) {\n templateEle.focus();\n }\n }\n }\n target.setAttribute('index', this.itemIndex.toString());\n }\n var currentItemIndex = parseInt(target.getAttribute('index'), 10);\n var itemType = \"\";\n var controlItem = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control') : null;\n if (controlItem) {\n itemType = controlItem.getAttribute('data-control');\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {\n if (itemType === 'ColorPicker') {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-split-colorpicker').focus();\n }\n else {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var elem = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n if (elem) {\n elem.focus();\n }\n }\n if (e.key === ' ' && (itemType === 'CheckBox')) {\n var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n var checkBox = getComponent(checkBoxEle, CheckBox);\n this.itemIndex = -1;\n checkBox.click();\n }\n }\n if (((itemType === 'SplitButton') && (e.key === 'ArrowRight' || e.key === 'ArrowLeft'))) {\n if (e.key === 'ArrowRight') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n if (e.key === 'ArrowLeft') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n }\n if (e.key === 'Enter') {\n this.itemIndex = -1;\n }\n };\n Ribbon.prototype.findDisabledItem = function (ribbonItem, items, isIncrease) {\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (isIncrease) {\n if (this.itemIndex === items.length - 1 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = -1;\n }\n }\n else {\n if (this.itemIndex === 0 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = items.length;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isIncrease ? this.itemIndex++ : this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n };\n Ribbon.prototype.removeOverflowButton = function (overflowDDB) {\n if (overflowDDB) {\n var btnEle = overflowDDB.element;\n destroyTooltip(overflowDDB.target);\n overflowDDB.destroy();\n btnEle.remove();\n }\n };\n Ribbon.prototype.removeOverflowEvent = function (item, itemEle) {\n if (itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n }\n }\n };\n Ribbon.prototype.createGroupContainer = function (groupId, groupHeader) {\n var ofGroupContainer = this.createElement('div', {\n className: constants.RIBBON_OF_GROUP_CONTAINER,\n id: groupId + constants.CONTAINER_ID\n });\n var ofGroupHeader = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_HEADER,\n id: groupId + constants.HEADER_ID,\n innerHTML: groupHeader\n });\n ofGroupContainer.append(ofGroupHeader);\n return ofGroupContainer;\n };\n Ribbon.prototype.addExpandCollapse = function () {\n var _this = this;\n this.collapseButton = this.createElement('span', {\n className: constants.RIBBON_COLLAPSE_BUTTON + constants.SPACE + constants.EXPAND_COLLAPSE_ICON,\n id: this.tabObj.element.id + constants.COLLAPSE_BUTTON_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Layout Switcher', 'role': 'button' }\n });\n this.collapseButton.onclick = function () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n };\n Ribbon.prototype.removeExpandCollapse = function () {\n var _this = this;\n var index = getIndex(this.tooltipData, function (e) { return e.id === _this.collapseButton.id; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n this.element.classList.remove(constants.RIBBON_COLLAPSIBLE);\n remove(this.tabObj.element.querySelector('.' + constants.RIBBON_COLLAPSE_BUTTON));\n this.collapseButton = null;\n };\n Ribbon.prototype.reRenderTabs = function (tabs) {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\n for (var key in tabs) {\n var index = parseInt(key, 10);\n var tab = tabs[parseInt(index.toString(), 10)];\n var isNewTab = false;\n for (var j = 0; j < (this.tabObj.items.length); j++) {\n if (this.tabs[parseInt(index.toString(), 10)].id === this.tabObj.items[parseInt(j.toString(), 10)].id) {\n isNewTab = true;\n break;\n }\n }\n if (!isNewTab) {\n this.destroyTabItems(this.tabsInternal);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n if (this.selectedTab >= this.tabs.length) {\n this.selectedTab = this.tabs.length - 1;\n }\n this.tabObj.setProperties({ items: tabItems, selectedItem: this.selectedTab });\n break;\n }\n else {\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n if (groups) {\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n this.tabObj.items[parseInt(index.toString(), 10)].header.text.innerText = ribbonTab.header;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabObj.items[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n }\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\n var group = groups_1[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n }\n }\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.switchLayout = function () {\n this.currentControlIndex = 0;\n this.destroyScroll();\n this.collapseButton.classList.toggle(constants.RIBBON_EXPAND_BUTTON, this.activeLayout === 'Simplified');\n this.element.classList.toggle(constants.RIBBON_SIMPLIFIED_MODE, this.activeLayout === 'Simplified');\n for (var i = 0; i <= (this.tabs.length - 1); i++) {\n var tabIndex = i;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n for (var i_1 = 0; i_1 < groupList.length; i_1++) {\n var group = groupList[parseInt(i_1.toString(), 10)];\n var alignType = groupList[parseInt(i_1.toString(), 10)].orientation;\n if (group.isCollapsed) {\n group.setProperties({ isCollapsed: false }, true);\n this.removeDropdown(group.id);\n }\n else {\n this.checkSmallToMedium(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var shrinkColumns = groupContainer.querySelectorAll('.' + 'e-ribbon-shrink');\n for (var i_2 = 0; i_2 < shrinkColumns.length; i_2++) {\n shrinkColumns[parseInt(i_2.toString(), 10)].remove();\n }\n var groupHeader = groupContainer.querySelector('#' + group.id + constants.HEADER_ID);\n groupHeader.remove();\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n groupContent.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n groupContent.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n groupCollection.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && (item.displayOptions === DisplayMode.Classic)) {\n k++;\n var itemEle_1 = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele = itemEle_1.querySelector('#' + item.id);\n this.destroyFunction(item, ele);\n itemEle_1.remove();\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var size = ((item.allowedSizes === RibbonItemSize.Large) ||\n (item.allowedSizes & RibbonItemSize.Medium)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n size = (!(item.displayOptions & DisplayMode.Simplified) && (item.displayOptions & DisplayMode.Overflow))\n ? RibbonItemSize.Medium : size;\n var itemEle = void 0;\n if (!(item.displayOptions & DisplayMode.Classic)) {\n itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer)[0];\n if (item.displayOptions & DisplayMode.Simplified) {\n groupCollection.append(itemEle);\n }\n }\n else {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)) {\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, true);\n }\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n item.setProperties({ activeSize: size }, true);\n if (itemEle) {\n var ele = itemEle.querySelector('#' + item.id);\n this.setItemSize(ele, item);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n }\n else {\n this.element.classList.remove(constants.RIBBON_OVERFLOW);\n for (var i_3 = 0; i_3 < groupList.length; i_3++) {\n var group = groupList[parseInt(i_3.toString(), 10)];\n var alignType = groupList[parseInt(i_3.toString(), 10)].orientation;\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n if (alignType === 'Row') {\n groupContent.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n groupContent.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (!group.enableGroupOverflow) {\n overflowDDB = this.overflowDDB;\n if (overflowDDB) {\n overflowtarget = this.overflowDDB.target;\n }\n }\n else {\n var overflowDDBEle = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n if (alignType === 'Column') {\n groupCollection.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && !(item.displayOptions & DisplayMode.Classic)) {\n k++;\n var itemEle = void 0;\n if ((item.displayOptions & DisplayMode.Simplified) || (item.displayOptions & DisplayMode.Overflow)) {\n if (item.displayOptions & DisplayMode.Simplified) {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n else {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (itemEle !== null) {\n var ele_8 = itemEle.querySelector('#' + item.id);\n this.destroyFunction(item, ele_8);\n itemEle.remove();\n }\n }\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n if (!(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) {\n var itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex)[0];\n groupCollection.append(itemEle);\n }\n else {\n var itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (!itemEle && overflowtarget) {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, false);\n }\n this.removeOverflowEvent(item, itemEle);\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n if (itemEle) {\n groupCollection.append(itemEle);\n }\n }\n var ele = groupContainer.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = groupContainer.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var itemsize = (item.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (item.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: itemsize }, true);\n this.setItemSize(ele, item);\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0 || (overflowtarget.childElementCount === 1 && this.isHeaderVisible(overflowtarget, group.id))) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n }\n }\n }\n if (this.selectedTab === tabIndex) {\n this.checkOverflow(tabIndex, activeContent);\n }\n }\n }\n if (this.activeLayout === 'Classic') {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.createLauncherIcon = function (groupId, groupContainer) {\n var _this = this;\n var launcherIcon = this.createElement('div', {\n className: constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss ? this.launcherIconCss : constants.RIBBON_LAUNCHER_ICON),\n id: groupId + constants.LAUNCHER_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Launcher Icon', 'role': 'button' }\n });\n groupContainer.appendChild(launcherIcon);\n groupContainer.classList.add(constants.RIBBON_LAUNCHER);\n EventHandler.add(launcherIcon, 'click', this.launcherIconClicked.bind(this, groupId), this);\n EventHandler.add(launcherIcon, 'keydown', function (e) {\n if (e.key === 'Enter') {\n _this.launcherIconClicked(groupId);\n }\n }, this);\n };\n Ribbon.prototype.launcherIconClicked = function (id) {\n var eventArgs = { groupId: id };\n this.trigger('launcherIconClick', eventArgs);\n };\n Ribbon.prototype.createGroups = function (groupList, tabIndex) {\n var groupElements = [];\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n var alignType = group.orientation;\n var groupEle = this.createElement('div', {\n className: group.cssClass,\n id: group.id\n });\n groupEle.classList.add(constants.RIBBON_GROUP);\n groupElements.push(groupEle);\n var groupContainer = this.createElement('div', {\n className: group.cssClass,\n id: group.id + constants.CONTAINER_ID\n });\n groupContainer.classList.add(constants.RIBBON_GROUP_CONTAINER);\n groupEle.appendChild(groupContainer);\n var groupContent = this.createElement('div', {\n className: this.activeLayout === 'Simplified' ? constants.RIBBON_GROUP_CONTENT : (constants.RIBBON_GROUP_CONTENT + constants.SPACE + constants.RIBBON_CONTENT_HEIGHT),\n id: group.id + constants.CONTENT_ID\n });\n groupContent.classList.add(((alignType === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n groupContainer.appendChild(groupContent);\n if (this.activeLayout === 'Classic') {\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n }\n if (group.showLauncherIcon) {\n this.createLauncherIcon(group.id, groupContainer);\n }\n var elements = this.createCollection(group.collections, group.orientation, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer);\n append(elements, groupContent);\n var isItemsHidden = true;\n for (var j = 0; j < elements.length; j++) {\n if (isItemsHidden) {\n for (var k = 0; k < elements[parseInt(j.toString(), 10)].children.length; k++) {\n if (!(elements[parseInt(j.toString(), 10)].children[parseInt(k.toString(), 10)].classList.contains('e-hidden'))) {\n isItemsHidden = false;\n break;\n }\n }\n }\n }\n if (isItemsHidden) {\n groupEle.classList.add('e-hide-group');\n }\n if ((this.activeLayout === 'Simplified') && !(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (initialProps) {\n if (initialProps.hiddenGroups && initialProps.hiddenGroups.length) {\n this.updateGroupProps('hiddenGroups', initialProps, groupEle);\n }\n if (initialProps.disabledGroups && initialProps.disabledGroups.length) {\n this.updateGroupProps('disabledGroups', initialProps, groupEle);\n }\n }\n }\n if (this.initialPropsData[parseInt(tabIndex.toString(), 10)]) {\n delete this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n return groupElements;\n };\n Ribbon.prototype.updateGroupProps = function (key, initialProps, groupEle) {\n // eslint-disable-next-line\n var groupIndex = initialProps[key].indexOf(groupEle.id);\n if (groupIndex !== -1) {\n key === 'hiddenGroups' ? groupEle.classList.add('e-hidden') : groupEle.classList.add('e-disabled');\n }\n };\n Ribbon.prototype.validateItemSize = function () {\n for (var k = 0; k < this.tabs.length; k++) {\n var groupList = this.tabs[parseInt(k.toString(), 10)].groups;\n for (var l = 0; l < groupList.length; l++) {\n var collectionList = groupList[parseInt(l.toString(), 10)].collections;\n var alignType = groupList[parseInt(l.toString(), 10)].orientation;\n for (var i = 0; i < collectionList.length; i++) {\n var items = collectionList[parseInt(i.toString(), 10)].items;\n for (var j = 0; j < items.length; j++) {\n var ribbonitem = items[parseInt(j.toString(), 10)];\n if (!ribbonitem.allowedSizes || (ribbonitem.allowedSizes === 0)) {\n ribbonitem.setProperties({\n allowedSizes: (RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n }, true);\n }\n if ((ribbonitem.type === 'ColorPicker') && (ribbonitem.allowedSizes !== RibbonItemSize.Small)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Small }, true);\n }\n else if ((ribbonitem.type === 'ComboBox' || ribbonitem.type === 'CheckBox') &&\n (ribbonitem.allowedSizes !== RibbonItemSize.Medium)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Medium }, true);\n }\n else if (((alignType === 'Column') && (items.length > 1)) || ((alignType === 'Row') && (collectionList.length > 1))) {\n if (ribbonitem.allowedSizes & RibbonItemSize.Large) {\n // To remove large size, perform 'and' with 011(3).\n var sizeVal = ribbonitem.allowedSizes & (RibbonItemSize.Small | RibbonItemSize.Medium);\n sizeVal = sizeVal ? sizeVal : RibbonItemSize.Medium;\n ribbonitem.setProperties({ allowedSizes: sizeVal }, true);\n }\n }\n var itemsize = (ribbonitem.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (ribbonitem.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonitem.setProperties({ activeSize: itemsize }, true);\n }\n }\n }\n }\n };\n Ribbon.prototype.createCollection = function (collectionList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var collectionElements = [];\n for (var i = 0; i < collectionList.length; i++) {\n var collection = collectionList[parseInt(i.toString(), 10)];\n var collectionEle = this.createElement('div', {\n className: collection.cssClass,\n id: collection.id\n });\n collectionEle.classList.add(constants.RIBBON_COLLECTION);\n collectionEle.classList.add(((alignType !== 'Column') || (this.activeLayout === 'Simplified')) ?\n constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n collectionElements.push(collectionEle);\n var elements = this.createItems(collection.items, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer);\n append(elements, collectionEle);\n if ((alignType === 'Row') && (i === 2)) {\n break;\n }\n }\n return collectionElements;\n };\n Ribbon.prototype.createRibbonItem = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.createButton(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.createDropDown(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.createSplitButton(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.createCheckBox(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.createColorPicker(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.createComboBox(item, itemEle);\n break;\n case 'Template':\n this.createTemplateContent(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.createGroupButton(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createItems = function (itemList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var _a;\n var itemElements = [];\n for (var i = 0; i < itemList.length; i++) {\n var item = itemList[parseInt(i.toString(), 10)];\n //To stop rendering of items with simplified mode position type as none\n var flag = true;\n while (flag &&\n (((this.activeLayout === 'Simplified') && !(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) ||\n ((this.activeLayout === 'Classic') && !(item.displayOptions & DisplayMode.Classic)))) {\n i++;\n if (i < itemList.length) {\n item = itemList[parseInt(i.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var itemEle = this.createElement('div', {\n className: item.cssClass,\n id: item.id + constants.CONTAINER_ID\n });\n (_a = itemEle.classList).add.apply(_a, [constants.RIBBON_ITEM].concat((item.disabled ? [constants.DISABLED_CSS] : [])));\n // To avoid undefined items condition is added\n if (item.ribbonTooltipSettings && isTooltipPresent(item.ribbonTooltipSettings)) {\n itemEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemEle.id, data: item.ribbonTooltipSettings });\n }\n var size = item.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((item.allowedSizes === RibbonItemSize.Large) || (item.allowedSizes & RibbonItemSize.Medium) ||\n (item.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemEle.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemEle.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (initialProps && initialProps.hiddenItems && initialProps.hiddenItems.length) {\n var itemIndex = initialProps.hiddenItems.indexOf(item.id);\n if (itemIndex !== -1) {\n itemEle.classList.add('e-hidden');\n }\n }\n this.createRibbonItem(item, itemEle);\n if ((this.activeLayout === 'Simplified') && ((item.displayOptions === DisplayMode.Overflow) || (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)))) {\n this.createOverflowPopup(item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, isGroupOF, true);\n }\n }\n else {\n // For normal mode and Simplified mode position type as Group and Auto\n itemElements.push(itemEle);\n }\n if ((alignType === 'Column') && (i === 2)) {\n break;\n }\n }\n return itemElements;\n };\n Ribbon.prototype.createHelpPaneTemplate = function () {\n if (this.helpPaneTemplate) {\n var templateName = 'helpPaneTemplate';\n this.clearTemplate([templateName]);\n this.ribbonTempEle = this.createElement('div', {\n className: constants.RIBBON_HELP_TEMPLATE,\n id: this.element.id + constants.RIBBON_HELP_PANE_TEMPLATE_ID\n });\n var templateFunction = getTemplateFunction(this.helpPaneTemplate);\n append(templateFunction({}, this, templateName, 'helpPaneTemplate', this.isStringTemplate), this.ribbonTempEle);\n var tabEle = this.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n toolbarEle.after(this.ribbonTempEle);\n tabEle.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, this.ribbonTempEle.offsetWidth + 'px');\n this.renderReactTemplates();\n }\n };\n Ribbon.prototype.createTemplateContent = function (item, itemElement) {\n var itemEle = this.createElement('div', {\n className: item.cssClass ? (constants.RIBBON_TEMPLATE + constants.SPACE + item.cssClass) : constants.RIBBON_TEMPLATE,\n id: item.id,\n attrs: { 'tabindex': '-1' }\n });\n if (item.disabled) {\n itemEle.classList.add(constants.DISABLED_CSS);\n itemEle.setAttribute('disabled', '');\n }\n itemElement.appendChild(itemEle);\n this.renderItemTemplate(item, itemEle);\n };\n Ribbon.prototype.renderItemTemplate = function (item, itemElement) {\n var templateName = 'ribbon' + item.id + 'itemTemplate';\n this.clearTemplate([templateName]);\n var templateFunction = getTemplateFunction(item.itemTemplate);\n append(templateFunction({ activeSize: RibbonItemSize[item.activeSize] }, this, templateName, (item.id + 'itemTemplate'), this.isStringTemplate), itemElement);\n this.renderReactTemplates();\n };\n Ribbon.prototype.checkID = function (list, type, initId) {\n var key = type === 'tab' ? constants.TAB_ID : type === 'group' ? constants.GROUP_ID :\n type === 'collection' ? constants.COLLECTION_ID : constants.ITEM_ID;\n for (var i = 0; i < list.length; i++) {\n var listitem = list[parseInt(i.toString(), 10)];\n if (!listitem.id) {\n listitem.setProperties({ id: initId + key + (this.idIndex++) }, true);\n }\n switch (type) {\n case 'tab':\n listitem.setProperties({ groups: this.checkID(listitem.groups, 'group', listitem.id) }, true);\n break;\n case 'group':\n listitem.setProperties({ collections: this.checkID(listitem.collections, 'collection', listitem.id) }, true);\n break;\n case 'collection':\n listitem.setProperties({ items: this.checkID(listitem.items, 'item', listitem.id) }, true);\n break;\n default:\n break;\n }\n }\n return list;\n };\n Ribbon.prototype.updateCommonProperty = function (commonProp) {\n this.tabObj.setProperties(commonProp);\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.setCommonProperties(commonProp);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.setCommonProperties(commonProp);\n }\n for (var i = 0; i < this.tabs.length; i++) {\n var tab = this.tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n if (contentEle.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n if (dropdown) {\n updateTooltipProp(dropdown.target, commonProp);\n dropdown.setProperties(commonProp);\n }\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : item.type === RibbonItemType.GroupButton ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id);\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n if (item.type === 'DropDown') {\n this.updatePopupItems(item, dropdown.target, group.enableGroupOverflow, true);\n }\n }\n }\n if (ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i_4 = 0; i_4 < item.groupButtonSettings.items.length; i_4++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_4);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateCommonProperty(ele, 'dropdown-btn', commonProp);\n for (var i_5 = 0; i_5 < item.groupButtonSettings.items.length; i_5++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_5);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else {\n updateCommonProperty(ele, moduleName, commonProp);\n }\n }\n else if (!isNullOrUndefined(commonProp.enableRtl)) {\n ele.classList.toggle(constants.RTL_CSS, commonProp.enableRtl);\n }\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.removeLauncherIcon = function (groupId, dropdownElement, contentEle) {\n var containerId = groupId + constants.CONTAINER_ID;\n var containerEle = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, containerId) : contentEle.querySelector('#' + containerId);\n if (containerEle) {\n containerEle.classList.remove(constants.RIBBON_LAUNCHER);\n var launcherIcon = containerEle.querySelector('#' + groupId + constants.LAUNCHER_ID);\n remove(launcherIcon);\n }\n };\n Ribbon.prototype.destroyTabItems = function (tabs) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n if (group.showLauncherIcon) {\n this.removeLauncherIcon(group.id, dropdownElement, contentEle);\n }\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) :\n contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown ? dropdown.target.querySelector('#' + item.id) : null;\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if ((this.activeLayout === RibbonLayout.Classic) && dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n else if ((this.activeLayout === RibbonLayout.Simplified) && group.enableGroupOverflow && dropdownElement) {\n this.removeOverflowButton(dropdown);\n }\n }\n }\n if (this.overflowDDB) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.destroyFunction = function (item, ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName === 'colorpicker') {\n this.ribbonColorPickerModule.unwireColorPickerEvents(ele);\n }\n else if (moduleName === 'group-btn') {\n if (this.activeLayout === 'Classic') {\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (btnEle) {\n destroyControl(btnEle, 'btn');\n }\n }\n }\n else {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n var _loop_3 = function (i) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings) {\n var groupButtonID_1 = item.id + constants.RIBBON_GROUP_BUTTON_ID + i;\n var index = getIndex(this_3.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_3.tooltipData.splice(index, 1);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_3(i);\n }\n }\n else if (moduleName !== 'template') {\n destroyControl(ele, moduleName);\n }\n if (item.ribbonTooltipSettings) {\n var index = getIndex(this.tooltipData, function (e) { return e.id === item.id + constants.CONTAINER_ID; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n }\n if (item.type === 'GroupButton') {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n };\n Ribbon.prototype.getItemModuleName = function (item) {\n switch (item.type) {\n case 'Button':\n return 'btn';\n case 'DropDown':\n return 'dropdown-btn';\n case 'SplitButton':\n return 'split-btn';\n case 'CheckBox':\n return 'checkbox';\n case 'ColorPicker':\n return 'colorpicker';\n case 'ComboBox':\n return 'combobox';\n case 'GroupButton':\n return 'group-btn';\n default:\n return 'template';\n }\n };\n Ribbon.prototype.clearOverflowResize = function () {\n this.destroyScroll();\n this.clearOverflowDropDown(this.selectedTab);\n var tab = this.tabs[this.selectedTab];\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n for (var j = 0; (j < tab.groups.length); j++) {\n this.checkSmallToMedium(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n this.checkMediumToLarge(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n }\n };\n /**\n * Refreshes the layout.\n *\n * @returns {void}\n */\n Ribbon.prototype.refreshLayout = function () {\n this.resizeHandler();\n };\n /**\n * Selects the tab\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.selectTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId) {\n this.showHideTab(tabId, false);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId) {\n this.showHideTab(tabId, true);\n };\n Ribbon.prototype.showHideTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n };\n /**\n * Enables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableTab = function (tabId) {\n this.enableDisableTab(tabId, true);\n };\n /**\n * Disables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableTab = function (tabId) {\n this.enableDisableTab(tabId, false);\n };\n Ribbon.prototype.enableDisableTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.enableTab(index, value);\n };\n /**\n * Adds the ribbon tab.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model\n * @param {string} targetId - Gets the ID of the target tab to add the new tab.\n * @param {boolean} isAfter - Defines whether the tab is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addTab = function (tab, targetId, isAfter) {\n var index = targetId ? getIndex(this.tabs, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? this.tabs.length : (index + (isAfter ? 1 : 0));\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 0, tab);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.checkID([this.tabs[parseInt(index.toString(), 10)]], 'tab', this.element.id);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItem = this.createTabItems([tab]);\n this.tabObj.addTab(tabItem, index);\n };\n /**\n * Removes the ribbon tab.\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.removeTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n if (groups && (contentEle.innerHTML !== '')) {\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\n var group = groups_2[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 1);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.tabObj.removeTab(index);\n };\n /**\n * Adds the ribbon group.\n *\n * @param {string} tabId - Gets the tab ID.\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @param {string} targetId - Gets the ID of the target group to add the new group.\n * @param {boolean} isAfter - Defines whether the group is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addGroup = function (tabId, group, targetId, isAfter) {\n var tabIndex = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (tabIndex === -1) {\n return;\n }\n if (this.selectedTab === tabIndex) {\n this.clearOverflowResize();\n }\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var ribbonGroups = tab.groups.slice();\n var index = targetId ? getIndex(ribbonGroups, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonGroups.length : (index + (isAfter ? 1 : 0));\n ribbonGroups.splice(index, 0, group);\n tab.setProperties({ groups: ribbonGroups }, true);\n this.checkID([tab.groups[parseInt(index.toString(), 10)]], 'group', tabId);\n this.validateItemSize();\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var element = this.createGroups([tab.groups[parseInt(index.toString(), 10)]], tabIndex)[0];\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.append(element);\n }\n }\n if (this.selectedTab === tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon group.\n *\n * @param {string} groupId -Gets the group ID.\n * @returns {void}\n */\n Ribbon.prototype.removeGroup = function (groupId) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n var groupEle = contentEle.querySelector('#' + groupId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroups = this.tabs[itemProp.tabIndex].groups.slice();\n ribbonGroups.splice(itemProp.groupIndex, 1);\n this.tabs[itemProp.tabIndex].setProperties({ groups: ribbonGroups }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n Ribbon.prototype.isHeaderVisible = function (headerEle, groupID) {\n return headerEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID + constants.HEADER_ID) ? true : false;\n };\n /**\n * Hides a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideGroup = function (groupID) {\n this.showHideGroup(groupID, true);\n };\n /**\n * Shows a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showGroup = function (groupID) {\n this.showHideGroup(groupID, false);\n };\n Ribbon.prototype.showHideGroup = function (groupID, isHidden) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n if (groupEle) {\n isHidden ? groupEle.classList.add('e-hidden') : groupEle.classList.remove('e-hidden');\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, groupID, 'hiddenGroups', isHidden);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hidden') : overflowtarget.classList.remove('e-hidden');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hidden') : grpContainer.classList.remove('e-hidden');\n }\n }\n }\n this.refreshLayout();\n };\n /**\n * Disables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableGroup = function (groupID) {\n this.enableDisableGroup(groupID, true);\n };\n /**\n * Enables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableGroup = function (groupID) {\n this.enableDisableGroup(groupID, false);\n };\n Ribbon.prototype.enableDisableGroup = function (groupID, isDisabled) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n if (groupEle) {\n isDisabled ? groupEle.classList.add('e-disabled') : groupEle.classList.remove('e-disabled');\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, groupID, 'disabledGroups', isDisabled);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isDisabled ? overflowtarget.classList.add('e-disabled') : overflowtarget.classList.remove('e-disabled');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isDisabled ? grpContainer.classList.add('e-disabled') : grpContainer.classList.remove('e-disabled');\n }\n }\n }\n };\n /**\n * adds the ribbon collection.\n *\n * @param {string} groupId - Gets the ribbon group ID.\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @param {string} targetId - Gets the ID of the target collection to add the new collection.\n * @param {boolean} isAfter - Defines whether the collection is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addCollection = function (groupId, collection, targetId, isAfter) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Row') && (itemProp.group.collections.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonCollections = itemProp.group.collections.slice();\n var index = targetId ? getIndex(ribbonCollections, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonCollections.length : (index + (isAfter ? 1 : 0));\n ribbonCollections.splice(index, 0, collection);\n itemProp.group.setProperties({ collections: ribbonCollections }, true);\n this.checkID([itemProp.group.collections[parseInt(index.toString(), 10)]], 'collection', groupId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var collection_1 = itemProp.group.collections[parseInt(index.toString(), 10)];\n var element = this.createCollection([collection_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.querySelector('#' + groupId + constants.CONTENT_ID).append(element);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon collection.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @returns {void}\n */\n Ribbon.prototype.removeCollection = function (collectionId) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n var groupEle = contentEle.querySelector('#' + collectionId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroup = itemProp.group;\n var ribbonCollections = ribbonGroup.collections.slice();\n ribbonCollections.splice(itemProp.collectionIndex, 1);\n ribbonGroup.setProperties({ collections: ribbonCollections }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Adds ribbon item.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {string} targetId - Gets the ID of the target item to add the new item.\n * @param {boolean} isAfter - Defines whether the item is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addItem = function (collectionId, item, targetId, isAfter) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Column') && (itemProp.collection.items.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonItems = itemProp.collection.items.slice();\n var index = targetId ? getIndex(ribbonItems, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonItems.length : (index + (isAfter ? 1 : 0));\n ribbonItems.splice(index, 0, item);\n itemProp.collection.setProperties({ items: ribbonItems }, true);\n this.checkID([itemProp.collection.items[parseInt(index.toString(), 10)]], 'item', collectionId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (contentEle.innerHTML !== '') {\n var item_1 = itemProp.collection.items[parseInt(index.toString(), 10)];\n var element = this.createItems([item_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.closest('.' + constants.RIBBON_ITEM).insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n if (element) {\n contentEle.querySelector('#' + collectionId).append(element);\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.removeItem = function (itemId) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n var item = itemProp.item;\n this.removeItemElement(contentEle, item, dropdown);\n }\n var ribbonCollection = itemProp.collection;\n var ribbonItems = ribbonCollection.items;\n ribbonItems.splice(itemProp.itemIndex, 1);\n ribbonCollection.setProperties({ items: ribbonItems }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideItem = function (itemId) {\n this.showHideItem(itemId, true);\n };\n /**\n * Shows a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showItem = function (itemId) {\n this.showHideItem(itemId, false);\n };\n Ribbon.prototype.showHideItem = function (itemId, isHidden) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n isHidden ? itemEle.classList.add('e-hidden') : itemEle.classList.remove('e-hidden');\n this.checkHiddenItems(itemProp.group, isHidden, itemProp.tabIndex);\n this.refreshLayout();\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, itemId, 'hiddenItems', isHidden);\n }\n };\n Ribbon.prototype.updateInitialProps = function (tabIndex, id, key, isInsert) {\n var initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n if (!initialProps) {\n this.initialPropsData[parseInt(tabIndex.toString(), 10)] = {};\n initialProps = this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n if (initialProps) {\n /* eslint-disable */\n if (!initialProps[key])\n initialProps[key] = [];\n var itemIndex = initialProps[key].indexOf(id);\n if (isInsert) {\n if (itemIndex === -1)\n initialProps[key].push(id);\n }\n else {\n if (itemIndex !== -1)\n initialProps[key].splice(itemIndex, 1);\n initialProps[key].length === 0 && delete initialProps[key];\n /* eslint-enable */\n if (Object.keys(initialProps).length === 0) {\n delete this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n }\n }\n };\n Ribbon.prototype.checkHiddenItems = function (group, isHidden, tabIndex) {\n var isItemsHidden = true;\n var isEmptyCollection;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var groupEle = contentEle.querySelector('#' + group.id);\n if (isHidden) {\n for (var i = 0; i < group.collections.length; i++) {\n if (isItemsHidden) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n for (var j = 0; j < collection.items.length; j++) {\n var item = collection.items[parseInt(j.toString(), 10)];\n var itemEle = void 0;\n if (item.type === 'GroupButton') {\n var itemProp = getItem(this.tabs, item.id);\n itemEle = getItemElement(this, item.id + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n itemEle = getItemElement(this, item.id);\n }\n var itemContainer = itemEle ? itemEle.closest('.e-ribbon-item') : null;\n if (!(itemContainer.classList.contains('e-hidden'))) {\n isItemsHidden = false;\n break;\n }\n }\n }\n }\n if (isItemsHidden) {\n groupEle.classList.add('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n }\n else {\n groupEle.classList.remove('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n if (this.activeLayout === 'Simplified' && !group.enableGroupOverflow) {\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n groupEle.classList[isEmptyCollection ? 'add' : 'remove']('e-ribbon-emptyCollection');\n }\n }\n };\n Ribbon.prototype.checkOverflowItems = function (isHidden, contentEle, isGroupOF, tabIndex, groupID) {\n var overflowDDB;\n var overflowtarget;\n if (isGroupOF) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hide-group') : overflowtarget.classList.remove('e-hide-group');\n }\n }\n else {\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hide-group') : grpContainer.classList.remove('e-hide-group');\n }\n }\n }\n }\n };\n /**\n * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model.\n * @returns {void}\n */\n Ribbon.prototype.updateTab = function (tab) {\n var tabId = tab.id;\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n if (groups && (contentEle.innerHTML !== '')) {\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabs[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n }\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_3 = groups; _i < groups_3.length; _i++) {\n var group = groups_3[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML === '') {\n // Check whether group is passed by the user and sets the updated values.\n if (tab.groups) {\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n if (this.selectedTab === index) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (tab.cssClass) {\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n tabEle.querySelector('#' + tabId + constants.HEADER_ID).innerText = ribbonTab.header;\n }\n }\n };\n /**\n * group - Gets the ribbon group to be updated. The id of the group is a required property. Other properties are optional.\n *\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @returns {void}\n */\n Ribbon.prototype.updateGroup = function (group) {\n var groupId = group.id;\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (group.cssClass) {\n if (itemProp.group.cssClass) {\n groupEle.classList.remove(itemProp.group.cssClass);\n if (groupContainer) {\n groupContainer.classList.remove(itemProp.group.cssClass);\n }\n }\n }\n // Check whether collections or orientation is passed by the user, and if it is, then remove the old values.\n if (group.collections || group.orientation) {\n if (itemProp.group.collections || itemProp.group.orientation) {\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n var collectionElements = groupEle.querySelectorAll('.e-ribbon-collection');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n collectionElements.forEach(function (collectionEle) { collectionEle.remove(); });\n if (group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n var removeCss = groupContent.classList.value.match(/(e-ribbon-[column|row]+)/g);\n if (removeCss) {\n removeClass([groupContent], removeCss);\n }\n }\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n }\n var ribbongroup = itemProp.group;\n ribbongroup.setProperties(group, true);\n ribbongroup.setProperties({ collections: this.checkID(ribbongroup.collections, 'collection', ribbongroup.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n // Check whether showLauncherIcon or orientation is passed by the user and sets the updated values.\n if (group.showLauncherIcon) {\n this.createLauncherIcon(ribbongroup.id, groupContainer);\n }\n // Check whether collections or orientation is passed by the user and sets the updated values.\n if (group.collections || group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n groupContent.classList.add(((ribbongroup.orientation === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n var elements = this.createCollection(ribbongroup.collections, ribbongroup.orientation, ribbongroup.id, ribbongroup.header, ribbongroup.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, groupContent);\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (group.cssClass) {\n groupEle.classList.add(ribbongroup.cssClass);\n if (groupContainer) {\n groupContainer.classList.add(ribbongroup.cssClass);\n }\n }\n // Check whether header is passed by the user and sets the updated values.\n if (group.header) {\n if (this.activeLayout === RibbonLayout.Simplified && !group.enableGroupOverflow) {\n var overflowHeader = dropdown.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n else if (this.activeLayout === RibbonLayout.Classic && !ribbongroup.isCollapsed) {\n groupEle.querySelector('.e-ribbon-group-header').innerText = ribbongroup.header;\n }\n else if (this.activeLayout === RibbonLayout.Classic && ribbongroup.isCollapsed) {\n var overflowEle = groupEle.querySelector('#' + ribbongroup.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n // need to set instance for dropdown\n var dropDownBtn = getInstance(overflowEle, DropDownButton);\n var overflowHeader = dropDownBtn.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n }\n }\n };\n /**\n * collection - Gets the ribbon collection to be updated. The id of the collection is a required property. Other properties are optional.\n *\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @returns {void}\n */\n Ribbon.prototype.updateCollection = function (collection) {\n var collectionId = collection.id;\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var collectionEle = contentEle.querySelector('#' + collectionId);\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (collection.cssClass) {\n if (itemProp.collection.cssClass) {\n collectionEle.classList.remove(itemProp.collection.cssClass);\n }\n }\n if (collection.items) {\n if (itemProp.collection.items) {\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n }\n }\n var ribboncollection = itemProp.collection;\n ribboncollection.setProperties(collection, true);\n ribboncollection.setProperties({ items: this.checkID(ribboncollection.items, 'item', ribboncollection.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (collection.items) {\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var elements = this.createItems(ribboncollection.items, itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, collectionEle);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (collection.cssClass) {\n collectionEle.classList.add(ribboncollection.cssClass);\n }\n };\n /**\n * item - Gets the ribbon item to be updated. The id of the item is a required property. Other properties are optional.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n */\n Ribbon.prototype.updateItem = function (item) {\n var itemId = item.id;\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + itemProp.group.id);\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n if (this.activeLayout === RibbonLayout.Simplified && itemProp.item.displayOptions === DisplayMode.Overflow) {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = dropdown.target.querySelector('#' + itemId);\n if (item.displayOptions && item.displayOptions !== DisplayMode.Overflow) {\n var collectionEle = groupContainer.querySelector('#' + itemProp.collection.id);\n if (collectionEle) {\n collectionEle.appendChild(itemContainer);\n }\n }\n }\n else {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = contentEle.querySelector('#' + itemId);\n if (itemProp.item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Classic) {\n itemEle = contentEle.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (this.activeLayout === RibbonLayout.Simplified && item.displayOptions === DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n if ((itemProp.item.type === RibbonItemType.DropDown) || (itemProp.item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(itemProp.item, itemContainer, itemProp.group.enableGroupOverflow, true);\n }\n }\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (item.cssClass) {\n if (itemProp.item.cssClass) {\n itemContainer.classList.remove(itemProp.item.cssClass);\n }\n }\n this.destroyFunction(itemProp.item, itemEle);\n itemEle.remove();\n var removeCss = itemContainer.classList.value.match(/(e-ribbon-[large|medium|small]+-item)/g);\n if (removeCss) {\n removeClass([itemContainer], removeCss);\n }\n }\n var ribbonItem = itemProp.item;\n ribbonItem.setProperties(item, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {\n this.removeOverflowButton(dropdown);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n if (item.cssClass) {\n itemContainer.classList.add(ribbonItem.cssClass);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n };\n Ribbon.prototype.removeItemElement = function (contentEle, item, dropdown) {\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id) : null;\n if (item.type === 'GroupButton') {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n if (item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Simplified) {\n document.getElementById(item.id + constants.CONTAINER_ID).remove();\n }\n else {\n ele.closest('#' + item.id + constants.CONTAINER_ID).remove();\n }\n }\n };\n /**\n * Enables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.enableItem = function (itemId) {\n this.enableDisableItem(itemId, false);\n };\n /**\n * Disables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.disableItem = function (itemId) {\n this.enableDisableItem(itemId, true);\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n var moduleName = this.getItemModuleName(itemProp.item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateControlDisabled(ele, 'dropdown-btn', isDisabled);\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = document.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n this.destroyTabItems(this.tabs);\n if (!this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n this.collapseButton = undefined;\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n }\n _super.prototype.destroy.call(this);\n this.tabObj.destroy();\n this.tabObj = undefined;\n this.initialPropsData = {};\n remove(this.element.querySelector('#' + this.element.id + constants.TAB_ID));\n this.element.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.element.style.removeProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH);\n this.element.style.removeProperty('width');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(constants.SPACE));\n }\n this.element.classList.remove(constants.RTL_CSS, constants.RIBBON_SIMPLIFIED_MODE, constants.RIBBON_OVERFLOW, constants.RIBBON_COLLAPSIBLE, constants.RIBBON_MINIMIZE, 'e-rbn');\n this.unwireEvents();\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RibbonModel} newProp - Specifies new properties\n * @param {RibbonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Ribbon.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _a, _b;\n for (var _i = 0, _c = Object.keys(newProp); _i < _c.length; _i++) {\n var prop = _c[_i];\n switch (prop) {\n case 'activeLayout':\n this.switchLayout();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n (_a = this.element.classList).remove.apply(_a, oldProp.cssClass.split(constants.SPACE));\n }\n if (newProp.cssClass) {\n (_b = this.element.classList).add.apply(_b, newProp.cssClass.split(constants.SPACE));\n }\n break;\n case 'isMinimized':\n this.element.classList.toggle(constants.RIBBON_MINIMIZE, this.isMinimized);\n this.tabObj.element.querySelector('.e-content').style.display = this.isMinimized ? 'none' : 'block';\n if (!this.isMinimized) {\n this.refreshLayout();\n }\n break;\n case 'locale':\n this.updateCommonProperty({ locale: this.locale });\n break;\n case 'enablePersistence':\n this.updateCommonProperty({ enablePersistence: this.enablePersistence });\n break;\n case 'enableRtl':\n this.element.classList.toggle(constants.RTL_CSS, this.enableRtl);\n this.updateCommonProperty({ enableRtl: newProp.enableRtl });\n if (this.scrollModule) {\n this.scrollModule.setProperties({ enableRtl: newProp.enableRtl });\n }\n break;\n case 'launcherIconCss':\n for (var i = 0; i < this.tabs.length; i++) {\n var tabContent = this.tabObj.items[parseInt(i.toString(), 10)].content;\n var tab = this.tabs[parseInt(i.toString(), 10)];\n if (tabContent.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _d = 0, _e = tab.groups; _d < _e.length; _d++) {\n var group = _e[_d];\n if (group.showLauncherIcon) {\n var className = constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss || constants.RIBBON_LAUNCHER_ICON);\n if (group.isCollapsed) {\n var element = tabContent.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var dropdown = getComponent(element, DropDownButton);\n var launcherIconEle = dropdown.target.querySelector('#' + group.id + constants.LAUNCHER_ID);\n launcherIconEle.className = className;\n }\n else {\n var element = tabContent.querySelector('#' + group.id + constants.LAUNCHER_ID);\n element.className = className;\n }\n }\n }\n }\n }\n break;\n case 'selectedTab':\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n break;\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'width':\n this.element.style.width = formatUnit(newProp.width);\n this.refreshLayout();\n break;\n case 'fileMenu':\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.updateFileMenu(this.fileMenu);\n }\n var toolbarEle = this.tabObj['tbObj'];\n toolbarEle.refreshOverflow();\n break;\n case 'backStageMenu':\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.updateBackStageMenu(this.backStageMenu);\n }\n var toolbarElement = this.tabObj['tbObj'];\n toolbarElement.refreshOverflow();\n break;\n case 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n case 'hideLayoutSwitcher':\n this.hideLayoutSwitcher ? this.removeExpandCollapse() : this.addExpandCollapse();\n break;\n }\n }\n };\n var Ribbon_1;\n __decorate([\n Property('Classic')\n ], Ribbon.prototype, \"activeLayout\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, FileMenuSettings)\n ], Ribbon.prototype, \"fileMenu\", void 0);\n __decorate([\n Complex({}, BackStageMenu)\n ], Ribbon.prototype, \"backStageMenu\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"launcherIconCss\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"isMinimized\", void 0);\n __decorate([\n Property('en-us')\n ], Ribbon.prototype, \"locale\", void 0);\n __decorate([\n Property(0)\n ], Ribbon.prototype, \"selectedTab\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Ribbon.prototype, \"tabAnimation\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], Ribbon.prototype, \"tabs\", void 0);\n __decorate([\n Property('100%')\n ], Ribbon.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"helpPaneTemplate\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"hideLayoutSwitcher\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelecting\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelected\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonExpanding\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonCollapsing\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupOpen\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupClose\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.addFileMenuTooltip(fileMenuOptions);\n }\n else {\n this.createFileMenu(fileMenuOptions);\n }\n }\n else if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonFileMenu.prototype.destroyMenu = function () {\n if (this.menuctrl) {\n this.menuctrl.destroy();\n this.menuctrl = null;\n }\n };\n RibbonFileMenu.prototype.destroyDDB = function () {\n this.removeFileMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.fileMenuDDB.destroy();\n this.fileMenuDDB = null;\n remove(this.ddbElement);\n this.ddbElement = null;\n };\n RibbonFileMenu.prototype.removeFileMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.ddbElement.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to FileMenu.\n *\n * @param {MenuItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.addItems = function (items, target, isAfter, isUniqueId) {\n if (isAfter) {\n this.menuctrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuctrl.insertBefore(items, target, isUniqueId);\n }\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Remove items from FileMenu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.removeItems = function (items, isUniqueId) {\n this.menuctrl.removeItems(items, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Enable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be enabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.enableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, true, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Disable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be disabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.disableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, false, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Update items in FileMenu.\n *\n * @param {MenuItem} item - Gets the item to be updated.\n * @param {boolean} id - Gets the id of the item to be updated.\n * @param {boolean} isUniqueId - Gets whether the id provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.setItem = function (item, id, isUniqueId) {\n this.menuctrl.setItem(item, id, isUniqueId);\n this.menuctrl.refresh();\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n return RibbonFileMenu;\n}());\nexport { RibbonFileMenu };\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})();\nimport { remove, append, Component, EventHandler } from '@syncfusion/ej2-base';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex } from '../base/index';\nimport { getTemplateFunction, isTooltipPresent } from '../base/utils';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonBackstage = /** @class */ (function (_super) {\n __extends(RibbonBackstage, _super);\n function RibbonBackstage(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.render = function () {\n // render code\n };\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.preRender = function () {\n // pre render code\n };\n RibbonBackstage.prototype.getPersistData = function () {\n return '';\n };\n /**\n * This method is abstract member of the Component<HTMLElement>.\n *\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.onPropertyChanged = function () {\n // onProperty changes code\n };\n RibbonBackstage.prototype.getModuleName = function () {\n return 'ribbonBackstage';\n };\n RibbonBackstage.prototype.destroy = function () {\n if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates Backstage Menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.createBackStage = function (backStageOptions) {\n var _this = this;\n if (!backStageOptions.visible) {\n return;\n }\n this.backstageButtonEle = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.backstageButtonEle, toolbarEle);\n this.backstageButton = new Button({\n content: backStageOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE,\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.backstageButtonEle.offsetWidth + 'px');\n }\n }, this.backstageButtonEle);\n this.createBackStagePopup(backStageOptions);\n if (this.parent.backStageMenu.template) {\n this.createBackStageTemplate(this.parent.backStageMenu.template);\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n if (this.menuCtrl) {\n this.checkMenuItems(this.menuCtrl.items);\n }\n if (this.footerMenuCtrl) {\n this.checkMenuItems(this.footerMenuCtrl.items);\n }\n }\n this.backstageButtonEle.onclick = function (e) {\n e.stopPropagation();\n _this.showBackstage();\n _this.popupHTMLElement.classList.add(constants.RIBBON_BACKSTAGE_OPEN);\n var menuItem = _this.menuWrapper.querySelector('.e-menu-item.e-selected');\n if (menuItem) {\n menuItem.classList.remove('e-selected');\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (!item.isFooter && _this.menuCtrl.items[0].text === item.text) {\n var firstMenuEle = _this.popupHTMLElement.querySelector('#' + _this.menuCtrl.items[0].id);\n if (firstMenuEle) {\n firstMenuEle.classList.add('e-selected');\n firstMenuEle.focus();\n }\n _this.createBackStageContent(_this.menuCtrl.items[0].id, item.content);\n break;\n }\n else {\n continue;\n }\n }\n };\n this.parent.tabObj.refreshActiveTabBorder();\n this.addBackStageMenuTooltip(backStageOptions);\n EventHandler.add(document, 'click', this.onClickEvent, this);\n };\n RibbonBackstage.prototype.onClickEvent = function (e) {\n var targetEle = e.target;\n if (this.popupHTMLElement.contains(targetEle)) {\n return;\n }\n else {\n this.hideBackstage();\n }\n };\n RibbonBackstage.prototype.addBackStageMenuTooltip = function (backStageOptions) {\n if (isTooltipPresent(backStageOptions.ribbonTooltipSettings)) {\n this.backstageButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.backstageButtonEle.id, data: backStageOptions.ribbonTooltipSettings });\n }\n };\n RibbonBackstage.prototype.checkMenuItems = function (backStageItems) {\n for (var i = 0; i < backStageItems.length; i++) {\n var item = backStageItems[parseInt(i.toString(), 10)];\n if (!item.iconCss) {\n var menuItemEle = this.popupHTMLElement.querySelector('#' + item.id);\n menuItemEle.classList.add(constants.RIBBON_BACKSTAGE_TEXT_MENU);\n }\n }\n };\n RibbonBackstage.prototype.createBackStagePopup = function (backStageOptions) {\n var _this = this;\n this.popupHTMLElement = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_POPUP_ID,\n className: constants.RIBBON_BACKSTAGE_POPUP\n });\n var targetEle;\n if (backStageOptions.target) {\n targetEle = backStageOptions.target instanceof HTMLElement ? backStageOptions.target : document.querySelector(backStageOptions.target);\n targetEle.appendChild(this.popupHTMLElement);\n }\n else {\n this.parent.element.appendChild(this.popupHTMLElement);\n }\n this.popupEle = new Popup(this.popupHTMLElement, {\n height: backStageOptions.height,\n width: backStageOptions.width,\n relateTo: backStageOptions.target || this.parent.element,\n enableRtl: this.parent.enableRtl\n });\n if (this.parent.enableRtl) {\n this.updatePopupPositionOnRtl(this.parent.enableRtl);\n }\n this.popupHTMLElement.onkeydown = function (e) { if (e.code === 'Escape') {\n _this.hideBackstage();\n } };\n this.hideBackstage();\n };\n RibbonBackstage.prototype.updatePopupPositionOnRtl = function (enableRtl) {\n var popupStyle = this.popupHTMLElement.style;\n if (enableRtl) {\n popupStyle.right = popupStyle.left;\n popupStyle.left = 'unset';\n }\n else {\n popupStyle.left = popupStyle.right;\n popupStyle.right = 'unset';\n }\n };\n RibbonBackstage.prototype.createBackstageMenu = function (menuOptions, isFooter) {\n var _this = this;\n var wrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_wrapper');\n if (!wrapperEle) {\n this.menuWrapper = this.parent.createElement('div', {\n id: this.parent.element.id + '_wrapper',\n className: constants.RIBBON_BACKSTAGE_MENU_WRAPPER\n });\n this.popupHTMLElement.appendChild(this.menuWrapper);\n }\n if (menuOptions.backButton.visible && !isFooter) {\n var closeBtnEle = this.parent.createElement('button', {\n id: this.parent.element.id + '_close',\n className: 'e-ribbon-close-btn'\n });\n this.closeBtn = new Button({\n content: menuOptions.backButton.text,\n iconCss: menuOptions.backButton.iconCss ? menuOptions.backButton.iconCss : constants.BACKSTAGE_CLOSE_ICON,\n enableRtl: this.parent.enableRtl\n }, closeBtnEle);\n this.menuWrapper.append(closeBtnEle);\n closeBtnEle.onclick = function () {\n _this.popupHTMLElement.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n _this.hideBackstage();\n _this.isBackButtonClicked = true;\n };\n }\n var itemsWrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_itemswrapper');\n if (!itemsWrapperEle) {\n this.itemsWrapperEle = this.parent.createElement('div', {\n id: this.parent.element.id + '_itemswrapper',\n className: constants.RIBBON_BACKSTAGE_ITEMS_WRAPPER\n });\n this.menuWrapper.append(this.itemsWrapperEle);\n }\n var ulFooterElem;\n if (isFooter) {\n ulFooterElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FOOTER_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(ulFooterElem);\n }\n else {\n this.ulMenuElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(this.ulMenuElem);\n }\n if (!isFooter) {\n this.menuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, this.ulMenuElem);\n }\n else {\n this.footerMenuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneFooterMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, ulFooterElem);\n }\n };\n RibbonBackstage.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.cloneFooterMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (!item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.createBackStageContent = function (itemId, content) {\n var templateName = 'backstageContent';\n this.clearTemplate([templateName]);\n if (!this.backstageContentEle) {\n this.backstageContentEle = this.parent.createElement('div', {\n id: itemId + constants.CONTENT_ID,\n className: constants.RIBBON_BACKSTAGE_CONTENT\n });\n }\n else {\n this.backstageContentEle.innerHTML = '';\n this.backstageContentEle.id = itemId + constants.CONTENT_ID;\n }\n var templateFunction = getTemplateFunction(content);\n append(templateFunction({}, this, templateName, 'backstageContent', this.parent.isStringTemplate), this.backstageContentEle);\n if (content) {\n this.popupHTMLElement.append(this.backstageContentEle);\n }\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.createBackStageTemplate = function (template) {\n var templateName = 'backstageTemplate';\n this.clearTemplate([templateName]);\n this.backstageTempEle = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID + '_template',\n className: constants.RIBBON_BACKSTAGE_TEMPLATE\n });\n var templateFunction = getTemplateFunction(template);\n append(templateFunction({}, this, templateName, 'backstageTemplate', this.parent.isStringTemplate), this.backstageTempEle);\n this.popupHTMLElement.append(this.backstageTempEle);\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.menuSelect = function (menuOptions, args) {\n for (var i = 0; i < menuOptions.items.length; i++) {\n var item = menuOptions.items[parseInt(i.toString(), 10)];\n if (item.text === args.item.text) {\n this.contentItem = item;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element, item: this.contentItem, isBackButton: this.isBackButtonClicked };\n if (this.contentItem.backStageItemClick) {\n this.contentItem.backStageItemClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.setCommonProperties = function (commonProp) {\n if (this.backstageButton) {\n this.backstageButton.setProperties(commonProp);\n if (this.popupEle) {\n this.popupEle.setProperties(commonProp);\n if (this.popupHTMLElement)\n this.updatePopupPositionOnRtl(commonProp.enableRtl);\n if (this.menuCtrl) {\n this.menuCtrl.setProperties(commonProp);\n if (this.closeBtn) {\n this.closeBtn.setProperties(commonProp);\n }\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties(commonProp);\n }\n }\n }\n };\n /**\n * Update Backstage menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage menu.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.updateBackStageMenu = function (backStageOptions) {\n if (backStageOptions.visible) {\n if (this.backstageButton) {\n if (backStageOptions.text) {\n this.backstageButton.setProperties({\n content: backStageOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.backstageButtonEle.offsetWidth + 'px');\n }\n if (this.popupEle) {\n this.popupEle.setProperties({\n height: backStageOptions.height,\n width: backStageOptions.width,\n target: backStageOptions.target || this.parent.element,\n });\n }\n if (backStageOptions.template) {\n if (this.backstageTempEle) {\n remove(this.backstageTempEle);\n this.backstageTempEle = null;\n }\n this.createBackStageTemplate(backStageOptions.template);\n }\n else {\n if (this.menuCtrl) {\n this.menuCtrl.setProperties({\n items: this.cloneMenuItem(backStageOptions.items)\n });\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties({\n items: this.cloneFooterMenuItem(backStageOptions.items)\n });\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n }\n }\n this.removeBackstageMenuTooltip();\n this.addBackStageMenuTooltip(backStageOptions);\n }\n else {\n this.createBackStage(backStageOptions);\n }\n }\n else if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonBackstage.prototype.destroyMenu = function () {\n if (this.menuCtrl) {\n this.menuCtrl.destroy();\n this.menuCtrl = null;\n }\n };\n RibbonBackstage.prototype.destroyDDB = function () {\n this.removeBackstageMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.backstageButton.destroy();\n this.backstageButton = null;\n remove(this.backstageButtonEle);\n this.backstageButtonEle = null;\n EventHandler.remove(document, 'click', this.onClickEvent);\n };\n RibbonBackstage.prototype.removeBackstageMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.backstageButtonEle.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to Backstage Menu.\n *\n * @param {BackstageItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.addBackstageItems = function (items, target, isAfter, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n isAfter ? this.footerMenuCtrl.insertAfter(items, target, isUniqueId) : this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n else {\n isAfter ? this.menuCtrl.insertAfter(items, target, isUniqueId) : this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n var backStageOptions = this.parent.backStageMenu;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n for (var i_1 = 0; i_1 < backstageItems.length; i_1++) {\n var item1 = backstageItems[parseInt(i_1.toString(), 10)];\n if (item.text === item1.text) {\n item1.content = item.content;\n break;\n }\n }\n }\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Remove items from Backstage Menu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.removeBackstageItems = function (items, isUniqueId) {\n this.menuCtrl.removeItems(items, isUniqueId);\n this.footerMenuCtrl.removeItems(items, isUniqueId);\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Renders the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.showBackstage = function () {\n this.popupEle.show();\n };\n /**\n * Hides the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.hideBackstage = function () {\n if (this.popupEle.element.classList.contains(constants.RIBBON_BACKSTAGE_OPEN)) {\n this.popupEle.element.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n }\n this.popupEle.hide();\n };\n return RibbonBackstage;\n}(Component));\nexport { RibbonBackstage };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","setCustomAttributes","attributes","key","elementClass","replace","trim","addClass","split","value","setAttribute","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","isPrimary","isToggle","created","htmlAttributes","onclick","clicked","addOverFlowEvents","overflowButton","type","buttonObj","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","insertBefore","firstChild","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","controlElements","slice","querySelectorAll","templateElements","concat","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropDownPopup","addGroupButtonHeader","grpBtnIndex","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","itemID","groupButtonHeader","targetEle","isOverflowPopup","isIconOnly","children","destroyDropDown","updateGroupButtonSize","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","idIndex","initialPropsData","isAddRemove","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","getUniqueID","style","formatUnit","renderTabs","ribbonFileMenuModule","createFileMenu","fileMenu","ribbonBackstageModule","createBackStage","backStageMenu","createHelpPaneTemplate","refreshOverflow","wireEvents","wireKeyboardEvent","currentControlIndex","window","resizeHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","activeContent","selectedTab","ribbonControls","action","prevGroupId","prevGroupContainer","elem","checkOverflow","scrollModule","scrollEle","scrollStep","offsetWidth","activePopup","getInstance","tabsInternal","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","selectedTabId","selectedIndex","previousIndex","selectedContent","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","checkOverflowHiddenItems","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","collectionEle","Overflow","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","itemsLength","checkEmptyCollection","isEmptyCollection","isGroupOF","isMenu","isLeft","position","X","Y","offsetX","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","groupEle_1","removeOverflowEvent","childElementCount","isHeaderVisible","removeOverflowButton","ofGroupContainer","groupId","isHidden","isGroupHidden","isItemHidden","overflowTab","groupTabContainer","groupHeader","isResize","addOverflowButton","overflowBtnTarget","overflowHeader","groupHeader_1","createGroupContainer","createOfTabContainer","collapseButton","addOverflowEvents","ribbonButtonModule","ribbonSplitButtonModule","ribbonCheckBoxModule","ribbonColorPickerModule","ribbonComboBoxModule","ribbonGroupButtonModule","isLarge","checkLargeToMedium","checkMediumToSmall","checkValidCollectionLength","ind","checkClassicCollection","isIncrement","checkClassicItem","shouldSkip","isCollapsed","canReduceCollection","canReduceItem","createShrinkEle","firstItem","start","end","shrinkEle","constants.RIBBON_ROW","attrs","data-start","data-end","moveItemToColumn","moveCollectionToColumn","orientation","Column","m","shrinkColumns","reduceItemsToSmall","middle","reduce","ele_1","reduceCollectionsToSmall","ele_2","setWidth","classicItems","shrinkColumn","isSmall","checkSmallToMedium","checkMediumToLarge","shouldClear","expandItemToMedium","parentEle","ele_4","expandCollectionsToMedium","ele_5","Row","expandItemsToLarge","container","ele_6","insertAdjacentElement","expandCollectionsToLarge","ele_7","handleContentSize","isRemoveOverflow","Template","createTemplateContent","collapseOrder","this_1","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","groupIconCss","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","isCollapsible","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","previousItem","nextIndex","isInteracted","selectedTabContent","elements","createGroups","ribbonTab","ondblclick","btnId","tabindex","constants.DROPDOWNBUTTON_HIDE","ribbonArgs","constants.RIBBON_POPUP_CONTROL","isGroupOf","upDownKeyHandler","templateEle","getElementsByClassName","findDisabledItem","currentItemIndex","itemType","controlItem","checkBoxEle","checkBox","isIncrease","ofGroupHeader","constants.RIBBON_COLLAPSE_BUTTON","aria-label","role","removeExpandCollapse","splice","reRenderTabs","isNewTab","destroyTabItems","innerText","_i","groups_1","_a","_b","_c","_d","destroyFunction","forEach","groupList","i_1","alignType","i_2","groupContent","groupCollection","itemList","itemEle_1","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","isItemsHidden","initialProps","hiddenGroups","updateGroupProps","disabledGroups","indexOf","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","hiddenItems","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_e","getItemModuleName","i_4","i_5","removeLauncherIcon","containerId","this_3","groupButtonID_1","clearOverflowResize","selectTab","tabId","showTab","showHideTab","hideTab","enableTab","enableDisableTab","disableTab","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","headerEle","groupID","hideGroup","showHideGroup","showGroup","updateInitialProps","grpContainer","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","checkHiddenItems","isInsert","keys","checkOverflowItems","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","updateCollection","ribboncollection","updateItem","enableDisableItem","getElementById","enableItem","disableItem","toggleAttribute","unwireEvents","undefined","onPropertyChanged","newProp","oldProp","animation","tabAnimation","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","visible","ddbElement","ddbBeforeEvent","ddbAfterEvent","popupTemplate","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","isOpen","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","menuItems","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","destroyMenu","removeFileMenuTooltip","insertAfter","enableItems","disableItems","setItem","refresh","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","itemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","createBackStageContent","addBackStageMenuTooltip","onClickEvent","hideBackstage","backStageItems","HTMLElement","Popup","height","relateTo","updatePopupPositionOnRtl","code","popupStyle","right","left","backButton","closeBtnEle","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","addBackstageItems","backstageItems","item1","removeBackstageItems","show","hide","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage"],"mappings":"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"}
|