@syncfusion/ej2-ribbon 33.2.4 → 33.2.10
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/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 +41 -3
- package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
- package/dist/es6/ej2-ribbon.es5.js +41 -3
- 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 +6 -6
- package/src/ribbon/base/ribbon.d.ts +1 -0
- package/src/ribbon/base/ribbon.js +15 -1
- package/src/ribbon/items/ribbon-dropdown.js +16 -1
- package/src/ribbon/items/ribbon-splitbutton.js +10 -1
|
@@ -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-gallery-item.js","../../src/ribbon/models/ribbon-gallery-group.js","../../src/ribbon/models/ribbon-gallery-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/models/ribbon-contextual-tab-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/items/ribbon-gallery.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/ribbon/modules/ribbon-contextualtab.js","../../src/ribbon/modules/ribbon-keytip.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 * @param {RibbonItemType} type - Gets the type of the item.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id, type) {\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 ((id && item.id === id) || (type && item.type === type)) {\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 gallery as ribbon item.\n */\n RibbonItemType[\"Gallery\"] = \"Gallery\";\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 /**\n * @param {Object} prop - Gets the property of group button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroupButtonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"keyTip\", 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, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon gallery item.\n */\nvar RibbonGalleryItem = /** @class */ (function (_super) {\n __extends(RibbonGalleryItem, _super);\n function RibbonGalleryItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property({})\n ], RibbonGalleryItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonGalleryItem.prototype, \"disabled\", void 0);\n return RibbonGalleryItem;\n}(ChildProperty));\nexport { RibbonGalleryItem };\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 { RibbonGalleryItem } from './ribbon-gallery-item';\n/**\n * Defines the ribbon gallery group.\n */\nvar RibbonGalleryGroup = /** @class */ (function (_super) {\n __extends(RibbonGalleryGroup, _super);\n function RibbonGalleryGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryItem)\n ], RibbonGalleryGroup.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"header\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemWidth\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemHeight\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"cssClass\", void 0);\n return RibbonGalleryGroup;\n}(ChildProperty));\nexport { RibbonGalleryGroup };\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, Event } from '@syncfusion/ej2-base';\nimport { RibbonGalleryGroup } from './ribbon-gallery-group';\n/**\n * Defines the ribbon gallery settings.\n */\nvar RibbonGallerySettings = /** @class */ (function (_super) {\n __extends(RibbonGallerySettings, _super);\n function RibbonGallerySettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryGroup)\n ], RibbonGallerySettings.prototype, \"groups\", void 0);\n __decorate([\n Property(3)\n ], RibbonGallerySettings.prototype, \"itemCount\", void 0);\n __decorate([\n Property(null)\n ], RibbonGallerySettings.prototype, \"selectedItemIndex\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"itemHover\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeSelect\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"select\", void 0);\n return RibbonGallerySettings;\n}(ChildProperty));\nexport { RibbonGallerySettings };\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';\nimport { RibbonGallerySettings } from './ribbon-gallery-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('')\n ], RibbonItem.prototype, \"keyTip\", void 0);\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 __decorate([\n Complex({}, RibbonGallerySettings)\n ], RibbonItem.prototype, \"gallerySettings\", 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 Property('')\n ], RibbonGroup.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"launcherIconKeyTip\", void 0);\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, \"keyTip\", void 0);\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 __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"keyTip\", 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, \"keyTip\", 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('')\n ], BackStageMenu.prototype, \"keyTip\", 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","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, Collection } from '@syncfusion/ej2-base';\nimport { RibbonTab } from './ribbon-tab';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTabSettings = /** @class */ (function (_super) {\n __extends(RibbonContextualTabSettings, _super);\n function RibbonContextualTabSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of contextual tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonContextualTabSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"isSelected\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], RibbonContextualTabSettings.prototype, \"tabs\", void 0);\n return RibbonContextualTabSettings;\n}(ChildProperty));\nexport { RibbonContextualTabSettings };\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 RIBBON_KEYTIP = 'e-ribbon-keytip';\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_CONTEXTUAL_TAB = 'e-ribbon-contextual-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_BUTTON_CONTENT = 'e-ribbon-group-button-content';\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_KEYTIP_ID = '_keytip';\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 if (btnSettings.htmlAttributes.id) {\n delete btnSettings.htmlAttributes.id;\n }\n setCustomAttributes(buttonEle, btnSettings.htmlAttributes);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n if (btnSettings.content) {\n buttonEle.setAttribute('aria-label', btnSettings.content);\n }\n else {\n buttonEle.setAttribute('aria-label', 'button');\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 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 if (overflowButton.element.classList.contains('e-active')) {\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 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 if (!buttonObj.disabled) {\n buttonObj.click();\n }\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 if (checkBoxSettings.htmlAttributes) {\n if (checkBoxSettings.htmlAttributes.id) {\n delete checkBoxSettings.htmlAttributes.id;\n }\n }\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 if (overflowButton.element.classList.contains('e-active')) {\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 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 if (!checkBoxObj.disabled) {\n checkBoxObj.click();\n }\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: function (e) {\n colorPickerSettings.value = e.value.toString();\n if (colorPickerSettings.change) {\n colorPickerSettings.change.call(_this, e);\n }\n },\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 if (colorPickerSettings.htmlAttributes.id) {\n delete colorPickerSettings.htmlAttributes.id;\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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 if (!colorPickerObj.disabled) {\n colorPickerObj.toggle();\n }\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 if (comboBoxSettings.htmlAttributes) {\n if (comboBoxSettings.htmlAttributes.id) {\n delete comboBoxSettings.htmlAttributes.id;\n }\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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 if (dropDownSettings.htmlAttributes.id) {\n delete dropDownSettings.htmlAttributes.id;\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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 var dropdownObj = this.getDropDownObj(controlId);\n if (!dropdownObj) {\n return;\n }\n if (!dropdownObj.disabled) {\n dropdownObj.toggle();\n }\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 if (splitButtonSettings.htmlAttributes.id) {\n delete splitButtonSettings.htmlAttributes.id;\n }\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.beforeOpen = function (e) {\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n };\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\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 if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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.beforeOpen = function (e) {\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n };\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 var splitBtnObj = this.getSplitButtonObj(controlId);\n if (!splitBtnObj) {\n return;\n }\n if (!splitBtnObj.disabled) {\n splitBtnObj.toggle();\n }\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.beforeOpen;\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.grpBtnIndex = 0;\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 if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n groupButtonEle.classList.add(constants.RIBBON_GROUP_BUTTON_CONTENT);\n groupButtonEle.setAttribute('aria-label', groupBtnSettings.items[parseInt(i.toString(), 10)].content);\n }\n else {\n groupButtonEle.setAttribute('aria-label', 'groupbuttonitem');\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 this.grpBtnIndex = i;\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 _this.handleFocusState(item, itemElement);\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 = document.querySelector('#' + item.id);\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)].\n setProperties({ selected: false }, true);\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].setProperties({ selected: true }, 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 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)].\n setProperties({ selected: true }, true);\n }\n else {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].\n setProperties({ selected: false }, true);\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 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 if (this.parent.activeLayout === 'Simplified' && groupButtonEle) {\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.toggle();\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 _this.handleFocusState(item, itemElement);\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.handleFocusState = function (item, itemElement) {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n var defaultSelectedBtn = document.querySelector('#' + item.id + '_grpbtn').querySelector('.' + constants.RIBBON_GROUP_BUTTON + '.e-active');\n if (defaultSelectedBtn) {\n defaultSelectedBtn.focus();\n }\n else {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\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 * @param {DropDownButton} overflowButton - Gets the overflow button.\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 if (groupButtonEle) {\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_1 = dropdown.target;\n if (targetEle_1.children.length) {\n for (var i = 0; i < targetEle_1.children.length; i++) {\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n isIconOnly = false;\n break;\n }\n }\n if (isIconOnly) {\n targetEle_1.classList.add('e-icon-btn');\n }\n }\n targetEle_1.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle_1.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\n }\n };\n }\n var overflowGroupButtonEle = itemEle.querySelector('#' + item.id + '_grpbtn');\n if (this.parent.activeLayout === 'Classic' && overflowGroupButtonEle) {\n overflowGroupButtonEle.onclick = function () {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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","import { append, getComponent, remove, formatUnit, isNullOrUndefined, setValue } from '@syncfusion/ej2-base';\nimport { getItem, getTemplateFunction, setCustomAttributes } from '../base/index';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport * as constants from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGallery = /** @class */ (function () {\n function RibbonGallery(parent) {\n this.count = 0;\n this.isAdded = false;\n this.galleryItemsIndex = 0;\n this.registeredTemplate = {};\n this.parent = parent;\n var ref = 'viewContainerRef';\n setValue('registeredTemplate', this.registeredTemplate, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValue(ref, this.parent[\"\" + ref], this);\n }\n RibbonGallery.prototype.getModuleName = function () {\n return 'ribbonGallery';\n };\n RibbonGallery.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates gallery.\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 RibbonGallery.prototype.createGallery = function (item, itemEle) {\n var _this = this;\n var gallerySettings = item.gallerySettings;\n this.renderGalleryItems(gallerySettings, false, item.id, itemEle);\n var buttonEle = this.parent.createElement('button', {\n id: item.id + '_popupButton',\n className: 'e-ribbon-gallery-button e-icons e-drop-icon'\n });\n buttonEle.setAttribute('aria-label', 'gallerydropdownbutton');\n itemEle.appendChild(buttonEle);\n this.createPopup(item, buttonEle);\n buttonEle.onclick = function (args) {\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n if (popupEle) {\n var popup = getComponent(popupEle, Popup);\n if (popupEle.classList.contains('e-popup-close')) {\n _this.showPopup(popup, popupEle, args, gallerySettings, item.id);\n }\n else {\n _this.hidePopup(popup, popupEle, args, gallerySettings, item.id);\n }\n }\n };\n document.onclick = function (args) {\n var popupEle = document.querySelectorAll('.e-ribbon-gallery-popup.e-popup-open');\n var popupID;\n var itemProp;\n for (var i = 0; i < popupEle.length; i++) {\n var popup = getComponent(popupEle[parseInt(i.toString(), 10)], Popup);\n if (args.target.classList.contains('e-ribbon-gallery-button')) {\n popupID = (popupEle[parseInt(i.toString(), 10)].id).replace(/_galleryPopup/g, '');\n if ((args.target.id).replace(/_popupButton/g, '') !== popupID) {\n itemProp = getItem(_this.parent.tabs, popupID);\n _this.hidePopup(popup, popupEle[parseInt(i.toString(), 10)], args, itemProp.item.gallerySettings, popupID);\n break;\n }\n }\n else {\n popupID = (popupEle[parseInt(i.toString(), 10)].id).replace(/_galleryPopup/g, '');\n itemProp = getItem(_this.parent.tabs, popupID);\n _this.hidePopup(popup, popupEle[parseInt(i.toString(), 10)], args, itemProp.item.gallerySettings, popupID);\n break;\n }\n }\n };\n };\n RibbonGallery.prototype.renderGalleryItems = function (gallerySettings, isPopup, id, itemEle) {\n var _this = this;\n var galleryContainerEle;\n var galleryEle;\n var itemProp = getItem(this.parent.tabs, id);\n if (itemProp && itemProp.group) {\n itemProp.group.isCollapsible = false;\n }\n var galleryWrapper = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-wrapper',\n id: id + '_galleryWrapper'\n });\n if (!isPopup) {\n itemEle.appendChild(galleryWrapper);\n }\n var _loop_1 = function (i) {\n var isHeightDefined = false;\n galleryContainerEle = this_1.parent.createElement('ol', {\n className: 'e-ribbon-gallery-container',\n id: id + '_galleryContainer' + i\n });\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\n isHeightDefined = true;\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].cssClass) {\n galleryContainerEle.classList.add(gallerySettings.groups[parseInt(i.toString(), 10)].cssClass);\n }\n var _loop_2 = function (j) {\n galleryEle = this_1.parent.createElement('li', {\n className: 'e-ribbon-gallery-item',\n id: (isPopup ? 'popup_' : '') + galleryContainerEle.id + '_gallery' + j,\n attrs: { 'tabindex': '0' }\n });\n var itemEventArgs = { name: 'beforeItemRender', item: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)] };\n if (gallerySettings.beforeItemRender) {\n gallerySettings.beforeItemRender.call(this_1, itemEventArgs);\n }\n galleryContainerEle.appendChild(galleryEle);\n if (gallerySettings.selectedItemIndex && gallerySettings.selectedItemIndex === this_1.count) {\n galleryEle.classList.add('e-ribbon-gallery-selected');\n }\n else {\n if (!gallerySettings.selectedItemIndex && this_1.count === 0) {\n galleryEle.classList.add('e-ribbon-gallery-selected');\n gallerySettings.selectedItemIndex = this_1.count;\n }\n }\n this_1.count = this_1.count + 1;\n galleryEle.onclick = function (e) {\n _this.setActiveState(e.currentTarget, gallerySettings, id, true, e, isPopup);\n };\n galleryEle.onkeydown = function (e) {\n if (e.key === 'Enter' || e.key === ' ') {\n _this.setActiveState(e.currentTarget, gallerySettings, id, true, e, isPopup);\n }\n };\n galleryEle.onmouseover = function (e) {\n var hoverEventArgs = { event: e, name: 'itemHover', item: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)] };\n if (gallerySettings.itemHover) {\n gallerySettings.itemHover.call(_this, hoverEventArgs);\n }\n };\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth && gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth !== 'auto') {\n galleryEle.style.width = gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth + 'px';\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\n galleryEle.style.height = gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight + 'px';\n if (this_1.parent.activeLayout !== 'Simplified' && !isPopup) {\n galleryContainerEle.style.flexFlow = 'wrap';\n }\n }\n if ((!gallerySettings.template && !gallerySettings.popupTemplate) ||\n ((gallerySettings.template && !gallerySettings.popupTemplate) && isPopup) ||\n ((gallerySettings.popupTemplate && !gallerySettings.template) && !isPopup)) {\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].htmlAttributes) {\n setCustomAttributes(galleryEle, gallerySettings.groups[parseInt(i.toString(), 10)]\n .items[parseInt(j.toString(), 10)].htmlAttributes);\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss) {\n var iconEle = this_1.parent.createElement('span', {\n className: 'e-ribbon-gallery-icons' + ' ' + gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss\n });\n galleryEle.appendChild(iconEle);\n if (this_1.parent.activeLayout === 'Simplified' && !isPopup) {\n iconEle.classList.add('e-hidden');\n }\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].content) {\n galleryEle.appendChild(this_1.parent.createElement('span', {\n innerHTML: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].content,\n className: 'e-ribbon-gallery-text'\n }));\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].disabled) {\n galleryEle.classList.add('e-disabled');\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].cssClass) {\n galleryEle.classList.add(gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].cssClass);\n }\n }\n if (gallerySettings.template && !isPopup) {\n this_1.createGalleryTemplate(galleryEle, gallerySettings, id, gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)]);\n }\n if (gallerySettings.popupTemplate && isPopup) {\n this_1.createGalleryPopupTemplate(galleryEle, gallerySettings, id, gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)]);\n }\n if ((!isPopup && !isHeightDefined && (gallerySettings.itemCount === this_1.count))) {\n galleryWrapper.appendChild(galleryContainerEle);\n this_1.isAdded = true;\n return \"break\";\n }\n };\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n var state_2 = _loop_2(j);\n if (state_2 === \"break\")\n break;\n }\n if (this_1.isAdded && !isPopup) {\n return \"break\";\n }\n if (!isPopup) {\n galleryWrapper.appendChild(galleryContainerEle);\n }\n else {\n itemEle.appendChild(galleryContainerEle);\n }\n if (isPopup && gallerySettings.groups[parseInt(i.toString(), 10)].header) {\n var headerEle = (this_1.parent.createElement('div', {\n className: 'e-ribbon-gallery-header',\n innerHTML: gallerySettings.groups[parseInt(i.toString(), 10)].header\n }));\n itemEle.insertBefore(headerEle, galleryContainerEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n this.count = 0;\n this.isAdded = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.portals = this.parent.portals.concat(this['portals']);\n this.parent['renderReactTemplates']();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this['portals'] = undefined;\n }\n };\n RibbonGallery.prototype.setWrapperWidth = function (itemCount, galleryWrapper, gallerySettings, itemID) {\n var count = 1;\n var itemsWidth = 0;\n var isWidthApplied = false;\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (itemCount >= count) {\n var galleryItemEle = galleryWrapper.querySelector('#' + itemID + '_galleryContainer' + i + '_gallery' + j);\n if (galleryItemEle) {\n itemsWidth += galleryItemEle.offsetWidth;\n var itemStyles = window.getComputedStyle(galleryItemEle);\n if (itemStyles) {\n var paddingWidth = parseFloat(itemStyles.paddingLeft) + parseFloat(itemStyles.paddingRight);\n if (!(isNullOrUndefined(paddingWidth))) {\n itemsWidth += paddingWidth;\n }\n var marginWidth = parseFloat(itemStyles.marginLeft) + parseFloat(itemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsWidth += marginWidth;\n }\n }\n }\n }\n else {\n isWidthApplied = true;\n break;\n }\n count++;\n }\n if (isWidthApplied) {\n break;\n }\n }\n if (itemsWidth > 0) {\n galleryWrapper.style.width = itemsWidth + 'px';\n }\n };\n RibbonGallery.prototype.setWrapperStyle = function (popup, popupContainerItems) {\n if (popup.width !== 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'column wrap';\n });\n }\n };\n /**\n * Checks the gallery items height.\n *\n * @param {HTMLElement} activeContent - Gets the current active content.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.checkAvailableHeight = function (activeContent) {\n var galleryWrapperItems = activeContent.querySelectorAll('.e-ribbon-gallery-wrapper');\n for (var n = 0; n < galleryWrapperItems.length; n++) {\n var count = 0;\n var simplifiedItemsCount = 0;\n var isHeight = false;\n var galleryWrapper = galleryWrapperItems[parseInt(n.toString(), 10)];\n var itemID = galleryWrapper.id.replace(/_galleryWrapper/g, '');\n var galleryWrapperHeight = galleryWrapper.offsetHeight;\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemProp) {\n this.setWrapperWidth(itemProp.item.gallerySettings.itemCount, galleryWrapper, itemProp.item.gallerySettings, itemID);\n for (var i = 0; i < itemProp.item.gallerySettings.groups.length; i++) {\n for (var j = 0; j < itemProp.item.gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n var galleryItemEle = galleryWrapper.querySelector('#' + itemID + '_galleryContainer' + i + '_gallery' + j);\n if (galleryItemEle) {\n if (this.parent.activeLayout === 'Classic') {\n if (galleryItemEle.classList.contains('e-hidden')) {\n galleryItemEle.classList.remove('e-hidden');\n }\n if (!isHeight) {\n var itemsValues = 0;\n var itemStyles = window.getComputedStyle(galleryItemEle);\n if (itemStyles) {\n var marginWidth = parseFloat(itemStyles.marginTop) + parseFloat(itemStyles.marginBottom);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsValues += marginWidth;\n }\n }\n count++;\n if (itemProp.item.gallerySettings.itemCount === count) {\n count = 0;\n if (galleryWrapperHeight >= (galleryItemEle.offsetHeight + itemsValues)) {\n galleryWrapperHeight -= (galleryItemEle.offsetHeight + itemsValues);\n }\n else {\n isHeight = true;\n galleryItemEle.remove();\n }\n }\n else if (galleryWrapperHeight < (galleryItemEle.offsetHeight + itemsValues)) {\n isHeight = true;\n galleryItemEle.remove();\n }\n }\n else {\n galleryItemEle.remove();\n }\n }\n else {\n simplifiedItemsCount++;\n if (simplifiedItemsCount > itemProp.item.gallerySettings.itemCount) {\n galleryItemEle.classList.add('e-hidden');\n }\n }\n }\n }\n }\n }\n }\n };\n /**\n * Checks the popup collision.\n *\n * @param {Popup} popup - Gets the popup.\n * @param {HTMLElement} popupEle - Gets the popup element.\n * @param {number} offsetValue - Gets the offset value of gallery popup button.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.checkCollision = function (popup, popupEle, offsetValue) {\n if (offsetValue === void 0) { offsetValue = 0; }\n var paddingWidth = 0;\n var marginWidth = 0;\n if (popupEle) {\n var windowWidth = window.innerWidth;\n var screenWidth = offsetValue === 0 ? windowWidth : Math.abs(windowWidth - (windowWidth - offsetValue));\n var paddingStyles = window.getComputedStyle(popupEle);\n if (paddingStyles) {\n paddingWidth = parseFloat(paddingStyles.paddingLeft) + parseFloat(paddingStyles.paddingRight);\n if (!(isNullOrUndefined(paddingWidth))) {\n screenWidth = screenWidth - paddingWidth;\n }\n }\n var popupContainerItems = popupEle.querySelectorAll('.e-ribbon-gallery-container');\n this.setWrapperStyle(popup, popupContainerItems);\n var isCollideOccurs = false;\n for (var i = 0; i < popupContainerItems.length; i++) {\n var itemsWidth = 0;\n for (var j = 0; j < popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item').length; j++) {\n var popupItemStyles = window.getComputedStyle(popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)]);\n if (popupItemStyles) {\n marginWidth = parseFloat(popupItemStyles.marginLeft) + parseFloat(popupItemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsWidth += marginWidth;\n }\n }\n itemsWidth += Math.round(parseFloat(popupItemStyles.width));\n if (((screenWidth <= itemsWidth) && popup.width === 'auto') || ((popup.width !== 'auto') && (screenWidth <= parseInt(popup.width.toString(), 10)) && (screenWidth <= itemsWidth))) {\n popupEle.style.width = ((itemsWidth + Math.abs(paddingWidth - marginWidth)) - Math.round(parseFloat(popupItemStyles.width))) + 'px';\n isCollideOccurs = true;\n break;\n }\n }\n if (isCollideOccurs) {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\n });\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n break;\n }\n }\n if (!isCollideOccurs) {\n if (popup.width === 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'nowrap';\n });\n popupEle.style.width = 'auto';\n }\n else {\n popupEle.style.width = (popup.width).toString();\n }\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n }\n }\n };\n RibbonGallery.prototype.setGalleryPopupHeight = function (popupEle, popupHeight, popupTop) {\n if (window.innerHeight < popupHeight || window.innerHeight < Math.round(popupHeight + popupTop)) {\n popupEle.style.height = (window.innerHeight - popupTop) + 'px';\n }\n else {\n popupEle.style.height = 'auto';\n }\n };\n RibbonGallery.prototype.createPopup = function (item, buttonEle) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-ribbon-popup-container',\n id: item.id + '_popupContainer'\n });\n this.renderGalleryItems(item.gallerySettings, true, item.id, popupContainer);\n var gallerypopupElement = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-popup',\n id: item.id + '_galleryPopup'\n });\n document.body.append(gallerypopupElement);\n var galleryPopup = new Popup(gallerypopupElement, {\n relateTo: buttonEle,\n content: popupContainer,\n collision: { X: 'fit', Y: 'flip' },\n actionOnScroll: 'hide',\n targetType: 'relative',\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n width: item.gallerySettings.popupWidth,\n height: item.gallerySettings.popupHeight\n });\n galleryPopup.hide();\n };\n /**\n * Updates gallery in mode switching.\n *\n * @param {string} activeLayout - Gets the current active layout.\n * @param {string} itemID - Gets the ribbon item id.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.switchGalleryItems = function (activeLayout, itemID) {\n var itemEle = this.parent.element.querySelector('#' + itemID + constants.CONTAINER_ID);\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemEle) {\n var galleryIcons = itemEle.querySelectorAll('.e-ribbon-gallery-icons');\n var galleryContainer = itemEle.querySelectorAll('.e-ribbon-gallery-container');\n if (galleryIcons.length) {\n for (var i = 0; i < galleryIcons.length; i++) {\n if (activeLayout === 'Simplified') {\n galleryIcons[parseInt(i.toString(), 10)].classList.add('e-hidden');\n }\n else {\n galleryIcons[parseInt(i.toString(), 10)].classList.remove('e-hidden');\n }\n }\n }\n if (galleryContainer.length && itemProp) {\n for (var n = 0; n < itemProp.item.gallerySettings.groups.length; n++) {\n for (var i = 0; i < galleryContainer.length; i++) {\n if (itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight && itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight !== 'auto') {\n if (itemID + '_galleryContainer' + n === galleryContainer[parseInt(i.toString(), 10)].id) {\n if (activeLayout === 'Simplified') {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'nowrap';\n }\n else {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'wrap';\n }\n }\n }\n }\n }\n }\n var activeContent = this.parent.tabObj.element.querySelector('#' + this.parent.tabs[this.parent.selectedTab].id + constants.CONTENT_ID);\n if (activeContent) {\n this.checkAvailableHeight(activeContent);\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 RibbonGallery.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n if (itemEle.closest('.e-ribbon-overflow-target')) {\n var buttonEle_1 = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle_1);\n if (itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.contains('e-disabled')) {\n buttonEle_1.classList.add('e-disabled');\n }\n itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.add('e-hidden');\n itemEle.querySelectorAll('.e-ribbon-gallery-container').forEach(function (ele) {\n ele.classList.add('e-hidden');\n });\n var popupButton = itemEle.querySelector('#' + item.id + '_popupButton');\n if (popupButton) {\n popupButton.classList.add('e-hidden');\n }\n var itemProp = getItem(this.parent.tabs, item.id);\n var iconCss = itemProp && itemProp.group.groupIconCss ? itemProp.group.groupIconCss : '';\n var content = itemProp && itemProp.group.header ? itemProp.group.header : '';\n if (!iconCss) {\n for (var i = 0; i < item.gallerySettings.groups.length; i++) {\n for (var j = 0; j < item.gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (item.gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss) {\n iconCss = item.gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss;\n break;\n }\n }\n if (iconCss) {\n break;\n }\n }\n }\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n var popup_1 = getComponent(popupEle, Popup);\n var popupContainerEle_1 = document.querySelector('#' + item.id + '_galleryPopup .e-ribbon-popup-container');\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n content: content,\n target: popupContainerEle_1,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-gallery-dropdown',\n disabled: item.disabled,\n open: function () {\n var popupContainerItems = popupContainerEle_1.querySelectorAll('.e-ribbon-gallery-container');\n _this.setWrapperStyle(popup_1, popupContainerItems);\n _this.setFoucsToFirstItem(popupContainerEle_1, true, item.id);\n if (popup_1.width !== 'auto') {\n _this.alignGalleryPopupLeft(popupContainerEle_1, buttonEle_1);\n }\n },\n beforeClose: function (args) {\n var isCancelled = _this.popupEvents(args.event, item.gallerySettings, 'popupClose', false);\n if (isCancelled) {\n args.cancel = true;\n }\n }\n }, buttonEle_1);\n if (popup_1.width !== 'auto') {\n dropdown.dropDown.width = formatUnit(popup_1.width);\n }\n if (popup_1.height !== 'auto') {\n dropdown.dropDown.height = formatUnit(popup_1.height);\n dropdown.dropDown.element.style.height = (popup_1.height).toString();\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 RibbonGallery.prototype.removeOverFlowEvents = function (item, itemEle) {\n var popupButton = itemEle.querySelector('#' + item.id + '_popupButton');\n if (popupButton) {\n popupButton.classList.remove('e-hidden');\n }\n itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.remove('e-hidden');\n itemEle.querySelectorAll('.e-ribbon-gallery-container').forEach(function (ele) {\n ele.classList.remove('e-hidden');\n });\n var galleryDDBEle = document.querySelector('#' + item.id);\n if (galleryDDBEle) {\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n var dropdown = getComponent(galleryDDBEle, DropDownButton);\n popupEle.appendChild(dropdown.target);\n dropdown.destroy();\n remove(galleryDDBEle);\n }\n };\n RibbonGallery.prototype.setActiveState = function (galleryEle, gallerySettings, itemID, isInteracted, event, isPopup) {\n var previousItem;\n var currentItem;\n var itemEle = document.querySelector('#' + itemID + constants.CONTAINER_ID);\n var selctedGalleryItem = Array.prototype.slice.call(itemEle.querySelectorAll('.e-ribbon-gallery-selected'));\n var popupEle = document.querySelector('#' + itemID + '_popupContainer');\n var popupGalleryItem = Array.prototype.slice.call(popupEle.querySelectorAll('.e-ribbon-gallery-selected'));\n if (popupGalleryItem.length) {\n selctedGalleryItem = selctedGalleryItem.concat(popupGalleryItem);\n }\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (selctedGalleryItem[0].id === itemID + '_galleryContainer' + i + '_gallery' + j) {\n previousItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n if (galleryEle.id === (isPopup ? 'popup_' : '') + itemID + '_galleryContainer' + i + '_gallery' + j) {\n currentItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n }\n }\n var galleryItem = document.getElementById(galleryEle.id);\n var galleryItemPopup;\n var selectingEventArgs = { cancel: false, name: 'beforeSelect', previousItem: previousItem, currentItem: currentItem, isInteracted: isInteracted, event: event };\n if (gallerySettings.beforeSelect) {\n gallerySettings.beforeSelect.call(this, selectingEventArgs);\n }\n if (selectingEventArgs.cancel) {\n return;\n }\n else {\n for (var i = 0; i < selctedGalleryItem.length; i++) {\n selctedGalleryItem[parseInt(i.toString(), 10)].classList.remove('e-ribbon-gallery-selected');\n }\n if (!galleryItem.id.startsWith('popup_')) {\n galleryItemPopup = document.getElementById('popup_' + galleryEle.id);\n }\n else if (document.getElementById(galleryItem.id.slice(6))) {\n galleryItemPopup = document.getElementById(galleryItem.id.slice(6));\n }\n if (galleryItemPopup) {\n galleryItemPopup.classList.add('e-ribbon-gallery-selected');\n }\n galleryItem.classList.add('e-ribbon-gallery-selected');\n var selectedEventArgs = { previousItem: previousItem, currentItem: currentItem, name: 'select', isInteracted: isInteracted, event: event };\n var galleryPopupItems = document.querySelectorAll('#' + itemID + '_popupContainer .e-ribbon-gallery-item');\n for (var i = 0; i < galleryPopupItems.length; i++) {\n if (galleryPopupItems[parseInt(i.toString(), 10)].id === galleryEle.id) {\n gallerySettings.selectedItemIndex = i;\n break;\n }\n }\n if (gallerySettings.select) {\n gallerySettings.select.call(this, selectedEventArgs);\n }\n }\n };\n RibbonGallery.prototype.popupEvents = function (args, gallerySettings, name, isOpen) {\n var popupEventArgs = { cancel: false, event: args, name: name };\n if (isOpen && gallerySettings.popupOpen) {\n gallerySettings.popupOpen.call(this, popupEventArgs);\n }\n else if (!isOpen && gallerySettings.popupClose) {\n gallerySettings.popupClose.call(this, popupEventArgs);\n }\n if (popupEventArgs.cancel) {\n return true;\n }\n return false;\n };\n RibbonGallery.prototype.showPopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupOpen', true);\n if (isCancelled) {\n return;\n }\n popup.show();\n this.checkCollision(popup, popupEle);\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.add('e-gallery-button-active');\n var buttonPosition = buttonEle.getBoundingClientRect();\n if (popupEle.offsetWidth > buttonPosition.left) {\n this.checkCollision(popup, popupEle, buttonPosition.left);\n }\n var offsetX = Math.abs((popupEle.offsetWidth - buttonPosition.left)) + buttonEle.offsetWidth;\n popupEle.style.left = offsetX + 'px';\n popupEle.style.top = popupEle.getBoundingClientRect().top + 2 + 'px';\n this.setFoucsToFirstItem(popupEle, false, itemID, popup, gallerySettings);\n };\n RibbonGallery.prototype.hidePopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupClose', false);\n if (isCancelled) {\n return;\n }\n popup.hide();\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.remove('e-gallery-button-active');\n };\n /**\n * Shows a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.showGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.showPopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n /**\n * Hides a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.hideGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.hidePopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n RibbonGallery.prototype.setFoucsToFirstItem = function (popupEle, isDropdown, itemID, popup, gallerySettings) {\n var _this = this;\n popupEle.querySelectorAll('.e-ribbon-gallery-item')[0].focus();\n this.galleryItemsIndex = 0;\n popupEle.onkeydown = function (e) {\n _this.handleGalleryPopupNavigation(e, popupEle, isDropdown, itemID, popup, gallerySettings);\n };\n };\n RibbonGallery.prototype.alignGalleryPopupLeft = function (popup, buttonEle) {\n var popupEl = popup.parentElement;\n if (!popupEl) {\n return;\n }\n var currentLeft = parseFloat(popupEl.style.left);\n var buttonRect = buttonEle.getBoundingClientRect();\n var popupWidth = popupEl.offsetWidth;\n var targetLeft = buttonRect.left - popupWidth - 1;\n if (targetLeft < 0) {\n targetLeft = 1;\n }\n if (Math.abs(currentLeft - targetLeft) > 1) {\n popupEl.style.left = targetLeft + \"px\";\n }\n };\n RibbonGallery.prototype.handleGalleryPopupNavigation = function (e, popupEle, isDropdown, itemID, popup, gallerySettings) {\n var galleryPopupEle = popupEle.querySelectorAll('.e-ribbon-gallery-item');\n if (galleryPopupEle) {\n if (e.key === 'Home') {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'End') {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n this.galleryItemsIndex++;\n if (this.galleryItemsIndex !== galleryPopupEle.length) {\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n if (this.galleryItemsIndex !== 0) {\n this.galleryItemsIndex--;\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if ((e.key === 'Enter' || e.code === 'Space') || (e.key === 'Escape' && !isDropdown)) {\n this.hidePopup(popup, popupEle, e, gallerySettings, itemID);\n }\n }\n };\n RibbonGallery.prototype.createGalleryTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-template');\n var templateName = 'ribbon' + id + 'galleryTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.template);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n RibbonGallery.prototype.createGalleryPopupTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-popup-template');\n var templateName = 'ribbon' + id + 'galleryPopupTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.popupTemplate);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryPopupTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n return RibbonGallery;\n}());\nexport { RibbonGallery };\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, L10n } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu, RibbonContextualTabSettings } 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 { Popup } from '@syncfusion/ej2-popups';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\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.keysPress = '';\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.hiddenGroups = [];\n this.itemsModel = [];\n this.targetTabs = {};\n this.isAddRemove = false;\n this.isUpdateItems = 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], name: 'RibbonButton' }, { member: 'ribbonDropDown', args: [this], name: 'RibbonDropDown' }, { member: 'ribbonSplitButton', args: [this], name: 'RibbonSplitButton' }, { member: 'ribbonCheckBox', args: [this], name: 'RibbonCheckBox' }, { member: 'ribbonComboBox', args: [this], name: 'RibbonComboBox' }, { member: 'ribbonGroupButton', args: [this], name: 'RibbonGroupButton' });\n var canInjectColorPickerModule = getItem(this.tabs, null, RibbonItemType.ColorPicker);\n var canInjectGalleryModule = getItem(this.tabs, null, RibbonItemType.Gallery);\n if (canInjectColorPickerModule) {\n modules.push({ member: 'ribbonColorPicker', args: [this], name: 'RibbonColorPicker' });\n }\n if (canInjectGalleryModule) {\n modules.push({ member: 'ribbonGallery', args: [this], name: 'RibbonGallery' });\n }\n if (this.backStageMenu.visible || this.backStageMenu.items.length) {\n modules.push({ member: 'ribbonBackstage', args: [this], name: 'RibbonBackstage' });\n }\n if (this.fileMenu.visible || this.fileMenu.menuItems.length) {\n modules.push({ member: 'ribbonFileMenu', args: [this], name: 'RibbonFileMenu' });\n }\n if (this.contextualTabs.length) {\n modules.push({ member: 'ribbonContextualTab', args: [this], name: 'RibbonContextualTab' });\n }\n if (this.enableKeyTips) {\n modules.push({ member: 'ribbonKeyTip', args: [this], name: 'RibbonKeyTip' });\n }\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n this.initializeLocale();\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.ribbonContextualTabModule) {\n this.ribbonContextualTabModule.addContextualTabs();\n }\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 this.addTabOverflowKeyTip();\n createTooltip(this.element, this);\n this.isKeytipOpen = false;\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.initializeLocale = function () {\n this.l10n = new L10n('ribbon', {\n groupOverflow: 'More Group Options',\n overflow: 'More Options'\n }, this.locale);\n this.l10n.setLocale(this.locale);\n };\n Ribbon.prototype.wireEvents = function () {\n this.resizeListener = this.resizeHandler.bind(this);\n EventHandler.add(window, 'resize', this.resizeListener);\n EventHandler.add(document.body, 'keydown', this.keytipActionHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseEventHandler, this);\n EventHandler.add(document, 'scroll', this.mouseEventHandler, 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 galleryElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-gallery-item'));\n var ribbonControls = controlElements.concat(templateElements, galleryElements);\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') || e.target.classList.contains('e-ribbon-gallery-item')) {\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-gallery-item')) && !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 if (!isNullOrUndefined(activeContent)) {\n this.checkOverflow(this.selectedTab, activeContent);\n }\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 activePopups = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active, .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active');\n var colorPickerPopups = document.querySelectorAll('.e-ribbon .e-colorpicker-wrapper.e-ribbon-control.e-ribbon-open .e-colorpicker, .e-ribbon-group-overflow-ddb .e-colorpicker-wrapper.e-ribbon-control.e-ribbon-open .e-colorpicker');\n activePopups.forEach(function (popup) {\n var dropDownBtn = getInstance(popup, DropDownButton);\n if (dropDownBtn) {\n dropDownBtn.toggle();\n }\n });\n colorPickerPopups.forEach(function (picker) {\n var colorPickerObj = getInstance(picker, ColorPicker);\n if (colorPickerObj) {\n colorPickerObj.toggle();\n colorPickerObj.refresh();\n }\n });\n }\n var galleryPopupEle = document.querySelector('.e-ribbon-gallery-popup.e-popup-open');\n if (galleryPopupEle) {\n var popup = getComponent(galleryPopupEle, Popup);\n popup.hide();\n }\n if (this.ribbonKeyTipModule && this.enableKeyTips) {\n this.ribbonKeyTipModule.removeKeytip();\n }\n };\n Ribbon.prototype.mouseEventHandler = function () {\n if (this.ribbonKeyTipModule && this.enableKeyTips) {\n this.ribbonKeyTipModule.removeKeytip();\n }\n };\n Ribbon.prototype.keytipActionHandler = function (e) {\n if (this.enableKeyTips) {\n var isKeyTipPresent = false;\n var keyPress = e.key;\n if (e.altKey && e.key === 'Meta') {\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 this.ribbonKeyTipModule.removeKeytip();\n }\n else {\n if (!this.isKeytipOpen) {\n var backstagePopup = document.querySelector('.e-ribbon-backstage-popup');\n if (backstagePopup && backstagePopup.classList.contains('e-popup-open')) {\n this.ribbonBackstageModule.hideBackstage();\n }\n this.ribbonKeyTipModule.createKeytip('tab');\n }\n else {\n this.ribbonKeyTipModule.removeKeytip();\n }\n }\n }\n else if (e.key === 'Escape' || e.key === 'Tab' || e.key === 'ArrowLeft' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n this.ribbonKeyTipModule.removeKeytip(e.key);\n }\n else {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n if (keyTipItems) {\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML.toLowerCase() === keyPress) {\n isKeyTipPresent = true;\n this.ribbonKeyTipModule.keytipPress(keyPress);\n break;\n }\n }\n if (!isKeyTipPresent) {\n this.checkKeyTipPresent(keyPress, this.keysPress.length);\n }\n }\n }\n }\n };\n Ribbon.prototype.checkKeyTipPresent = function (keyTip, length) {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML.length > 1 && keyTipItem.innerHTML[parseInt(length.toString(), 10)].toLowerCase() === keyTip) {\n this.keysPress += keyTip;\n this.ribbonKeyTipModule.keytipPress(this.keysPress);\n this.removeKeytip(this.keysPress);\n break;\n }\n }\n };\n Ribbon.prototype.removeKeytip = function (keyTip) {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML[0].toLowerCase() !== keyTip && keyTip !== '') {\n remove(keyTipItem);\n }\n }\n };\n Ribbon.prototype.addKeyTip = function (tabIndex, keyTip, id, type) {\n if (this.keyTipElements && this.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n var isKeyTipExist = false;\n if (!(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type])) {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type] = [];\n }\n if (Object.keys(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type]).length) {\n var keytipData = this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type];\n for (var i = 0; i < Object.keys(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].id === id) {\n isKeyTipExist = true;\n }\n }\n if (!isKeyTipExist) {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type].\n push({ id: id, type: type, keyTip: keyTip });\n }\n }\n else {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type].push({ id: id, type: type, keyTip: keyTip });\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 animation: this.tabAnimation\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 (args) {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n var eventArgs = { activeLayout: this.activeLayout, event: args };\n this.trigger('ribbonLayoutSwitched', eventArgs);\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 e.preventFocus = true;\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 selectedContent = this.tabObj.items[parseInt(selectedIndex.toString(), 10)].content;\n if ((!selectedContent.querySelector('.' + constants.RIBBON_GROUP)) && (this.tabs[parseInt(selectedIndex.toString(), 10)].groups.length !== 0)) {\n var elements = this.createGroups(this.tabs[parseInt(selectedIndex.toString(), 10)].groups, selectedIndex);\n append(elements, selectedContent);\n }\n var isContextual = this.isContextualTab(selectedTabId);\n this.updateSelectedState(selectedTabId);\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex, isContextual: isContextual };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.calculateHiddenElementsWidth(selectedIndex);\n if (this.isUpdateItems) {\n for (var i = 0; i < this.itemsModel.length; i++) {\n var item = this.itemsModel[parseInt(i.toString(), 10)];\n if (this.selectedTab === this.targetTabs[item.id]) {\n this.updateItem(item);\n this.itemsModel.splice(i, 1);\n i--;\n }\n }\n if (this.itemsModel.length === 0) {\n this.isUpdateItems = false;\n }\n }\n if (this.ribbonGalleryModule) {\n this.ribbonGalleryModule.checkAvailableHeight(e.selectedContent.firstChild);\n }\n this.checkOverflow(selectedIndex, selectedContent);\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.updateSelectedState = function (tabID) {\n if (this.contextualTabs.length) {\n for (var i = 0; i < this.contextualTabs.length; i++) {\n var isSelected = false;\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id === tabID) {\n isSelected = true;\n break;\n }\n }\n this.contextualTabs[parseInt(i.toString(), 10)].\n setProperties({ isSelected: isSelected }, true);\n }\n }\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 this.addTabOverflowKeyTip();\n };\n Ribbon.prototype.addTabOverflowKeyTip = function () {\n var tabOverflow = this.tabObj.element.querySelector('#_nav');\n if (tabOverflow) {\n this.keyTipElements['taboverflow'] = [];\n this.keyTipElements['taboverflow'].push({ id: tabOverflow.id, type: 'taboverflow', keyTip: '00' });\n }\n else {\n delete (this.keyTipElements['taboverflow']);\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 isGroupUpdated = false;\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 var groupHidden = false;\n var itemHidden = false;\n var isAllItemHidden = false;\n var isEmptyCollection_1 = false;\n var groupItems = void 0;\n if (groupEle.classList.contains('e-hidden') || groupEle.classList.contains('e-hide-group')) {\n groupItems = groupEle.querySelectorAll('.e-ribbon-item.e-hidden');\n if (groupItems.length) {\n for (var i_1 = 0; i_1 < groupItems.length; i_1++) {\n groupItems[parseInt(i_1.toString(), 10)].classList.remove('e-hidden');\n }\n }\n if (groupEle.classList.contains('e-hide-group')) {\n isAllItemHidden = true;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n if (this.hiddenGroups.indexOf(groupEle.id) !== -1) {\n this.hiddenGroups.splice(this.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n else {\n groupHidden = true;\n groupEle.classList.remove('e-hidden');\n }\n if (!isGroupUpdated) {\n this.calculateOverflowItemsWidth(groupEle.offsetWidth, false, tabIndex);\n this.calculateMediumDataWidth(groupEle.offsetWidth, tabIndex, false);\n isGroupUpdated = true;\n }\n }\n else {\n if (itemContainer.classList.contains('e-hidden')) {\n itemHidden = true;\n itemContainer.classList.remove('e-hidden');\n if (groupEle.classList.contains('e-ribbon-emptyCollection')) {\n isEmptyCollection_1 = true;\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n this.calculateOverflowItemsWidth(itemContainer.offsetWidth, false, tabIndex);\n this.calculateMediumDataWidth(itemContainer.offsetWidth, tabIndex, false);\n }\n }\n itemContainer.setAttribute('data-simplified-width', (activeContent.offsetWidth).toString());\n if (itemHidden) {\n itemContainer.classList.add('e-hidden');\n }\n if (groupItems && groupItems.length) {\n for (var i_2 = 0; i_2 < groupItems.length; i_2++) {\n groupItems[parseInt(i_2.toString(), 10)].classList.add('e-hidden');\n }\n }\n if (groupHidden) {\n groupEle.classList.add('e-hidden');\n }\n if (isAllItemHidden) {\n groupEle.classList.add('e-hide-group');\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n if (isEmptyCollection_1) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 _this = this;\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.Gallery || 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 (e) {\n if (isLeft) {\n if (item.type === RibbonItemType.Gallery && _this.ribbonGalleryModule) {\n _this.ribbonGalleryModule.checkCollision(dropDownPopup, dropDownPopup.element);\n }\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 if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n if (item.dropDownSettings.beforeOpen) {\n item.dropDownSettings.beforeOpen.call(_this, e);\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 var groupItemEle = tabContent.querySelector('#' + group.id);\n if (itemContainer.classList.contains('e-hidden') || groupItemEle.classList.contains('e-hidden')) {\n width = Math.abs(width - activeContent.offsetWidth);\n }\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle.append(itemContainer);\n if (itemContainer.classList.contains('e-hidden') || groupItemEle.classList.contains('e-hidden')) {\n itemContainer.setAttribute('data-simplified-width', width.toString());\n var isGroupHidden = false;\n var widthDifference = 0;\n if (itemContainer.classList.contains('e-hidden')) {\n itemContainer.classList.remove('e-hidden');\n if (groupItemEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n widthDifference = this.checkWidthDifference(itemContainer, groupItemEle);\n }\n width = itemContainer.offsetWidth + widthDifference;\n itemContainer.classList.add('e-hidden');\n }\n this.calculateOverflowItemsWidth(width, true, tabIndex);\n this.calculateMediumDataWidth(width, tabIndex, true);\n if (isGroupHidden) {\n groupItemEle.classList.add('e-hide-group');\n groupItemEle.classList.add('e-ribbon-emptyCollection');\n }\n }\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 var groupElement = tabContent.querySelector('#' + group.id);\n var itemEle = groupElement.querySelector('.' + constants.RIBBON_ITEM);\n if (groupElement.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n var itemsLength = groupElement.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (!isEmptyCollection) {\n groupElement.classList.remove('e-ribbon-emptyCollection');\n }\n }\n }\n }\n }\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0 ||\n (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 }\n for (var i = 0; i < orderedGroups.length; i++) {\n this.checkOverflowHiddenItems(orderedGroups[parseInt(i.toString(), 10)].enableGroupOverflow, tabIndex, orderedGroups[parseInt(i.toString(), 10)].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 overflowtarget;\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, isGroupOF);\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 this.addKeyTip(tabIndex, '0' + (itemProp.groupIndex + 1), overflowButton.element.id, 'grpofbtn');\n overflowtarget = overflowButton.target;\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 if (isResize) {\n overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM));\n }\n else {\n overflowBtnTarget.append(itemEle);\n }\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID, isGroupOF);\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('#' +\n 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 if (isResize) {\n ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM));\n }\n else {\n ofGroupContainer.append(itemEle);\n }\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n if (overflowtarget) {\n if (item.keyTip) {\n this.addKeyTip(tabIndex, item.keyTip, item.id, 'popupitem');\n }\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 'Gallery':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGalleryModule.addOverFlowEvents(item, itemEle);\n }\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\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 ?\n 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 if (item.type !== RibbonItemType.GroupButton) {\n setWidth(item.id);\n }\n else {\n setWidth(item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\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 if (isRemoveOverflow) {\n itemContainer.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n }\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 if (group.keyTip) {\n var overflowDDB = group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID;\n this_1.addKeyTip(tabIndex, group.keyTip, overflowDDB, 'grpoverflow');\n }\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 var overflowDDB = document.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var overflowButton = getInstance(overflowDDB, DropDownButton);\n if (overflowButton) {\n var overflowtarget = overflowButton.target;\n if (overflowtarget) {\n if (this_1.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n if (item.type === RibbonItemType.GroupButton) {\n for (var i_3 = 0; i_3 < item.groupButtonSettings.items.length; i_3++) {\n if (item.groupButtonSettings.items[parseInt(i_3.toString(), 10)].keyTip) {\n this_1.addKeyTip(tabIndex, item.groupButtonSettings.items[parseInt(i_3.toString(), 10)].keyTip, item.id + (constants.RIBBON_GROUP_BUTTON_ID + i_3), 'grpoverflowpopup');\n }\n }\n }\n if (item.keyTip) {\n this_1.addKeyTip(tabIndex, item.keyTip, item.id, 'grpoverflowpopup');\n }\n }\n }\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.isContextualTab = function (tabID) {\n var isContextual = false;\n if (this.contextualTabs.length) {\n for (var i = 0; i < this.contextualTabs.length; i++) {\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id === tabID) {\n isContextual = true;\n break;\n }\n }\n }\n }\n return isContextual;\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem ? e.selectingItem.getAttribute('data-id') : null;\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var isContextual = this.isContextualTab(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,\n selectedIndex: nextIndex, isContextual: isContextual\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 var _loop_3 = function (i) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this_3.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n var tabIndex = getIndex(this_3.tabs, (function (tab) { return (tab.id === ribbonTab.id); }));\n if (ribbonTab.keyTip) {\n if (!this_3.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n this_3.keyTipElements[parseInt(tabIndex.toString(), 10)] = {};\n }\n this_3.addKeyTip(tabIndex, ribbonTab.keyTip, ribbonTab.id, 'tab');\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_3.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 var this_3 = this;\n for (var i = 0; i < tabs.length; i++) {\n _loop_3(i);\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 if (this.ribbonGalleryModule) {\n this.ribbonGalleryModule.checkAvailableHeight(activeContent);\n }\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId, isGroupOF) {\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 overflowButton.setAttribute('title', isGroupOF ? this.l10n.getConstant('groupOverflow') : this.l10n.getConstant('overflow'));\n var overFlowCss = this.cssClass ? constants.SPACE + this.cssClass : '';\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB + overFlowCss,\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.element = null;\n args.cancel = true;\n }\n });\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n if (!isGroupOF) {\n this.keyTipElements['overflowbtn'] = [];\n this.keyTipElements['overflowbtn'].push({ id: btnId, type: 'overflowbtn', keyTip: '00' });\n }\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') ?\n 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 if (this.enableRtl) {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n else {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n }\n if (e.key === 'ArrowLeft') {\n if (this.enableRtl) {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n else {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\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 'Gallery':\n this.ribbonGalleryModule.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 (e) { _this.toggleLayout(e); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout(e);\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 if (this.layoutSwitcherKeyTip) {\n this.keyTipElements['collapse'] = [];\n this.keyTipElements['collapse'].push({ id: this.collapseButton.id, type: 'collapse', keyTip: this.layoutSwitcherKeyTip });\n }\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 _i = 0, _a = Object.keys(tabs); _i < _a.length; _i++) {\n var key = _a[_i];\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 _b = 0, groups_1 = groups; _b < groups_1.length; _b++) {\n var group = groups_1[_b];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _c = 0, _d = group.collections; _c < _d.length; _c++) {\n var collection = _d[_c];\n for (var _e = 0, _f = collection.items; _e < _f.length; _e++) {\n var item = _f[_e];\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 if (this.tabsInternal !== this.tabs) {\n this.tabsInternal = this.tabs;\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 }\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_4 = 0; i_4 < groupList.length; i_4++) {\n var group = groupList[parseInt(i_4.toString(), 10)];\n var alignType = groupList[parseInt(i_4.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_4, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_4, 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_5 = 0; i_5 < shrinkColumns.length; i_5++) {\n shrinkColumns[parseInt(i_5.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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 if (item.type === RibbonItemType.Gallery) {\n this.ribbonGalleryModule.switchGalleryItems(this.activeLayout, item.id);\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_6 = 0; i_6 < groupList.length; i_6++) {\n var group = groupList[parseInt(i_6.toString(), 10)];\n var alignType = groupList[parseInt(i_6.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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 if (item.type === RibbonItemType.Gallery) {\n this.ribbonGalleryModule.switchGalleryItems(this.activeLayout, item.id);\n }\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0 ||\n (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, tabIndex) {\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 var itemProp = getGroup(this.tabs, groupId);\n if (itemProp.group.launcherIconKeyTip) {\n this.addKeyTip(tabIndex, itemProp.group.launcherIconKeyTip, launcherIcon.id, 'launcher');\n }\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, tabIndex);\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 if (key === 'hiddenGroups') {\n groupEle.classList.add('e-hidden');\n }\n else {\n groupEle.classList.add('e-disabled');\n }\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 case 'Gallery':\n this.ribbonGalleryModule.createGallery(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 if (item.type === RibbonItemType.GroupButton) {\n for (var i_7 = 0; i_7 < item.groupButtonSettings.items.length; i_7++) {\n if (this.keyTipElements[parseInt(tabIndex.toString(), 10)] &&\n item.groupButtonSettings.items[parseInt(i_7.toString(), 10)].keyTip) {\n this.addKeyTip(tabIndex, item.groupButtonSettings.items[parseInt(i_7.toString(), 10)].keyTip, item.id + (constants.RIBBON_GROUP_BUTTON_ID + i_7), 'item');\n }\n }\n }\n if (item.keyTip) {\n if (item.type === RibbonItemType.Gallery) {\n this.addKeyTip(tabIndex, item.keyTip, (item.id + '_popupButton'), 'item');\n }\n else {\n this.addKeyTip(tabIndex, item.keyTip, item.id, 'item');\n }\n }\n var size = item.activeSize;\n if (!(item.type === RibbonItemType.Gallery)) {\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 }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 var htmlAttrID = void 0;\n if (type === 'item') {\n htmlAttrID = this.hasHtmlAtrrID(listitem);\n }\n listitem.setProperties({ id: htmlAttrID ? htmlAttrID : 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.hasHtmlAtrrID = function (listItem) {\n var id = '';\n if (listItem.buttonSettings.htmlAttributes.id) {\n id = listItem.buttonSettings.htmlAttributes.id;\n }\n else if (listItem.checkBoxSettings.htmlAttributes.id) {\n id = listItem.checkBoxSettings.htmlAttributes.id;\n }\n else if (listItem.colorPickerSettings.htmlAttributes.id) {\n id = listItem.colorPickerSettings.htmlAttributes.id;\n }\n else if (listItem.comboBoxSettings.htmlAttributes.id) {\n id = listItem.comboBoxSettings.htmlAttributes.id;\n }\n else if (listItem.dropDownSettings.htmlAttributes.id) {\n id = listItem.dropDownSettings.htmlAttributes.id;\n }\n else if (listItem.splitButtonSettings.htmlAttributes.id) {\n id = listItem.splitButtonSettings.htmlAttributes.id;\n }\n return id;\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_8 = 0; i_8 < item.groupButtonSettings.items.length; i_8++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_8);\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_9 = 0; i_9 < item.groupButtonSettings.items.length; i_9++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_9);\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (item.type === RibbonItemType.Gallery) {\n ele = contentEle.querySelector('#' + item.id + constants.CONTAINER_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 if (item.type === RibbonItemType.Gallery) {\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id + constants.CONTAINER_ID) : null;\n }\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_4 = 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_4.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_4.tooltipData.splice(index, 1);\n }\n }\n };\n var this_4 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_4(i);\n }\n }\n else if (moduleName === 'gallery') {\n if (ele.closest('.e-ribbon-overflow-target')) {\n destroyControl(ele, 'dropdown-btn');\n var galleryPopupEle = Array.prototype.slice.call(document.querySelectorAll('#' + item.id + '_galleryPopup'));\n galleryPopupEle.concat(Array.prototype.slice.call(document.querySelectorAll('#' + item.id + '-popup')));\n for (var i = 0; i < galleryPopupEle.length; i++) {\n galleryPopupEle[parseInt(i.toString(), 10)].remove();\n }\n var galleryPopupBtn = document.querySelector('#' + item.id + '_popupButton');\n if (galleryPopupBtn) {\n galleryPopupBtn.remove();\n }\n var galleryWrapper = document.querySelector('#' + item.id + '_galleryWrapper');\n if (galleryWrapper) {\n galleryWrapper.remove();\n }\n }\n else {\n var galleryEle = ele.querySelectorAll('.e-ribbon-gallery-item');\n var galleryPopupBtn = ele.parentElement.querySelector('#' + item.id + '_popupButton');\n if (galleryPopupBtn) {\n galleryPopupBtn.remove();\n }\n for (var i = 0; i < galleryEle.length; i++) {\n galleryEle[parseInt(i.toString(), 10)].remove();\n }\n var galleryPopupEle = document.querySelectorAll('#' + item.id + '_galleryPopup');\n for (var i = 0; i < galleryPopupEle.length; i++) {\n galleryPopupEle[parseInt(i.toString(), 10)].remove();\n }\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 /**\n * Gets the item module name.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\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 case 'Gallery':\n return 'gallery';\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 = this.tabObj.getItemIndex(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 * @param {boolean} isContextual - The boolean if the rendering is contextual.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId, isContextual) {\n if (isContextual === void 0) { isContextual = false; }\n this.showHideTab(tabId, false, isContextual);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @param {boolean} isContextual - The boolean if the rendering is contextual.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId, isContextual) {\n if (isContextual === void 0) { isContextual = false; }\n this.showHideTab(tabId, true, isContextual);\n };\n Ribbon.prototype.showHideTab = function (tabId, value, isContextual) {\n var index = this.tabObj.getItemIndex(tabId);\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n if (isContextual) {\n var contextualTab_1;\n var tabEle = this.tabObj.element;\n for (var i = 0; i < this.contextualTabs.length; i++) {\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (tabId === this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id) {\n contextualTab_1 = this.contextualTabs[parseInt(i.toString(), 10)];\n }\n }\n }\n if (contextualTab_1) {\n var isTabHidden = true;\n var _loop_5 = function (i) {\n var index_1 = getIndex(this_5.tabs, function (e) {\n return e.id === contextualTab_1.tabs[parseInt(i.toString(), 10)].id;\n });\n if (index_1 !== -1) {\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(index_1.toString(), 10)];\n if (!(toolbarEle.classList.contains('e-hidden'))) {\n isTabHidden = false;\n }\n }\n };\n var this_5 = this;\n for (var i = 0; i < contextualTab_1.tabs.length; i++) {\n _loop_5(i);\n }\n if (isTabHidden) {\n contextualTab_1.setProperties({ visible: false }, true);\n }\n else {\n contextualTab_1.setProperties({ visible: true }, true);\n }\n }\n }\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 var tbItems = this.tabObj.items[parseInt(index.toString(), 10)].content;\n this.tabObj.element.querySelector('#' + tabId + constants.HEADER_ID).classList[value ? 'remove' : 'add']('e-disabled');\n tbItems.classList[value ? 'remove' : 'add']('e-disabled');\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : 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\n === 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 this.updateHiddenElements(itemProp.tabIndex, isHidden ? 'hideGroup' : 'showGroup', groupID, isHidden, groupEle);\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 if (isHidden) {\n overflowtarget.classList.add('e-hidden');\n }\n else {\n overflowtarget.classList.remove('e-hidden');\n }\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n if (isHidden) {\n grpContainer.classList.add('e-hidden');\n }\n else {\n grpContainer.classList.remove('e-hidden');\n }\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n Ribbon.prototype.updateHiddenElements = function (tabIndex, key, id, isHidden, element, group) {\n if (isHidden) {\n if (!(element.classList.contains('e-hidden'))) {\n this.checkHiddenElements(key, id, tabIndex);\n element.classList.add('e-hidden');\n if (key === 'hideItem') {\n this.checkHiddenItems(group, isHidden, tabIndex);\n }\n this.calculateHiddenElementsWidth(tabIndex);\n }\n }\n else {\n if (element.classList.contains('e-hidden')) {\n this.checkHiddenElements(key, id, tabIndex);\n element.classList.remove('e-hidden');\n this.calculateHiddenElementsWidth(tabIndex);\n if (key === 'showItem') {\n this.checkHiddenItems(group, isHidden, tabIndex);\n }\n }\n }\n };\n Ribbon.prototype.checkHiddenElements = function (key, id, tabIndex) {\n if (this.activeLayout === 'Simplified') {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (!hiddenProps) {\n this.hiddenElements[parseInt(tabIndex.toString(), 10)] = {};\n hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n }\n if (hiddenProps) {\n if (!hiddenProps[\"\" + key]) {\n hiddenProps[\"\" + key] = [];\n }\n if (hiddenProps[\"\" + key].length) {\n var index = hiddenProps[\"\" + key].indexOf(id);\n if (index === -1) {\n hiddenProps[\"\" + key].push(id);\n }\n }\n else {\n hiddenProps[\"\" + key].push(id);\n }\n }\n }\n };\n Ribbon.prototype.updateItemsSimplifiedWidth = function (tabIndex, key) {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (hiddenProps && hiddenProps[\"\" + key] && hiddenProps[\"\" + key].length) {\n var _loop_6 = function (i) {\n var contentEle = this_6.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var hiddenEle;\n var groupEle = void 0;\n var isGroupHidden = false;\n var widthDifference = 0;\n if (key === 'hideGroup' || key === 'showGroup') {\n hiddenEle = contentEle.querySelector('#' + hiddenProps[\"\" + key][parseInt(i.toString(), 10)]);\n }\n else {\n hiddenEle = contentEle.querySelector('#' + hiddenProps[\"\" + key][parseInt(i.toString(), 10)] + constants.CONTAINER_ID);\n }\n if (hiddenEle) {\n if (key === 'hideGroup' || key === 'hideItem') {\n var isHidden = false;\n if (hiddenEle.classList.contains('e-hidden')) {\n isHidden = true;\n hiddenEle.classList.remove('e-hidden');\n }\n if (key === 'hideItem') {\n groupEle = hiddenEle.closest('.e-ribbon-group');\n if (groupEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n widthDifference = this_6.checkWidthDifference(hiddenEle, groupEle);\n }\n }\n this_6.calculateOverflowItemsWidth(hiddenEle.offsetWidth + widthDifference, true, tabIndex);\n this_6.calculateMediumDataWidth(hiddenEle.offsetWidth + widthDifference, tabIndex, true);\n if (isHidden) {\n hiddenEle.classList.add('e-hidden');\n }\n }\n else {\n if (key === 'showItem') {\n groupEle = hiddenEle.closest('.e-ribbon-group');\n if (groupEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n if (this_6.hiddenGroups.indexOf(groupEle.id) !== -1) {\n this_6.hiddenGroups.splice(this_6.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n else {\n if (this_6.hiddenGroups.indexOf(groupEle.id) !== -1) {\n var hiddenItems = groupEle.querySelectorAll('.e-ribbon-item:not(.e-hidden)');\n hiddenItems.forEach(function (item) {\n if (item.id !== hiddenEle.id) {\n item.classList.add('e-hidden');\n }\n });\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n hiddenItems.forEach(function (item) {\n if (item.id !== hiddenEle.id) {\n item.classList.remove('e-hidden');\n }\n });\n this_6.hiddenGroups.splice(this_6.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n }\n this_6.calculateOverflowItemsWidth(hiddenEle.offsetWidth + widthDifference, false, tabIndex);\n this_6.calculateMediumDataWidth(hiddenEle.offsetWidth + widthDifference, tabIndex, false);\n }\n if (isGroupHidden) {\n groupEle.classList.add('e-hide-group');\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n var index = hiddenProps[\"\" + key].indexOf(hiddenProps[\"\" + key][parseInt(i.toString(), 10)]);\n if (index !== -1) {\n hiddenProps[\"\" + key].splice(index, 1);\n i--;\n }\n out_i_1 = i;\n };\n var this_6 = this, out_i_1;\n for (var i = 0; i < hiddenProps[\"\" + key].length; i++) {\n _loop_6(i);\n i = out_i_1;\n }\n }\n };\n Ribbon.prototype.checkWidthDifference = function (hiddenEle, groupEle) {\n var widthDifference = 0;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n if (this.hiddenGroups.length) {\n if (this.hiddenGroups.indexOf(groupEle.id) === -1) {\n this.hiddenGroups.push(groupEle.id);\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n }\n }\n else {\n this.hiddenGroups.push(groupEle.id);\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n }\n return widthDifference;\n };\n Ribbon.prototype.calculateHiddenElementsWidth = function (tabIndex) {\n if (tabIndex === this.selectedTab && this.activeLayout === 'Simplified') {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (hiddenProps) {\n for (var i = 0; i < Object.keys(hiddenProps).length; i++) {\n this.updateItemsSimplifiedWidth(tabIndex, Object.keys(hiddenProps)[parseInt(i.toString(), 10)]);\n }\n }\n }\n };\n Ribbon.prototype.calculateMediumDataWidth = function (hiddenWidth, tabIndex, isHidden) {\n if (this.selectedTab === tabIndex && this.activeLayout === 'Simplified') {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var mediumDataItems = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-item'));\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n var selectedOFTab = document.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n for (var i = 0; i < overflowItems.length; i++) {\n var ofTab = overflowItems[parseInt(i.toString(), 10)].closest('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (selectedOFTab && ofTab && selectedOFTab.id === ofTab.id && overflowItems[parseInt(i.toString(), 10)].hasAttribute('data-medium-width')) {\n mediumDataItems.push(overflowItems[parseInt(i.toString(), 10)]);\n }\n }\n }\n var groupOFButton = activeContent.querySelectorAll('.e-ribbon-group-of-btn');\n for (var i = 0; i < groupOFButton.length; i++) {\n var overflowButton = getInstance(groupOFButton[parseInt(i.toString(), 10)], DropDownButton);\n var overflowBtnTarget = overflowButton.target;\n var overflowItems = overflowBtnTarget.querySelectorAll('.e-ribbon-item');\n for (var i_10 = 0; i_10 < overflowItems.length; i_10++) {\n if (overflowItems[parseInt(i_10.toString(), 10)].hasAttribute('data-medium-width')) {\n mediumDataItems.push(overflowItems[parseInt(i_10.toString(), 10)]);\n }\n }\n }\n for (var i = 0; i < mediumDataItems.length; i++) {\n if (mediumDataItems[parseInt(i.toString(), 10)].hasAttribute('data-medium-width')) {\n var previousWidth = parseInt(mediumDataItems[parseInt(i.toString(), 10)].getAttribute('data-medium-width'), 10);\n mediumDataItems[parseInt(i.toString(), 10)].setAttribute('data-medium-width', isHidden ? (previousWidth - hiddenWidth).toString() : (previousWidth + hiddenWidth).toString());\n }\n }\n }\n };\n Ribbon.prototype.calculateOverflowItemsWidth = function (hiddenItem, isHidden, tabIndex) {\n if (this.selectedTab === tabIndex && this.activeLayout === 'Simplified') {\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n if (group.enableGroupOverflow) {\n var groupContainer = document.querySelector('#' + group.id);\n var overflowButton = void 0;\n var overflowDDB = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDB) {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n if (overflowButton) {\n var overflowEle = overflowButton.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n for (var i_11 = 0; i_11 < overflowItems.length; i_11++) {\n var previousWidth = parseInt(overflowItems[parseInt(i_11.toString(), 10)].getAttribute('data-simplified-width'), 10);\n if (previousWidth) {\n overflowItems[parseInt(i_11.toString(), 10)].setAttribute('data-simplified-width', isHidden ? (previousWidth - hiddenItem).toString() : (previousWidth + hiddenItem).toString());\n }\n }\n }\n }\n }\n }\n if (this.overflowDDB) {\n var selectedOFTab = document.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n var overflowEle = this.overflowDDB.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n for (var i = 0; i < overflowItems.length; i++) {\n var ofTab = overflowItems[parseInt(i.toString(), 10)].closest('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (selectedOFTab && ofTab && selectedOFTab.id === ofTab.id) {\n var previousWidth = parseInt(overflowItems[parseInt(i.toString(), 10)].getAttribute('data-simplified-width'), 10);\n if (previousWidth) {\n overflowItems[parseInt(i.toString(), 10)].setAttribute('data-simplified-width', isHidden ? (previousWidth - hiddenItem).toString() : (previousWidth + hiddenItem).toString());\n }\n }\n }\n }\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 if (isDisabled) {\n groupEle.classList.add('e-disabled');\n }\n else {\n groupEle.classList.remove('e-disabled');\n }\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 if (isDisabled) {\n overflowtarget.classList.add('e-disabled');\n }\n else {\n overflowtarget.classList.remove('e-disabled');\n }\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n if (isDisabled) {\n grpContainer.classList.add('e-disabled');\n }\n else {\n grpContainer.classList.remove('e-disabled');\n }\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 this.updateHiddenElements(itemProp.tabIndex, isHidden ? 'hideItem' : 'showItem', itemId, isHidden, itemEle, itemProp.group);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\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 if (!initialProps[\"\" + key]) {\n initialProps[\"\" + key] = [];\n }\n var itemIndex = initialProps[\"\" + key].indexOf(id);\n if (isInsert) {\n if (itemIndex === -1) {\n initialProps[\"\" + key].push(id);\n }\n }\n else {\n if (itemIndex !== -1) {\n initialProps[\"\" + key].splice(itemIndex, 1);\n }\n if (initialProps[\"\" + key].length === 0) {\n delete initialProps[\"\" + key];\n }\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 if (isHidden) {\n overflowtarget.classList.add('e-hide-group');\n }\n else {\n overflowtarget.classList.remove('e-hide-group');\n }\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 if (isHidden) {\n grpContainer.classList.add('e-hide-group');\n }\n else {\n grpContainer.classList.remove('e-hide-group');\n }\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : 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\n === 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, itemProp.tabIndex);\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 if (groupEle) {\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement = void 0;\n var dropdown = void 0;\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 (!itemContainer) {\n itemContainer = dropdown ? dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID) : groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n if (!itemEle) {\n itemEle = dropdown ? dropdown.target.querySelector('#' + itemId) : contentEle.querySelector('#' + itemId);\n }\n if (itemProp.item.type === 'Gallery') {\n if (!itemEle) {\n itemEle = contentEle.querySelector('#' + itemId + '_galleryWrapper');\n }\n }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 // 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 if (size & RibbonItemSize.Medium) {\n itemContainer.classList.add(constants.RIBBON_MEDIUM_ITEM);\n }\n else {\n itemContainer.classList.add(constants.RIBBON_SMALL_ITEM);\n }\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (itemProp.item.type === 'Gallery' && document.querySelector('#' + itemId + '_container').closest('.e-ribbon-overflow-target') && item.displayOptions !== DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n }\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow && dropdown) {\n if (dropdown.target.childElementCount === 0 ||\n (dropdown.target.childElementCount === 1 &&\n 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 if (!(ribbonItem.disabled) && itemContainer.classList.contains(constants.DISABLED_CSS)) {\n itemContainer.classList.remove(constants.DISABLED_CSS);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n }\n else {\n this.isUpdateItems = true;\n this.itemsModel.push(item);\n this.targetTabs[item.id] = itemProp.tabIndex;\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 /**\n * Gets the Ribbon item model associated with the specified item ID.\n *\n * @param {string} itemId - The unique ID of the Ribbon item.\n * @returns {RibbonItemModel} - Returns the Ribbon item model.\n */\n Ribbon.prototype.getItem = function (itemId) {\n return getItem(this.tabs, itemId).item;\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var isUpdated = false;\n var isOverflow = false;\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 if (itemProp.item.type === 'Gallery') {\n ele = document.querySelector('#' + itemId);\n if (!ele) {\n ele = document.querySelector('#' + itemId + '_galleryWrapper');\n }\n else {\n isOverflow = true;\n }\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n var moduleName = this.getItemModuleName(itemProp.item);\n isUpdated = isDisabled ? !itemEle.classList.contains(constants.DISABLED_CSS) :\n itemEle.classList.contains(constants.DISABLED_CSS);\n if (moduleName !== 'template') {\n if (isUpdated) {\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 if (moduleName === 'gallery') {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n document.getElementById(itemId + '_popupButton').classList.toggle(constants.DISABLED_CSS, isDisabled);\n if (isOverflow) {\n var galleryEle = document.getElementById(itemId + '_galleryWrapper');\n galleryEle.classList.toggle(constants.DISABLED_CSS, isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeListener);\n EventHandler.remove(document.body, 'keydown', this.keytipActionHandler);\n EventHandler.remove(document, 'mousedown', this.mouseEventHandler);\n EventHandler.remove(document, 'scroll', this.mouseEventHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n if (this.refreshing) {\n this.clearOverflowDropDown(this.selectedTab);\n }\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 this.scrollModule = null;\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.l10n = null;\n this.initialPropsData = {};\n this.hiddenGroups = [];\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.itemsModel = [];\n this.targetTabs = {};\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.l10n.setLocale(this.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 var tabEle = this.tabObj.element;\n var toolbarItem = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(newProp.selectedTab.toString(), 10)];\n if (!(toolbarItem.classList.contains('e-hidden') || toolbarItem.classList.contains('e-disable'))) {\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n }\n break;\n }\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'contextualTabs':\n for (var i = 0; i < this.contextualTabs.length; i++) {\n if (newProp.contextualTabs[parseInt(i.toString(), 10)]) {\n this.ribbonContextualTabModule.updateContextualTabs(newProp.contextualTabs[parseInt(i.toString(), 10)], this.contextualTabs[parseInt(i.toString(), 10)]);\n }\n }\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 }\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 }\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 }\n case 'hideLayoutSwitcher':\n if (this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n else {\n this.addExpandCollapse();\n }\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 Property(false)\n ], Ribbon.prototype, \"enableKeyTips\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"layoutSwitcherKeyTip\", 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 Collection([], RibbonContextualTabSettings)\n ], Ribbon.prototype, \"contextualTabs\", 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, \"ribbonLayoutSwitched\", 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 this.addFileMenuKeytip();\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.addFileMenuKeytip = function () {\n if (this.parent.fileMenu.keyTip) {\n this.parent.keyTipElements['filemenu'] = [];\n this.parent.keyTipElements['filemenu'].push({ id: this.ddbElement.id, type: 'filemenu', keyTip: this.parent.fileMenu.keyTip });\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 }\n var menuOpen = !!args.element.closest('.e-ribbon-menu.e-popup-open');\n var fileTriggerOpen = !!args.element.closest('.e-ribbon-file-menu.e-popup-open');\n var fileMenuOpen = !!document.querySelector('.e-ribbon-file-menu.e-popup-open');\n // True if the file trigger was clicked open, or if the ribbon menu is open and the file menu popup is actually present\n var isMenuOpen = fileTriggerOpen || (menuOpen && fileMenuOpen);\n if (!args.element.classList.contains('e-menu-caret-icon') && isMenuOpen) {\n this.fileMenuDDB.toggle();\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.removeFileMenuKeytip();\n this.addFileMenuTooltip(fileMenuOptions);\n this.addFileMenuKeytip();\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 this.removeFileMenuKeytip();\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 RibbonFileMenu.prototype.removeFileMenuKeytip = function () {\n var _this = this;\n if (this.parent.keyTipElements['filemenu']) {\n var index = getIndex(this.parent.keyTipElements['filemenu'], function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.parent.keyTipElements['filemenu'].splice(index, 1);\n }\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 _this.menuIndex = 0;\n _this.isCloseBtn = false;\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 this.addBackStageMenuKeyTip(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.addBackStageMenuKeyTip = function (backStageOptions) {\n if (backStageOptions.keyTip) {\n if (!(this.parent.keyTipElements['backstage'])) {\n this.parent.keyTipElements['backstage'] = [];\n }\n this.parent.keyTipElements['backstage'].push({ id: this.backstageButtonEle.id, type: 'backstage', keyTip: backStageOptions.keyTip });\n }\n if (backStageOptions.items && backStageOptions.items.length) {\n if (!(this.parent.keyTipElements['backstageMenu'])) {\n this.parent.keyTipElements['backstageMenu'] = [];\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n if (backStageOptions.items[parseInt(i.toString(), 10)].keyTip) {\n this.parent.keyTipElements['backstageMenu'].push({ id: backStageOptions.items[parseInt(i.toString(), 10)].id, type: 'backstageMenu', keyTip: backStageOptions.items[parseInt(i.toString(), 10)].keyTip });\n }\n }\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 :\n 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.hideBackstage();\n EventHandler.add(this.popupHTMLElement, 'keyup', function (e) {\n if (e.code === 'Escape') {\n _this.hideBackstage();\n }\n _this.handleNavigation(e);\n }, this);\n };\n RibbonBackstage.prototype.handleNavigation = function (e) {\n var closeBtnEle = this.popupHTMLElement.querySelector('.e-ribbon-close-btn');\n var menuItems = this.popupHTMLElement.querySelectorAll('.e-menu-item');\n var arrowUp = e.key === 'ArrowUp';\n var arrowDown = e.key === 'ArrowDown';\n if (arrowUp || arrowDown) {\n if ((arrowUp && this.menuIndex > 0) || (arrowDown && this.menuIndex < menuItems.length - 1 && !this.isCloseBtn)) {\n this.menuIndex = arrowUp ? this.menuIndex - 1 : this.menuIndex + 1;\n }\n else {\n if (closeBtnEle && !this.isCloseBtn) {\n closeBtnEle.focus();\n this.isCloseBtn = true;\n }\n else {\n this.menuIndex = arrowUp ? menuItems.length - 1 : 0;\n this.isCloseBtn = false;\n }\n }\n for (var i = 0; i < menuItems.length; i++) {\n menuItems[parseInt(i.toString(), 10)].classList.remove('e-focused');\n }\n if (!this.isCloseBtn) {\n if (arrowUp && menuItems[this.menuIndex].classList.contains('e-separator')) {\n this.menuIndex--;\n }\n else if (arrowDown && menuItems[this.menuIndex].classList.contains('e-separator')) {\n this.menuIndex++;\n }\n menuItems[this.menuIndex].classList.add('e-focused');\n menuItems[this.menuIndex].focus();\n }\n }\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 this.menuIndex = i;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element,\n 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 }\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.removeBackstageMenuKeyTip();\n this.addBackStageMenuTooltip(backStageOptions);\n this.addBackStageMenuKeyTip(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 this.removeBackstageMenuKeyTip();\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 RibbonBackstage.prototype.removeBackstageMenuKeyTip = function () {\n var _this = this;\n if (this.parent.keyTipElements['backstage'] && this.parent.keyTipElements['backstage'].length) {\n var index = getIndex(this.parent.keyTipElements['backstage'], function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.parent.keyTipElements['backstage'].splice(index, 1);\n }\n }\n if (this.parent.keyTipElements['backstageMenu'] && this.parent.keyTipElements['backstageMenu'].length) {\n for (var i = 0; i < this.parent.keyTipElements['backstageMenu'].length; i++) {\n this.parent.keyTipElements['backstageMenu'].splice(i, 1);\n i--;\n }\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 if (isAfter) {\n this.footerMenuCtrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n else {\n if (isAfter) {\n this.menuCtrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\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 constants from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTab = /** @class */ (function () {\n function RibbonContextualTab(parent) {\n this.parent = parent;\n }\n RibbonContextualTab.prototype.getModuleName = function () {\n return 'ribbonContextualTab';\n };\n RibbonContextualTab.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Contextual tab.\n *\n * @returns {void}\n * @hidden\n */\n RibbonContextualTab.prototype.addContextualTabs = function () {\n var isSelected = false;\n for (var n = 0; n < this.parent.contextualTabs.length; n++) {\n for (var i = 0; i < this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs.length; i++) {\n this.parent.addTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[parseInt(i.toString(), 10)]);\n var index = this.parent.tabs.length - 1;\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(index.toString(), 10)];\n toolbarEle.classList.add(constants.RIBBON_CONTEXTUAL_TAB);\n toolbarEle.classList.add('e-hidden');\n if (this.parent.contextualTabs[parseInt(n.toString(), 10)].visible) {\n this.parent.showTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[parseInt(i.toString(), 10)].id, true);\n if (this.parent.contextualTabs[parseInt(n.toString(), 10)].isSelected && !isSelected) {\n this.parent.selectTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[0].id);\n isSelected = true;\n }\n }\n }\n }\n };\n /**\n * Updates Contextual tab.\n *\n * @param {RibbonContextualTabSettingsModel} newProp - Specifies new properties.\n * @param {RibbonContextualTabSettingsModel} contextualTab - Gets the property of contextual tab.\n * @returns {void}\n * @hidden\n */\n RibbonContextualTab.prototype.updateContextualTabs = function (newProp, contextualTab) {\n if (!(isNullOrUndefined(newProp.visible))) {\n for (var i = 0; i < contextualTab.tabs.length; i++) {\n if (newProp.visible) {\n this.parent.showTab(contextualTab.tabs[parseInt(i.toString(), 10)].id, true);\n }\n else {\n this.parent.hideTab(contextualTab.tabs[parseInt(i.toString(), 10)].id, true);\n }\n }\n }\n if (!(isNullOrUndefined(newProp.isSelected))) {\n if (newProp.isSelected && contextualTab.visible) {\n this.parent.selectTab(contextualTab.tabs[0].id);\n }\n else {\n var tabEle = this.parent.tabObj.element;\n for (var i = 0; i < this.parent.tabs.length; i++) {\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(i.toString(), 10)];\n if (!(toolbarEle.classList.contains('e-hidden') || toolbarEle.classList.contains('e-disable'))) {\n this.parent.selectTab(this.parent.tabs[parseInt(i.toString(), 10)].id);\n break;\n }\n }\n }\n }\n if (newProp.tabs) {\n var _loop_1 = function (key) {\n var index = parseInt(key, 10);\n var tab = this_1.parent.tabs.filter(function (e) {\n return e.id === contextualTab.tabs[parseInt(index.toString(), 10)].id;\n })[0];\n this_1.parent.updateTab(tab);\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp.tabs); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n }\n };\n return RibbonContextualTab;\n}());\nexport { RibbonContextualTab };\n","import { getGroup, getItem } from '../base/utils';\nimport { getIndex } from '../base/index';\nimport * as constants from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { getInstance, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the keytip of Ribbon.\n */\nvar RibbonKeyTip = /** @class */ (function () {\n function RibbonKeyTip(parent) {\n this.isKeytipPopupOpen = false;\n this.parent = parent;\n }\n RibbonKeyTip.prototype.getModuleName = function () {\n return 'ribbonKeyTip';\n };\n RibbonKeyTip.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the keytips.\n *\n * @param {string} key - get's the keytip type.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.createKeytip = function (key) {\n if (this.parent.keyTipElements) {\n var keytipData = void 0;\n if (key === 'tab') {\n for (var i = 0; i < this.parent.tabs.length; i++) {\n if (this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n keytipData = this.parent.keyTipElements[parseInt(i.toString(), 10)][\"\" + key];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'tab', 'center', 'bottom', true);\n }\n }\n if (this.parent.keyTipElements['filemenu']) {\n keytipData = this.parent.keyTipElements['filemenu'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'filemenu');\n }\n if (this.parent.keyTipElements['backstage']) {\n keytipData = this.parent.keyTipElements['backstage'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'backstage');\n }\n if (this.parent.keyTipElements['collapse']) {\n keytipData = this.parent.keyTipElements['collapse'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'collapse');\n }\n if (this.parent.keyTipElements['taboverflow']) {\n keytipData = this.parent.keyTipElements['taboverflow'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'taboverflow');\n }\n }\n else if (key === 'popupitem') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['popupitem']) {\n var popupKeyTipData = this.parent.keyTipElements[this.parent.selectedTab]['popupitem'];\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['popupitem']).length; i++) {\n this.createKeyTipElement((popupKeyTipData[parseInt(i.toString(), 10)].id), popupKeyTipData[parseInt(i.toString(), 10)].keyTip, 'popupitem', 'left', 'top', false, true);\n }\n }\n }\n else if (key === 'backstageMenu') {\n if (this.parent.keyTipElements['backstageMenu']) {\n var backstageKeyTipData = this.parent.keyTipElements['backstageMenu'];\n for (var i = 0; i < Object.keys(this.parent.keyTipElements['backstageMenu']).length; i++) {\n this.createKeyTipElement((backstageKeyTipData[parseInt(i.toString(), 10)].id), backstageKeyTipData[parseInt(i.toString(), 10)].keyTip, 'backstageMenu', 'left', 'center');\n }\n }\n }\n else if (key === 'grpoverflowpopup' && this.parent.activeLayout === 'Classic') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpoverflowpopup']) {\n this.calculateItemPosition(key);\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['launcher']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['launcher']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['launcher'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'launcher', 'center', 'bottom', false, true);\n }\n }\n }\n else {\n this.calculateItemPosition(key);\n if (this.parent.activeLayout === 'Classic') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['launcher']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['launcher']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['launcher'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'launcher');\n }\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'grpoverflow');\n }\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n if (this.parent.keyTipElements['overflowbtn']) {\n keytipData = this.parent.keyTipElements['overflowbtn'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'overflowbtn');\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'grpofbtn');\n }\n }\n }\n }\n }\n };\n RibbonKeyTip.prototype.calculateItemPosition = function (key, isMethod, keyTip) {\n if (isMethod === void 0) { isMethod = false; }\n var xOffset;\n var yOffset;\n var keytipData = this.parent.keyTipElements[parseInt(this.parent.selectedTab.toString(), 10)][\"\" + key];\n if (keytipData) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[parseInt(this.parent.selectedTab.toString(), 10)][\"\" + key]).length; i++) {\n if ((isMethod && (keytipData[parseInt(i.toString(), 10)].keyTip === keyTip)) || !isMethod) {\n var itemID = keytipData[parseInt(i.toString(), 10)].id;\n if (keytipData[parseInt(i.toString(), 10)].id.indexOf('_grpbtn') !== -1) {\n itemID = keytipData[parseInt(i.toString(), 10)].id.replace(/_grpbtn\\d+/, '');\n }\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemProp && itemProp.group.orientation === 'Column' && itemProp.collection.items.length > 1 && this.parent.activeLayout !== 'Simplified') {\n if (itemProp.itemIndex === 0) {\n xOffset = 'center';\n yOffset = 'top';\n }\n else if (itemProp.itemIndex === 1) {\n xOffset = 'center';\n yOffset = 'center';\n }\n else {\n xOffset = 'center';\n yOffset = 'bottom';\n }\n }\n else if (itemProp && itemProp.group.orientation === 'Row' && itemProp.group.collections.length > 1 && this.parent.activeLayout !== 'Simplified') {\n if (itemProp.collectionIndex === 0) {\n xOffset = 'center';\n yOffset = 'top';\n }\n else {\n xOffset = 'center';\n yOffset = 'bottom';\n }\n }\n if (key === 'item') {\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset);\n }\n else {\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset, false, true);\n }\n }\n }\n }\n };\n RibbonKeyTip.prototype.createKeyTipElement = function (id, keyTip, type, xOffset, yOffset, isTab, isPopUpItem) {\n if (xOffset === void 0) { xOffset = 'center'; }\n if (yOffset === void 0) { yOffset = 'bottom'; }\n if (isTab === void 0) { isTab = false; }\n if (isPopUpItem === void 0) { isPopUpItem = false; }\n var keyEle = document.querySelector('#' + id);\n var isPopUpPresent = false;\n var splitBtnID;\n if (isTab) {\n keyEle = document.querySelector('#' + id + constants.HEADER_ID);\n }\n if (keyEle) {\n if (keyEle.closest('.e-ribbon-group-overflow-ddb')) {\n isPopUpPresent = true;\n }\n if ((isTab && isPopUpItem) && keyEle.closest('.e-toolbar-pop')) {\n isPopUpPresent = true;\n }\n if (keyEle.closest('.e-split-btn-wrapper')) {\n var splitBtn = keyEle.closest('.e-split-btn-wrapper');\n splitBtnID = splitBtn.closest('.e-ribbon-item').id;\n }\n else {\n if (keyEle.closest('.e-colorpicker-wrapper')) {\n keyEle = keyEle.closest('.e-colorpicker-wrapper');\n splitBtnID = keyEle.closest('.e-ribbon-item').id;\n }\n }\n }\n if ((keyEle && keyEle.offsetParent) || (isTab && isPopUpItem)) {\n if ((isPopUpItem && isPopUpPresent) || !isPopUpItem) {\n var keytipElement = this.parent.createElement('div', {\n className: constants.RIBBON_KEYTIP,\n id: id + constants.RIBBON_KEYTIP_ID,\n attrs: { role: 'dialog', 'aria-label': 'ribbon-keytip' }\n });\n document.body.append(keytipElement);\n var keytipPopup = new Popup(keytipElement, {\n relateTo: '#' + (isTab ? id + constants.HEADER_ID : splitBtnID ? splitBtnID : id),\n content: keyTip,\n collision: { X: 'fit', Y: 'flip' },\n targetType: 'relative',\n position: { X: xOffset, Y: yOffset },\n enableRtl: this.parent.enableRtl,\n actionOnScroll: 'hide'\n });\n keytipPopup.show();\n this.calculateKeyTipPosition(keyEle, keytipElement, type, yOffset);\n this.parent.isKeytipOpen = true;\n }\n }\n };\n RibbonKeyTip.prototype.calculateKeyTipPosition = function (itemEle, keytipElement, type, yOffset) {\n var position = itemEle.getBoundingClientRect();\n if (type === 'backstageMenu') {\n keytipElement.style.top = position.top + ((keytipElement.offsetHeight) / 2) + 'px';\n keytipElement.style.left = position.left + (itemEle.offsetWidth / 5) + 'px';\n }\n else {\n if (type !== 'popupitem') {\n keytipElement.style.left = position.left + (position.width - keytipElement.offsetWidth) / 2 + 'px';\n }\n }\n if (type === 'filemenu' || type === 'backstage') {\n keytipElement.style.top = position.top + ((itemEle.offsetHeight - (itemEle.offsetHeight / 3)) + (keytipElement.offsetHeight / 6)) + 'px';\n }\n else if ((type === 'item' && yOffset === 'top')) {\n keytipElement.style.top = (position.top - (itemEle.offsetHeight) / 2) + 'px';\n }\n };\n /**\n * Performs keytip action.\n *\n * @param {string} keyPress - Gets the keytip text.\n * @param {boolean} isMethod - Gets the isMethod.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.keytipPress = function (keyPress, isMethod) {\n var _this = this;\n if (isMethod === void 0) { isMethod = false; }\n this.isKeytipPresent = false;\n for (var i = 0; ((i < Object.keys(this.parent.keyTipElements).length) && !this.isKeytipPresent); i++) {\n if (this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n for (var j = 0; ((j < Object.keys(this.parent.keyTipElements[parseInt(i.toString(), 10)]).length) &&\n !this.isKeytipPresent); j++) {\n var keytipData = this.parent.keyTipElements[parseInt(i.toString(), 10)][Object.\n keys(this.parent.keyTipElements[parseInt(i.toString(), 10)])[parseInt(j.toString(), 10)]];\n for (var k = 0; ((k < Object.keys(keytipData).length) && !this.isKeytipPresent); k++) {\n if (keyPress.toUpperCase() === keytipData[parseInt(k.toString(), 10)].keyTip) {\n var keyTipElement = document.querySelector('#' + keytipData[parseInt(k.toString(), 10)].id + constants.RIBBON_KEYTIP_ID);\n if (keyTipElement || isMethod) {\n this.isKeytipPresent = true;\n this.removeKeytip();\n if (keytipData[parseInt(k.toString(), 10)].type === 'tab') {\n if (i !== this.parent.selectedTab) {\n this.parent.tabObj.select(i);\n setTimeout(function () {\n var tabOverflow = _this.parent.tabObj.element.querySelector('.e-nav-active');\n if (tabOverflow) {\n tabOverflow.click();\n }\n _this.createKeytip('item');\n }, 600);\n }\n else {\n this.createKeytip('item');\n }\n }\n else {\n if (keytipData[parseInt(k.toString(), 10)].type === 'item' || keytipData[parseInt(k.toString(), 10)].type === 'grpoverflowpopup' || keytipData[parseInt(k.toString(), 10)].type === 'popupitem') {\n if (document.getElementById(keytipData[parseInt(k.toString(), 10)].id) && document.getElementById(keytipData[parseInt(k.toString(), 10)].id).classList.contains('e-ribbon-group-button')) {\n document.getElementById(keytipData[parseInt(k.toString(), 10)].id).click();\n }\n else {\n var itemProp = void 0;\n if ((keytipData[parseInt(k.toString(), 10)].id).indexOf('_popupButton') !== -1) {\n var galleryID = keytipData[parseInt(k.toString(), 10)].id.replace(/_popupButton/g, '');\n itemProp = getItem(this.parent.tabs, galleryID);\n }\n else {\n itemProp = getItem(this.parent.tabs, keytipData[parseInt(k.toString(), 10)].id);\n }\n if (!isMethod || (isMethod && itemProp.tabIndex === this.parent.selectedTab)) {\n this.clickItems(itemProp, keytipData, k, false, isMethod);\n }\n }\n }\n else if (keytipData[parseInt(k.toString(), 10)].type === 'grpoverflow' || keytipData[parseInt(k.toString(), 10)].type === 'grpofbtn' || keytipData[parseInt(k.toString(), 10)].type === 'launcher') {\n var keyEle = document.querySelector('#' + keytipData[parseInt(k.toString(), 10)].id);\n this.removeKeytip();\n if (keyEle) {\n var groupID = keytipData[parseInt(k.toString(), 10)].id;\n if (isMethod) {\n if (keytipData[parseInt(k.toString(), 10)].id.indexOf('_launcher') !== -1 || keytipData[parseInt(k.toString(), 10)].id.indexOf('_sim_grp_overflow') !== -1 || keytipData[parseInt(k.toString(), 10)].id.indexOf('_overflow_dropdown') !== -1) {\n groupID = keytipData[parseInt(k.toString(), 10)].id.replace(/_launcher|_sim_grp_overflow|_overflow_dropdown/g, '');\n var itemProp = getGroup(this.parent.tabs, groupID);\n if (itemProp.tabIndex === this.parent.selectedTab) {\n this.clickItems(itemProp, keytipData, k, true, isMethod, keyEle);\n }\n }\n }\n else {\n this.clickItems(null, keytipData, k, true, isMethod, keyEle);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n else {\n if (this.parent.keyTipElements) {\n this.commonItemsKeyTipPress(keyPress, Object.keys(this.parent.keyTipElements)[parseInt(i.toString(), 10)], isMethod);\n }\n }\n }\n };\n RibbonKeyTip.prototype.clickItems = function (itemProp, keytipData, k, isGroupItems, isMethod, keyEle) {\n if (isGroupItems) {\n keyEle.click();\n if (!(keytipData[parseInt(k.toString(), 10)].type === 'launcher')) {\n this.isKeytipPopupOpen = true;\n if (keytipData[parseInt(k.toString(), 10)].type === 'grpoverflow') {\n this.createKeytip('grpoverflowpopup');\n }\n else {\n this.createKeytip('popupitem');\n }\n }\n }\n else {\n var itemID = keytipData[parseInt(k.toString(), 10)].id;\n if (document.querySelector('#' + itemID) && isMethod) {\n if (this.parent.activeLayout === 'Simplified') {\n if (document.querySelector('#' + itemID).closest('#' + itemProp.group.id + '_sim_grp_overflow-popup') && document.querySelector('#' + itemID).closest('#' + itemProp.group.id + '_sim_grp_overflow-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + itemProp.group.id + '_sim_grp_overflow').click();\n }\n else if (document.querySelector('#' + itemID).closest('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID + '-popup') && document.querySelector('#' + itemID).closest('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID + '-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID).click();\n }\n }\n else {\n if (document.querySelector('#' + itemID).closest('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID + '-popup') && document.querySelector('#' + itemID).closest('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID + '-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID).click();\n }\n }\n }\n var itemType = this.parent.getItemModuleName(itemProp.item);\n switch (itemType) {\n case 'btn':\n this.parent.ribbonButtonModule.click(itemID);\n break;\n case 'dropdown-btn':\n this.parent.ribbonDropDownModule.toggle(itemID);\n break;\n case 'split-btn':\n this.parent.ribbonSplitButtonModule.toggle(itemID);\n break;\n case 'checkbox':\n this.parent.ribbonCheckBoxModule.click(itemID);\n break;\n case 'colorpicker':\n this.parent.ribbonColorPickerModule.toggle(itemID);\n break;\n case 'combobox': {\n var itemEle_1 = document.querySelector('#' + itemID);\n if (this.isInteractableElement(itemEle_1)) {\n setTimeout(function () {\n itemEle_1.focus();\n }, 100);\n }\n break;\n }\n case 'gallery': {\n var galleryEle = document.querySelector('#' + itemID);\n if (this.isInteractableElement(galleryEle)) {\n galleryEle.click();\n }\n break;\n }\n case 'template': {\n var templateEle = document.querySelector('#' + itemID);\n if (this.isInteractableElement(templateEle)) {\n templateEle.focus();\n }\n break;\n }\n case 'group-btn': {\n var itemElement = document.querySelector('#' + itemID);\n if (this.isInteractableElement(itemElement)) {\n var item = getInstance(itemElement, DropDownButton);\n item.toggle();\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n if (itemProp.item.groupButtonSettings.items[parseInt(i.toString(), 10)].keyTip) {\n this.createKeyTipElement(itemID + (constants.RIBBON_GROUP_BUTTON_ID + i), itemProp.item.groupButtonSettings.items[parseInt(i.toString(), 10)].keyTip, 'item');\n }\n }\n }\n break;\n }\n }\n }\n };\n RibbonKeyTip.prototype.isInteractableElement = function (element) {\n return element && !element.closest('.e-ribbon-item').classList.contains('e-disabled');\n };\n RibbonKeyTip.prototype.commonItemsKeyTipPress = function (keyPress, key, isMethod) {\n var _this = this;\n if (this.parent.keyTipElements[\"\" + key]) {\n var isKeyPressed = false;\n var keytipData = this.parent.keyTipElements[\"\" + key];\n var keyEle = void 0;\n var keytipElement = void 0;\n if (keytipData) {\n if (key === 'backstageMenu') {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[\"\" + key]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[parseInt(i.toString(), 10)].id);\n keytipElement = document.querySelector('#' + keyEle.id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n if (isMethod && document.querySelector('.e-ribbon-backstage-popup').classList.contains('e-popup-close')) {\n this.parent.tabObj.element.querySelector('.e-ribbon-backstage').click();\n }\n break;\n }\n }\n }\n }\n else {\n if (keytipData[0] && keytipData[0].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[0].id);\n keytipElement = document.querySelector('#' + keytipData[0].id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n }\n }\n }\n }\n if (isKeyPressed) {\n this.removeKeytip();\n this.isKeytipPresent = true;\n if (keyEle) {\n keyEle.click();\n if (key === 'backstage') {\n this.createKeytip('backstageMenu');\n }\n else if (key === 'overflowbtn') {\n this.isKeytipPopupOpen = true;\n this.createKeytip('popupitem');\n }\n else if (key === 'taboverflow') {\n setTimeout(function () {\n for (var i = 0; i < Object.keys(_this.parent.keyTipElements).length; i++) {\n if (_this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n var keytipData_1 = _this.parent.keyTipElements[parseInt(i.toString(), 10)]['tab'];\n _this.createKeyTipElement((keytipData_1[0].id), keytipData_1[0].keyTip, 'tab', 'center', 'bottom', true, true);\n }\n }\n }, 600);\n }\n }\n }\n }\n };\n /**\n * Removes the keytip.\n *\n * @param {string} key - Gets the keyboard key element.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.removeKeytip = function (key) {\n var _this = this;\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n var isKeyTipExist = false;\n this.parent.keysPress = '';\n var _loop_1 = function (i) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (key === 'Escape' && this_1.parent.keyTipElements && this_1.parent.keyTipElements[this_1.parent.selectedTab]) {\n for (var j = 0; j < Object.keys(this_1.parent.keyTipElements[this_1.parent.selectedTab]).length; j++) {\n var keyText = (Object.keys(this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)]))[parseInt(j.toString(), 10)];\n var keyTipElement = this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)];\n var index = getIndex(keyTipElement[\"\" + keyText], function (e) {\n return e.id +\n constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id;\n });\n if (index !== -1) {\n if ((keyText === 'item' && !(this_1.isKeytipPopupOpen)) || (keyText === 'grpoverflow' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n break;\n }\n else if (this_1.isKeytipPopupOpen) {\n if ((keyText === 'popupitem' && this_1.parent.activeLayout === 'Simplified') || (keyText === 'grpoverflowpopup' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('item');\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n }\n for (var n = 0; n < Object.keys(this_1.parent.keyTipElements).length; n++) {\n if (this_1.parent.keyTipElements[parseInt(n.toString(), 10)]) {\n var keytipData = this_1.parent.keyTipElements[parseInt(n.toString(), 10)]['tab'];\n for (var j = 0; j < Object.keys(keytipData).length; j++) {\n if (keyTipItem.id === keytipData[0].id + constants.RIBBON_KEYTIP_ID) {\n if (document.querySelector('#' + keytipData[0].id + constants.HEADER_ID).closest('.e-toolbar-pop')) {\n var tabOverflow = this_1.parent.tabObj.element.querySelector('.e-nav-active');\n tabOverflow.click();\n setTimeout(function () {\n _this.createKeytip('tab');\n }, 600);\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n if (isKeyTipExist) {\n break;\n }\n }\n }\n if (!isKeyTipExist && this_1.parent.keyTipElements['backstageMenu']) {\n var index = getIndex(this_1.parent.keyTipElements['backstageMenu'], function (e) { return e.id + constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id; });\n if (index !== -1) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n }\n }\n }\n if (keyTipItem) {\n remove(keyTipItem);\n }\n };\n var this_1 = this;\n for (var i = 0; i < keyTipItems.length; i++) {\n _loop_1(i);\n }\n this.isKeytipPopupOpen = false;\n if (!isKeyTipExist) {\n this.parent.isKeytipOpen = false;\n }\n };\n /**\n * Shows the Keytip dynamically.\n *\n * @param {string} keyAction - Item for which the tooltip is to be shown.\n * @returns {void}\n */\n RibbonKeyTip.prototype.showKeyTips = function (keyAction) {\n if (this.parent.enableKeyTips) {\n if (keyAction) {\n this.keytipPress(keyAction, true);\n }\n else {\n this.createKeytip('tab');\n }\n }\n };\n /**\n * Hides the Keytip dynamically.\n *\n * @returns {void}\n */\n RibbonKeyTip.prototype.hideKeyTips = function () {\n this.removeKeytip();\n };\n return RibbonKeyTip;\n}());\nexport { RibbonKeyTip };\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, index.RibbonKeyTip, index.RibbonContextualTab, index.RibbonGallery);\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","type","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","RibbonGalleryItem","RibbonGalleryGroup","RibbonGallerySettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RibbonContextualTabSettings","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","buttonObj","classList","contains","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","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","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","dropdownObj","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","splitBtnObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","grpBtnIndex","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","defaultSelectedBtn","itemID","groupButtonHeader","targetEle","isOverflowPopup","isIconOnly","targetEle_1","children","overflowGroupButtonEle","destroyDropDown","updateGroupButtonSize","RibbonGallery","isAdded","galleryItemsIndex","registeredTemplate","ref","setValue","createGallery","gallerySettings","renderGalleryItems","createPopup","popup","Popup","popupID","isPopup","galleryContainerEle","galleryEle","isCollapsible","galleryWrapper","this_1","isHeightDefined","itemHeight","attrs","tabindex","itemEventArgs","selectedItemIndex","setActiveState","currentTarget","onmouseover","hoverEventArgs","itemHover","itemWidth","style","height","flexFlow","popupTemplate","iconEle","createGalleryTemplate","createGalleryPopupTemplate","itemCount","headerEle","isReact","portals","undefined","setWrapperWidth","itemsWidth","isWidthApplied","galleryItemEle","offsetWidth","itemStyles","window","getComputedStyle","paddingWidth","parseFloat","paddingLeft","paddingRight","marginWidth","marginLeft","marginRight","setWrapperStyle","popupContainerItems","forEach","checkAvailableHeight","activeContent","galleryWrapperItems","simplifiedItemsCount","isHeight","galleryWrapperHeight","offsetHeight","itemsValues","marginTop","marginBottom","checkCollision","offsetValue","windowWidth","innerWidth","screenWidth","Math","abs","paddingStyles","isCollideOccurs","popupItemStyles","round","setGalleryPopupHeight","top","popupTop","innerHeight","popupContainer","gallerypopupElement","body","relateTo","collision","X","Y","actionOnScroll","targetType","position","hide","switchGalleryItems","galleryIcons","galleryContainer","selectedTab","buttonEle_1","popupButton","groupIconCss","popup_1","popupContainerEle_1","setFoucsToFirstItem","alignGalleryPopupLeft","popupEvents","formatUnit","galleryDDBEle","isInteracted","previousItem","currentItem","selctedGalleryItem","popupGalleryItem","galleryItemPopup","galleryItem","getElementById","selectingEventArgs","beforeSelect","startsWith","selectedEventArgs","galleryPopupItems","isOpen","popupEventArgs","popupOpen","popupClose","show","buttonPosition","getBoundingClientRect","left","offsetX","showGalleryPopup","hideGalleryPopup","isDropdown","handleGalleryPopupNavigation","popupEl","currentLeft","buttonRect","targetLeft","galleryPopupEle","code","templateName","templateFunction","isStringTemplate","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","keysPress","idIndex","initialPropsData","hiddenElements","keyTipElements","hiddenGroups","itemsModel","targetTabs","isAddRemove","isUpdateItems","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","canInjectColorPickerModule","canInjectGalleryModule","Gallery","backStageMenu","visible","fileMenu","menuItems","contextualTabs","enableKeyTips","getUniqueID","initializeLocale","renderTabs","ribbonContextualTabModule","addContextualTabs","ribbonFileMenuModule","createFileMenu","ribbonBackstageModule","createBackStage","createHelpPaneTemplate","refreshOverflow","addTabOverflowKeyTip","isKeytipOpen","wireEvents","wireKeyboardEvent","currentControlIndex","l10n","L10n","groupOverflow","overflow","setLocale","resizeListener","resizeHandler","keytipActionHandler","mouseEventHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","galleryElements","ribbonControls","action","prevGroupId","prevGroupContainer","elem","checkOverflow","scrollModule","scrollEle","scrollStep","activePopups","colorPickerPopups","dropDownBtn","getInstance","picker","refresh","ribbonKeyTipModule","removeKeytip","isKeyTipPresent","keyPress","altKey","activePopup","backstagePopup","hideBackstage","createKeytip","keyTipItems","toLowerCase","keytipPress","checkKeyTipPresent","keyTip","keyTipItem","addKeyTip","isKeyTipExist","keys","keytipData","tabsInternal","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","animation","tabAnimation","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","preventFocus","selectedTabId","selectedIndex","selectedContent","elements","createGroups","isContextual","isContextualTab","updateSelectedState","previousIndex","calculateHiddenElementsWidth","updateItem","splice","ribbonGalleryModule","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","checkOverflowHiddenItems","tabID","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","tabOverflow","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","isGroupUpdated","collectionEle","Overflow","groupHidden","itemHidden","isAllItemHidden","isEmptyCollection_1","groupItems","i_1","indexOf","calculateOverflowItemsWidth","calculateMediumDataWidth","i_2","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","itemsLength","checkEmptyCollection","isEmptyCollection","isGroupOF","isMenu","isLeft","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","groupItemEle","isGroupHidden","widthDifference","checkWidthDifference","removeOverflowEvent","groupElement","childElementCount","isHeaderVisible","removeOverflowButton","ofGroupContainer","groupId","isHidden","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","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","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","i_3","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","nextIndex","selectedTabContent","this_3","ribbonTab","ondblclick","btnId","getConstant","overFlowCss","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","layoutSwitcherKeyTip","removeExpandCollapse","reRenderTabs","_i","_a","isNewTab","destroyTabItems","innerText","_b","groups_1","_c","_d","_e","_f","destroyFunction","groupList","i_4","alignType","i_5","groupContent","groupCollection","itemList","itemEle_1","size","createItems","i_6","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","launcherIconKeyTip","groupElements","showLauncherIcon","createCollection","isItemsHidden","initialProps","updateGroupProps","disabledGroups","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","i_7","hiddenItems","helpPaneTemplate","clearTemplate","ribbonTempEle","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","list","initId","listitem","htmlAttrID","hasHtmlAtrrID","listItem","setCommonProperties","getItemModuleName","i_8","i_9","removeLauncherIcon","containerId","this_4","groupButtonID_1","galleryPopupBtn","clearOverflowResize","selectTab","tabId","getItemIndex","showTab","showHideTab","hideTab","contextualTab_1","isTabHidden","this_5","index_1","enableTab","enableDisableTab","disableTab","tbItems","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","groupID","hideGroup","showHideGroup","showGroup","updateHiddenElements","updateInitialProps","grpContainer","checkHiddenElements","checkHiddenItems","hiddenProps","updateItemsSimplifiedWidth","out_i_1","this_6","hiddenEle","hiddenWidth","mediumDataItems","overflowItems","selectedOFTab","ofTab","hasAttribute","groupOFButton","i_10","previousWidth","hiddenItem","i_11","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","isInsert","checkOverflowItems","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","updateCollection","ribboncollection","enableDisableItem","enableItem","disableItem","isUpdated","isOverflow","toggleAttribute","unwireEvents","refreshing","onPropertyChanged","newProp","oldProp","toolbarItem","updateContextualTabs","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","ddbElement","ddbBeforeEvent","ddbAfterEvent","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","addFileMenuKeytip","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","menuOpen","fileTriggerOpen","fileMenuOpen","isMenuOpen","destroyMenu","removeFileMenuTooltip","removeFileMenuKeytip","insertAfter","enableItems","disableItems","setItem","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","menuIndex","isCloseBtn","createBackStageContent","addBackStageMenuTooltip","addBackStageMenuKeyTip","onClickEvent","backStageItems","HTMLElement","updatePopupPositionOnRtl","closeBtnEle","arrowUp","arrowDown","popupStyle","right","backButton","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","removeBackstageMenuKeyTip","addBackstageItems","backstageItems","item1","removeBackstageItems","RibbonContextualTab","contextualTab","RibbonKeyTip","isKeytipPopupOpen","createKeyTipElement","popupKeyTipData","backstageKeyTipData","calculateItemPosition","isMethod","xOffset","yOffset","isTab","isPopUpItem","splitBtnID","keyEle","isPopUpPresent","offsetParent","keytipElement","calculateKeyTipPosition","isKeytipPresent","toUpperCase","setTimeout","galleryID","clickItems","commonItemsKeyTipPress","isGroupItems","isInteractableElement","isKeyPressed","keytipData_1","keyText","showKeyTips","hideKeyTips","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage","index.RibbonKeyTip","index.RibbonContextualTab","index.RibbonGallery"],"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-gallery-item.js","../../src/ribbon/models/ribbon-gallery-group.js","../../src/ribbon/models/ribbon-gallery-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/models/ribbon-contextual-tab-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/items/ribbon-gallery.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/ribbon/modules/ribbon-contextualtab.js","../../src/ribbon/modules/ribbon-keytip.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 * @param {RibbonItemType} type - Gets the type of the item.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id, type) {\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 ((id && item.id === id) || (type && item.type === type)) {\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 gallery as ribbon item.\n */\n RibbonItemType[\"Gallery\"] = \"Gallery\";\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 /**\n * @param {Object} prop - Gets the property of group button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroupButtonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"keyTip\", 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, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon gallery item.\n */\nvar RibbonGalleryItem = /** @class */ (function (_super) {\n __extends(RibbonGalleryItem, _super);\n function RibbonGalleryItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property({})\n ], RibbonGalleryItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonGalleryItem.prototype, \"disabled\", void 0);\n return RibbonGalleryItem;\n}(ChildProperty));\nexport { RibbonGalleryItem };\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 { RibbonGalleryItem } from './ribbon-gallery-item';\n/**\n * Defines the ribbon gallery group.\n */\nvar RibbonGalleryGroup = /** @class */ (function (_super) {\n __extends(RibbonGalleryGroup, _super);\n function RibbonGalleryGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryItem)\n ], RibbonGalleryGroup.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"header\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemWidth\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemHeight\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"cssClass\", void 0);\n return RibbonGalleryGroup;\n}(ChildProperty));\nexport { RibbonGalleryGroup };\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, Event } from '@syncfusion/ej2-base';\nimport { RibbonGalleryGroup } from './ribbon-gallery-group';\n/**\n * Defines the ribbon gallery settings.\n */\nvar RibbonGallerySettings = /** @class */ (function (_super) {\n __extends(RibbonGallerySettings, _super);\n function RibbonGallerySettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryGroup)\n ], RibbonGallerySettings.prototype, \"groups\", void 0);\n __decorate([\n Property(3)\n ], RibbonGallerySettings.prototype, \"itemCount\", void 0);\n __decorate([\n Property(null)\n ], RibbonGallerySettings.prototype, \"selectedItemIndex\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"itemHover\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeSelect\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"select\", void 0);\n return RibbonGallerySettings;\n}(ChildProperty));\nexport { RibbonGallerySettings };\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';\nimport { RibbonGallerySettings } from './ribbon-gallery-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('')\n ], RibbonItem.prototype, \"keyTip\", void 0);\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 __decorate([\n Complex({}, RibbonGallerySettings)\n ], RibbonItem.prototype, \"gallerySettings\", 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 Property('')\n ], RibbonGroup.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"launcherIconKeyTip\", void 0);\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, \"keyTip\", void 0);\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 __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"keyTip\", 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, \"keyTip\", 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('')\n ], BackStageMenu.prototype, \"keyTip\", 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","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, Collection } from '@syncfusion/ej2-base';\nimport { RibbonTab } from './ribbon-tab';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTabSettings = /** @class */ (function (_super) {\n __extends(RibbonContextualTabSettings, _super);\n function RibbonContextualTabSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of contextual tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonContextualTabSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"isSelected\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], RibbonContextualTabSettings.prototype, \"tabs\", void 0);\n return RibbonContextualTabSettings;\n}(ChildProperty));\nexport { RibbonContextualTabSettings };\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 RIBBON_KEYTIP = 'e-ribbon-keytip';\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_CONTEXTUAL_TAB = 'e-ribbon-contextual-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_BUTTON_CONTENT = 'e-ribbon-group-button-content';\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_KEYTIP_ID = '_keytip';\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 if (btnSettings.htmlAttributes.id) {\n delete btnSettings.htmlAttributes.id;\n }\n setCustomAttributes(buttonEle, btnSettings.htmlAttributes);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n if (btnSettings.content) {\n buttonEle.setAttribute('aria-label', btnSettings.content);\n }\n else {\n buttonEle.setAttribute('aria-label', 'button');\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 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 if (overflowButton.element.classList.contains('e-active')) {\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 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 if (!buttonObj.disabled) {\n buttonObj.click();\n }\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 if (checkBoxSettings.htmlAttributes) {\n if (checkBoxSettings.htmlAttributes.id) {\n delete checkBoxSettings.htmlAttributes.id;\n }\n }\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 if (overflowButton.element.classList.contains('e-active')) {\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 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 if (!checkBoxObj.disabled) {\n checkBoxObj.click();\n }\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: function (e) {\n colorPickerSettings.value = e.value.toString();\n if (colorPickerSettings.change) {\n colorPickerSettings.change.call(_this, e);\n }\n },\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 if (colorPickerSettings.htmlAttributes.id) {\n delete colorPickerSettings.htmlAttributes.id;\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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 if (!colorPickerObj.disabled) {\n colorPickerObj.toggle();\n }\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 if (comboBoxSettings.htmlAttributes) {\n if (comboBoxSettings.htmlAttributes.id) {\n delete comboBoxSettings.htmlAttributes.id;\n }\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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: function (e) {\n var ddb = getComponent(buttonEle, DropDownButton);\n var target = _this.parent.getAppendToElement();\n if (ddb && ddb.dropDown && !target.contains(ddb.dropDown.element)) {\n target.appendChild(ddb.dropDown.element);\n }\n if (dropDownSettings.beforeOpen) {\n dropDownSettings.beforeOpen.call(_this, e);\n }\n },\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 if (dropDownSettings.htmlAttributes.id) {\n delete dropDownSettings.htmlAttributes.id;\n }\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n if (dropdown && dropdown.dropDown && !target.contains(dropdown.dropDown.element)) {\n target.appendChild(dropdown.dropDown.element);\n }\n },\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 var dropdownObj = this.getDropDownObj(controlId);\n if (!dropdownObj) {\n return;\n }\n if (!dropdownObj.disabled) {\n dropdownObj.toggle();\n }\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: function () {\n var popupEl = splitbutton.dropDown.element;\n var target = _this.parent.getAppendToElement();\n if (popupEl && !target.contains(popupEl)) {\n target.appendChild(popupEl);\n }\n if (splitButtonSettings.beforeOpen) {\n splitButtonSettings.beforeOpen.call(_this);\n }\n },\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 if (splitButtonSettings.htmlAttributes.id) {\n delete splitButtonSettings.htmlAttributes.id;\n }\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.beforeOpen = function (e) {\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n };\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 if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\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 if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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.beforeOpen = function (e) {\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n };\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 var splitBtnObj = this.getSplitButtonObj(controlId);\n if (!splitBtnObj) {\n return;\n }\n if (!splitBtnObj.disabled) {\n splitBtnObj.toggle();\n }\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.beforeOpen;\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.grpBtnIndex = 0;\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 if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n groupButtonEle.classList.add(constants.RIBBON_GROUP_BUTTON_CONTENT);\n groupButtonEle.setAttribute('aria-label', groupBtnSettings.items[parseInt(i.toString(), 10)].content);\n }\n else {\n groupButtonEle.setAttribute('aria-label', 'groupbuttonitem');\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 this.grpBtnIndex = i;\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 _this.handleFocusState(item, itemElement);\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 = document.querySelector('#' + item.id);\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)].\n setProperties({ selected: false }, true);\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].setProperties({ selected: true }, 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 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)].\n setProperties({ selected: true }, true);\n }\n else {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].\n setProperties({ selected: false }, true);\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 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 if (this.parent.activeLayout === 'Simplified' && groupButtonEle) {\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.toggle();\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 _this.handleFocusState(item, itemElement);\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.handleFocusState = function (item, itemElement) {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n var defaultSelectedBtn = document.querySelector('#' + item.id + '_grpbtn').querySelector('.' + constants.RIBBON_GROUP_BUTTON + '.e-active');\n if (defaultSelectedBtn) {\n defaultSelectedBtn.focus();\n }\n else {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\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 * @param {DropDownButton} overflowButton - Gets the overflow button.\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 if (groupButtonEle) {\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_1 = dropdown.target;\n if (targetEle_1.children.length) {\n for (var i = 0; i < targetEle_1.children.length; i++) {\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n isIconOnly = false;\n break;\n }\n }\n if (isIconOnly) {\n targetEle_1.classList.add('e-icon-btn');\n }\n }\n targetEle_1.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle_1.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\n }\n };\n }\n var overflowGroupButtonEle = itemEle.querySelector('#' + item.id + '_grpbtn');\n if (this.parent.activeLayout === 'Classic' && overflowGroupButtonEle) {\n overflowGroupButtonEle.onclick = function () {\n if (overflowButton.element.classList.contains('e-active')) {\n overflowButton.toggle();\n }\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","import { append, getComponent, remove, formatUnit, isNullOrUndefined, setValue } from '@syncfusion/ej2-base';\nimport { getItem, getTemplateFunction, setCustomAttributes } from '../base/index';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport * as constants from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGallery = /** @class */ (function () {\n function RibbonGallery(parent) {\n this.count = 0;\n this.isAdded = false;\n this.galleryItemsIndex = 0;\n this.registeredTemplate = {};\n this.parent = parent;\n var ref = 'viewContainerRef';\n setValue('registeredTemplate', this.registeredTemplate, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValue(ref, this.parent[\"\" + ref], this);\n }\n RibbonGallery.prototype.getModuleName = function () {\n return 'ribbonGallery';\n };\n RibbonGallery.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates gallery.\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 RibbonGallery.prototype.createGallery = function (item, itemEle) {\n var _this = this;\n var gallerySettings = item.gallerySettings;\n this.renderGalleryItems(gallerySettings, false, item.id, itemEle);\n var buttonEle = this.parent.createElement('button', {\n id: item.id + '_popupButton',\n className: 'e-ribbon-gallery-button e-icons e-drop-icon'\n });\n buttonEle.setAttribute('aria-label', 'gallerydropdownbutton');\n itemEle.appendChild(buttonEle);\n this.createPopup(item, buttonEle);\n buttonEle.onclick = function (args) {\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n if (popupEle) {\n var popup = getComponent(popupEle, Popup);\n if (popupEle.classList.contains('e-popup-close')) {\n _this.showPopup(popup, popupEle, args, gallerySettings, item.id);\n }\n else {\n _this.hidePopup(popup, popupEle, args, gallerySettings, item.id);\n }\n }\n };\n document.onclick = function (args) {\n var popupEle = document.querySelectorAll('.e-ribbon-gallery-popup.e-popup-open');\n var popupID;\n var itemProp;\n for (var i = 0; i < popupEle.length; i++) {\n var popup = getComponent(popupEle[parseInt(i.toString(), 10)], Popup);\n if (args.target.classList.contains('e-ribbon-gallery-button')) {\n popupID = (popupEle[parseInt(i.toString(), 10)].id).replace(/_galleryPopup/g, '');\n if ((args.target.id).replace(/_popupButton/g, '') !== popupID) {\n itemProp = getItem(_this.parent.tabs, popupID);\n _this.hidePopup(popup, popupEle[parseInt(i.toString(), 10)], args, itemProp.item.gallerySettings, popupID);\n break;\n }\n }\n else {\n popupID = (popupEle[parseInt(i.toString(), 10)].id).replace(/_galleryPopup/g, '');\n itemProp = getItem(_this.parent.tabs, popupID);\n _this.hidePopup(popup, popupEle[parseInt(i.toString(), 10)], args, itemProp.item.gallerySettings, popupID);\n break;\n }\n }\n };\n };\n RibbonGallery.prototype.renderGalleryItems = function (gallerySettings, isPopup, id, itemEle) {\n var _this = this;\n var galleryContainerEle;\n var galleryEle;\n var itemProp = getItem(this.parent.tabs, id);\n if (itemProp && itemProp.group) {\n itemProp.group.isCollapsible = false;\n }\n var galleryWrapper = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-wrapper',\n id: id + '_galleryWrapper'\n });\n if (!isPopup) {\n itemEle.appendChild(galleryWrapper);\n }\n var _loop_1 = function (i) {\n var isHeightDefined = false;\n galleryContainerEle = this_1.parent.createElement('ol', {\n className: 'e-ribbon-gallery-container',\n id: id + '_galleryContainer' + i\n });\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\n isHeightDefined = true;\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].cssClass) {\n galleryContainerEle.classList.add(gallerySettings.groups[parseInt(i.toString(), 10)].cssClass);\n }\n var _loop_2 = function (j) {\n galleryEle = this_1.parent.createElement('li', {\n className: 'e-ribbon-gallery-item',\n id: (isPopup ? 'popup_' : '') + galleryContainerEle.id + '_gallery' + j,\n attrs: { 'tabindex': '0' }\n });\n var itemEventArgs = { name: 'beforeItemRender', item: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)] };\n if (gallerySettings.beforeItemRender) {\n gallerySettings.beforeItemRender.call(this_1, itemEventArgs);\n }\n galleryContainerEle.appendChild(galleryEle);\n if (gallerySettings.selectedItemIndex && gallerySettings.selectedItemIndex === this_1.count) {\n galleryEle.classList.add('e-ribbon-gallery-selected');\n }\n else {\n if (!gallerySettings.selectedItemIndex && this_1.count === 0) {\n galleryEle.classList.add('e-ribbon-gallery-selected');\n gallerySettings.selectedItemIndex = this_1.count;\n }\n }\n this_1.count = this_1.count + 1;\n galleryEle.onclick = function (e) {\n _this.setActiveState(e.currentTarget, gallerySettings, id, true, e, isPopup);\n };\n galleryEle.onkeydown = function (e) {\n if (e.key === 'Enter' || e.key === ' ') {\n _this.setActiveState(e.currentTarget, gallerySettings, id, true, e, isPopup);\n }\n };\n galleryEle.onmouseover = function (e) {\n var hoverEventArgs = { event: e, name: 'itemHover', item: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)] };\n if (gallerySettings.itemHover) {\n gallerySettings.itemHover.call(_this, hoverEventArgs);\n }\n };\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth && gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth !== 'auto') {\n galleryEle.style.width = gallerySettings.groups[parseInt(i.toString(), 10)].itemWidth + 'px';\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\n galleryEle.style.height = gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight + 'px';\n if (this_1.parent.activeLayout !== 'Simplified' && !isPopup) {\n galleryContainerEle.style.flexFlow = 'wrap';\n }\n }\n if ((!gallerySettings.template && !gallerySettings.popupTemplate) ||\n ((gallerySettings.template && !gallerySettings.popupTemplate) && isPopup) ||\n ((gallerySettings.popupTemplate && !gallerySettings.template) && !isPopup)) {\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].htmlAttributes) {\n setCustomAttributes(galleryEle, gallerySettings.groups[parseInt(i.toString(), 10)]\n .items[parseInt(j.toString(), 10)].htmlAttributes);\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss) {\n var iconEle = this_1.parent.createElement('span', {\n className: 'e-ribbon-gallery-icons' + ' ' + gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss\n });\n galleryEle.appendChild(iconEle);\n if (this_1.parent.activeLayout === 'Simplified' && !isPopup) {\n iconEle.classList.add('e-hidden');\n }\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].content) {\n galleryEle.appendChild(this_1.parent.createElement('span', {\n innerHTML: gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].content,\n className: 'e-ribbon-gallery-text'\n }));\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].disabled) {\n galleryEle.classList.add('e-disabled');\n }\n if (gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].cssClass) {\n galleryEle.classList.add(gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].cssClass);\n }\n }\n if (gallerySettings.template && !isPopup) {\n this_1.createGalleryTemplate(galleryEle, gallerySettings, id, gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)]);\n }\n if (gallerySettings.popupTemplate && isPopup) {\n this_1.createGalleryPopupTemplate(galleryEle, gallerySettings, id, gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)]);\n }\n if ((!isPopup && !isHeightDefined && (gallerySettings.itemCount === this_1.count))) {\n galleryWrapper.appendChild(galleryContainerEle);\n this_1.isAdded = true;\n return \"break\";\n }\n };\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n var state_2 = _loop_2(j);\n if (state_2 === \"break\")\n break;\n }\n if (this_1.isAdded && !isPopup) {\n return \"break\";\n }\n if (!isPopup) {\n galleryWrapper.appendChild(galleryContainerEle);\n }\n else {\n itemEle.appendChild(galleryContainerEle);\n }\n if (isPopup && gallerySettings.groups[parseInt(i.toString(), 10)].header) {\n var headerEle = (this_1.parent.createElement('div', {\n className: 'e-ribbon-gallery-header',\n innerHTML: gallerySettings.groups[parseInt(i.toString(), 10)].header\n }));\n itemEle.insertBefore(headerEle, galleryContainerEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n this.count = 0;\n this.isAdded = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.portals = this.parent.portals.concat(this['portals']);\n this.parent['renderReactTemplates']();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this['portals'] = undefined;\n }\n };\n RibbonGallery.prototype.setWrapperWidth = function (itemCount, galleryWrapper, gallerySettings, itemID) {\n var count = 1;\n var itemsWidth = 0;\n var isWidthApplied = false;\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (itemCount >= count) {\n var galleryItemEle = galleryWrapper.querySelector('#' + itemID + '_galleryContainer' + i + '_gallery' + j);\n if (galleryItemEle) {\n itemsWidth += galleryItemEle.offsetWidth;\n var itemStyles = window.getComputedStyle(galleryItemEle);\n if (itemStyles) {\n var paddingWidth = parseFloat(itemStyles.paddingLeft) + parseFloat(itemStyles.paddingRight);\n if (!(isNullOrUndefined(paddingWidth))) {\n itemsWidth += paddingWidth;\n }\n var marginWidth = parseFloat(itemStyles.marginLeft) + parseFloat(itemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsWidth += marginWidth;\n }\n }\n }\n }\n else {\n isWidthApplied = true;\n break;\n }\n count++;\n }\n if (isWidthApplied) {\n break;\n }\n }\n if (itemsWidth > 0) {\n galleryWrapper.style.width = itemsWidth + 'px';\n }\n };\n RibbonGallery.prototype.setWrapperStyle = function (popup, popupContainerItems) {\n if (popup.width !== 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'column wrap';\n });\n }\n };\n /**\n * Checks the gallery items height.\n *\n * @param {HTMLElement} activeContent - Gets the current active content.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.checkAvailableHeight = function (activeContent) {\n var galleryWrapperItems = activeContent.querySelectorAll('.e-ribbon-gallery-wrapper');\n for (var n = 0; n < galleryWrapperItems.length; n++) {\n var count = 0;\n var simplifiedItemsCount = 0;\n var isHeight = false;\n var galleryWrapper = galleryWrapperItems[parseInt(n.toString(), 10)];\n var itemID = galleryWrapper.id.replace(/_galleryWrapper/g, '');\n var galleryWrapperHeight = galleryWrapper.offsetHeight;\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemProp) {\n this.setWrapperWidth(itemProp.item.gallerySettings.itemCount, galleryWrapper, itemProp.item.gallerySettings, itemID);\n for (var i = 0; i < itemProp.item.gallerySettings.groups.length; i++) {\n for (var j = 0; j < itemProp.item.gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n var galleryItemEle = galleryWrapper.querySelector('#' + itemID + '_galleryContainer' + i + '_gallery' + j);\n if (galleryItemEle) {\n if (this.parent.activeLayout === 'Classic') {\n if (galleryItemEle.classList.contains('e-hidden')) {\n galleryItemEle.classList.remove('e-hidden');\n }\n if (!isHeight) {\n var itemsValues = 0;\n var itemStyles = window.getComputedStyle(galleryItemEle);\n if (itemStyles) {\n var marginWidth = parseFloat(itemStyles.marginTop) + parseFloat(itemStyles.marginBottom);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsValues += marginWidth;\n }\n }\n count++;\n if (itemProp.item.gallerySettings.itemCount === count) {\n count = 0;\n if (galleryWrapperHeight >= (galleryItemEle.offsetHeight + itemsValues)) {\n galleryWrapperHeight -= (galleryItemEle.offsetHeight + itemsValues);\n }\n else {\n isHeight = true;\n galleryItemEle.remove();\n }\n }\n else if (galleryWrapperHeight < (galleryItemEle.offsetHeight + itemsValues)) {\n isHeight = true;\n galleryItemEle.remove();\n }\n }\n else {\n galleryItemEle.remove();\n }\n }\n else {\n simplifiedItemsCount++;\n if (simplifiedItemsCount > itemProp.item.gallerySettings.itemCount) {\n galleryItemEle.classList.add('e-hidden');\n }\n }\n }\n }\n }\n }\n }\n };\n /**\n * Checks the popup collision.\n *\n * @param {Popup} popup - Gets the popup.\n * @param {HTMLElement} popupEle - Gets the popup element.\n * @param {number} offsetValue - Gets the offset value of gallery popup button.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.checkCollision = function (popup, popupEle, offsetValue) {\n if (offsetValue === void 0) { offsetValue = 0; }\n var paddingWidth = 0;\n var marginWidth = 0;\n if (popupEle) {\n var windowWidth = window.innerWidth;\n var screenWidth = offsetValue === 0 ? windowWidth : Math.abs(windowWidth - (windowWidth - offsetValue));\n var paddingStyles = window.getComputedStyle(popupEle);\n if (paddingStyles) {\n paddingWidth = parseFloat(paddingStyles.paddingLeft) + parseFloat(paddingStyles.paddingRight);\n if (!(isNullOrUndefined(paddingWidth))) {\n screenWidth = screenWidth - paddingWidth;\n }\n }\n var popupContainerItems = popupEle.querySelectorAll('.e-ribbon-gallery-container');\n this.setWrapperStyle(popup, popupContainerItems);\n var isCollideOccurs = false;\n for (var i = 0; i < popupContainerItems.length; i++) {\n var itemsWidth = 0;\n for (var j = 0; j < popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item').length; j++) {\n var popupItemStyles = window.getComputedStyle(popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)]);\n if (popupItemStyles) {\n marginWidth = parseFloat(popupItemStyles.marginLeft) + parseFloat(popupItemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsWidth += marginWidth;\n }\n }\n itemsWidth += Math.round(parseFloat(popupItemStyles.width));\n if (((screenWidth <= itemsWidth) && popup.width === 'auto') || ((popup.width !== 'auto') && (screenWidth <= parseInt(popup.width.toString(), 10)) && (screenWidth <= itemsWidth))) {\n popupEle.style.width = ((itemsWidth + Math.abs(paddingWidth - marginWidth)) - Math.round(parseFloat(popupItemStyles.width))) + 'px';\n isCollideOccurs = true;\n break;\n }\n }\n if (isCollideOccurs) {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\n });\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n break;\n }\n }\n if (!isCollideOccurs) {\n if (popup.width === 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'nowrap';\n });\n popupEle.style.width = 'auto';\n }\n else {\n popupEle.style.width = (popup.width).toString();\n }\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n }\n }\n };\n RibbonGallery.prototype.setGalleryPopupHeight = function (popupEle, popupHeight, popupTop) {\n if (window.innerHeight < popupHeight || window.innerHeight < Math.round(popupHeight + popupTop)) {\n popupEle.style.height = (window.innerHeight - popupTop) + 'px';\n }\n else {\n popupEle.style.height = 'auto';\n }\n };\n RibbonGallery.prototype.createPopup = function (item, buttonEle) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-ribbon-popup-container',\n id: item.id + '_popupContainer'\n });\n this.renderGalleryItems(item.gallerySettings, true, item.id, popupContainer);\n var gallerypopupElement = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-popup',\n id: item.id + '_galleryPopup'\n });\n document.body.append(gallerypopupElement);\n var galleryPopup = new Popup(gallerypopupElement, {\n relateTo: buttonEle,\n content: popupContainer,\n collision: { X: 'fit', Y: 'flip' },\n actionOnScroll: 'hide',\n targetType: 'relative',\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n width: item.gallerySettings.popupWidth,\n height: item.gallerySettings.popupHeight\n });\n galleryPopup.hide();\n };\n /**\n * Updates gallery in mode switching.\n *\n * @param {string} activeLayout - Gets the current active layout.\n * @param {string} itemID - Gets the ribbon item id.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.switchGalleryItems = function (activeLayout, itemID) {\n var itemEle = this.parent.element.querySelector('#' + itemID + constants.CONTAINER_ID);\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemEle) {\n var galleryIcons = itemEle.querySelectorAll('.e-ribbon-gallery-icons');\n var galleryContainer = itemEle.querySelectorAll('.e-ribbon-gallery-container');\n if (galleryIcons.length) {\n for (var i = 0; i < galleryIcons.length; i++) {\n if (activeLayout === 'Simplified') {\n galleryIcons[parseInt(i.toString(), 10)].classList.add('e-hidden');\n }\n else {\n galleryIcons[parseInt(i.toString(), 10)].classList.remove('e-hidden');\n }\n }\n }\n if (galleryContainer.length && itemProp) {\n for (var n = 0; n < itemProp.item.gallerySettings.groups.length; n++) {\n for (var i = 0; i < galleryContainer.length; i++) {\n if (itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight && itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight !== 'auto') {\n if (itemID + '_galleryContainer' + n === galleryContainer[parseInt(i.toString(), 10)].id) {\n if (activeLayout === 'Simplified') {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'nowrap';\n }\n else {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'wrap';\n }\n }\n }\n }\n }\n }\n var activeContent = this.parent.tabObj.element.querySelector('#' + this.parent.tabs[this.parent.selectedTab].id + constants.CONTENT_ID);\n if (activeContent) {\n this.checkAvailableHeight(activeContent);\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 RibbonGallery.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n if (itemEle.closest('.e-ribbon-overflow-target')) {\n var buttonEle_1 = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle_1);\n if (itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.contains('e-disabled')) {\n buttonEle_1.classList.add('e-disabled');\n }\n itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.add('e-hidden');\n itemEle.querySelectorAll('.e-ribbon-gallery-container').forEach(function (ele) {\n ele.classList.add('e-hidden');\n });\n var popupButton = itemEle.querySelector('#' + item.id + '_popupButton');\n if (popupButton) {\n popupButton.classList.add('e-hidden');\n }\n var itemProp = getItem(this.parent.tabs, item.id);\n var iconCss = itemProp && itemProp.group.groupIconCss ? itemProp.group.groupIconCss : '';\n var content = itemProp && itemProp.group.header ? itemProp.group.header : '';\n if (!iconCss) {\n for (var i = 0; i < item.gallerySettings.groups.length; i++) {\n for (var j = 0; j < item.gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (item.gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss) {\n iconCss = item.gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)].iconCss;\n break;\n }\n }\n if (iconCss) {\n break;\n }\n }\n }\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n var popup_1 = getComponent(popupEle, Popup);\n var popupContainerEle_1 = document.querySelector('#' + item.id + '_galleryPopup .e-ribbon-popup-container');\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n content: content,\n target: popupContainerEle_1,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-gallery-dropdown',\n disabled: item.disabled,\n open: function () {\n var popupContainerItems = popupContainerEle_1.querySelectorAll('.e-ribbon-gallery-container');\n _this.setWrapperStyle(popup_1, popupContainerItems);\n _this.setFoucsToFirstItem(popupContainerEle_1, true, item.id);\n if (popup_1.width !== 'auto') {\n _this.alignGalleryPopupLeft(popupContainerEle_1, buttonEle_1);\n }\n },\n beforeClose: function (args) {\n var isCancelled = _this.popupEvents(args.event, item.gallerySettings, 'popupClose', false);\n if (isCancelled) {\n args.cancel = true;\n }\n }\n }, buttonEle_1);\n if (popup_1.width !== 'auto') {\n dropdown.dropDown.width = formatUnit(popup_1.width);\n }\n if (popup_1.height !== 'auto') {\n dropdown.dropDown.height = formatUnit(popup_1.height);\n dropdown.dropDown.element.style.height = (popup_1.height).toString();\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 RibbonGallery.prototype.removeOverFlowEvents = function (item, itemEle) {\n var popupButton = itemEle.querySelector('#' + item.id + '_popupButton');\n if (popupButton) {\n popupButton.classList.remove('e-hidden');\n }\n itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.remove('e-hidden');\n itemEle.querySelectorAll('.e-ribbon-gallery-container').forEach(function (ele) {\n ele.classList.remove('e-hidden');\n });\n var galleryDDBEle = document.querySelector('#' + item.id);\n if (galleryDDBEle) {\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n var dropdown = getComponent(galleryDDBEle, DropDownButton);\n popupEle.appendChild(dropdown.target);\n dropdown.destroy();\n remove(galleryDDBEle);\n }\n };\n RibbonGallery.prototype.setActiveState = function (galleryEle, gallerySettings, itemID, isInteracted, event, isPopup) {\n var previousItem;\n var currentItem;\n var itemEle = document.querySelector('#' + itemID + constants.CONTAINER_ID);\n var selctedGalleryItem = Array.prototype.slice.call(itemEle.querySelectorAll('.e-ribbon-gallery-selected'));\n var popupEle = document.querySelector('#' + itemID + '_popupContainer');\n var popupGalleryItem = Array.prototype.slice.call(popupEle.querySelectorAll('.e-ribbon-gallery-selected'));\n if (popupGalleryItem.length) {\n selctedGalleryItem = selctedGalleryItem.concat(popupGalleryItem);\n }\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (selctedGalleryItem[0].id === itemID + '_galleryContainer' + i + '_gallery' + j) {\n previousItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n if (galleryEle.id === (isPopup ? 'popup_' : '') + itemID + '_galleryContainer' + i + '_gallery' + j) {\n currentItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n }\n }\n var galleryItem = document.getElementById(galleryEle.id);\n var galleryItemPopup;\n var selectingEventArgs = { cancel: false, name: 'beforeSelect', previousItem: previousItem, currentItem: currentItem, isInteracted: isInteracted, event: event };\n if (gallerySettings.beforeSelect) {\n gallerySettings.beforeSelect.call(this, selectingEventArgs);\n }\n if (selectingEventArgs.cancel) {\n return;\n }\n else {\n for (var i = 0; i < selctedGalleryItem.length; i++) {\n selctedGalleryItem[parseInt(i.toString(), 10)].classList.remove('e-ribbon-gallery-selected');\n }\n if (!galleryItem.id.startsWith('popup_')) {\n galleryItemPopup = document.getElementById('popup_' + galleryEle.id);\n }\n else if (document.getElementById(galleryItem.id.slice(6))) {\n galleryItemPopup = document.getElementById(galleryItem.id.slice(6));\n }\n if (galleryItemPopup) {\n galleryItemPopup.classList.add('e-ribbon-gallery-selected');\n }\n galleryItem.classList.add('e-ribbon-gallery-selected');\n var selectedEventArgs = { previousItem: previousItem, currentItem: currentItem, name: 'select', isInteracted: isInteracted, event: event };\n var galleryPopupItems = document.querySelectorAll('#' + itemID + '_popupContainer .e-ribbon-gallery-item');\n for (var i = 0; i < galleryPopupItems.length; i++) {\n if (galleryPopupItems[parseInt(i.toString(), 10)].id === galleryEle.id) {\n gallerySettings.selectedItemIndex = i;\n break;\n }\n }\n if (gallerySettings.select) {\n gallerySettings.select.call(this, selectedEventArgs);\n }\n }\n };\n RibbonGallery.prototype.popupEvents = function (args, gallerySettings, name, isOpen) {\n var popupEventArgs = { cancel: false, event: args, name: name };\n if (isOpen && gallerySettings.popupOpen) {\n gallerySettings.popupOpen.call(this, popupEventArgs);\n }\n else if (!isOpen && gallerySettings.popupClose) {\n gallerySettings.popupClose.call(this, popupEventArgs);\n }\n if (popupEventArgs.cancel) {\n return true;\n }\n return false;\n };\n RibbonGallery.prototype.showPopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupOpen', true);\n if (isCancelled) {\n return;\n }\n popup.show();\n this.checkCollision(popup, popupEle);\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.add('e-gallery-button-active');\n var buttonPosition = buttonEle.getBoundingClientRect();\n if (popupEle.offsetWidth > buttonPosition.left) {\n this.checkCollision(popup, popupEle, buttonPosition.left);\n }\n var offsetX = Math.abs((popupEle.offsetWidth - buttonPosition.left)) + buttonEle.offsetWidth;\n popupEle.style.left = offsetX + 'px';\n popupEle.style.top = popupEle.getBoundingClientRect().top + 2 + 'px';\n this.setFoucsToFirstItem(popupEle, false, itemID, popup, gallerySettings);\n };\n RibbonGallery.prototype.hidePopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupClose', false);\n if (isCancelled) {\n return;\n }\n popup.hide();\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.remove('e-gallery-button-active');\n };\n /**\n * Shows a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.showGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.showPopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n /**\n * Hides a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.hideGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.hidePopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n RibbonGallery.prototype.setFoucsToFirstItem = function (popupEle, isDropdown, itemID, popup, gallerySettings) {\n var _this = this;\n popupEle.querySelectorAll('.e-ribbon-gallery-item')[0].focus();\n this.galleryItemsIndex = 0;\n popupEle.onkeydown = function (e) {\n _this.handleGalleryPopupNavigation(e, popupEle, isDropdown, itemID, popup, gallerySettings);\n };\n };\n RibbonGallery.prototype.alignGalleryPopupLeft = function (popup, buttonEle) {\n var popupEl = popup.parentElement;\n if (!popupEl) {\n return;\n }\n var currentLeft = parseFloat(popupEl.style.left);\n var buttonRect = buttonEle.getBoundingClientRect();\n var popupWidth = popupEl.offsetWidth;\n var targetLeft = buttonRect.left - popupWidth - 1;\n if (targetLeft < 0) {\n targetLeft = 1;\n }\n if (Math.abs(currentLeft - targetLeft) > 1) {\n popupEl.style.left = targetLeft + \"px\";\n }\n };\n RibbonGallery.prototype.handleGalleryPopupNavigation = function (e, popupEle, isDropdown, itemID, popup, gallerySettings) {\n var galleryPopupEle = popupEle.querySelectorAll('.e-ribbon-gallery-item');\n if (galleryPopupEle) {\n if (e.key === 'Home') {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'End') {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n this.galleryItemsIndex++;\n if (this.galleryItemsIndex !== galleryPopupEle.length) {\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n if (this.galleryItemsIndex !== 0) {\n this.galleryItemsIndex--;\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if ((e.key === 'Enter' || e.code === 'Space') || (e.key === 'Escape' && !isDropdown)) {\n this.hidePopup(popup, popupEle, e, gallerySettings, itemID);\n }\n }\n };\n RibbonGallery.prototype.createGalleryTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-template');\n var templateName = 'ribbon' + id + 'galleryTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.template);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n RibbonGallery.prototype.createGalleryPopupTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-popup-template');\n var templateName = 'ribbon' + id + 'galleryPopupTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.popupTemplate);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryPopupTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n return RibbonGallery;\n}());\nexport { RibbonGallery };\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, L10n } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu, RibbonContextualTabSettings } 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 { Popup } from '@syncfusion/ej2-popups';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\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.keysPress = '';\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.hiddenGroups = [];\n this.itemsModel = [];\n this.targetTabs = {};\n this.isAddRemove = false;\n this.isUpdateItems = 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], name: 'RibbonButton' }, { member: 'ribbonDropDown', args: [this], name: 'RibbonDropDown' }, { member: 'ribbonSplitButton', args: [this], name: 'RibbonSplitButton' }, { member: 'ribbonCheckBox', args: [this], name: 'RibbonCheckBox' }, { member: 'ribbonComboBox', args: [this], name: 'RibbonComboBox' }, { member: 'ribbonGroupButton', args: [this], name: 'RibbonGroupButton' });\n var canInjectColorPickerModule = getItem(this.tabs, null, RibbonItemType.ColorPicker);\n var canInjectGalleryModule = getItem(this.tabs, null, RibbonItemType.Gallery);\n if (canInjectColorPickerModule) {\n modules.push({ member: 'ribbonColorPicker', args: [this], name: 'RibbonColorPicker' });\n }\n if (canInjectGalleryModule) {\n modules.push({ member: 'ribbonGallery', args: [this], name: 'RibbonGallery' });\n }\n if (this.backStageMenu.visible || this.backStageMenu.items.length) {\n modules.push({ member: 'ribbonBackstage', args: [this], name: 'RibbonBackstage' });\n }\n if (this.fileMenu.visible || this.fileMenu.menuItems.length) {\n modules.push({ member: 'ribbonFileMenu', args: [this], name: 'RibbonFileMenu' });\n }\n if (this.contextualTabs.length) {\n modules.push({ member: 'ribbonContextualTab', args: [this], name: 'RibbonContextualTab' });\n }\n if (this.enableKeyTips) {\n modules.push({ member: 'ribbonKeyTip', args: [this], name: 'RibbonKeyTip' });\n }\n return modules;\n };\n Ribbon.prototype.getAppendToElement = function () {\n if (this.isAngular) {\n var cdkPane = this.element.closest('.cdk-overlay-pane');\n var popoverEl = this.element.closest('[popover]');\n if (cdkPane && popoverEl) {\n return cdkPane;\n }\n }\n return document.body;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n this.initializeLocale();\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.ribbonContextualTabModule) {\n this.ribbonContextualTabModule.addContextualTabs();\n }\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 this.addTabOverflowKeyTip();\n createTooltip(this.element, this);\n this.isKeytipOpen = false;\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.initializeLocale = function () {\n this.l10n = new L10n('ribbon', {\n groupOverflow: 'More Group Options',\n overflow: 'More Options'\n }, this.locale);\n this.l10n.setLocale(this.locale);\n };\n Ribbon.prototype.wireEvents = function () {\n this.resizeListener = this.resizeHandler.bind(this);\n EventHandler.add(window, 'resize', this.resizeListener);\n EventHandler.add(document.body, 'keydown', this.keytipActionHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseEventHandler, this);\n EventHandler.add(document, 'scroll', this.mouseEventHandler, 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 galleryElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-gallery-item'));\n var ribbonControls = controlElements.concat(templateElements, galleryElements);\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') || e.target.classList.contains('e-ribbon-gallery-item')) {\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-gallery-item')) && !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 if (!isNullOrUndefined(activeContent)) {\n this.checkOverflow(this.selectedTab, activeContent);\n }\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 activePopups = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active[aria-expanded=\"true\"], .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active[aria-expanded=\"true\"]');\n var colorPickerPopups = document.querySelectorAll('.e-ribbon .e-colorpicker-wrapper.e-ribbon-control.e-ribbon-open .e-colorpicker, .e-ribbon-group-overflow-ddb .e-colorpicker-wrapper.e-ribbon-control.e-ribbon-open .e-colorpicker');\n activePopups.forEach(function (popup) {\n var dropDownBtn = getInstance(popup, DropDownButton);\n if (dropDownBtn) {\n dropDownBtn.toggle();\n }\n });\n colorPickerPopups.forEach(function (picker) {\n var colorPickerObj = getInstance(picker, ColorPicker);\n if (colorPickerObj) {\n colorPickerObj.toggle();\n colorPickerObj.refresh();\n }\n });\n }\n var galleryPopupEle = document.querySelector('.e-ribbon-gallery-popup.e-popup-open');\n if (galleryPopupEle) {\n var popup = getComponent(galleryPopupEle, Popup);\n popup.hide();\n }\n if (this.ribbonKeyTipModule && this.enableKeyTips) {\n this.ribbonKeyTipModule.removeKeytip();\n }\n };\n Ribbon.prototype.mouseEventHandler = function () {\n if (this.ribbonKeyTipModule && this.enableKeyTips) {\n this.ribbonKeyTipModule.removeKeytip();\n }\n };\n Ribbon.prototype.keytipActionHandler = function (e) {\n if (this.enableKeyTips) {\n var isKeyTipPresent = false;\n var keyPress = e.key;\n if (e.altKey && e.key === 'Meta') {\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 this.ribbonKeyTipModule.removeKeytip();\n }\n else {\n if (!this.isKeytipOpen) {\n var backstagePopup = document.querySelector('.e-ribbon-backstage-popup');\n if (backstagePopup && backstagePopup.classList.contains('e-popup-open')) {\n this.ribbonBackstageModule.hideBackstage();\n }\n this.ribbonKeyTipModule.createKeytip('tab');\n }\n else {\n this.ribbonKeyTipModule.removeKeytip();\n }\n }\n }\n else if (e.key === 'Escape' || e.key === 'Tab' || e.key === 'ArrowLeft' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n this.ribbonKeyTipModule.removeKeytip(e.key);\n }\n else {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n if (keyTipItems) {\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML.toLowerCase() === keyPress) {\n isKeyTipPresent = true;\n this.ribbonKeyTipModule.keytipPress(keyPress);\n break;\n }\n }\n if (!isKeyTipPresent) {\n this.checkKeyTipPresent(keyPress, this.keysPress.length);\n }\n }\n }\n }\n };\n Ribbon.prototype.checkKeyTipPresent = function (keyTip, length) {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML.length > 1 && keyTipItem.innerHTML[parseInt(length.toString(), 10)].toLowerCase() === keyTip) {\n this.keysPress += keyTip;\n this.ribbonKeyTipModule.keytipPress(this.keysPress);\n this.removeKeytip(this.keysPress);\n break;\n }\n }\n };\n Ribbon.prototype.removeKeytip = function (keyTip) {\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n for (var i = 0; i < keyTipItems.length; i++) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (keyTipItem.innerHTML[0].toLowerCase() !== keyTip && keyTip !== '') {\n remove(keyTipItem);\n }\n }\n };\n Ribbon.prototype.addKeyTip = function (tabIndex, keyTip, id, type) {\n if (this.keyTipElements && this.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n var isKeyTipExist = false;\n if (!(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type])) {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type] = [];\n }\n if (Object.keys(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type]).length) {\n var keytipData = this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type];\n for (var i = 0; i < Object.keys(this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].id === id) {\n isKeyTipExist = true;\n }\n }\n if (!isKeyTipExist) {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type].\n push({ id: id, type: type, keyTip: keyTip });\n }\n }\n else {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][\"\" + type].push({ id: id, type: type, keyTip: keyTip });\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 animation: this.tabAnimation\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 (args) {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n var eventArgs = { activeLayout: this.activeLayout, event: args };\n this.trigger('ribbonLayoutSwitched', eventArgs);\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 e.preventFocus = true;\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 selectedContent = this.tabObj.items[parseInt(selectedIndex.toString(), 10)].content;\n if ((!selectedContent.querySelector('.' + constants.RIBBON_GROUP)) && (this.tabs[parseInt(selectedIndex.toString(), 10)].groups.length !== 0)) {\n var elements = this.createGroups(this.tabs[parseInt(selectedIndex.toString(), 10)].groups, selectedIndex);\n append(elements, selectedContent);\n }\n var isContextual = this.isContextualTab(selectedTabId);\n this.updateSelectedState(selectedTabId);\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex, isContextual: isContextual };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.calculateHiddenElementsWidth(selectedIndex);\n if (this.isUpdateItems) {\n for (var i = 0; i < this.itemsModel.length; i++) {\n var item = this.itemsModel[parseInt(i.toString(), 10)];\n if (this.selectedTab === this.targetTabs[item.id]) {\n this.updateItem(item);\n this.itemsModel.splice(i, 1);\n i--;\n }\n }\n if (this.itemsModel.length === 0) {\n this.isUpdateItems = false;\n }\n }\n if (this.ribbonGalleryModule) {\n this.ribbonGalleryModule.checkAvailableHeight(e.selectedContent.firstChild);\n }\n this.checkOverflow(selectedIndex, selectedContent);\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.updateSelectedState = function (tabID) {\n if (this.contextualTabs.length) {\n for (var i = 0; i < this.contextualTabs.length; i++) {\n var isSelected = false;\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id === tabID) {\n isSelected = true;\n break;\n }\n }\n this.contextualTabs[parseInt(i.toString(), 10)].\n setProperties({ isSelected: isSelected }, true);\n }\n }\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 this.addTabOverflowKeyTip();\n };\n Ribbon.prototype.addTabOverflowKeyTip = function () {\n var tabOverflow = this.tabObj.element.querySelector('#_nav');\n if (tabOverflow) {\n this.keyTipElements['taboverflow'] = [];\n this.keyTipElements['taboverflow'].push({ id: tabOverflow.id, type: 'taboverflow', keyTip: '00' });\n }\n else {\n delete (this.keyTipElements['taboverflow']);\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 isGroupUpdated = false;\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 var groupHidden = false;\n var itemHidden = false;\n var isAllItemHidden = false;\n var isEmptyCollection_1 = false;\n var groupItems = void 0;\n if (groupEle.classList.contains('e-hidden') || groupEle.classList.contains('e-hide-group')) {\n groupItems = groupEle.querySelectorAll('.e-ribbon-item.e-hidden');\n if (groupItems.length) {\n for (var i_1 = 0; i_1 < groupItems.length; i_1++) {\n groupItems[parseInt(i_1.toString(), 10)].classList.remove('e-hidden');\n }\n }\n if (groupEle.classList.contains('e-hide-group')) {\n isAllItemHidden = true;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n if (this.hiddenGroups.indexOf(groupEle.id) !== -1) {\n this.hiddenGroups.splice(this.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n else {\n groupHidden = true;\n groupEle.classList.remove('e-hidden');\n }\n if (!isGroupUpdated) {\n this.calculateOverflowItemsWidth(groupEle.offsetWidth, false, tabIndex);\n this.calculateMediumDataWidth(groupEle.offsetWidth, tabIndex, false);\n isGroupUpdated = true;\n }\n }\n else {\n if (itemContainer.classList.contains('e-hidden')) {\n itemHidden = true;\n itemContainer.classList.remove('e-hidden');\n if (groupEle.classList.contains('e-ribbon-emptyCollection')) {\n isEmptyCollection_1 = true;\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n this.calculateOverflowItemsWidth(itemContainer.offsetWidth, false, tabIndex);\n this.calculateMediumDataWidth(itemContainer.offsetWidth, tabIndex, false);\n }\n }\n itemContainer.setAttribute('data-simplified-width', (activeContent.offsetWidth).toString());\n if (itemHidden) {\n itemContainer.classList.add('e-hidden');\n }\n if (groupItems && groupItems.length) {\n for (var i_2 = 0; i_2 < groupItems.length; i_2++) {\n groupItems[parseInt(i_2.toString(), 10)].classList.add('e-hidden');\n }\n }\n if (groupHidden) {\n groupEle.classList.add('e-hidden');\n }\n if (isAllItemHidden) {\n groupEle.classList.add('e-hide-group');\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n if (isEmptyCollection_1) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 _this = this;\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.Gallery || 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 (e) {\n if (isLeft) {\n if (item.type === RibbonItemType.Gallery && _this.ribbonGalleryModule) {\n _this.ribbonGalleryModule.checkCollision(dropDownPopup, dropDownPopup.element);\n }\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 if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this, e);\n }\n if (item.dropDownSettings.beforeOpen) {\n item.dropDownSettings.beforeOpen.call(_this, e);\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 var groupItemEle = tabContent.querySelector('#' + group.id);\n if (itemContainer.classList.contains('e-hidden') || groupItemEle.classList.contains('e-hidden')) {\n width = Math.abs(width - activeContent.offsetWidth);\n }\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle.append(itemContainer);\n if (itemContainer.classList.contains('e-hidden') || groupItemEle.classList.contains('e-hidden')) {\n itemContainer.setAttribute('data-simplified-width', width.toString());\n var isGroupHidden = false;\n var widthDifference = 0;\n if (itemContainer.classList.contains('e-hidden')) {\n itemContainer.classList.remove('e-hidden');\n if (groupItemEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n widthDifference = this.checkWidthDifference(itemContainer, groupItemEle);\n }\n width = itemContainer.offsetWidth + widthDifference;\n itemContainer.classList.add('e-hidden');\n }\n this.calculateOverflowItemsWidth(width, true, tabIndex);\n this.calculateMediumDataWidth(width, tabIndex, true);\n if (isGroupHidden) {\n groupItemEle.classList.add('e-hide-group');\n groupItemEle.classList.add('e-ribbon-emptyCollection');\n }\n }\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 var groupElement = tabContent.querySelector('#' + group.id);\n var itemEle = groupElement.querySelector('.' + constants.RIBBON_ITEM);\n if (groupElement.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n var itemsLength = groupElement.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n if (!isEmptyCollection) {\n groupElement.classList.remove('e-ribbon-emptyCollection');\n }\n }\n }\n }\n }\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0 ||\n (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 }\n for (var i = 0; i < orderedGroups.length; i++) {\n this.checkOverflowHiddenItems(orderedGroups[parseInt(i.toString(), 10)].enableGroupOverflow, tabIndex, orderedGroups[parseInt(i.toString(), 10)].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 overflowtarget;\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, isGroupOF);\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 this.addKeyTip(tabIndex, '0' + (itemProp.groupIndex + 1), overflowButton.element.id, 'grpofbtn');\n overflowtarget = overflowButton.target;\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 if (isResize) {\n overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM));\n }\n else {\n overflowBtnTarget.append(itemEle);\n }\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID, isGroupOF);\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('#' +\n 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 if (isResize) {\n ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM));\n }\n else {\n ofGroupContainer.append(itemEle);\n }\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n if (overflowtarget) {\n if (item.keyTip) {\n this.addKeyTip(tabIndex, item.keyTip, item.id, 'popupitem');\n }\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 'Gallery':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGalleryModule.addOverFlowEvents(item, itemEle);\n }\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\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 ?\n 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 if (item.type !== RibbonItemType.GroupButton) {\n setWidth(item.id);\n }\n else {\n setWidth(item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\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 if (isRemoveOverflow) {\n itemContainer.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n }\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 if (group.keyTip) {\n var overflowDDB = group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID;\n this_1.addKeyTip(tabIndex, group.keyTip, overflowDDB, 'grpoverflow');\n }\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 var overflowDDB = document.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var overflowButton = getInstance(overflowDDB, DropDownButton);\n if (overflowButton) {\n var overflowtarget = overflowButton.target;\n if (overflowtarget) {\n if (this_1.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n if (item.type === RibbonItemType.GroupButton) {\n for (var i_3 = 0; i_3 < item.groupButtonSettings.items.length; i_3++) {\n if (item.groupButtonSettings.items[parseInt(i_3.toString(), 10)].keyTip) {\n this_1.addKeyTip(tabIndex, item.groupButtonSettings.items[parseInt(i_3.toString(), 10)].keyTip, item.id + (constants.RIBBON_GROUP_BUTTON_ID + i_3), 'grpoverflowpopup');\n }\n }\n }\n if (item.keyTip) {\n this_1.addKeyTip(tabIndex, item.keyTip, item.id, 'grpoverflowpopup');\n }\n }\n }\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.isContextualTab = function (tabID) {\n var isContextual = false;\n if (this.contextualTabs.length) {\n for (var i = 0; i < this.contextualTabs.length; i++) {\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id === tabID) {\n isContextual = true;\n break;\n }\n }\n }\n }\n return isContextual;\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem ? e.selectingItem.getAttribute('data-id') : null;\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var isContextual = this.isContextualTab(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,\n selectedIndex: nextIndex, isContextual: isContextual\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 var _loop_3 = function (i) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this_3.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n var tabIndex = getIndex(this_3.tabs, (function (tab) { return (tab.id === ribbonTab.id); }));\n if (ribbonTab.keyTip) {\n if (!this_3.keyTipElements[parseInt(tabIndex.toString(), 10)]) {\n this_3.keyTipElements[parseInt(tabIndex.toString(), 10)] = {};\n }\n this_3.addKeyTip(tabIndex, ribbonTab.keyTip, ribbonTab.id, 'tab');\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_3.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 var this_3 = this;\n for (var i = 0; i < tabs.length; i++) {\n _loop_3(i);\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 if (this.ribbonGalleryModule) {\n this.ribbonGalleryModule.checkAvailableHeight(activeContent);\n }\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId, isGroupOF) {\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 overflowButton.setAttribute('title', isGroupOF ? this.l10n.getConstant('groupOverflow') : this.l10n.getConstant('overflow'));\n var overFlowCss = this.cssClass ? constants.SPACE + this.cssClass : '';\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB + overFlowCss,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeOpen: function (args) {\n var target = _this.getAppendToElement();\n if (overflowDDB && overflowDDB.dropDown && !target.contains(overflowDDB.dropDown.element)) {\n target.appendChild(overflowDDB.dropDown.element);\n }\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.element = null;\n args.cancel = true;\n }\n });\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n if (!isGroupOF) {\n this.keyTipElements['overflowbtn'] = [];\n this.keyTipElements['overflowbtn'].push({ id: btnId, type: 'overflowbtn', keyTip: '00' });\n }\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') ?\n 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 if (this.enableRtl) {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n else {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n }\n if (e.key === 'ArrowLeft') {\n if (this.enableRtl) {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n else {\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\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 'Gallery':\n this.ribbonGalleryModule.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 (e) { _this.toggleLayout(e); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout(e);\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 if (this.layoutSwitcherKeyTip) {\n this.keyTipElements['collapse'] = [];\n this.keyTipElements['collapse'].push({ id: this.collapseButton.id, type: 'collapse', keyTip: this.layoutSwitcherKeyTip });\n }\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 _i = 0, _a = Object.keys(tabs); _i < _a.length; _i++) {\n var key = _a[_i];\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 _b = 0, groups_1 = groups; _b < groups_1.length; _b++) {\n var group = groups_1[_b];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _c = 0, _d = group.collections; _c < _d.length; _c++) {\n var collection = _d[_c];\n for (var _e = 0, _f = collection.items; _e < _f.length; _e++) {\n var item = _f[_e];\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 if (this.tabsInternal !== this.tabs) {\n this.tabsInternal = this.tabs;\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 }\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_4 = 0; i_4 < groupList.length; i_4++) {\n var group = groupList[parseInt(i_4.toString(), 10)];\n var alignType = groupList[parseInt(i_4.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_4, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_4, 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_5 = 0; i_5 < shrinkColumns.length; i_5++) {\n shrinkColumns[parseInt(i_5.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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 if (item.type === RibbonItemType.Gallery) {\n this.ribbonGalleryModule.switchGalleryItems(this.activeLayout, item.id);\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_6 = 0; i_6 < groupList.length; i_6++) {\n var group = groupList[parseInt(i_6.toString(), 10)];\n var alignType = groupList[parseInt(i_6.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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 if (item.type === RibbonItemType.Gallery) {\n this.ribbonGalleryModule.switchGalleryItems(this.activeLayout, item.id);\n }\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0 ||\n (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, tabIndex) {\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 var itemProp = getGroup(this.tabs, groupId);\n if (itemProp.group.launcherIconKeyTip) {\n this.addKeyTip(tabIndex, itemProp.group.launcherIconKeyTip, launcherIcon.id, 'launcher');\n }\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, tabIndex);\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 if (key === 'hiddenGroups') {\n groupEle.classList.add('e-hidden');\n }\n else {\n groupEle.classList.add('e-disabled');\n }\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 case 'Gallery':\n this.ribbonGalleryModule.createGallery(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 if (item.type === RibbonItemType.GroupButton) {\n for (var i_7 = 0; i_7 < item.groupButtonSettings.items.length; i_7++) {\n if (this.keyTipElements[parseInt(tabIndex.toString(), 10)] &&\n item.groupButtonSettings.items[parseInt(i_7.toString(), 10)].keyTip) {\n this.addKeyTip(tabIndex, item.groupButtonSettings.items[parseInt(i_7.toString(), 10)].keyTip, item.id + (constants.RIBBON_GROUP_BUTTON_ID + i_7), 'item');\n }\n }\n }\n if (item.keyTip) {\n if (item.type === RibbonItemType.Gallery) {\n this.addKeyTip(tabIndex, item.keyTip, (item.id + '_popupButton'), 'item');\n }\n else {\n this.addKeyTip(tabIndex, item.keyTip, item.id, 'item');\n }\n }\n var size = item.activeSize;\n if (!(item.type === RibbonItemType.Gallery)) {\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 }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 var htmlAttrID = void 0;\n if (type === 'item') {\n htmlAttrID = this.hasHtmlAtrrID(listitem);\n }\n listitem.setProperties({ id: htmlAttrID ? htmlAttrID : 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.hasHtmlAtrrID = function (listItem) {\n var id = '';\n if (listItem.buttonSettings.htmlAttributes.id) {\n id = listItem.buttonSettings.htmlAttributes.id;\n }\n else if (listItem.checkBoxSettings.htmlAttributes.id) {\n id = listItem.checkBoxSettings.htmlAttributes.id;\n }\n else if (listItem.colorPickerSettings.htmlAttributes.id) {\n id = listItem.colorPickerSettings.htmlAttributes.id;\n }\n else if (listItem.comboBoxSettings.htmlAttributes.id) {\n id = listItem.comboBoxSettings.htmlAttributes.id;\n }\n else if (listItem.dropDownSettings.htmlAttributes.id) {\n id = listItem.dropDownSettings.htmlAttributes.id;\n }\n else if (listItem.splitButtonSettings.htmlAttributes.id) {\n id = listItem.splitButtonSettings.htmlAttributes.id;\n }\n return id;\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_8 = 0; i_8 < item.groupButtonSettings.items.length; i_8++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_8);\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_9 = 0; i_9 < item.groupButtonSettings.items.length; i_9++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_9);\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (item.type === RibbonItemType.Gallery) {\n ele = contentEle.querySelector('#' + item.id + constants.CONTAINER_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 if (item.type === RibbonItemType.Gallery) {\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id + constants.CONTAINER_ID) : null;\n }\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_4 = 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_4.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_4.tooltipData.splice(index, 1);\n }\n }\n };\n var this_4 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_4(i);\n }\n }\n else if (moduleName === 'gallery') {\n if (ele.closest('.e-ribbon-overflow-target')) {\n destroyControl(ele, 'dropdown-btn');\n var galleryPopupEle = Array.prototype.slice.call(document.querySelectorAll('#' + item.id + '_galleryPopup'));\n galleryPopupEle.concat(Array.prototype.slice.call(document.querySelectorAll('#' + item.id + '-popup')));\n for (var i = 0; i < galleryPopupEle.length; i++) {\n galleryPopupEle[parseInt(i.toString(), 10)].remove();\n }\n var galleryPopupBtn = document.querySelector('#' + item.id + '_popupButton');\n if (galleryPopupBtn) {\n galleryPopupBtn.remove();\n }\n var galleryWrapper = document.querySelector('#' + item.id + '_galleryWrapper');\n if (galleryWrapper) {\n galleryWrapper.remove();\n }\n }\n else {\n var galleryEle = ele.querySelectorAll('.e-ribbon-gallery-item');\n var galleryPopupBtn = ele.parentElement.querySelector('#' + item.id + '_popupButton');\n if (galleryPopupBtn) {\n galleryPopupBtn.remove();\n }\n for (var i = 0; i < galleryEle.length; i++) {\n galleryEle[parseInt(i.toString(), 10)].remove();\n }\n var galleryPopupEle = document.querySelectorAll('#' + item.id + '_galleryPopup');\n for (var i = 0; i < galleryPopupEle.length; i++) {\n galleryPopupEle[parseInt(i.toString(), 10)].remove();\n }\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 /**\n * Gets the item module name.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\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 case 'Gallery':\n return 'gallery';\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 = this.tabObj.getItemIndex(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 * @param {boolean} isContextual - The boolean if the rendering is contextual.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId, isContextual) {\n if (isContextual === void 0) { isContextual = false; }\n this.showHideTab(tabId, false, isContextual);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @param {boolean} isContextual - The boolean if the rendering is contextual.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId, isContextual) {\n if (isContextual === void 0) { isContextual = false; }\n this.showHideTab(tabId, true, isContextual);\n };\n Ribbon.prototype.showHideTab = function (tabId, value, isContextual) {\n var index = this.tabObj.getItemIndex(tabId);\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n if (isContextual) {\n var contextualTab_1;\n var tabEle = this.tabObj.element;\n for (var i = 0; i < this.contextualTabs.length; i++) {\n for (var j = 0; j < this.contextualTabs[parseInt(i.toString(), 10)].tabs.length; j++) {\n if (tabId === this.contextualTabs[parseInt(i.toString(), 10)].tabs[parseInt(j.toString(), 10)].id) {\n contextualTab_1 = this.contextualTabs[parseInt(i.toString(), 10)];\n }\n }\n }\n if (contextualTab_1) {\n var isTabHidden = true;\n var _loop_5 = function (i) {\n var index_1 = getIndex(this_5.tabs, function (e) {\n return e.id === contextualTab_1.tabs[parseInt(i.toString(), 10)].id;\n });\n if (index_1 !== -1) {\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(index_1.toString(), 10)];\n if (!(toolbarEle.classList.contains('e-hidden'))) {\n isTabHidden = false;\n }\n }\n };\n var this_5 = this;\n for (var i = 0; i < contextualTab_1.tabs.length; i++) {\n _loop_5(i);\n }\n if (isTabHidden) {\n contextualTab_1.setProperties({ visible: false }, true);\n }\n else {\n contextualTab_1.setProperties({ visible: true }, true);\n }\n }\n }\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 var tbItems = this.tabObj.items[parseInt(index.toString(), 10)].content;\n this.tabObj.element.querySelector('#' + tabId + constants.HEADER_ID).classList[value ? 'remove' : 'add']('e-disabled');\n tbItems.classList[value ? 'remove' : 'add']('e-disabled');\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : 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\n === 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 this.updateHiddenElements(itemProp.tabIndex, isHidden ? 'hideGroup' : 'showGroup', groupID, isHidden, groupEle);\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 if (isHidden) {\n overflowtarget.classList.add('e-hidden');\n }\n else {\n overflowtarget.classList.remove('e-hidden');\n }\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n if (isHidden) {\n grpContainer.classList.add('e-hidden');\n }\n else {\n grpContainer.classList.remove('e-hidden');\n }\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n Ribbon.prototype.updateHiddenElements = function (tabIndex, key, id, isHidden, element, group) {\n if (isHidden) {\n if (!(element.classList.contains('e-hidden'))) {\n this.checkHiddenElements(key, id, tabIndex);\n element.classList.add('e-hidden');\n if (key === 'hideItem') {\n this.checkHiddenItems(group, isHidden, tabIndex);\n }\n this.calculateHiddenElementsWidth(tabIndex);\n }\n }\n else {\n if (element.classList.contains('e-hidden')) {\n this.checkHiddenElements(key, id, tabIndex);\n element.classList.remove('e-hidden');\n this.calculateHiddenElementsWidth(tabIndex);\n if (key === 'showItem') {\n this.checkHiddenItems(group, isHidden, tabIndex);\n }\n }\n }\n };\n Ribbon.prototype.checkHiddenElements = function (key, id, tabIndex) {\n if (this.activeLayout === 'Simplified') {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (!hiddenProps) {\n this.hiddenElements[parseInt(tabIndex.toString(), 10)] = {};\n hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n }\n if (hiddenProps) {\n if (!hiddenProps[\"\" + key]) {\n hiddenProps[\"\" + key] = [];\n }\n if (hiddenProps[\"\" + key].length) {\n var index = hiddenProps[\"\" + key].indexOf(id);\n if (index === -1) {\n hiddenProps[\"\" + key].push(id);\n }\n }\n else {\n hiddenProps[\"\" + key].push(id);\n }\n }\n }\n };\n Ribbon.prototype.updateItemsSimplifiedWidth = function (tabIndex, key) {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (hiddenProps && hiddenProps[\"\" + key] && hiddenProps[\"\" + key].length) {\n var _loop_6 = function (i) {\n var contentEle = this_6.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var hiddenEle;\n var groupEle = void 0;\n var isGroupHidden = false;\n var widthDifference = 0;\n if (key === 'hideGroup' || key === 'showGroup') {\n hiddenEle = contentEle.querySelector('#' + hiddenProps[\"\" + key][parseInt(i.toString(), 10)]);\n }\n else {\n hiddenEle = contentEle.querySelector('#' + hiddenProps[\"\" + key][parseInt(i.toString(), 10)] + constants.CONTAINER_ID);\n }\n if (hiddenEle) {\n if (key === 'hideGroup' || key === 'hideItem') {\n var isHidden = false;\n if (hiddenEle.classList.contains('e-hidden')) {\n isHidden = true;\n hiddenEle.classList.remove('e-hidden');\n }\n if (key === 'hideItem') {\n groupEle = hiddenEle.closest('.e-ribbon-group');\n if (groupEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n widthDifference = this_6.checkWidthDifference(hiddenEle, groupEle);\n }\n }\n this_6.calculateOverflowItemsWidth(hiddenEle.offsetWidth + widthDifference, true, tabIndex);\n this_6.calculateMediumDataWidth(hiddenEle.offsetWidth + widthDifference, tabIndex, true);\n if (isHidden) {\n hiddenEle.classList.add('e-hidden');\n }\n }\n else {\n if (key === 'showItem') {\n groupEle = hiddenEle.closest('.e-ribbon-group');\n if (groupEle.classList.contains('e-hide-group')) {\n isGroupHidden = true;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n if (this_6.hiddenGroups.indexOf(groupEle.id) !== -1) {\n this_6.hiddenGroups.splice(this_6.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n else {\n if (this_6.hiddenGroups.indexOf(groupEle.id) !== -1) {\n var hiddenItems = groupEle.querySelectorAll('.e-ribbon-item:not(.e-hidden)');\n hiddenItems.forEach(function (item) {\n if (item.id !== hiddenEle.id) {\n item.classList.add('e-hidden');\n }\n });\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n hiddenItems.forEach(function (item) {\n if (item.id !== hiddenEle.id) {\n item.classList.remove('e-hidden');\n }\n });\n this_6.hiddenGroups.splice(this_6.hiddenGroups.indexOf(groupEle.id), 1);\n }\n }\n }\n this_6.calculateOverflowItemsWidth(hiddenEle.offsetWidth + widthDifference, false, tabIndex);\n this_6.calculateMediumDataWidth(hiddenEle.offsetWidth + widthDifference, tabIndex, false);\n }\n if (isGroupHidden) {\n groupEle.classList.add('e-hide-group');\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n var index = hiddenProps[\"\" + key].indexOf(hiddenProps[\"\" + key][parseInt(i.toString(), 10)]);\n if (index !== -1) {\n hiddenProps[\"\" + key].splice(index, 1);\n i--;\n }\n out_i_1 = i;\n };\n var this_6 = this, out_i_1;\n for (var i = 0; i < hiddenProps[\"\" + key].length; i++) {\n _loop_6(i);\n i = out_i_1;\n }\n }\n };\n Ribbon.prototype.checkWidthDifference = function (hiddenEle, groupEle) {\n var widthDifference = 0;\n groupEle.classList.remove('e-hide-group');\n groupEle.classList.remove('e-ribbon-emptyCollection');\n if (this.hiddenGroups.length) {\n if (this.hiddenGroups.indexOf(groupEle.id) === -1) {\n this.hiddenGroups.push(groupEle.id);\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n }\n }\n else {\n this.hiddenGroups.push(groupEle.id);\n widthDifference = Math.abs(hiddenEle.offsetWidth - groupEle.offsetWidth);\n }\n return widthDifference;\n };\n Ribbon.prototype.calculateHiddenElementsWidth = function (tabIndex) {\n if (tabIndex === this.selectedTab && this.activeLayout === 'Simplified') {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n if (hiddenProps) {\n for (var i = 0; i < Object.keys(hiddenProps).length; i++) {\n this.updateItemsSimplifiedWidth(tabIndex, Object.keys(hiddenProps)[parseInt(i.toString(), 10)]);\n }\n }\n }\n };\n Ribbon.prototype.calculateMediumDataWidth = function (hiddenWidth, tabIndex, isHidden) {\n if (this.selectedTab === tabIndex && this.activeLayout === 'Simplified') {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var mediumDataItems = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-item'));\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n var selectedOFTab = document.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n for (var i = 0; i < overflowItems.length; i++) {\n var ofTab = overflowItems[parseInt(i.toString(), 10)].closest('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (selectedOFTab && ofTab && selectedOFTab.id === ofTab.id && overflowItems[parseInt(i.toString(), 10)].hasAttribute('data-medium-width')) {\n mediumDataItems.push(overflowItems[parseInt(i.toString(), 10)]);\n }\n }\n }\n var groupOFButton = activeContent.querySelectorAll('.e-ribbon-group-of-btn');\n for (var i = 0; i < groupOFButton.length; i++) {\n var overflowButton = getInstance(groupOFButton[parseInt(i.toString(), 10)], DropDownButton);\n var overflowBtnTarget = overflowButton.target;\n var overflowItems = overflowBtnTarget.querySelectorAll('.e-ribbon-item');\n for (var i_10 = 0; i_10 < overflowItems.length; i_10++) {\n if (overflowItems[parseInt(i_10.toString(), 10)].hasAttribute('data-medium-width')) {\n mediumDataItems.push(overflowItems[parseInt(i_10.toString(), 10)]);\n }\n }\n }\n for (var i = 0; i < mediumDataItems.length; i++) {\n if (mediumDataItems[parseInt(i.toString(), 10)].hasAttribute('data-medium-width')) {\n var previousWidth = parseInt(mediumDataItems[parseInt(i.toString(), 10)].getAttribute('data-medium-width'), 10);\n mediumDataItems[parseInt(i.toString(), 10)].setAttribute('data-medium-width', isHidden ? (previousWidth - hiddenWidth).toString() : (previousWidth + hiddenWidth).toString());\n }\n }\n }\n };\n Ribbon.prototype.calculateOverflowItemsWidth = function (hiddenItem, isHidden, tabIndex) {\n if (this.selectedTab === tabIndex && this.activeLayout === 'Simplified') {\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n if (group.enableGroupOverflow) {\n var groupContainer = document.querySelector('#' + group.id);\n var overflowButton = void 0;\n var overflowDDB = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDB) {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n if (overflowButton) {\n var overflowEle = overflowButton.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n for (var i_11 = 0; i_11 < overflowItems.length; i_11++) {\n var previousWidth = parseInt(overflowItems[parseInt(i_11.toString(), 10)].getAttribute('data-simplified-width'), 10);\n if (previousWidth) {\n overflowItems[parseInt(i_11.toString(), 10)].setAttribute('data-simplified-width', isHidden ? (previousWidth - hiddenItem).toString() : (previousWidth + hiddenItem).toString());\n }\n }\n }\n }\n }\n }\n if (this.overflowDDB) {\n var selectedOFTab = document.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n var overflowEle = this.overflowDDB.target;\n var overflowItems = overflowEle.querySelectorAll('.e-ribbon-item');\n for (var i = 0; i < overflowItems.length; i++) {\n var ofTab = overflowItems[parseInt(i.toString(), 10)].closest('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (selectedOFTab && ofTab && selectedOFTab.id === ofTab.id) {\n var previousWidth = parseInt(overflowItems[parseInt(i.toString(), 10)].getAttribute('data-simplified-width'), 10);\n if (previousWidth) {\n overflowItems[parseInt(i.toString(), 10)].setAttribute('data-simplified-width', isHidden ? (previousWidth - hiddenItem).toString() : (previousWidth + hiddenItem).toString());\n }\n }\n }\n }\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 if (isDisabled) {\n groupEle.classList.add('e-disabled');\n }\n else {\n groupEle.classList.remove('e-disabled');\n }\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 if (isDisabled) {\n overflowtarget.classList.add('e-disabled');\n }\n else {\n overflowtarget.classList.remove('e-disabled');\n }\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n if (isDisabled) {\n grpContainer.classList.add('e-disabled');\n }\n else {\n grpContainer.classList.remove('e-disabled');\n }\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 this.updateHiddenElements(itemProp.tabIndex, isHidden ? 'hideItem' : 'showItem', itemId, isHidden, itemEle, itemProp.group);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\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 if (!initialProps[\"\" + key]) {\n initialProps[\"\" + key] = [];\n }\n var itemIndex = initialProps[\"\" + key].indexOf(id);\n if (isInsert) {\n if (itemIndex === -1) {\n initialProps[\"\" + key].push(id);\n }\n }\n else {\n if (itemIndex !== -1) {\n initialProps[\"\" + key].splice(itemIndex, 1);\n }\n if (initialProps[\"\" + key].length === 0) {\n delete initialProps[\"\" + key];\n }\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 if (isHidden) {\n overflowtarget.classList.add('e-hide-group');\n }\n else {\n overflowtarget.classList.remove('e-hide-group');\n }\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 if (isHidden) {\n grpContainer.classList.add('e-hide-group');\n }\n else {\n grpContainer.classList.remove('e-hide-group');\n }\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 +\n constants.RIBBON_GROUP_BUTTON_ID) : 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\n === 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, itemProp.tabIndex);\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 if (groupEle) {\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement = void 0;\n var dropdown = void 0;\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 (!itemContainer) {\n itemContainer = dropdown ? dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID) : groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n if (!itemEle) {\n itemEle = dropdown ? dropdown.target.querySelector('#' + itemId) : contentEle.querySelector('#' + itemId);\n }\n if (itemProp.item.type === 'Gallery') {\n if (!itemEle) {\n itemEle = contentEle.querySelector('#' + itemId + '_galleryWrapper');\n }\n }\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) ||\n (item.type === RibbonItemType.GroupButton) || (item.type === RibbonItemType.Gallery)) {\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 // 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 if (size & RibbonItemSize.Medium) {\n itemContainer.classList.add(constants.RIBBON_MEDIUM_ITEM);\n }\n else {\n itemContainer.classList.add(constants.RIBBON_SMALL_ITEM);\n }\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (itemProp.item.type === 'Gallery' && document.querySelector('#' + itemId + '_container').closest('.e-ribbon-overflow-target') && item.displayOptions !== DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n }\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow && dropdown) {\n if (dropdown.target.childElementCount === 0 ||\n (dropdown.target.childElementCount === 1 &&\n 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 if (!(ribbonItem.disabled) && itemContainer.classList.contains(constants.DISABLED_CSS)) {\n itemContainer.classList.remove(constants.DISABLED_CSS);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n }\n else {\n this.isUpdateItems = true;\n this.itemsModel.push(item);\n this.targetTabs[item.id] = itemProp.tabIndex;\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 /**\n * Gets the Ribbon item model associated with the specified item ID.\n *\n * @param {string} itemId - The unique ID of the Ribbon item.\n * @returns {RibbonItemModel} - Returns the Ribbon item model.\n */\n Ribbon.prototype.getItem = function (itemId) {\n return getItem(this.tabs, itemId).item;\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var isUpdated = false;\n var isOverflow = false;\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 if (itemProp.item.type === 'Gallery') {\n ele = document.querySelector('#' + itemId);\n if (!ele) {\n ele = document.querySelector('#' + itemId + '_galleryWrapper');\n }\n else {\n isOverflow = true;\n }\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n var moduleName = this.getItemModuleName(itemProp.item);\n isUpdated = isDisabled ? !itemEle.classList.contains(constants.DISABLED_CSS) :\n itemEle.classList.contains(constants.DISABLED_CSS);\n if (moduleName !== 'template') {\n if (isUpdated) {\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 if (moduleName === 'gallery') {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n document.getElementById(itemId + '_popupButton').classList.toggle(constants.DISABLED_CSS, isDisabled);\n if (isOverflow) {\n var galleryEle = document.getElementById(itemId + '_galleryWrapper');\n galleryEle.classList.toggle(constants.DISABLED_CSS, isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeListener);\n EventHandler.remove(document.body, 'keydown', this.keytipActionHandler);\n EventHandler.remove(document, 'mousedown', this.mouseEventHandler);\n EventHandler.remove(document, 'scroll', this.mouseEventHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n if (this.refreshing) {\n this.clearOverflowDropDown(this.selectedTab);\n }\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 this.scrollModule = null;\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.l10n = null;\n this.initialPropsData = {};\n this.hiddenGroups = [];\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.itemsModel = [];\n this.targetTabs = {};\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.l10n.setLocale(this.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 var tabEle = this.tabObj.element;\n var toolbarItem = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(newProp.selectedTab.toString(), 10)];\n if (!(toolbarItem.classList.contains('e-hidden') || toolbarItem.classList.contains('e-disable'))) {\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n }\n break;\n }\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'contextualTabs':\n for (var i = 0; i < this.contextualTabs.length; i++) {\n if (newProp.contextualTabs[parseInt(i.toString(), 10)]) {\n this.ribbonContextualTabModule.updateContextualTabs(newProp.contextualTabs[parseInt(i.toString(), 10)], this.contextualTabs[parseInt(i.toString(), 10)]);\n }\n }\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 }\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 }\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 }\n case 'hideLayoutSwitcher':\n if (this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n else {\n this.addExpandCollapse();\n }\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 Property(false)\n ], Ribbon.prototype, \"enableKeyTips\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"layoutSwitcherKeyTip\", 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 Collection([], RibbonContextualTabSettings)\n ], Ribbon.prototype, \"contextualTabs\", 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, \"ribbonLayoutSwitched\", 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 this.addFileMenuKeytip();\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.addFileMenuKeytip = function () {\n if (this.parent.fileMenu.keyTip) {\n this.parent.keyTipElements['filemenu'] = [];\n this.parent.keyTipElements['filemenu'].push({ id: this.ddbElement.id, type: 'filemenu', keyTip: this.parent.fileMenu.keyTip });\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 }\n var menuOpen = !!args.element.closest('.e-ribbon-menu.e-popup-open');\n var fileTriggerOpen = !!args.element.closest('.e-ribbon-file-menu.e-popup-open');\n var fileMenuOpen = !!document.querySelector('.e-ribbon-file-menu.e-popup-open');\n // True if the file trigger was clicked open, or if the ribbon menu is open and the file menu popup is actually present\n var isMenuOpen = fileTriggerOpen || (menuOpen && fileMenuOpen);\n if (!args.element.classList.contains('e-menu-caret-icon') && isMenuOpen) {\n this.fileMenuDDB.toggle();\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.removeFileMenuKeytip();\n this.addFileMenuTooltip(fileMenuOptions);\n this.addFileMenuKeytip();\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 this.removeFileMenuKeytip();\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 RibbonFileMenu.prototype.removeFileMenuKeytip = function () {\n var _this = this;\n if (this.parent.keyTipElements['filemenu']) {\n var index = getIndex(this.parent.keyTipElements['filemenu'], function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.parent.keyTipElements['filemenu'].splice(index, 1);\n }\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 _this.menuIndex = 0;\n _this.isCloseBtn = false;\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 this.addBackStageMenuKeyTip(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.addBackStageMenuKeyTip = function (backStageOptions) {\n if (backStageOptions.keyTip) {\n if (!(this.parent.keyTipElements['backstage'])) {\n this.parent.keyTipElements['backstage'] = [];\n }\n this.parent.keyTipElements['backstage'].push({ id: this.backstageButtonEle.id, type: 'backstage', keyTip: backStageOptions.keyTip });\n }\n if (backStageOptions.items && backStageOptions.items.length) {\n if (!(this.parent.keyTipElements['backstageMenu'])) {\n this.parent.keyTipElements['backstageMenu'] = [];\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n if (backStageOptions.items[parseInt(i.toString(), 10)].keyTip) {\n this.parent.keyTipElements['backstageMenu'].push({ id: backStageOptions.items[parseInt(i.toString(), 10)].id, type: 'backstageMenu', keyTip: backStageOptions.items[parseInt(i.toString(), 10)].keyTip });\n }\n }\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 :\n 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.hideBackstage();\n EventHandler.add(this.popupHTMLElement, 'keyup', function (e) {\n if (e.code === 'Escape') {\n _this.hideBackstage();\n }\n _this.handleNavigation(e);\n }, this);\n };\n RibbonBackstage.prototype.handleNavigation = function (e) {\n var closeBtnEle = this.popupHTMLElement.querySelector('.e-ribbon-close-btn');\n var menuItems = this.popupHTMLElement.querySelectorAll('.e-menu-item');\n var arrowUp = e.key === 'ArrowUp';\n var arrowDown = e.key === 'ArrowDown';\n if (arrowUp || arrowDown) {\n if ((arrowUp && this.menuIndex > 0) || (arrowDown && this.menuIndex < menuItems.length - 1 && !this.isCloseBtn)) {\n this.menuIndex = arrowUp ? this.menuIndex - 1 : this.menuIndex + 1;\n }\n else {\n if (closeBtnEle && !this.isCloseBtn) {\n closeBtnEle.focus();\n this.isCloseBtn = true;\n }\n else {\n this.menuIndex = arrowUp ? menuItems.length - 1 : 0;\n this.isCloseBtn = false;\n }\n }\n for (var i = 0; i < menuItems.length; i++) {\n menuItems[parseInt(i.toString(), 10)].classList.remove('e-focused');\n }\n if (!this.isCloseBtn) {\n if (arrowUp && menuItems[this.menuIndex].classList.contains('e-separator')) {\n this.menuIndex--;\n }\n else if (arrowDown && menuItems[this.menuIndex].classList.contains('e-separator')) {\n this.menuIndex++;\n }\n menuItems[this.menuIndex].classList.add('e-focused');\n menuItems[this.menuIndex].focus();\n }\n }\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 this.menuIndex = i;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element,\n 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 }\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.removeBackstageMenuKeyTip();\n this.addBackStageMenuTooltip(backStageOptions);\n this.addBackStageMenuKeyTip(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 this.removeBackstageMenuKeyTip();\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 RibbonBackstage.prototype.removeBackstageMenuKeyTip = function () {\n var _this = this;\n if (this.parent.keyTipElements['backstage'] && this.parent.keyTipElements['backstage'].length) {\n var index = getIndex(this.parent.keyTipElements['backstage'], function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.parent.keyTipElements['backstage'].splice(index, 1);\n }\n }\n if (this.parent.keyTipElements['backstageMenu'] && this.parent.keyTipElements['backstageMenu'].length) {\n for (var i = 0; i < this.parent.keyTipElements['backstageMenu'].length; i++) {\n this.parent.keyTipElements['backstageMenu'].splice(i, 1);\n i--;\n }\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 if (isAfter) {\n this.footerMenuCtrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n else {\n if (isAfter) {\n this.menuCtrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\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 constants from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTab = /** @class */ (function () {\n function RibbonContextualTab(parent) {\n this.parent = parent;\n }\n RibbonContextualTab.prototype.getModuleName = function () {\n return 'ribbonContextualTab';\n };\n RibbonContextualTab.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Contextual tab.\n *\n * @returns {void}\n * @hidden\n */\n RibbonContextualTab.prototype.addContextualTabs = function () {\n var isSelected = false;\n for (var n = 0; n < this.parent.contextualTabs.length; n++) {\n for (var i = 0; i < this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs.length; i++) {\n this.parent.addTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[parseInt(i.toString(), 10)]);\n var index = this.parent.tabs.length - 1;\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(index.toString(), 10)];\n toolbarEle.classList.add(constants.RIBBON_CONTEXTUAL_TAB);\n toolbarEle.classList.add('e-hidden');\n if (this.parent.contextualTabs[parseInt(n.toString(), 10)].visible) {\n this.parent.showTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[parseInt(i.toString(), 10)].id, true);\n if (this.parent.contextualTabs[parseInt(n.toString(), 10)].isSelected && !isSelected) {\n this.parent.selectTab(this.parent.contextualTabs[parseInt(n.toString(), 10)].tabs[0].id);\n isSelected = true;\n }\n }\n }\n }\n };\n /**\n * Updates Contextual tab.\n *\n * @param {RibbonContextualTabSettingsModel} newProp - Specifies new properties.\n * @param {RibbonContextualTabSettingsModel} contextualTab - Gets the property of contextual tab.\n * @returns {void}\n * @hidden\n */\n RibbonContextualTab.prototype.updateContextualTabs = function (newProp, contextualTab) {\n if (!(isNullOrUndefined(newProp.visible))) {\n for (var i = 0; i < contextualTab.tabs.length; i++) {\n if (newProp.visible) {\n this.parent.showTab(contextualTab.tabs[parseInt(i.toString(), 10)].id, true);\n }\n else {\n this.parent.hideTab(contextualTab.tabs[parseInt(i.toString(), 10)].id, true);\n }\n }\n }\n if (!(isNullOrUndefined(newProp.isSelected))) {\n if (newProp.isSelected && contextualTab.visible) {\n this.parent.selectTab(contextualTab.tabs[0].id);\n }\n else {\n var tabEle = this.parent.tabObj.element;\n for (var i = 0; i < this.parent.tabs.length; i++) {\n var toolbarEle = tabEle.querySelectorAll('.e-toolbar-item')[parseInt(i.toString(), 10)];\n if (!(toolbarEle.classList.contains('e-hidden') || toolbarEle.classList.contains('e-disable'))) {\n this.parent.selectTab(this.parent.tabs[parseInt(i.toString(), 10)].id);\n break;\n }\n }\n }\n }\n if (newProp.tabs) {\n var _loop_1 = function (key) {\n var index = parseInt(key, 10);\n var tab = this_1.parent.tabs.filter(function (e) {\n return e.id === contextualTab.tabs[parseInt(index.toString(), 10)].id;\n })[0];\n this_1.parent.updateTab(tab);\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp.tabs); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n }\n };\n return RibbonContextualTab;\n}());\nexport { RibbonContextualTab };\n","import { getGroup, getItem } from '../base/utils';\nimport { getIndex } from '../base/index';\nimport * as constants from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { getInstance, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the keytip of Ribbon.\n */\nvar RibbonKeyTip = /** @class */ (function () {\n function RibbonKeyTip(parent) {\n this.isKeytipPopupOpen = false;\n this.parent = parent;\n }\n RibbonKeyTip.prototype.getModuleName = function () {\n return 'ribbonKeyTip';\n };\n RibbonKeyTip.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the keytips.\n *\n * @param {string} key - get's the keytip type.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.createKeytip = function (key) {\n if (this.parent.keyTipElements) {\n var keytipData = void 0;\n if (key === 'tab') {\n for (var i = 0; i < this.parent.tabs.length; i++) {\n if (this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n keytipData = this.parent.keyTipElements[parseInt(i.toString(), 10)][\"\" + key];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'tab', 'center', 'bottom', true);\n }\n }\n if (this.parent.keyTipElements['filemenu']) {\n keytipData = this.parent.keyTipElements['filemenu'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'filemenu');\n }\n if (this.parent.keyTipElements['backstage']) {\n keytipData = this.parent.keyTipElements['backstage'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'backstage');\n }\n if (this.parent.keyTipElements['collapse']) {\n keytipData = this.parent.keyTipElements['collapse'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'collapse');\n }\n if (this.parent.keyTipElements['taboverflow']) {\n keytipData = this.parent.keyTipElements['taboverflow'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'taboverflow');\n }\n }\n else if (key === 'popupitem') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['popupitem']) {\n var popupKeyTipData = this.parent.keyTipElements[this.parent.selectedTab]['popupitem'];\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['popupitem']).length; i++) {\n this.createKeyTipElement((popupKeyTipData[parseInt(i.toString(), 10)].id), popupKeyTipData[parseInt(i.toString(), 10)].keyTip, 'popupitem', 'left', 'top', false, true);\n }\n }\n }\n else if (key === 'backstageMenu') {\n if (this.parent.keyTipElements['backstageMenu']) {\n var backstageKeyTipData = this.parent.keyTipElements['backstageMenu'];\n for (var i = 0; i < Object.keys(this.parent.keyTipElements['backstageMenu']).length; i++) {\n this.createKeyTipElement((backstageKeyTipData[parseInt(i.toString(), 10)].id), backstageKeyTipData[parseInt(i.toString(), 10)].keyTip, 'backstageMenu', 'left', 'center');\n }\n }\n }\n else if (key === 'grpoverflowpopup' && this.parent.activeLayout === 'Classic') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpoverflowpopup']) {\n this.calculateItemPosition(key);\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['launcher']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['launcher']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['launcher'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'launcher', 'center', 'bottom', false, true);\n }\n }\n }\n else {\n this.calculateItemPosition(key);\n if (this.parent.activeLayout === 'Classic') {\n if (this.parent.keyTipElements[this.parent.selectedTab]['launcher']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['launcher']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['launcher'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'launcher');\n }\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['grpoverflow'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'grpoverflow');\n }\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n if (this.parent.keyTipElements['overflowbtn']) {\n keytipData = this.parent.keyTipElements['overflowbtn'];\n this.createKeyTipElement((keytipData[0].id), keytipData[0].keyTip, 'overflowbtn');\n }\n if (this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn']) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn']).length; i++) {\n keytipData = this.parent.keyTipElements[this.parent.selectedTab]['grpofbtn'];\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, 'grpofbtn');\n }\n }\n }\n }\n }\n };\n RibbonKeyTip.prototype.calculateItemPosition = function (key, isMethod, keyTip) {\n if (isMethod === void 0) { isMethod = false; }\n var xOffset;\n var yOffset;\n var keytipData = this.parent.keyTipElements[parseInt(this.parent.selectedTab.toString(), 10)][\"\" + key];\n if (keytipData) {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[parseInt(this.parent.selectedTab.toString(), 10)][\"\" + key]).length; i++) {\n if ((isMethod && (keytipData[parseInt(i.toString(), 10)].keyTip === keyTip)) || !isMethod) {\n var itemID = keytipData[parseInt(i.toString(), 10)].id;\n if (keytipData[parseInt(i.toString(), 10)].id.indexOf('_grpbtn') !== -1) {\n itemID = keytipData[parseInt(i.toString(), 10)].id.replace(/_grpbtn\\d+/, '');\n }\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemProp && itemProp.group.orientation === 'Column' && itemProp.collection.items.length > 1 && this.parent.activeLayout !== 'Simplified') {\n if (itemProp.itemIndex === 0) {\n xOffset = 'center';\n yOffset = 'top';\n }\n else if (itemProp.itemIndex === 1) {\n xOffset = 'center';\n yOffset = 'center';\n }\n else {\n xOffset = 'center';\n yOffset = 'bottom';\n }\n }\n else if (itemProp && itemProp.group.orientation === 'Row' && itemProp.group.collections.length > 1 && this.parent.activeLayout !== 'Simplified') {\n if (itemProp.collectionIndex === 0) {\n xOffset = 'center';\n yOffset = 'top';\n }\n else {\n xOffset = 'center';\n yOffset = 'bottom';\n }\n }\n if (key === 'item') {\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset);\n }\n else {\n this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset, false, true);\n }\n }\n }\n }\n };\n RibbonKeyTip.prototype.createKeyTipElement = function (id, keyTip, type, xOffset, yOffset, isTab, isPopUpItem) {\n if (xOffset === void 0) { xOffset = 'center'; }\n if (yOffset === void 0) { yOffset = 'bottom'; }\n if (isTab === void 0) { isTab = false; }\n if (isPopUpItem === void 0) { isPopUpItem = false; }\n var keyEle = document.querySelector('#' + id);\n var isPopUpPresent = false;\n var splitBtnID;\n if (isTab) {\n keyEle = document.querySelector('#' + id + constants.HEADER_ID);\n }\n if (keyEle) {\n if (keyEle.closest('.e-ribbon-group-overflow-ddb')) {\n isPopUpPresent = true;\n }\n if ((isTab && isPopUpItem) && keyEle.closest('.e-toolbar-pop')) {\n isPopUpPresent = true;\n }\n if (keyEle.closest('.e-split-btn-wrapper')) {\n var splitBtn = keyEle.closest('.e-split-btn-wrapper');\n splitBtnID = splitBtn.closest('.e-ribbon-item').id;\n }\n else {\n if (keyEle.closest('.e-colorpicker-wrapper')) {\n keyEle = keyEle.closest('.e-colorpicker-wrapper');\n splitBtnID = keyEle.closest('.e-ribbon-item').id;\n }\n }\n }\n if ((keyEle && keyEle.offsetParent) || (isTab && isPopUpItem)) {\n if ((isPopUpItem && isPopUpPresent) || !isPopUpItem) {\n var keytipElement = this.parent.createElement('div', {\n className: constants.RIBBON_KEYTIP,\n id: id + constants.RIBBON_KEYTIP_ID,\n attrs: { role: 'dialog', 'aria-label': 'ribbon-keytip' }\n });\n document.body.append(keytipElement);\n var keytipPopup = new Popup(keytipElement, {\n relateTo: '#' + (isTab ? id + constants.HEADER_ID : splitBtnID ? splitBtnID : id),\n content: keyTip,\n collision: { X: 'fit', Y: 'flip' },\n targetType: 'relative',\n position: { X: xOffset, Y: yOffset },\n enableRtl: this.parent.enableRtl,\n actionOnScroll: 'hide'\n });\n keytipPopup.show();\n this.calculateKeyTipPosition(keyEle, keytipElement, type, yOffset);\n this.parent.isKeytipOpen = true;\n }\n }\n };\n RibbonKeyTip.prototype.calculateKeyTipPosition = function (itemEle, keytipElement, type, yOffset) {\n var position = itemEle.getBoundingClientRect();\n if (type === 'backstageMenu') {\n keytipElement.style.top = position.top + ((keytipElement.offsetHeight) / 2) + 'px';\n keytipElement.style.left = position.left + (itemEle.offsetWidth / 5) + 'px';\n }\n else {\n if (type !== 'popupitem') {\n keytipElement.style.left = position.left + (position.width - keytipElement.offsetWidth) / 2 + 'px';\n }\n }\n if (type === 'filemenu' || type === 'backstage') {\n keytipElement.style.top = position.top + ((itemEle.offsetHeight - (itemEle.offsetHeight / 3)) + (keytipElement.offsetHeight / 6)) + 'px';\n }\n else if ((type === 'item' && yOffset === 'top')) {\n keytipElement.style.top = (position.top - (itemEle.offsetHeight) / 2) + 'px';\n }\n };\n /**\n * Performs keytip action.\n *\n * @param {string} keyPress - Gets the keytip text.\n * @param {boolean} isMethod - Gets the isMethod.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.keytipPress = function (keyPress, isMethod) {\n var _this = this;\n if (isMethod === void 0) { isMethod = false; }\n this.isKeytipPresent = false;\n for (var i = 0; ((i < Object.keys(this.parent.keyTipElements).length) && !this.isKeytipPresent); i++) {\n if (this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n for (var j = 0; ((j < Object.keys(this.parent.keyTipElements[parseInt(i.toString(), 10)]).length) &&\n !this.isKeytipPresent); j++) {\n var keytipData = this.parent.keyTipElements[parseInt(i.toString(), 10)][Object.\n keys(this.parent.keyTipElements[parseInt(i.toString(), 10)])[parseInt(j.toString(), 10)]];\n for (var k = 0; ((k < Object.keys(keytipData).length) && !this.isKeytipPresent); k++) {\n if (keyPress.toUpperCase() === keytipData[parseInt(k.toString(), 10)].keyTip) {\n var keyTipElement = document.querySelector('#' + keytipData[parseInt(k.toString(), 10)].id + constants.RIBBON_KEYTIP_ID);\n if (keyTipElement || isMethod) {\n this.isKeytipPresent = true;\n this.removeKeytip();\n if (keytipData[parseInt(k.toString(), 10)].type === 'tab') {\n if (i !== this.parent.selectedTab) {\n this.parent.tabObj.select(i);\n setTimeout(function () {\n var tabOverflow = _this.parent.tabObj.element.querySelector('.e-nav-active');\n if (tabOverflow) {\n tabOverflow.click();\n }\n _this.createKeytip('item');\n }, 600);\n }\n else {\n this.createKeytip('item');\n }\n }\n else {\n if (keytipData[parseInt(k.toString(), 10)].type === 'item' || keytipData[parseInt(k.toString(), 10)].type === 'grpoverflowpopup' || keytipData[parseInt(k.toString(), 10)].type === 'popupitem') {\n if (document.getElementById(keytipData[parseInt(k.toString(), 10)].id) && document.getElementById(keytipData[parseInt(k.toString(), 10)].id).classList.contains('e-ribbon-group-button')) {\n document.getElementById(keytipData[parseInt(k.toString(), 10)].id).click();\n }\n else {\n var itemProp = void 0;\n if ((keytipData[parseInt(k.toString(), 10)].id).indexOf('_popupButton') !== -1) {\n var galleryID = keytipData[parseInt(k.toString(), 10)].id.replace(/_popupButton/g, '');\n itemProp = getItem(this.parent.tabs, galleryID);\n }\n else {\n itemProp = getItem(this.parent.tabs, keytipData[parseInt(k.toString(), 10)].id);\n }\n if (!isMethod || (isMethod && itemProp.tabIndex === this.parent.selectedTab)) {\n this.clickItems(itemProp, keytipData, k, false, isMethod);\n }\n }\n }\n else if (keytipData[parseInt(k.toString(), 10)].type === 'grpoverflow' || keytipData[parseInt(k.toString(), 10)].type === 'grpofbtn' || keytipData[parseInt(k.toString(), 10)].type === 'launcher') {\n var keyEle = document.querySelector('#' + keytipData[parseInt(k.toString(), 10)].id);\n this.removeKeytip();\n if (keyEle) {\n var groupID = keytipData[parseInt(k.toString(), 10)].id;\n if (isMethod) {\n if (keytipData[parseInt(k.toString(), 10)].id.indexOf('_launcher') !== -1 || keytipData[parseInt(k.toString(), 10)].id.indexOf('_sim_grp_overflow') !== -1 || keytipData[parseInt(k.toString(), 10)].id.indexOf('_overflow_dropdown') !== -1) {\n groupID = keytipData[parseInt(k.toString(), 10)].id.replace(/_launcher|_sim_grp_overflow|_overflow_dropdown/g, '');\n var itemProp = getGroup(this.parent.tabs, groupID);\n if (itemProp.tabIndex === this.parent.selectedTab) {\n this.clickItems(itemProp, keytipData, k, true, isMethod, keyEle);\n }\n }\n }\n else {\n this.clickItems(null, keytipData, k, true, isMethod, keyEle);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n else {\n if (this.parent.keyTipElements) {\n this.commonItemsKeyTipPress(keyPress, Object.keys(this.parent.keyTipElements)[parseInt(i.toString(), 10)], isMethod);\n }\n }\n }\n };\n RibbonKeyTip.prototype.clickItems = function (itemProp, keytipData, k, isGroupItems, isMethod, keyEle) {\n if (isGroupItems) {\n keyEle.click();\n if (!(keytipData[parseInt(k.toString(), 10)].type === 'launcher')) {\n this.isKeytipPopupOpen = true;\n if (keytipData[parseInt(k.toString(), 10)].type === 'grpoverflow') {\n this.createKeytip('grpoverflowpopup');\n }\n else {\n this.createKeytip('popupitem');\n }\n }\n }\n else {\n var itemID = keytipData[parseInt(k.toString(), 10)].id;\n if (document.querySelector('#' + itemID) && isMethod) {\n if (this.parent.activeLayout === 'Simplified') {\n if (document.querySelector('#' + itemID).closest('#' + itemProp.group.id + '_sim_grp_overflow-popup') && document.querySelector('#' + itemID).closest('#' + itemProp.group.id + '_sim_grp_overflow-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + itemProp.group.id + '_sim_grp_overflow').click();\n }\n else if (document.querySelector('#' + itemID).closest('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID + '-popup') && document.querySelector('#' + itemID).closest('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID + '-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + this.parent.tabObj.element.id + constants.OVRLOF_BUTTON_ID).click();\n }\n }\n else {\n if (document.querySelector('#' + itemID).closest('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID + '-popup') && document.querySelector('#' + itemID).closest('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID + '-popup').classList.contains('e-popup-close')) {\n document.querySelector('#' + itemProp.group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID).click();\n }\n }\n }\n var itemType = this.parent.getItemModuleName(itemProp.item);\n switch (itemType) {\n case 'btn':\n this.parent.ribbonButtonModule.click(itemID);\n break;\n case 'dropdown-btn':\n this.parent.ribbonDropDownModule.toggle(itemID);\n break;\n case 'split-btn':\n this.parent.ribbonSplitButtonModule.toggle(itemID);\n break;\n case 'checkbox':\n this.parent.ribbonCheckBoxModule.click(itemID);\n break;\n case 'colorpicker':\n this.parent.ribbonColorPickerModule.toggle(itemID);\n break;\n case 'combobox': {\n var itemEle_1 = document.querySelector('#' + itemID);\n if (this.isInteractableElement(itemEle_1)) {\n setTimeout(function () {\n itemEle_1.focus();\n }, 100);\n }\n break;\n }\n case 'gallery': {\n var galleryEle = document.querySelector('#' + itemID);\n if (this.isInteractableElement(galleryEle)) {\n galleryEle.click();\n }\n break;\n }\n case 'template': {\n var templateEle = document.querySelector('#' + itemID);\n if (this.isInteractableElement(templateEle)) {\n templateEle.focus();\n }\n break;\n }\n case 'group-btn': {\n var itemElement = document.querySelector('#' + itemID);\n if (this.isInteractableElement(itemElement)) {\n var item = getInstance(itemElement, DropDownButton);\n item.toggle();\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n if (itemProp.item.groupButtonSettings.items[parseInt(i.toString(), 10)].keyTip) {\n this.createKeyTipElement(itemID + (constants.RIBBON_GROUP_BUTTON_ID + i), itemProp.item.groupButtonSettings.items[parseInt(i.toString(), 10)].keyTip, 'item');\n }\n }\n }\n break;\n }\n }\n }\n };\n RibbonKeyTip.prototype.isInteractableElement = function (element) {\n return element && !element.closest('.e-ribbon-item').classList.contains('e-disabled');\n };\n RibbonKeyTip.prototype.commonItemsKeyTipPress = function (keyPress, key, isMethod) {\n var _this = this;\n if (this.parent.keyTipElements[\"\" + key]) {\n var isKeyPressed = false;\n var keytipData = this.parent.keyTipElements[\"\" + key];\n var keyEle = void 0;\n var keytipElement = void 0;\n if (keytipData) {\n if (key === 'backstageMenu') {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[\"\" + key]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[parseInt(i.toString(), 10)].id);\n keytipElement = document.querySelector('#' + keyEle.id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n if (isMethod && document.querySelector('.e-ribbon-backstage-popup').classList.contains('e-popup-close')) {\n this.parent.tabObj.element.querySelector('.e-ribbon-backstage').click();\n }\n break;\n }\n }\n }\n }\n else {\n if (keytipData[0] && keytipData[0].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[0].id);\n keytipElement = document.querySelector('#' + keytipData[0].id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n }\n }\n }\n }\n if (isKeyPressed) {\n this.removeKeytip();\n this.isKeytipPresent = true;\n if (keyEle) {\n keyEle.click();\n if (key === 'backstage') {\n this.createKeytip('backstageMenu');\n }\n else if (key === 'overflowbtn') {\n this.isKeytipPopupOpen = true;\n this.createKeytip('popupitem');\n }\n else if (key === 'taboverflow') {\n setTimeout(function () {\n for (var i = 0; i < Object.keys(_this.parent.keyTipElements).length; i++) {\n if (_this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n var keytipData_1 = _this.parent.keyTipElements[parseInt(i.toString(), 10)]['tab'];\n _this.createKeyTipElement((keytipData_1[0].id), keytipData_1[0].keyTip, 'tab', 'center', 'bottom', true, true);\n }\n }\n }, 600);\n }\n }\n }\n }\n };\n /**\n * Removes the keytip.\n *\n * @param {string} key - Gets the keyboard key element.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.removeKeytip = function (key) {\n var _this = this;\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n var isKeyTipExist = false;\n this.parent.keysPress = '';\n var _loop_1 = function (i) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (key === 'Escape' && this_1.parent.keyTipElements && this_1.parent.keyTipElements[this_1.parent.selectedTab]) {\n for (var j = 0; j < Object.keys(this_1.parent.keyTipElements[this_1.parent.selectedTab]).length; j++) {\n var keyText = (Object.keys(this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)]))[parseInt(j.toString(), 10)];\n var keyTipElement = this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)];\n var index = getIndex(keyTipElement[\"\" + keyText], function (e) {\n return e.id +\n constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id;\n });\n if (index !== -1) {\n if ((keyText === 'item' && !(this_1.isKeytipPopupOpen)) || (keyText === 'grpoverflow' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n break;\n }\n else if (this_1.isKeytipPopupOpen) {\n if ((keyText === 'popupitem' && this_1.parent.activeLayout === 'Simplified') || (keyText === 'grpoverflowpopup' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('item');\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n }\n for (var n = 0; n < Object.keys(this_1.parent.keyTipElements).length; n++) {\n if (this_1.parent.keyTipElements[parseInt(n.toString(), 10)]) {\n var keytipData = this_1.parent.keyTipElements[parseInt(n.toString(), 10)]['tab'];\n for (var j = 0; j < Object.keys(keytipData).length; j++) {\n if (keyTipItem.id === keytipData[0].id + constants.RIBBON_KEYTIP_ID) {\n if (document.querySelector('#' + keytipData[0].id + constants.HEADER_ID).closest('.e-toolbar-pop')) {\n var tabOverflow = this_1.parent.tabObj.element.querySelector('.e-nav-active');\n tabOverflow.click();\n setTimeout(function () {\n _this.createKeytip('tab');\n }, 600);\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n if (isKeyTipExist) {\n break;\n }\n }\n }\n if (!isKeyTipExist && this_1.parent.keyTipElements['backstageMenu']) {\n var index = getIndex(this_1.parent.keyTipElements['backstageMenu'], function (e) { return e.id + constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id; });\n if (index !== -1) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n }\n }\n }\n if (keyTipItem) {\n remove(keyTipItem);\n }\n };\n var this_1 = this;\n for (var i = 0; i < keyTipItems.length; i++) {\n _loop_1(i);\n }\n this.isKeytipPopupOpen = false;\n if (!isKeyTipExist) {\n this.parent.isKeytipOpen = false;\n }\n };\n /**\n * Shows the Keytip dynamically.\n *\n * @param {string} keyAction - Item for which the tooltip is to be shown.\n * @returns {void}\n */\n RibbonKeyTip.prototype.showKeyTips = function (keyAction) {\n if (this.parent.enableKeyTips) {\n if (keyAction) {\n this.keytipPress(keyAction, true);\n }\n else {\n this.createKeytip('tab');\n }\n }\n };\n /**\n * Hides the Keytip dynamically.\n *\n * @returns {void}\n */\n RibbonKeyTip.prototype.hideKeyTips = function () {\n this.removeKeytip();\n };\n return RibbonKeyTip;\n}());\nexport { RibbonKeyTip };\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, index.RibbonKeyTip, index.RibbonContextualTab, index.RibbonGallery);\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","type","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","RibbonGalleryItem","RibbonGalleryGroup","RibbonGallerySettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RibbonContextualTabSettings","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","buttonObj","classList","contains","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","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","ddb","getAppendToElement","dropDown","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","controlElements","slice","querySelectorAll","templateElements","concat","comboBoxElements","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","getDDBItemElement","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","dropdownObj","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","popupEl","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","splitBtnObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","grpBtnIndex","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","defaultSelectedBtn","itemID","groupButtonHeader","targetEle","isOverflowPopup","isIconOnly","targetEle_1","children","overflowGroupButtonEle","destroyDropDown","updateGroupButtonSize","RibbonGallery","isAdded","galleryItemsIndex","registeredTemplate","ref","setValue","createGallery","gallerySettings","renderGalleryItems","createPopup","popup","Popup","popupID","isPopup","galleryContainerEle","galleryEle","isCollapsible","galleryWrapper","this_1","isHeightDefined","itemHeight","attrs","tabindex","itemEventArgs","selectedItemIndex","setActiveState","currentTarget","onmouseover","hoverEventArgs","itemHover","itemWidth","style","height","flexFlow","popupTemplate","iconEle","createGalleryTemplate","createGalleryPopupTemplate","itemCount","headerEle","isReact","portals","undefined","setWrapperWidth","itemsWidth","isWidthApplied","galleryItemEle","offsetWidth","itemStyles","window","getComputedStyle","paddingWidth","parseFloat","paddingLeft","paddingRight","marginWidth","marginLeft","marginRight","setWrapperStyle","popupContainerItems","forEach","checkAvailableHeight","activeContent","galleryWrapperItems","simplifiedItemsCount","isHeight","galleryWrapperHeight","offsetHeight","itemsValues","marginTop","marginBottom","checkCollision","offsetValue","windowWidth","innerWidth","screenWidth","Math","abs","paddingStyles","isCollideOccurs","popupItemStyles","round","setGalleryPopupHeight","top","popupTop","innerHeight","popupContainer","gallerypopupElement","body","relateTo","collision","X","Y","actionOnScroll","targetType","position","hide","switchGalleryItems","galleryIcons","galleryContainer","selectedTab","buttonEle_1","popupButton","groupIconCss","popup_1","popupContainerEle_1","setFoucsToFirstItem","alignGalleryPopupLeft","popupEvents","formatUnit","galleryDDBEle","isInteracted","previousItem","currentItem","selctedGalleryItem","popupGalleryItem","galleryItemPopup","galleryItem","getElementById","selectingEventArgs","beforeSelect","startsWith","selectedEventArgs","galleryPopupItems","isOpen","popupEventArgs","popupOpen","popupClose","show","buttonPosition","getBoundingClientRect","left","offsetX","showGalleryPopup","hideGalleryPopup","isDropdown","handleGalleryPopupNavigation","currentLeft","buttonRect","targetLeft","galleryPopupEle","code","templateName","templateFunction","isStringTemplate","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","keysPress","idIndex","initialPropsData","hiddenElements","keyTipElements","hiddenGroups","itemsModel","targetTabs","isAddRemove","isUpdateItems","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","canInjectColorPickerModule","canInjectGalleryModule","Gallery","backStageMenu","visible","fileMenu","menuItems","contextualTabs","enableKeyTips","isAngular","cdkPane","popoverEl","getUniqueID","initializeLocale","renderTabs","ribbonContextualTabModule","addContextualTabs","ribbonFileMenuModule","createFileMenu","ribbonBackstageModule","createBackStage","createHelpPaneTemplate","refreshOverflow","addTabOverflowKeyTip","isKeytipOpen","wireEvents","wireKeyboardEvent","currentControlIndex","l10n","L10n","groupOverflow","overflow","setLocale","resizeListener","resizeHandler","keytipActionHandler","mouseEventHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","galleryElements","ribbonControls","action","prevGroupId","prevGroupContainer","elem","checkOverflow","scrollModule","scrollEle","scrollStep","activePopups","colorPickerPopups","dropDownBtn","getInstance","picker","refresh","ribbonKeyTipModule","removeKeytip","isKeyTipPresent","keyPress","altKey","activePopup","backstagePopup","hideBackstage","createKeytip","keyTipItems","toLowerCase","keytipPress","checkKeyTipPresent","keyTip","keyTipItem","addKeyTip","isKeyTipExist","keys","keytipData","tabsInternal","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","animation","tabAnimation","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","preventFocus","selectedTabId","selectedIndex","selectedContent","elements","createGroups","isContextual","isContextualTab","updateSelectedState","previousIndex","calculateHiddenElementsWidth","updateItem","splice","ribbonGalleryModule","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","checkOverflowHiddenItems","tabID","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","tabOverflow","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","isGroupUpdated","collectionEle","Overflow","groupHidden","itemHidden","isAllItemHidden","isEmptyCollection_1","groupItems","i_1","indexOf","calculateOverflowItemsWidth","calculateMediumDataWidth","i_2","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","itemsLength","checkEmptyCollection","isEmptyCollection","isGroupOF","isMenu","isLeft","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","groupItemEle","isGroupHidden","widthDifference","checkWidthDifference","removeOverflowEvent","groupElement","childElementCount","isHeaderVisible","removeOverflowButton","ofGroupContainer","groupId","isHidden","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","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","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","i_3","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","nextIndex","selectedTabContent","this_3","ribbonTab","ondblclick","btnId","getConstant","overFlowCss","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","layoutSwitcherKeyTip","removeExpandCollapse","reRenderTabs","_i","_a","isNewTab","destroyTabItems","innerText","_b","groups_1","_c","_d","_e","_f","destroyFunction","groupList","i_4","alignType","i_5","groupContent","groupCollection","itemList","itemEle_1","size","createItems","i_6","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","launcherIconKeyTip","groupElements","showLauncherIcon","createCollection","isItemsHidden","initialProps","updateGroupProps","disabledGroups","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","i_7","hiddenItems","helpPaneTemplate","clearTemplate","ribbonTempEle","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","list","initId","listitem","htmlAttrID","hasHtmlAtrrID","listItem","setCommonProperties","getItemModuleName","i_8","i_9","removeLauncherIcon","containerId","this_4","groupButtonID_1","galleryPopupBtn","clearOverflowResize","selectTab","tabId","getItemIndex","showTab","showHideTab","hideTab","contextualTab_1","isTabHidden","this_5","index_1","enableTab","enableDisableTab","disableTab","tbItems","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","groupID","hideGroup","showHideGroup","showGroup","updateHiddenElements","updateInitialProps","grpContainer","checkHiddenElements","checkHiddenItems","hiddenProps","updateItemsSimplifiedWidth","out_i_1","this_6","hiddenEle","hiddenWidth","mediumDataItems","overflowItems","selectedOFTab","ofTab","hasAttribute","groupOFButton","i_10","previousWidth","hiddenItem","i_11","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","isInsert","checkOverflowItems","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","updateCollection","ribboncollection","enableDisableItem","enableItem","disableItem","isUpdated","isOverflow","toggleAttribute","unwireEvents","refreshing","onPropertyChanged","newProp","oldProp","toolbarItem","updateContextualTabs","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","ddbElement","ddbBeforeEvent","ddbAfterEvent","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","addFileMenuKeytip","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","menuOpen","fileTriggerOpen","fileMenuOpen","isMenuOpen","destroyMenu","removeFileMenuTooltip","removeFileMenuKeytip","insertAfter","enableItems","disableItems","setItem","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","menuIndex","isCloseBtn","createBackStageContent","addBackStageMenuTooltip","addBackStageMenuKeyTip","onClickEvent","backStageItems","HTMLElement","updatePopupPositionOnRtl","closeBtnEle","arrowUp","arrowDown","popupStyle","right","backButton","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","removeBackstageMenuKeyTip","addBackstageItems","backstageItems","item1","removeBackstageItems","RibbonContextualTab","contextualTab","RibbonKeyTip","isKeytipPopupOpen","createKeyTipElement","popupKeyTipData","backstageKeyTipData","calculateItemPosition","isMethod","xOffset","yOffset","isTab","isPopUpItem","splitBtnID","keyEle","isPopUpPresent","offsetParent","keytipElement","calculateKeyTipPosition","isKeytipPresent","toUpperCase","setTimeout","galleryID","clickItems","commonItemsKeyTipPress","isGroupItems","isInteractableElement","isKeyPressed","keytipData_1","keyText","showKeyTips","hideKeyTips","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage","index.RibbonKeyTip","index.RibbonContextualTab","index.RibbonGallery"],"mappings":"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"}
|