@syncfusion/ej2-ribbon 25.2.5 → 26.1.38
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/.eslintrc.json +3 -2
- 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 +830 -593
- package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
- package/dist/es6/ej2-ribbon.es5.js +821 -578
- package/dist/es6/ej2-ribbon.es5.js.map +1 -1
- package/dist/global/ej2-ribbon.min.js +2 -2
- package/dist/global/ej2-ribbon.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +13 -13
- package/src/ribbon/base/interface.d.ts +14 -0
- package/src/ribbon/base/ribbon-model.d.ts +1 -1
- package/src/ribbon/base/ribbon.d.ts +3 -1
- package/src/ribbon/base/ribbon.js +204 -95
- package/src/ribbon/items/ribbon-button.js +6 -1
- package/src/ribbon/items/ribbon-gallery.d.ts +15 -6
- package/src/ribbon/items/ribbon-gallery.js +164 -96
- package/src/ribbon/items/ribbon-groupbutton.d.ts +1 -0
- package/src/ribbon/items/ribbon-groupbutton.js +11 -3
- package/src/ribbon/models/ribbon-contextual-tab-settings-model.d.ts +1 -1
- package/src/ribbon/models/ribbon-gallery-group-model.d.ts +5 -5
- package/src/ribbon/models/ribbon-gallery-group.d.ts +2 -2
- package/src/ribbon/models/ribbon-gallery-group.js +2 -2
- package/src/ribbon/models/ribbon-gallery-item-model.d.ts +5 -5
- package/src/ribbon/models/ribbon-gallery-item.d.ts +1 -1
- package/src/ribbon/models/ribbon-gallery-item.js +1 -1
- package/src/ribbon/models/ribbon-gallery-settings-model.d.ts +1 -1
- package/src/ribbon/models/ribbon-gallery-settings.d.ts +3 -3
- package/src/ribbon/models/ribbon-gallery-settings.js +2 -2
- package/src/ribbon/modules/ribbon-backstage.d.ts +6 -3
- package/src/ribbon/modules/ribbon-backstage.js +65 -12
- package/src/ribbon/modules/ribbon-contextualtab.js +5 -2
- package/src/ribbon/modules/ribbon-keytip.d.ts +1 -0
- package/src/ribbon/modules/ribbon-keytip.js +58 -46
- package/styles/bootstrap-dark.css +477 -269
- package/styles/bootstrap-dark.scss +18 -1
- package/styles/bootstrap.css +481 -276
- package/styles/bootstrap.scss +18 -1
- package/styles/bootstrap4.css +480 -272
- package/styles/bootstrap4.scss +18 -1
- package/styles/bootstrap5-dark.css +495 -278
- package/styles/bootstrap5-dark.scss +18 -1
- package/styles/bootstrap5.css +495 -278
- package/styles/bootstrap5.scss +18 -1
- package/styles/fabric-dark.css +476 -269
- package/styles/fabric-dark.scss +18 -1
- package/styles/fabric.css +475 -272
- package/styles/fabric.scss +18 -1
- package/styles/fluent-dark.css +497 -277
- package/styles/fluent-dark.scss +18 -1
- package/styles/fluent.css +497 -277
- package/styles/fluent.scss +18 -1
- package/styles/fluent2.css +3893 -0
- package/styles/fluent2.scss +18 -0
- package/styles/highcontrast-light.css +470 -263
- package/styles/highcontrast-light.scss +17 -1
- package/styles/highcontrast.css +476 -273
- package/styles/highcontrast.scss +18 -1
- package/styles/material-dark.css +565 -283
- package/styles/material-dark.scss +18 -1
- package/styles/material.css +564 -289
- package/styles/material.scss +18 -1
- package/styles/material3-dark.css +521 -280
- package/styles/material3-dark.scss +18 -1
- package/styles/material3.css +521 -280
- package/styles/material3.scss +18 -1
- package/styles/ribbon/_bds-definition.scss +58 -20
- package/styles/ribbon/_bootstrap-dark-definition.scss +58 -20
- package/styles/ribbon/_bootstrap-definition.scss +59 -21
- package/styles/ribbon/_bootstrap4-definition.scss +59 -21
- package/styles/ribbon/_bootstrap5-definition.scss +59 -21
- package/styles/ribbon/_bootstrap5.3-definition.scss +398 -0
- package/styles/ribbon/_fabric-dark-definition.scss +57 -19
- package/styles/ribbon/_fabric-definition.scss +58 -20
- package/styles/ribbon/_fluent-definition.scss +61 -23
- package/styles/ribbon/_fluent2-definition.scss +398 -0
- package/styles/ribbon/_fusionnew-definition.scss +52 -14
- package/styles/ribbon/_highcontrast-definition.scss +60 -22
- package/styles/ribbon/_highcontrast-light-definition.scss +51 -13
- package/styles/ribbon/_layout.scss +371 -399
- package/styles/ribbon/_material-dark-definition.scss +58 -20
- package/styles/ribbon/_material-definition.scss +58 -20
- package/styles/ribbon/_material3-definition.scss +58 -19
- package/styles/ribbon/_tailwind-definition.scss +58 -20
- package/styles/ribbon/_theme.scss +118 -170
- package/styles/ribbon/bootstrap-dark.css +477 -269
- package/styles/ribbon/bootstrap.css +481 -276
- package/styles/ribbon/bootstrap4.css +480 -272
- package/styles/ribbon/bootstrap5-dark.css +495 -278
- package/styles/ribbon/bootstrap5.css +495 -278
- package/styles/ribbon/fabric-dark.css +476 -269
- package/styles/ribbon/fabric.css +475 -272
- package/styles/ribbon/fluent-dark.css +497 -277
- package/styles/ribbon/fluent.css +497 -277
- package/styles/ribbon/fluent2.css +3893 -0
- package/styles/ribbon/fluent2.scss +18 -0
- package/styles/ribbon/highcontrast-light.css +470 -263
- package/styles/ribbon/highcontrast.css +476 -273
- package/styles/ribbon/icons/_bootstrap5.3.scss +9 -0
- package/styles/ribbon/icons/_fluent2.scss +9 -0
- package/styles/ribbon/material-dark.css +565 -283
- package/styles/ribbon/material.css +564 -289
- package/styles/ribbon/material3-dark.css +521 -280
- package/styles/ribbon/material3.css +521 -280
- package/styles/ribbon/tailwind-dark.css +531 -280
- package/styles/ribbon/tailwind.css +531 -280
- package/styles/tailwind-dark.css +531 -280
- package/styles/tailwind-dark.scss +18 -1
- package/styles/tailwind.css +531 -280
- package/styles/tailwind.scss +18 -1
- package/CHANGELOG.md +0 -101
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-gallery-item.js","../../src/ribbon/models/ribbon-gallery-group.js","../../src/ribbon/models/ribbon-gallery-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/models/ribbon-contextual-tab-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/items/ribbon-gallery.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/ribbon/modules/ribbon-contextualtab.js","../../src/ribbon/modules/ribbon-keytip.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select, addClass } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @param {RibbonItemType} type - Gets the type of the item.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id, type) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if ((id && item.id === id) || (type && item.type === type)) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n/**\n * Sets the HTML attributes of an element\n *\n * @param {HTMLElement} element - The HTML element for which attributes are to be updated.\n * @param {commonProperties} attributes - An object containing key-value pairs of attributes to be updated.\n * @returns {void}\n * @hidden\n */\nexport function setCustomAttributes(element, attributes) {\n for (var key in attributes) {\n if (key === 'class') {\n var elementClass = attributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'style') {\n var prevStyles = element.getAttribute('style') || '';\n var value = \"\" + prevStyles + attributes[\"\" + key];\n element.setAttribute(\"\" + key, value);\n }\n else {\n element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the gallery as ribbon item.\n */\n RibbonItemType[\"Gallery\"] = \"Gallery\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n Property({})\n ], RibbonButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"clicked\", void 0);\n return RibbonButtonSettings;\n}(ChildProperty));\nexport { RibbonButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon checkbox item.\n */\nvar RibbonCheckBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonCheckBoxSettings, _super);\n function RibbonCheckBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of checkbox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCheckBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonCheckBoxSettings.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RibbonCheckBoxSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property({})\n ], RibbonCheckBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"label\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Palette')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Property({})\n ], RibbonColorPickerSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n Property({})\n ], RibbonComboBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"select\", void 0);\n return RibbonComboBoxSettings;\n}(ChildProperty));\nexport { RibbonComboBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon DropDownButton item.\n */\nvar RibbonDropDownSettings = /** @class */ (function (_super) {\n __extends(RibbonDropDownSettings, _super);\n function RibbonDropDownSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonDropDownSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonDropDownSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], RibbonDropDownSettings.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property({})\n ], RibbonDropDownSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"select\", void 0);\n return RibbonDropDownSettings;\n}(ChildProperty));\nexport { RibbonDropDownSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon SplitButton item.\n */\nvar RibbonSplitButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonSplitButtonSettings, _super);\n function RibbonSplitButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonSplitButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonSplitButtonSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"target\", void 0);\n __decorate([\n Property({})\n ], RibbonSplitButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of group button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroupButtonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"keyTip\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Property({})\n ], RibbonGroupButtonItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonSettings.prototype, \"header\", void 0);\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from \"@syncfusion/ej2-base\";\n/**\n * Defines the ribbon gallery item.\n */\nvar RibbonGalleryItem = /** @class */ (function (_super) {\n __extends(RibbonGalleryItem, _super);\n function RibbonGalleryItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property({})\n ], RibbonGalleryItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonGalleryItem.prototype, \"disabled\", void 0);\n return RibbonGalleryItem;\n}(ChildProperty));\nexport { RibbonGalleryItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from \"@syncfusion/ej2-base\";\nimport { RibbonGalleryItem } from \"./ribbon-gallery-item\";\n/**\n * Defines the ribbon gallery group.\n */\nvar RibbonGalleryGroup = /** @class */ (function (_super) {\n __extends(RibbonGalleryGroup, _super);\n function RibbonGalleryGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryItem)\n ], RibbonGalleryGroup.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"header\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemWidth\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemHeight\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"cssClass\", void 0);\n return RibbonGalleryGroup;\n}(ChildProperty));\nexport { RibbonGalleryGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property, Event } from \"@syncfusion/ej2-base\";\nimport { RibbonGalleryGroup } from \"./ribbon-gallery-group\";\n/**\n * Defines the ribbon gallery settings.\n */\nvar RibbonGallerySettings = /** @class */ (function (_super) {\n __extends(RibbonGallerySettings, _super);\n function RibbonGallerySettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryGroup)\n ], RibbonGallerySettings.prototype, \"groups\", void 0);\n __decorate([\n Property(3)\n ], RibbonGallerySettings.prototype, \"itemCount\", void 0);\n __decorate([\n Property(null)\n ], RibbonGallerySettings.prototype, \"selectedItemIndex\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"itemHover\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeSelect\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"select\", void 0);\n return RibbonGallerySettings;\n}(ChildProperty));\nexport { RibbonGallerySettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\nimport { RibbonGallerySettings } from './ribbon-gallery-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"keyTip\", void 0);\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGallerySettings)\n ], RibbonItem.prototype, \"gallerySettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"launcherIconKeyTip\", void 0);\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"overflowHeader\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"keyTip\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"keyTip\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\nimport { RibbonTab } from './ribbon-tab';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTabSettings = /** @class */ (function (_super) {\n __extends(RibbonContextualTabSettings, _super);\n function RibbonContextualTabSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of contextual tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonContextualTabSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"isSelected\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], RibbonContextualTabSettings.prototype, \"tabs\", void 0);\n return RibbonContextualTabSettings;\n}(ChildProperty));\nexport { RibbonContextualTabSettings };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var RIBBON_KEYTIP = 'e-ribbon-keytip';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_CONTEXTUAL_TAB = 'e-ribbon-contextual-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_CONTENT = 'e-ribbon-group-button-content';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_KEYTIP_ID = '_keytip';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = __assign({}, btnSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n buttonEle.setAttribute('aria-label', btnSettings.content);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n buttonEle.setAttribute('data-control', item.type.toString());\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({ cssClass: buttonObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = {};\n if (checkBoxSettings.htmlAttributes) {\n htmlAttr = __assign({}, checkBoxSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.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: htmlAttr,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement, setCustomAttributes } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: function (e) {\n colorPickerSettings.value = e.value.toString();\n if (colorPickerSettings.change) {\n colorPickerSettings.change.call(_this, e);\n }\n },\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n if (colorPickerSettings.htmlAttributes) {\n var htmlAttr = __assign({}, colorPickerSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(inputEle, htmlAttr);\n }\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-colorpicker-label',\n id: item.id + '_label',\n innerHTML: colorPickerSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = {};\n if (comboBoxSettings.htmlAttributes) {\n htmlAttr = __assign({}, comboBoxSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n }\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n htmlAttributes: htmlAttr,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-combobox-label',\n id: item.id + '_label',\n innerHTML: comboBoxSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip, setCustomAttributes } from '../base/index';\nimport { DROPDOWN_ID, ITEM_VERTICAL_CENTER, OVERFLOW_ID, RIBBON_CONTROL, RIBBON_GROUP_OVERFLOW_DDB, RIBBON_POPUP_CONTROL, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonDropDown = /** @class */ (function () {\n function RibbonDropDown(parent) {\n this.parent = parent;\n }\n RibbonDropDown.prototype.getModuleName = function () {\n return 'ribbonDropDown';\n };\n RibbonDropDown.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createDropDown = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var dropDownSettings = item.dropDownSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (dropDownSettings.cssClass ?\n dropDownSettings.cssClass : '')).trim();\n new DropDownButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: dropDownSettings.closeActionEvents,\n content: item.activeSize === RibbonItemSize.Small ? '' : dropDownSettings.content,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: dropDownSettings.iconCss,\n items: dropDownSettings.items,\n target: dropDownSettings.target,\n createPopupOnClick: dropDownSettings.createPopupOnClick,\n beforeClose: function (e) {\n if (dropDownSettings.beforeClose) {\n dropDownSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: dropDownSettings.beforeItemRender,\n beforeOpen: dropDownSettings.beforeOpen,\n close: function (e) {\n if (dropDownSettings.close) {\n dropDownSettings.close.call(_this, e);\n }\n },\n created: dropDownSettings.created,\n open: dropDownSettings.open,\n select: dropDownSettings.select\n }).appendTo(buttonEle);\n if (dropDownSettings.htmlAttributes) {\n var htmlAttr = __assign({}, dropDownSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var controlElements = Array.prototype.slice.call(target.querySelectorAll('.e-control'));\n var templateElements = Array.prototype.slice.call(target.querySelectorAll('.e-ribbon-template'));\n var items = controlElements.concat(templateElements);\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template'))) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonSplitButton = /** @class */ (function () {\n function RibbonSplitButton(parent) {\n this.parent = parent;\n }\n RibbonSplitButton.prototype.getModuleName = function () {\n return 'ribbonSplitButton';\n };\n RibbonSplitButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates SplitButton.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.createSplitButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var splitButtonSettings = item.splitButtonSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (splitButtonSettings.cssClass ?\n splitButtonSettings.cssClass : '')).trim();\n var splitbutton = new SplitButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: splitButtonSettings.closeActionEvents,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: splitButtonSettings.iconCss,\n items: splitButtonSettings.items,\n target: splitButtonSettings.target,\n beforeClose: function (e) {\n if (splitButtonSettings.beforeClose) {\n splitButtonSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: splitButtonSettings.beforeItemRender,\n beforeOpen: splitButtonSettings.beforeOpen,\n close: function () {\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.close) {\n splitButtonSettings.close.call(_this);\n }\n },\n created: splitButtonSettings.created,\n open: function () {\n splitbutton['wrapper'].classList.add(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.open) {\n splitButtonSettings.open.call(_this);\n }\n },\n select: splitButtonSettings.select,\n click: function (e) {\n if (splitButtonSettings.click) {\n splitButtonSettings.click.call(_this, e);\n }\n }\n }, buttonEle);\n if (splitButtonSettings.htmlAttributes) {\n var htmlAttr = __assign({}, splitButtonSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\n }\n var dropdownEle = buttonEle.parentElement.querySelector('.e-dropdown-btn');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n this.setContent(item, splitbutton);\n var wrapper = splitbutton['wrapper'];\n EventHandler.add(wrapper, 'mouseenter', function () { wrapper.classList.add(RIBBON_HOVER); }, this);\n EventHandler.add(wrapper, 'mouseleave', function () { wrapper.classList.remove(RIBBON_HOVER); }, this);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n splitButtonEle.setAttribute('data-control', item.type.toString());\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n splitbutton.cssClass = splitbutton.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n splitbutton.dataBind();\n var dropdownEle = splitButtonEle.parentElement.querySelector('.e-dropdown-btn');\n var ddbId = dropdownEle.getAttribute('id');\n var popupEle = document.querySelector('#' + ddbId + '-popup');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n popupEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.preventDefault();\n splitbutton['wrapper'].classList.remove('e-ribbon-open');\n popupEle.querySelector('.e-focused').click();\n }\n };\n var target;\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n overflowButton.toggle();\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n var cssClass = splitbutton.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n splitbutton.cssClass = cssClass.join(SPACE);\n splitbutton.dataBind();\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n };\n };\n RibbonSplitButton.prototype.setContent = function (item, control) {\n control['primaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Medium) ? item.splitButtonSettings.content : '' });\n control['secondaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Large) ? item.splitButtonSettings.content : '' });\n };\n RibbonSplitButton.prototype.getSplitButtonObj = function (controlId) {\n var splitButtonEle = getItemElement(this.parent, controlId);\n return getComponent(splitButtonEle, SplitButton);\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the SplitButton items.\n * @param {string} text - Gets the text of the splitbutton item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonSplitButton.prototype.addItems = function (controlId, Items, text) {\n this.getSplitButtonObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonSplitButton.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getSplitButtonObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonSplitButton.prototype.toggle = function (controlId) {\n this.getSplitButtonObj(controlId).toggle();\n };\n /**\n * Updates the splitbutton.\n *\n * @param {RibbonSplitButtonSettingsModel} prop - Gets the splitbutton property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonSplitButton.prototype.updateSplitButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.splitButtonSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, SplitButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.open;\n delete prop.click;\n delete prop.close;\n delete prop.beforeClose;\n control.setProperties(prop);\n if (prop.content) {\n this.setContent(itemProp.item, control);\n }\n };\n /**\n * Updated SplitButton size\n *\n * @param {HTMLElement} element - Gets the splibutton element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.updateSplitButtonSize = function (element, item) {\n var control = getComponent(element, SplitButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n this.setContent(item, control);\n };\n return RibbonSplitButton;\n}());\nexport { RibbonSplitButton };\n","import { EventHandler, getComponent, remove } from '@syncfusion/ej2-base';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { RibbonGroupButtonSelection, RibbonItemSize } from '../base/interface';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { createTooltip, isTooltipPresent, setCustomAttributes } from '../base/utils';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGroupButton = /** @class */ (function () {\n function RibbonGroupButton(parent) {\n this.parent = parent;\n this.isSelected = false;\n }\n RibbonGroupButton.prototype.getModuleName = function () {\n return 'ribbonGroupButton';\n };\n RibbonGroupButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Group Button\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.createGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n this.count = 0;\n var btnContainerEle = this.parent.createElement('div', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID,\n className: 'e-btn-group'\n });\n itemElement.appendChild(btnContainerEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if ((groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss)) {\n var groupButtonEle = this.parent.createElement('button', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID + i,\n className: constants.RIBBON_GROUP_BUTTON\n });\n btnContainerEle.appendChild(groupButtonEle);\n new Button({\n iconCss: groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss,\n disabled: item.disabled,\n enableRtl: this.parent.enableRtl,\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left'\n }, groupButtonEle);\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes) {\n setCustomAttributes(groupButtonEle, groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n groupButtonEle.classList.add(constants.RIBBON_GROUP_BUTTON_CONTENT);\n }\n var buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n btnContainerEle.classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n else {\n btnContainerEle.classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].selected) {\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n buttonEle.classList.add('e-active');\n }\n else {\n if (this.count < 1) {\n buttonEle.classList.add('e-active');\n this.count++;\n }\n }\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n _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;\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)].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 groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].setProperties({ selected: true }, true);\n }\n else {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].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 groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n _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 this.grpBtnIndex = 0;\n }\n };\n RibbonGroupButton.prototype.addGroupButtonHeader = function (itemID, groupBtnSettings, popupEle) {\n var groupButtonHeader = this.parent.createElement('div', {\n className: 'e-ribbon-groupbutton-header',\n id: itemID + constants.HEADER_ID,\n innerHTML: groupBtnSettings.header\n });\n popupEle.insertBefore(groupButtonHeader, popupEle.firstChild);\n };\n RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n var isOverflowPopup = false;\n if (this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n isOverflowPopup = true;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var groupBtnSettings = item.groupButtonSettings;\n if ((e.key === 'ArrowRight' && !isOverflowPopup) || (e.key === 'ArrowDown' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowDown' && isOverflowPopup)) {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n else if ((e.key === 'ArrowLeft' && !isOverflowPopup) || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var isIconOnly = true;\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP, content: groupBtnSettings.header ? groupBtnSettings.header : '' });\n var targetEle = dropdown.target;\n if (targetEle.children.length) {\n for (var i = 0; i < targetEle.children.length; i++) {\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n isIconOnly = false;\n break;\n }\n }\n if (isIconOnly) {\n targetEle.classList.add('e-icon-btn');\n }\n }\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.toggle();\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n if (targetEle.classList.contains('e-icon-btn')) {\n targetEle.classList.remove('e-icon-btn');\n }\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE), content: '' });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\n","import { append, getComponent, remove, formatUnit, isNullOrUndefined } 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.parent = parent;\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 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 popupEle.classList.contains('e-popup-close') ? _this.showPopup(popup, popupEle, args, gallerySettings, item.id) : _this.hidePopup(popup, popupEle, args, gallerySettings, item.id);\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: 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);\n };\n galleryEle.onkeydown = function (e) {\n if (e.key === 'Enter' || e.key === ' ') {\n _this.setActiveState(e.currentTarget, gallerySettings, id, true, e);\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 galleryEle.style.paddingTop = '0px';\n galleryEle.style.paddingBottom = '0px';\n if (this_1.parent.activeLayout !== 'Simplified' && !isPopup) {\n galleryContainerEle.style.flexFlow = 'wrap';\n }\n }\n if ((!gallerySettings.template && !gallerySettings.popupTemplate) || ((gallerySettings.template && !gallerySettings.popupTemplate) && isPopup) || ((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)].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 !isPopup ? galleryWrapper.appendChild(galleryContainerEle) : itemEle.appendChild(galleryContainerEle);\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 };\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 (gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\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 var marginWidth = parseFloat(itemStyles.marginLeft) + parseFloat(itemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth)))\n itemsWidth += marginWidth;\n }\n }\n }\n else {\n isWidthApplied = true;\n break;\n }\n count++;\n }\n }\n if (isWidthApplied) {\n break;\n }\n }\n if (itemsWidth > 0)\n galleryWrapper.style.width = itemsWidth + 'px';\n };\n /**\n * Checks the gallery items height.\n *\n * @param {number} selectedTab - Gets the current selected tab.\n * @param {HTMLElement} activeContent - Gets the current active content.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.checkAvailableHeight = function (selectedTab, activeContent) {\n var galleryWrapperItems = activeContent.querySelectorAll('.e-ribbon-gallery-wrapper');\n for (var n = 0; n < galleryWrapperItems.length; n++) {\n var isHeight = false;\n var itemsCount = 0;\n var galleryWrapper = galleryWrapperItems[parseInt(n.toString(), 10)];\n var galleryWrapperHeight = galleryWrapper.offsetHeight;\n var itemID = galleryWrapper.id.replace(/_galleryWrapper/g, '');\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 if (itemProp.item.gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight && itemProp.item.gallerySettings.groups[parseInt(i.toString(), 10)].itemHeight !== 'auto') {\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 itemsCount++;\n if (!isHeight) {\n if (itemsCount === 1) {\n var itemsValues = 0;\n var itemStyles = window.getComputedStyle(galleryItemEle);\n if (itemStyles) {\n var paddingWidth = parseFloat(itemStyles.paddingTop) + parseFloat(itemStyles.paddingBottom);\n if (!(isNullOrUndefined(paddingWidth)))\n itemsValues += paddingWidth;\n var marginWidth = parseFloat(itemStyles.marginTop) + parseFloat(itemStyles.marginBottom);\n if (!(isNullOrUndefined(marginWidth)))\n itemsValues += marginWidth;\n }\n if (galleryWrapperHeight > (galleryItemEle.offsetHeight + itemsValues)) {\n galleryWrapperHeight -= (galleryItemEle.offsetHeight + itemsValues);\n }\n else {\n isHeight = true;\n galleryItemEle.remove();\n }\n }\n if (itemsCount === itemProp.item.gallerySettings.itemCount) {\n itemsCount = 0;\n }\n }\n else {\n galleryItemEle.remove();\n }\n }\n }\n }\n }\n }\n }\n };\n RibbonGallery.prototype.checkCollision = function (popup, popupEle) {\n var paddingWidth = 0;\n var marginWidth = 0;\n if (popupEle) {\n var screenWidth = window.innerWidth;\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 var popupContainerItems = popupEle.querySelectorAll('.e-ribbon-gallery-container');\n if (popup.width !== 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\n });\n }\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 marginStyles = window.getComputedStyle(popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)]);\n if (marginStyles) {\n marginWidth = parseFloat(marginStyles.marginLeft) + parseFloat(marginStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth)))\n itemsWidth += marginWidth;\n }\n itemsWidth += popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)].offsetWidth;\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)) - popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)].offsetWidth) + 'px';\n isCollideOccurs = true;\n break;\n }\n }\n if (isCollideOccurs) {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\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 }\n }\n };\n RibbonGallery.prototype.createPopup = function (item, buttonEle) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-ribbon-popup-container',\n id: item.id + '_popupContainer'\n });\n this.renderGalleryItems(item.gallerySettings, true, item.id, popupContainer);\n var gallerypopupElement = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-popup',\n id: item.id + '_galleryPopup'\n });\n document.body.append(gallerypopupElement);\n var galleryPopup = new Popup(gallerypopupElement, {\n relateTo: buttonEle,\n content: popupContainer,\n collision: { X: 'fit', Y: 'flip' },\n actionOnScroll: 'hide',\n targetType: 'relative',\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n width: item.gallerySettings.popupWidth,\n height: item.gallerySettings.popupHeight\n });\n galleryPopup.hide();\n };\n /**\n * Updates gallery in mode switching.\n *\n * @param {string} activeLayout - Gets the current active layout.\n * @param {string} itemID - Gets the ribbon item id.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.switchGalleryItems = function (activeLayout, itemID) {\n var itemEle = this.parent.element.querySelector('#' + itemID + constants.CONTAINER_ID);\n var count = 0;\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemEle) {\n var galleryWrapper = itemEle.querySelector('.e-ribbon-gallery-wrapper');\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 activeLayout === 'Simplified' ? galleryIcons[parseInt(i.toString(), 10)].classList.add('e-hidden') : galleryIcons[parseInt(i.toString(), 10)].classList.remove('e-hidden');\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 activeLayout === 'Simplified' ? galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'nowrap' : galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'wrap';\n }\n }\n }\n }\n }\n if (galleryWrapper) {\n for (var n = 0; n < itemProp.item.gallerySettings.groups.length; n++) {\n for (var i = 0; i < itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].items.length; i++) {\n count++;\n if (count > itemProp.item.gallerySettings.itemCount) {\n var galleryItemEle = galleryWrapper.querySelector('#' + itemID + '_galleryContainer' + n + '_gallery' + i);\n if (galleryItemEle) {\n activeLayout === 'Simplified' ? galleryItemEle.classList.add('e-hidden') : galleryItemEle.classList.remove('e-hidden');\n }\n }\n }\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 RibbonGallery.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n if (itemEle.closest('.e-ribbon-overflow-target')) {\n var buttonEle = this.parent.createElement('button', {\n id: item.id,\n });\n itemEle.appendChild(buttonEle);\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 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 = 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 open: function () {\n _this.setFoucsToFirstItem(popupContainerEle_1, true, item.id);\n _this.checkCollision(dropdown_1.dropDown, dropdown_1.dropDown.element);\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);\n if (popup.width !== 'auto') {\n dropdown_1.dropDown.width = formatUnit(popup.width);\n }\n if (popup.height !== 'auto') {\n dropdown_1.dropDown.height = formatUnit(popup.height);\n dropdown_1.dropDown.element.style.height = (popup.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) {\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 === 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.querySelectorAll('#' + galleryEle.id);\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 for (var i = 0; i < galleryItem.length; i++) {\n galleryItem[parseInt(i.toString(), 10)].classList.add('e-ribbon-gallery-selected');\n }\n var selectedEventArgs = { previousItem: previousItem, currentItem: currentItem, name: 'select', isInteracted: isInteracted, event: event };\n var galleryPopupItems = document.querySelectorAll('#' + itemID + '_popupContainer .e-ribbon-gallery-item');\n for (var i = 0; i < galleryPopupItems.length; i++) {\n if (galleryPopupItems[parseInt(i.toString(), 10)].id === galleryEle.id) {\n gallerySettings.selectedItemIndex = i;\n break;\n }\n }\n if (gallerySettings.select) {\n gallerySettings.select.call(this, selectedEventArgs);\n }\n }\n };\n RibbonGallery.prototype.popupEvents = function (args, gallerySettings, name, isOpen) {\n var popupEventArgs = { cancel: false, event: args, name: name };\n if (isOpen && gallerySettings.popupOpen) {\n gallerySettings.popupOpen.call(this, popupEventArgs);\n }\n else if (!isOpen && gallerySettings.popupClose) {\n gallerySettings.popupClose.call(this, popupEventArgs);\n }\n if (popupEventArgs.cancel) {\n return true;\n }\n return false;\n };\n RibbonGallery.prototype.showPopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupOpen', true);\n if (isCancelled) {\n return;\n }\n popup.show();\n this.checkCollision(popup, popupEle);\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.add('e-gallery-button-active');\n var buttonPosition = buttonEle.getBoundingClientRect();\n 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.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') {\n galleryPopupEle[this.galleryItemsIndex].click();\n }\n else if (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), galleryItemEle);\n this.parent['renderReactTemplates']();\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), galleryItemEle);\n this.parent['renderReactTemplates']();\n };\n return RibbonGallery;\n}());\nexport { RibbonGallery };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } 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 { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.keysPress = '';\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.hiddenGroups = [];\n this.itemsModel = [];\n this.targetTabs = {};\n this.isAddRemove = false;\n this.isUpdateItems = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this], name: 'RibbonButton' }, { member: 'ribbonDropDown', args: [this], name: 'RibbonDropDown' }, { member: 'ribbonSplitButton', args: [this], name: 'RibbonSplitButton' }, { member: 'ribbonCheckBox', args: [this], name: 'RibbonCheckBox' }, { member: 'ribbonComboBox', args: [this], name: 'RibbonComboBox' }, { member: 'ribbonGroupButton', args: [this], name: 'RibbonGroupButton' });\n var canInjectColorPickerModule = getItem(this.tabs, null, RibbonItemType.ColorPicker);\n var canInjectGalleryModule = getItem(this.tabs, null, RibbonItemType.Gallery);\n if (canInjectColorPickerModule) {\n modules.push({ member: 'ribbonColorPicker', args: [this], name: 'RibbonColorPicker' });\n }\n if (canInjectGalleryModule) {\n modules.push({ member: 'ribbonGallery', args: [this], name: 'RibbonGallery' });\n }\n if (this.backStageMenu.visible || this.backStageMenu.items.length) {\n modules.push({ member: 'ribbonBackstage', args: [this], name: 'RibbonBackstage' });\n }\n if (this.fileMenu.visible || this.fileMenu.menuItems.length) {\n modules.push({ member: 'ribbonFileMenu', args: [this], name: 'RibbonFileMenu' });\n }\n if (this.contextualTabs.length) {\n modules.push({ member: 'ribbonContextualTab', args: [this], name: 'RibbonContextualTab' });\n }\n if (this.enableKeyTips) {\n modules.push({ member: 'ribbonKeyTip', args: [this], name: 'RibbonKeyTip' });\n }\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n 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.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\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 this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n if (this.activeLayout === 'Simplified') {\n var activePopup = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active, .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active');\n if (activePopup.length) {\n for (var i = 0; i < activePopup.length; i++) {\n var dropDownBtn = getInstance(activePopup[parseInt(i.toString(), 10)], DropDownButton);\n dropDownBtn.toggle();\n }\n }\n }\n 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 (e) {\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 /* eslint-disable */\n if (!(this.keyTipElements[parseInt(tabIndex.toString(), 10)][type])) {\n this.keyTipElements[parseInt(tabIndex.toString(), 10)][type] = [];\n }\n if (Object.keys(this.keyTipElements[tabIndex][type]).length) {\n var keytipData = this.keyTipElements[tabIndex][type];\n for (var i = 0; i < Object.keys(this.keyTipElements[tabIndex][type]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].id === id) {\n isKeyTipExist = true;\n }\n }\n if (!isKeyTipExist) {\n this.keyTipElements[tabIndex][type].push({ id: id, type: type, keyTip: keyTip });\n }\n }\n else {\n this.keyTipElements[tabIndex][type].push({ id: id, type: type, keyTip: keyTip });\n }\n /* eslint-enable */\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 () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n 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 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 this.checkOverflow(selectedIndex, e.selectedContent.firstChild);\n if (this.activeLayout === 'Classic' && this.ribbonGalleryModule) {\n this.ribbonGalleryModule.checkAvailableHeight(selectedIndex, e.selectedContent.firstChild);\n }\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)].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) || (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 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 () {\n if (isLeft) {\n dropDownPopup.element.style.setProperty('visibility', 'hidden');\n dropDownPopup.element.style.setProperty('display', 'block');\n dropDownPopup.setProperties({ offsetX: -1 * dropDownPopup.element.offsetWidth });\n dropDownPopup.element.style.removeProperty('display');\n dropDownPopup.element.style.removeProperty('visibility');\n }\n };\n }\n else {\n dropDownPopup.setProperties({ offsetX: 0 }, true);\n dropdown.beforeOpen = null;\n }\n }\n };\n Ribbon.prototype.removeSimplfiedOverflow = function (tabContent, activeContent, tabIndex, isClear) {\n if (isClear === void 0) { isClear = false; }\n var orderedGroups = this.getGroupResizeOrder(false, tabIndex);\n var flag = true;\n var isEmptyCollection;\n for (var i = 0; ((i < orderedGroups.length) && flag); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (group.enableGroupOverflow) {\n var overflowDDBEle = tabContent.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n else {\n overflowDDB = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n for (var j = 0; ((j < group.collections.length) && flag); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n // eslint-disable-next-line max-len\n for (var k = 0; ((k < collection.items.length) && flag && !isClear && (tabContent.offsetWidth > activeContent.offsetWidth)); k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemContainer = void 0;\n if (overflowtarget) {\n itemContainer = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n var width = parseInt(itemContainer.getAttribute('data-simplified-width'), 10);\n 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) || (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 || (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 isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))\n : overflowBtnTarget.append(itemEle);\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID, 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('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);\n if (!ofGroupContainer) {\n ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n ofTabContainer.append(ofGroupContainer);\n }\n isResize ? ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM)) : ofGroupContainer.append(itemEle);\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n 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, overflowButton);\n }\n break;\n case 'GroupButton':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var itemProp = getGroup(this.tabs, groupId);\n var ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);\n ofGroupContainer.append(itemEle);\n ofTabContainer.append(ofGroupContainer);\n if (tabIndex === this.selectedTab) {\n ofTabContainer.classList.add(constants.RIBBON_TAB_ACTIVE);\n }\n var groupEle = document.querySelector('#' + groupId);\n if (groupEle) {\n if (groupEle.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n if (groupEle.classList.contains('e-hidden')) {\n ofGroupContainer.classList.add('e-hidden');\n }\n if (groupEle.classList.contains('e-hide-group')) {\n ofGroupContainer.classList.add('e-hide-group');\n }\n }\n };\n Ribbon.prototype.checkGroupShrinking = function (tabIndex, tabContent, activeContent, isLarge) {\n var isOverFlow = true;\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = (tab.groups.length - 1); (isOverFlow && (j >= 0)); j--) {\n // eslint-disable-next-line max-len\n isBreak = isLarge ? this.checkLargeToMedium(tabIndex, tab, j, tabContent, activeContent) : this.checkMediumToSmall(tabIndex, tab, j, tabContent, activeContent);\n isOverFlow = !isBreak && (tabContent.offsetWidth < activeContent.offsetWidth);\n }\n return isBreak;\n };\n Ribbon.prototype.checkValidCollectionLength = function (collections) {\n var count = 0;\n for (var i = 0; i < collections.length; i++) {\n var items = collections[parseInt(i.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n count++;\n break;\n }\n }\n if (count > 1) {\n return false;\n }\n }\n return count === 1;\n };\n Ribbon.prototype.checkClassicCollection = function (collections, n, isIncrement) {\n var items = collections[parseInt(n.toString(), 10)].items;\n for (var ind = 0; ind < items.length; ind++) {\n if (items[parseInt(ind.toString(), 10)].displayOptions & DisplayMode.Classic) {\n return n;\n }\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === collections.length) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicCollection(collections, n, isIncrement);\n }\n };\n Ribbon.prototype.checkClassicItem = function (items, n, isIncrement) {\n var item = items[parseInt(n.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n return n;\n }\n n = isIncrement ? n + 1 : n - 1;\n if (isIncrement) {\n return (n === items.length) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n else {\n return (n < 0) ? n : this.checkClassicItem(items, n, isIncrement);\n }\n };\n Ribbon.prototype.checkLargeToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var canReduceCollection = function (collection) {\n return (collection.items.length === 1) && canReduceItem(collection.items[0]);\n };\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Large);\n };\n var createShrinkEle = function (id, firstItem, start, end) {\n var shrinkEle = _this.createElement('div', {\n className: 'e-ribbon-shrink' + constants.SPACE + constants.RIBBON_ROW,\n id: id + '_shrink_container' + start,\n attrs: { 'data-start': start.toString(), 'data-end': end.toString() }\n });\n firstItem.parentElement.insertBefore(shrinkEle, firstItem);\n if (!shouldSkip) {\n shrinkEle.setAttribute('data-large-width', activeContent.offsetWidth.toString());\n }\n return shrinkEle;\n };\n var moveItemToColumn = function (start, end) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[0];\n var firstItem = activeContent.querySelector('#' + collection.items[parseInt(start.toString(), 10)].id + constants.CONTAINER_ID);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + collection.id + '_shrink_container' + start) :\n createShrinkEle(collection.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (!(item.displayOptions & DisplayMode.Classic)) {\n continue;\n }\n var ele = activeContent.querySelector('#' + item.id + constants.CONTAINER_ID);\n shrinkEle.appendChild(ele);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID), item);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + item.id), item);\n }\n }\n };\n var moveCollectionToColumn = function (start, end) {\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n var firstItem = activeContent.querySelector('#' + group.collections[parseInt(start.toString(), 10)].id);\n var shrinkEle = shouldSkip ? activeContent.querySelector('#' + group.id + '_shrink_container' + start) :\n createShrinkEle(group.id, firstItem, start, end);\n for (var i = start; i <= end; i++) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n var ele = activeContent.querySelector('#' + collection.id);\n shrinkEle.appendChild(ele);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton && _this.activeLayout === 'Classic') {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID), collection.items[0]);\n }\n else {\n _this.setItemSize(ele.querySelector('#' + collection.items[0].id), collection.items[0]);\n }\n }\n };\n var orientation = group.orientation;\n if (orientation === ItemOrientation.Column) {\n for (var k = (group.collections.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second collection\n k = this.checkClassicCollection(group.collections, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(k.toString(), 10)])) {\n l = this.checkClassicCollection(group.collections, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceCollection(group.collections[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n if (m >= 0) {\n m = this.checkClassicCollection(group.collections, m, false);\n }\n //Checks the element rendered at position n-2\n if ((m >= 0) && canReduceCollection(group.collections[parseInt(m.toString(), 10)])) {\n moveCollectionToColumn(m, k);\n }\n else {\n moveCollectionToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n var collection = group.collections[0];\n for (var k = (collection.items.length - 1); k > 0; k--) {\n //to avoid negative index while checking for the second item\n k = this.checkClassicItem(collection.items, k, false);\n var l = k - 1;\n //Checks the element rendered at position n\n if ((l >= 0) && canReduceItem(collection.items[parseInt(k.toString(), 10)])) {\n l = this.checkClassicItem(collection.items, l, false);\n //Checks the element rendered at position n-1\n if ((l >= 0) && canReduceItem(collection.items[parseInt(l.toString(), 10)])) {\n var m = l - 1;\n //Checks the element rendered at position n-2\n if (m >= 0) {\n m = this.checkClassicItem(collection.items, m, false);\n }\n if ((m >= 0) && canReduceItem(collection.items[parseInt(m.toString(), 10)])) {\n moveItemToColumn(m, k);\n }\n else {\n moveItemToColumn(l, k);\n }\n k = m;\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n else {\n k = l;\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToSmall = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip) {\n var _this = this;\n if (shouldSkip === void 0) { shouldSkip = false; }\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n if (group.isCollapsed && !shouldSkip) {\n return false;\n }\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canReduceItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Small) && (item.activeSize === RibbonItemSize.Medium);\n };\n var reduceItemsToSmall = function (collectionIndex, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var reduce = function (i) {\n var item = collection.items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_1 = activeContent.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_1 = activeContent.querySelector('#' + item.id + '_grpbtn');\n }\n _this.setItemSize(ele_1, item);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var reduceCollectionsToSmall = function (index, start, end, middle) {\n if (middle === void 0) { middle = null; }\n var group = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)];\n if (!shouldSkip) {\n shrinkColumns[parseInt(index.toString(), 10)].setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n var reduce = function (i) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var ele_2 = activeContent.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Small }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_2 = activeContent.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_2, collection.items[0]);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n };\n var setWidth = function (id) {\n if (!shouldSkip) {\n var ele_3 = activeContent.querySelector('#' + id);\n ele_3.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n }\n };\n if (orientation === ItemOrientation.Column) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var start = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumns[parseInt(k.toString(), 10)].getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var l = this.checkClassicCollection(group.collections, start + 1, false); //next valid item\n if (canReduceItem(group.collections[parseInt(start.toString(), 10)].items[0])\n && canReduceItem(group.collections[parseInt(l.toString(), 10)].items[0])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n reduceCollectionsToSmall(k, start, end);\n }\n else if (canReduceItem(group.collections[parseInt(end.toString(), 10)].items[0])) {\n reduceCollectionsToSmall(k, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n //If items length is 1 then, it would have been already check for shrinked column\n if ((classicItems.length > 1)) {\n if (canReduceItem(collection.items[classicItems[0]]) && canReduceItem(collection.items[classicItems[1]])) {\n if (classicItems.length === 2) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[1]);\n }\n else if (canReduceItem(collection.items[classicItems[2]])) {\n setWidth(collection.id);\n reduceItemsToSmall(k, classicItems[0], classicItems[2], classicItems[1]);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n if (this.checkValidCollectionLength(group.collections)) {\n if (shrinkColumns.length > 0) {\n for (var k = (shrinkColumns.length - 1); k >= 0; k--) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n //only 2 or 3 itmes alone can be present in shrinked column\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, false); //next valid item\n if (canReduceItem(group.collections[0].items[parseInt(start.toString(), 10)])\n && canReduceItem(group.collections[0].items[parseInt(l.toString(), 10)])) {\n if (end === l) { //if only 2 item, then next valid item will be the end item, else check for 3 rd item satus.\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end);\n }\n else if (canReduceItem(group.collections[0].items[parseInt(end.toString(), 10)])) {\n setWidth(shrinkColumn.id);\n reduceItemsToSmall(0, start, end, l);\n }\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n else {\n for (var k = (group.collections.length - 1); k >= 0; k--) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = (collection.items.length - 1); l >= 0; l--) {\n l = this.checkClassicItem(collection.items, l, false);\n if (l < 0) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canReduceItem(item)) {\n item.type !== RibbonItemType.GroupButton ? setWidth(item.id) : setWidth(item.id + constants.RIBBON_GROUP_BUTTON_ID);\n reduceItemsToSmall(k, l, l);\n if (!shouldSkip && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkGroupExpanding = function (tabIndex, tabContent, activeContent, isSmall) {\n var isBreak = false;\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var j = 0; (!isBreak && (j < tab.groups.length)); j++) {\n isBreak = isSmall ? this.checkSmallToMedium(tabIndex, tab, j, tabContent, activeContent, false, true) :\n this.checkMediumToLarge(tabIndex, tab, j, tabContent, activeContent, false, true);\n }\n return isBreak;\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.checkSmallToMedium = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n var canExpandItem = function (item) {\n return (item.allowedSizes & RibbonItemSize.Medium) && (item.activeSize === RibbonItemSize.Small);\n };\n var expandItemToMedium = function (collectionIndex, index, parentEle) {\n var collection = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections[parseInt(collectionIndex.toString(), 10)];\n var item = collection.items[parseInt(index.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_4 = parentEle.id === item.id ? parentEle : parentEle.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_4 = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_4, item);\n }\n };\n var expandCollectionsToMedium = function (i) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)]\n .groups[parseInt(groupIndex.toString(), 10)].collections;\n var item = collections[parseInt(i.toString(), 10)].items[0];\n if (item.displayOptions & DisplayMode.Classic) {\n var ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id);\n collections[parseInt(i.toString(), 10)].items[0].setProperties({ activeSize: RibbonItemSize.Medium }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_5 = activeContent.querySelector('#' + collections[parseInt(i.toString(), 10)].items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_5, collections[parseInt(i.toString(), 10)].items[0]);\n }\n };\n if (orientation === ItemOrientation.Row) {\n // collection length is 1, then the it wll be covered in shrinked columns\n if (!this.checkValidCollectionLength(group.collections)) {\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n l = this.checkClassicItem(collection.items, l, true);\n if (l === collection.items.length) {\n continue;\n }\n var item = collection.items[parseInt(l.toString(), 10)];\n if (canExpandItem(item)) {\n var itemEle = activeContent.querySelector('#' + item.id);\n if (item.type === 'GroupButton') {\n itemEle = activeContent.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, l, itemEle);\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n }\n }\n else {\n for (var k = 0; k < group.collections.length; k++) {\n //If items length is 1 then, it will be handled in shrinked column\n if ((group.collections[parseInt(k.toString(), 10)].items.length > 1)) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n var itemEle = activeContent.querySelector('#' + collection.id);\n var valString = itemEle.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n var classicItems = [];\n for (var i = 0; i < collection.items.length; i++) {\n if (collection.items[parseInt(i.toString(), 10)].displayOptions & DisplayMode.Classic) {\n classicItems.push(i);\n }\n }\n if ((classicItems.length > 1) && value && (shouldSkip || (tabContent.offsetWidth > value))) {\n expandItemToMedium(k, classicItems[0], itemEle);\n expandItemToMedium(k, classicItems[1], itemEle);\n if (classicItems.length === 3) {\n expandItemToMedium(k, classicItems[2], itemEle);\n }\n if (!shouldSkip || shouldClear) {\n itemEle.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n }\n if (shrinkColumns.length > 0) {\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n expandItemToMedium(0, start, shrinkColumn);\n expandItemToMedium(0, l, shrinkColumn);\n // if l == end, then l is the last item, else L is the middle item. If l is middle then call the method for end.\n if (l !== end) {\n expandItemToMedium(0, end, shrinkColumn);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n expandCollectionsToMedium(start);\n expandCollectionsToMedium(m);\n if (m !== end) {\n expandCollectionsToMedium(end);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-medium-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n }\n return false;\n };\n Ribbon.prototype.checkMediumToLarge = function (tabIndex, tab, groupIndex, tabContent, activeContent, shouldSkip, shouldClear) {\n var _this = this;\n var group = tab.groups[parseInt(groupIndex.toString(), 10)];\n var orientation = group.orientation;\n var ele = activeContent.querySelector('#' + group.id);\n var shrinkColumns = ele.querySelectorAll('.' + 'e-ribbon-shrink');\n if (shrinkColumns.length === 0) {\n return false;\n }\n var expandItemsToLarge = function (start, end, parentEle, middle) {\n var items = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections[0].items;\n var reduce = function (i) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.displayOptions & DisplayMode.Classic) {\n var container = parentEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele_6 = container.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (item.type === RibbonItemType.GroupButton) {\n ele_6 = container.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_6, item);\n parentEle.insertAdjacentElement('beforebegin', container);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n var expandCollectionsToLarge = function (start, end, parentEle, middle) {\n var collections = _this.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].collections;\n var reduce = function (i) {\n var collection = collections[parseInt(i.toString(), 10)];\n if (collection.items[0].displayOptions & DisplayMode.Classic) {\n var collectionEle = parentEle.querySelector('#' + collection.id);\n var ele_7 = collectionEle.querySelector('#' + collection.items[0].id);\n collection.items[0].setProperties({ activeSize: RibbonItemSize.Large }, true);\n if (collection.items[0].type === RibbonItemType.GroupButton) {\n ele_7 = collectionEle.querySelector('#' + collection.items[0].id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n _this.setItemSize(ele_7, collection.items[0]);\n parentEle.insertAdjacentElement('beforebegin', collectionEle);\n }\n };\n reduce(start);\n if (middle) {\n reduce(middle);\n }\n reduce(end);\n if (!shouldSkip || shouldClear) {\n remove(parentEle);\n }\n };\n for (var k = 0; k < shrinkColumns.length; k++) {\n var shrinkColumn = shrinkColumns[parseInt(k.toString(), 10)];\n var valString = shrinkColumn.getAttribute('data-large-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (shouldSkip || (tabContent.offsetWidth > value))) {\n var start = parseInt(shrinkColumn.getAttribute('data-start'), 10);\n var end = parseInt(shrinkColumn.getAttribute('data-end'), 10);\n if (orientation === ItemOrientation.Row) {\n var collection = group.collections[0];\n var l = this.checkClassicItem(collection.items, start + 1, true); //next valid item\n if (l === end) {\n expandItemsToLarge(start, end, shrinkColumn);\n }\n else {\n expandItemsToLarge(start, end, shrinkColumn, l);\n }\n }\n else {\n var m = this.checkClassicCollection(group.collections, start + 1, true); //next valid item\n if (m === end) {\n expandCollectionsToLarge(start, end, shrinkColumn);\n }\n else {\n expandCollectionsToLarge(start, end, shrinkColumn, m);\n }\n }\n if (!shouldSkip || shouldClear) {\n shrinkColumn.removeAttribute('data-large-width');\n }\n }\n else if (value) {\n return true;\n }\n }\n return false;\n };\n Ribbon.prototype.handleContentSize = function (itemEle, isRemoveOverflow) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_GROUP_CONTENT);\n (isRemoveOverflow ? (itemContainer.classList.add(constants.RIBBON_CONTENT_HEIGHT)) : (itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT)));\n };\n Ribbon.prototype.setItemSize = function (itemEle, item) {\n if (itemEle) {\n var itemContainer = itemEle.closest('.' + constants.RIBBON_ITEM);\n if (item.type === RibbonItemType.Button) {\n this.ribbonButtonModule.updateButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.DropDown) {\n this.ribbonDropDownModule.updateDropDownSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.SplitButton) {\n this.ribbonSplitButtonModule.updateSplitButtonSize(itemEle, item);\n }\n else if (item.type === RibbonItemType.Template) {\n remove(itemEle);\n this.createTemplateContent(item, itemContainer);\n }\n else if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.updateGroupButtonSize(itemEle, item);\n }\n itemContainer.classList.remove(constants.RIBBON_CONTENT_HEIGHT, constants.RIBBON_LARGE_ITEM, constants.RIBBON_MEDIUM_ITEM, constants.RIBBON_SMALL_ITEM);\n if (item.activeSize === RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((item.activeSize === RibbonItemSize.Medium) ?\n constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n }\n };\n Ribbon.prototype.createOverflowDropdown = function (tabIndex, tabContent, activeContent) {\n var collapseOrder = this.getGroupResizeOrder(true, tabIndex);\n if (collapseOrder.length === 0) {\n return;\n }\n var _loop_1 = function (i) {\n var group = collapseOrder[parseInt(i.toString(), 10)];\n var groupEle = this_1.tabObj.element.querySelector('#' + group.id);\n groupEle.setAttribute('data-expanded-width', activeContent.offsetWidth.toString());\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupOverFlow = this_1.createElement('div', {\n className: constants.RIBBON_GROUP_OVERFLOW + constants.SPACE + constants.RIBBON_LARGE_ITEM,\n id: group.id + constants.OVERFLOW_ID + constants.CONTAINER_ID\n });\n groupEle.insertBefore(groupOverFlow, groupContainer);\n var groupIndex = getIndex(this_1.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n var tab = this_1.tabs[parseInt(tabIndex.toString(), 10)];\n //Expanding the items in the group to their original expanded state\n this_1.checkSmallToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n this_1.checkMediumToLarge(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n var dropdown = this_1.ribbonDropDownModule.createOverFlowDropDown(group.id, group.header, group.groupIconCss, groupContainer, groupOverFlow, this_1.enableRtl);\n 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.getAttribute('data-id');\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var 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, 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 this.checkOverflow(this.selectedTab, activeContent);\n if (this.activeLayout === 'Classic' && this.ribbonGalleryModule)\n this.ribbonGalleryModule.checkAvailableHeight(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 var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeOpen: function (args) {\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupOpen', eventArgs, function (ribbonArgs) {\n if (ribbonArgs.cancel) {\n args.cancel = true;\n }\n });\n },\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n var groupButtonEle = args.event ? closest(args.event.target, '.e-ribbon-group-button-overflow-popup') : null;\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupClose', eventArgs, function (ribbonArgs) {\n if (ele || ribbonArgs.cancel || groupButtonEle) {\n args.cancel = true;\n }\n });\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n 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') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;\n var ribbonItem;\n var templateEle;\n if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {\n if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {\n if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {\n this.itemIndex = 0;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n if (comboBoxEle && e.key === 'Tab') {\n e.preventDefault();\n var item = items[this.itemIndex].querySelector('.e-control');\n if (item) {\n item.focus();\n }\n }\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {\n this.itemIndex++;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n if (templateEle) {\n templateEle.focus();\n }\n }\n else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n if (comboBoxEle === null || (e.key === 'Tab')) {\n if (!this.itemIndex || this.itemIndex === -1) {\n this.itemIndex = items.length - 1;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {\n e.preventDefault();\n var item = items[this.itemIndex].querySelector('.e-control');\n if (item) {\n item.focus();\n }\n }\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {\n this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');\n }\n if (templateEle) {\n templateEle.focus();\n }\n }\n }\n target.setAttribute('index', this.itemIndex.toString());\n }\n var currentItemIndex = parseInt(target.getAttribute('index'), 10);\n var itemType = \"\";\n var controlItem = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control') : null;\n if (controlItem) {\n itemType = controlItem.getAttribute('data-control');\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {\n if (itemType === 'ColorPicker') {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-split-colorpicker').focus();\n }\n else {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var elem = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n if (elem) {\n elem.focus();\n }\n }\n if (e.key === ' ' && (itemType === 'CheckBox')) {\n var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n var checkBox = getComponent(checkBoxEle, CheckBox);\n this.itemIndex = -1;\n checkBox.click();\n }\n }\n if (((itemType === 'SplitButton') && (e.key === 'ArrowRight' || e.key === 'ArrowLeft'))) {\n if (e.key === 'ArrowRight') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n if (e.key === 'ArrowLeft') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n }\n if (e.key === 'Enter') {\n this.itemIndex = -1;\n }\n };\n Ribbon.prototype.findDisabledItem = function (ribbonItem, items, isIncrease) {\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (isIncrease) {\n if (this.itemIndex === items.length - 1 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = -1;\n }\n }\n else {\n if (this.itemIndex === 0 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = items.length;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isIncrease ? this.itemIndex++ : this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n };\n Ribbon.prototype.removeOverflowButton = function (overflowDDB) {\n if (overflowDDB) {\n var btnEle = overflowDDB.element;\n destroyTooltip(overflowDDB.target);\n overflowDDB.destroy();\n btnEle.remove();\n }\n };\n Ribbon.prototype.removeOverflowEvent = function (item, itemEle) {\n if (itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case '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 () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n 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 key in tabs) {\n var index = parseInt(key, 10);\n var tab = tabs[parseInt(index.toString(), 10)];\n var isNewTab = false;\n for (var j = 0; j < (this.tabObj.items.length); j++) {\n if (this.tabs[parseInt(index.toString(), 10)].id === this.tabObj.items[parseInt(j.toString(), 10)].id) {\n isNewTab = true;\n break;\n }\n }\n if (!isNewTab) {\n this.destroyTabItems(this.tabsInternal);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n if (this.selectedTab >= this.tabs.length) {\n this.selectedTab = this.tabs.length - 1;\n }\n this.tabObj.setProperties({ items: tabItems, selectedItem: this.selectedTab });\n break;\n }\n else {\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n if (groups) {\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n this.tabObj.items[parseInt(index.toString(), 10)].header.text.innerText = ribbonTab.header;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabObj.items[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n }\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\n var group = groups_1[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n }\n }\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.switchLayout = function () {\n this.currentControlIndex = 0;\n this.destroyScroll();\n this.collapseButton.classList.toggle(constants.RIBBON_EXPAND_BUTTON, this.activeLayout === 'Simplified');\n this.element.classList.toggle(constants.RIBBON_SIMPLIFIED_MODE, this.activeLayout === 'Simplified');\n for (var i = 0; i <= (this.tabs.length - 1); i++) {\n var tabIndex = i;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n for (var i_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) || (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) || (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 || (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 key === 'hiddenGroups' ? groupEle.classList.add('e-hidden') : groupEle.classList.add('e-disabled');\n }\n };\n Ribbon.prototype.validateItemSize = function () {\n for (var k = 0; k < this.tabs.length; k++) {\n var groupList = this.tabs[parseInt(k.toString(), 10)].groups;\n for (var l = 0; l < groupList.length; l++) {\n var collectionList = groupList[parseInt(l.toString(), 10)].collections;\n var alignType = groupList[parseInt(l.toString(), 10)].orientation;\n for (var i = 0; i < collectionList.length; i++) {\n var items = collectionList[parseInt(i.toString(), 10)].items;\n for (var j = 0; j < items.length; j++) {\n var ribbonitem = items[parseInt(j.toString(), 10)];\n if (!ribbonitem.allowedSizes || (ribbonitem.allowedSizes === 0)) {\n ribbonitem.setProperties({\n allowedSizes: (RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n }, true);\n }\n if ((ribbonitem.type === 'ColorPicker') && (ribbonitem.allowedSizes !== RibbonItemSize.Small)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Small }, true);\n }\n else if ((ribbonitem.type === 'ComboBox' || ribbonitem.type === 'CheckBox') &&\n (ribbonitem.allowedSizes !== RibbonItemSize.Medium)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Medium }, true);\n }\n else if (((alignType === 'Column') && (items.length > 1)) || ((alignType === 'Row') && (collectionList.length > 1))) {\n if (ribbonitem.allowedSizes & RibbonItemSize.Large) {\n // To remove large size, perform 'and' with 011(3).\n var sizeVal = ribbonitem.allowedSizes & (RibbonItemSize.Small | RibbonItemSize.Medium);\n sizeVal = sizeVal ? sizeVal : RibbonItemSize.Medium;\n ribbonitem.setProperties({ allowedSizes: sizeVal }, true);\n }\n }\n var itemsize = (ribbonitem.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (ribbonitem.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonitem.setProperties({ activeSize: itemsize }, true);\n }\n }\n }\n }\n };\n Ribbon.prototype.createCollection = function (collectionList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var collectionElements = [];\n for (var i = 0; i < collectionList.length; i++) {\n var collection = collectionList[parseInt(i.toString(), 10)];\n var collectionEle = this.createElement('div', {\n className: collection.cssClass,\n id: collection.id\n });\n collectionEle.classList.add(constants.RIBBON_COLLECTION);\n collectionEle.classList.add(((alignType !== 'Column') || (this.activeLayout === 'Simplified')) ?\n constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n collectionElements.push(collectionEle);\n var elements = this.createItems(collection.items, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer);\n append(elements, collectionEle);\n if ((alignType === 'Row') && (i === 2)) {\n break;\n }\n }\n return collectionElements;\n };\n Ribbon.prototype.createRibbonItem = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.createButton(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.createDropDown(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.createSplitButton(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.createCheckBox(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.createColorPicker(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.createComboBox(item, itemEle);\n break;\n case 'Template':\n this.createTemplateContent(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.createGroupButton(item, itemEle);\n break;\n 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)] && 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) || (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 + constants.RIBBON_GROUP_BUTTON_ID) :\n 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 }\n else {\n var galleryEle = ele.querySelectorAll('.e-ribbon-gallery-item');\n var galleryPopupBtn = ele.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 = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId, 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 * @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 = getIndex(this.tabs, function (e) { return e.id === 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) { return e.id === contextualTab_1.tabs[parseInt(i.toString(), 10)].id; });\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 this.tabObj.enableTab(index, value);\n };\n /**\n * Adds the ribbon tab.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model\n * @param {string} targetId - Gets the ID of the target tab to add the new tab.\n * @param {boolean} isAfter - Defines whether the tab is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addTab = function (tab, targetId, isAfter) {\n var index = targetId ? getIndex(this.tabs, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? this.tabs.length : (index + (isAfter ? 1 : 0));\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 0, tab);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.checkID([this.tabs[parseInt(index.toString(), 10)]], 'tab', this.element.id);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItem = this.createTabItems([tab]);\n this.tabObj.addTab(tabItem, index);\n };\n /**\n * Removes the ribbon tab.\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.removeTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n if (groups && (contentEle.innerHTML !== '')) {\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\n var group = groups_2[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 1);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.tabObj.removeTab(index);\n };\n /**\n * Adds the ribbon group.\n *\n * @param {string} tabId - Gets the tab ID.\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @param {string} targetId - Gets the ID of the target group to add the new group.\n * @param {boolean} isAfter - Defines whether the group is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addGroup = function (tabId, group, targetId, isAfter) {\n var tabIndex = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (tabIndex === -1) {\n return;\n }\n if (this.selectedTab === tabIndex) {\n this.clearOverflowResize();\n }\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var ribbonGroups = tab.groups.slice();\n var index = targetId ? getIndex(ribbonGroups, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonGroups.length : (index + (isAfter ? 1 : 0));\n ribbonGroups.splice(index, 0, group);\n tab.setProperties({ groups: ribbonGroups }, true);\n this.checkID([tab.groups[parseInt(index.toString(), 10)]], 'group', tabId);\n this.validateItemSize();\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var element = this.createGroups([tab.groups[parseInt(index.toString(), 10)]], tabIndex)[0];\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.append(element);\n }\n }\n if (this.selectedTab === tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon group.\n *\n * @param {string} groupId -Gets the group ID.\n * @returns {void}\n */\n Ribbon.prototype.removeGroup = function (groupId) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n var groupEle = contentEle.querySelector('#' + groupId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroups = this.tabs[itemProp.tabIndex].groups.slice();\n ribbonGroups.splice(itemProp.groupIndex, 1);\n this.tabs[itemProp.tabIndex].setProperties({ groups: ribbonGroups }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n Ribbon.prototype.isHeaderVisible = function (headerEle, groupID) {\n return headerEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID + constants.HEADER_ID) ? true : false;\n };\n /**\n * Hides a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideGroup = function (groupID) {\n this.showHideGroup(groupID, true);\n };\n /**\n * Shows a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showGroup = function (groupID) {\n this.showHideGroup(groupID, false);\n };\n Ribbon.prototype.showHideGroup = function (groupID, isHidden) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n if (groupEle) {\n 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 isHidden ? overflowtarget.classList.add('e-hidden') : overflowtarget.classList.remove('e-hidden');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hidden') : grpContainer.classList.remove('e-hidden');\n }\n }\n }\n 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 /* eslint-disable */\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 /* eslint-enable */\n }\n }\n };\n Ribbon.prototype.updateItemsSimplifiedWidth = function (tabIndex, key) {\n var hiddenProps = this.hiddenElements[parseInt(tabIndex.toString(), 10)];\n /* eslint-disable */\n if (hiddenProps && hiddenProps[key] && hiddenProps[key].length) {\n var _loop_6 = function (i) {\n var contentEle = this_6.tabObj.items[tabIndex].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][i]);\n }\n else {\n hiddenEle = contentEle.querySelector('#' + hiddenProps[key][i] + 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][i]);\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 isDisabled ? groupEle.classList.add('e-disabled') : groupEle.classList.remove('e-disabled');\n }\n else {\n this.updateInitialProps(itemProp.tabIndex, groupID, 'disabledGroups', isDisabled);\n }\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isDisabled ? overflowtarget.classList.add('e-disabled') : overflowtarget.classList.remove('e-disabled');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isDisabled ? grpContainer.classList.add('e-disabled') : grpContainer.classList.remove('e-disabled');\n }\n }\n }\n };\n /**\n * adds the ribbon collection.\n *\n * @param {string} groupId - Gets the ribbon group ID.\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @param {string} targetId - Gets the ID of the target collection to add the new collection.\n * @param {boolean} isAfter - Defines whether the collection is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addCollection = function (groupId, collection, targetId, isAfter) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Row') && (itemProp.group.collections.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonCollections = itemProp.group.collections.slice();\n var index = targetId ? getIndex(ribbonCollections, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonCollections.length : (index + (isAfter ? 1 : 0));\n ribbonCollections.splice(index, 0, collection);\n itemProp.group.setProperties({ collections: ribbonCollections }, true);\n this.checkID([itemProp.group.collections[parseInt(index.toString(), 10)]], 'collection', groupId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var collection_1 = itemProp.group.collections[parseInt(index.toString(), 10)];\n var element = this.createCollection([collection_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.querySelector('#' + groupId + constants.CONTENT_ID).append(element);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon collection.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @returns {void}\n */\n Ribbon.prototype.removeCollection = function (collectionId) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n var groupEle = contentEle.querySelector('#' + collectionId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroup = itemProp.group;\n var ribbonCollections = ribbonGroup.collections.slice();\n ribbonCollections.splice(itemProp.collectionIndex, 1);\n ribbonGroup.setProperties({ collections: ribbonCollections }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Adds ribbon item.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {string} targetId - Gets the ID of the target item to add the new item.\n * @param {boolean} isAfter - Defines whether the item is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addItem = function (collectionId, item, targetId, isAfter) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Column') && (itemProp.collection.items.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonItems = itemProp.collection.items.slice();\n var index = targetId ? getIndex(ribbonItems, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonItems.length : (index + (isAfter ? 1 : 0));\n ribbonItems.splice(index, 0, item);\n itemProp.collection.setProperties({ items: ribbonItems }, true);\n this.checkID([itemProp.collection.items[parseInt(index.toString(), 10)]], 'item', collectionId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (contentEle.innerHTML !== '') {\n var item_1 = itemProp.collection.items[parseInt(index.toString(), 10)];\n var element = this.createItems([item_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.closest('.' + constants.RIBBON_ITEM).insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n if (element) {\n contentEle.querySelector('#' + collectionId).append(element);\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.removeItem = function (itemId) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n var item = itemProp.item;\n this.removeItemElement(contentEle, item, dropdown);\n }\n var ribbonCollection = itemProp.collection;\n var ribbonItems = ribbonCollection.items;\n ribbonItems.splice(itemProp.itemIndex, 1);\n ribbonCollection.setProperties({ items: ribbonItems }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideItem = function (itemId) {\n this.showHideItem(itemId, true);\n };\n /**\n * Shows a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showItem = function (itemId) {\n this.showHideItem(itemId, false);\n };\n Ribbon.prototype.showHideItem = function (itemId, isHidden) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n 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 /* eslint-disable */\n if (!initialProps[key])\n initialProps[key] = [];\n var itemIndex = initialProps[key].indexOf(id);\n if (isInsert) {\n if (itemIndex === -1)\n initialProps[key].push(id);\n }\n else {\n if (itemIndex !== -1)\n initialProps[key].splice(itemIndex, 1);\n initialProps[key].length === 0 && delete initialProps[key];\n /* eslint-enable */\n if (Object.keys(initialProps).length === 0) {\n delete this.initialPropsData[parseInt(tabIndex.toString(), 10)];\n }\n }\n }\n };\n Ribbon.prototype.checkHiddenItems = function (group, isHidden, tabIndex) {\n var isItemsHidden = true;\n var isEmptyCollection;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var groupEle = contentEle.querySelector('#' + group.id);\n if (isHidden) {\n for (var i = 0; i < group.collections.length; i++) {\n if (isItemsHidden) {\n var collection = group.collections[parseInt(i.toString(), 10)];\n for (var j = 0; j < collection.items.length; j++) {\n var item = collection.items[parseInt(j.toString(), 10)];\n var itemEle = void 0;\n if (item.type === 'GroupButton') {\n var itemProp = getItem(this.tabs, item.id);\n itemEle = getItemElement(this, item.id + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n itemEle = getItemElement(this, item.id);\n }\n var itemContainer = itemEle ? itemEle.closest('.e-ribbon-item') : null;\n if (!(itemContainer.classList.contains('e-hidden'))) {\n isItemsHidden = false;\n break;\n }\n }\n }\n }\n if (isItemsHidden) {\n groupEle.classList.add('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n }\n else {\n groupEle.classList.remove('e-hide-group');\n this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);\n }\n if (this.activeLayout === 'Simplified' && !group.enableGroupOverflow) {\n var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);\n if (itemsLength) {\n isEmptyCollection = this.checkEmptyCollection(itemsLength);\n groupEle.classList[isEmptyCollection ? 'add' : 'remove']('e-ribbon-emptyCollection');\n }\n }\n };\n Ribbon.prototype.checkOverflowItems = function (isHidden, contentEle, isGroupOF, tabIndex, groupID) {\n var overflowDDB;\n var overflowtarget;\n if (isGroupOF) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hide-group') : overflowtarget.classList.remove('e-hide-group');\n }\n }\n else {\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hide-group') : grpContainer.classList.remove('e-hide-group');\n }\n }\n }\n }\n };\n /**\n * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model.\n * @returns {void}\n */\n Ribbon.prototype.updateTab = function (tab) {\n var tabId = tab.id;\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n if (groups && (contentEle.innerHTML !== '')) {\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabs[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n }\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_3 = groups; _i < groups_3.length; _i++) {\n var group = groups_3[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML === '') {\n // Check whether group is passed by the user and sets the updated values.\n if (tab.groups) {\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n if (this.selectedTab === index) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (tab.cssClass) {\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n tabEle.querySelector('#' + tabId + constants.HEADER_ID).innerText = ribbonTab.header;\n }\n }\n };\n /**\n * group - Gets the ribbon group to be updated. The id of the group is a required property. Other properties are optional.\n *\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @returns {void}\n */\n Ribbon.prototype.updateGroup = function (group) {\n var groupId = group.id;\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (group.cssClass) {\n if (itemProp.group.cssClass) {\n groupEle.classList.remove(itemProp.group.cssClass);\n if (groupContainer) {\n groupContainer.classList.remove(itemProp.group.cssClass);\n }\n }\n }\n // Check whether collections or orientation is passed by the user, and if it is, then remove the old values.\n if (group.collections || group.orientation) {\n if (itemProp.group.collections || itemProp.group.orientation) {\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n var collectionElements = groupEle.querySelectorAll('.e-ribbon-collection');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n collectionElements.forEach(function (collectionEle) { collectionEle.remove(); });\n if (group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n var removeCss = groupContent.classList.value.match(/(e-ribbon-[column|row]+)/g);\n if (removeCss) {\n removeClass([groupContent], removeCss);\n }\n }\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n }\n var ribbongroup = itemProp.group;\n ribbongroup.setProperties(group, true);\n ribbongroup.setProperties({ collections: this.checkID(ribbongroup.collections, 'collection', ribbongroup.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n // Check whether showLauncherIcon or orientation is passed by the user and sets the updated values.\n if (group.showLauncherIcon) {\n this.createLauncherIcon(ribbongroup.id, groupContainer, 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 (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 if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n 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 (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\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}\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 itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n var moduleName = this.getItemModuleName(itemProp.item);\n isUpdated = isDisabled ? !itemEle.classList.contains(constants.DISABLED_CSS) : 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 {\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.resizeHandler);\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.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 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 case 'backStageMenu':\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.updateBackStageMenu(this.backStageMenu);\n }\n var toolbarElement = this.tabObj['tbObj'];\n toolbarElement.refreshOverflow();\n break;\n case 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n case 'hideLayoutSwitcher':\n this.hideLayoutSwitcher ? this.removeExpandCollapse() : this.addExpandCollapse();\n break;\n }\n }\n };\n var Ribbon_1;\n __decorate([\n Property('Classic')\n ], Ribbon.prototype, \"activeLayout\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"cssClass\", void 0);\n __decorate([\n 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, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupOpen\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupClose\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n this.addFileMenuKeytip();\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.addFileMenuKeytip = function () {\n if (this.parent.fileMenu.keyTip) {\n this.parent.keyTipElements['filemenu'] = [];\n this.parent.keyTipElements['filemenu'].push({ id: this.ddbElement.id, type: 'filemenu', keyTip: this.parent.fileMenu.keyTip });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.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 }\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 : document.querySelector(backStageOptions.target);\n targetEle.appendChild(this.popupHTMLElement);\n }\n else {\n this.parent.element.appendChild(this.popupHTMLElement);\n }\n this.popupEle = new Popup(this.popupHTMLElement, {\n height: backStageOptions.height,\n width: backStageOptions.width,\n relateTo: backStageOptions.target || this.parent.element,\n enableRtl: this.parent.enableRtl\n });\n if (this.parent.enableRtl) {\n this.updatePopupPositionOnRtl(this.parent.enableRtl);\n }\n this.popupHTMLElement.onkeydown = function (e) { if (e.code === 'Escape') {\n _this.hideBackstage();\n } };\n this.hideBackstage();\n };\n RibbonBackstage.prototype.updatePopupPositionOnRtl = function (enableRtl) {\n var popupStyle = this.popupHTMLElement.style;\n if (enableRtl) {\n popupStyle.right = popupStyle.left;\n popupStyle.left = 'unset';\n }\n else {\n popupStyle.left = popupStyle.right;\n popupStyle.right = 'unset';\n }\n };\n RibbonBackstage.prototype.createBackstageMenu = function (menuOptions, isFooter) {\n var _this = this;\n var wrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_wrapper');\n if (!wrapperEle) {\n this.menuWrapper = this.parent.createElement('div', {\n id: this.parent.element.id + '_wrapper',\n className: constants.RIBBON_BACKSTAGE_MENU_WRAPPER\n });\n this.popupHTMLElement.appendChild(this.menuWrapper);\n }\n if (menuOptions.backButton.visible && !isFooter) {\n var closeBtnEle = this.parent.createElement('button', {\n id: this.parent.element.id + '_close',\n className: 'e-ribbon-close-btn'\n });\n this.closeBtn = new Button({\n content: menuOptions.backButton.text,\n iconCss: menuOptions.backButton.iconCss ? menuOptions.backButton.iconCss : constants.BACKSTAGE_CLOSE_ICON,\n enableRtl: this.parent.enableRtl\n }, closeBtnEle);\n this.menuWrapper.append(closeBtnEle);\n closeBtnEle.onclick = function () {\n _this.popupHTMLElement.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n _this.hideBackstage();\n _this.isBackButtonClicked = true;\n };\n }\n var itemsWrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_itemswrapper');\n if (!itemsWrapperEle) {\n this.itemsWrapperEle = this.parent.createElement('div', {\n id: this.parent.element.id + '_itemswrapper',\n className: constants.RIBBON_BACKSTAGE_ITEMS_WRAPPER\n });\n this.menuWrapper.append(this.itemsWrapperEle);\n }\n var ulFooterElem;\n if (isFooter) {\n ulFooterElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FOOTER_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(ulFooterElem);\n }\n else {\n this.ulMenuElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(this.ulMenuElem);\n }\n if (!isFooter) {\n this.menuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, this.ulMenuElem);\n }\n else {\n this.footerMenuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneFooterMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, ulFooterElem);\n }\n };\n RibbonBackstage.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.cloneFooterMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (!item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.createBackStageContent = function (itemId, content) {\n var templateName = 'backstageContent';\n this.clearTemplate([templateName]);\n if (!this.backstageContentEle) {\n this.backstageContentEle = this.parent.createElement('div', {\n id: itemId + constants.CONTENT_ID,\n className: constants.RIBBON_BACKSTAGE_CONTENT\n });\n }\n else {\n this.backstageContentEle.innerHTML = '';\n this.backstageContentEle.id = itemId + constants.CONTENT_ID;\n }\n var templateFunction = getTemplateFunction(content);\n append(templateFunction({}, this, templateName, 'backstageContent', this.parent.isStringTemplate), this.backstageContentEle);\n if (content) {\n this.popupHTMLElement.append(this.backstageContentEle);\n }\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.createBackStageTemplate = function (template) {\n var templateName = 'backstageTemplate';\n this.clearTemplate([templateName]);\n this.backstageTempEle = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID + '_template',\n className: constants.RIBBON_BACKSTAGE_TEMPLATE\n });\n var templateFunction = getTemplateFunction(template);\n append(templateFunction({}, this, templateName, 'backstageTemplate', this.parent.isStringTemplate), this.backstageTempEle);\n this.popupHTMLElement.append(this.backstageTempEle);\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.menuSelect = function (menuOptions, args) {\n for (var i = 0; i < menuOptions.items.length; i++) {\n var item = menuOptions.items[parseInt(i.toString(), 10)];\n if (item.text === args.item.text) {\n this.contentItem = item;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element, item: this.contentItem, isBackButton: this.isBackButtonClicked };\n if (this.contentItem.backStageItemClick) {\n this.contentItem.backStageItemClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.setCommonProperties = function (commonProp) {\n if (this.backstageButton) {\n this.backstageButton.setProperties(commonProp);\n if (this.popupEle) {\n this.popupEle.setProperties(commonProp);\n if (this.popupHTMLElement)\n this.updatePopupPositionOnRtl(commonProp.enableRtl);\n if (this.menuCtrl) {\n this.menuCtrl.setProperties(commonProp);\n if (this.closeBtn) {\n this.closeBtn.setProperties(commonProp);\n }\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties(commonProp);\n }\n }\n }\n };\n /**\n * Update Backstage menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage menu.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.updateBackStageMenu = function (backStageOptions) {\n if (backStageOptions.visible) {\n if (this.backstageButton) {\n if (backStageOptions.text) {\n this.backstageButton.setProperties({\n content: backStageOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.backstageButtonEle.offsetWidth + 'px');\n }\n if (this.popupEle) {\n this.popupEle.setProperties({\n height: backStageOptions.height,\n width: backStageOptions.width,\n target: backStageOptions.target || this.parent.element,\n });\n }\n if (backStageOptions.template) {\n if (this.backstageTempEle) {\n remove(this.backstageTempEle);\n this.backstageTempEle = null;\n }\n this.createBackStageTemplate(backStageOptions.template);\n }\n else {\n if (this.menuCtrl) {\n this.menuCtrl.setProperties({\n items: this.cloneMenuItem(backStageOptions.items)\n });\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties({\n items: this.cloneFooterMenuItem(backStageOptions.items)\n });\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n }\n }\n this.removeBackstageMenuTooltip();\n this.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 isAfter ? this.footerMenuCtrl.insertAfter(items, target, isUniqueId) : this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n else {\n isAfter ? this.menuCtrl.insertAfter(items, target, isUniqueId) : this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n var backStageOptions = this.parent.backStageMenu;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n for (var i_1 = 0; i_1 < backstageItems.length; i_1++) {\n var item1 = backstageItems[parseInt(i_1.toString(), 10)];\n if (item.text === item1.text) {\n item1.content = item.content;\n break;\n }\n }\n }\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Remove items from Backstage Menu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.removeBackstageItems = function (items, isUniqueId) {\n this.menuCtrl.removeItems(items, isUniqueId);\n this.footerMenuCtrl.removeItems(items, isUniqueId);\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Renders the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.showBackstage = function () {\n this.popupEle.show();\n };\n /**\n * Hides the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.hideBackstage = function () {\n if (this.popupEle.element.classList.contains(constants.RIBBON_BACKSTAGE_OPEN)) {\n this.popupEle.element.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n }\n this.popupEle.hide();\n };\n return RibbonBackstage;\n}(Component));\nexport { RibbonBackstage };\n","import * as 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) { return e.id === contextualTab.tabs[parseInt(index.toString(), 10)].id; })[0];\n this_1.parent.updateTab(tab);\n };\n var this_1 = this;\n for (var key in newProp.tabs) {\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 // eslint-disable-next-line\n keytipData = this.parent.keyTipElements[i][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;\n /* eslint-disable */\n 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 /* eslint-enable */\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.includes(\"_grpbtn\")) {\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 key === 'item' ? this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset) : this.createKeyTipElement((keytipData[parseInt(i.toString(), 10)].id), keytipData[parseInt(i.toString(), 10)].keyTip, key, xOffset, yOffset, false, true);\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 });\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 });\n keytipPopup.show();\n this.calculateKeyTipPosition(keyEle, keytipElement, type, yOffset, (isTab && isPopUpItem));\n this.parent.isKeytipOpen = true;\n }\n }\n };\n RibbonKeyTip.prototype.calculateKeyTipPosition = function (itemEle, keytipElement, type, yOffset, isTabOverflow) {\n if (isTabOverflow === void 0) { isTabOverflow = false; }\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 * @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) && !this.isKeytipPresent); j++) {\n var keytipData = this.parent.keyTipElements[parseInt(i.toString(), 10)][Object.keys(this.parent.keyTipElements[parseInt(i.toString(), 10)])[parseInt(j.toString(), 10)]];\n for (var k = 0; ((k < 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 _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).includes(\"_popupButton\")) {\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.includes(\"_launcher\") || keytipData[parseInt(k.toString(), 10)].id.includes(\"_sim_grp_overflow\") || keytipData[parseInt(k.toString(), 10)].id.includes(\"_overflow_dropdown\")) {\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 keytipData[parseInt(k.toString(), 10)].type === 'grpoverflow' ? this.createKeytip('grpoverflowpopup') : this.createKeytip('popupitem');\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 setTimeout(function () {\n itemEle_1.focus();\n }, 100);\n break;\n case 'gallery':\n var galleryEle = document.querySelector('#' + itemID);\n galleryEle.click();\n break;\n case 'template':\n var templateEle = document.querySelector('#' + itemID);\n templateEle.focus();\n break;\n case 'group-btn':\n var itemElement = document.querySelector('#' + itemID);\n if (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 RibbonKeyTip.prototype.commonItemsKeyTipPress = function (keyPress, key, isMethod) {\n var _this = this;\n /* eslint-disable */\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 /* eslint-enable */\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 /* eslint-disable */\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[this_1.parent.selectedTab]))[j];\n if (this_1.parent.keyTipElements[this_1.parent.selectedTab][keyText]) {\n var index = getIndex(this_1.parent.keyTipElements[this_1.parent.selectedTab][keyText], function (e) { return e.id + constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id; });\n /* eslint-enable */\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 }\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 < 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 * Shows the Keytip dynamically.\n *\n * @param {string} keyAction - Item for which the tooltip is to be shown.\n * @returns {void}\n */\n RibbonKeyTip.prototype.showKeyTips = function (keyAction) {\n if (this.parent.enableKeyTips) {\n if (keyAction) {\n this.keytipPress(keyAction, true);\n }\n else {\n this.createKeytip('tab');\n }\n }\n };\n /**\n * Hides the Keytip dynamically.\n *\n * @returns {void}\n */\n RibbonKeyTip.prototype.hideKeyTips = function () {\n this.removeKeytip();\n };\n return RibbonKeyTip;\n}());\nexport { RibbonKeyTip };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage, index.RibbonKeyTip, index.RibbonContextualTab, index.RibbonGallery);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","type","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","setCustomAttributes","attributes","key","elementClass","replace","trim","addClass","split","value","setAttribute","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonGalleryItem","RibbonGalleryGroup","RibbonGallerySettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RibbonContextualTabSettings","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","__assign","assign","t","s","n","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","isPrimary","isToggle","created","htmlAttributes","htmlAttr","onclick","clicked","addOverFlowEvents","overflowButton","buttonObj","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","insertBefore","firstChild","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","controlElements","slice","querySelectorAll","templateElements","concat","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","grpBtnIndex","itemsCount","eventArgs_1","switchGroupButton","containerEle","defaultSelectedBtn","itemID","groupButtonHeader","targetEle","isOverflowPopup","isIconOnly","children","destroyDropDown","updateGroupButtonSize","RibbonGallery","isAdded","galleryItemsIndex","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","paddingTop","paddingBottom","flexFlow","popupTemplate","iconEle","createGalleryTemplate","createGalleryPopupTemplate","itemCount","headerEle","setWrapperWidth","itemsWidth","isWidthApplied","galleryItemEle","offsetWidth","itemStyles","window","getComputedStyle","paddingWidth","parseFloat","paddingLeft","paddingRight","marginWidth","marginLeft","marginRight","checkAvailableHeight","selectedTab","activeContent","galleryWrapperItems","isHeight","galleryWrapperHeight","offsetHeight","itemsValues","marginTop","marginBottom","checkCollision","screenWidth","innerWidth","paddingStyles","popupContainerItems","forEach","isCollideOccurs","marginStyles","Math","abs","popupContainer","gallerypopupElement","body","relateTo","collision","X","Y","actionOnScroll","targetType","position","hide","switchGalleryItems","galleryIcons","galleryContainer","popupButton","groupIconCss","popupContainerEle_1","dropdown_1","setFoucsToFirstItem","popupEvents","formatUnit","galleryDDBEle","isInteracted","previousItem","currentItem","selctedGalleryItem","popupGalleryItem","galleryItem","selectingEventArgs","beforeSelect","selectedEventArgs","galleryPopupItems","isOpen","popupEventArgs","popupOpen","popupClose","show","buttonPosition","getBoundingClientRect","offsetX","left","top","showGalleryPopup","hideGalleryPopup","isDropdown","handleGalleryPopupNavigation","galleryPopupEle","code","templateName","templateFunction","isStringTemplate","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","keysPress","idIndex","initialPropsData","hiddenElements","keyTipElements","hiddenGroups","itemsModel","targetTabs","isAddRemove","isUpdateItems","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","canInjectColorPickerModule","canInjectGalleryModule","Gallery","backStageMenu","visible","fileMenu","menuItems","contextualTabs","enableKeyTips","getUniqueID","renderTabs","ribbonContextualTabModule","addContextualTabs","ribbonFileMenuModule","createFileMenu","ribbonBackstageModule","createBackStage","createHelpPaneTemplate","refreshOverflow","addTabOverflowKeyTip","isKeytipOpen","wireEvents","wireKeyboardEvent","currentControlIndex","resizeHandler","keytipActionHandler","mouseEventHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","galleryElements","ribbonControls","action","prevGroupId","prevGroupContainer","elem","checkOverflow","scrollModule","scrollEle","scrollStep","activePopup","getInstance","ribbonKeyTipModule","removeKeytip","isKeyTipPresent","keyPress","altKey","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","isContextual","isContextualTab","updateSelectedState","previousIndex","calculateHiddenElementsWidth","updateItem","splice","selectedContent","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","elements","createGroups","this_3","ribbonTab","ondblclick","btnId","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","isNewTab","destroyTabItems","innerText","_i","groups_1","_a","_b","_c","_d","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","_e","getItemModuleName","i_8","i_9","removeLauncherIcon","containerId","this_4","groupButtonID_1","galleryPopupBtn","clearOverflowResize","selectTab","tabId","showTab","showHideTab","hideTab","contextualTab_1","isTabHidden","this_5","index_1","enableTab","enableDisableTab","disableTab","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","getElementById","enableItem","disableItem","isUpdated","toggleAttribute","unwireEvents","refreshing","undefined","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","destroyMenu","removeFileMenuTooltip","removeFileMenuKeytip","insertAfter","enableItems","disableItems","setItem","refresh","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","createBackStageContent","addBackStageMenuTooltip","addBackStageMenuKeyTip","onClickEvent","backStageItems","HTMLElement","updatePopupPositionOnRtl","popupStyle","right","backButton","closeBtnEle","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","includes","isTab","isPopUpItem","splitBtnID","keyEle","isPopUpPresent","offsetParent","keytipElement","calculateKeyTipPosition","isTabOverflow","isKeytipPresent","toUpperCase","setTimeout","galleryID","clickItems","commonItemsKeyTipPress","isGroupItems","isKeyPressed","keytipData_1","keyText","showKeyTips","hideKeyTips","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage","index.RibbonKeyTip","index.RibbonContextualTab","index.RibbonGallery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-gallery-item.js","../../src/ribbon/models/ribbon-gallery-group.js","../../src/ribbon/models/ribbon-gallery-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/models/ribbon-contextual-tab-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/items/ribbon-gallery.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/ribbon/modules/ribbon-contextualtab.js","../../src/ribbon/modules/ribbon-keytip.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select, addClass } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @param {RibbonItemType} type - Gets the type of the item.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id, type) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if ((id && item.id === id) || (type && item.type === type)) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n/**\n * Sets the HTML attributes of an element\n *\n * @param {HTMLElement} element - The HTML element for which attributes are to be updated.\n * @param {commonProperties} attributes - An object containing key-value pairs of attributes to be updated.\n * @returns {void}\n * @hidden\n */\nexport function setCustomAttributes(element, attributes) {\n for (var key in attributes) {\n if (key === 'class') {\n var elementClass = attributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'style') {\n var prevStyles = element.getAttribute('style') || '';\n var value = \"\" + prevStyles + attributes[\"\" + key];\n element.setAttribute(\"\" + key, value);\n }\n else {\n element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the gallery as ribbon item.\n */\n RibbonItemType[\"Gallery\"] = \"Gallery\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n Property({})\n ], RibbonButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"clicked\", void 0);\n return RibbonButtonSettings;\n}(ChildProperty));\nexport { RibbonButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon checkbox item.\n */\nvar RibbonCheckBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonCheckBoxSettings, _super);\n function RibbonCheckBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of checkbox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCheckBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonCheckBoxSettings.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RibbonCheckBoxSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property({})\n ], RibbonCheckBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"label\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Palette')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Property({})\n ], RibbonColorPickerSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n Property({})\n ], RibbonComboBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"select\", void 0);\n return RibbonComboBoxSettings;\n}(ChildProperty));\nexport { RibbonComboBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon DropDownButton item.\n */\nvar RibbonDropDownSettings = /** @class */ (function (_super) {\n __extends(RibbonDropDownSettings, _super);\n function RibbonDropDownSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonDropDownSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonDropDownSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], RibbonDropDownSettings.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property({})\n ], RibbonDropDownSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"select\", void 0);\n return RibbonDropDownSettings;\n}(ChildProperty));\nexport { RibbonDropDownSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon SplitButton item.\n */\nvar RibbonSplitButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonSplitButtonSettings, _super);\n function RibbonSplitButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonSplitButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonSplitButtonSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"target\", void 0);\n __decorate([\n Property({})\n ], RibbonSplitButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of group button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroupButtonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"keyTip\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Property({})\n ], RibbonGroupButtonItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonSettings.prototype, \"header\", void 0);\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon gallery item.\n */\nvar RibbonGalleryItem = /** @class */ (function (_super) {\n __extends(RibbonGalleryItem, _super);\n function RibbonGalleryItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property({})\n ], RibbonGalleryItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonGalleryItem.prototype, \"disabled\", void 0);\n return RibbonGalleryItem;\n}(ChildProperty));\nexport { RibbonGalleryItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGalleryItem } from './ribbon-gallery-item';\n/**\n * Defines the ribbon gallery group.\n */\nvar RibbonGalleryGroup = /** @class */ (function (_super) {\n __extends(RibbonGalleryGroup, _super);\n function RibbonGalleryGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryItem)\n ], RibbonGalleryGroup.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"header\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemWidth\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGalleryGroup.prototype, \"itemHeight\", void 0);\n __decorate([\n Property('')\n ], RibbonGalleryGroup.prototype, \"cssClass\", void 0);\n return RibbonGalleryGroup;\n}(ChildProperty));\nexport { RibbonGalleryGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property, Event } from '@syncfusion/ej2-base';\nimport { RibbonGalleryGroup } from './ribbon-gallery-group';\n/**\n * Defines the ribbon gallery settings.\n */\nvar RibbonGallerySettings = /** @class */ (function (_super) {\n __extends(RibbonGallerySettings, _super);\n function RibbonGallerySettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], RibbonGalleryGroup)\n ], RibbonGallerySettings.prototype, \"groups\", void 0);\n __decorate([\n Property(3)\n ], RibbonGallerySettings.prototype, \"itemCount\", void 0);\n __decorate([\n Property(null)\n ], RibbonGallerySettings.prototype, \"selectedItemIndex\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('auto')\n ], RibbonGallerySettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], RibbonGallerySettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"popupClose\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"itemHover\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"beforeSelect\", void 0);\n __decorate([\n Event()\n ], RibbonGallerySettings.prototype, \"select\", void 0);\n return RibbonGallerySettings;\n}(ChildProperty));\nexport { RibbonGallerySettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\nimport { RibbonGallerySettings } from './ribbon-gallery-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"keyTip\", void 0);\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGallerySettings)\n ], RibbonItem.prototype, \"gallerySettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"launcherIconKeyTip\", void 0);\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"overflowHeader\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"keyTip\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"keyTip\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"keyTip\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\nimport { RibbonTab } from './ribbon-tab';\n/**\n * Defines the ribbon contextual tab.\n */\nvar RibbonContextualTabSettings = /** @class */ (function (_super) {\n __extends(RibbonContextualTabSettings, _super);\n function RibbonContextualTabSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of contextual tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonContextualTabSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], RibbonContextualTabSettings.prototype, \"isSelected\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], RibbonContextualTabSettings.prototype, \"tabs\", void 0);\n return RibbonContextualTabSettings;\n}(ChildProperty));\nexport { RibbonContextualTabSettings };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var RIBBON_KEYTIP = 'e-ribbon-keytip';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_CONTEXTUAL_TAB = 'e-ribbon-contextual-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_CONTENT = 'e-ribbon-group-button-content';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_KEYTIP_ID = '_keytip';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = __assign({}, btnSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\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 overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = {};\n if (checkBoxSettings.htmlAttributes) {\n htmlAttr = __assign({}, checkBoxSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.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: htmlAttr,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement, setCustomAttributes } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: function (e) {\n colorPickerSettings.value = e.value.toString();\n if (colorPickerSettings.change) {\n colorPickerSettings.change.call(_this, e);\n }\n },\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n if (colorPickerSettings.htmlAttributes) {\n var htmlAttr = __assign({}, colorPickerSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(inputEle, htmlAttr);\n }\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-colorpicker-label',\n id: item.id + '_label',\n innerHTML: colorPickerSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerSettings = item.colorPickerSettings;\n if (colorPickerSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { 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 var htmlAttr = {};\n if (comboBoxSettings.htmlAttributes) {\n htmlAttr = __assign({}, comboBoxSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n }\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n htmlAttributes: htmlAttr,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label && this.parent.activeLayout === 'Simplified') {\n var label = this.parent.createElement('div', {\n className: 'e-ribbon-combobox-label',\n id: item.id + '_label',\n innerHTML: comboBoxSettings.label\n });\n itemEle.insertBefore(label, itemEle.firstChild);\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var comboBoxSettings = item.comboBoxSettings;\n if (comboBoxSettings.label) {\n var label = itemEle.querySelector('#' + item.id + '_label');\n if (label) {\n label.remove();\n }\n }\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip, setCustomAttributes } from '../base/index';\nimport { DROPDOWN_ID, ITEM_VERTICAL_CENTER, OVERFLOW_ID, RIBBON_CONTROL, RIBBON_GROUP_OVERFLOW_DDB, RIBBON_POPUP_CONTROL, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonDropDown = /** @class */ (function () {\n function RibbonDropDown(parent) {\n this.parent = parent;\n }\n RibbonDropDown.prototype.getModuleName = function () {\n return 'ribbonDropDown';\n };\n RibbonDropDown.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createDropDown = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var dropDownSettings = item.dropDownSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (dropDownSettings.cssClass ?\n dropDownSettings.cssClass : '')).trim();\n new DropDownButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: dropDownSettings.closeActionEvents,\n content: item.activeSize === RibbonItemSize.Small ? '' : dropDownSettings.content,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: dropDownSettings.iconCss,\n items: dropDownSettings.items,\n target: dropDownSettings.target,\n createPopupOnClick: dropDownSettings.createPopupOnClick,\n beforeClose: function (e) {\n if (dropDownSettings.beforeClose) {\n dropDownSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: dropDownSettings.beforeItemRender,\n beforeOpen: dropDownSettings.beforeOpen,\n close: function (e) {\n if (dropDownSettings.close) {\n dropDownSettings.close.call(_this, e);\n }\n },\n created: dropDownSettings.created,\n open: dropDownSettings.open,\n select: dropDownSettings.select\n }).appendTo(buttonEle);\n if (dropDownSettings.htmlAttributes) {\n var htmlAttr = __assign({}, dropDownSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var controlElements = Array.prototype.slice.call(target.querySelectorAll('.e-control'));\n var templateElements = Array.prototype.slice.call(target.querySelectorAll('.e-ribbon-template'));\n var items = controlElements.concat(templateElements);\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template'))) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonSplitButton = /** @class */ (function () {\n function RibbonSplitButton(parent) {\n this.parent = parent;\n }\n RibbonSplitButton.prototype.getModuleName = function () {\n return 'ribbonSplitButton';\n };\n RibbonSplitButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates SplitButton.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.createSplitButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var splitButtonSettings = item.splitButtonSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (splitButtonSettings.cssClass ?\n splitButtonSettings.cssClass : '')).trim();\n var splitbutton = new SplitButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: splitButtonSettings.closeActionEvents,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: splitButtonSettings.iconCss,\n items: splitButtonSettings.items,\n target: splitButtonSettings.target,\n beforeClose: function (e) {\n if (splitButtonSettings.beforeClose) {\n splitButtonSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: splitButtonSettings.beforeItemRender,\n beforeOpen: splitButtonSettings.beforeOpen,\n close: function () {\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.close) {\n splitButtonSettings.close.call(_this);\n }\n },\n created: splitButtonSettings.created,\n open: function () {\n splitbutton['wrapper'].classList.add(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.open) {\n splitButtonSettings.open.call(_this);\n }\n },\n select: splitButtonSettings.select,\n click: function (e) {\n if (splitButtonSettings.click) {\n splitButtonSettings.click.call(_this, e);\n }\n }\n }, buttonEle);\n if (splitButtonSettings.htmlAttributes) {\n var htmlAttr = __assign({}, splitButtonSettings.htmlAttributes);\n if (htmlAttr.id) {\n delete htmlAttr.id;\n }\n setCustomAttributes(buttonEle, htmlAttr);\n }\n var dropdownEle = buttonEle.parentElement.querySelector('.e-dropdown-btn');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n this.setContent(item, splitbutton);\n var wrapper = splitbutton['wrapper'];\n EventHandler.add(wrapper, 'mouseenter', function () { wrapper.classList.add(RIBBON_HOVER); }, this);\n EventHandler.add(wrapper, 'mouseleave', function () { wrapper.classList.remove(RIBBON_HOVER); }, this);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n splitButtonEle.setAttribute('data-control', item.type.toString());\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n splitbutton.cssClass = splitbutton.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n splitbutton.dataBind();\n var dropdownEle = splitButtonEle.parentElement.querySelector('.e-dropdown-btn');\n var ddbId = dropdownEle.getAttribute('id');\n var popupEle = document.querySelector('#' + ddbId + '-popup');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n popupEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.preventDefault();\n splitbutton['wrapper'].classList.remove('e-ribbon-open');\n popupEle.querySelector('.e-focused').click();\n }\n };\n var target;\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n overflowButton.toggle();\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n var cssClass = splitbutton.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n splitbutton.cssClass = cssClass.join(SPACE);\n splitbutton.dataBind();\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n };\n };\n RibbonSplitButton.prototype.setContent = function (item, control) {\n control['primaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Medium) ? item.splitButtonSettings.content : '' });\n control['secondaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Large) ? item.splitButtonSettings.content : '' });\n };\n RibbonSplitButton.prototype.getSplitButtonObj = function (controlId) {\n var splitButtonEle = getItemElement(this.parent, controlId);\n return getComponent(splitButtonEle, SplitButton);\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the SplitButton items.\n * @param {string} text - Gets the text of the splitbutton item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonSplitButton.prototype.addItems = function (controlId, Items, text) {\n this.getSplitButtonObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonSplitButton.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getSplitButtonObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonSplitButton.prototype.toggle = function (controlId) {\n this.getSplitButtonObj(controlId).toggle();\n };\n /**\n * Updates the splitbutton.\n *\n * @param {RibbonSplitButtonSettingsModel} prop - Gets the splitbutton property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonSplitButton.prototype.updateSplitButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.splitButtonSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, SplitButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.open;\n delete prop.click;\n delete prop.close;\n delete prop.beforeClose;\n control.setProperties(prop);\n if (prop.content) {\n this.setContent(itemProp.item, control);\n }\n };\n /**\n * Updated SplitButton size\n *\n * @param {HTMLElement} element - Gets the splibutton element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.updateSplitButtonSize = function (element, item) {\n var control = getComponent(element, SplitButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n this.setContent(item, control);\n };\n return RibbonSplitButton;\n}());\nexport { RibbonSplitButton };\n","import { EventHandler, getComponent, remove } from '@syncfusion/ej2-base';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { RibbonGroupButtonSelection, RibbonItemSize } from '../base/interface';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { createTooltip, isTooltipPresent, setCustomAttributes } from '../base/utils';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGroupButton = /** @class */ (function () {\n function RibbonGroupButton(parent) {\n this.parent = parent;\n this.isSelected = false;\n }\n RibbonGroupButton.prototype.getModuleName = function () {\n return 'ribbonGroupButton';\n };\n RibbonGroupButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Group Button\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.createGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n this.count = 0;\n var btnContainerEle = this.parent.createElement('div', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID,\n className: 'e-btn-group'\n });\n itemElement.appendChild(btnContainerEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if ((groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss)) {\n var groupButtonEle = this.parent.createElement('button', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID + i,\n className: constants.RIBBON_GROUP_BUTTON\n });\n btnContainerEle.appendChild(groupButtonEle);\n new Button({\n iconCss: groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss,\n disabled: item.disabled,\n enableRtl: this.parent.enableRtl,\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left'\n }, groupButtonEle);\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes) {\n setCustomAttributes(groupButtonEle, groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes);\n }\n 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 }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n _this.handleFocusState(item, itemElement);\n };\n btnContainerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(btnContainerEle, this.parent);\n this.isSelected = false;\n }\n };\n RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {\n var previousItems = [];\n var selectingItems = [];\n var selectedItems = [];\n var groupButtonEle;\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 groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].\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 groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n var dropdown = new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n if (groupBtnSettings.header) {\n var dropDownPopup = dropdown.dropDown;\n this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);\n }\n buttonEle.onclick = buttonEle.onkeydown = function () {\n _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 this.grpBtnIndex = 0;\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 var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP, content: groupBtnSettings.header ? groupBtnSettings.header : '' });\n var targetEle = dropdown.target;\n if (targetEle.children.length) {\n for (var i = 0; i < targetEle.children.length; i++) {\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {\n isIconOnly = false;\n break;\n }\n }\n if (isIconOnly) {\n targetEle.classList.add('e-icon-btn');\n }\n }\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.toggle();\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n if (targetEle.classList.contains('e-icon-btn')) {\n targetEle.classList.remove('e-icon-btn');\n }\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE), content: '' });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\n","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 galleryEle.style.paddingTop = '0px';\n galleryEle.style.paddingBottom = '0px';\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 /**\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 if (popup.width !== 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\n });\n }\n var isCollideOccurs = false;\n for (var i = 0; i < popupContainerItems.length; i++) {\n var itemsWidth = 0;\n for (var j = 0; j < popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item').length; j++) {\n var popupItemStyles = window.getComputedStyle(popupContainerItems[parseInt(i.toString(), 10)].querySelectorAll('.e-ribbon-gallery-item')[parseInt(j.toString(), 10)]);\n if (popupItemStyles) {\n marginWidth = parseFloat(popupItemStyles.marginLeft) + parseFloat(popupItemStyles.marginRight);\n if (!(isNullOrUndefined(marginWidth))) {\n itemsWidth += marginWidth;\n }\n }\n itemsWidth += Math.round(parseFloat(popupItemStyles.width));\n if (((screenWidth <= itemsWidth) && popup.width === 'auto') || ((popup.width !== 'auto') && (screenWidth <= parseInt(popup.width.toString(), 10)) && (screenWidth <= itemsWidth))) {\n popupEle.style.width = ((itemsWidth + Math.abs(paddingWidth - marginWidth)) - Math.round(parseFloat(popupItemStyles.width))) + 'px';\n isCollideOccurs = true;\n break;\n }\n }\n if (isCollideOccurs) {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'wrap';\n });\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n break;\n }\n }\n if (!isCollideOccurs) {\n if (popup.width === 'auto') {\n popupContainerItems.forEach(function (ele) {\n ele.style.flexFlow = 'nowrap';\n });\n popupEle.style.width = 'auto';\n }\n else {\n popupEle.style.width = (popup.width).toString();\n }\n if (popup.height === 'auto') {\n this.setGalleryPopupHeight(popupEle, parseFloat(paddingStyles.height), parseFloat(paddingStyles.top));\n }\n }\n }\n };\n RibbonGallery.prototype.setGalleryPopupHeight = function (popupEle, popupHeight, popupTop) {\n if (window.innerHeight < popupHeight || window.innerHeight < Math.round(popupHeight + popupTop)) {\n popupEle.style.height = (window.innerHeight - popupTop) + 'px';\n }\n else {\n popupEle.style.height = 'auto';\n }\n };\n RibbonGallery.prototype.createPopup = function (item, buttonEle) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-ribbon-popup-container',\n id: item.id + '_popupContainer'\n });\n this.renderGalleryItems(item.gallerySettings, true, item.id, popupContainer);\n var gallerypopupElement = this.parent.createElement('div', {\n className: 'e-ribbon-gallery-popup',\n id: item.id + '_galleryPopup'\n });\n document.body.append(gallerypopupElement);\n var galleryPopup = new Popup(gallerypopupElement, {\n relateTo: buttonEle,\n content: popupContainer,\n collision: { X: 'fit', Y: 'flip' },\n actionOnScroll: 'hide',\n targetType: 'relative',\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n width: item.gallerySettings.popupWidth,\n height: item.gallerySettings.popupHeight\n });\n galleryPopup.hide();\n };\n /**\n * Updates gallery in mode switching.\n *\n * @param {string} activeLayout - Gets the current active layout.\n * @param {string} itemID - Gets the ribbon item id.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.switchGalleryItems = function (activeLayout, itemID) {\n var itemEle = this.parent.element.querySelector('#' + itemID + constants.CONTAINER_ID);\n var itemProp = getItem(this.parent.tabs, itemID);\n if (itemEle) {\n var galleryIcons = itemEle.querySelectorAll('.e-ribbon-gallery-icons');\n var galleryContainer = itemEle.querySelectorAll('.e-ribbon-gallery-container');\n if (galleryIcons.length) {\n for (var i = 0; i < galleryIcons.length; i++) {\n if (activeLayout === 'Simplified') {\n galleryIcons[parseInt(i.toString(), 10)].classList.add('e-hidden');\n }\n else {\n galleryIcons[parseInt(i.toString(), 10)].classList.remove('e-hidden');\n }\n }\n }\n if (galleryContainer.length && itemProp) {\n for (var n = 0; n < itemProp.item.gallerySettings.groups.length; n++) {\n for (var i = 0; i < galleryContainer.length; i++) {\n if (itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight && itemProp.item.gallerySettings.groups[parseInt(n.toString(), 10)].itemHeight !== 'auto') {\n if (itemID + '_galleryContainer' + n === galleryContainer[parseInt(i.toString(), 10)].id) {\n if (activeLayout === 'Simplified') {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'nowrap';\n }\n else {\n galleryContainer[parseInt(i.toString(), 10)].style.flexFlow = 'wrap';\n }\n }\n }\n }\n }\n }\n var activeContent = this.parent.tabObj.element.querySelector('#' + this.parent.tabs[this.parent.selectedTab].id + constants.CONTENT_ID);\n if (activeContent) {\n this.checkAvailableHeight(activeContent);\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n if (itemEle.closest('.e-ribbon-overflow-target')) {\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\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 = getComponent(popupEle, Popup);\n var popupContainerEle_1 = document.querySelector('#' + item.id + '_galleryPopup .e-ribbon-popup-container');\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n content: content,\n target: popupContainerEle_1,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-gallery-dropdown',\n disabled: item.disabled,\n open: function () {\n _this.setFoucsToFirstItem(popupContainerEle_1, true, item.id);\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);\n if (popup.width !== 'auto') {\n dropdown.dropDown.width = formatUnit(popup.width);\n }\n if (popup.height !== 'auto') {\n dropdown.dropDown.height = formatUnit(popup.height);\n dropdown.dropDown.element.style.height = (popup.height).toString();\n }\n }\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGallery.prototype.removeOverFlowEvents = function (item, itemEle) {\n var popupButton = itemEle.querySelector('#' + item.id + '_popupButton');\n if (popupButton) {\n popupButton.classList.remove('e-hidden');\n }\n itemEle.querySelector('.e-ribbon-gallery-wrapper').classList.remove('e-hidden');\n itemEle.querySelectorAll('.e-ribbon-gallery-container').forEach(function (ele) {\n ele.classList.remove('e-hidden');\n });\n var galleryDDBEle = document.querySelector('#' + item.id);\n if (galleryDDBEle) {\n var popupEle = document.querySelector('#' + item.id + '_galleryPopup');\n var dropdown = getComponent(galleryDDBEle, DropDownButton);\n popupEle.appendChild(dropdown.target);\n dropdown.destroy();\n remove(galleryDDBEle);\n }\n };\n RibbonGallery.prototype.setActiveState = function (galleryEle, gallerySettings, itemID, isInteracted, event, isPopup) {\n var previousItem;\n var currentItem;\n var itemEle = document.querySelector('#' + itemID + constants.CONTAINER_ID);\n var selctedGalleryItem = Array.prototype.slice.call(itemEle.querySelectorAll('.e-ribbon-gallery-selected'));\n var popupEle = document.querySelector('#' + itemID + '_popupContainer');\n var popupGalleryItem = Array.prototype.slice.call(popupEle.querySelectorAll('.e-ribbon-gallery-selected'));\n if (popupGalleryItem.length) {\n selctedGalleryItem = selctedGalleryItem.concat(popupGalleryItem);\n }\n for (var i = 0; i < gallerySettings.groups.length; i++) {\n for (var j = 0; j < gallerySettings.groups[parseInt(i.toString(), 10)].items.length; j++) {\n if (selctedGalleryItem[0].id === itemID + '_galleryContainer' + i + '_gallery' + j) {\n previousItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n if (galleryEle.id === (isPopup ? 'popup_' : '') + itemID + '_galleryContainer' + i + '_gallery' + j) {\n currentItem = gallerySettings.groups[parseInt(i.toString(), 10)].items[parseInt(j.toString(), 10)];\n }\n }\n }\n var galleryItem = document.getElementById(galleryEle.id);\n var galleryItemPopup;\n var selectingEventArgs = { cancel: false, name: 'beforeSelect', previousItem: previousItem, currentItem: currentItem, isInteracted: isInteracted, event: event };\n if (gallerySettings.beforeSelect) {\n gallerySettings.beforeSelect.call(this, selectingEventArgs);\n }\n if (selectingEventArgs.cancel) {\n return;\n }\n else {\n for (var i = 0; i < selctedGalleryItem.length; i++) {\n selctedGalleryItem[parseInt(i.toString(), 10)].classList.remove('e-ribbon-gallery-selected');\n }\n if (!galleryItem.id.startsWith('popup_')) {\n galleryItemPopup = document.getElementById('popup_' + galleryEle.id);\n }\n else if (document.getElementById(galleryItem.id.slice(6))) {\n galleryItemPopup = document.getElementById(galleryItem.id.slice(6));\n }\n if (galleryItemPopup) {\n galleryItemPopup.classList.add('e-ribbon-gallery-selected');\n }\n galleryItem.classList.add('e-ribbon-gallery-selected');\n var selectedEventArgs = { previousItem: previousItem, currentItem: currentItem, name: 'select', isInteracted: isInteracted, event: event };\n var galleryPopupItems = document.querySelectorAll('#' + itemID + '_popupContainer .e-ribbon-gallery-item');\n for (var i = 0; i < galleryPopupItems.length; i++) {\n if (galleryPopupItems[parseInt(i.toString(), 10)].id === galleryEle.id) {\n gallerySettings.selectedItemIndex = i;\n break;\n }\n }\n if (gallerySettings.select) {\n gallerySettings.select.call(this, selectedEventArgs);\n }\n }\n };\n RibbonGallery.prototype.popupEvents = function (args, gallerySettings, name, isOpen) {\n var popupEventArgs = { cancel: false, event: args, name: name };\n if (isOpen && gallerySettings.popupOpen) {\n gallerySettings.popupOpen.call(this, popupEventArgs);\n }\n else if (!isOpen && gallerySettings.popupClose) {\n gallerySettings.popupClose.call(this, popupEventArgs);\n }\n if (popupEventArgs.cancel) {\n return true;\n }\n return false;\n };\n RibbonGallery.prototype.showPopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupOpen', true);\n if (isCancelled) {\n return;\n }\n popup.show();\n this.checkCollision(popup, popupEle);\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.add('e-gallery-button-active');\n var buttonPosition = buttonEle.getBoundingClientRect();\n if (popupEle.offsetWidth > buttonPosition.left) {\n this.checkCollision(popup, popupEle, buttonPosition.left);\n }\n var offsetX = Math.abs((popupEle.offsetWidth - buttonPosition.left)) + buttonEle.offsetWidth;\n popupEle.style.left = offsetX + 'px';\n popupEle.style.top = popupEle.getBoundingClientRect().top + 2 + 'px';\n this.setFoucsToFirstItem(popupEle, false, itemID, popup, gallerySettings);\n };\n RibbonGallery.prototype.hidePopup = function (popup, popupEle, args, gallerySettings, itemID) {\n var isCancelled = this.popupEvents(args, gallerySettings, 'popupClose', false);\n if (isCancelled) {\n return;\n }\n popup.hide();\n var buttonEle = document.querySelector('#' + itemID + '_popupButton');\n buttonEle.classList.remove('e-gallery-button-active');\n };\n /**\n * Shows a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.showGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.showPopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n /**\n * Hides a specific gallery popup in the ribbon.\n *\n * @param {string} id - Gets the ribbon item id.\n * @returns {void}\n */\n RibbonGallery.prototype.hideGalleryPopup = function (id) {\n var itemProp = getItem(this.parent.tabs, id);\n var popupEle = document.querySelector('#' + id + '_galleryPopup');\n var popup = getComponent(popupEle, Popup);\n this.hidePopup(popup, popupEle, null, itemProp.item.gallerySettings, id);\n };\n RibbonGallery.prototype.setFoucsToFirstItem = function (popupEle, isDropdown, itemID, popup, gallerySettings) {\n var _this = this;\n popupEle.querySelectorAll('.e-ribbon-gallery-item')[0].focus();\n this.galleryItemsIndex = 0;\n popupEle.onkeydown = function (e) {\n _this.handleGalleryPopupNavigation(e, popupEle, isDropdown, itemID, popup, gallerySettings);\n };\n };\n RibbonGallery.prototype.handleGalleryPopupNavigation = function (e, popupEle, isDropdown, itemID, popup, gallerySettings) {\n var galleryPopupEle = popupEle.querySelectorAll('.e-ribbon-gallery-item');\n if (galleryPopupEle) {\n if (e.key === 'Home') {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'End') {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n this.galleryItemsIndex++;\n if (this.galleryItemsIndex !== galleryPopupEle.length) {\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = 0;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n if (this.galleryItemsIndex !== 0) {\n this.galleryItemsIndex--;\n if (galleryPopupEle && (galleryPopupEle[this.galleryItemsIndex])) {\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else {\n this.galleryItemsIndex = galleryPopupEle.length - 1;\n galleryPopupEle[this.galleryItemsIndex].focus();\n }\n }\n else if ((e.key === 'Enter' || e.code === 'Space') || (e.key === 'Escape' && !isDropdown)) {\n this.hidePopup(popup, popupEle, e, gallerySettings, itemID);\n }\n }\n };\n RibbonGallery.prototype.createGalleryTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-template');\n var templateName = 'ribbon' + id + 'galleryTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.template);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n RibbonGallery.prototype.createGalleryPopupTemplate = function (galleryItemEle, gallerySettings, id, items) {\n galleryItemEle.classList.add('e-ribbon-gallery-popup-template');\n var templateName = 'ribbon' + id + 'galleryPopupTemplate';\n this.parent['clearTemplate']([templateName]);\n var templateFunction = getTemplateFunction(gallerySettings.popupTemplate);\n if (items.disabled) {\n galleryItemEle.classList.add('e-disabled');\n }\n if (items.cssClass) {\n galleryItemEle.classList.add(items.cssClass);\n }\n append(templateFunction({ items: items }, this, templateName, (id + 'galleryPopupTemplate'), this.parent.isStringTemplate, null, null, this.parent), galleryItemEle);\n };\n return RibbonGallery;\n}());\nexport { RibbonGallery };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } 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 { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.keysPress = '';\n this.idIndex = 0;\n this.tooltipData = [];\n this.initialPropsData = {};\n this.hiddenElements = {};\n this.keyTipElements = {};\n this.hiddenGroups = [];\n this.itemsModel = [];\n this.targetTabs = {};\n this.isAddRemove = false;\n this.isUpdateItems = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this], name: 'RibbonButton' }, { member: 'ribbonDropDown', args: [this], name: 'RibbonDropDown' }, { member: 'ribbonSplitButton', args: [this], name: 'RibbonSplitButton' }, { member: 'ribbonCheckBox', args: [this], name: 'RibbonCheckBox' }, { member: 'ribbonComboBox', args: [this], name: 'RibbonComboBox' }, { member: 'ribbonGroupButton', args: [this], name: 'RibbonGroupButton' });\n var canInjectColorPickerModule = getItem(this.tabs, null, RibbonItemType.ColorPicker);\n var canInjectGalleryModule = getItem(this.tabs, null, RibbonItemType.Gallery);\n if (canInjectColorPickerModule) {\n modules.push({ member: 'ribbonColorPicker', args: [this], name: 'RibbonColorPicker' });\n }\n if (canInjectGalleryModule) {\n modules.push({ member: 'ribbonGallery', args: [this], name: 'RibbonGallery' });\n }\n if (this.backStageMenu.visible || this.backStageMenu.items.length) {\n modules.push({ member: 'ribbonBackstage', args: [this], name: 'RibbonBackstage' });\n }\n if (this.fileMenu.visible || this.fileMenu.menuItems.length) {\n modules.push({ member: 'ribbonFileMenu', args: [this], name: 'RibbonFileMenu' });\n }\n if (this.contextualTabs.length) {\n modules.push({ member: 'ribbonContextualTab', args: [this], name: 'RibbonContextualTab' });\n }\n if (this.enableKeyTips) {\n modules.push({ member: 'ribbonKeyTip', args: [this], name: 'RibbonKeyTip' });\n }\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n 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.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\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 this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n if (this.activeLayout === 'Simplified') {\n var activePopup = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active, .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active');\n if (activePopup.length) {\n for (var i = 0; i < activePopup.length; i++) {\n var dropDownBtn = getInstance(activePopup[parseInt(i.toString(), 10)], DropDownButton);\n dropDownBtn.toggle();\n }\n }\n }\n 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 () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n 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 () {\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 };\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 if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var itemProp = getGroup(this.tabs, groupId);\n var ofGroupContainer = itemProp.group.overflowHeader ?\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 var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeOpen: function (args) {\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupOpen', eventArgs, function (ribbonArgs) {\n if (ribbonArgs.cancel) {\n args.cancel = true;\n }\n });\n },\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n var groupButtonEle = args.event ? closest(args.event.target, '.e-ribbon-group-button-overflow-popup') : null;\n var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };\n _this.trigger('overflowPopupClose', eventArgs, function (ribbonArgs) {\n if (ele || ribbonArgs.cancel || groupButtonEle) {\n args.cancel = true;\n }\n });\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n 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 () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n 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 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 }\n else {\n var galleryEle = ele.querySelectorAll('.e-ribbon-gallery-item');\n var galleryPopupBtn = ele.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 = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @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 = getIndex(this.tabs, function (e) { return e.id === 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 (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 if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n 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 (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\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 itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n 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 {\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.resizeHandler);\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.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, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupOpen\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"overflowPopupClose\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n this.addFileMenuKeytip();\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.addFileMenuKeytip = function () {\n if (this.parent.fileMenu.keyTip) {\n this.parent.keyTipElements['filemenu'] = [];\n this.parent.keyTipElements['filemenu'].push({ id: this.ddbElement.id, type: 'filemenu', keyTip: this.parent.fileMenu.keyTip });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.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 });\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 });\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 setTimeout(function () {\n itemEle_1.focus();\n }, 100);\n break;\n }\n case 'gallery': {\n var galleryEle = document.querySelector('#' + itemID);\n galleryEle.click();\n break;\n }\n case 'template': {\n var templateEle = document.querySelector('#' + itemID);\n templateEle.focus();\n break;\n }\n case 'group-btn': {\n var itemElement = document.querySelector('#' + itemID);\n if (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.commonItemsKeyTipPress = function (keyPress, key, isMethod) {\n var _this = this;\n if (this.parent.keyTipElements[\"\" + key]) {\n var isKeyPressed = false;\n var keytipData = this.parent.keyTipElements[\"\" + key];\n var keyEle = void 0;\n var keytipElement = void 0;\n if (keytipData) {\n if (key === 'backstageMenu') {\n for (var i = 0; i < Object.keys(this.parent.keyTipElements[\"\" + key]).length; i++) {\n if (keytipData[parseInt(i.toString(), 10)].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[parseInt(i.toString(), 10)].id);\n keytipElement = document.querySelector('#' + keyEle.id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n if (isMethod && document.querySelector('.e-ribbon-backstage-popup').classList.contains('e-popup-close')) {\n this.parent.tabObj.element.querySelector('.e-ribbon-backstage').click();\n }\n break;\n }\n }\n }\n }\n else {\n if (keytipData[0] && keytipData[0].keyTip === keyPress.toUpperCase()) {\n keyEle = document.querySelector('#' + keytipData[0].id);\n keytipElement = document.querySelector('#' + keytipData[0].id + constants.RIBBON_KEYTIP_ID);\n if (keytipElement || isMethod) {\n isKeyPressed = true;\n }\n }\n }\n }\n if (isKeyPressed) {\n this.removeKeytip();\n this.isKeytipPresent = true;\n if (keyEle) {\n keyEle.click();\n if (key === 'backstage') {\n this.createKeytip('backstageMenu');\n }\n else if (key === 'overflowbtn') {\n this.isKeytipPopupOpen = true;\n this.createKeytip('popupitem');\n }\n else if (key === 'taboverflow') {\n setTimeout(function () {\n for (var i = 0; i < Object.keys(_this.parent.keyTipElements).length; i++) {\n if (_this.parent.keyTipElements[parseInt(i.toString(), 10)]) {\n var keytipData_1 = _this.parent.keyTipElements[parseInt(i.toString(), 10)]['tab'];\n _this.createKeyTipElement((keytipData_1[0].id), keytipData_1[0].keyTip, 'tab', 'center', 'bottom', true, true);\n }\n }\n }, 600);\n }\n }\n }\n }\n };\n /**\n * Removes the keytip.\n *\n * @param {string} key - Gets the keyboard key element.\n * @returns {void}\n * @hidden\n */\n RibbonKeyTip.prototype.removeKeytip = function (key) {\n var _this = this;\n var keyTipItems = document.querySelectorAll('.e-ribbon-keytip');\n var isKeyTipExist = false;\n this.parent.keysPress = '';\n var _loop_1 = function (i) {\n var keyTipItem = keyTipItems[parseInt(i.toString(), 10)];\n if (key === 'Escape' && this_1.parent.keyTipElements && this_1.parent.keyTipElements[this_1.parent.selectedTab]) {\n for (var j = 0; j < Object.keys(this_1.parent.keyTipElements[this_1.parent.selectedTab]).length; j++) {\n var keyText = (Object.keys(this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)]))[parseInt(j.toString(), 10)];\n var keyTipElement = this_1.parent.keyTipElements[parseInt(this_1.parent.selectedTab.toString(), 10)];\n var index = getIndex(keyTipElement[\"\" + keyText], function (e) {\n return e.id +\n constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id;\n });\n if (index !== -1) {\n if ((keyText === 'item' && !(this_1.isKeytipPopupOpen)) || (keyText === 'grpoverflow' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n break;\n }\n else if (this_1.isKeytipPopupOpen) {\n if ((keyText === 'popupitem' && this_1.parent.activeLayout === 'Simplified') || (keyText === 'grpoverflowpopup' && this_1.parent.activeLayout === 'Classic')) {\n this_1.createKeytip('item');\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n }\n for (var n = 0; n < Object.keys(this_1.parent.keyTipElements).length; n++) {\n if (this_1.parent.keyTipElements[parseInt(n.toString(), 10)]) {\n var keytipData = this_1.parent.keyTipElements[parseInt(n.toString(), 10)]['tab'];\n for (var j = 0; j < Object.keys(keytipData).length; j++) {\n if (keyTipItem.id === keytipData[0].id + constants.RIBBON_KEYTIP_ID) {\n if (document.querySelector('#' + keytipData[0].id + constants.HEADER_ID).closest('.e-toolbar-pop')) {\n var tabOverflow = this_1.parent.tabObj.element.querySelector('.e-nav-active');\n tabOverflow.click();\n setTimeout(function () {\n _this.createKeytip('tab');\n }, 600);\n key = '';\n isKeyTipExist = true;\n break;\n }\n }\n }\n if (isKeyTipExist) {\n break;\n }\n }\n }\n if (!isKeyTipExist && this_1.parent.keyTipElements['backstageMenu']) {\n var index = getIndex(this_1.parent.keyTipElements['backstageMenu'], function (e) { return e.id + constants.RIBBON_KEYTIP_ID === keyTipItems[parseInt(i.toString(), 10)].id; });\n if (index !== -1) {\n this_1.createKeytip('tab');\n key = '';\n isKeyTipExist = true;\n }\n }\n }\n if (keyTipItem) {\n remove(keyTipItem);\n }\n };\n var this_1 = this;\n for (var i = 0; i < keyTipItems.length; i++) {\n _loop_1(i);\n }\n this.isKeytipPopupOpen = false;\n if (!isKeyTipExist) {\n this.parent.isKeytipOpen = false;\n }\n };\n /**\n * Shows the Keytip dynamically.\n *\n * @param {string} keyAction - Item for which the tooltip is to be shown.\n * @returns {void}\n */\n RibbonKeyTip.prototype.showKeyTips = function (keyAction) {\n if (this.parent.enableKeyTips) {\n if (keyAction) {\n this.keytipPress(keyAction, true);\n }\n else {\n this.createKeytip('tab');\n }\n }\n };\n /**\n * Hides the Keytip dynamically.\n *\n * @returns {void}\n */\n RibbonKeyTip.prototype.hideKeyTips = function () {\n this.removeKeytip();\n };\n return RibbonKeyTip;\n}());\nexport { RibbonKeyTip };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage, index.RibbonKeyTip, index.RibbonContextualTab, index.RibbonGallery);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","type","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","setCustomAttributes","attributes","key","elementClass","replace","trim","addClass","split","value","setAttribute","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonGalleryItem","RibbonGalleryGroup","RibbonGallerySettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RibbonContextualTabSettings","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","__assign","assign","t","s","n","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","isPrimary","isToggle","created","htmlAttributes","htmlAttr","onclick","clicked","addOverFlowEvents","overflowButton","buttonObj","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","insertBefore","firstChild","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","controlElements","slice","querySelectorAll","templateElements","concat","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","dropDownPopup","addGroupButtonHeader","handleFocusState","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","grpBtnIndex","itemsCount","eventArgs_1","switchGroupButton","containerEle","defaultSelectedBtn","itemID","groupButtonHeader","targetEle","isOverflowPopup","isIconOnly","children","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","paddingTop","paddingBottom","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","checkAvailableHeight","activeContent","galleryWrapperItems","simplifiedItemsCount","isHeight","galleryWrapperHeight","offsetHeight","itemsValues","marginTop","marginBottom","checkCollision","offsetValue","windowWidth","innerWidth","screenWidth","Math","abs","paddingStyles","popupContainerItems","forEach","isCollideOccurs","popupItemStyles","round","setGalleryPopupHeight","top","popupTop","innerHeight","popupContainer","gallerypopupElement","body","relateTo","collision","X","Y","actionOnScroll","targetType","position","hide","switchGalleryItems","galleryIcons","galleryContainer","selectedTab","popupButton","groupIconCss","popupContainerEle_1","setFoucsToFirstItem","popupEvents","formatUnit","galleryDDBEle","isInteracted","previousItem","currentItem","selctedGalleryItem","popupGalleryItem","galleryItemPopup","galleryItem","getElementById","selectingEventArgs","beforeSelect","startsWith","selectedEventArgs","galleryPopupItems","isOpen","popupEventArgs","popupOpen","popupClose","show","buttonPosition","getBoundingClientRect","left","offsetX","showGalleryPopup","hideGalleryPopup","isDropdown","handleGalleryPopupNavigation","galleryPopupEle","code","templateName","templateFunction","isStringTemplate","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","keysPress","idIndex","initialPropsData","hiddenElements","keyTipElements","hiddenGroups","itemsModel","targetTabs","isAddRemove","isUpdateItems","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","canInjectColorPickerModule","canInjectGalleryModule","Gallery","backStageMenu","visible","fileMenu","menuItems","contextualTabs","enableKeyTips","getUniqueID","renderTabs","ribbonContextualTabModule","addContextualTabs","ribbonFileMenuModule","createFileMenu","ribbonBackstageModule","createBackStage","createHelpPaneTemplate","refreshOverflow","addTabOverflowKeyTip","isKeytipOpen","wireEvents","wireKeyboardEvent","currentControlIndex","resizeHandler","keytipActionHandler","mouseEventHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","galleryElements","ribbonControls","action","prevGroupId","prevGroupContainer","elem","checkOverflow","scrollModule","scrollEle","scrollStep","activePopup","getInstance","ribbonKeyTipModule","removeKeytip","isKeyTipPresent","keyPress","altKey","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","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","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","destroyMenu","removeFileMenuTooltip","removeFileMenuKeytip","insertAfter","enableItems","disableItems","setItem","refresh","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","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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"}
|