@syncfusion/ej2-ribbon 34.1.29 → 34.1.31
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 +13 -3
- package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
- package/dist/es6/ej2-ribbon.es5.js +13 -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 +7 -7
- package/src/ribbon/base/ribbon.js +4 -0
- package/src/ribbon/items/ribbon-gallery.js +9 -3
|
@@ -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 beforeOpen: beforeTooltipOpen.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 function beforeTooltipOpen(args) {\n var target = ribbon.getAppendToElement();\n var tooltipPopup = args.element;\n if (tooltipPopup && !target.contains(tooltipPopup)) {\n target.appendChild(tooltipPopup);\n }\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: function (e) {\n var target = _this.parent.getAppendToElement();\n var splitBtn = colorPicker['splitBtn'];\n if (splitBtn && splitBtn.dropDown && !target.contains(splitBtn.dropDown.element)) {\n target.appendChild(splitBtn.dropDown.element);\n }\n if (colorPickerSettings.beforeOpen) {\n colorPickerSettings.beforeOpen.call(_this, e);\n }\n },\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 colorPickerObj.beforeOpen = function (e) {\n var target = _this.parent.getAppendToElement();\n var splitBtn = colorPickerObj['splitBtn'];\n if (splitBtn && splitBtn.dropDown && !target.contains(splitBtn.dropDown.element)) {\n target.appendChild(splitBtn.dropDown.element);\n }\n if (item.colorPickerSettings.beforeOpen) {\n item.colorPickerSettings.beforeOpen.call(_this, e);\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: function (e) {\n requestAnimationFrame(function () {\n if (!_this.parent) {\n return;\n }\n var target = _this.parent.getAppendToElement();\n var popupEle = document.getElementById(inputEle.id + '_popup');\n if (popupEle && !target.contains(popupEle)) {\n target.appendChild(popupEle);\n }\n });\n if (comboBoxSettings.beforeOpen) {\n comboBoxSettings.beforeOpen.call(_this, e);\n }\n },\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.beforeOpen = function (e) {\n requestAnimationFrame(function () {\n if (!_this.parent) {\n return;\n }\n var target = _this.parent.getAppendToElement();\n var popupEle = document.getElementById(item.id + '_popup');\n if (popupEle && !target.contains(popupEle)) {\n target.appendChild(popupEle);\n }\n });\n if (item.comboBoxSettings.beforeOpen) {\n item.comboBoxSettings.beforeOpen.call(_this, e);\n }\n };\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 () {\n var splitBtn = getComponent(splitButtonEle, SplitButton);\n var popupEl = splitBtn && splitBtn.dropDown ? splitBtn.dropDown.element : null;\n var target = _this.parent.getAppendToElement();\n if (popupEl && !target.contains(popupEl)) {\n target.appendChild(popupEl);\n }\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this);\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_1 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n if (dropdown_1 && dropdown_1.dropDown && !target.contains(dropdown_1.dropDown.element)) {\n target.appendChild(dropdown_1.dropDown.element);\n }\n }\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown_1.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_2 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n if (dropdown_2 && dropdown_2.dropDown && !target.contains(dropdown_2.dropDown.element)) {\n target.appendChild(dropdown_2.dropDown.element);\n }\n }\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown_2.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 var appendTarget = this.parent.getAppendToElement();\n appendTarget.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_1 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n var dropDownPopup = dropdown_1 && dropdown_1.dropDown ? dropdown_1.dropDown.element : null;\n if (dropDownPopup && !target.contains(dropDownPopup)) {\n target.appendChild(dropDownPopup);\n }\n },\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_1.dropDown.width = formatUnit(popup_1.width);\n }\n if (popup_1.height !== 'auto') {\n dropdown_1.dropDown.height = formatUnit(popup_1.height);\n dropdown_1.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 var target = this.parent.getAppendToElement();\n if (!target.contains(popupEle)) {\n target.appendChild(popupEle);\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, L10n, NotifyPropertyChanges, Property, remove, removeClass } 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.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 if (isOpen && this.fileMenuDDB && this.fileMenuDDB.dropDown) {\n var target = this.parent.getAppendToElement();\n var popupEl = this.fileMenuDDB.dropDown.element;\n if (popupEl && !target.contains(popupEl)) {\n target.appendChild(popupEl);\n }\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 if (isOpen) {\n var target = this.parent.getAppendToElement();\n var popup = args.element && args.element.closest('.e-popup');\n if (popup && !target.contains(popup)) {\n target.appendChild(popup);\n }\n }\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","beforeTooltipOpen","getAppendToElement","tooltipPopup","contains","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","beforeOpen","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","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","splitBtn","dropDown","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","insertBefore","firstChild","colorPickerEle","colorPickerObj","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","requestAnimationFrame","popupEle","document","getElementById","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","ddb","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","getSplitButtonObj","splitBtnObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","grpBtnIndex","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropdown_1","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","dropdown_2","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","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","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","body","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 beforeOpen: beforeTooltipOpen.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 function beforeTooltipOpen(args) {\n var target = ribbon.getAppendToElement();\n var tooltipPopup = args.element;\n if (tooltipPopup && !target.contains(tooltipPopup)) {\n target.appendChild(tooltipPopup);\n }\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: function (e) {\n var target = _this.parent.getAppendToElement();\n var splitBtn = colorPicker['splitBtn'];\n if (splitBtn && splitBtn.dropDown && !target.contains(splitBtn.dropDown.element)) {\n target.appendChild(splitBtn.dropDown.element);\n }\n if (colorPickerSettings.beforeOpen) {\n colorPickerSettings.beforeOpen.call(_this, e);\n }\n },\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 colorPickerObj.beforeOpen = function (e) {\n var target = _this.parent.getAppendToElement();\n var splitBtn = colorPickerObj['splitBtn'];\n if (splitBtn && splitBtn.dropDown && !target.contains(splitBtn.dropDown.element)) {\n target.appendChild(splitBtn.dropDown.element);\n }\n if (item.colorPickerSettings.beforeOpen) {\n item.colorPickerSettings.beforeOpen.call(_this, e);\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: function (e) {\n requestAnimationFrame(function () {\n if (!_this.parent) {\n return;\n }\n var target = _this.parent.getAppendToElement();\n var popupEle = document.getElementById(inputEle.id + '_popup');\n if (popupEle && !target.contains(popupEle)) {\n target.appendChild(popupEle);\n }\n });\n if (comboBoxSettings.beforeOpen) {\n comboBoxSettings.beforeOpen.call(_this, e);\n }\n },\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.beforeOpen = function (e) {\n requestAnimationFrame(function () {\n if (!_this.parent) {\n return;\n }\n var target = _this.parent.getAppendToElement();\n var popupEle = document.getElementById(item.id + '_popup');\n if (popupEle && !target.contains(popupEle)) {\n target.appendChild(popupEle);\n }\n });\n if (item.comboBoxSettings.beforeOpen) {\n item.comboBoxSettings.beforeOpen.call(_this, e);\n }\n };\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 () {\n var splitBtn = getComponent(splitButtonEle, SplitButton);\n var popupEl = splitBtn && splitBtn.dropDown ? splitBtn.dropDown.element : null;\n var target = _this.parent.getAppendToElement();\n if (popupEl && !target.contains(popupEl)) {\n target.appendChild(popupEl);\n }\n if (item.splitButtonSettings.beforeOpen) {\n item.splitButtonSettings.beforeOpen.call(_this);\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_1 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n if (dropdown_1 && dropdown_1.dropDown && !target.contains(dropdown_1.dropDown.element)) {\n target.appendChild(dropdown_1.dropDown.element);\n }\n }\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown_1.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_2 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n if (dropdown_2 && dropdown_2.dropDown && !target.contains(dropdown_2.dropDown.element)) {\n target.appendChild(dropdown_2.dropDown.element);\n }\n }\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown_2.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, isOverflow) {\n if (popup.width !== 'auto') {\n popupContainerItems.forEach(function (ele) {\n if (isOverflow) {\n ele.style.flexFlow = 'column wrap';\n }\n else {\n ele.style.flexFlow = 'wrap';\n }\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 var appendTarget = this.parent.getAppendToElement();\n appendTarget.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 isGroupOF_1 = itemProp && itemProp.group ? itemProp.group.enableGroupOverflow : false;\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_1 = 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 beforeOpen: function () {\n var target = _this.parent.getAppendToElement();\n var dropDownPopup = dropdown_1 && dropdown_1.dropDown ? dropdown_1.dropDown.element : null;\n if (dropDownPopup && !target.contains(dropDownPopup)) {\n target.appendChild(dropDownPopup);\n }\n },\n open: function () {\n var popupContainerItems = popupContainerEle_1.querySelectorAll('.e-ribbon-gallery-container');\n _this.setWrapperStyle(popup_1, popupContainerItems, isGroupOF_1);\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_1.dropDown.width = formatUnit(popup_1.width);\n }\n if (popup_1.height !== 'auto') {\n dropdown_1.dropDown.height = formatUnit(popup_1.height);\n dropdown_1.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 var target = this.parent.getAppendToElement();\n if (!target.contains(popupEle)) {\n target.appendChild(popupEle);\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, L10n, NotifyPropertyChanges, Property, remove, removeClass } 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 var target = this.getAppendToElement();\n if (dropdown && dropdown.dropDown && !target.contains(dropdown.dropDown.element)) {\n target.appendChild(dropdown.dropDown.element);\n }\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.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 if (isOpen && this.fileMenuDDB && this.fileMenuDDB.dropDown) {\n var target = this.parent.getAppendToElement();\n var popupEl = this.fileMenuDDB.dropDown.element;\n if (popupEl && !target.contains(popupEl)) {\n target.appendChild(popupEl);\n }\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 if (isOpen) {\n var target = this.parent.getAppendToElement();\n var popup = args.element && args.element.closest('.e-popup');\n if (popup && !target.contains(popup)) {\n target.appendChild(popup);\n }\n }\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","beforeTooltipOpen","getAppendToElement","tooltipPopup","contains","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","beforeOpen","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","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","splitBtn","dropDown","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","insertBefore","firstChild","colorPickerEle","colorPickerObj","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","requestAnimationFrame","popupEle","document","getElementById","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","ddb","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","getSplitButtonObj","splitBtnObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","grpBtnIndex","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropdown_1","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","dropdown_2","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","isOverflow","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","relateTo","collision","X","Y","actionOnScroll","targetType","position","hide","switchGalleryItems","galleryIcons","galleryContainer","selectedTab","buttonEle_1","popupButton","isGroupOF_1","groupIconCss","popup_1","popupContainerEle_1","setFoucsToFirstItem","alignGalleryPopupLeft","popupEvents","formatUnit","galleryDDBEle","isInteracted","previousItem","currentItem","selctedGalleryItem","popupGalleryItem","galleryItemPopup","galleryItem","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","body","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","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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"}
|