@syncfusion/ej2-ribbon 23.1.38 → 23.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/ej2-ribbon.umd.min.js +2 -2
  3. package/dist/ej2-ribbon.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-ribbon.es2015.js +67 -1
  5. package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
  6. package/dist/es6/ej2-ribbon.es5.js +67 -1
  7. package/dist/es6/ej2-ribbon.es5.js.map +1 -1
  8. package/dist/global/ej2-ribbon.min.js +2 -2
  9. package/dist/global/ej2-ribbon.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +12 -12
  12. package/src/ribbon/base/ribbon.js +2 -0
  13. package/src/ribbon/base/utils.d.ts +11 -0
  14. package/src/ribbon/base/utils.js +27 -1
  15. package/src/ribbon/items/ribbon-button.js +4 -1
  16. package/src/ribbon/items/ribbon-checkbox.js +1 -0
  17. package/src/ribbon/items/ribbon-colorpicker.js +4 -1
  18. package/src/ribbon/items/ribbon-combobox.js +1 -0
  19. package/src/ribbon/items/ribbon-dropdown.js +4 -1
  20. package/src/ribbon/items/ribbon-groupbutton.js +4 -1
  21. package/src/ribbon/items/ribbon-splitbutton.js +4 -1
  22. package/src/ribbon/models/ribbon-button-settings-model.d.ts +7 -0
  23. package/src/ribbon/models/ribbon-button-settings.d.ts +8 -0
  24. package/src/ribbon/models/ribbon-button-settings.js +3 -0
  25. package/src/ribbon/models/ribbon-checkbox-settings-model.d.ts +7 -0
  26. package/src/ribbon/models/ribbon-checkbox-settings.d.ts +8 -0
  27. package/src/ribbon/models/ribbon-checkbox-settings.js +3 -0
  28. package/src/ribbon/models/ribbon-colorpicker-settings-model.d.ts +7 -0
  29. package/src/ribbon/models/ribbon-colorpicker-settings.d.ts +8 -0
  30. package/src/ribbon/models/ribbon-colorpicker-settings.js +3 -0
  31. package/src/ribbon/models/ribbon-combobox-settings-model.d.ts +7 -0
  32. package/src/ribbon/models/ribbon-combobox-settings.d.ts +8 -0
  33. package/src/ribbon/models/ribbon-combobox-settings.js +3 -0
  34. package/src/ribbon/models/ribbon-dropdown-settings-model.d.ts +7 -0
  35. package/src/ribbon/models/ribbon-dropdown-settings.d.ts +8 -0
  36. package/src/ribbon/models/ribbon-dropdown-settings.js +3 -0
  37. package/src/ribbon/models/ribbon-group-button-item-model.d.ts +7 -0
  38. package/src/ribbon/models/ribbon-group-button-item.d.ts +8 -0
  39. package/src/ribbon/models/ribbon-group-button-item.js +3 -0
  40. package/src/ribbon/models/ribbon-splitbutton-settings-model.d.ts +7 -0
  41. package/src/ribbon/models/ribbon-splitbutton-settings.d.ts +8 -0
  42. package/src/ribbon/models/ribbon-splitbutton-settings.js +3 -0
  43. package/styles/bootstrap4.css +13 -2
  44. package/styles/ribbon/bootstrap4.css +13 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if (item.id === id) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n 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 Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Picker')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n 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 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 Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RibbonItemSize } 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 buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n buttonEle.setAttribute('aria-label', btnSettings.content);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n buttonEle.setAttribute('data-control', item.type.toString());\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({ cssClass: buttonObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCheckBox = /** @class */ (function () {\n function RibbonCheckBox(parent) {\n this.parent = parent;\n }\n RibbonCheckBox.prototype.getModuleName = function () {\n return 'ribbonCheckBox';\n };\n RibbonCheckBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the check box.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.createCheckBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var checkBoxSettings = item.checkBoxSettings;\n new CheckBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n checked: checkBoxSettings.checked,\n cssClass: (RIBBON_CONTROL + SPACE + (checkBoxSettings.cssClass ? checkBoxSettings.cssClass : '')).trim(),\n label: checkBoxSettings.label,\n labelPosition: checkBoxSettings.labelPosition,\n disabled: item.disabled,\n created: checkBoxSettings.created,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: colorPickerSettings.change,\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonComboBox = /** @class */ (function () {\n function RibbonComboBox(parent) {\n this.parent = parent;\n }\n RibbonComboBox.prototype.getModuleName = function () {\n return 'ribbonComboBox';\n };\n RibbonComboBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the combobox.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.createComboBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var comboBoxSettings = item.comboBoxSettings;\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","import { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip } 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 };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var items = target.querySelectorAll('.e-control');\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && e.target.classList.contains('e-control')) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize } 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 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 } 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 var buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n btnContainerEle.classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n else {\n btnContainerEle.classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].selected) {\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n buttonEle.classList.add('e-active');\n }\n else {\n if (this.count < 1) {\n buttonEle.classList.add('e-active');\n this.count++;\n }\n }\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n btnContainerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(btnContainerEle, this.parent);\n this.isSelected = false;\n }\n };\n RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {\n var previousItems = [], selectingItems = [], selectedItems = [];\n var groupButtonEle;\n var dropdown;\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n previousItems.push(grpBtnSettings.items[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (!(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n selectingItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs = {\n cancel: false, previousItems: previousItems, selectingItems: selectingItems\n };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n else {\n if (grpBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_MULTIPLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.remove('e-active');\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active') && this.parent.activeLayout === 'Simplified') {\n this.grpBtnIndex = itemIndex;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n var activeEleCount = 0;\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active') && this.parent.activeLayout === 'Simplified' && n !== itemIndex) {\n this.isSelected = true;\n activeEleCount++;\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = null;\n var itemsCount = 0;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n containerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(containerEle, this.parent);\n }\n else {\n var groupButtonEle = itemElement.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n itemElement.appendChild(dropdown.target);\n if (groupButtonEle) {\n dropdown.destroy();\n remove(groupButtonEle);\n }\n }\n };\n RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n var isOverflowPopup = false;\n if (this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n isOverflowPopup = true;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var groupBtnSettings = item.groupButtonSettings;\n if ((e.key === 'ArrowRight' && !isOverflowPopup) || (e.key === 'ArrowDown' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowDown' && isOverflowPopup)) {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n else if ((e.key === 'ArrowLeft' && !isOverflowPopup) || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP });\n var targetEle = dropdown.target;\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.element.focus();\n dropdown.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE) });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu } from '../models/index';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';\nimport { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonGroupButton } from '../items/index';\nimport { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';\nimport * as constants from './constant';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.idIndex = 0;\n this.tooltipData = [];\n this.isAddRemove = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this] }, { member: 'ribbonDropDown', args: [this] }, { member: 'ribbonSplitButton', args: [this] }, { member: 'ribbonCheckBox', args: [this] }, { member: 'ribbonColorPicker', args: [this] }, { member: 'ribbonComboBox', args: [this] }, { member: 'ribbonGroupButton', args: [this] }, { member: 'ribbonFileMenu', args: [this] }, { member: 'ribbonBackstage', args: [this] });\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n addClass([this.element], ['e-rbn'].concat((this.cssClass ? this.cssClass.split(constants.SPACE) : [])));\n if (this.enableRtl) {\n this.element.classList.add(constants.RTL_CSS);\n }\n this.element.style.width = formatUnit(this.width);\n this.renderTabs();\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.createFileMenu(this.fileMenu);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.createBackStage(this.backStageMenu);\n }\n this.createHelpPaneTemplate();\n var toolbar = this.tabObj['tbObj'];\n toolbar.refreshOverflow();\n createTooltip(this.element, this);\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n };\n Ribbon.prototype.wireKeyboardEvent = function () {\n this.keyboardModuleRibbon = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n Ribbon.prototype.keyActionHandler = function (e) {\n if (((e.key === 'Tab') && (!(e.target.classList.contains('e-tab-wrap')) && !(e.target.classList.contains('e-combobox'))))) {\n e.preventDefault();\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var ribbonControls = activeContent.querySelectorAll('.e-control');\n var comboBoxElements = activeContent.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < ribbonControls.length; i++) {\n if (ribbonControls[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (ribbonControls[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.currentControlIndex = i;\n }\n }\n }\n }\n if (this.currentControlIndex === 0) {\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-collapse-btn') || e.target.classList.contains('e-ribbon-last-item') ||\n e.target.classList.contains('e-ribbon-first-item') || e.target.classList.contains('e-ribbon-group-of-btn') ||\n e.target.classList.contains('e-ribbon-overall-of-btn')) {\n switch (e.action) {\n case 'rightarrow':\n this.handleNavigation(e, !this.enableRtl, ribbonControls);\n break;\n case 'leftarrow':\n this.handleNavigation(e, this.enableRtl, ribbonControls);\n break;\n case 'tab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex < ribbonControls.length - 1) {\n this.currentControlIndex++;\n }\n }\n break;\n case 'shiftTab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex > 0) {\n this.currentControlIndex--;\n }\n }\n else {\n this.tabObj.element.querySelector('.e-toolbar-item.e-active').querySelector('.e-tab-wrap').focus();\n this.currentControlIndex = 0;\n }\n }\n }\n };\n Ribbon.prototype.handleNavigation = function (e, enableRtl, ribbonControls) {\n var groupContainer;\n var prevGroupId;\n if (enableRtl) {\n if (this.currentControlIndex < ribbonControls.length - 1 && ribbonControls[this.currentControlIndex + 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex++;\n }\n }\n else {\n if (this.currentControlIndex > 0 && ribbonControls[this.currentControlIndex - 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex--;\n }\n }\n if ((!enableRtl && (this.currentControlIndex > 0)) || (enableRtl && (this.currentControlIndex < ribbonControls.length - 1))) {\n if (!e.target.classList.contains('e-combobox') && e.target.classList.contains('e-control') && !e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n this.currentControlIndex++;\n }\n else {\n var prevGroupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (prevGroupContainer) {\n prevGroupId = prevGroupContainer.getAttribute('id');\n }\n this.currentControlIndex--;\n }\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n if (((enableRtl && this.currentControlIndex === ribbonControls.length - 1) ||\n (!enableRtl && this.currentControlIndex === 0))) {\n if (ribbonControls[this.currentControlIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n enableRtl ? this.currentControlIndex++ : this.currentControlIndex--;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (this.activeLayout === 'Classic') {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (enableRtl) {\n var launcherIconEle = void 0;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n var items = groupContainer.querySelectorAll('.e-ribbon-item');\n items[items.length - 1].querySelector('.e-control').classList.add('e-ribbon-last-item');\n }\n }\n else {\n if (groupContainer) {\n var groupContainerId = groupContainer.getAttribute('id');\n if (prevGroupId !== groupContainerId) {\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n ribbonControls[parseInt((this.currentControlIndex + 1).toString(), 10)].classList.add('e-ribbon-first-item');\n }\n }\n }\n }\n }\n else {\n if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-first-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-first-item');\n }\n else if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n }\n }\n else {\n if (this.activeLayout === 'Classic') {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n if (this.activeLayout === 'Simplified') {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if (enableRtl && (overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n }\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n else {\n this.currentControlIndex--;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (!enableRtl && e.target.classList.contains('e-ribbon-first-item')) {\n groupContainer = ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n if (enableRtl) {\n this.currentControlIndex++;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.currentControlIndex;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-collapse-btn')) {\n if (enableRtl) {\n this.currentControlIndex = 0;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n else {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if ((overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex--;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n }\n if (this.activeLayout === 'Simplified' && e.target.classList.contains('e-ribbon-overall-of-btn')) {\n if (enableRtl) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n };\n Ribbon.prototype.resizeHandler = function () {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n };\n Ribbon.prototype.renderTabs = function () {\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal = this.checkID(this.tabsInternal, 'tab', this.element.id);\n this.setProperties({ tabs: this.tabsInternal }, true);\n var tabEle = this.createElement('div', {\n id: this.element.id + constants.TAB_ID\n });\n this.element.appendChild(tabEle);\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n this.tabObj = new Tab({\n cssClass: constants.RIBBON_TAB,\n selectedItem: this.selectedTab,\n overflowMode: 'Popup',\n width: this.width,\n items: tabItems,\n enableRtl: this.enableRtl,\n created: this.tabCreated.bind(this),\n selected: this.ribbonTabSelected.bind(this),\n selecting: this.ribbonTabSelecting.bind(this)\n });\n this.tabObj.appendTo(tabEle);\n //Set the width value as \"0px\" with unit for proper calculation.\n this.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, '0px');\n this.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n var toolbar = getComponent(toolbarEle, Toolbar);\n toolbar.setProperties({ width: 'calc(100% - var(--fileMenuWidth) - var(--helpTemplateWidth))' });\n this.element.classList[this.isMinimized ? 'add' : 'remove'](constants.RIBBON_MINIMIZE);\n };\n Ribbon.prototype.minimize = function (val) {\n var _this = this;\n if (val === this.isMinimized) {\n return;\n }\n var eventArgs = { cancel: false };\n this.trigger(val ? 'ribbonCollapsing' : 'ribbonExpanding', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.setProperties({ isMinimized: val }, true);\n _this.element.classList.toggle(constants.RIBBON_MINIMIZE, _this.isMinimized);\n //to overwrite inline styles from hscroll\n _this.tabObj.element.querySelector('.e-content').style.display = val ? 'none' : 'block';\n if (!val) {\n _this.refreshLayout();\n }\n });\n };\n Ribbon.prototype.toggleLayout = function () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n this.isAddRemove = false;\n var selectedTabId = e.selectedItem.getAttribute('data-id');\n var selectedIndex = getIndex(this.tabs, (function (tab) { return (tab.id === selectedTabId); }));\n selectedIndex = selectedIndex === -1 ? this.selectedTab : selectedIndex;\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.checkOverflow(selectedIndex, e.selectedContent.firstChild);\n if (this.activeLayout === 'Simplified' && this.overflowDDB) {\n var overflowTarget = this.overflowDDB.target;\n var ofTabContainer = overflowTarget.querySelector('.' + constants.RIBBON_TAB_ACTIVE);\n if (ofTabContainer) {\n ofTabContainer.classList.remove(constants.RIBBON_TAB_ACTIVE);\n }\n var activeTab = overflowTarget.querySelector('#' + selectedTabId + constants.OVERFLOW_ID);\n if (activeTab) {\n activeTab.classList.add(constants.RIBBON_TAB_ACTIVE);\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n }\n else {\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n this.trigger('tabSelected', eventArgs);\n };\n Ribbon.prototype.checkOverflow = function (tabIndex, activeContent) {\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n var isOverFlow = tabContent.offsetWidth < activeContent.offsetWidth;\n if (isOverFlow && !this.scrollModule) {\n if (this.activeLayout === 'Classic') {\n // Defines whether the shrinking is breaked due to insufficient space.\n var isBreak = false;\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, true);\n if (!isBreak && (tabContent.offsetWidth < activeContent.offsetWidth)) {\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, false);\n }\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createOverflowDropdown(tabIndex, tabContent, activeContent);\n }\n }\n else {\n this.checkSimplifiedItemShrinking(tabIndex, tabContent, activeContent);\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createSimplfiedOverflow(tabContent, activeContent, tabIndex);\n }\n }\n //Adds Scroll if the tabwidth is less the content width even after adding overflow dropdown.\n if ((tabContent.offsetWidth < activeContent.offsetWidth) && (!this.scrollModule)) {\n this.scrollModule = new HScroll({\n enableRtl: this.enableRtl\n }, this.tabObj.element.querySelector('.' + constants.TAB_CONTENT));\n }\n }\n else if (!isOverFlow) {\n this.destroyScroll();\n if (this.activeLayout === 'Classic') {\n var isBreak = false;\n isBreak = this.removeOverflowDropdown(tabContent, activeContent, false, tabIndex);\n //Check for expanding small items to medium items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, true);\n }\n //Check for expanding medium items to large items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, false);\n }\n }\n else {\n this.removeSimplfiedOverflow(tabContent, activeContent, tabIndex);\n if (tabContent.offsetWidth > activeContent.offsetWidth) {\n this.checkSimplifiedItemExpanding(tabIndex, tabContent, activeContent);\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemShrinking = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Medium) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n itemContainer.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemExpanding = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth > activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth > activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Small) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var valString = itemContainer.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (tabContent.offsetWidth > value)) {\n itemContainer.removeAttribute('data-medium-width');\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.createSimplfiedOverflow = function (tabContent, activeContent, tabIndex) {\n var orderedGroups = this.getGroupResizeOrder(true, tabIndex);\n for (var i = 0; ((i < orderedGroups.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = group.collections.length; ((j >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); j--) {\n var collection = group.collections[parseInt((j - 1).toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n var itemContainer = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n itemContainer.setAttribute('data-simplified-width', activeContent.offsetWidth.toString());\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemContainer, groupContainer, true);\n if (item.activeSize === RibbonItemSize.Small) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, true);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n };\n Ribbon.prototype.updatePopupItems = function (item, itemEle, isGroupOF, isMenu) {\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.GroupButton) ? DropDownButton : SplitButton);\n var dropDownPopup = dropdown.dropDown;\n // popup is on right if (isGroupOF && isMenu)\n // The position is reversed if RTL is enabled.\n // isRight = ((isGroupOF && isMenu) && !this.enableRtl ) || (!(isGroupOF && isMenu) && this.enableRtl) ==> (isGroupOF && isMenu) !== this.enableRtl\n var isLeft = (isGroupOF && isMenu) === this.enableRtl;\n 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 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 for (var i = 0; ((i < orderedGroups.length) && flag); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (group.enableGroupOverflow) {\n var overflowDDBEle = tabContent.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n else {\n overflowDDB = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n for (var j = 0; ((j < group.collections.length) && flag); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n // eslint-disable-next-line max-len\n for (var k = 0; ((k < collection.items.length) && flag && !isClear && (tabContent.offsetWidth > activeContent.offsetWidth)); k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemContainer = void 0;\n if (overflowtarget) {\n itemContainer = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n var width = parseInt(itemContainer.getAttribute('data-simplified-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle_1 = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle_1.append(itemContainer);\n this.removeOverflowEvent(item, itemContainer);\n if (item.allowedSizes & RibbonItemSize.Small) {\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemContainer.querySelector('#' + item.id), item);\n }\n }\n }\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var itemEle = groupEle.querySelector('.' + constants.RIBBON_ITEM);\n if (groupEle.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n else {\n var ofGroupContainer = overflowtarget.querySelector('#' + group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = overflowtarget.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n }\n }\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.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {\n var overflowButton;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var isDisabledGroup = contentEle.querySelector('#' + groupId);\n if (isGroupOF) {\n var overflowDDB = groupContainer.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (!overflowDDB) {\n overflowButton = this.addOverflowButton(groupId + constants.GROUPOF_BUTTON_ID);\n overflowButton.element.classList.add(constants.RIBBON_GROUP_OF_BUTTON);\n groupContainer.appendChild(overflowButton.element);\n }\n else {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n var overflowBtnTarget = overflowButton.target;\n if (isDisabledGroup && isDisabledGroup.classList.contains('e-disabled')) {\n overflowBtnTarget.classList.add('e-disabled');\n }\n isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))\n : overflowBtnTarget.append(itemEle);\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID);\n this.tabObj.element.insertBefore(this.overflowDDB.element, this.collapseButton);\n this.overflowDDB.element.classList.add(constants.RIBBON_OVERALL_OF_BUTTON);\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n else {\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);\n if (!ofGroupContainer) {\n ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n if (isDisabledGroup && isDisabledGroup.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n ofTabContainer.append(ofGroupContainer);\n }\n isResize ? ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM)) : ofGroupContainer.append(itemEle);\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n };\n Ribbon.prototype.addOverflowEvents = function (item, itemEle, overflowButton) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'GroupButton':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n ofGroupContainer.append(itemEle);\n ofTabContainer.append(ofGroupContainer);\n if (tabIndex === this.selectedTab) {\n ofTabContainer.classList.add(constants.RIBBON_TAB_ACTIVE);\n }\n };\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 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 Ribbon.prototype.createOverflowDropdown = function (tabIndex, tabContent, activeContent) {\n var collapseOrder = this.getGroupResizeOrder(true, tabIndex);\n if (collapseOrder.length === 0) {\n return;\n }\n var _loop_1 = function (i) {\n var group = collapseOrder[parseInt(i.toString(), 10)];\n var groupEle = this_1.tabObj.element.querySelector('#' + group.id);\n groupEle.setAttribute('data-expanded-width', activeContent.offsetWidth.toString());\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupOverFlow = this_1.createElement('div', {\n className: constants.RIBBON_GROUP_OVERFLOW + constants.SPACE + constants.RIBBON_LARGE_ITEM,\n id: group.id + constants.OVERFLOW_ID + constants.CONTAINER_ID\n });\n groupEle.insertBefore(groupOverFlow, groupContainer);\n var groupIndex = getIndex(this_1.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n var tab = this_1.tabs[parseInt(tabIndex.toString(), 10)];\n //Expanding the items in the group to their original expanded state\n this_1.checkSmallToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n this_1.checkMediumToLarge(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n var dropdown = this_1.ribbonDropDownModule.createOverFlowDropDown(group.id, group.header, group.groupIconCss, groupContainer, groupOverFlow, this_1.enableRtl);\n this_1.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: true }, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupContainer.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_1.handleContentSize(itemEle);\n this_1.addOverflowEvents(item, itemEle, dropdown);\n }\n }\n }\n };\n var this_1 = this;\n for (var i = 0; ((i < collapseOrder.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n _loop_1(i);\n }\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.removeOverflowDropdown = function (tabContent, activeContent, isClear, tabIndex) {\n if (isClear === void 0) { isClear = false; }\n var expandOrder = this.getGroupResizeOrder(false, tabIndex);\n if (expandOrder.length === 0) {\n return false;\n }\n var _loop_2 = function (i) {\n var group = expandOrder[parseInt(i.toString(), 10)];\n var groupEle = this_2.tabObj.element.querySelector('#' + group.id);\n if (!groupEle) {\n return \"break\";\n } //to handle the rerendering of tabcontrol when a ribbon tab is added/removed\n var width = parseInt(groupEle.getAttribute('data-expanded-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n return { value: true };\n }\n this_2.removeDropdown(group.id);\n var groupIndex = getIndex(this_2.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n this_2.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: false }, true);\n var tab = this_2.tabs[parseInt(tabIndex.toString(), 10)];\n //Shrinking the items in the group to their previous shrinked state (before moving to dropdown)\n this_2.checkLargeToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n this_2.checkMediumToSmall(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_2.handleContentSize(itemEle, true);\n this_2.removeOverflowEvent(item, itemEle);\n }\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < expandOrder.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n return false;\n };\n Ribbon.prototype.removeDropdown = function (groupId) {\n var dropdownElement = this.tabObj.element.querySelector('#' + groupId + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n if (dropdownElement) {\n var groupOverFlow = dropdownElement.parentElement;\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n remove(groupOverFlow);\n }\n };\n Ribbon.prototype.getGroupResizeOrder = function (isCollapse, tabIndex) {\n var _this = this;\n var groups = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n groups = groups.filter(function (e) {\n // (isUndefined(e.isCollapsible) || e.isCollapsible) => check whethe rhte item is collapsible\n // if a isCollapsed property is undefined, then it is considered collapsible and included in collapsible list\n // ((isCollapse && !e.isCollapsed)||(!isCollapse && e.isCollapsed)) => isCollapse !== e.isCollapsed\n return (_this.activeLayout === 'Classic') ? (isUndefined(e.isCollapsible) || e.isCollapsible) && ((isCollapse &&\n isUndefined(e.isCollapsed)) || (!isUndefined(e.isCollapsed) && (isCollapse !== e.isCollapsed))) : true;\n });\n //sort the collapsible groups based on the priority\n groups.sort(function (a, b) { return a.priority - b.priority; });\n //reverse the sorted array to return the array in descending order while collapsing.\n return isCollapse ? groups.reverse() : groups;\n };\n Ribbon.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Ribbon.prototype.clearOverflowDropDown = function (index) {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(index.toString(), 10)].id + constants.CONTENT_ID);\n if (!activeContent) {\n return;\n }\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n this.removeSimplfiedOverflow(activeContent, tabContent, index, true);\n }\n else {\n this.removeOverflowDropdown(activeContent, tabContent, true, index);\n }\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem.getAttribute('data-id');\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var previousIndex = getIndex(this.tabs, (function (tab) { return (tab.id === previousTabId); }));\n nextIndex = nextIndex === -1 ? this.selectedTab : nextIndex;\n var eventArgs = {\n cancel: e.cancel, isInteracted: e.isInteracted, previousIndex: previousIndex, selectedIndex: nextIndex\n };\n this.trigger('tabSelecting', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.destroyScroll();\n if (!_this.isAddRemove && (previousIndex !== -1)) {\n _this.clearOverflowDropDown(previousIndex);\n }\n var selectedTabContent = _this.tabObj.items[parseInt(nextIndex.toString(), 10)].content;\n if ((!selectedTabContent.querySelector('.' + constants.RIBBON_GROUP)) && (_this.tabs[parseInt(nextIndex.toString(), 10)].groups.length !== 0)) {\n var elements = _this.createGroups(_this.tabs[parseInt(nextIndex.toString(), 10)].groups, nextIndex);\n append(elements, selectedTabContent);\n }\n });\n };\n Ribbon.prototype.createTabItems = function (tabs) {\n var _this = this;\n var tabItems = [];\n for (var i = 0; i < tabs.length; i++) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n header.onclick = function () { _this.minimize(false); };\n header.ondblclick = function () { _this.minimize(true); };\n var tab = { header: { text: header }, id: ribbonTab.id, cssClass: ribbonTab.cssClass };\n var content = this.createElement('div', {\n className: tab.cssClass,\n id: ribbonTab.id + constants.CONTENT_ID\n });\n content.classList.add(constants.RIBBON_TAB_ITEM);\n tab.content = content;\n tabItems.push(tab);\n }\n return tabItems;\n };\n Ribbon.prototype.renderInitialTab = function (index) {\n var elements = this.createGroups(this.tabs[parseInt(index.toString(), 10)].groups, index);\n var content = this.tabObj.items[parseInt(index.toString(), 10)].content;\n append(elements, content);\n if (this.activeLayout === 'Simplified') {\n this.element.classList.add(constants.RIBBON_SIMPLIFIED_MODE);\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId) {\n var _this = this;\n var overflowButton = this.createElement('button', {\n id: btnId\n });\n var overflowTarget = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_TARGET,\n attrs: { 'tabindex': '0' }\n });\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n if (ele) {\n args.cancel = true;\n }\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n var isGroupOf;\n overflowButton.onkeydown = overflowButton.onclick = function () { _this.itemIndex = -1; isGroupOf = overflowButton.classList.contains('e-ribbon-overall-of-btn') ? false : true; };\n overflowTarget.onkeydown = function (e) { return (_this.upDownKeyHandler(e, overflowTarget, isGroupOf), _this); };\n return overflowDDB;\n };\n Ribbon.prototype.upDownKeyHandler = function (e, target, isGroupOf) {\n var items;\n if (isGroupOf) {\n items = target.getElementsByClassName('e-ribbon-item');\n }\n else {\n var currentList = target.querySelector('.e-ribbon-of-tab.e-ribbon-active');\n items = currentList.getElementsByClassName('e-ribbon-item');\n }\n var comboBoxEle = items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-control').classList.contains('e-combobox') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;\n var ribbonItem;\n if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {\n if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {\n if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {\n this.itemIndex = 0;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n if (comboBoxEle && e.key === 'Tab') {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {\n this.itemIndex++;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n }\n }\n else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n if (comboBoxEle === null || (e.key === 'Tab')) {\n if (!this.itemIndex || this.itemIndex === -1) {\n this.itemIndex = items.length - 1;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {\n this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n }\n }\n }\n target.setAttribute('index', this.itemIndex.toString());\n }\n var currentItemIndex = parseInt(target.getAttribute('index'), 10);\n var itemType = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').getAttribute('data-control') : null;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {\n if (itemType === 'ColorPicker') {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-split-colorpicker').focus();\n }\n else {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n if (e.key === ' ' && (itemType === 'CheckBox')) {\n var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n var checkBox = getComponent(checkBoxEle, CheckBox);\n this.itemIndex = -1;\n checkBox.click();\n }\n }\n if (((itemType === 'SplitButton') && (e.key === 'ArrowRight' || e.key === 'ArrowLeft'))) {\n if (e.key === 'ArrowRight') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n if (e.key === 'ArrowLeft') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n }\n if (e.key === 'Enter') {\n this.itemIndex = -1;\n }\n };\n Ribbon.prototype.findDisabledItem = function (ribbonItem, items, isIncrease) {\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (isIncrease) {\n if (this.itemIndex === items.length - 1 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = -1;\n }\n }\n else {\n if (this.itemIndex === 0 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = items.length;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isIncrease ? this.itemIndex++ : this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n };\n Ribbon.prototype.removeOverflowButton = function (overflowDDB) {\n if (overflowDDB) {\n var btnEle = overflowDDB.element;\n destroyTooltip(overflowDDB.target);\n overflowDDB.destroy();\n btnEle.remove();\n }\n };\n Ribbon.prototype.removeOverflowEvent = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createGroupContainer = function (groupId, groupHeader) {\n var ofGroupContainer = this.createElement('div', {\n className: constants.RIBBON_OF_GROUP_CONTAINER,\n id: groupId + constants.CONTAINER_ID\n });\n var ofGroupHeader = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_HEADER,\n id: groupId + constants.HEADER_ID,\n innerHTML: groupHeader\n });\n ofGroupContainer.append(ofGroupHeader);\n return ofGroupContainer;\n };\n Ribbon.prototype.addExpandCollapse = function () {\n var _this = this;\n this.collapseButton = this.createElement('span', {\n className: constants.RIBBON_COLLAPSE_BUTTON + constants.SPACE + constants.EXPAND_COLLAPSE_ICON,\n id: this.tabObj.element.id + constants.COLLAPSE_BUTTON_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Layout Switcher', 'role': 'button' }\n });\n this.collapseButton.onclick = function () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n };\n Ribbon.prototype.removeExpandCollapse = function () {\n var _this = this;\n var index = getIndex(this.tooltipData, function (e) { return e.id === _this.collapseButton.id; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n this.element.classList.remove(constants.RIBBON_COLLAPSIBLE);\n remove(this.tabObj.element.querySelector('.' + constants.RIBBON_COLLAPSE_BUTTON));\n this.collapseButton = null;\n };\n Ribbon.prototype.reRenderTabs = function (tabs) {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\n for (var key in tabs) {\n var index = parseInt(key, 10);\n var tab = tabs[parseInt(index.toString(), 10)];\n var isNewTab = false;\n for (var j = 0; j < (this.tabObj.items.length); j++) {\n if (this.tabs[parseInt(index.toString(), 10)].id === this.tabObj.items[parseInt(j.toString(), 10)].id) {\n isNewTab = true;\n break;\n }\n }\n if (!isNewTab) {\n this.destroyTabItems(this.tabsInternal);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n if (this.selectedTab >= this.tabs.length) {\n this.selectedTab = this.tabs.length - 1;\n }\n this.tabObj.setProperties({ items: tabItems, selectedItem: this.selectedTab });\n break;\n }\n else {\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n if (groups) {\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n this.tabObj.items[parseInt(index.toString(), 10)].header.text.innerText = ribbonTab.header;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabObj.items[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n }\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\n var group = groups_1[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n }\n }\n }\n };\n Ribbon.prototype.switchLayout = function () {\n this.currentControlIndex = 0;\n this.destroyScroll();\n this.collapseButton.classList.toggle(constants.RIBBON_EXPAND_BUTTON, this.activeLayout === 'Simplified');\n this.element.classList.toggle(constants.RIBBON_SIMPLIFIED_MODE, this.activeLayout === 'Simplified');\n for (var i = 0; i <= (this.tabs.length - 1); i++) {\n var tabIndex = i;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n for (var i_1 = 0; i_1 < groupList.length; i_1++) {\n var group = groupList[parseInt(i_1.toString(), 10)];\n var alignType = groupList[parseInt(i_1.toString(), 10)].orientation;\n if (group.isCollapsed) {\n group.setProperties({ isCollapsed: false }, true);\n this.removeDropdown(group.id);\n }\n else {\n this.checkSmallToMedium(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var shrinkColumns = groupContainer.querySelectorAll('.' + 'e-ribbon-shrink');\n for (var i_2 = 0; i_2 < shrinkColumns.length; i_2++) {\n shrinkColumns[parseInt(i_2.toString(), 10)].remove();\n }\n var groupHeader = groupContainer.querySelector('#' + group.id + constants.HEADER_ID);\n groupHeader.remove();\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n groupContent.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n groupContent.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n groupCollection.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && (item.displayOptions === DisplayMode.Classic)) {\n k++;\n var itemEle_1 = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele = itemEle_1.querySelector('#' + item.id);\n this.destroyFunction(item, ele);\n itemEle_1.remove();\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var size = ((item.allowedSizes === RibbonItemSize.Large) ||\n (item.allowedSizes & RibbonItemSize.Medium)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n size = (!(item.displayOptions & DisplayMode.Simplified) && (item.displayOptions & DisplayMode.Overflow))\n ? RibbonItemSize.Medium : size;\n var itemEle = void 0;\n if (!(item.displayOptions & DisplayMode.Classic)) {\n itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer)[0];\n if (item.displayOptions & DisplayMode.Simplified) {\n groupCollection.append(itemEle);\n }\n }\n else {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)) {\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, true);\n }\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n item.setProperties({ activeSize: size }, true);\n var ele = itemEle.querySelector('#' + item.id);\n this.setItemSize(ele, item);\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n }\n else {\n this.element.classList.remove(constants.RIBBON_OVERFLOW);\n for (var i_3 = 0; i_3 < groupList.length; i_3++) {\n var group = groupList[parseInt(i_3.toString(), 10)];\n var alignType = groupList[parseInt(i_3.toString(), 10)].orientation;\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n if (alignType === 'Row') {\n groupContent.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n groupContent.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (!group.enableGroupOverflow) {\n overflowDDB = this.overflowDDB;\n if (overflowDDB) {\n overflowtarget = this.overflowDDB.target;\n }\n }\n else {\n var overflowDDBEle = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n if (alignType === 'Column') {\n groupCollection.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && !(item.displayOptions & DisplayMode.Classic)) {\n k++;\n var itemEle = void 0;\n if ((item.displayOptions & DisplayMode.Simplified) || (item.displayOptions & DisplayMode.Overflow)) {\n if (item.displayOptions & DisplayMode.Simplified) {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n else {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (itemEle !== null) {\n var ele_8 = itemEle.querySelector('#' + item.id);\n this.destroyFunction(item, ele_8);\n itemEle.remove();\n }\n }\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n if (!(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) {\n var itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex)[0];\n groupCollection.append(itemEle);\n }\n else {\n var itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (!itemEle) {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, false);\n }\n this.removeOverflowEvent(item, itemEle);\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n groupCollection.append(itemEle);\n }\n var ele = groupContainer.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = groupContainer.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var itemsize = (item.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (item.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: itemsize }, true);\n this.setItemSize(ele, item);\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n }\n }\n }\n if (this.selectedTab === tabIndex) {\n this.checkOverflow(tabIndex, activeContent);\n }\n }\n }\n if (this.activeLayout === 'Classic') {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.createLauncherIcon = function (groupId, groupContainer) {\n var _this = this;\n var launcherIcon = this.createElement('div', {\n className: constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss ? this.launcherIconCss : constants.RIBBON_LAUNCHER_ICON),\n id: groupId + constants.LAUNCHER_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Launcher Icon', 'role': 'button' }\n });\n groupContainer.appendChild(launcherIcon);\n groupContainer.classList.add(constants.RIBBON_LAUNCHER);\n EventHandler.add(launcherIcon, 'click', this.launcherIconClicked.bind(this, groupId), this);\n EventHandler.add(launcherIcon, 'keydown', function (e) {\n if (e.key === 'Enter') {\n _this.launcherIconClicked(groupId);\n }\n }, this);\n };\n Ribbon.prototype.launcherIconClicked = function (id) {\n var eventArgs = { groupId: id };\n this.trigger('launcherIconClick', eventArgs);\n };\n Ribbon.prototype.createGroups = function (groupList, tabIndex) {\n var groupElements = [];\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n var alignType = group.orientation;\n var groupEle = this.createElement('div', {\n className: group.cssClass,\n id: group.id\n });\n groupEle.classList.add(constants.RIBBON_GROUP);\n groupElements.push(groupEle);\n var groupContainer = this.createElement('div', {\n className: group.cssClass,\n id: group.id + constants.CONTAINER_ID\n });\n groupContainer.classList.add(constants.RIBBON_GROUP_CONTAINER);\n groupEle.appendChild(groupContainer);\n var groupContent = this.createElement('div', {\n className: this.activeLayout === 'Simplified' ? constants.RIBBON_GROUP_CONTENT : (constants.RIBBON_GROUP_CONTENT + constants.SPACE + constants.RIBBON_CONTENT_HEIGHT),\n id: group.id + constants.CONTENT_ID\n });\n groupContent.classList.add(((alignType === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n groupContainer.appendChild(groupContent);\n if (this.activeLayout === 'Classic') {\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n }\n if (group.showLauncherIcon) {\n this.createLauncherIcon(group.id, groupContainer);\n }\n var elements = this.createCollection(group.collections, group.orientation, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer);\n append(elements, groupContent);\n if ((this.activeLayout === 'Simplified') && !(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n return groupElements;\n };\n Ribbon.prototype.validateItemSize = function () {\n for (var k = 0; k < this.tabs.length; k++) {\n var groupList = this.tabs[parseInt(k.toString(), 10)].groups;\n for (var l = 0; l < groupList.length; l++) {\n var collectionList = groupList[parseInt(l.toString(), 10)].collections;\n var alignType = groupList[parseInt(l.toString(), 10)].orientation;\n for (var i = 0; i < collectionList.length; i++) {\n var items = collectionList[parseInt(i.toString(), 10)].items;\n for (var j = 0; j < items.length; j++) {\n var ribbonitem = items[parseInt(j.toString(), 10)];\n if (!ribbonitem.allowedSizes || (ribbonitem.allowedSizes === 0)) {\n ribbonitem.setProperties({\n allowedSizes: (RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n }, true);\n }\n if ((ribbonitem.type === 'ColorPicker') && (ribbonitem.allowedSizes !== RibbonItemSize.Small)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Small }, true);\n }\n else if ((ribbonitem.type === 'ComboBox' || ribbonitem.type === 'CheckBox') &&\n (ribbonitem.allowedSizes !== RibbonItemSize.Medium)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Medium }, true);\n }\n else if (((alignType === 'Column') && (items.length > 1)) || ((alignType === 'Row') && (collectionList.length > 1))) {\n if (ribbonitem.allowedSizes & RibbonItemSize.Large) {\n // To remove large size, perform 'and' with 011(3).\n var sizeVal = ribbonitem.allowedSizes & (RibbonItemSize.Small | RibbonItemSize.Medium);\n sizeVal = sizeVal ? sizeVal : RibbonItemSize.Medium;\n ribbonitem.setProperties({ allowedSizes: sizeVal }, true);\n }\n }\n var itemsize = (ribbonitem.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (ribbonitem.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonitem.setProperties({ activeSize: itemsize }, true);\n }\n }\n }\n }\n };\n Ribbon.prototype.createCollection = function (collectionList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var collectionElements = [];\n for (var i = 0; i < collectionList.length; i++) {\n var collection = collectionList[parseInt(i.toString(), 10)];\n var collectionEle = this.createElement('div', {\n className: collection.cssClass,\n id: collection.id\n });\n collectionEle.classList.add(constants.RIBBON_COLLECTION);\n collectionEle.classList.add(((alignType !== 'Column') || (this.activeLayout === 'Simplified')) ?\n constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n collectionElements.push(collectionEle);\n var elements = this.createItems(collection.items, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer);\n append(elements, collectionEle);\n if ((alignType === 'Row') && (i === 2)) {\n break;\n }\n }\n return collectionElements;\n };\n Ribbon.prototype.createRibbonItem = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.createButton(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.createDropDown(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.createSplitButton(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.createCheckBox(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.createColorPicker(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.createComboBox(item, itemEle);\n break;\n case 'Template':\n this.createTemplateContent(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.createGroupButton(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createItems = function (itemList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var _a;\n var itemElements = [];\n for (var i = 0; i < itemList.length; i++) {\n var item = itemList[parseInt(i.toString(), 10)];\n //To stop rendering of items with simplified mode position type as none\n var flag = true;\n while (flag &&\n (((this.activeLayout === 'Simplified') && !(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) ||\n ((this.activeLayout === 'Classic') && !(item.displayOptions & DisplayMode.Classic)))) {\n i++;\n if (i < itemList.length) {\n item = itemList[parseInt(i.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var itemEle = this.createElement('div', {\n className: item.cssClass,\n id: item.id + constants.CONTAINER_ID\n });\n (_a = itemEle.classList).add.apply(_a, [constants.RIBBON_ITEM].concat((item.disabled ? [constants.DISABLED_CSS] : [])));\n // To avoid undefined items condition is added\n if (item.ribbonTooltipSettings && isTooltipPresent(item.ribbonTooltipSettings)) {\n itemEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemEle.id, data: item.ribbonTooltipSettings });\n }\n var size = item.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((item.allowedSizes === RibbonItemSize.Large) || (item.allowedSizes & RibbonItemSize.Medium) ||\n (item.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemEle.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemEle.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(item, itemEle);\n if ((this.activeLayout === 'Simplified') && ((item.displayOptions === DisplayMode.Overflow) || (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)))) {\n this.createOverflowPopup(item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, isGroupOF, true);\n }\n }\n else {\n // For normal mode and Simplified mode position type as Group and Auto\n itemElements.push(itemEle);\n }\n if ((alignType === 'Column') && (i === 2)) {\n break;\n }\n }\n return itemElements;\n };\n Ribbon.prototype.createHelpPaneTemplate = function () {\n if (this.helpPaneTemplate) {\n var templateName = 'helpPaneTemplate';\n this.clearTemplate([templateName]);\n this.ribbonTempEle = this.createElement('div', {\n className: constants.RIBBON_HELP_TEMPLATE,\n id: this.element.id + constants.RIBBON_HELP_PANE_TEMPLATE_ID\n });\n var templateFunction = getTemplateFunction(this.helpPaneTemplate);\n append(templateFunction({}, this, templateName, 'helpPaneTemplate', this.isStringTemplate), this.ribbonTempEle);\n var tabEle = this.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n toolbarEle.after(this.ribbonTempEle);\n tabEle.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, this.ribbonTempEle.offsetWidth + 'px');\n this.renderReactTemplates();\n }\n };\n Ribbon.prototype.createTemplateContent = function (item, itemElement) {\n var itemEle = this.createElement('div', {\n className: item.cssClass ? (constants.RIBBON_TEMPLATE + constants.SPACE + item.cssClass) : constants.RIBBON_TEMPLATE,\n id: item.id\n });\n if (item.disabled) {\n itemEle.classList.add(constants.DISABLED_CSS);\n itemEle.setAttribute('disabled', '');\n }\n itemElement.appendChild(itemEle);\n this.renderItemTemplate(item, itemEle);\n };\n Ribbon.prototype.renderItemTemplate = function (item, itemElement) {\n var templateName = 'ribbon' + item.id + 'itemTemplate';\n this.clearTemplate([templateName]);\n var templateFunction = getTemplateFunction(item.itemTemplate);\n append(templateFunction({ activeSize: RibbonItemSize[item.activeSize] }, this, templateName, (item.id + 'itemTemplate'), this.isStringTemplate), itemElement);\n this.renderReactTemplates();\n };\n Ribbon.prototype.checkID = function (list, type, initId) {\n var key = type === 'tab' ? constants.TAB_ID : type === 'group' ? constants.GROUP_ID :\n type === 'collection' ? constants.COLLECTION_ID : constants.ITEM_ID;\n for (var i = 0; i < list.length; i++) {\n var listitem = list[parseInt(i.toString(), 10)];\n if (!listitem.id) {\n listitem.setProperties({ id: initId + key + (this.idIndex++) }, true);\n }\n switch (type) {\n case 'tab':\n listitem.setProperties({ groups: this.checkID(listitem.groups, 'group', listitem.id) }, true);\n break;\n case 'group':\n listitem.setProperties({ collections: this.checkID(listitem.collections, 'collection', listitem.id) }, true);\n break;\n case 'collection':\n listitem.setProperties({ items: this.checkID(listitem.items, 'item', listitem.id) }, true);\n break;\n default:\n break;\n }\n }\n return list;\n };\n Ribbon.prototype.updateCommonProperty = function (commonProp) {\n this.tabObj.setProperties(commonProp);\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.setCommonProperties(commonProp);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.setCommonProperties(commonProp);\n }\n for (var i = 0; i < this.tabs.length; i++) {\n var tab = this.tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n if (contentEle.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n if (dropdown) {\n updateTooltipProp(dropdown.target, commonProp);\n dropdown.setProperties(commonProp);\n }\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : item.type === RibbonItemType.GroupButton ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id);\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n if (item.type === 'DropDown') {\n this.updatePopupItems(item, dropdown.target, group.enableGroupOverflow, true);\n }\n }\n }\n if (ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i_4 = 0; i_4 < item.groupButtonSettings.items.length; i_4++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_4);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateCommonProperty(ele, 'dropdown-btn', commonProp);\n for (var i_5 = 0; i_5 < item.groupButtonSettings.items.length; i_5++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_5);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else {\n updateCommonProperty(ele, moduleName, commonProp);\n }\n }\n else if (!isNullOrUndefined(commonProp.enableRtl)) {\n ele.classList.toggle(constants.RTL_CSS, commonProp.enableRtl);\n }\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.removeLauncherIcon = function (groupId, dropdownElement, contentEle) {\n var containerId = groupId + constants.CONTAINER_ID;\n var containerEle = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, containerId) : contentEle.querySelector('#' + containerId);\n if (containerEle) {\n containerEle.classList.remove(constants.RIBBON_LAUNCHER);\n var launcherIcon = containerEle.querySelector('#' + groupId + constants.LAUNCHER_ID);\n remove(launcherIcon);\n }\n };\n Ribbon.prototype.destroyTabItems = function (tabs) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n if (group.showLauncherIcon) {\n this.removeLauncherIcon(group.id, dropdownElement, contentEle);\n }\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) :\n contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown ? dropdown.target.querySelector('#' + item.id) : null;\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if ((this.activeLayout === RibbonLayout.Classic) && dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n else if ((this.activeLayout === RibbonLayout.Simplified) && group.enableGroupOverflow && dropdownElement) {\n this.removeOverflowButton(dropdown);\n }\n }\n }\n if (this.overflowDDB) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.destroyFunction = function (item, ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName === 'colorpicker') {\n this.ribbonColorPickerModule.unwireColorPickerEvents(ele);\n }\n else if (moduleName === 'group-btn') {\n if (this.activeLayout === 'Classic') {\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (btnEle) {\n destroyControl(btnEle, 'btn');\n }\n }\n }\n else {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n var _loop_3 = function (i) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings) {\n var groupButtonID_1 = item.id + constants.RIBBON_GROUP_BUTTON_ID + i;\n var index = getIndex(this_3.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_3.tooltipData.splice(index, 1);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_3(i);\n }\n }\n else if (moduleName !== 'template') {\n destroyControl(ele, moduleName);\n }\n if (item.ribbonTooltipSettings) {\n var index = getIndex(this.tooltipData, function (e) { return e.id === item.id + constants.CONTAINER_ID; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n }\n if (item.type === 'GroupButton') {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n };\n Ribbon.prototype.getItemModuleName = function (item) {\n switch (item.type) {\n case 'Button':\n return 'btn';\n case 'DropDown':\n return 'dropdown-btn';\n case 'SplitButton':\n return 'split-btn';\n case 'CheckBox':\n return 'checkbox';\n case 'ColorPicker':\n return 'colorpicker';\n case 'ComboBox':\n return 'combobox';\n case 'GroupButton':\n return 'group-btn';\n default:\n return 'template';\n }\n };\n Ribbon.prototype.clearOverflowResize = function () {\n this.destroyScroll();\n this.clearOverflowDropDown(this.selectedTab);\n var tab = this.tabs[this.selectedTab];\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n for (var j = 0; (j < tab.groups.length); j++) {\n this.checkSmallToMedium(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n this.checkMediumToLarge(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n }\n };\n /**\n * Refreshes the layout.\n *\n * @returns {void}\n */\n Ribbon.prototype.refreshLayout = function () {\n this.resizeHandler();\n };\n /**\n * Selects the tab\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.selectTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId) {\n this.showHideTab(tabId, false);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId) {\n this.showHideTab(tabId, true);\n };\n Ribbon.prototype.showHideTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n };\n /**\n * Enables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableTab = function (tabId) {\n this.enableDisableTab(tabId, true);\n };\n /**\n * Disables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableTab = function (tabId) {\n this.enableDisableTab(tabId, false);\n };\n Ribbon.prototype.enableDisableTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.enableTab(index, value);\n };\n /**\n * Adds the ribbon tab.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model\n * @param {string} targetId - Gets the ID of the target tab to add the new tab.\n * @param {boolean} isAfter - Defines whether the tab is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addTab = function (tab, targetId, isAfter) {\n var index = targetId ? getIndex(this.tabs, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? this.tabs.length : (index + (isAfter ? 1 : 0));\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 0, tab);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.checkID([this.tabs[parseInt(index.toString(), 10)]], 'tab', this.element.id);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItem = this.createTabItems([tab]);\n this.tabObj.addTab(tabItem, index);\n };\n /**\n * Removes the ribbon tab.\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.removeTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n if (groups && (contentEle.innerHTML !== '')) {\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\n var group = groups_2[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 1);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.tabObj.removeTab(index);\n };\n /**\n * Adds the ribbon group.\n *\n * @param {string} tabId - Gets the tab ID.\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @param {string} targetId - Gets the ID of the target group to add the new group.\n * @param {boolean} isAfter - Defines whether the group is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addGroup = function (tabId, group, targetId, isAfter) {\n var tabIndex = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (tabIndex === -1) {\n return;\n }\n if (this.selectedTab === tabIndex) {\n this.clearOverflowResize();\n }\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var ribbonGroups = tab.groups.slice();\n var index = targetId ? getIndex(ribbonGroups, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonGroups.length : (index + (isAfter ? 1 : 0));\n ribbonGroups.splice(index, 0, group);\n tab.setProperties({ groups: ribbonGroups }, true);\n this.checkID([tab.groups[parseInt(index.toString(), 10)]], 'group', tabId);\n this.validateItemSize();\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var element = this.createGroups([tab.groups[parseInt(index.toString(), 10)]], tabIndex)[0];\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.append(element);\n }\n }\n if (this.selectedTab === tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon group.\n *\n * @param {string} groupId -Gets the group ID.\n * @returns {void}\n */\n Ribbon.prototype.removeGroup = function (groupId) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n var groupEle = contentEle.querySelector('#' + groupId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroups = this.tabs[itemProp.tabIndex].groups.slice();\n ribbonGroups.splice(itemProp.groupIndex, 1);\n this.tabs[itemProp.tabIndex].setProperties({ groups: ribbonGroups }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideGroup = function (groupID) {\n this.showHideGroup(groupID, true);\n };\n /**\n * Shows a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showGroup = function (groupID) {\n this.showHideGroup(groupID, false);\n };\n Ribbon.prototype.showHideGroup = function (groupID, isHidden) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n isHidden ? groupEle.classList.add('e-hidden') : groupEle.classList.remove('e-hidden');\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hidden') : overflowtarget.classList.remove('e-hidden');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hidden') : grpContainer.classList.remove('e-hidden');\n }\n }\n }\n this.refreshLayout();\n };\n /**\n * Disables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableGroup = function (groupID) {\n this.enableDisableGroup(groupID, true);\n };\n /**\n * Enables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableGroup = function (groupID) {\n this.enableDisableGroup(groupID, false);\n };\n Ribbon.prototype.enableDisableGroup = function (groupID, isDisabled) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n isDisabled ? groupEle.classList.add('e-disabled') : groupEle.classList.remove('e-disabled');\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isDisabled ? overflowtarget.classList.add('e-disabled') : overflowtarget.classList.remove('e-disabled');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isDisabled ? grpContainer.classList.add('e-disabled') : grpContainer.classList.remove('e-disabled');\n }\n }\n }\n };\n /**\n * adds the ribbon collection.\n *\n * @param {string} groupId - Gets the ribbon group ID.\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @param {string} targetId - Gets the ID of the target collection to add the new collection.\n * @param {boolean} isAfter - Defines whether the collection is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addCollection = function (groupId, collection, targetId, isAfter) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Row') && (itemProp.group.collections.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonCollections = itemProp.group.collections.slice();\n var index = targetId ? getIndex(ribbonCollections, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonCollections.length : (index + (isAfter ? 1 : 0));\n ribbonCollections.splice(index, 0, collection);\n itemProp.group.setProperties({ collections: ribbonCollections }, true);\n this.checkID([itemProp.group.collections[parseInt(index.toString(), 10)]], 'collection', groupId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var collection_1 = itemProp.group.collections[parseInt(index.toString(), 10)];\n var element = this.createCollection([collection_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.querySelector('#' + groupId + constants.CONTENT_ID).append(element);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon collection.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @returns {void}\n */\n Ribbon.prototype.removeCollection = function (collectionId) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n var groupEle = contentEle.querySelector('#' + collectionId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroup = itemProp.group;\n var ribbonCollections = ribbonGroup.collections.slice();\n ribbonCollections.splice(itemProp.collectionIndex, 1);\n ribbonGroup.setProperties({ collections: ribbonCollections }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Adds ribbon item.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {string} targetId - Gets the ID of the target item to add the new item.\n * @param {boolean} isAfter - Defines whether the item is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addItem = function (collectionId, item, targetId, isAfter) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Column') && (itemProp.collection.items.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonItems = itemProp.collection.items.slice();\n var index = targetId ? getIndex(ribbonItems, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonItems.length : (index + (isAfter ? 1 : 0));\n ribbonItems.splice(index, 0, item);\n itemProp.collection.setProperties({ items: ribbonItems }, true);\n this.checkID([itemProp.collection.items[parseInt(index.toString(), 10)]], 'item', collectionId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (contentEle.innerHTML !== '') {\n var item_1 = itemProp.collection.items[parseInt(index.toString(), 10)];\n var element = this.createItems([item_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.closest('.' + constants.RIBBON_ITEM).insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n if (element) {\n contentEle.querySelector('#' + collectionId).append(element);\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.removeItem = function (itemId) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n var item = itemProp.item;\n this.removeItemElement(contentEle, item, dropdown);\n }\n var ribbonCollection = itemProp.collection;\n var ribbonItems = ribbonCollection.items;\n ribbonItems.splice(itemProp.itemIndex, 1);\n ribbonCollection.setProperties({ items: ribbonItems }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideItem = function (itemId) {\n this.showHideItem(itemId, true);\n };\n /**\n * Shows a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showItem = function (itemId) {\n this.showHideItem(itemId, false);\n };\n Ribbon.prototype.showHideItem = function (itemId, isHidden) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n isHidden ? itemEle.classList.add('e-hidden') : itemEle.classList.remove('e-hidden');\n }\n };\n /**\n * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model.\n * @returns {void}\n */\n Ribbon.prototype.updateTab = function (tab) {\n var tabId = tab.id;\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n if (groups && (contentEle.innerHTML !== '')) {\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabs[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n }\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_3 = groups; _i < groups_3.length; _i++) {\n var group = groups_3[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML === '') {\n // Check whether group is passed by the user and sets the updated values.\n if (tab.groups) {\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n if (this.selectedTab === index) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (tab.cssClass) {\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n tabEle.querySelector('#' + tabId + constants.HEADER_ID).innerText = ribbonTab.header;\n }\n }\n };\n /**\n * group - Gets the ribbon group to be updated. The id of the group is a required property. Other properties are optional.\n *\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @returns {void}\n */\n Ribbon.prototype.updateGroup = function (group) {\n var groupId = group.id;\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (group.cssClass) {\n if (itemProp.group.cssClass) {\n groupEle.classList.remove(itemProp.group.cssClass);\n if (groupContainer) {\n groupContainer.classList.remove(itemProp.group.cssClass);\n }\n }\n }\n // Check whether collections or orientation is passed by the user, and if it is, then remove the old values.\n if (group.collections || group.orientation) {\n if (itemProp.group.collections || itemProp.group.orientation) {\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n var collectionElements = groupEle.querySelectorAll('.e-ribbon-collection');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n collectionElements.forEach(function (collectionEle) { collectionEle.remove(); });\n if (group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n var removeCss = groupContent.classList.value.match(/(e-ribbon-[column|row]+)/g);\n if (removeCss) {\n removeClass([groupContent], removeCss);\n }\n }\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n }\n var ribbongroup = itemProp.group;\n ribbongroup.setProperties(group, true);\n ribbongroup.setProperties({ collections: this.checkID(ribbongroup.collections, 'collection', ribbongroup.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n // Check whether showLauncherIcon or orientation is passed by the user and sets the updated values.\n if (group.showLauncherIcon) {\n this.createLauncherIcon(ribbongroup.id, groupContainer);\n }\n // Check whether collections or orientation is passed by the user and sets the updated values.\n if (group.collections || group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n groupContent.classList.add(((ribbongroup.orientation === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n var elements = this.createCollection(ribbongroup.collections, ribbongroup.orientation, ribbongroup.id, ribbongroup.header, ribbongroup.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, groupContent);\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (group.cssClass) {\n groupEle.classList.add(ribbongroup.cssClass);\n if (groupContainer) {\n groupContainer.classList.add(ribbongroup.cssClass);\n }\n }\n // Check whether header is passed by the user and sets the updated values.\n if (group.header) {\n if (this.activeLayout === RibbonLayout.Simplified && !group.enableGroupOverflow) {\n var overflowHeader = dropdown.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n else if (this.activeLayout === RibbonLayout.Classic && !ribbongroup.isCollapsed) {\n groupEle.querySelector('.e-ribbon-group-header').innerText = ribbongroup.header;\n }\n else if (this.activeLayout === RibbonLayout.Classic && ribbongroup.isCollapsed) {\n var overflowEle = groupEle.querySelector('#' + ribbongroup.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n // need to set instance for dropdown\n var dropDownBtn = getInstance(overflowEle, DropDownButton);\n var overflowHeader = dropDownBtn.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n }\n }\n };\n /**\n * collection - Gets the ribbon collection to be updated. The id of the collection is a required property. Other properties are optional.\n *\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @returns {void}\n */\n Ribbon.prototype.updateCollection = function (collection) {\n var collectionId = collection.id;\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var collectionEle = contentEle.querySelector('#' + collectionId);\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (collection.cssClass) {\n if (itemProp.collection.cssClass) {\n collectionEle.classList.remove(itemProp.collection.cssClass);\n }\n }\n if (collection.items) {\n if (itemProp.collection.items) {\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n }\n }\n var ribboncollection = itemProp.collection;\n ribboncollection.setProperties(collection, true);\n ribboncollection.setProperties({ items: this.checkID(ribboncollection.items, 'item', ribboncollection.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (collection.items) {\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var elements = this.createItems(ribboncollection.items, itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, collectionEle);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (collection.cssClass) {\n collectionEle.classList.add(ribboncollection.cssClass);\n }\n };\n /**\n * item - Gets the ribbon item to be updated. The id of the item is a required property. Other properties are optional.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n */\n Ribbon.prototype.updateItem = function (item) {\n var itemId = item.id;\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + itemProp.group.id);\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n if (this.activeLayout === RibbonLayout.Simplified && itemProp.item.displayOptions === DisplayMode.Overflow) {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = dropdown.target.querySelector('#' + itemId);\n if (item.displayOptions && item.displayOptions !== DisplayMode.Overflow) {\n var collectionEle = groupContainer.querySelector('#' + itemProp.collection.id);\n if (collectionEle) {\n collectionEle.appendChild(itemContainer);\n }\n }\n }\n else {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = contentEle.querySelector('#' + itemId);\n if (itemProp.item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Classic) {\n itemEle = contentEle.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (this.activeLayout === RibbonLayout.Simplified && item.displayOptions === DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n if ((itemProp.item.type === RibbonItemType.DropDown) || (itemProp.item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(itemProp.item, itemContainer, itemProp.group.enableGroupOverflow, true);\n }\n }\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (item.cssClass) {\n if (itemProp.item.cssClass) {\n itemContainer.classList.remove(itemProp.item.cssClass);\n }\n }\n this.destroyFunction(itemProp.item, itemEle);\n itemEle.remove();\n var removeCss = itemContainer.classList.value.match(/(e-ribbon-[large|medium|small]+-item)/g);\n if (removeCss) {\n removeClass([itemContainer], removeCss);\n }\n }\n var ribbonItem = itemProp.item;\n ribbonItem.setProperties(item, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n if (item.cssClass) {\n itemContainer.classList.add(ribbonItem.cssClass);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n };\n Ribbon.prototype.removeItemElement = function (contentEle, item, dropdown) {\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id) : null;\n if (item.type === 'GroupButton') {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n if (item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Simplified) {\n document.getElementById(item.id + constants.CONTAINER_ID).remove();\n }\n else {\n ele.closest('#' + item.id + constants.CONTAINER_ID).remove();\n }\n }\n };\n /**\n * Enables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.enableItem = function (itemId) {\n this.enableDisableItem(itemId, false);\n };\n /**\n * Disables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.disableItem = function (itemId) {\n this.enableDisableItem(itemId, true);\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n var moduleName = this.getItemModuleName(itemProp.item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateControlDisabled(ele, 'dropdown-btn', isDisabled);\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = document.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n this.destroyTabItems(this.tabs);\n if (!this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n this.collapseButton = undefined;\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n }\n _super.prototype.destroy.call(this);\n this.tabObj.destroy();\n this.tabObj = undefined;\n remove(this.element.querySelector('#' + this.element.id + constants.TAB_ID));\n this.element.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.element.style.removeProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH);\n this.element.style.removeProperty('width');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(constants.SPACE));\n }\n this.element.classList.remove(constants.RTL_CSS, constants.RIBBON_SIMPLIFIED_MODE, constants.RIBBON_OVERFLOW, constants.RIBBON_COLLAPSIBLE, constants.RIBBON_MINIMIZE, 'e-rbn');\n this.unwireEvents();\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RibbonModel} newProp - Specifies new properties\n * @param {RibbonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Ribbon.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _a, _b;\n for (var _i = 0, _c = Object.keys(newProp); _i < _c.length; _i++) {\n var prop = _c[_i];\n switch (prop) {\n case 'activeLayout':\n this.switchLayout();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n (_a = this.element.classList).remove.apply(_a, oldProp.cssClass.split(constants.SPACE));\n }\n if (newProp.cssClass) {\n (_b = this.element.classList).add.apply(_b, newProp.cssClass.split(constants.SPACE));\n }\n break;\n case 'isMinimized':\n this.element.classList.toggle(constants.RIBBON_MINIMIZE, this.isMinimized);\n this.tabObj.element.querySelector('.e-content').style.display = this.isMinimized ? 'none' : 'block';\n if (!this.isMinimized) {\n this.refreshLayout();\n }\n break;\n case 'locale':\n this.updateCommonProperty({ locale: this.locale });\n break;\n case 'enablePersistence':\n this.updateCommonProperty({ enablePersistence: this.enablePersistence });\n break;\n case 'enableRtl':\n this.element.classList.toggle(constants.RTL_CSS, this.enableRtl);\n this.updateCommonProperty({ enableRtl: newProp.enableRtl });\n if (this.scrollModule) {\n this.scrollModule.setProperties({ enableRtl: newProp.enableRtl });\n }\n break;\n case 'launcherIconCss':\n for (var i = 0; i < this.tabs.length; i++) {\n var tabContent = this.tabObj.items[parseInt(i.toString(), 10)].content;\n var tab = this.tabs[parseInt(i.toString(), 10)];\n if (tabContent.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _d = 0, _e = tab.groups; _d < _e.length; _d++) {\n var group = _e[_d];\n if (group.showLauncherIcon) {\n var className = constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss || constants.RIBBON_LAUNCHER_ICON);\n if (group.isCollapsed) {\n var element = tabContent.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var dropdown = getComponent(element, DropDownButton);\n var launcherIconEle = dropdown.target.querySelector('#' + group.id + constants.LAUNCHER_ID);\n launcherIconEle.className = className;\n }\n else {\n var element = tabContent.querySelector('#' + group.id + constants.LAUNCHER_ID);\n element.className = className;\n }\n }\n }\n }\n }\n break;\n case 'selectedTab':\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n break;\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'width':\n this.element.style.width = formatUnit(newProp.width);\n this.refreshLayout();\n break;\n case 'fileMenu':\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.updateFileMenu(this.fileMenu);\n }\n var toolbarEle = this.tabObj['tbObj'];\n toolbarEle.refreshOverflow();\n break;\n case 'backStageMenu':\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.updateBackStageMenu(this.backStageMenu);\n }\n var toolbarElement = this.tabObj['tbObj'];\n toolbarElement.refreshOverflow();\n break;\n case 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n case 'hideLayoutSwitcher':\n this.hideLayoutSwitcher ? this.removeExpandCollapse() : this.addExpandCollapse();\n break;\n }\n }\n };\n var Ribbon_1;\n __decorate([\n Property('Classic')\n ], Ribbon.prototype, \"activeLayout\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, FileMenuSettings)\n ], Ribbon.prototype, \"fileMenu\", void 0);\n __decorate([\n Complex({}, BackStageMenu)\n ], Ribbon.prototype, \"backStageMenu\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"launcherIconCss\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"isMinimized\", void 0);\n __decorate([\n Property('en-us')\n ], Ribbon.prototype, \"locale\", void 0);\n __decorate([\n Property(0)\n ], Ribbon.prototype, \"selectedTab\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Ribbon.prototype, \"tabAnimation\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], Ribbon.prototype, \"tabs\", void 0);\n __decorate([\n Property('100%')\n ], Ribbon.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"helpPaneTemplate\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"hideLayoutSwitcher\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelecting\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelected\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonExpanding\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonCollapsing\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.addFileMenuTooltip(fileMenuOptions);\n }\n else {\n this.createFileMenu(fileMenuOptions);\n }\n }\n else if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonFileMenu.prototype.destroyMenu = function () {\n if (this.menuctrl) {\n this.menuctrl.destroy();\n this.menuctrl = null;\n }\n };\n RibbonFileMenu.prototype.destroyDDB = function () {\n this.removeFileMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.fileMenuDDB.destroy();\n this.fileMenuDDB = null;\n remove(this.ddbElement);\n this.ddbElement = null;\n };\n RibbonFileMenu.prototype.removeFileMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.ddbElement.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to FileMenu.\n *\n * @param {MenuItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.addItems = function (items, target, isAfter, isUniqueId) {\n if (isAfter) {\n this.menuctrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuctrl.insertBefore(items, target, isUniqueId);\n }\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Remove items from FileMenu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.removeItems = function (items, isUniqueId) {\n this.menuctrl.removeItems(items, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Enable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be enabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.enableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, true, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Disable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be disabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.disableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, false, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Update items in FileMenu.\n *\n * @param {MenuItem} item - Gets the item to be updated.\n * @param {boolean} id - Gets the id of the item to be updated.\n * @param {boolean} isUniqueId - Gets whether the id provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.setItem = function (item, id, isUniqueId) {\n this.menuctrl.setItem(item, id, isUniqueId);\n this.menuctrl.refresh();\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n return RibbonFileMenu;\n}());\nexport { RibbonFileMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, append, Component, EventHandler } from '@syncfusion/ej2-base';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex } from '../base/index';\nimport { getTemplateFunction, isTooltipPresent } from '../base/utils';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonBackstage = /** @class */ (function (_super) {\n __extends(RibbonBackstage, _super);\n function RibbonBackstage(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.render = function () {\n // render code\n };\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.preRender = function () {\n // pre render code\n };\n RibbonBackstage.prototype.getPersistData = function () {\n return '';\n };\n /**\n * This method is abstract member of the Component<HTMLElement>.\n *\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.onPropertyChanged = function () {\n // onProperty changes code\n };\n RibbonBackstage.prototype.getModuleName = function () {\n return 'ribbonBackstage';\n };\n RibbonBackstage.prototype.destroy = function () {\n if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates Backstage Menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.createBackStage = function (backStageOptions) {\n var _this = this;\n if (!backStageOptions.visible) {\n return;\n }\n this.backstageButtonEle = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.backstageButtonEle, toolbarEle);\n this.backstageButton = new Button({\n content: backStageOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE,\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.backstageButtonEle.offsetWidth + 'px');\n }\n }, this.backstageButtonEle);\n this.createBackStagePopup(backStageOptions);\n if (this.parent.backStageMenu.template) {\n this.createBackStageTemplate(this.parent.backStageMenu.template);\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n if (this.menuCtrl) {\n this.checkMenuItems(this.menuCtrl.items);\n }\n if (this.footerMenuCtrl) {\n this.checkMenuItems(this.footerMenuCtrl.items);\n }\n }\n this.backstageButtonEle.onclick = function (e) {\n e.stopPropagation();\n _this.showBackstage();\n _this.popupHTMLElement.classList.add(constants.RIBBON_BACKSTAGE_OPEN);\n var menuItem = _this.menuWrapper.querySelector('.e-menu-item.e-selected');\n if (menuItem) {\n menuItem.classList.remove('e-selected');\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (!item.isFooter && _this.menuCtrl.items[0].text === item.text) {\n var firstMenuEle = _this.popupHTMLElement.querySelector('#' + _this.menuCtrl.items[0].id);\n if (firstMenuEle) {\n firstMenuEle.classList.add('e-selected');\n firstMenuEle.focus();\n }\n _this.createBackStageContent(_this.menuCtrl.items[0].id, item.content);\n break;\n }\n else {\n continue;\n }\n }\n };\n this.parent.tabObj.refreshActiveTabBorder();\n this.addBackStageMenuTooltip(backStageOptions);\n EventHandler.add(document, 'click', this.onClickEvent, this);\n };\n RibbonBackstage.prototype.onClickEvent = function (e) {\n var targetEle = e.target;\n if (this.popupHTMLElement.contains(targetEle)) {\n return;\n }\n else {\n this.hideBackstage();\n }\n };\n RibbonBackstage.prototype.addBackStageMenuTooltip = function (backStageOptions) {\n if (isTooltipPresent(backStageOptions.ribbonTooltipSettings)) {\n this.backstageButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.backstageButtonEle.id, data: backStageOptions.ribbonTooltipSettings });\n }\n };\n RibbonBackstage.prototype.checkMenuItems = function (backStageItems) {\n for (var i = 0; i < backStageItems.length; i++) {\n var item = backStageItems[parseInt(i.toString(), 10)];\n if (!item.iconCss) {\n var menuItemEle = this.popupHTMLElement.querySelector('#' + item.id);\n menuItemEle.classList.add(constants.RIBBON_BACKSTAGE_TEXT_MENU);\n }\n }\n };\n RibbonBackstage.prototype.createBackStagePopup = function (backStageOptions) {\n var _this = this;\n this.popupHTMLElement = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_POPUP_ID,\n className: constants.RIBBON_BACKSTAGE_POPUP\n });\n var targetEle;\n if (backStageOptions.target) {\n targetEle = backStageOptions.target instanceof HTMLElement ? backStageOptions.target : document.querySelector(backStageOptions.target);\n targetEle.appendChild(this.popupHTMLElement);\n }\n else {\n this.parent.element.appendChild(this.popupHTMLElement);\n }\n this.popupEle = new Popup(this.popupHTMLElement, {\n height: backStageOptions.height,\n width: backStageOptions.width,\n relateTo: backStageOptions.target || this.parent.element,\n enableRtl: this.parent.enableRtl\n });\n if (this.parent.enableRtl) {\n this.updatePopupPositionOnRtl(this.parent.enableRtl);\n }\n this.popupHTMLElement.onkeydown = function (e) { if (e.code === 'Escape') {\n _this.hideBackstage();\n } };\n this.hideBackstage();\n };\n RibbonBackstage.prototype.updatePopupPositionOnRtl = function (enableRtl) {\n var popupStyle = this.popupHTMLElement.style;\n if (enableRtl) {\n popupStyle.right = popupStyle.left;\n popupStyle.left = 'unset';\n }\n else {\n popupStyle.left = popupStyle.right;\n popupStyle.right = 'unset';\n }\n };\n RibbonBackstage.prototype.createBackstageMenu = function (menuOptions, isFooter) {\n var _this = this;\n var wrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_wrapper');\n if (!wrapperEle) {\n this.menuWrapper = this.parent.createElement('div', {\n id: this.parent.element.id + '_wrapper',\n className: constants.RIBBON_BACKSTAGE_MENU_WRAPPER\n });\n this.popupHTMLElement.appendChild(this.menuWrapper);\n }\n if (menuOptions.backButton.visible && !isFooter) {\n var closeBtnEle = this.parent.createElement('button', {\n id: this.parent.element.id + '_close',\n className: 'e-ribbon-close-btn'\n });\n this.closeBtn = new Button({\n content: menuOptions.backButton.text,\n iconCss: menuOptions.backButton.iconCss ? menuOptions.backButton.iconCss : constants.BACKSTAGE_CLOSE_ICON,\n enableRtl: this.parent.enableRtl\n }, closeBtnEle);\n this.menuWrapper.append(closeBtnEle);\n closeBtnEle.onclick = function () {\n _this.popupHTMLElement.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n _this.hideBackstage();\n _this.isBackButtonClicked = true;\n };\n }\n var itemsWrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_itemswrapper');\n if (!itemsWrapperEle) {\n this.itemsWrapperEle = this.parent.createElement('div', {\n id: this.parent.element.id + '_itemswrapper',\n className: constants.RIBBON_BACKSTAGE_ITEMS_WRAPPER\n });\n this.menuWrapper.append(this.itemsWrapperEle);\n }\n var ulFooterElem;\n if (isFooter) {\n ulFooterElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FOOTER_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(ulFooterElem);\n }\n else {\n this.ulMenuElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(this.ulMenuElem);\n }\n if (!isFooter) {\n this.menuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, this.ulMenuElem);\n }\n else {\n this.footerMenuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneFooterMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, ulFooterElem);\n }\n };\n RibbonBackstage.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.cloneFooterMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (!item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.createBackStageContent = function (itemId, content) {\n var templateName = 'backstageContent';\n this.clearTemplate([templateName]);\n if (!this.backstageContentEle) {\n this.backstageContentEle = this.parent.createElement('div', {\n id: itemId + constants.CONTENT_ID,\n className: constants.RIBBON_BACKSTAGE_CONTENT\n });\n }\n else {\n this.backstageContentEle.innerHTML = '';\n this.backstageContentEle.id = itemId + constants.CONTENT_ID;\n }\n var templateFunction = getTemplateFunction(content);\n append(templateFunction({}, this, templateName, 'backstageContent', this.parent.isStringTemplate), this.backstageContentEle);\n if (content) {\n this.popupHTMLElement.append(this.backstageContentEle);\n }\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.createBackStageTemplate = function (template) {\n var templateName = 'backstageTemplate';\n this.clearTemplate([templateName]);\n this.backstageTempEle = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID + '_template',\n className: constants.RIBBON_BACKSTAGE_TEMPLATE\n });\n var templateFunction = getTemplateFunction(template);\n append(templateFunction({}, this, templateName, 'backstageTemplate', this.parent.isStringTemplate), this.backstageTempEle);\n this.popupHTMLElement.append(this.backstageTempEle);\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.menuSelect = function (menuOptions, args) {\n for (var i = 0; i < menuOptions.items.length; i++) {\n var item = menuOptions.items[parseInt(i.toString(), 10)];\n if (item.text === args.item.text) {\n this.contentItem = item;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element, item: this.contentItem, isBackButton: this.isBackButtonClicked };\n if (this.contentItem.backStageItemClick) {\n this.contentItem.backStageItemClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.setCommonProperties = function (commonProp) {\n if (this.backstageButton) {\n this.backstageButton.setProperties(commonProp);\n if (this.popupEle) {\n this.popupEle.setProperties(commonProp);\n if (this.popupHTMLElement)\n this.updatePopupPositionOnRtl(commonProp.enableRtl);\n if (this.menuCtrl) {\n this.menuCtrl.setProperties(commonProp);\n if (this.closeBtn) {\n this.closeBtn.setProperties(commonProp);\n }\n }\n }\n }\n };\n /**\n * Update Backstage menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage menu.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.updateBackStageMenu = function (backStageOptions) {\n if (backStageOptions.visible) {\n if (this.backstageButton) {\n if (backStageOptions.text) {\n this.backstageButton.setProperties({\n content: backStageOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.backstageButtonEle.offsetWidth + 'px');\n }\n if (this.popupEle) {\n this.popupEle.setProperties({\n height: backStageOptions.height,\n width: backStageOptions.width,\n target: backStageOptions.target || this.parent.element,\n });\n }\n if (backStageOptions.template) {\n if (this.backstageTempEle) {\n remove(this.backstageTempEle);\n this.backstageTempEle = null;\n }\n this.createBackStageTemplate(backStageOptions.template);\n }\n else {\n if (this.menuCtrl) {\n this.menuCtrl.setProperties({\n items: this.cloneMenuItem(backStageOptions.items)\n });\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties({\n items: this.cloneFooterMenuItem(backStageOptions.items)\n });\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n }\n }\n this.removeBackstageMenuTooltip();\n this.addBackStageMenuTooltip(backStageOptions);\n }\n else {\n this.createBackStage(backStageOptions);\n }\n }\n else if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonBackstage.prototype.destroyMenu = function () {\n if (this.menuCtrl) {\n this.menuCtrl.destroy();\n this.menuCtrl = null;\n }\n };\n RibbonBackstage.prototype.destroyDDB = function () {\n this.removeBackstageMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.backstageButton.destroy();\n this.backstageButton = null;\n remove(this.backstageButtonEle);\n this.backstageButtonEle = null;\n EventHandler.remove(document, 'click', this.onClickEvent);\n };\n RibbonBackstage.prototype.removeBackstageMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.backstageButtonEle.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to Backstage Menu.\n *\n * @param {BackstageItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.addBackstageItems = function (items, target, isAfter, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n isAfter ? this.footerMenuCtrl.insertAfter(items, target, isUniqueId) : this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n else {\n isAfter ? this.menuCtrl.insertAfter(items, target, isUniqueId) : this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n var backStageOptions = this.parent.backStageMenu;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n for (var i_1 = 0; i_1 < backstageItems.length; i_1++) {\n var item1 = backstageItems[parseInt(i_1.toString(), 10)];\n if (item.text === item1.text) {\n item1.content = item.content;\n break;\n }\n }\n }\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Remove items from Backstage Menu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.removeBackstageItems = function (items, isUniqueId) {\n this.menuCtrl.removeItems(items, isUniqueId);\n this.footerMenuCtrl.removeItems(items, isUniqueId);\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Renders the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.showBackstage = function () {\n this.popupEle.show();\n };\n /**\n * Hides the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.hideBackstage = function () {\n if (this.popupEle.element.classList.contains(constants.RIBBON_BACKSTAGE_OPEN)) {\n this.popupEle.element.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n }\n this.popupEle.hide();\n };\n return RibbonBackstage;\n}(Component));\nexport { RibbonBackstage };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","value","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","trim","isPrimary","isToggle","created","onclick","clicked","setAttribute","addOverFlowEvents","overflowButton","type","buttonObj","toggle","removeOverFlowEvents","split","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","querySelectorAll","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","insertBefore","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","grpBtnIndex","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","targetEle","isOverflowPopup","destroyDropDown","updateGroupButtonSize","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","idIndex","isAddRemove","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","getUniqueID","addClass","concat","style","formatUnit","renderTabs","ribbonFileMenuModule","createFileMenu","fileMenu","ribbonBackstageModule","createBackStage","backStageMenu","createHelpPaneTemplate","refreshOverflow","wireEvents","wireKeyboardEvent","currentControlIndex","window","resizeHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","activeContent","selectedTab","ribbonControls","action","prevGroupId","prevGroupContainer","checkOverflow","scrollModule","scrollEle","scrollStep","offsetWidth","tabsInternal","slice","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","selectedTabId","selectedIndex","previousIndex","selectedContent","firstChild","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","collectionEle","Overflow","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","isGroupOF","isMenu","dropDownPopup","isLeft","position","X","Y","offsetX","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","getInstance","groupEle_1","removeOverflowEvent","childElementCount","removeOverflowButton","ofGroupContainer","groupId","groupHeader","isResize","isDisabledGroup","addOverflowButton","overflowBtnTarget","createGroupContainer","createOfTabContainer","collapseButton","addOverflowEvents","ribbonButtonModule","ribbonSplitButtonModule","ribbonCheckBoxModule","ribbonColorPickerModule","ribbonComboBoxModule","ribbonGroupButtonModule","isLarge","checkLargeToMedium","checkMediumToSmall","checkValidCollectionLength","ind","checkClassicCollection","isIncrement","checkClassicItem","shouldSkip","isCollapsed","canReduceCollection","canReduceItem","createShrinkEle","firstItem","start","end","shrinkEle","constants.RIBBON_ROW","attrs","data-start","data-end","moveItemToColumn","moveCollectionToColumn","orientation","Column","m","shrinkColumns","reduceItemsToSmall","middle","reduce","ele_1","reduceCollectionsToSmall","ele_2","setWidth","classicItems","shrinkColumn","isSmall","checkSmallToMedium","checkMediumToLarge","shouldClear","expandItemToMedium","parentEle","ele_4","expandCollectionsToMedium","ele_5","Row","expandItemsToLarge","container","ele_6","insertAdjacentElement","expandCollectionsToLarge","ele_7","handleContentSize","isRemoveOverflow","Template","createTemplateContent","collapseOrder","this_1","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","groupIconCss","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","isCollapsible","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","previousItem","nextIndex","isInteracted","selectedTabContent","elements","createGroups","ribbonTab","ondblclick","btnId","tabindex","constants.DROPDOWNBUTTON_HIDE","constants.RIBBON_POPUP_CONTROL","isGroupOf","upDownKeyHandler","getElementsByClassName","findDisabledItem","currentItemIndex","itemType","checkBoxEle","checkBox","isIncrease","ofGroupHeader","constants.RIBBON_COLLAPSE_BUTTON","aria-label","role","removeExpandCollapse","splice","reRenderTabs","isNewTab","destroyTabItems","innerText","_i","groups_1","_a","_b","_c","_d","destroyFunction","forEach","groupList","i_1","alignType","i_2","groupContent","replace","groupCollection","itemList","itemEle_1","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_e","getItemModuleName","i_4","i_5","removeLauncherIcon","containerId","this_3","groupButtonID_1","clearOverflowResize","selectTab","tabId","showTab","showHideTab","hideTab","enableTab","enableDisableTab","disableTab","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","hideGroup","groupID","showHideGroup","showGroup","isHidden","grpContainer","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","overflowHeader","updateCollection","ribboncollection","updateItem","enableDisableItem","getElementById","enableItem","disableItem","toggleAttribute","unwireEvents","undefined","onPropertyChanged","newProp","oldProp","keys","animation","tabAnimation","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","visible","ddbElement","ddbBeforeEvent","ddbAfterEvent","popupTemplate","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","isOpen","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","menuItems","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","destroyMenu","removeFileMenuTooltip","insertAfter","enableItems","disableItems","setItem","refresh","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","itemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","createBackStageContent","addBackStageMenuTooltip","onClickEvent","hideBackstage","backStageItems","HTMLElement","Popup","height","relateTo","updatePopupPositionOnRtl","code","popupStyle","right","left","backButton","closeBtnEle","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","addBackstageItems","backstageItems","item1","removeBackstageItems","show","hide","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-ribbon.min.js","sources":["../../src/ribbon/base/utils.js","../../src/ribbon/base/interface.js","../../src/ribbon/models/ribbon-button-settings.js","../../src/ribbon/models/ribbon-checkbox-settings.js","../../src/ribbon/models/ribbon-colorpicker-settings.js","../../src/ribbon/models/ribbon-combobox-settings.js","../../src/ribbon/models/ribbon-dropdown-settings.js","../../src/ribbon/models/ribbon-splitbutton-settings.js","../../src/ribbon/models/ribbon-tooltip.js","../../src/ribbon/models/ribbon-group-button-item.js","../../src/ribbon/models/ribbon-group-button-settings.js","../../src/ribbon/models/ribbon-item.js","../../src/ribbon/models/ribbon-collection.js","../../src/ribbon/models/ribbon-group.js","../../src/ribbon/models/ribbon-tab.js","../../src/ribbon/models/ribbon-file-menu-settings.js","../../src/ribbon/models/ribbon-back-button.js","../../src/ribbon/models/ribbon-backstage-item.js","../../src/ribbon/models/ribbon-back-stage-settings.js","../../src/ribbon/base/constant.js","../../src/ribbon/items/ribbon-button.js","../../src/ribbon/items/ribbon-checkbox.js","../../src/ribbon/items/ribbon-colorpicker.js","../../src/ribbon/items/ribbon-combobox.js","../../src/ribbon/items/ribbon-dropdown.js","../../src/ribbon/items/ribbon-splitbutton.js","../../src/ribbon/items/ribbon-groupbutton.js","../../src/ribbon/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.js","../../src/ribbon/modules/ribbon-backstage.js","../../src/global.js"],"sourcesContent":["import { compile, getComponent, select, addClass } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport * as constants from './constant';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * Gets index value.\n *\n * @param {Array} arr - Gets the array to find index.\n * @param {boolean} condition - Defines whether index matches with the value.\n * @returns {number} - Gets the index value.\n * @hidden\n */\nexport function getIndex(arr, condition) {\n for (var i = 0; i < arr.length; i++) {\n if (condition(arr[parseInt(i.toString(), 10)], i)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Gets template content based on the template property value.\n *\n * @param {string | HTMLElement| Function} template - Template property value.\n * @returns {Function} - Return template function.\n * @hidden\n */\nexport function getTemplateFunction(template) {\n if (typeof template === 'string') {\n var content = '';\n try {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n content = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n content = template;\n }\n }\n catch (e) {\n content = template;\n }\n return compile(content);\n }\n else {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return compile(template);\n }\n}\n/**\n * Gets the ribbon item\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon item.\n * @hidden\n */\nexport function getItem(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n for (var l = 0; l < collection.items.length; l++) {\n var item = collection.items[parseInt(l.toString(), 10)];\n if (item.id === id) {\n return {\n item: item, collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k, itemIndex: l\n };\n }\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon collection.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon collection.\n * @hidden\n */\nexport function getCollection(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n for (var k = 0; k < group.collections.length; k++) {\n var collection = group.collections[parseInt(k.toString(), 10)];\n if (collection.id === id) {\n return {\n collection: collection, group: group,\n tabIndex: i, groupIndex: j, collectionIndex: k\n };\n }\n }\n }\n }\n return null;\n}\n/**\n * Gets the ribbon group.\n *\n * @param {RibbonTabModel} tabs - Gets the ribbon tab model.\n * @param {string} id - Gets the ID of the tab.\n * @returns {itemProps} - Gets the ribbon group.\n * @hidden\n */\nexport function getGroup(tabs, id) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n for (var j = 0; j < tab.groups.length; j++) {\n var group = tab.groups[parseInt(j.toString(), 10)];\n if (group.id === id) {\n return {\n group: group, tabIndex: i, groupIndex: j\n };\n }\n }\n }\n return null;\n}\n/**\n * @param {HTMLElement} element - Gets the element to be destroyed.\n * @param {string} moduleName - Gets the module name.\n * @returns {void}\n * @hidden\n */\nexport function destroyControl(element, moduleName) {\n var control = getComponent(element, moduleName);\n control.destroy();\n}\n/**\n * Updates common properties.\n *\n * @param {HTMLElement} element - Gets the element to be updated.\n * @param {string} moduleName - Gets the module name.\n * @param {commonProperties} commonProp - Gets the common properties to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateCommonProperty(element, moduleName, commonProp) {\n var control = getComponent(element, moduleName);\n control.setProperties(commonProp);\n}\n/**\n * Updates disabled control.\n *\n * @param {HTMLElement} element - Gets the element to be disabled.\n * @param {string} moduleName - Gets the module name.\n * @param {boolean} disable - Defines whether the control to be disabled or not.\n * @returns {void}\n * @hidden\n */\nexport function updateControlDisabled(element, moduleName, disable) {\n var control = getComponent(element, moduleName);\n control.setProperties(moduleName === 'combobox' ? { enabled: !disable } : { disabled: disable });\n}\n/**\n * Gets the ribbon item element.\n *\n * @param {Ribbon} parent - Gets the parent element.\n * @param {string} id - Gets the ID of the item.\n * @param {itemProps} itemProp - Gets the ribbon item.\n * @returns {HTMLElement} - Gets the ribbon item element.\n * @hidden\n */\nexport function getItemElement(parent, id, itemProp) {\n if (!itemProp) {\n itemProp = getItem(parent.tabs, id);\n if (!itemProp) {\n return null;\n }\n }\n var contentEle = parent.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML === '') {\n return null;\n }\n if (parent.activeLayout === RibbonLayout.Classic) {\n if (itemProp.item.displayOptions & DisplayMode.Classic) {\n contentEle = (itemProp.group.isCollapsed) ? parent.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle)\n : contentEle;\n return contentEle.querySelector('#' + id);\n }\n else {\n return null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n var ele = (itemProp.item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + itemProp.item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n var dropdown = itemProp.group.enableGroupOverflow ?\n getComponent(contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID), DropDownButton)\n : parent.overflowDDB;\n ele = dropdown.target.querySelector('#' + itemProp.item.id);\n }\n return ele;\n }\n}\n/**\n * @param {RibbonTooltipModel} tooltip - Gets the property of tooltip.\n * @returns {boolean} - Gets whether the tooltip is present or not.\n * @hidden\n */\nexport function isTooltipPresent(tooltip) {\n return (tooltip.content || tooltip.iconCss || tooltip.title || tooltip.id || tooltip.cssClass) ? true : false;\n}\n/**\n * Sets content for tooltip.\n *\n * @param {TooltipEventArgs} args - Gets the argument of tooltip.\n * @param {Tooltip} tooltip - Gets the tooltip to set the content.\n * @param {ribbonTooltipData} tooltipData - Gets the tooltip data.\n * @returns {void}\n * @hidden\n */\nexport function setToolTipContent(args, tooltip, tooltipData) {\n var targetId = args.target.getAttribute('id');\n var dataObj = tooltipData.filter(function (e) { return e.id === targetId; })[0];\n var data = dataObj.data;\n var content = tooltip.createElement('div', {\n id: data.id ? constants.RIBBON_TOOLTIP_CONTAINER + '_' + data.id : constants.RIBBON_TOOLTIP_CONTAINER\n });\n tooltip.element.append(content);\n if (data.title) {\n var header = tooltip.createElement('div', {\n innerHTML: data.title,\n className: constants.RIBBON_TOOLTIP_TITLE\n });\n content.appendChild(header);\n }\n var textContainer = tooltip.createElement('div', {\n className: constants.RIBBON_TEXT_CONTAINER\n });\n content.appendChild(textContainer);\n if (data.iconCss) {\n var customCss = tooltip.createElement('div', {\n className: data.iconCss + ' ' + constants.RIBBON_TOOLTIP_ICON\n });\n textContainer.appendChild(customCss);\n }\n if (data.content) {\n var tooltipContent = tooltip.createElement('div', {\n innerHTML: data.content,\n className: constants.RIBBON_TOOLTIP_CONTENT\n });\n textContainer.appendChild(tooltipContent);\n }\n tooltip.setProperties({\n content: content,\n cssClass: data.cssClass ? data.cssClass + ' ' + constants.RIBBON_TOOLTIP : constants.RIBBON_TOOLTIP\n });\n}\n/**\n * Creates tooltip.\n *\n * @param {HTMLElement} element - Gets the element to add tooltip.\n * @param {Ribbon} ribbon - Gets the ribbon.\n * @returns {void}\n * @hidden\n */\nexport function createTooltip(element, ribbon) {\n var ribbonTooltip = new Tooltip({\n target: '.' + constants.RIBBON_TOOLTIP_TARGET,\n beforeRender: beforeTooltipRender.bind(this),\n windowCollision: true\n });\n ribbonTooltip.appendTo(element);\n /**\n * @param {TooltipEventArgs} args - Gets the tooltip argument.\n * @returns {void}\n * @hidden\n */\n function beforeTooltipRender(args) {\n setToolTipContent(args, ribbonTooltip, ribbon.tooltipData);\n }\n}\n/**\n * Destroys tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be destroyed.\n * @returns {void}\n * @hidden\n */\nexport function destroyTooltip(element) {\n var control = getComponent(element, Tooltip);\n control.destroy();\n}\n/**\n * Updates tooltip\n *\n * @param {HTMLElement} element - Gets the element in which the tooltip needs to be Updated.\n * @param {commonProperties} prop - Gets the property to be updated.\n * @returns {void}\n * @hidden\n */\nexport function updateTooltipProp(element, prop) {\n var control = getComponent(element, Tooltip);\n control.setProperties(prop);\n}\n/**\n * Sets the HTML attributes of an element\n *\n * @param {HTMLElement} element - The HTML element for which attributes are to be updated.\n * @param {commonProperties} attributes - An object containing key-value pairs of attributes to be updated.\n * @returns {void}\n * @hidden\n */\nexport function setCustomAttributes(element, attributes) {\n for (var key in attributes) {\n if (key === 'class') {\n var elementClass = attributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'style') {\n var prevStyles = element.getAttribute('style') || '';\n var value = \"\" + prevStyles + attributes[\"\" + key];\n element.setAttribute(\"\" + key, value);\n }\n else {\n element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n}\n","/**\n * Defines the layout types of ribbon.\n */\nexport var RibbonLayout;\n(function (RibbonLayout) {\n /**\n * Displays the ribbon tab content in classic layout.\n */\n RibbonLayout[\"Classic\"] = \"Classic\";\n /**\n * Displays the ribbon tab content in simplified layout.\n */\n RibbonLayout[\"Simplified\"] = \"Simplified\";\n})(RibbonLayout || (RibbonLayout = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var ItemOrientation;\n(function (ItemOrientation) {\n /**\n * Displays the collection of items in rows.\n */\n ItemOrientation[\"Row\"] = \"Row\";\n /**\n * Displays the collection of items in column.\n */\n ItemOrientation[\"Column\"] = \"Column\";\n})(ItemOrientation || (ItemOrientation = {}));\n/**\n * Defines the current size of the ribbon item in normal mode.\n *\n * @aspNumberEnum\n */\nexport var RibbonItemSize;\n(function (RibbonItemSize) {\n /**\n * The item appears with large icon and text at the bottom.\n */\n RibbonItemSize[RibbonItemSize[\"Large\"] = 4] = \"Large\";\n /**\n * The item appears with small icon and text at the right.\n */\n RibbonItemSize[RibbonItemSize[\"Medium\"] = 2] = \"Medium\";\n /**\n * The item appears with small icon only.\n */\n RibbonItemSize[RibbonItemSize[\"Small\"] = 1] = \"Small\";\n})(RibbonItemSize || (RibbonItemSize = {}));\n/**\n * Defines how to show an item in ribbon simplified layout.\n *\n * @aspNumberEnum\n */\nexport var DisplayMode;\n(function (DisplayMode) {\n /**\n * The item appears in the classic layout group.\n */\n DisplayMode[DisplayMode[\"Classic\"] = 4] = \"Classic\";\n /**\n * The item appears in the simplified layout group.\n */\n DisplayMode[DisplayMode[\"Simplified\"] = 2] = \"Simplified\";\n /**\n * The item appears in overflow popup.\n */\n DisplayMode[DisplayMode[\"Overflow\"] = 1] = \"Overflow\";\n /**\n * The item appears in classic layout group, simplified layout group, and overflow popup based on ribbon overflow state.\n */\n DisplayMode[DisplayMode[\"Auto\"] = 7] = \"Auto\";\n})(DisplayMode || (DisplayMode = {}));\n/**\n * Defines the type of the ribbon item.\n */\nexport var RibbonItemType;\n(function (RibbonItemType) {\n /**\n * Renders button as ribbon item.\n */\n RibbonItemType[\"Button\"] = \"Button\";\n /**\n * Renders checkbox as ribbon item.\n */\n RibbonItemType[\"CheckBox\"] = \"CheckBox\";\n /**\n * Renders color picker as ribbon item.\n */\n RibbonItemType[\"ColorPicker\"] = \"ColorPicker\";\n /**\n * Renders combobox as ribbon item.\n */\n RibbonItemType[\"ComboBox\"] = \"ComboBox\";\n /**\n * Renders dropdownbutton as ribbon item.\n */\n RibbonItemType[\"DropDown\"] = \"DropDown\";\n /**\n * Renders splitbutton as ribbon item.\n */\n RibbonItemType[\"SplitButton\"] = \"SplitButton\";\n /**\n * Renders the group button content as ribbon item.\n */\n RibbonItemType[\"GroupButton\"] = \"GroupButton\";\n /**\n * Renders the template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\n/**\n * Defines the alignment of the items in the ribbon group.\n */\nexport var RibbonGroupButtonSelection;\n(function (RibbonGroupButtonSelection) {\n /**\n * Allows selecting single button from button group.\n */\n RibbonGroupButtonSelection[\"Single\"] = \"Single\";\n /**\n * Allows selecting multiple buttons from button group.\n */\n RibbonGroupButtonSelection[\"Multiple\"] = \"Multiple\";\n})(RibbonGroupButtonSelection || (RibbonGroupButtonSelection = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon button item.\n */\nvar RibbonButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonButtonSettings, _super);\n function RibbonButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of button.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isToggle\", void 0);\n __decorate([\n Property(false)\n ], RibbonButtonSettings.prototype, \"isPrimary\", void 0);\n __decorate([\n Property({})\n ], RibbonButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonButtonSettings.prototype, \"clicked\", void 0);\n return RibbonButtonSettings;\n}(ChildProperty));\nexport { RibbonButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon checkbox item.\n */\nvar RibbonCheckBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonCheckBoxSettings, _super);\n function RibbonCheckBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of checkbox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCheckBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonCheckBoxSettings.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonCheckBoxSettings.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RibbonCheckBoxSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property({})\n ], RibbonCheckBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonCheckBoxSettings.prototype, \"change\", void 0);\n return RibbonCheckBoxSettings;\n}(ChildProperty));\nexport { RibbonCheckBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon color picker.\n */\nvar RibbonColorPickerSettings = /** @class */ (function (_super) {\n __extends(RibbonColorPickerSettings, _super);\n function RibbonColorPickerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of colorpicker.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonColorPickerSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(10)\n ], RibbonColorPickerSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('')\n ], RibbonColorPickerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property('Picker')\n ], RibbonColorPickerSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(false)\n ], RibbonColorPickerSettings.prototype, \"noColor\", void 0);\n __decorate([\n Property(null)\n ], RibbonColorPickerSettings.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], RibbonColorPickerSettings.prototype, \"showButtons\", void 0);\n __decorate([\n Property('#008000ff')\n ], RibbonColorPickerSettings.prototype, \"value\", void 0);\n __decorate([\n Property({})\n ], RibbonColorPickerSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonColorPickerSettings.prototype, \"select\", void 0);\n return RibbonColorPickerSettings;\n}(ChildProperty));\nexport { RibbonColorPickerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '@syncfusion/ej2-dropdowns';\n/**\n * Defines the ribbon combobox item.\n */\nvar RibbonComboBoxSettings = /** @class */ (function (_super) {\n __extends(RibbonComboBoxSettings, _super);\n function RibbonComboBoxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of combobox.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonComboBoxSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(false)\n ], RibbonComboBoxSettings.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"autofill\", void 0);\n __decorate([\n Property('')\n ], RibbonComboBoxSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], RibbonComboBoxSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], RibbonComboBoxSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('Contains')\n ], RibbonComboBoxSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"index\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], RibbonComboBoxSettings.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"placeholder\", void 0);\n __decorate([\n Property('300px')\n ], RibbonComboBoxSettings.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], RibbonComboBoxSettings.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(true)\n ], RibbonComboBoxSettings.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('None')\n ], RibbonComboBoxSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], RibbonComboBoxSettings.prototype, \"value\", void 0);\n __decorate([\n Property('150px')\n ], RibbonComboBoxSettings.prototype, \"width\", void 0);\n __decorate([\n Property({})\n ], RibbonComboBoxSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonComboBoxSettings.prototype, \"select\", void 0);\n return RibbonComboBoxSettings;\n}(ChildProperty));\nexport { RibbonComboBoxSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon DropDownButton item.\n */\nvar RibbonDropDownSettings = /** @class */ (function (_super) {\n __extends(RibbonDropDownSettings, _super);\n function RibbonDropDownSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonDropDownSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonDropDownSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonDropDownSettings.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], RibbonDropDownSettings.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property({})\n ], RibbonDropDownSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonDropDownSettings.prototype, \"select\", void 0);\n return RibbonDropDownSettings;\n}(ChildProperty));\nexport { RibbonDropDownSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Event, Property } from '@syncfusion/ej2-base';\nimport { Item } from '@syncfusion/ej2-splitbuttons';\n/**\n * Defines the ribbon SplitButton item.\n */\nvar RibbonSplitButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonSplitButtonSettings, _super);\n function RibbonSplitButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of DropDown.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonSplitButtonSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Collection([], Item)\n ], RibbonSplitButtonSettings.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], RibbonSplitButtonSettings.prototype, \"target\", void 0);\n __decorate([\n Property({})\n ], RibbonSplitButtonSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], RibbonSplitButtonSettings.prototype, \"select\", void 0);\n return RibbonSplitButtonSettings;\n}(ChildProperty));\nexport { RibbonSplitButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon tooltip.\n */\nvar RibbonTooltip = /** @class */ (function (_super) {\n __extends(RibbonTooltip, _super);\n function RibbonTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonTooltip.prototype, \"iconCss\", void 0);\n return RibbonTooltip;\n}(ChildProperty));\nexport { RibbonTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Event, Property, Complex } from '@syncfusion/ej2-base';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonItem = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonItem, _super);\n function RibbonGroupButtonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], RibbonGroupButtonItem.prototype, \"iconCss\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonGroupButtonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroupButtonItem.prototype, \"selected\", void 0);\n __decorate([\n Property({})\n ], RibbonGroupButtonItem.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"beforeClick\", void 0);\n __decorate([\n Event()\n ], RibbonGroupButtonItem.prototype, \"click\", void 0);\n return RibbonGroupButtonItem;\n}(ChildProperty));\nexport { RibbonGroupButtonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroupButtonItem } from './ribbon-group-button-item';\n/**\n * Defines the ribbon group button settings.\n */\nvar RibbonGroupButtonSettings = /** @class */ (function (_super) {\n __extends(RibbonGroupButtonSettings, _super);\n function RibbonGroupButtonSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Single')\n ], RibbonGroupButtonSettings.prototype, \"selection\", void 0);\n __decorate([\n Collection([], RibbonGroupButtonItem)\n ], RibbonGroupButtonSettings.prototype, \"items\", void 0);\n return RibbonGroupButtonSettings;\n}(ChildProperty));\nexport { RibbonGroupButtonSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Complex, Property } from '@syncfusion/ej2-base';\nimport { RibbonItemSize, DisplayMode } from '../base/interface';\nimport { RibbonButtonSettings } from './ribbon-button-settings';\nimport { RibbonCheckBoxSettings } from './ribbon-checkbox-settings';\nimport { RibbonColorPickerSettings } from './ribbon-colorpicker-settings';\nimport { RibbonComboBoxSettings } from './ribbon-combobox-settings';\nimport { RibbonDropDownSettings } from './ribbon-dropdown-settings';\nimport { RibbonSplitButtonSettings } from './ribbon-splitbutton-settings';\nimport { RibbonTooltip } from './ribbon-tooltip';\nimport { RibbonGroupButtonSettings } from './ribbon-group-button-settings';\n/**\n * Defines the ribbon item.\n */\nvar RibbonItem = /** @class */ (function (_super) {\n __extends(RibbonItem, _super);\n function RibbonItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of item.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonItem.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property(RibbonItemSize.Medium)\n ], RibbonItem.prototype, \"activeSize\", void 0);\n __decorate([\n Property(RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n ], RibbonItem.prototype, \"allowedSizes\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RibbonItem.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RibbonItem.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('Button')\n ], RibbonItem.prototype, \"type\", void 0);\n __decorate([\n Property(DisplayMode.Auto)\n ], RibbonItem.prototype, \"displayOptions\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], RibbonItem.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Complex({}, RibbonButtonSettings)\n ], RibbonItem.prototype, \"buttonSettings\", void 0);\n __decorate([\n Complex({}, RibbonDropDownSettings)\n ], RibbonItem.prototype, \"dropDownSettings\", void 0);\n __decorate([\n Complex({}, RibbonCheckBoxSettings)\n ], RibbonItem.prototype, \"checkBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonColorPickerSettings)\n ], RibbonItem.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Complex({}, RibbonComboBoxSettings)\n ], RibbonItem.prototype, \"comboBoxSettings\", void 0);\n __decorate([\n Complex({}, RibbonSplitButtonSettings)\n ], RibbonItem.prototype, \"splitButtonSettings\", void 0);\n __decorate([\n Complex({}, RibbonGroupButtonSettings)\n ], RibbonItem.prototype, \"groupButtonSettings\", void 0);\n return RibbonItem;\n}(ChildProperty));\nexport { RibbonItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonItem } from './ribbon-item';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCollection = /** @class */ (function (_super) {\n __extends(RibbonCollection, _super);\n function RibbonCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of collection.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonCollection.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonCollection.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonItem)\n ], RibbonCollection.prototype, \"items\", void 0);\n return RibbonCollection;\n}(ChildProperty));\nexport { RibbonCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonCollection } from './ribbon-collection';\n/**\n * Defines the ribbon group.\n */\nvar RibbonGroup = /** @class */ (function (_super) {\n __extends(RibbonGroup, _super);\n function RibbonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Group.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonGroup.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Collection([], RibbonCollection)\n ], RibbonGroup.prototype, \"collections\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"isCollapsed\", void 0);\n __decorate([\n Property(true)\n ], RibbonGroup.prototype, \"isCollapsible\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"enableGroupOverflow\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"groupIconCss\", void 0);\n __decorate([\n Property('')\n ], RibbonGroup.prototype, \"header\", void 0);\n __decorate([\n Property('Column')\n ], RibbonGroup.prototype, \"orientation\", void 0);\n __decorate([\n Property(0)\n ], RibbonGroup.prototype, \"priority\", void 0);\n __decorate([\n Property(false)\n ], RibbonGroup.prototype, \"showLauncherIcon\", void 0);\n return RibbonGroup;\n}(ChildProperty));\nexport { RibbonGroup };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Collection, Property } from '@syncfusion/ej2-base';\nimport { RibbonGroup } from './ribbon-group';\n/**\n * Defines the ribbon tab.\n */\nvar RibbonTab = /** @class */ (function (_super) {\n __extends(RibbonTab, _super);\n function RibbonTab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of tab.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n RibbonTab.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"cssClass\", void 0);\n __decorate([\n Collection([], RibbonGroup)\n ], RibbonTab.prototype, \"groups\", void 0);\n __decorate([\n Property('')\n ], RibbonTab.prototype, \"header\", void 0);\n return RibbonTab;\n}(ChildProperty));\nexport { RibbonTab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { MenuAnimationSettings, MenuItem } from '@syncfusion/ej2-navigations';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar FileMenuSettings = /** @class */ (function (_super) {\n __extends(FileMenuSettings, _super);\n function FileMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of FileMenu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n FileMenuSettings.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], FileMenuSettings.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"visible\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], FileMenuSettings.prototype, \"menuItems\", void 0);\n __decorate([\n Property(false)\n ], FileMenuSettings.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Complex({}, MenuAnimationSettings)\n ], FileMenuSettings.prototype, \"animationSettings\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('')\n ], FileMenuSettings.prototype, \"popupTemplate\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], FileMenuSettings.prototype, \"ribbonTooltipSettings\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], FileMenuSettings.prototype, \"select\", void 0);\n return FileMenuSettings;\n}(ChildProperty));\nexport { FileMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageBackButton = /** @class */ (function (_super) {\n __extends(BackstageBackButton, _super);\n function BackstageBackButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageBackButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(true)\n ], BackstageBackButton.prototype, \"visible\", void 0);\n return BackstageBackButton;\n}(ChildProperty));\nexport { BackstageBackButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Event } from '@syncfusion/ej2-base';\n/**\n * Defines the ribbon backstage back button.\n */\nvar BackstageItem = /** @class */ (function (_super) {\n __extends(BackstageItem, _super);\n function BackstageItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], BackstageItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], BackstageItem.prototype, \"isFooter\", void 0);\n __decorate([\n Event()\n ], BackstageItem.prototype, \"backStageItemClick\", void 0);\n return BackstageItem;\n}(ChildProperty));\nexport { BackstageItem };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { BackstageBackButton } from './ribbon-back-button';\nimport { BackstageItem } from './ribbon-backstage-item';\nimport { RibbonTooltip } from './ribbon-tooltip';\n/**\n * Defines the ribbon file menu settings.\n */\nvar BackStageMenu = /** @class */ (function (_super) {\n __extends(BackStageMenu, _super);\n function BackStageMenu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {Object} prop - Gets the property of Backstage Menu.\n * @param {boolean} muteOnChange - Gets the boolean value of muteOnChange.\n * @returns {void}\n * @private\n */\n BackStageMenu.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n };\n __decorate([\n Property('File')\n ], BackStageMenu.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], BackStageMenu.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], BackStageMenu.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], BackStageMenu.prototype, \"target\", void 0);\n __decorate([\n Complex({}, BackstageBackButton)\n ], BackStageMenu.prototype, \"backButton\", void 0);\n __decorate([\n Collection([], BackstageItem)\n ], BackStageMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], BackStageMenu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, RibbonTooltip)\n ], BackStageMenu.prototype, \"ribbonTooltipSettings\", void 0);\n return BackStageMenu;\n}(ChildProperty));\nexport { BackStageMenu };\n","/**\n * Specifies the File Manager internal ID's\n */\n/** @hidden */\nexport var ITEM_VERTICAL_CENTER = 'e-ribbon-vertical-center';\n/** @hidden */\nexport var EXPAND_COLLAPSE_ICON = 'e-icons e-drop-icon';\n/** @hidden */\nexport var BACKSTAGE_CLOSE_ICON = 'e-icons e-arrow-left';\n/** @hidden */\nexport var OVERFLOW_ICON = 'e-icons e-more-horizontal-1';\n/** @hidden */\nexport var VERTICAL_DDB = 'e-vertical';\n/** @hidden */\nexport var DISABLED_CSS = 'e-disabled';\n/** @hidden */\nexport var RTL_CSS = 'e-rtl';\n/** @hidden */\nexport var RIBBON_HOVER = 'e-ribbon-hover';\n/** @hidden */\nexport var RIBBON_CONTROL = 'e-ribbon-control';\n/** @hidden */\nexport var RIBBON_POPUP_CONTROL = 'e-ribbon-popup-control';\n/** @hidden */\nexport var RIBBON_POPUP_OPEN = 'e-ribbon-open';\n/** @hidden */\nexport var SPACE = ' ';\n/** @hidden */\nexport var HORIZONTAL_SCROLLBAR = 'e-hscroll-bar';\n/** @hidden */\nexport var HIDE_CSS = 'e-ribbon-hide';\n/** @hidden */\nexport var RIBBON_TAB = 'e-ribbon-tab';\n/** @hidden */\nexport var RIBBON_TAB_ACTIVE = 'e-ribbon-active';\n/** @hidden */\nexport var RIBBON_TAB_ITEM = 'e-ribbon-tab-item';\n/** @hidden */\nexport var RIBBON_COLLAPSE_BUTTON = 'e-ribbon-collapse-btn';\n/** @hidden */\nexport var RIBBON_EXPAND_BUTTON = 'e-ribbon-expand-btn';\n/** @hidden */\nexport var RIBBON_COLLAPSIBLE = 'e-ribbon-collapsible';\n/** @hidden */\nexport var RIBBON_OVERALL_OF_BUTTON = 'e-ribbon-overall-of-btn';\n/** @hidden */\nexport var RIBBON_GROUP_OF_BUTTON = 'e-ribbon-group-of-btn';\n/** @hidden */\nexport var RIBBON_OVERFLOW_TARGET = 'e-ribbon-overflow-target';\n/** @hidden */\nexport var RIBBON_OVERFLOW = 'e-ribbon-overflow';\n/** @hidden */\nexport var TAB_CONTENT = 'e-content';\n/** @hidden */\nexport var RIBBON_MINIMIZE = 'e-ribbon-minimize';\n/** @hidden */\nexport var RIBBON_GROUP = 'e-ribbon-group';\n/** @hidden */\nexport var RIBBON_SINGLE_BUTTON_SELECTION = 'e-ribbon-single-selection';\n/** @hidden */\nexport var RIBBON_MULTIPLE_BUTTON_SELECTION = 'e-ribbon-multiple-selection';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON = 'e-ribbon-group-button';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_OVERFLOW_POPUP = 'e-ribbon-group-button-overflow-popup';\n/** @hidden */\nexport var RIBBON_GROUP_CONTAINER = 'e-ribbon-group-container';\n/** @hidden */\nexport var RIBBON_OF_TAB_CONTAINER = 'e-ribbon-of-tab';\n/** @hidden */\nexport var RIBBON_OF_GROUP_CONTAINER = 'e-ribbon-of-group-container';\n/** @hidden */\nexport var RIBBON_GROUP_CONTENT = 'e-ribbon-group-content';\n/** @hidden */\nexport var RIBBON_GROUP_HEADER = 'e-ribbon-group-header';\n/** @hidden */\nexport var RIBBON_OVERFLOW_HEADER = 'e-ribbon-overflow-header';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW = 'e-ribbon-group-overflow';\n/** @hidden */\nexport var RIBBON_GROUP_OVERFLOW_DDB = 'e-ribbon-group-overflow-ddb';\n/** @hidden */\nexport var RIBBON_LAUNCHER = 'e-ribbon-launcher';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON_ELE = 'e-ribbon-launcher-icon';\n/** @hidden */\nexport var RIBBON_LAUNCHER_ICON = 'e-icons e-launcher';\n/** @hidden */\nexport var RIBBON_COLLECTION = 'e-ribbon-collection';\n/** @hidden */\nexport var RIBBON_ITEM = 'e-ribbon-item';\n/** @hidden */\nexport var RIBBON_ROW = 'e-ribbon-row';\n/** @hidden */\nexport var RIBBON_COLUMN = 'e-ribbon-column';\n/** @hidden */\nexport var RIBBON_LARGE_ITEM = 'e-ribbon-large-item';\n/** @hidden */\nexport var RIBBON_MEDIUM_ITEM = 'e-ribbon-medium-item';\n/** @hidden */\nexport var RIBBON_SMALL_ITEM = 'e-ribbon-small-item';\n/** @hidden */\nexport var RIBBON_CONTENT_HEIGHT = 'e-ribbon-content-height';\n/** @hidden */\nexport var DROPDOWNBUTTON = 'e-dropdown-btn';\n/** @hidden */\nexport var DROPDOWNBUTTON_HIDE = 'e-caret-hide';\n/** @hidden */\nexport var RIBBON_TEMPLATE = 'e-ribbon-template';\n/** @hidden */\nexport var RIBBON_HELP_TEMPLATE = 'e-ribbon-help-template';\n/** @hidden */\nexport var RIBBON_TOOLTIP = 'e-ribbon-tooltip';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TARGET = 'e-ribbon-tooltip-target';\n/** @hidden */\nexport var RIBBON_TOOLTIP_TITLE = 'e-ribbon-tooltip-title';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTENT = 'e-ribbon-tooltip-content';\n/** @hidden */\nexport var RIBBON_TOOLTIP_ICON = 'e-ribbon-tooltip-icon';\n/** @hidden */\nexport var RIBBON_TOOLTIP_CONTAINER = 'e-ribbon-tooltip-container';\n/** @hidden */\nexport var RIBBON_TEXT_CONTAINER = 'e-ribbon-text-container';\n/** @hidden */\nexport var RIBBON_SIMPLIFIED_MODE = 'e-ribbon-simplified-mode';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP = 'e-ribbon-backstage-popup';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_OPEN = 'e-ribbon-backstage-open';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_CONTENT = 'e-ribbon-backstage-content';\n/** @hidden */\nexport var RIBBON_SELECTED_CONTENT = 'e-ribbon-selected-content';\n/** @hidden */\nexport var RIBBON_BACKSTAGE = 'e-ribbon-backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU = 'e-ribbon-backstage-menu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEMPLATE = 'e-ribbon-backstage-template';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_WRAPPER = 'e-ribbon-backstage-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_ITEMS_WRAPPER = 'e-ribbon-backstage-items-wrapper';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_TEXT_MENU = 'e-blankicon';\n/** @hidden */\nexport var TAB_ID = '_tab';\n/** @hidden */\nexport var GROUP_ID = '_group';\n/** @hidden */\nexport var COLLECTION_ID = '_collection';\n/** @hidden */\nexport var ITEM_ID = '_item';\n/** @hidden */\nexport var COLLAPSE_BUTTON_ID = '_collapsebutton';\n/** @hidden */\nexport var OVRLOF_BUTTON_ID = '_sim_ovrl_overflow';\n/** @hidden */\nexport var GROUPOF_BUTTON_ID = '_sim_grp_overflow';\n/** @hidden */\nexport var HEADER_ID = '_header';\n/** @hidden */\nexport var LAUNCHER_ID = '_launcher';\n/** @hidden */\nexport var CONTENT_ID = '_content';\n/** @hidden */\nexport var CONTAINER_ID = '_container';\n/** @hidden */\nexport var OVERFLOW_ID = '_overflow';\n/** @hidden */\nexport var DROPDOWN_ID = '_dropdown';\n/** @hidden */\nexport var RIBBON_FILE_MENU_ID = '_filemenu';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_MENU_ID = '_backstage';\n/** @hidden */\nexport var RIBBON_BACKSTAGE_POPUP_ID = '_backstagepopup';\n/** @hidden */\nexport var RIBBON_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_MENU_LIST = '_menulist';\n/** @hidden */\nexport var RIBBON_FOOTER_MENU_LIST = '_footermenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\n/** @hidden */\nexport var RIBBON_GROUP_BUTTON_ID = '_grpbtn';\n/** @hidden */\nexport var RIBBON_FILE_MENU_WIDTH = '--fileMenuWidth';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_WIDTH = '--helpTemplateWidth';\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_POPUP_CONTROL, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonButton = /** @class */ (function () {\n function RibbonButton(parent) {\n this.parent = parent;\n }\n RibbonButton.prototype.getModuleName = function () {\n return 'ribbonButton';\n };\n RibbonButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates button.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.createButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var btnSettings = item.buttonSettings;\n new Button({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n iconCss: btnSettings.iconCss,\n disabled: item.disabled,\n cssClass: (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (btnSettings.cssClass ? btnSettings.cssClass : '')).trim(),\n content: item.activeSize === RibbonItemSize.Small ? '' : btnSettings.content,\n isPrimary: btnSettings.isPrimary,\n isToggle: btnSettings.isToggle,\n created: btnSettings.created\n }, buttonEle);\n if (btnSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, btnSettings.htmlAttributes);\n }\n buttonEle.onclick = function (e) {\n if (btnSettings.clicked) {\n btnSettings.clicked.call(_this, e);\n }\n };\n buttonEle.setAttribute('aria-label', btnSettings.content);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n buttonEle.setAttribute('data-control', item.type.toString());\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({ cssClass: buttonObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var buttonEle = itemEle.querySelector('#' + item.id);\n var buttonObj = getComponent(buttonEle, Button);\n var cssClass = buttonObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n buttonObj.setProperties({ cssClass: cssClass.join(SPACE) });\n buttonEle.onclick = function (e) {\n if (item.buttonSettings.clicked) {\n item.buttonSettings.clicked.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the button.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonButton.prototype.click = function (controlId) {\n var buttonEle = getItemElement(this.parent, controlId);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.click();\n };\n /**\n * Updates the button properties.\n *\n * @param {RibbonButtonSettingsModel} prop - Gets the button property.\n * @param {string} id - Gets the ID of button item.\n * @returns {void}\n */\n RibbonButton.prototype.updateButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.buttonSettings, prop);\n var buttonEle = getItemElement(this.parent, id, itemProp);\n if (!buttonEle) {\n return;\n }\n var buttonObj = getComponent(buttonEle, Button);\n if (prop.isToggle) {\n buttonEle.classList.add('e-active');\n }\n if (prop.cssClass) {\n prop.cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n buttonEle.setAttribute('aria-label', prop.content);\n }\n delete prop.clicked;\n buttonObj.setProperties(prop);\n };\n /**\n * Updates the button size.\n *\n * @param {HTMLElement} element - Gets the button element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonButton.prototype.updateButtonSize = function (element, item) {\n var buttonObj = getComponent(element, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : item.buttonSettings.content\n });\n };\n return RibbonButton;\n}());\nexport { RibbonButton };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonCheckBox = /** @class */ (function () {\n function RibbonCheckBox(parent) {\n this.parent = parent;\n }\n RibbonCheckBox.prototype.getModuleName = function () {\n return 'ribbonCheckBox';\n };\n RibbonCheckBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the check box.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.createCheckBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var checkBoxSettings = item.checkBoxSettings;\n new CheckBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n checked: checkBoxSettings.checked,\n cssClass: (RIBBON_CONTROL + SPACE + (checkBoxSettings.cssClass ? checkBoxSettings.cssClass : '')).trim(),\n label: checkBoxSettings.label,\n labelPosition: checkBoxSettings.labelPosition,\n disabled: item.disabled,\n created: checkBoxSettings.created,\n htmlAttributes: checkBoxSettings.htmlAttributes,\n change: function (e) {\n if (checkBoxSettings.change) {\n checkBoxSettings.change.call(_this, e);\n }\n }\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.cssClass = checkBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n overflowButton.toggle();\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonCheckBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var checkBoxObj = getComponent(inputEle, CheckBox);\n var cssClass = checkBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n checkBoxObj.cssClass = cssClass.join(SPACE);\n checkBoxObj.dataBind();\n checkBoxObj.change = function (e) {\n if (item.checkBoxSettings.change) {\n item.checkBoxSettings.change.call(_this, e);\n }\n };\n };\n /**\n * Triggers the click action on the Checkbox.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonCheckBox.prototype.click = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n if (!inputEle) {\n return;\n }\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.click();\n };\n /**\n * Updates the checkbox.\n *\n * @param {RibbonCheckBoxSettingsModel} prop - Gets the checkbox property.\n * @param {string} id - Gets the ID of checkbox.\n * @returns {void}\n */\n RibbonCheckBox.prototype.updateCheckBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.change;\n var checkBoxObj = getComponent(inputEle, CheckBox);\n checkBoxObj.setProperties(prop);\n };\n return RibbonCheckBox;\n}());\nexport { RibbonCheckBox };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { getItem, getItemElement, setCustomAttributes } from '../base/index';\nimport { RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonColorPicker = /** @class */ (function () {\n function RibbonColorPicker(parent) {\n this.parent = parent;\n }\n RibbonColorPicker.prototype.getModuleName = function () {\n return 'ribbonColorPicker';\n };\n RibbonColorPicker.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the colorpicker.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.createColorPicker = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var colorPickerSettings = item.colorPickerSettings;\n var colorPicker = new ColorPicker({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n columns: colorPickerSettings.columns,\n cssClass: (RIBBON_CONTROL + SPACE + (colorPickerSettings.cssClass ? colorPickerSettings.cssClass : '')).trim(),\n disabled: item.disabled,\n enableOpacity: colorPickerSettings.enableOpacity,\n mode: colorPickerSettings.mode,\n modeSwitcher: colorPickerSettings.modeSwitcher,\n noColor: colorPickerSettings.noColor,\n presetColors: colorPickerSettings.presetColors,\n showButtons: colorPickerSettings.showButtons,\n value: colorPickerSettings.value,\n beforeClose: function () {\n colorPicker.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.beforeClose) {\n colorPickerSettings.beforeClose.call(_this);\n }\n },\n beforeOpen: colorPickerSettings.beforeOpen,\n beforeTileRender: colorPickerSettings.beforeTileRender,\n created: colorPickerSettings.created,\n change: colorPickerSettings.change,\n open: function () {\n colorPicker.element.parentElement.classList.add(RIBBON_POPUP_OPEN);\n if (colorPickerSettings.open) {\n colorPickerSettings.open.call(_this);\n }\n },\n select: colorPickerSettings.select\n }, inputEle);\n if (colorPickerSettings.htmlAttributes) {\n setCustomAttributes(inputEle, colorPickerSettings.htmlAttributes);\n }\n var wrapper = colorPicker.element.parentElement;\n EventHandler.add(wrapper, 'mouseenter', this.toggleWrapperHover.bind(this, wrapper, true), this);\n EventHandler.add(wrapper, 'mouseleave', this.toggleWrapperHover.bind(this, wrapper, false), this);\n };\n RibbonColorPicker.prototype.toggleWrapperHover = function (wrapper, isAdd) {\n if (isAdd) {\n wrapper.classList.add(RIBBON_HOVER);\n }\n else {\n wrapper.classList.remove(RIBBON_HOVER);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n colorPickerEle.setAttribute('data-control', item.type.toString());\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n colorPickerObj.setProperties({ cssClass: colorPickerObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n var splitBtn = colorPickerObj['splitBtn'];\n var target;\n colorPickerObj.beforeClose = function (e) {\n target = e.event ? e.event.target : null;\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n splitBtn.close = function () {\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var colorPickerEle = itemEle.querySelector('#' + item.id);\n var colorPickerObj = getComponent(colorPickerEle, ColorPicker);\n var cssClass = colorPickerObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n colorPickerObj.setProperties({ cssClass: cssClass.join(SPACE) });\n var splitBtn = colorPickerObj['splitBtn'];\n //Accessing the private property 'splitBtn' of ColorPicker component to get the colorpicker instance as there is no close event in colorpicker.\n splitBtn.close = null;\n colorPickerObj.beforeClose = function () {\n colorPickerObj.element.parentElement.classList.remove(RIBBON_POPUP_OPEN);\n if (item.colorPickerSettings.beforeClose) {\n item.colorPickerSettings.beforeClose.call(_this);\n }\n };\n };\n RibbonColorPicker.prototype.getColorPickerObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ColorPicker) : null;\n };\n /**\n * Gets color value in specified type.\n *\n * @param {string} controlId -Gets the control ID.\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @returns {string} - Returns string.\n */\n RibbonColorPicker.prototype.getValue = function (controlId, value, type) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n return colorPickerObj ? colorPickerObj.getValue(value, type) : '';\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @param {string} controlId - set the id of the control.\n * @returns {void} - Returns void.\n */\n RibbonColorPicker.prototype.toggle = function (controlId) {\n var colorPickerObj = this.getColorPickerObj(controlId);\n if (!colorPickerObj) {\n return;\n }\n colorPickerObj.toggle();\n };\n /**\n * Updates the colorpicker properties.\n *\n * @param {RibbonColorPickerSettingsModel} prop - Gets the colorpicker property.\n * @param {string} id - Gets the ID of colorpicker.\n * @returns {void}\n */\n RibbonColorPicker.prototype.updateColorPicker = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.checkBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.beforeClose;\n delete prop.open;\n var colorPickerObj = getComponent(inputEle, ColorPicker);\n colorPickerObj.setProperties(prop);\n };\n /**\n * @param {HTMLElement} element - Gets the colorpicker element to be destroyed.\n * @returns {void}\n * @hidden\n */\n RibbonColorPicker.prototype.unwireColorPickerEvents = function (element) {\n var colorPickerObj = getComponent(element, ColorPicker);\n var wrapper = colorPickerObj.element.parentElement;\n EventHandler.remove(wrapper, 'mouseenter', this.toggleWrapperHover);\n EventHandler.remove(wrapper, 'mouseleave', this.toggleWrapperHover);\n };\n return RibbonColorPicker;\n}());\nexport { RibbonColorPicker };\n","import { getComponent, merge } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { getItem, getItemElement, RIBBON_CONTROL, SPACE, RIBBON_POPUP_CONTROL } from '../base/index';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonComboBox = /** @class */ (function () {\n function RibbonComboBox(parent) {\n this.parent = parent;\n }\n RibbonComboBox.prototype.getModuleName = function () {\n return 'ribbonComboBox';\n };\n RibbonComboBox.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates the combobox.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.createComboBox = function (item, itemEle) {\n var _this = this;\n var inputEle = this.parent.createElement('input', {\n id: item.id\n });\n itemEle.appendChild(inputEle);\n var comboBoxSettings = item.comboBoxSettings;\n new ComboBox({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n allowCustom: false,\n floatLabelType: 'Never',\n ignoreAccent: true,\n ignoreCase: true,\n allowFiltering: comboBoxSettings.allowFiltering,\n autofill: comboBoxSettings.autofill,\n cssClass: (RIBBON_CONTROL + SPACE + (comboBoxSettings.cssClass ? comboBoxSettings.cssClass : '')).trim(),\n dataSource: comboBoxSettings.dataSource,\n enabled: !item.disabled,\n fields: comboBoxSettings.fields,\n filterType: comboBoxSettings.filterType,\n footerTemplate: comboBoxSettings.footerTemplate,\n groupTemplate: comboBoxSettings.groupTemplate,\n headerTemplate: comboBoxSettings.headerTemplate,\n index: comboBoxSettings.index,\n itemTemplate: comboBoxSettings.itemTemplate,\n noRecordsTemplate: comboBoxSettings.noRecordsTemplate,\n placeholder: comboBoxSettings.placeholder,\n popupHeight: comboBoxSettings.popupHeight,\n popupWidth: comboBoxSettings.popupWidth,\n showClearButton: comboBoxSettings.showClearButton,\n sortOrder: comboBoxSettings.sortOrder,\n text: comboBoxSettings.text,\n value: comboBoxSettings.value,\n width: comboBoxSettings.width,\n beforeOpen: comboBoxSettings.beforeOpen,\n open: comboBoxSettings.open,\n htmlAttributes: comboBoxSettings.htmlAttributes,\n close: function (e) {\n if (comboBoxSettings.close) {\n comboBoxSettings.close.call(_this, e);\n }\n },\n filtering: comboBoxSettings.filtering,\n change: comboBoxSettings.change,\n select: comboBoxSettings.select,\n created: comboBoxSettings.created\n }, inputEle);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n inputEle.setAttribute('data-control', item.type.toString());\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties({ cssClass: comboBoxObj.cssClass + SPACE + RIBBON_POPUP_CONTROL });\n comboBoxObj.close = function (e) {\n var target = e.event ? e.event.target : null;\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var inputEle = itemEle.querySelector('#' + item.id);\n var comboBoxObj = getComponent(inputEle, ComboBox);\n var cssClass = comboBoxObj.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n comboBoxObj.setProperties({ cssClass: cssClass.join(SPACE) });\n comboBoxObj.close = function (e) {\n if (item.comboBoxSettings.close) {\n item.comboBoxSettings.close.call(_this, e);\n }\n };\n };\n RibbonComboBox.prototype.getComboBoxObj = function (controlId) {\n var inputEle = getItemElement(this.parent, controlId);\n return inputEle ? getComponent(inputEle, ComboBox) : null;\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {string } controlId - set the id of the control in which methods needs to be called.\n * @param {Object[] } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n RibbonComboBox.prototype.filter = function (controlId, dataSource, query, fields) {\n this.getComboBoxObj(controlId).filter(dataSource, query, fields);\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.hidePopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.hidePopup();\n };\n /**\n * To open/close DropDownButton popup based on current state of the combobox.\n *\n * @param {string} controlId - Gets the id of the control.\n * @returns {void}\n */\n RibbonComboBox.prototype.showPopup = function (controlId) {\n var comboBoxObj = this.getComboBoxObj(controlId);\n if (!comboBoxObj) {\n return;\n }\n comboBoxObj.showPopup();\n };\n /**\n * Updates the combobox properties.\n *\n * @param {RibbonComboBoxSettingsModel} prop - Gets the combobox property.\n * @param {string} id - Gets the ID of combobox.\n * @returns {void}\n */\n RibbonComboBox.prototype.updateComboBox = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.comboBoxSettings, prop);\n var inputEle = getItemElement(this.parent, id, itemProp);\n if (!inputEle) {\n return;\n }\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + prop.cssClass).trim();\n }\n delete prop.close;\n var comboBoxObj = getComponent(inputEle, ComboBox);\n comboBoxObj.setProperties(prop);\n };\n return RibbonComboBox;\n}());\nexport { RibbonComboBox };\n","import { closest, getComponent, isNullOrUndefined, merge, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getItem, getItemElement, RibbonItemSize, createTooltip, setCustomAttributes } from '../base/index';\nimport { DROPDOWN_ID, ITEM_VERTICAL_CENTER, OVERFLOW_ID, RIBBON_CONTROL, RIBBON_GROUP_OVERFLOW_DDB, RIBBON_POPUP_CONTROL, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonDropDown = /** @class */ (function () {\n function RibbonDropDown(parent) {\n this.parent = parent;\n }\n RibbonDropDown.prototype.getModuleName = function () {\n return 'ribbonDropDown';\n };\n RibbonDropDown.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createDropDown = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var dropDownSettings = item.dropDownSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (dropDownSettings.cssClass ?\n dropDownSettings.cssClass : '')).trim();\n new DropDownButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: dropDownSettings.closeActionEvents,\n content: item.activeSize === RibbonItemSize.Small ? '' : dropDownSettings.content,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: dropDownSettings.iconCss,\n items: dropDownSettings.items,\n target: dropDownSettings.target,\n createPopupOnClick: dropDownSettings.createPopupOnClick,\n beforeClose: function (e) {\n if (dropDownSettings.beforeClose) {\n dropDownSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: dropDownSettings.beforeItemRender,\n beforeOpen: dropDownSettings.beforeOpen,\n close: function (e) {\n if (dropDownSettings.close) {\n dropDownSettings.close.call(_this, e);\n }\n },\n created: dropDownSettings.created,\n open: dropDownSettings.open,\n select: dropDownSettings.select\n }).appendTo(buttonEle);\n if (dropDownSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, dropDownSettings.htmlAttributes);\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n dropdownElement.setAttribute('data-control', item.type.toString());\n var dropdown = getComponent(dropdownElement, DropDownButton);\n dropdown.cssClass = dropdown.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n dropdown.dataBind();\n var target;\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var dropdownElement = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var cssClass = dropdown.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n dropdown.cssClass = cssClass.join(SPACE);\n dropdown.dataBind();\n dropdown.close = function (e) {\n if (item.dropDownSettings.close) {\n item.dropDownSettings.close.call(_this, e);\n }\n };\n dropdown.beforeClose = function (e) {\n if (item.dropDownSettings.beforeClose) {\n item.dropDownSettings.beforeClose.call(_this, e);\n }\n };\n };\n /**\n * Creates Overflow DropDown.\n *\n * @param {string} id - Gets the ID of the dropdown item.\n * @param {string} name - Gets the name of the dropdown item.\n * @param {string} iconCss - Gets the icon of the dropdown item.\n * @param {HTMLElement} groupEle - Gets the overflow group element.\n * @param {HTMLElement} overflowEle - Gets the overflow element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.createOverFlowDropDown = function (id, name, iconCss, groupEle, overflowEle, enableRtl) {\n var _this = this;\n this.enableRtl = enableRtl;\n var buttonEle = this.parent.createElement('button', {\n id: id + OVERFLOW_ID + DROPDOWN_ID\n });\n groupEle.setAttribute('tabindex', '0');\n overflowEle.appendChild(buttonEle);\n var dropdown = new DropDownButton({\n iconCss: iconCss,\n target: groupEle,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n cssClass: VERTICAL_DDB + SPACE + RIBBON_GROUP_OVERFLOW_DDB,\n iconPosition: 'Top',\n content: name,\n beforeClose: function (args) {\n args.cancel = !isNullOrUndefined(args.event && closest(args.event.target, '.' + RIBBON_POPUP_CONTROL));\n }\n }, buttonEle);\n createTooltip(groupEle, this.parent);\n buttonEle.onclick = buttonEle.onkeydown = function () { _this.itemIndex = 0; };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n groupEle.onkeydown = function (e) { _this.keyActionHandler(e, groupEle), _this; };\n return dropdown;\n };\n RibbonDropDown.prototype.keyActionHandler = function (e, target) {\n var items = target.querySelectorAll('.e-control');\n var comboBoxElements = target.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < items.length; i++) {\n if (items[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (items[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.itemIndex = i;\n }\n }\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {\n if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, !this.enableRtl, items);\n }\n if (e.key === 'ArrowLeft' || (e.shiftKey && e.key === 'Tab')) {\n this.handleNavigation(e, this.enableRtl, items);\n }\n }\n };\n RibbonDropDown.prototype.handleNavigation = function (e, enableRtl, items) {\n if (!(items[0].classList.contains('e-ribbon-first-item'))) {\n items[0].classList.add('e-ribbon-first-item');\n }\n if (!(items[items.length - 1].classList.contains('e-ribbon-last-item'))) {\n items[items.length - 1].classList.add('e-ribbon-last-item');\n }\n if (enableRtl) {\n if (this.itemIndex === 0 && items[parseInt(this.itemIndex.toString(), 10)].classList.contains('e-ribbon-first-item')) {\n this.updateItemIndex(e, items, true);\n }\n if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&\n !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')\n || this.itemIndex !== 0) && e.target.classList.contains('e-control')) {\n this.itemIndex++;\n this.updateItemIndex(e, items, true);\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = 0;\n this.updateItemIndex(e, items, true);\n }\n }\n else {\n if (!e.target.classList.contains('e-combobox') && this.itemIndex !== 0) {\n this.itemIndex--;\n this.updateItemIndex(e, items, false);\n }\n if (e.target.classList.contains('e-ribbon-first-item')) {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (!launcherIcon) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n this.itemIndex = items.length - 1;\n this.updateItemIndex(e, items, false);\n }\n }\n if (e.target.classList.contains('e-combobox') && (e.key === 'Tab')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n }\n }\n };\n RibbonDropDown.prototype.focusLauncherIcon = function (e, items) {\n var groupContainer = items[parseInt(this.itemIndex.toString(), 10)].closest('.e-ribbon-group-container');\n var launcherIconEle;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n return true;\n }\n else {\n return false;\n }\n };\n RibbonDropDown.prototype.updateItemIndex = function (e, items, enableRtl) {\n var ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (enableRtl) {\n if (this.itemIndex < items.length - 1) {\n this.itemIndex++;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = 0;\n }\n }\n else {\n if (this.itemIndex > 0) {\n this.itemIndex--;\n }\n else {\n var launcherIcon = false;\n launcherIcon = this.focusLauncherIcon(e, items);\n if (launcherIcon) {\n break;\n }\n this.itemIndex = items.length - 1;\n }\n }\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(this.itemIndex.toString(), 10)].focus();\n };\n /**\n * Removes Overflow DropDown.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.removeOverFlowDropDown = function (dropdownElement) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdownElement.parentElement.parentElement.insertBefore(dropdown.target, dropdownElement.parentElement);\n dropdown.destroy();\n remove(dropdownElement);\n };\n /**\n * Gets DropDown item element.\n *\n * @param {HTMLElement} dropdownElement - Gets the ribbon DropDown element.\n * @param {string} id - Gets the ID of ribbon DropDown element.\n * @returns {HTMLElement} - Returns the DropDown item element.\n * @hidden\n */\n RibbonDropDown.prototype.getDDBItemElement = function (dropdownElement, id) {\n var dropdown = getComponent(dropdownElement, DropDownButton);\n var dropDownPopup = dropdown.dropDown.element;\n return dropDownPopup.querySelector('#' + id);\n };\n /**\n * Gets Overflow DropDown Popup.\n *\n * @param {itemProps} itemProp - Gets the property of ribbon item.\n * @param {HTMLElement} contentEle - Gets the content element.\n * @returns {HTMLElement} - Returns the Overflow DropDown Popup.\n * @hidden\n */\n RibbonDropDown.prototype.getOverflowDropDownPopup = function (itemProp, contentEle) {\n var dropdownElement = contentEle.querySelector('#' + this.parent.tabs[itemProp.tabIndex].groups[itemProp.groupIndex].id + OVERFLOW_ID + DROPDOWN_ID);\n var dropdown = getComponent(dropdownElement, DropDownButton);\n return dropdown.dropDown.element;\n };\n RibbonDropDown.prototype.getDropDownObj = function (controlId) {\n var dropDownEle = getItemElement(this.parent, controlId);\n return dropDownEle ? getComponent(dropDownEle, DropDownButton) : null;\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the DropDown items.\n * @param {string} text - Gets the text of the dropdown item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonDropDown.prototype.addItems = function (controlId, Items, text) {\n this.getDropDownObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonDropDown.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getDropDownObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonDropDown.prototype.toggle = function (controlId) {\n this.getDropDownObj(controlId).toggle();\n };\n /**\n * Updates the dropdown.\n *\n * @param {RibbonDropDownSettingsModel} prop - Gets the dropdown property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonDropDown.prototype.updateDropDown = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.dropDownSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, DropDownButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.close;\n delete prop.beforeClose;\n if (prop.content) {\n prop.content = itemProp.item.activeSize === RibbonItemSize.Small ? '' : prop.content;\n }\n control.setProperties(prop);\n };\n /**\n * Updated DropDown size\n *\n * @param {HTMLElement} element - Gets the dropdown element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonDropDown.prototype.updateDropDownSize = function (element, item) {\n var control = getComponent(element, DropDownButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n control.setProperties({ content: item.activeSize === RibbonItemSize.Small ? '' : item.dropDownSettings.content });\n };\n return RibbonDropDown;\n}());\nexport { RibbonDropDown };\n","import { EventHandler, getComponent, merge } from '@syncfusion/ej2-base';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { getItem, getItemElement, RibbonItemSize, setCustomAttributes } from '../base/index';\nimport { ITEM_VERTICAL_CENTER, RIBBON_CONTROL, RIBBON_HOVER, RIBBON_POPUP_CONTROL, RIBBON_POPUP_OPEN, SPACE, VERTICAL_DDB } from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonSplitButton = /** @class */ (function () {\n function RibbonSplitButton(parent) {\n this.parent = parent;\n }\n RibbonSplitButton.prototype.getModuleName = function () {\n return 'ribbonSplitButton';\n };\n RibbonSplitButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates SplitButton.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.createSplitButton = function (item, itemEle) {\n var _this = this;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemEle.appendChild(buttonEle);\n var splitButtonSettings = item.splitButtonSettings;\n var cssClass = (ITEM_VERTICAL_CENTER + SPACE + RIBBON_CONTROL + SPACE + (splitButtonSettings.cssClass ?\n splitButtonSettings.cssClass : '')).trim();\n var splitbutton = new SplitButton({\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n closeActionEvents: splitButtonSettings.closeActionEvents,\n cssClass: cssClass + ((item.activeSize === RibbonItemSize.Large) ? (SPACE + VERTICAL_DDB) : ''),\n disabled: item.disabled,\n iconCss: splitButtonSettings.iconCss,\n items: splitButtonSettings.items,\n target: splitButtonSettings.target,\n beforeClose: function (e) {\n if (splitButtonSettings.beforeClose) {\n splitButtonSettings.beforeClose.call(_this, e);\n }\n },\n beforeItemRender: splitButtonSettings.beforeItemRender,\n beforeOpen: splitButtonSettings.beforeOpen,\n close: function () {\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.close) {\n splitButtonSettings.close.call(_this);\n }\n },\n created: splitButtonSettings.created,\n open: function () {\n splitbutton['wrapper'].classList.add(RIBBON_POPUP_OPEN);\n if (splitButtonSettings.open) {\n splitButtonSettings.open.call(_this);\n }\n },\n select: splitButtonSettings.select,\n click: function (e) {\n if (splitButtonSettings.click) {\n splitButtonSettings.click.call(_this, e);\n }\n }\n }, buttonEle);\n if (splitButtonSettings.htmlAttributes) {\n setCustomAttributes(buttonEle, splitButtonSettings.htmlAttributes);\n }\n var dropdownEle = buttonEle.parentElement.querySelector('.e-dropdown-btn');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n this.setContent(item, splitbutton);\n var wrapper = splitbutton['wrapper'];\n EventHandler.add(wrapper, 'mouseenter', function () { wrapper.classList.add(RIBBON_HOVER); }, this);\n EventHandler.add(wrapper, 'mouseleave', function () { wrapper.classList.remove(RIBBON_HOVER); }, this);\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @param {DropDownButton} overflowButton - Gets the overflow button.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n splitButtonEle.setAttribute('data-control', item.type.toString());\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n splitbutton.cssClass = splitbutton.cssClass + SPACE + RIBBON_POPUP_CONTROL;\n splitbutton.dataBind();\n var dropdownEle = splitButtonEle.parentElement.querySelector('.e-dropdown-btn');\n var ddbId = dropdownEle.getAttribute('id');\n var popupEle = document.querySelector('#' + ddbId + '-popup');\n dropdownEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.stopImmediatePropagation();\n dropdownEle.click();\n }\n };\n popupEle.onkeydown = function (e) {\n if (e.key === 'Enter') {\n e.preventDefault();\n splitbutton['wrapper'].classList.remove('e-ribbon-open');\n popupEle.querySelector('.e-focused').click();\n }\n };\n var target;\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n target = e.event ? e.event.target : null;\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n overflowButton.toggle();\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n if (target && !target.closest('.e-ribbon-group-overflow-ddb')) {\n overflowButton.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved from overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var splitButtonEle = itemEle.querySelector('#' + item.id);\n var splitbutton = getComponent(splitButtonEle, SplitButton);\n var cssClass = splitbutton.cssClass.split(SPACE);\n cssClass = cssClass.filter(function (value) { return value !== RIBBON_POPUP_CONTROL; });\n splitbutton.cssClass = cssClass.join(SPACE);\n splitbutton.dataBind();\n splitbutton.beforeClose = function (e) {\n if (item.splitButtonSettings.beforeClose) {\n item.splitButtonSettings.beforeClose.call(_this, e);\n }\n };\n splitbutton.click = function (e) {\n if (item.splitButtonSettings.click) {\n item.splitButtonSettings.click.call(_this, e);\n }\n };\n splitbutton.close = function (e) {\n if (item.splitButtonSettings.close) {\n item.splitButtonSettings.close.call(_this, e);\n }\n splitbutton['wrapper'].classList.remove(RIBBON_POPUP_OPEN);\n };\n };\n RibbonSplitButton.prototype.setContent = function (item, control) {\n control['primaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Medium) ? item.splitButtonSettings.content : '' });\n control['secondaryBtnObj'].setProperties({ content: (item.activeSize === RibbonItemSize.Large) ? item.splitButtonSettings.content : '' });\n };\n RibbonSplitButton.prototype.getSplitButtonObj = function (controlId) {\n var splitButtonEle = getItemElement(this.parent, controlId);\n return getComponent(splitButtonEle, SplitButton);\n };\n /**\n * Adds a new item to the menu. By default, new item appends to\n * the list as the last item, but you can insert based on the text parameter.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {ItemModel[]} Items - Gets the SplitButton items.\n * @param {string} text - Gets the text of the splitbutton item where the new item needs to be inserted.\n * @returns {void}\n */\n RibbonSplitButton.prototype.addItems = function (controlId, Items, text) {\n this.getSplitButtonObj(controlId).addItems(Items, text);\n };\n /**\n * Removes the items from the menu.\n *\n * @param {string} controlId - Gets the control ID.\n * @param {string[]} Items -\n * @param {string} isUniqueId -\n * @returns {void}\n */\n RibbonSplitButton.prototype.removeItems = function (controlId, Items, isUniqueId) {\n this.getSplitButtonObj(controlId).removeItems(Items, isUniqueId);\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @param {string} controlId - Gets the control ID.\n * @returns {void}\n */\n RibbonSplitButton.prototype.toggle = function (controlId) {\n this.getSplitButtonObj(controlId).toggle();\n };\n /**\n * Updates the splitbutton.\n *\n * @param {RibbonSplitButtonSettingsModel} prop - Gets the splitbutton property.\n * @param {string} id - Gets the ID of dropdown.\n * @returns {void}\n */\n RibbonSplitButton.prototype.updateSplitButton = function (prop, id) {\n var itemProp = getItem(this.parent.tabs, id);\n if (!itemProp) {\n return;\n }\n merge(itemProp.item.splitButtonSettings, prop);\n var btnEle = getItemElement(this.parent, id, itemProp);\n if (!btnEle) {\n return;\n }\n var control = getComponent(btnEle, SplitButton);\n if (prop.cssClass) {\n prop.cssClass = (RIBBON_CONTROL + SPACE + ITEM_VERTICAL_CENTER + SPACE + prop.cssClass).trim();\n prop.cssClass = itemProp.item.activeSize === RibbonItemSize.Large ?\n (VERTICAL_DDB + SPACE + prop.cssClass).trim() : prop.cssClass;\n control.cssClass = prop.cssClass;\n }\n delete prop.open;\n delete prop.click;\n delete prop.close;\n delete prop.beforeClose;\n control.setProperties(prop);\n if (prop.content) {\n this.setContent(itemProp.item, control);\n }\n };\n /**\n * Updated SplitButton size\n *\n * @param {HTMLElement} element - Gets the splibutton element.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n * @hidden\n */\n RibbonSplitButton.prototype.updateSplitButtonSize = function (element, item) {\n var control = getComponent(element, SplitButton);\n var cssClass = control.cssClass.split(SPACE);\n if (item.activeSize === RibbonItemSize.Large) {\n cssClass.push(VERTICAL_DDB);\n }\n else {\n cssClass = cssClass.filter(function (value) { return value !== VERTICAL_DDB; });\n }\n control.cssClass = cssClass.join(SPACE);\n control.setProperties({ iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left' });\n this.setContent(item, control);\n };\n return RibbonSplitButton;\n}());\nexport { RibbonSplitButton };\n","import { EventHandler, getComponent, remove } from '@syncfusion/ej2-base';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { RibbonGroupButtonSelection, RibbonItemSize } from '../base/interface';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { createTooltip, isTooltipPresent, setCustomAttributes } from '../base/utils';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonGroupButton = /** @class */ (function () {\n function RibbonGroupButton(parent) {\n this.parent = parent;\n this.isSelected = false;\n }\n RibbonGroupButton.prototype.getModuleName = function () {\n return 'ribbonGroupButton';\n };\n RibbonGroupButton.prototype.destroy = function () {\n this.parent = null;\n };\n /**\n * Creates Group Button\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.createGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n this.count = 0;\n var btnContainerEle = this.parent.createElement('div', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID,\n className: 'e-btn-group'\n });\n itemElement.appendChild(btnContainerEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if ((groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss)) {\n var groupButtonEle = this.parent.createElement('button', {\n id: item.id + constants.RIBBON_GROUP_BUTTON_ID + i,\n className: constants.RIBBON_GROUP_BUTTON\n });\n btnContainerEle.appendChild(groupButtonEle);\n new Button({\n iconCss: groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss,\n disabled: item.disabled,\n enableRtl: this.parent.enableRtl,\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content,\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left'\n }, groupButtonEle);\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes) {\n setCustomAttributes(groupButtonEle, groupBtnSettings.items[parseInt(i.toString(), 10)].htmlAttributes);\n }\n var buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n btnContainerEle.classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n else {\n btnContainerEle.classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].selected) {\n if (groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n buttonEle.classList.add('e-active');\n }\n else {\n if (this.count < 1) {\n buttonEle.classList.add('e-active');\n this.count++;\n }\n }\n }\n if (groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings &&\n isTooltipPresent(groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings)) {\n groupButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({\n id: groupButtonEle.id, data: groupBtnSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings\n });\n }\n EventHandler.add(buttonEle, 'click', this.groupButtonClicked.bind(this, i, item, groupBtnSettings), this);\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = void 0;\n var activeEleCount = 0;\n var count = 0;\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n !this.isSelected && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n else if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].selected &&\n groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else {\n dropdownIcon = null;\n }\n }\n }\n while (count < item.groupButtonSettings.items.length && !this.isSelected && !dropdownIcon) {\n if (item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss) {\n dropdownIcon = item.groupButtonSettings.items[parseInt(count.toString(), 10)].iconCss;\n this.isSelected = true;\n }\n count++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: btnContainerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n btnContainerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(btnContainerEle, this.parent);\n this.isSelected = false;\n }\n };\n RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {\n var previousItems = [], selectingItems = [], selectedItems = [];\n var groupButtonEle;\n var dropdown;\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n previousItems.push(grpBtnSettings.items[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (!(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n selectingItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs = {\n cancel: false, previousItems: previousItems, selectingItems: selectingItems\n };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].beforeClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n else {\n if (grpBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_MULTIPLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n }\n for (var j = 0; j < grpBtnSettings.items.length; j++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + j).classList.remove('e-active');\n }\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active') && this.parent.activeLayout === 'Simplified') {\n this.grpBtnIndex = itemIndex;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({\n iconCss: grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss\n });\n }\n }\n else {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.contains(constants.RIBBON_SINGLE_BUTTON_SELECTION)) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.remove(constants.RIBBON_SINGLE_BUTTON_SELECTION);\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID).classList.add(constants.RIBBON_MULTIPLE_BUTTON_SELECTION);\n }\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');\n var activeEleCount = 0;\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active') && this.parent.activeLayout === 'Simplified' && n !== itemIndex) {\n this.isSelected = true;\n activeEleCount++;\n }\n }\n if (this.parent.activeLayout === 'Simplified') {\n var dropdownIcon = null;\n var itemsCount = 0;\n groupButtonEle = document.querySelector('#' + item.id);\n dropdown = getComponent(groupButtonEle, DropDownButton);\n if (!this.isSelected) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].iconCss;\n }\n }\n else {\n if (activeEleCount === 1 && !(document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active'))) {\n for (var n = 0; n < grpBtnSettings.items.length; n++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active')) {\n dropdownIcon = grpBtnSettings.items[parseInt(n.toString(), 10)].iconCss;\n }\n }\n }\n }\n while (itemsCount < grpBtnSettings.items.length && !dropdownIcon) {\n if (grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = grpBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n dropdown.setProperties({ iconCss: dropdownIcon });\n this.grpBtnIndex = itemIndex;\n }\n this.isSelected = false;\n }\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {\n selectedItems.push(grpBtnSettings.items[parseInt(itemIndex.toString(), 10)]);\n }\n var eventArgs_1 = { previousItems: previousItems, selectedItems: selectedItems };\n if (grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click) {\n grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].click.call(this, eventArgs_1);\n }\n }\n };\n /**\n * updates group button in mode switching\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemElement - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.switchGroupButton = function (item, itemElement) {\n var _this = this;\n var groupBtnSettings = item.groupButtonSettings;\n var dropdownIcon = null;\n var activeEleCount = 0;\n var itemsCount = 0;\n if (this.parent.activeLayout === 'Simplified') {\n var containerEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n var buttonEle = this.parent.createElement('button', {\n id: item.id\n });\n itemElement.appendChild(buttonEle);\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i)) {\n if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Single) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i).classList.contains('e-active') && groupBtnSettings.selection === RibbonGroupButtonSelection.Multiple) {\n activeEleCount++;\n if (activeEleCount === 1) {\n dropdownIcon = groupBtnSettings.items[parseInt(i.toString(), 10)].iconCss;\n }\n else if (activeEleCount > 1) {\n dropdownIcon = null;\n }\n }\n }\n }\n while (itemsCount < groupBtnSettings.items.length && !dropdownIcon) {\n if (groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss) {\n dropdownIcon = groupBtnSettings.items[parseInt(itemsCount.toString(), 10)].iconCss;\n }\n itemsCount++;\n }\n new DropDownButton({\n iconCss: dropdownIcon,\n target: containerEle,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-dropdown-group-button',\n disabled: item.disabled\n }, buttonEle);\n buttonEle.onclick = buttonEle.onkeydown = function () {\n if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + 0).focus();\n _this.grpBtnIndex = 0;\n }\n };\n containerEle.onkeydown = function (e) {\n if (_this.parent.activeLayout === 'Simplified') {\n _this.handleGroupButtonNavigation(e, item);\n }\n };\n createTooltip(containerEle, this.parent);\n }\n else {\n var groupButtonEle = itemElement.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n itemElement.appendChild(dropdown.target);\n if (groupButtonEle) {\n dropdown.destroy();\n remove(groupButtonEle);\n }\n }\n };\n RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var targetEle = dropdown.target;\n var isOverflowPopup = false;\n if (this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n isOverflowPopup = true;\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n var groupBtnSettings = item.groupButtonSettings;\n if ((e.key === 'ArrowRight' && !isOverflowPopup) || (e.key === 'ArrowDown' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowDown' && isOverflowPopup)) {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n else if ((e.key === 'ArrowLeft' && !isOverflowPopup) || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (!this.parent.enableRtl || (e.key === 'ArrowUp' && isOverflowPopup)) {\n if (this.grpBtnIndex === 0) {\n this.grpBtnIndex = groupBtnSettings.items.length - 1;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex--;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n else {\n this.grpBtnIndex++;\n if (this.grpBtnIndex < groupBtnSettings.items.length) {\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n else {\n this.grpBtnIndex = 0;\n document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + (this.grpBtnIndex)).focus();\n }\n }\n }\n };\n /**\n * Adds the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle) {\n var _this = this;\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n dropdown.setProperties({ cssClass: dropdown.cssClass + constants.SPACE + constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP });\n var targetEle = dropdown.target;\n targetEle.onclick = function () {\n if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {\n dropdown.element.focus();\n dropdown.toggle();\n }\n };\n };\n /**\n * Removes the additional event handlers as the item moved into overflow popup.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {HTMLElement} itemEle - Gets the ribbon item element.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.removeOverFlowEvents = function (item, itemEle) {\n var groupButtonEle = itemEle.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var cssClass = dropdown.cssClass.split(constants.SPACE);\n cssClass = cssClass.filter(function (value) { return value !== constants.RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });\n dropdown.setProperties({ cssClass: cssClass.join(constants.SPACE) });\n }\n };\n /**\n * Removes DropDown.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.destroyDropDown = function (item) {\n var groupButtonEle = document.querySelector('#' + item.id);\n if (groupButtonEle) {\n var dropdown = getComponent(groupButtonEle, DropDownButton);\n var tooltip = getComponent(dropdown.target, Tooltip);\n tooltip.destroy();\n dropdown.destroy();\n remove(groupButtonEle);\n }\n };\n /**\n * Updates the group button size.\n *\n * @param {HTMLElement} itemElement - Gets the group button container element.\n * @param {RibbonItemModel} item - Gets the ribbon item.\n * @returns {void}\n * @hidden\n */\n RibbonGroupButton.prototype.updateGroupButtonSize = function (itemElement, item) {\n var groupBtnSettings = item.groupButtonSettings;\n var buttonEle;\n for (var i = 0; i < groupBtnSettings.items.length; i++) {\n if (this.parent.activeLayout === 'Classic') {\n buttonEle = itemElement.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n else {\n buttonEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n }\n if (buttonEle) {\n var buttonObj = getComponent(buttonEle, Button);\n buttonObj.setProperties({\n iconPosition: item.activeSize === RibbonItemSize.Large ? 'Top' : 'Left',\n content: item.activeSize === RibbonItemSize.Small ? '' : groupBtnSettings.items[parseInt(i.toString(), 10)].content\n });\n }\n }\n };\n return RibbonGroupButton;\n}());\nexport { RibbonGroupButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { addClass, append, Event, Collection, Complex, Component, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';\nimport { Tab, TabAnimationSettings, HScroll, Toolbar } from '@syncfusion/ej2-navigations';\nimport { RibbonTab, FileMenuSettings, BackStageMenu } from '../models/index';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';\nimport { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonGroupButton } from '../items/index';\nimport { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';\nimport * as constants from './constant';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Ribbon Component is a structured layout to manage tools with tabs and groups.\n */\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {RibbonModel} options - Specifies the ribbon model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function Ribbon(options, element) {\n var _this = this;\n Ribbon_1.Inject(RibbonButton, RibbonCheckBox, RibbonDropDown, RibbonSplitButton, RibbonComboBox, RibbonGroupButton);\n _this = _super.call(this, options, element) || this;\n return _this;\n }\n Ribbon_1 = Ribbon;\n /**\n * Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Ribbon.prototype.render = function () {\n this.initialize();\n };\n Ribbon.prototype.preRender = function () {\n this.idIndex = 0;\n this.tooltipData = [];\n this.isAddRemove = false;\n this.keyConfigs = {\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Ribbon.prototype.getPersistData = function () {\n return this.addOnPersist(['activeLayout']);\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Ribbon.prototype.getModuleName = function () {\n return 'ribbon';\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - returns module declaration.\n * @hidden\n */\n Ribbon.prototype.requiredModules = function () {\n var modules = [];\n modules.push({ member: 'ribbonButton', args: [this] }, { member: 'ribbonDropDown', args: [this] }, { member: 'ribbonSplitButton', args: [this] }, { member: 'ribbonCheckBox', args: [this] }, { member: 'ribbonColorPicker', args: [this] }, { member: 'ribbonComboBox', args: [this] }, { member: 'ribbonGroupButton', args: [this] }, { member: 'ribbonFileMenu', args: [this] }, { member: 'ribbonBackstage', args: [this] });\n return modules;\n };\n Ribbon.prototype.initialize = function () {\n this.element.id = this.element.id || getUniqueID('e-' + this.getModuleName());\n addClass([this.element], ['e-rbn'].concat((this.cssClass ? this.cssClass.split(constants.SPACE) : [])));\n if (this.enableRtl) {\n this.element.classList.add(constants.RTL_CSS);\n }\n this.element.style.width = formatUnit(this.width);\n this.renderTabs();\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.createFileMenu(this.fileMenu);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.createBackStage(this.backStageMenu);\n }\n this.createHelpPaneTemplate();\n var toolbar = this.tabObj['tbObj'];\n toolbar.refreshOverflow();\n createTooltip(this.element, this);\n this.wireEvents();\n this.wireKeyboardEvent();\n this.currentControlIndex = 0;\n };\n Ribbon.prototype.wireEvents = function () {\n EventHandler.add(window, 'resize', this.resizeHandler, this);\n };\n Ribbon.prototype.wireKeyboardEvent = function () {\n this.keyboardModuleRibbon = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n Ribbon.prototype.keyActionHandler = function (e) {\n if (((e.key === 'Tab') && (!(e.target.classList.contains('e-tab-wrap')) && !(e.target.classList.contains('e-combobox'))))) {\n e.preventDefault();\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var ribbonControls = activeContent.querySelectorAll('.e-control');\n var comboBoxElements = activeContent.querySelectorAll('.e-combobox');\n var comboBoxEle;\n if (comboBoxElements) {\n for (var i = 0; i < comboBoxElements.length; i++) {\n if (comboBoxElements[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n comboBoxEle = comboBoxElements[parseInt(i.toString(), 10)];\n }\n }\n }\n if (comboBoxEle) {\n for (var i = 0; i < ribbonControls.length; i++) {\n if (ribbonControls[parseInt(i.toString(), 10)].classList.contains('e-combobox')) {\n if (ribbonControls[parseInt(i.toString(), 10)].closest('.e-input-focus')) {\n this.currentControlIndex = i;\n }\n }\n }\n }\n if (this.currentControlIndex === 0) {\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n }\n if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||\n e.target.classList.contains('e-ribbon-collapse-btn') || e.target.classList.contains('e-ribbon-last-item') ||\n e.target.classList.contains('e-ribbon-first-item') || e.target.classList.contains('e-ribbon-group-of-btn') ||\n e.target.classList.contains('e-ribbon-overall-of-btn')) {\n switch (e.action) {\n case 'rightarrow':\n this.handleNavigation(e, !this.enableRtl, ribbonControls);\n break;\n case 'leftarrow':\n this.handleNavigation(e, this.enableRtl, ribbonControls);\n break;\n case 'tab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex < ribbonControls.length - 1) {\n this.currentControlIndex++;\n }\n }\n break;\n case 'shiftTab':\n if (e.target.classList.contains('e-combobox')) {\n if (this.currentControlIndex > 0) {\n this.currentControlIndex--;\n }\n }\n else {\n this.tabObj.element.querySelector('.e-toolbar-item.e-active').querySelector('.e-tab-wrap').focus();\n this.currentControlIndex = 0;\n }\n }\n }\n };\n Ribbon.prototype.handleNavigation = function (e, enableRtl, ribbonControls) {\n var groupContainer;\n var prevGroupId;\n if (enableRtl) {\n if (this.currentControlIndex < ribbonControls.length - 1 && ribbonControls[this.currentControlIndex + 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex++;\n }\n }\n else {\n if (this.currentControlIndex > 0 && ribbonControls[this.currentControlIndex - 1].classList.contains('e-colorpicker')) {\n this.currentControlIndex--;\n }\n }\n if ((!enableRtl && (this.currentControlIndex > 0)) || (enableRtl && (this.currentControlIndex < ribbonControls.length - 1))) {\n if (!e.target.classList.contains('e-combobox') && e.target.classList.contains('e-control') && !e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n this.currentControlIndex++;\n }\n else {\n var prevGroupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (prevGroupContainer) {\n prevGroupId = prevGroupContainer.getAttribute('id');\n }\n this.currentControlIndex--;\n }\n var item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (item && item.classList.contains('e-disabled')) {\n if (((enableRtl && this.currentControlIndex === ribbonControls.length - 1) ||\n (!enableRtl && this.currentControlIndex === 0))) {\n if (ribbonControls[this.currentControlIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n enableRtl ? this.currentControlIndex++ : this.currentControlIndex--;\n item = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (this.activeLayout === 'Classic') {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n if (enableRtl) {\n var launcherIconEle = void 0;\n if (groupContainer) {\n launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n }\n if (launcherIconEle) {\n var items = groupContainer.querySelectorAll('.e-ribbon-item');\n items[items.length - 1].querySelector('.e-control').classList.add('e-ribbon-last-item');\n }\n }\n else {\n if (groupContainer) {\n var groupContainerId = groupContainer.getAttribute('id');\n if (prevGroupId !== groupContainerId) {\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n ribbonControls[parseInt((this.currentControlIndex + 1).toString(), 10)].classList.add('e-ribbon-first-item');\n }\n }\n }\n }\n }\n else {\n if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-first-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-first-item');\n }\n else if (ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n }\n }\n else {\n if (this.activeLayout === 'Classic') {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n if (this.activeLayout === 'Simplified') {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if (enableRtl && (overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n }\n }\n if (e.target.classList.contains('e-ribbon-last-item')) {\n if (enableRtl) {\n groupContainer = ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n else {\n this.currentControlIndex--;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (!enableRtl && e.target.classList.contains('e-ribbon-first-item')) {\n groupContainer = ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].closest('.' + constants.RIBBON_GROUP_CONTAINER);\n var launcherIconEle = groupContainer.querySelector('.e-ribbon-launcher-icon');\n if (launcherIconEle) {\n groupContainer.querySelector('.e-ribbon-launcher-icon').focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-launcher-icon')) {\n if (enableRtl) {\n this.currentControlIndex++;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n if (ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.contains('e-ribbon-last-item')) {\n ribbonControls[parseInt((this.currentControlIndex - 1).toString(), 10)].classList.remove('e-ribbon-last-item');\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.currentControlIndex;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n if (e.target.classList.contains('e-ribbon-collapse-btn')) {\n if (enableRtl) {\n this.currentControlIndex = 0;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex++;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n else {\n var overflowButton = this.tabObj.element.querySelector('.e-ribbon-overall-of-btn');\n if ((overflowButton && !overflowButton.classList.contains('e-ribbon-hide'))) {\n overflowButton.focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n var ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n this.currentControlIndex--;\n ribbonItem = ribbonControls[this.currentControlIndex].closest('.e-ribbon-item');\n }\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n }\n if (this.activeLayout === 'Simplified' && e.target.classList.contains('e-ribbon-overall-of-btn')) {\n if (enableRtl) {\n this.tabObj.element.querySelector('.e-ribbon-collapse-btn').focus();\n }\n else {\n this.currentControlIndex = ribbonControls.length - 1;\n ribbonControls[parseInt(this.currentControlIndex.toString(), 10)].focus();\n }\n }\n };\n Ribbon.prototype.resizeHandler = function () {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n if (this.scrollModule) {\n var scrollEle = this.tabObj.element.querySelector('.' + constants.HORIZONTAL_SCROLLBAR);\n this.scrollModule.scrollStep = scrollEle.offsetWidth;\n }\n };\n Ribbon.prototype.renderTabs = function () {\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal = this.checkID(this.tabsInternal, 'tab', this.element.id);\n this.setProperties({ tabs: this.tabsInternal }, true);\n var tabEle = this.createElement('div', {\n id: this.element.id + constants.TAB_ID\n });\n this.element.appendChild(tabEle);\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n this.tabObj = new Tab({\n cssClass: constants.RIBBON_TAB,\n selectedItem: this.selectedTab,\n overflowMode: 'Popup',\n width: this.width,\n items: tabItems,\n enableRtl: this.enableRtl,\n created: this.tabCreated.bind(this),\n selected: this.ribbonTabSelected.bind(this),\n selecting: this.ribbonTabSelecting.bind(this)\n });\n this.tabObj.appendTo(tabEle);\n //Set the width value as \"0px\" with unit for proper calculation.\n this.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, '0px');\n this.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n var toolbar = getComponent(toolbarEle, Toolbar);\n toolbar.setProperties({ width: 'calc(100% - var(--fileMenuWidth) - var(--helpTemplateWidth))' });\n this.element.classList[this.isMinimized ? 'add' : 'remove'](constants.RIBBON_MINIMIZE);\n };\n Ribbon.prototype.minimize = function (val) {\n var _this = this;\n if (val === this.isMinimized) {\n return;\n }\n var eventArgs = { cancel: false };\n this.trigger(val ? 'ribbonCollapsing' : 'ribbonExpanding', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.setProperties({ isMinimized: val }, true);\n _this.element.classList.toggle(constants.RIBBON_MINIMIZE, _this.isMinimized);\n //to overwrite inline styles from hscroll\n _this.tabObj.element.querySelector('.e-content').style.display = val ? 'none' : 'block';\n if (!val) {\n _this.refreshLayout();\n }\n });\n };\n Ribbon.prototype.toggleLayout = function () {\n this.setProperties({ activeLayout: this.activeLayout === 'Simplified' ? 'Classic' : 'Simplified' }, true);\n this.switchLayout();\n };\n Ribbon.prototype.tabCreated = function () {\n if (!this.hideLayoutSwitcher) {\n this.addExpandCollapse();\n }\n this.renderInitialTab(this.selectedTab);\n };\n Ribbon.prototype.ribbonTabSelected = function (e) {\n this.isAddRemove = false;\n var selectedTabId = e.selectedItem.getAttribute('data-id');\n var selectedIndex = getIndex(this.tabs, (function (tab) { return (tab.id === selectedTabId); }));\n selectedIndex = selectedIndex === -1 ? this.selectedTab : selectedIndex;\n var eventArgs = { previousIndex: this.selectedTab, selectedIndex: selectedIndex };\n this.setProperties({ selectedTab: selectedIndex }, true);\n this.checkOverflow(selectedIndex, e.selectedContent.firstChild);\n if (this.activeLayout === 'Simplified' && this.overflowDDB) {\n var overflowTarget = this.overflowDDB.target;\n var ofTabContainer = overflowTarget.querySelector('.' + constants.RIBBON_TAB_ACTIVE);\n if (ofTabContainer) {\n ofTabContainer.classList.remove(constants.RIBBON_TAB_ACTIVE);\n }\n var activeTab = overflowTarget.querySelector('#' + selectedTabId + constants.OVERFLOW_ID);\n if (activeTab) {\n activeTab.classList.add(constants.RIBBON_TAB_ACTIVE);\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n }\n else {\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n this.trigger('tabSelected', eventArgs);\n };\n Ribbon.prototype.checkOverflow = function (tabIndex, activeContent) {\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n var isOverFlow = tabContent.offsetWidth < activeContent.offsetWidth;\n if (isOverFlow && !this.scrollModule) {\n if (this.activeLayout === 'Classic') {\n // Defines whether the shrinking is breaked due to insufficient space.\n var isBreak = false;\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, true);\n if (!isBreak && (tabContent.offsetWidth < activeContent.offsetWidth)) {\n isBreak = this.checkGroupShrinking(tabIndex, tabContent, activeContent, false);\n }\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createOverflowDropdown(tabIndex, tabContent, activeContent);\n }\n }\n else {\n this.checkSimplifiedItemShrinking(tabIndex, tabContent, activeContent);\n if (tabContent.offsetWidth < activeContent.offsetWidth) {\n this.createSimplfiedOverflow(tabContent, activeContent, tabIndex);\n }\n }\n //Adds Scroll if the tabwidth is less the content width even after adding overflow dropdown.\n if ((tabContent.offsetWidth < activeContent.offsetWidth) && (!this.scrollModule)) {\n this.scrollModule = new HScroll({\n enableRtl: this.enableRtl\n }, this.tabObj.element.querySelector('.' + constants.TAB_CONTENT));\n }\n }\n else if (!isOverFlow) {\n this.destroyScroll();\n if (this.activeLayout === 'Classic') {\n var isBreak = false;\n isBreak = this.removeOverflowDropdown(tabContent, activeContent, false, tabIndex);\n //Check for expanding small items to medium items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, true);\n }\n //Check for expanding medium items to large items.\n if (!isBreak && (tabContent.offsetWidth > activeContent.offsetWidth)) {\n isBreak = this.checkGroupExpanding(tabIndex, tabContent, activeContent, false);\n }\n }\n else {\n this.removeSimplfiedOverflow(tabContent, activeContent, tabIndex);\n if (tabContent.offsetWidth > activeContent.offsetWidth) {\n this.checkSimplifiedItemExpanding(tabIndex, tabContent, activeContent);\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemShrinking = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Medium) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n itemContainer.setAttribute('data-medium-width', activeContent.offsetWidth.toString());\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.checkSimplifiedItemExpanding = function (tabIndex, tabContent, activeContent) {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n for (var i = (tab.groups.length - 1); (i >= 0); i--) {\n var group = tab.groups[parseInt(i.toString(), 10)];\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = 0; ((j < group.collections.length) && (tabContent.offsetWidth > activeContent.offsetWidth)); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth > activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n if (((item.allowedSizes & RibbonItemSize.Small) && (item.allowedSizes & RibbonItemSize.Medium))\n && (item.activeSize === RibbonItemSize.Small) && (item.displayOptions & DisplayMode.Simplified)) {\n var itemContainer = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemContainer) {\n var valString = itemContainer.getAttribute('data-medium-width');\n var value = valString ? parseInt(valString, 10) : null;\n if (value && (tabContent.offsetWidth > value)) {\n itemContainer.removeAttribute('data-medium-width');\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.createSimplfiedOverflow = function (tabContent, activeContent, tabIndex) {\n var orderedGroups = this.getGroupResizeOrder(true, tabIndex);\n for (var i = 0; ((i < orderedGroups.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n for (var j = group.collections.length; ((j >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); j--) {\n var collection = group.collections[parseInt((j - 1).toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = collection.items.length; ((k >= 1) && (tabContent.offsetWidth < activeContent.offsetWidth)); k--) {\n var item = collection.items[k - 1];\n var itemContainer = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n itemContainer.setAttribute('data-simplified-width', activeContent.offsetWidth.toString());\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemContainer, groupContainer, true);\n if (item.activeSize === RibbonItemSize.Small) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, true);\n }\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n };\n Ribbon.prototype.updatePopupItems = function (item, itemEle, isGroupOF, isMenu) {\n var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.GroupButton) ? DropDownButton : SplitButton);\n var dropDownPopup = dropdown.dropDown;\n // popup is on right if (isGroupOF && isMenu)\n // The position is reversed if RTL is enabled.\n // isRight = ((isGroupOF && isMenu) && !this.enableRtl ) || (!(isGroupOF && isMenu) && this.enableRtl) ==> (isGroupOF && isMenu) !== this.enableRtl\n var isLeft = (isGroupOF && isMenu) === this.enableRtl;\n 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 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 for (var i = 0; ((i < orderedGroups.length) && flag); i++) {\n var group = orderedGroups[parseInt(i.toString(), 10)];\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (group.enableGroupOverflow) {\n var overflowDDBEle = tabContent.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n else {\n overflowDDB = this.overflowDDB;\n overflowtarget = this.overflowDDB ? this.overflowDDB.target : null;\n }\n for (var j = 0; ((j < group.collections.length) && flag); j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n // eslint-disable-next-line max-len\n for (var k = 0; ((k < collection.items.length) && flag && !isClear && (tabContent.offsetWidth > activeContent.offsetWidth)); k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemContainer = void 0;\n if (overflowtarget) {\n itemContainer = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (((item.displayOptions === DisplayMode.Auto) ||\n (item.displayOptions === (DisplayMode.Simplified | DisplayMode.Overflow))) && !isNullOrUndefined(itemContainer)) {\n var width = parseInt(itemContainer.getAttribute('data-simplified-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n flag = false;\n break;\n }\n var groupEle_1 = tabContent.querySelector('#' + collection.id);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemContainer, group.enableGroupOverflow, false);\n }\n groupEle_1.append(itemContainer);\n this.removeOverflowEvent(item, itemContainer);\n if (item.allowedSizes & RibbonItemSize.Small) {\n item.setProperties({ activeSize: RibbonItemSize.Small }, true);\n this.setItemSize(itemContainer.querySelector('#' + item.id), item);\n }\n }\n }\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var itemEle = groupEle.querySelector('.' + constants.RIBBON_ITEM);\n if (groupEle.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {\n groupEle.classList.remove('e-ribbon-emptyCollection');\n }\n if (overflowDDB) {\n if (group.enableGroupOverflow) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n else {\n var ofGroupContainer = overflowtarget.querySelector('#' + group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = overflowtarget.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n this.overflowDDB.element.classList.add(constants.HIDE_CSS);\n }\n }\n }\n }\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.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {\n var overflowButton;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n var isDisabledGroup = contentEle.querySelector('#' + groupId);\n if (isGroupOF) {\n var overflowDDB = groupContainer.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);\n if (!overflowDDB) {\n overflowButton = this.addOverflowButton(groupId + constants.GROUPOF_BUTTON_ID);\n overflowButton.element.classList.add(constants.RIBBON_GROUP_OF_BUTTON);\n groupContainer.appendChild(overflowButton.element);\n }\n else {\n overflowButton = getInstance(overflowDDB, DropDownButton);\n }\n var overflowBtnTarget = overflowButton.target;\n if (isDisabledGroup && isDisabledGroup.classList.contains('e-disabled')) {\n overflowBtnTarget.classList.add('e-disabled');\n }\n isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))\n : overflowBtnTarget.append(itemEle);\n }\n else {\n if (!this.overflowDDB) {\n this.overflowDDB = this.addOverflowButton(this.tabObj.element.id + constants.OVRLOF_BUTTON_ID);\n this.tabObj.element.insertBefore(this.overflowDDB.element, this.collapseButton);\n this.overflowDDB.element.classList.add(constants.RIBBON_OVERALL_OF_BUTTON);\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n else {\n this.overflowDDB.element.classList.remove(constants.HIDE_CSS);\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer) {\n var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);\n if (!ofGroupContainer) {\n ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n if (isDisabledGroup && isDisabledGroup.classList.contains('e-disabled')) {\n ofGroupContainer.classList.add('e-disabled');\n }\n ofTabContainer.append(ofGroupContainer);\n }\n isResize ? ofGroupContainer.insertBefore(itemEle, ofGroupContainer.querySelector('.' + constants.RIBBON_ITEM)) : ofGroupContainer.append(itemEle);\n }\n else {\n this.createOfTabContainer(groupId, groupHeader, itemEle, tabIndex);\n }\n }\n overflowButton = this.overflowDDB;\n }\n if (itemEle !== null) {\n this.addOverflowEvents(item, itemEle, overflowButton);\n }\n };\n Ribbon.prototype.addOverflowEvents = function (item, itemEle, overflowButton) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.addOverFlowEvents(item, itemEle, overflowButton);\n break;\n case 'GroupButton':\n if (this.activeLayout === 'Simplified') {\n this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle);\n break;\n }\n }\n };\n Ribbon.prototype.createOfTabContainer = function (groupId, groupHeader, itemEle, tabIndex) {\n var ofTabContainer = this.createElement('div', {\n id: this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID,\n className: constants.RIBBON_OF_TAB_CONTAINER\n });\n var overflowtarget = this.overflowDDB.target;\n overflowtarget.append(ofTabContainer);\n var ofGroupContainer = this.createGroupContainer(groupId, groupHeader);\n ofGroupContainer.append(itemEle);\n ofTabContainer.append(ofGroupContainer);\n if (tabIndex === this.selectedTab) {\n ofTabContainer.classList.add(constants.RIBBON_TAB_ACTIVE);\n }\n };\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 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 Ribbon.prototype.createOverflowDropdown = function (tabIndex, tabContent, activeContent) {\n var collapseOrder = this.getGroupResizeOrder(true, tabIndex);\n if (collapseOrder.length === 0) {\n return;\n }\n var _loop_1 = function (i) {\n var group = collapseOrder[parseInt(i.toString(), 10)];\n var groupEle = this_1.tabObj.element.querySelector('#' + group.id);\n groupEle.setAttribute('data-expanded-width', activeContent.offsetWidth.toString());\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupOverFlow = this_1.createElement('div', {\n className: constants.RIBBON_GROUP_OVERFLOW + constants.SPACE + constants.RIBBON_LARGE_ITEM,\n id: group.id + constants.OVERFLOW_ID + constants.CONTAINER_ID\n });\n groupEle.insertBefore(groupOverFlow, groupContainer);\n var groupIndex = getIndex(this_1.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n var tab = this_1.tabs[parseInt(tabIndex.toString(), 10)];\n //Expanding the items in the group to their original expanded state\n this_1.checkSmallToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n this_1.checkMediumToLarge(tabIndex, tab, groupIndex, tabContent, activeContent, true, false);\n var dropdown = this_1.ribbonDropDownModule.createOverFlowDropDown(group.id, group.header, group.groupIconCss, groupContainer, groupOverFlow, this_1.enableRtl);\n this_1.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: true }, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupContainer.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_1.handleContentSize(itemEle);\n this_1.addOverflowEvents(item, itemEle, dropdown);\n }\n }\n }\n };\n var this_1 = this;\n for (var i = 0; ((i < collapseOrder.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {\n _loop_1(i);\n }\n };\n // eslint-disable-next-line max-len\n Ribbon.prototype.removeOverflowDropdown = function (tabContent, activeContent, isClear, tabIndex) {\n if (isClear === void 0) { isClear = false; }\n var expandOrder = this.getGroupResizeOrder(false, tabIndex);\n if (expandOrder.length === 0) {\n return false;\n }\n var _loop_2 = function (i) {\n var group = expandOrder[parseInt(i.toString(), 10)];\n var groupEle = this_2.tabObj.element.querySelector('#' + group.id);\n if (!groupEle) {\n return \"break\";\n } //to handle the rerendering of tabcontrol when a ribbon tab is added/removed\n var width = parseInt(groupEle.getAttribute('data-expanded-width'), 10);\n if (!isClear && (tabContent.offsetWidth < width)) {\n return { value: true };\n }\n this_2.removeDropdown(group.id);\n var groupIndex = getIndex(this_2.tabs[parseInt(tabIndex.toString(), 10)].groups, function (e) { return e.id === group.id; });\n this_2.tabs[parseInt(tabIndex.toString(), 10)].\n groups[parseInt(groupIndex.toString(), 10)].setProperties({ isCollapsed: false }, true);\n var tab = this_2.tabs[parseInt(tabIndex.toString(), 10)];\n //Shrinking the items in the group to their previous shrinked state (before moving to dropdown)\n this_2.checkLargeToMedium(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n this_2.checkMediumToSmall(tabIndex, tab, groupIndex, tabContent, activeContent, true);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var collectionEle = groupEle.querySelector('#' + collection.id);\n for (var k = 0; k < collection.items.length; k++) {\n var item = collection.items[parseInt(k.toString(), 10)];\n var itemEle = collectionEle.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (itemEle !== null) {\n this_2.handleContentSize(itemEle, true);\n this_2.removeOverflowEvent(item, itemEle);\n }\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < expandOrder.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n return false;\n };\n Ribbon.prototype.removeDropdown = function (groupId) {\n var dropdownElement = this.tabObj.element.querySelector('#' + groupId + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n if (dropdownElement) {\n var groupOverFlow = dropdownElement.parentElement;\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n remove(groupOverFlow);\n }\n };\n Ribbon.prototype.getGroupResizeOrder = function (isCollapse, tabIndex) {\n var _this = this;\n var groups = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n groups = groups.filter(function (e) {\n // (isUndefined(e.isCollapsible) || e.isCollapsible) => check whethe rhte item is collapsible\n // if a isCollapsed property is undefined, then it is considered collapsible and included in collapsible list\n // ((isCollapse && !e.isCollapsed)||(!isCollapse && e.isCollapsed)) => isCollapse !== e.isCollapsed\n return (_this.activeLayout === 'Classic') ? (isUndefined(e.isCollapsible) || e.isCollapsible) && ((isCollapse &&\n isUndefined(e.isCollapsed)) || (!isUndefined(e.isCollapsed) && (isCollapse !== e.isCollapsed))) : true;\n });\n //sort the collapsible groups based on the priority\n groups.sort(function (a, b) { return a.priority - b.priority; });\n //reverse the sorted array to return the array in descending order while collapsing.\n return isCollapse ? groups.reverse() : groups;\n };\n Ribbon.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Ribbon.prototype.clearOverflowDropDown = function (index) {\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(index.toString(), 10)].id + constants.CONTENT_ID);\n if (!activeContent) {\n return;\n }\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n this.removeSimplfiedOverflow(activeContent, tabContent, index, true);\n }\n else {\n this.removeOverflowDropdown(activeContent, tabContent, true, index);\n }\n };\n Ribbon.prototype.ribbonTabSelecting = function (e) {\n var _this = this;\n this.currentControlIndex = 0;\n var nextTabId = e.selectingItem.getAttribute('data-id');\n var previousTabId = e.previousItem.getAttribute('data-id');\n var nextIndex = getIndex(this.tabs, (function (tab) { return (tab.id === nextTabId); }));\n var previousIndex = getIndex(this.tabs, (function (tab) { return (tab.id === previousTabId); }));\n nextIndex = nextIndex === -1 ? this.selectedTab : nextIndex;\n var eventArgs = {\n cancel: e.cancel, isInteracted: e.isInteracted, previousIndex: previousIndex, selectedIndex: nextIndex\n };\n this.trigger('tabSelecting', eventArgs, function (args) {\n if (args.cancel) {\n return;\n }\n _this.destroyScroll();\n if (!_this.isAddRemove && (previousIndex !== -1)) {\n _this.clearOverflowDropDown(previousIndex);\n }\n var selectedTabContent = _this.tabObj.items[parseInt(nextIndex.toString(), 10)].content;\n if ((!selectedTabContent.querySelector('.' + constants.RIBBON_GROUP)) && (_this.tabs[parseInt(nextIndex.toString(), 10)].groups.length !== 0)) {\n var elements = _this.createGroups(_this.tabs[parseInt(nextIndex.toString(), 10)].groups, nextIndex);\n append(elements, selectedTabContent);\n }\n });\n };\n Ribbon.prototype.createTabItems = function (tabs) {\n var _this = this;\n var tabItems = [];\n for (var i = 0; i < tabs.length; i++) {\n var ribbonTab = tabs[parseInt(i.toString(), 10)];\n var header = this.createElement('span', {\n innerHTML: ribbonTab.header,\n id: ribbonTab.id + constants.HEADER_ID\n });\n header.onclick = function () { _this.minimize(false); };\n header.ondblclick = function () { _this.minimize(true); };\n var tab = { header: { text: header }, id: ribbonTab.id, cssClass: ribbonTab.cssClass };\n var content = this.createElement('div', {\n className: tab.cssClass,\n id: ribbonTab.id + constants.CONTENT_ID\n });\n content.classList.add(constants.RIBBON_TAB_ITEM);\n tab.content = content;\n tabItems.push(tab);\n }\n return tabItems;\n };\n Ribbon.prototype.renderInitialTab = function (index) {\n var elements = this.createGroups(this.tabs[parseInt(index.toString(), 10)].groups, index);\n var content = this.tabObj.items[parseInt(index.toString(), 10)].content;\n append(elements, content);\n if (this.activeLayout === 'Simplified') {\n this.element.classList.add(constants.RIBBON_SIMPLIFIED_MODE);\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.addOverflowButton = function (btnId) {\n var _this = this;\n var overflowButton = this.createElement('button', {\n id: btnId\n });\n var overflowTarget = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_TARGET,\n attrs: { 'tabindex': '0' }\n });\n var overflowDDB = new DropDownButton({\n iconCss: constants.OVERFLOW_ICON,\n cssClass: constants.DROPDOWNBUTTON_HIDE + constants.SPACE + constants.RIBBON_GROUP_OVERFLOW_DDB,\n target: overflowTarget,\n locale: this.locale,\n enableRtl: this.enableRtl,\n enablePersistence: this.enablePersistence,\n beforeClose: function (args) {\n var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;\n if (ele) {\n args.cancel = true;\n }\n }\n }, overflowButton);\n this.element.classList.add(constants.RIBBON_OVERFLOW);\n createTooltip(overflowTarget, this);\n var isGroupOf;\n overflowButton.onkeydown = overflowButton.onclick = function () { _this.itemIndex = -1; isGroupOf = overflowButton.classList.contains('e-ribbon-overall-of-btn') ? false : true; };\n overflowTarget.onkeydown = function (e) { return (_this.upDownKeyHandler(e, overflowTarget, isGroupOf), _this); };\n return overflowDDB;\n };\n Ribbon.prototype.upDownKeyHandler = function (e, target, isGroupOf) {\n var items;\n if (isGroupOf) {\n items = target.getElementsByClassName('e-ribbon-item');\n }\n else {\n var currentList = target.querySelector('.e-ribbon-of-tab.e-ribbon-active');\n items = currentList.getElementsByClassName('e-ribbon-item');\n }\n var comboBoxEle = items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-control').classList.contains('e-combobox') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;\n var ribbonItem;\n if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {\n if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {\n if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {\n this.itemIndex = 0;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n if (comboBoxEle && e.key === 'Tab') {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {\n this.itemIndex++;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, true);\n }\n }\n else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n if (comboBoxEle === null || (e.key === 'Tab')) {\n if (!this.itemIndex || this.itemIndex === -1) {\n this.itemIndex = items.length - 1;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {\n e.preventDefault();\n items[this.itemIndex].querySelector('.e-control').focus();\n }\n }\n else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {\n this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n this.findDisabledItem(ribbonItem, items, false);\n }\n }\n }\n target.setAttribute('index', this.itemIndex.toString());\n }\n var currentItemIndex = parseInt(target.getAttribute('index'), 10);\n var itemType = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').getAttribute('data-control') : null;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {\n if (itemType === 'ColorPicker') {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-split-colorpicker').focus();\n }\n else {\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n if (e.key === ' ' && (itemType === 'CheckBox')) {\n var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');\n var checkBox = getComponent(checkBoxEle, CheckBox);\n this.itemIndex = -1;\n checkBox.click();\n }\n }\n if (((itemType === 'SplitButton') && (e.key === 'ArrowRight' || e.key === 'ArrowLeft'))) {\n if (e.key === 'ArrowRight') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus();\n }\n if (e.key === 'ArrowLeft') {\n this.enableRtl ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-dropdown-btn').focus() :\n items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();\n }\n }\n if (e.key === 'Enter') {\n this.itemIndex = -1;\n }\n };\n Ribbon.prototype.findDisabledItem = function (ribbonItem, items, isIncrease) {\n while (ribbonItem && ribbonItem.classList.contains('e-disabled')) {\n if (isIncrease) {\n if (this.itemIndex === items.length - 1 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = -1;\n }\n }\n else {\n if (this.itemIndex === 0 && items[this.itemIndex].closest('.e-ribbon-item').classList.contains('e-disabled')) {\n this.itemIndex = items.length;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isIncrease ? this.itemIndex++ : this.itemIndex--;\n ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');\n }\n };\n Ribbon.prototype.removeOverflowButton = function (overflowDDB) {\n if (overflowDDB) {\n var btnEle = overflowDDB.element;\n destroyTooltip(overflowDDB.target);\n overflowDDB.destroy();\n btnEle.remove();\n }\n };\n Ribbon.prototype.removeOverflowEvent = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.removeOverFlowEvents(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.removeOverFlowEvents(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createGroupContainer = function (groupId, groupHeader) {\n var ofGroupContainer = this.createElement('div', {\n className: constants.RIBBON_OF_GROUP_CONTAINER,\n id: groupId + constants.CONTAINER_ID\n });\n var ofGroupHeader = this.createElement('div', {\n className: constants.RIBBON_OVERFLOW_HEADER,\n id: groupId + constants.HEADER_ID,\n innerHTML: groupHeader\n });\n ofGroupContainer.append(ofGroupHeader);\n return ofGroupContainer;\n };\n Ribbon.prototype.addExpandCollapse = function () {\n var _this = this;\n this.collapseButton = this.createElement('span', {\n className: constants.RIBBON_COLLAPSE_BUTTON + constants.SPACE + constants.EXPAND_COLLAPSE_ICON,\n id: this.tabObj.element.id + constants.COLLAPSE_BUTTON_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Layout Switcher', 'role': 'button' }\n });\n this.collapseButton.onclick = function () { _this.toggleLayout(); };\n this.collapseButton.onkeydown = function (e) {\n if (e.key === 'Enter') {\n _this.toggleLayout();\n }\n };\n this.element.classList.add(constants.RIBBON_COLLAPSIBLE);\n if (this.activeLayout === 'Simplified') {\n this.collapseButton.classList.add(constants.RIBBON_EXPAND_BUTTON);\n }\n this.tabObj.element.appendChild(this.collapseButton);\n };\n Ribbon.prototype.removeExpandCollapse = function () {\n var _this = this;\n var index = getIndex(this.tooltipData, function (e) { return e.id === _this.collapseButton.id; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n this.element.classList.remove(constants.RIBBON_COLLAPSIBLE);\n remove(this.tabObj.element.querySelector('.' + constants.RIBBON_COLLAPSE_BUTTON));\n this.collapseButton = null;\n };\n Ribbon.prototype.reRenderTabs = function (tabs) {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\n for (var key in tabs) {\n var index = parseInt(key, 10);\n var tab = tabs[parseInt(index.toString(), 10)];\n var isNewTab = false;\n for (var j = 0; j < (this.tabObj.items.length); j++) {\n if (this.tabs[parseInt(index.toString(), 10)].id === this.tabObj.items[parseInt(j.toString(), 10)].id) {\n isNewTab = true;\n break;\n }\n }\n if (!isNewTab) {\n this.destroyTabItems(this.tabsInternal);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItems = this.createTabItems(this.tabs);\n if (this.selectedTab >= this.tabs.length) {\n this.selectedTab = this.tabs.length - 1;\n }\n this.tabObj.setProperties({ items: tabItems, selectedItem: this.selectedTab });\n break;\n }\n else {\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n if (groups) {\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n this.tabObj.items[parseInt(index.toString(), 10)].header.text.innerText = ribbonTab.header;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabObj.items[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabObj.items[parseInt(index.toString(), 10)].cssClass);\n }\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {\n var group = groups_1[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n }\n }\n }\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n this.checkOverflow(this.selectedTab, activeContent);\n };\n Ribbon.prototype.switchLayout = function () {\n this.currentControlIndex = 0;\n this.destroyScroll();\n this.collapseButton.classList.toggle(constants.RIBBON_EXPAND_BUTTON, this.activeLayout === 'Simplified');\n this.element.classList.toggle(constants.RIBBON_SIMPLIFIED_MODE, this.activeLayout === 'Simplified');\n for (var i = 0; i <= (this.tabs.length - 1); i++) {\n var tabIndex = i;\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var groupList = this.tabs[parseInt(tabIndex.toString(), 10)].groups;\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n if (this.activeLayout === 'Simplified') {\n for (var i_1 = 0; i_1 < groupList.length; i_1++) {\n var group = groupList[parseInt(i_1.toString(), 10)];\n var alignType = groupList[parseInt(i_1.toString(), 10)].orientation;\n if (group.isCollapsed) {\n group.setProperties({ isCollapsed: false }, true);\n this.removeDropdown(group.id);\n }\n else {\n this.checkSmallToMedium(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n this.checkMediumToLarge(tabIndex, tab, i_1, tabContent, activeContent, true, false);\n }\n var groupEle = tabContent.querySelector('#' + group.id);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var shrinkColumns = groupContainer.querySelectorAll('.' + 'e-ribbon-shrink');\n for (var i_2 = 0; i_2 < shrinkColumns.length; i_2++) {\n shrinkColumns[parseInt(i_2.toString(), 10)].remove();\n }\n var groupHeader = groupContainer.querySelector('#' + group.id + constants.HEADER_ID);\n groupHeader.remove();\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n groupContent.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n groupContent.classList.remove(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n groupCollection.classList.replace(constants.RIBBON_ROW, constants.RIBBON_COLUMN);\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && (item.displayOptions === DisplayMode.Classic)) {\n k++;\n var itemEle_1 = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n var ele = itemEle_1.querySelector('#' + item.id);\n this.destroyFunction(item, ele);\n itemEle_1.remove();\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var size = ((item.allowedSizes === RibbonItemSize.Large) ||\n (item.allowedSizes & RibbonItemSize.Medium)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n size = (!(item.displayOptions & DisplayMode.Simplified) && (item.displayOptions & DisplayMode.Overflow))\n ? RibbonItemSize.Medium : size;\n var itemEle = void 0;\n if (!(item.displayOptions & DisplayMode.Classic)) {\n itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer)[0];\n if (item.displayOptions & DisplayMode.Simplified) {\n groupCollection.append(itemEle);\n }\n }\n else {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)) {\n this.createOverflowPopup(item, tabIndex, group.enableGroupOverflow, group.id, group.header, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, true);\n }\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n item.setProperties({ activeSize: size }, true);\n var ele = itemEle.querySelector('#' + item.id);\n this.setItemSize(ele, item);\n }\n }\n }\n if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n }\n else {\n this.element.classList.remove(constants.RIBBON_OVERFLOW);\n for (var i_3 = 0; i_3 < groupList.length; i_3++) {\n var group = groupList[parseInt(i_3.toString(), 10)];\n var alignType = groupList[parseInt(i_3.toString(), 10)].orientation;\n var groupContainer = tabContent.querySelector('#' + group.id + constants.CONTAINER_ID);\n var groupContent = groupContainer.querySelector('#' + group.id + constants.CONTENT_ID);\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n if (alignType === 'Row') {\n groupContent.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n groupContent.classList.add(constants.RIBBON_CONTENT_HEIGHT);\n for (var j = 0; j < group.collections.length; j++) {\n var overflowDDB = void 0;\n var overflowtarget = void 0;\n if (!group.enableGroupOverflow) {\n overflowDDB = this.overflowDDB;\n if (overflowDDB) {\n overflowtarget = this.overflowDDB.target;\n }\n }\n else {\n var overflowDDBEle = groupContainer.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n }\n var collection = group.collections[parseInt(j.toString(), 10)];\n var groupCollection = groupContainer.querySelector('#' + collection.id);\n if (alignType === 'Column') {\n groupCollection.classList.replace(constants.RIBBON_COLUMN, constants.RIBBON_ROW);\n }\n for (var k = 0; k < collection.items.length; k++) {\n var itemList = collection.items;\n var item = collection.items[parseInt(k.toString(), 10)];\n var flag = true;\n while ((flag) && !(item.displayOptions & DisplayMode.Classic)) {\n k++;\n var itemEle = void 0;\n if ((item.displayOptions & DisplayMode.Simplified) || (item.displayOptions & DisplayMode.Overflow)) {\n if (item.displayOptions & DisplayMode.Simplified) {\n itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n else {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n }\n if (itemEle !== null) {\n var ele_8 = itemEle.querySelector('#' + item.id);\n this.destroyFunction(item, ele_8);\n itemEle.remove();\n }\n }\n if (k < itemList.length) {\n item = itemList[parseInt(k.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n if (!(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) {\n var itemEle = this.createItems([item], alignType, group.id, group.header, group.enableGroupOverflow, tabIndex)[0];\n groupCollection.append(itemEle);\n }\n else {\n var itemEle = groupContainer.querySelector('#' + item.id + constants.CONTAINER_ID);\n if (!itemEle) {\n itemEle = overflowtarget.querySelector('#' + item.id + constants.CONTAINER_ID);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, false);\n }\n this.removeOverflowEvent(item, itemEle);\n }\n if (item.type === RibbonItemType.GroupButton) {\n this.ribbonGroupButtonModule.switchGroupButton(item, itemEle);\n }\n groupCollection.append(itemEle);\n }\n var ele = groupContainer.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = groupContainer.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n var itemsize = (item.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (item.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: itemsize }, true);\n this.setItemSize(ele, item);\n }\n if (group.enableGroupOverflow && overflowDDB) {\n if (overflowtarget.childElementCount === 0) {\n this.removeOverflowButton(overflowDDB);\n }\n }\n }\n }\n }\n if (this.selectedTab === tabIndex) {\n this.checkOverflow(tabIndex, activeContent);\n }\n }\n }\n if (this.activeLayout === 'Classic') {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.createLauncherIcon = function (groupId, groupContainer) {\n var _this = this;\n var launcherIcon = this.createElement('div', {\n className: constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss ? this.launcherIconCss : constants.RIBBON_LAUNCHER_ICON),\n id: groupId + constants.LAUNCHER_ID,\n attrs: { 'tabindex': '0', 'type': 'button', 'aria-label': 'Launcher Icon', 'role': 'button' }\n });\n groupContainer.appendChild(launcherIcon);\n groupContainer.classList.add(constants.RIBBON_LAUNCHER);\n EventHandler.add(launcherIcon, 'click', this.launcherIconClicked.bind(this, groupId), this);\n EventHandler.add(launcherIcon, 'keydown', function (e) {\n if (e.key === 'Enter') {\n _this.launcherIconClicked(groupId);\n }\n }, this);\n };\n Ribbon.prototype.launcherIconClicked = function (id) {\n var eventArgs = { groupId: id };\n this.trigger('launcherIconClick', eventArgs);\n };\n Ribbon.prototype.createGroups = function (groupList, tabIndex) {\n var groupElements = [];\n for (var i = 0; i < groupList.length; i++) {\n var group = groupList[parseInt(i.toString(), 10)];\n var alignType = group.orientation;\n var groupEle = this.createElement('div', {\n className: group.cssClass,\n id: group.id\n });\n groupEle.classList.add(constants.RIBBON_GROUP);\n groupElements.push(groupEle);\n var groupContainer = this.createElement('div', {\n className: group.cssClass,\n id: group.id + constants.CONTAINER_ID\n });\n groupContainer.classList.add(constants.RIBBON_GROUP_CONTAINER);\n groupEle.appendChild(groupContainer);\n var groupContent = this.createElement('div', {\n className: this.activeLayout === 'Simplified' ? constants.RIBBON_GROUP_CONTENT : (constants.RIBBON_GROUP_CONTENT + constants.SPACE + constants.RIBBON_CONTENT_HEIGHT),\n id: group.id + constants.CONTENT_ID\n });\n groupContent.classList.add(((alignType === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n groupContainer.appendChild(groupContent);\n if (this.activeLayout === 'Classic') {\n var groupHeader = this.createElement('div', {\n className: constants.RIBBON_GROUP_HEADER,\n id: group.id + constants.HEADER_ID,\n innerHTML: group.header\n });\n groupContainer.appendChild(groupHeader);\n }\n if (group.showLauncherIcon) {\n this.createLauncherIcon(group.id, groupContainer);\n }\n var elements = this.createCollection(group.collections, group.orientation, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer);\n append(elements, groupContent);\n if ((this.activeLayout === 'Simplified') && !(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {\n groupEle.classList.add('e-ribbon-emptyCollection');\n }\n }\n return groupElements;\n };\n Ribbon.prototype.validateItemSize = function () {\n for (var k = 0; k < this.tabs.length; k++) {\n var groupList = this.tabs[parseInt(k.toString(), 10)].groups;\n for (var l = 0; l < groupList.length; l++) {\n var collectionList = groupList[parseInt(l.toString(), 10)].collections;\n var alignType = groupList[parseInt(l.toString(), 10)].orientation;\n for (var i = 0; i < collectionList.length; i++) {\n var items = collectionList[parseInt(i.toString(), 10)].items;\n for (var j = 0; j < items.length; j++) {\n var ribbonitem = items[parseInt(j.toString(), 10)];\n if (!ribbonitem.allowedSizes || (ribbonitem.allowedSizes === 0)) {\n ribbonitem.setProperties({\n allowedSizes: (RibbonItemSize.Small | RibbonItemSize.Medium | RibbonItemSize.Large)\n }, true);\n }\n if ((ribbonitem.type === 'ColorPicker') && (ribbonitem.allowedSizes !== RibbonItemSize.Small)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Small }, true);\n }\n else if ((ribbonitem.type === 'ComboBox' || ribbonitem.type === 'CheckBox') &&\n (ribbonitem.allowedSizes !== RibbonItemSize.Medium)) {\n ribbonitem.setProperties({ allowedSizes: RibbonItemSize.Medium }, true);\n }\n else if (((alignType === 'Column') && (items.length > 1)) || ((alignType === 'Row') && (collectionList.length > 1))) {\n if (ribbonitem.allowedSizes & RibbonItemSize.Large) {\n // To remove large size, perform 'and' with 011(3).\n var sizeVal = ribbonitem.allowedSizes & (RibbonItemSize.Small | RibbonItemSize.Medium);\n sizeVal = sizeVal ? sizeVal : RibbonItemSize.Medium;\n ribbonitem.setProperties({ allowedSizes: sizeVal }, true);\n }\n }\n var itemsize = (ribbonitem.allowedSizes & RibbonItemSize.Large) ? RibbonItemSize.Large :\n (ribbonitem.allowedSizes & RibbonItemSize.Medium) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonitem.setProperties({ activeSize: itemsize }, true);\n }\n }\n }\n }\n };\n Ribbon.prototype.createCollection = function (collectionList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var collectionElements = [];\n for (var i = 0; i < collectionList.length; i++) {\n var collection = collectionList[parseInt(i.toString(), 10)];\n var collectionEle = this.createElement('div', {\n className: collection.cssClass,\n id: collection.id\n });\n collectionEle.classList.add(constants.RIBBON_COLLECTION);\n collectionEle.classList.add(((alignType !== 'Column') || (this.activeLayout === 'Simplified')) ?\n constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n collectionElements.push(collectionEle);\n var elements = this.createItems(collection.items, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer);\n append(elements, collectionEle);\n if ((alignType === 'Row') && (i === 2)) {\n break;\n }\n }\n return collectionElements;\n };\n Ribbon.prototype.createRibbonItem = function (item, itemEle) {\n switch (item.type) {\n case 'Button':\n this.ribbonButtonModule.createButton(item, itemEle);\n break;\n case 'DropDown':\n this.ribbonDropDownModule.createDropDown(item, itemEle);\n break;\n case 'SplitButton':\n this.ribbonSplitButtonModule.createSplitButton(item, itemEle);\n break;\n case 'CheckBox':\n this.ribbonCheckBoxModule.createCheckBox(item, itemEle);\n break;\n case 'ColorPicker':\n this.ribbonColorPickerModule.createColorPicker(item, itemEle);\n break;\n case 'ComboBox':\n this.ribbonComboBoxModule.createComboBox(item, itemEle);\n break;\n case 'Template':\n this.createTemplateContent(item, itemEle);\n break;\n case 'GroupButton':\n this.ribbonGroupButtonModule.createGroupButton(item, itemEle);\n break;\n }\n };\n Ribbon.prototype.createItems = function (itemList, alignType, groupId, groupHeader, isGroupOF, tabIndex, groupContainer) {\n var _a;\n var itemElements = [];\n for (var i = 0; i < itemList.length; i++) {\n var item = itemList[parseInt(i.toString(), 10)];\n //To stop rendering of items with simplified mode position type as none\n var flag = true;\n while (flag &&\n (((this.activeLayout === 'Simplified') && !(item.displayOptions & (DisplayMode.Simplified | DisplayMode.Overflow))) ||\n ((this.activeLayout === 'Classic') && !(item.displayOptions & DisplayMode.Classic)))) {\n i++;\n if (i < itemList.length) {\n item = itemList[parseInt(i.toString(), 10)];\n }\n else {\n flag = false;\n }\n }\n if (!flag) {\n break;\n }\n var itemEle = this.createElement('div', {\n className: item.cssClass,\n id: item.id + constants.CONTAINER_ID\n });\n (_a = itemEle.classList).add.apply(_a, [constants.RIBBON_ITEM].concat((item.disabled ? [constants.DISABLED_CSS] : [])));\n // To avoid undefined items condition is added\n if (item.ribbonTooltipSettings && isTooltipPresent(item.ribbonTooltipSettings)) {\n itemEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemEle.id, data: item.ribbonTooltipSettings });\n }\n var size = item.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((item.allowedSizes === RibbonItemSize.Large) || (item.allowedSizes & RibbonItemSize.Medium) ||\n (item.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n item.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemEle.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemEle.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(item, itemEle);\n if ((this.activeLayout === 'Simplified') && ((item.displayOptions === DisplayMode.Overflow) || (item.displayOptions === (DisplayMode.Classic | DisplayMode.Overflow)))) {\n this.createOverflowPopup(item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer);\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(item, itemEle, isGroupOF, true);\n }\n }\n else {\n // For normal mode and Simplified mode position type as Group and Auto\n itemElements.push(itemEle);\n }\n if ((alignType === 'Column') && (i === 2)) {\n break;\n }\n }\n return itemElements;\n };\n Ribbon.prototype.createHelpPaneTemplate = function () {\n if (this.helpPaneTemplate) {\n var templateName = 'helpPaneTemplate';\n this.clearTemplate([templateName]);\n this.ribbonTempEle = this.createElement('div', {\n className: constants.RIBBON_HELP_TEMPLATE,\n id: this.element.id + constants.RIBBON_HELP_PANE_TEMPLATE_ID\n });\n var templateFunction = getTemplateFunction(this.helpPaneTemplate);\n append(templateFunction({}, this, templateName, 'helpPaneTemplate', this.isStringTemplate), this.ribbonTempEle);\n var tabEle = this.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n toolbarEle.after(this.ribbonTempEle);\n tabEle.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, this.ribbonTempEle.offsetWidth + 'px');\n this.renderReactTemplates();\n }\n };\n Ribbon.prototype.createTemplateContent = function (item, itemElement) {\n var itemEle = this.createElement('div', {\n className: item.cssClass ? (constants.RIBBON_TEMPLATE + constants.SPACE + item.cssClass) : constants.RIBBON_TEMPLATE,\n id: item.id\n });\n if (item.disabled) {\n itemEle.classList.add(constants.DISABLED_CSS);\n itemEle.setAttribute('disabled', '');\n }\n itemElement.appendChild(itemEle);\n this.renderItemTemplate(item, itemEle);\n };\n Ribbon.prototype.renderItemTemplate = function (item, itemElement) {\n var templateName = 'ribbon' + item.id + 'itemTemplate';\n this.clearTemplate([templateName]);\n var templateFunction = getTemplateFunction(item.itemTemplate);\n append(templateFunction({ activeSize: RibbonItemSize[item.activeSize] }, this, templateName, (item.id + 'itemTemplate'), this.isStringTemplate), itemElement);\n this.renderReactTemplates();\n };\n Ribbon.prototype.checkID = function (list, type, initId) {\n var key = type === 'tab' ? constants.TAB_ID : type === 'group' ? constants.GROUP_ID :\n type === 'collection' ? constants.COLLECTION_ID : constants.ITEM_ID;\n for (var i = 0; i < list.length; i++) {\n var listitem = list[parseInt(i.toString(), 10)];\n if (!listitem.id) {\n listitem.setProperties({ id: initId + key + (this.idIndex++) }, true);\n }\n switch (type) {\n case 'tab':\n listitem.setProperties({ groups: this.checkID(listitem.groups, 'group', listitem.id) }, true);\n break;\n case 'group':\n listitem.setProperties({ collections: this.checkID(listitem.collections, 'collection', listitem.id) }, true);\n break;\n case 'collection':\n listitem.setProperties({ items: this.checkID(listitem.items, 'item', listitem.id) }, true);\n break;\n default:\n break;\n }\n }\n return list;\n };\n Ribbon.prototype.updateCommonProperty = function (commonProp) {\n this.tabObj.setProperties(commonProp);\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.setCommonProperties(commonProp);\n }\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.setCommonProperties(commonProp);\n }\n for (var i = 0; i < this.tabs.length; i++) {\n var tab = this.tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n if (contentEle.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n if (dropdown) {\n updateTooltipProp(dropdown.target, commonProp);\n dropdown.setProperties(commonProp);\n }\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : item.type === RibbonItemType.GroupButton ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : contentEle.querySelector('#' + item.id);\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n if (item.type === 'DropDown') {\n this.updatePopupItems(item, dropdown.target, group.enableGroupOverflow, true);\n }\n }\n }\n if (ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i_4 = 0; i_4 < item.groupButtonSettings.items.length; i_4++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_4);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateCommonProperty(ele, 'dropdown-btn', commonProp);\n for (var i_5 = 0; i_5 < item.groupButtonSettings.items.length; i_5++) {\n var btnEle = document.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i_5);\n updateCommonProperty(btnEle, 'btn', commonProp);\n }\n }\n else {\n updateCommonProperty(ele, moduleName, commonProp);\n }\n }\n else if (!isNullOrUndefined(commonProp.enableRtl)) {\n ele.classList.toggle(constants.RTL_CSS, commonProp.enableRtl);\n }\n }\n }\n }\n }\n }\n }\n };\n Ribbon.prototype.removeLauncherIcon = function (groupId, dropdownElement, contentEle) {\n var containerId = groupId + constants.CONTAINER_ID;\n var containerEle = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, containerId) : contentEle.querySelector('#' + containerId);\n if (containerEle) {\n containerEle.classList.remove(constants.RIBBON_LAUNCHER);\n var launcherIcon = containerEle.querySelector('#' + groupId + constants.LAUNCHER_ID);\n remove(launcherIcon);\n }\n };\n Ribbon.prototype.destroyTabItems = function (tabs) {\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[parseInt(i.toString(), 10)];\n var contentEle = this.tabObj.items[parseInt(i.toString(), 10)].content;\n for (var _i = 0, _a = tab.groups; _i < _a.length; _i++) {\n var group = _a[_i];\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n dropdownElement = group.isCollapsed ?\n contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n if (group.showLauncherIcon) {\n this.removeLauncherIcon(group.id, dropdownElement, contentEle);\n }\n }\n else {\n dropdownElement = group.enableGroupOverflow ?\n contentEle.querySelector('#' + group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _b = 0, _c = group.collections; _b < _c.length; _b++) {\n var collection = _c[_b];\n for (var _d = 0, _e = collection.items; _d < _e.length; _d++) {\n var item = _e[_d];\n var ele = void 0;\n if (this.activeLayout === RibbonLayout.Classic) {\n if (item.displayOptions & DisplayMode.Classic) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) :\n contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton) {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ?\n contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown ? dropdown.target.querySelector('#' + item.id) : null;\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if ((this.activeLayout === RibbonLayout.Classic) && dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n else if ((this.activeLayout === RibbonLayout.Simplified) && group.enableGroupOverflow && dropdownElement) {\n this.removeOverflowButton(dropdown);\n }\n }\n }\n if (this.overflowDDB) {\n this.removeOverflowButton(this.overflowDDB);\n this.overflowDDB = null;\n }\n };\n Ribbon.prototype.destroyFunction = function (item, ele) {\n var moduleName = this.getItemModuleName(item);\n if (moduleName === 'colorpicker') {\n this.ribbonColorPickerModule.unwireColorPickerEvents(ele);\n }\n else if (moduleName === 'group-btn') {\n if (this.activeLayout === 'Classic') {\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID + i);\n if (btnEle) {\n destroyControl(btnEle, 'btn');\n }\n }\n }\n else {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n var _loop_3 = function (i) {\n if (item.groupButtonSettings.items[parseInt(i.toString(), 10)].ribbonTooltipSettings) {\n var groupButtonID_1 = item.id + constants.RIBBON_GROUP_BUTTON_ID + i;\n var index = getIndex(this_3.tooltipData, function (e) { return e.id === groupButtonID_1; });\n if (index !== -1) {\n this_3.tooltipData.splice(index, 1);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < item.groupButtonSettings.items.length; i++) {\n _loop_3(i);\n }\n }\n else if (moduleName !== 'template') {\n destroyControl(ele, moduleName);\n }\n if (item.ribbonTooltipSettings) {\n var index = getIndex(this.tooltipData, function (e) { return e.id === item.id + constants.CONTAINER_ID; });\n if (index !== -1) {\n this.tooltipData.splice(index, 1);\n }\n }\n if (item.type === 'GroupButton') {\n this.ribbonGroupButtonModule.destroyDropDown(item);\n }\n };\n Ribbon.prototype.getItemModuleName = function (item) {\n switch (item.type) {\n case 'Button':\n return 'btn';\n case 'DropDown':\n return 'dropdown-btn';\n case 'SplitButton':\n return 'split-btn';\n case 'CheckBox':\n return 'checkbox';\n case 'ColorPicker':\n return 'colorpicker';\n case 'ComboBox':\n return 'combobox';\n case 'GroupButton':\n return 'group-btn';\n default:\n return 'template';\n }\n };\n Ribbon.prototype.clearOverflowResize = function () {\n this.destroyScroll();\n this.clearOverflowDropDown(this.selectedTab);\n var tab = this.tabs[this.selectedTab];\n var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + constants.CONTENT_ID);\n var tabContent = activeContent.closest('.' + constants.TAB_CONTENT);\n for (var j = 0; (j < tab.groups.length); j++) {\n this.checkSmallToMedium(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n this.checkMediumToLarge(this.selectedTab, tab, j, tabContent, activeContent, true, true);\n }\n };\n /**\n * Refreshes the layout.\n *\n * @returns {void}\n */\n Ribbon.prototype.refreshLayout = function () {\n this.resizeHandler();\n };\n /**\n * Selects the tab\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.selectTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n this.setProperties({ selectedTab: index });\n };\n /**\n * Shows a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showTab = function (tabId) {\n this.showHideTab(tabId, false);\n };\n /**\n * Hides a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideTab = function (tabId) {\n this.showHideTab(tabId, true);\n };\n Ribbon.prototype.showHideTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.hideTab(index, value);\n };\n /**\n * Enables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableTab = function (tabId) {\n this.enableDisableTab(tabId, true);\n };\n /**\n * Disables a specific tab in the ribbon.\n *\n * @param {string} tabId - The ID of the tab to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableTab = function (tabId) {\n this.enableDisableTab(tabId, false);\n };\n Ribbon.prototype.enableDisableTab = function (tabId, value) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n this.tabObj.enableTab(index, value);\n };\n /**\n * Adds the ribbon tab.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model\n * @param {string} targetId - Gets the ID of the target tab to add the new tab.\n * @param {boolean} isAfter - Defines whether the tab is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addTab = function (tab, targetId, isAfter) {\n var index = targetId ? getIndex(this.tabs, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? this.tabs.length : (index + (isAfter ? 1 : 0));\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 0, tab);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.checkID([this.tabs[parseInt(index.toString(), 10)]], 'tab', this.element.id);\n this.tabsInternal = this.tabs.slice();\n this.validateItemSize();\n var tabItem = this.createTabItems([tab]);\n this.tabObj.addTab(tabItem, index);\n };\n /**\n * Removes the ribbon tab.\n *\n * @param {string} tabId - Gets the tab ID\n * @returns {void}\n */\n Ribbon.prototype.removeTab = function (tabId) {\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n if (groups && (contentEle.innerHTML !== '')) {\n for (var _i = 0, groups_2 = groups; _i < groups_2.length; _i++) {\n var group = groups_2[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n this.tabsInternal = this.tabs.slice();\n this.tabsInternal.splice(index, 1);\n this.setProperties({ tabs: this.tabsInternal }, true);\n this.tabObj.removeTab(index);\n };\n /**\n * Adds the ribbon group.\n *\n * @param {string} tabId - Gets the tab ID.\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @param {string} targetId - Gets the ID of the target group to add the new group.\n * @param {boolean} isAfter - Defines whether the group is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addGroup = function (tabId, group, targetId, isAfter) {\n var tabIndex = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (tabIndex === -1) {\n return;\n }\n if (this.selectedTab === tabIndex) {\n this.clearOverflowResize();\n }\n var tab = this.tabs[parseInt(tabIndex.toString(), 10)];\n var ribbonGroups = tab.groups.slice();\n var index = targetId ? getIndex(ribbonGroups, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonGroups.length : (index + (isAfter ? 1 : 0));\n ribbonGroups.splice(index, 0, group);\n tab.setProperties({ groups: ribbonGroups }, true);\n this.checkID([tab.groups[parseInt(index.toString(), 10)]], 'group', tabId);\n this.validateItemSize();\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;\n if (contentEle.innerHTML !== '') {\n var element = this.createGroups([tab.groups[parseInt(index.toString(), 10)]], tabIndex)[0];\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.append(element);\n }\n }\n if (this.selectedTab === tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon group.\n *\n * @param {string} groupId -Gets the group ID.\n * @returns {void}\n */\n Ribbon.prototype.removeGroup = function (groupId) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n var groupEle = contentEle.querySelector('#' + groupId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroups = this.tabs[itemProp.tabIndex].groups.slice();\n ribbonGroups.splice(itemProp.groupIndex, 1);\n this.tabs[itemProp.tabIndex].setProperties({ groups: ribbonGroups }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideGroup = function (groupID) {\n this.showHideGroup(groupID, true);\n };\n /**\n * Shows a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showGroup = function (groupID) {\n this.showHideGroup(groupID, false);\n };\n Ribbon.prototype.showHideGroup = function (groupID, isHidden) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n isHidden ? groupEle.classList.add('e-hidden') : groupEle.classList.remove('e-hidden');\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isHidden ? overflowtarget.classList.add('e-hidden') : overflowtarget.classList.remove('e-hidden');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isHidden ? grpContainer.classList.add('e-hidden') : grpContainer.classList.remove('e-hidden');\n }\n }\n }\n this.refreshLayout();\n };\n /**\n * Disables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be disabled.\n * @returns {void}\n */\n Ribbon.prototype.disableGroup = function (groupID) {\n this.enableDisableGroup(groupID, true);\n };\n /**\n * Enables a specific group within a ribbon tab.\n *\n * @param {string} groupID - The ID of the group to be enabled.\n * @returns {void}\n */\n Ribbon.prototype.enableGroup = function (groupID) {\n this.enableDisableGroup(groupID, false);\n };\n Ribbon.prototype.enableDisableGroup = function (groupID, isDisabled) {\n var overflowDDB;\n var overflowtarget;\n var itemProp = getGroup(this.tabs, groupID);\n if (!itemProp) {\n return;\n }\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupID);\n isDisabled ? groupEle.classList.add('e-disabled') : groupEle.classList.remove('e-disabled');\n if (this.overflowDDB) {\n var overflowEle = this.overflowDDB.target;\n var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (itemProp.group.enableGroupOverflow) {\n var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);\n if (overflowDDBEle) {\n overflowDDB = getInstance(overflowDDBEle, DropDownButton);\n overflowtarget = overflowDDB.target;\n }\n if (overflowtarget) {\n isDisabled ? overflowtarget.classList.add('e-disabled') : overflowtarget.classList.remove('e-disabled');\n }\n }\n else if (ofTabContainer) {\n var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);\n if (grpContainer) {\n isDisabled ? grpContainer.classList.add('e-disabled') : grpContainer.classList.remove('e-disabled');\n }\n }\n }\n };\n /**\n * adds the ribbon collection.\n *\n * @param {string} groupId - Gets the ribbon group ID.\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @param {string} targetId - Gets the ID of the target collection to add the new collection.\n * @param {boolean} isAfter - Defines whether the collection is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addCollection = function (groupId, collection, targetId, isAfter) {\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Row') && (itemProp.group.collections.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonCollections = itemProp.group.collections.slice();\n var index = targetId ? getIndex(ribbonCollections, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonCollections.length : (index + (isAfter ? 1 : 0));\n ribbonCollections.splice(index, 0, collection);\n itemProp.group.setProperties({ collections: ribbonCollections }, true);\n this.checkID([itemProp.group.collections[parseInt(index.toString(), 10)]], 'collection', groupId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var collection_1 = itemProp.group.collections[parseInt(index.toString(), 10)];\n var element = this.createCollection([collection_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n contentEle.querySelector('#' + groupId + constants.CONTENT_ID).append(element);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes the ribbon collection.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @returns {void}\n */\n Ribbon.prototype.removeCollection = function (collectionId) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n var groupEle = contentEle.querySelector('#' + collectionId);\n if (groupEle) {\n groupEle.remove();\n }\n }\n var ribbonGroup = itemProp.group;\n var ribbonCollections = ribbonGroup.collections.slice();\n ribbonCollections.splice(itemProp.collectionIndex, 1);\n ribbonGroup.setProperties({ collections: ribbonCollections }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Adds ribbon item.\n *\n * @param {string} collectionId - Gets the collection ID.\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @param {string} targetId - Gets the ID of the target item to add the new item.\n * @param {boolean} isAfter - Defines whether the item is added before or after the target.\n * @returns {void}\n */\n Ribbon.prototype.addItem = function (collectionId, item, targetId, isAfter) {\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if ((itemProp.group.orientation === 'Column') && (itemProp.collection.items.length === 3)) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n var ribbonItems = itemProp.collection.items.slice();\n var index = targetId ? getIndex(ribbonItems, function (e) { return e.id === targetId; }) : -1;\n index = (index === -1) ? ribbonItems.length : (index + (isAfter ? 1 : 0));\n ribbonItems.splice(index, 0, item);\n itemProp.collection.setProperties({ items: ribbonItems }, true);\n this.checkID([itemProp.collection.items[parseInt(index.toString(), 10)]], 'item', collectionId);\n this.validateItemSize();\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (contentEle.innerHTML !== '') {\n var item_1 = itemProp.collection.items[parseInt(index.toString(), 10)];\n var element = this.createItems([item_1], itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer)[0];\n if (itemProp.group.isCollapsed) {\n contentEle = this.ribbonDropDownModule.getOverflowDropDownPopup(itemProp, contentEle);\n }\n //insert the element in tab items property.\n var targetEle = targetId ? contentEle.querySelector('#' + targetId) : null;\n if (targetEle) {\n targetEle.closest('.' + constants.RIBBON_ITEM).insertAdjacentElement(isAfter ? 'afterend' : 'beforebegin', element);\n }\n else {\n if (element) {\n contentEle.querySelector('#' + collectionId).append(element);\n }\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Removes ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.removeItem = function (itemId) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n var item = itemProp.item;\n this.removeItemElement(contentEle, item, dropdown);\n }\n var ribbonCollection = itemProp.collection;\n var ribbonItems = ribbonCollection.items;\n ribbonItems.splice(itemProp.itemIndex, 1);\n ribbonCollection.setProperties({ items: ribbonItems }, true);\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n };\n /**\n * Hides a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be hidden.\n * @returns {void}\n */\n Ribbon.prototype.hideItem = function (itemId) {\n this.showHideItem(itemId, true);\n };\n /**\n * Shows a specific ribbon item.\n *\n * @param {string} itemId - The ID of the item to be shown.\n * @returns {void}\n */\n Ribbon.prototype.showItem = function (itemId) {\n this.showHideItem(itemId, false);\n };\n Ribbon.prototype.showHideItem = function (itemId, isHidden) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n isHidden ? itemEle.classList.add('e-hidden') : itemEle.classList.remove('e-hidden');\n }\n };\n /**\n * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.\n *\n * @param {RibbonTabModel} tab - Gets the ribbon tab model.\n * @returns {void}\n */\n Ribbon.prototype.updateTab = function (tab) {\n var tabId = tab.id;\n var index = getIndex(this.tabs, function (e) { return e.id === tabId; });\n if (index === -1) {\n return;\n }\n var contentEle = this.tabObj.items[parseInt(index.toString(), 10)].content;\n var groups = this.tabs[parseInt(index.toString(), 10)].groups;\n var tabEle = this.tabObj.element;\n if (groups && (contentEle.innerHTML !== '')) {\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (tab.cssClass) {\n if (this.tabs[parseInt(index.toString(), 10)].cssClass) {\n contentEle.classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n tabEle.querySelector('.e-active').classList.remove(this.tabs[parseInt(index.toString(), 10)].cssClass);\n }\n }\n // Check whether group is passed by the user, and if it is, then remove the old values.\n if (tab.groups) {\n for (var _i = 0, groups_3 = groups; _i < groups_3.length; _i++) {\n var group = groups_3[_i];\n var dropdownElement = group.isCollapsed ? contentEle.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID) : null;\n for (var _a = 0, _b = group.collections; _a < _b.length; _a++) {\n var collection = _b[_a];\n for (var _c = 0, _d = collection.items; _c < _d.length; _c++) {\n var item = _d[_c];\n var ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id) : contentEle.querySelector('#' + item.id);\n if (item.type === RibbonItemType.GroupButton && this.activeLayout === 'Classic') {\n ele = dropdownElement ? this.ribbonDropDownModule.getDDBItemElement(dropdownElement, item.id + constants.RIBBON_GROUP_BUTTON_ID) :\n contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (ele) {\n this.destroyFunction(item, ele);\n }\n }\n }\n if (dropdownElement) {\n this.ribbonDropDownModule.removeOverFlowDropDown(dropdownElement);\n }\n }\n var groupElements = contentEle.querySelectorAll('.e-ribbon-group');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n groupElements.forEach(function (groupEle) { groupEle.remove(); });\n }\n }\n if (index === this.selectedTab) {\n this.isAddRemove = true;\n }\n var ribbonTab = this.tabs[parseInt(index.toString(), 10)];\n ribbonTab.setProperties(tab, true);\n this.setProperties({ groups: this.checkID(ribbonTab.groups, 'group', ribbonTab.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML === '') {\n // Check whether group is passed by the user and sets the updated values.\n if (tab.groups) {\n var elements = this.createGroups(ribbonTab.groups, index);\n append(elements, contentEle);\n }\n if (this.selectedTab === index) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (tab.cssClass) {\n contentEle.classList.add(ribbonTab.cssClass);\n tabEle.querySelector('.e-active').classList.add(ribbonTab.cssClass);\n }\n // Check whether header is passed by the user and sets the updated values.\n if (tab.header) {\n tabEle.querySelector('#' + tabId + constants.HEADER_ID).innerText = ribbonTab.header;\n }\n }\n };\n /**\n * group - Gets the ribbon group to be updated. The id of the group is a required property. Other properties are optional.\n *\n * @param {RibbonGroupModel} group - Gets the ribbon group model.\n * @returns {void}\n */\n Ribbon.prototype.updateGroup = function (group) {\n var groupId = group.id;\n var itemProp = getGroup(this.tabs, groupId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + groupId);\n var groupContainer = groupEle.querySelector('#' + group.id + constants.CONTAINER_ID);\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (itemProp.group.showLauncherIcon) {\n this.removeLauncherIcon(itemProp.group.id, null, contentEle);\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (group.cssClass) {\n if (itemProp.group.cssClass) {\n groupEle.classList.remove(itemProp.group.cssClass);\n if (groupContainer) {\n groupContainer.classList.remove(itemProp.group.cssClass);\n }\n }\n }\n // Check whether collections or orientation is passed by the user, and if it is, then remove the old values.\n if (group.collections || group.orientation) {\n if (itemProp.group.collections || itemProp.group.orientation) {\n for (var _i = 0, _a = itemProp.group.collections; _i < _a.length; _i++) {\n var collection = _a[_i];\n for (var _b = 0, _c = collection.items; _b < _c.length; _b++) {\n var item = _c[_b];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n var collectionElements = groupEle.querySelectorAll('.e-ribbon-collection');\n // eslint-disable-next-line @typescript-eslint/tslint/config\n collectionElements.forEach(function (collectionEle) { collectionEle.remove(); });\n if (group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n var removeCss = groupContent.classList.value.match(/(e-ribbon-[column|row]+)/g);\n if (removeCss) {\n removeClass([groupContent], removeCss);\n }\n }\n }\n }\n if (this.activeLayout === RibbonLayout.Simplified) {\n if (itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n else {\n var ofGroupContainer = dropdown.target.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n if (ofGroupContainer && ofGroupContainer.childElementCount === 1) {\n ofGroupContainer.remove();\n }\n var ofTabContainer = dropdown.target.querySelector('#' + this.tabs[parseInt(itemProp.tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);\n if (ofTabContainer && ofTabContainer.childElementCount === 0) {\n ofTabContainer.remove();\n }\n }\n }\n }\n var ribbongroup = itemProp.group;\n ribbongroup.setProperties(group, true);\n ribbongroup.setProperties({ collections: this.checkID(ribbongroup.collections, 'collection', ribbongroup.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n // Check whether showLauncherIcon or orientation is passed by the user and sets the updated values.\n if (group.showLauncherIcon) {\n this.createLauncherIcon(ribbongroup.id, groupContainer);\n }\n // Check whether collections or orientation is passed by the user and sets the updated values.\n if (group.collections || group.orientation) {\n var groupContent = groupContainer.querySelector('.e-ribbon-group-content');\n groupContent.classList.add(((ribbongroup.orientation === 'Column') || (this.activeLayout === 'Simplified')) ? constants.RIBBON_COLUMN : constants.RIBBON_ROW);\n var elements = this.createCollection(ribbongroup.collections, ribbongroup.orientation, ribbongroup.id, ribbongroup.header, ribbongroup.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, groupContent);\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (group.cssClass) {\n groupEle.classList.add(ribbongroup.cssClass);\n if (groupContainer) {\n groupContainer.classList.add(ribbongroup.cssClass);\n }\n }\n // Check whether header is passed by the user and sets the updated values.\n if (group.header) {\n if (this.activeLayout === RibbonLayout.Simplified && !group.enableGroupOverflow) {\n var overflowHeader = dropdown.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n else if (this.activeLayout === RibbonLayout.Classic && !ribbongroup.isCollapsed) {\n groupEle.querySelector('.e-ribbon-group-header').innerText = ribbongroup.header;\n }\n else if (this.activeLayout === RibbonLayout.Classic && ribbongroup.isCollapsed) {\n var overflowEle = groupEle.querySelector('#' + ribbongroup.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n // need to set instance for dropdown\n var dropDownBtn = getInstance(overflowEle, DropDownButton);\n var overflowHeader = dropDownBtn.target.querySelector('#' + group.id + constants.HEADER_ID);\n if (overflowHeader) {\n overflowHeader.innerText = ribbongroup.header;\n }\n }\n }\n }\n };\n /**\n * collection - Gets the ribbon collection to be updated. The id of the collection is a required property. Other properties are optional.\n *\n * @param {RibbonCollectionModel} collection - Gets the ribbon collection model.\n * @returns {void}\n */\n Ribbon.prototype.updateCollection = function (collection) {\n var collectionId = collection.id;\n var itemProp = getCollection(this.tabs, collectionId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var collectionEle = contentEle.querySelector('#' + collectionId);\n if (contentEle.innerHTML !== '') {\n var dropdownElement = void 0;\n var dropdown = void 0;\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (collection.cssClass) {\n if (itemProp.collection.cssClass) {\n collectionEle.classList.remove(itemProp.collection.cssClass);\n }\n }\n if (collection.items) {\n if (itemProp.collection.items) {\n for (var _i = 0, _a = itemProp.collection.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.removeItemElement(contentEle, item, dropdown);\n }\n }\n }\n }\n var ribboncollection = itemProp.collection;\n ribboncollection.setProperties(collection, true);\n ribboncollection.setProperties({ items: this.checkID(ribboncollection.items, 'item', ribboncollection.id) }, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (collection.items) {\n var groupContainer = contentEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var elements = this.createItems(ribboncollection.items, itemProp.group.orientation, itemProp.group.id, itemProp.group.header, itemProp.group.enableGroupOverflow, itemProp.tabIndex, groupContainer);\n append(elements, collectionEle);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n // Check whether cssClass is passed by the user and sets the updated values.\n if (collection.cssClass) {\n collectionEle.classList.add(ribboncollection.cssClass);\n }\n };\n /**\n * item - Gets the ribbon item to be updated. The id of the item is a required property. Other properties are optional.\n *\n * @param {RibbonItemModel} item - Gets the ribbon item model.\n * @returns {void}\n */\n Ribbon.prototype.updateItem = function (item) {\n var itemId = item.id;\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.clearOverflowResize();\n }\n //Check whether the tab items are rendered\n var contentEle = this.tabObj.items[itemProp.tabIndex].content;\n var groupEle = contentEle.querySelector('#' + itemProp.group.id);\n var groupContainer = groupEle.querySelector('#' + itemProp.group.id + constants.CONTAINER_ID);\n var itemContainer = null;\n var itemEle = null;\n var dropdownElement;\n var dropdown;\n if (contentEle.innerHTML !== '') {\n if (this.activeLayout === RibbonLayout.Simplified) {\n dropdownElement = itemProp.group.enableGroupOverflow ?\n contentEle.querySelector('#' + itemProp.group.id + constants.GROUPOF_BUTTON_ID) : null;\n dropdown = dropdownElement ? getComponent(dropdownElement, DropDownButton) : this.overflowDDB;\n }\n if (this.activeLayout === RibbonLayout.Simplified && itemProp.item.displayOptions === DisplayMode.Overflow) {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = dropdown.target.querySelector('#' + itemId);\n if (item.displayOptions && item.displayOptions !== DisplayMode.Overflow) {\n var collectionEle = groupContainer.querySelector('#' + itemProp.collection.id);\n if (collectionEle) {\n collectionEle.appendChild(itemContainer);\n }\n }\n }\n else {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n itemEle = contentEle.querySelector('#' + itemId);\n if (itemProp.item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Classic) {\n itemEle = contentEle.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID);\n }\n if (this.activeLayout === RibbonLayout.Simplified && item.displayOptions === DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n if ((itemProp.item.type === RibbonItemType.DropDown) || (itemProp.item.type === RibbonItemType.SplitButton) || (item.type === RibbonItemType.GroupButton)) {\n this.updatePopupItems(itemProp.item, itemContainer, itemProp.group.enableGroupOverflow, true);\n }\n }\n }\n // Check whether cssClass is passed by the user, and if it is, then remove the old values.\n if (item.cssClass) {\n if (itemProp.item.cssClass) {\n itemContainer.classList.remove(itemProp.item.cssClass);\n }\n }\n this.destroyFunction(itemProp.item, itemEle);\n itemEle.remove();\n var removeCss = itemContainer.classList.value.match(/(e-ribbon-[large|medium|small]+-item)/g);\n if (removeCss) {\n removeClass([itemContainer], removeCss);\n }\n }\n var ribbonItem = itemProp.item;\n ribbonItem.setProperties(item, true);\n this.validateItemSize();\n if (contentEle.innerHTML !== '') {\n if (!(this.activeLayout === RibbonLayout.Simplified && ribbonItem.displayOptions === DisplayMode.Overflow)) {\n itemContainer = groupContainer.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n else {\n itemContainer = dropdown.target.querySelector('#' + itemId + constants.CONTAINER_ID);\n }\n // To avoid undefined items condition is added\n if (ribbonItem.ribbonTooltipSettings && isTooltipPresent(ribbonItem.ribbonTooltipSettings)) {\n itemContainer.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.tooltipData.push({ id: itemContainer.id, data: ribbonItem.ribbonTooltipSettings });\n }\n var size = ribbonItem.activeSize;\n if (this.activeLayout === 'Simplified') {\n size = ((ribbonItem.allowedSizes === RibbonItemSize.Large) || (ribbonItem.allowedSizes & RibbonItemSize.Medium) ||\n (ribbonItem.displayOptions === DisplayMode.Overflow)) ? RibbonItemSize.Medium : RibbonItemSize.Small;\n ribbonItem.setProperties({ activeSize: size }, true);\n }\n if (size & RibbonItemSize.Large) {\n itemContainer.classList.add(constants.RIBBON_LARGE_ITEM, constants.RIBBON_CONTENT_HEIGHT);\n }\n else {\n itemContainer.classList.add((size & RibbonItemSize.Medium) ? constants.RIBBON_MEDIUM_ITEM : constants.RIBBON_SMALL_ITEM);\n }\n this.createRibbonItem(ribbonItem, itemContainer);\n if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {\n if (dropdown.target.childElementCount === 0) {\n this.removeOverflowButton(dropdown);\n }\n }\n if (this.selectedTab === itemProp.tabIndex) {\n this.refreshLayout();\n }\n if (item.cssClass) {\n itemContainer.classList.add(ribbonItem.cssClass);\n }\n this.enableDisableItem(ribbonItem.id, ribbonItem.disabled);\n }\n };\n Ribbon.prototype.removeItemElement = function (contentEle, item, dropdown) {\n var ele = null;\n if (this.activeLayout === RibbonLayout.Classic) {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id) : null;\n if (item.type === 'GroupButton') {\n ele = (item.displayOptions & DisplayMode.Classic) ? contentEle.querySelector('#' + item.id + constants.RIBBON_GROUP_BUTTON_ID) : null;\n }\n }\n else {\n //Checks for Simplified and Auto options (Auto = classic + simplified + popup)\n ele = (item.displayOptions & DisplayMode.Simplified) ? contentEle.querySelector('#' + item.id) : null;\n // element will be null for \"Popup\" and if the item is moved to overflow in \"Auto\" mode\n if (!ele) {\n ele = dropdown.target.querySelector('#' + item.id);\n }\n }\n if (ele) {\n this.destroyFunction(item, ele);\n if (item.type === 'GroupButton' && this.activeLayout === RibbonLayout.Simplified) {\n document.getElementById(item.id + constants.CONTAINER_ID).remove();\n }\n else {\n ele.closest('#' + item.id + constants.CONTAINER_ID).remove();\n }\n }\n };\n /**\n * Enables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.enableItem = function (itemId) {\n this.enableDisableItem(itemId, false);\n };\n /**\n * Disables ribbon item.\n *\n * @param {string} itemId - Gets the item ID.\n * @returns {void}\n */\n Ribbon.prototype.disableItem = function (itemId) {\n this.enableDisableItem(itemId, true);\n };\n Ribbon.prototype.enableDisableItem = function (itemId, isDisabled) {\n var itemProp = getItem(this.tabs, itemId);\n if (!itemProp) {\n return;\n }\n itemProp.item.setProperties({ disabled: isDisabled }, true);\n var ele;\n if (itemProp.item.type === 'GroupButton') {\n ele = getItemElement(this, itemId + constants.RIBBON_GROUP_BUTTON_ID, itemProp);\n }\n else {\n ele = getItemElement(this, itemId, itemProp);\n }\n if (ele) {\n var itemEle = closest(ele, '.e-ribbon-item');\n itemEle.classList.toggle(constants.DISABLED_CSS, itemProp.item.disabled);\n var moduleName = this.getItemModuleName(itemProp.item);\n if (moduleName !== 'template') {\n if (moduleName === 'group-btn' && this.activeLayout === 'Simplified') {\n updateControlDisabled(ele, 'dropdown-btn', isDisabled);\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = document.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else if (moduleName === 'group-btn' && this.activeLayout === 'Classic') {\n for (var i = 0; i < itemProp.item.groupButtonSettings.items.length; i++) {\n var btnEle = ele.querySelector('#' + itemId + constants.RIBBON_GROUP_BUTTON_ID + i);\n updateControlDisabled(btnEle, 'btn', isDisabled);\n }\n }\n else {\n updateControlDisabled(ele, moduleName, isDisabled);\n }\n }\n else {\n ele.classList.toggle(constants.DISABLED_CSS, isDisabled);\n ele.toggleAttribute('disabled', isDisabled);\n }\n }\n };\n Ribbon.prototype.unwireEvents = function () {\n EventHandler.remove(window, 'resize', this.resizeHandler);\n };\n Ribbon.prototype.destroy = function () {\n this.keyboardModuleRibbon.destroy();\n this.keyboardModuleRibbon = null;\n destroyTooltip(this.element);\n this.destroyTabItems(this.tabs);\n if (!this.hideLayoutSwitcher) {\n this.removeExpandCollapse();\n }\n this.collapseButton = undefined;\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n }\n _super.prototype.destroy.call(this);\n this.tabObj.destroy();\n this.tabObj = undefined;\n remove(this.element.querySelector('#' + this.element.id + constants.TAB_ID));\n this.element.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.element.style.removeProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH);\n this.element.style.removeProperty('width');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(constants.SPACE));\n }\n this.element.classList.remove(constants.RTL_CSS, constants.RIBBON_SIMPLIFIED_MODE, constants.RIBBON_OVERFLOW, constants.RIBBON_COLLAPSIBLE, constants.RIBBON_MINIMIZE, 'e-rbn');\n this.unwireEvents();\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RibbonModel} newProp - Specifies new properties\n * @param {RibbonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Ribbon.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _a, _b;\n for (var _i = 0, _c = Object.keys(newProp); _i < _c.length; _i++) {\n var prop = _c[_i];\n switch (prop) {\n case 'activeLayout':\n this.switchLayout();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n (_a = this.element.classList).remove.apply(_a, oldProp.cssClass.split(constants.SPACE));\n }\n if (newProp.cssClass) {\n (_b = this.element.classList).add.apply(_b, newProp.cssClass.split(constants.SPACE));\n }\n break;\n case 'isMinimized':\n this.element.classList.toggle(constants.RIBBON_MINIMIZE, this.isMinimized);\n this.tabObj.element.querySelector('.e-content').style.display = this.isMinimized ? 'none' : 'block';\n if (!this.isMinimized) {\n this.refreshLayout();\n }\n break;\n case 'locale':\n this.updateCommonProperty({ locale: this.locale });\n break;\n case 'enablePersistence':\n this.updateCommonProperty({ enablePersistence: this.enablePersistence });\n break;\n case 'enableRtl':\n this.element.classList.toggle(constants.RTL_CSS, this.enableRtl);\n this.updateCommonProperty({ enableRtl: newProp.enableRtl });\n if (this.scrollModule) {\n this.scrollModule.setProperties({ enableRtl: newProp.enableRtl });\n }\n break;\n case 'launcherIconCss':\n for (var i = 0; i < this.tabs.length; i++) {\n var tabContent = this.tabObj.items[parseInt(i.toString(), 10)].content;\n var tab = this.tabs[parseInt(i.toString(), 10)];\n if (tabContent.querySelector('.' + constants.RIBBON_GROUP)) {\n for (var _d = 0, _e = tab.groups; _d < _e.length; _d++) {\n var group = _e[_d];\n if (group.showLauncherIcon) {\n var className = constants.RIBBON_LAUNCHER_ICON_ELE + ' ' + (this.launcherIconCss || constants.RIBBON_LAUNCHER_ICON);\n if (group.isCollapsed) {\n var element = tabContent.querySelector('#' + group.id + constants.OVERFLOW_ID + constants.DROPDOWN_ID);\n var dropdown = getComponent(element, DropDownButton);\n var launcherIconEle = dropdown.target.querySelector('#' + group.id + constants.LAUNCHER_ID);\n launcherIconEle.className = className;\n }\n else {\n var element = tabContent.querySelector('#' + group.id + constants.LAUNCHER_ID);\n element.className = className;\n }\n }\n }\n }\n }\n break;\n case 'selectedTab':\n this.tabObj.setProperties({ selectedItem: newProp.selectedTab });\n break;\n case 'tabAnimation':\n this.tabObj.setProperties({ animation: newProp.tabAnimation });\n break;\n case 'tabs':\n this.reRenderTabs(newProp.tabs);\n break;\n case 'width':\n this.element.style.width = formatUnit(newProp.width);\n this.refreshLayout();\n break;\n case 'fileMenu':\n if (this.ribbonFileMenuModule) {\n this.ribbonFileMenuModule.updateFileMenu(this.fileMenu);\n }\n var toolbarEle = this.tabObj['tbObj'];\n toolbarEle.refreshOverflow();\n break;\n case 'backStageMenu':\n if (this.ribbonBackstageModule) {\n this.ribbonBackstageModule.updateBackStageMenu(this.backStageMenu);\n }\n var toolbarElement = this.tabObj['tbObj'];\n toolbarElement.refreshOverflow();\n break;\n case 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n case 'hideLayoutSwitcher':\n this.hideLayoutSwitcher ? this.removeExpandCollapse() : this.addExpandCollapse();\n break;\n }\n }\n };\n var Ribbon_1;\n __decorate([\n Property('Classic')\n ], Ribbon.prototype, \"activeLayout\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, FileMenuSettings)\n ], Ribbon.prototype, \"fileMenu\", void 0);\n __decorate([\n Complex({}, BackStageMenu)\n ], Ribbon.prototype, \"backStageMenu\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"launcherIconCss\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"isMinimized\", void 0);\n __decorate([\n Property('en-us')\n ], Ribbon.prototype, \"locale\", void 0);\n __decorate([\n Property(0)\n ], Ribbon.prototype, \"selectedTab\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Ribbon.prototype, \"tabAnimation\", void 0);\n __decorate([\n Collection([], RibbonTab)\n ], Ribbon.prototype, \"tabs\", void 0);\n __decorate([\n Property('100%')\n ], Ribbon.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Ribbon.prototype, \"helpPaneTemplate\", void 0);\n __decorate([\n Property(false)\n ], Ribbon.prototype, \"hideLayoutSwitcher\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelecting\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"tabSelected\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonExpanding\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"ribbonCollapsing\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"launcherIconClick\", void 0);\n __decorate([\n Event()\n ], Ribbon.prototype, \"created\", void 0);\n Ribbon = Ribbon_1 = __decorate([\n NotifyPropertyChanges\n ], Ribbon);\n return Ribbon;\n}(Component));\nexport { Ribbon };\n","import { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex, isTooltipPresent } from '../base/index';\nimport * as constants from '../base/constant';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonFileMenu = /** @class */ (function () {\n function RibbonFileMenu(parent) {\n this.parent = parent;\n }\n RibbonFileMenu.prototype.getModuleName = function () {\n return 'ribbonFileMenu';\n };\n RibbonFileMenu.prototype.destroy = function () {\n if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates File Menu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.createFileMenu = function (fileMenuOptions) {\n var _this = this;\n if (!fileMenuOptions.visible) {\n return;\n }\n this.ddbElement = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.ddbElement, toolbarEle);\n this.fileMenuDDB = new DropDownButton({\n content: fileMenuOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-file-menu e-caret-hide',\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.ddbElement.offsetWidth + 'px');\n },\n beforeClose: this.ddbBeforeEvent.bind(this, false),\n beforeOpen: this.ddbBeforeEvent.bind(this, true),\n close: this.ddbAfterEvent.bind(this, false),\n open: this.ddbAfterEvent.bind(this, true)\n }, this.ddbElement);\n if (this.parent.fileMenu.popupTemplate) {\n this.fileMenuDDB.setProperties({ target: this.parent.fileMenu.popupTemplate });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n this.parent.tabObj.refreshActiveTabBorder();\n this.addFileMenuTooltip(fileMenuOptions);\n };\n RibbonFileMenu.prototype.addFileMenuTooltip = function (fileMenuOptions) {\n if (isTooltipPresent(fileMenuOptions.ribbonTooltipSettings)) {\n this.ddbElement.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.ddbElement.id, data: fileMenuOptions.ribbonTooltipSettings });\n }\n };\n RibbonFileMenu.prototype.ddbBeforeEvent = function (isOpen, args) {\n //args.event is null when dropdown button is closed using a method call\n if (!isOpen && args.event && args.event.target.closest('.e-ribbon-menu')) {\n args.cancel = true;\n }\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = { cancel: args.cancel, element: args.element, event: args.event };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.ddbAfterEvent = function (isOpen, args) {\n var element = isOpen ? this.fileMenuDDB.target : this.fileMenuDDB.element;\n element.focus();\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element };\n event.call(this, eventArgs);\n }\n };\n //Clone RibbonMenuItems before assigning to avoid reference issues.\n RibbonFileMenu.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n itemsList.push({\n iconCss: item.iconCss,\n id: item.id,\n separator: item.separator,\n text: item.text,\n url: item.url,\n items: this.cloneMenuItem(item.items)\n });\n }\n return itemsList;\n };\n RibbonFileMenu.prototype.createRibbonMenu = function (menuOptions) {\n var _this = this;\n var ulElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FILE_MENU_LIST\n });\n this.fileMenuDDB.setProperties({ target: ulElem });\n this.menuctrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: 'e-ribbon-menu',\n animationSettings: menuOptions.animationSettings,\n items: this.cloneMenuItem(menuOptions.menuItems),\n showItemOnClick: menuOptions.showItemOnClick,\n template: menuOptions.itemTemplate,\n beforeClose: this.menuBeforeEvent.bind(this, false),\n beforeOpen: this.menuBeforeEvent.bind(this, true),\n beforeItemRender: this.beforeItemRender.bind(this),\n onClose: this.menuAfterEvent.bind(this, false),\n onOpen: this.menuAfterEvent.bind(this, true),\n select: this.menuSelect.bind(this)\n }, ulElem);\n EventHandler.add(ulElem, 'keydown', function (e) {\n if (e.key === 'Tab') {\n _this.fileMenuDDB.toggle();\n }\n }, this);\n };\n RibbonFileMenu.prototype.menuBeforeEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.beforeOpen :\n this.parent.fileMenu.beforeClose;\n if (event) {\n var eventArgs = {\n cancel: args.cancel, element: args.element, event: args.event,\n items: args.items, parentItem: args.parentItem\n };\n event.call(this, eventArgs);\n args.cancel = eventArgs.cancel;\n }\n };\n RibbonFileMenu.prototype.menuAfterEvent = function (isOpen, args) {\n var event = isOpen ? this.parent.fileMenu.open : this.parent.fileMenu.close;\n if (event) {\n var eventArgs = { element: args.element, items: args.items, parentItem: args.parentItem };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.beforeItemRender = function (args) {\n var event = this.parent.fileMenu.beforeItemRender;\n if (event) {\n var eventArgs = { element: args.element, item: args.item };\n event.call(this, eventArgs);\n }\n };\n RibbonFileMenu.prototype.menuSelect = function (args) {\n var event = this.parent.fileMenu.select;\n if (event) {\n var eventArgs = { element: args.element, item: args.item, event: args.event };\n event.call(this, eventArgs);\n if (!args.element.classList.contains('e-menu-caret-icon')) {\n this.fileMenuDDB.toggle();\n }\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.setCommonProperties = function (commonProp) {\n if (this.fileMenuDDB) {\n this.fileMenuDDB.setProperties(commonProp);\n if (this.menuctrl) {\n this.menuctrl.setProperties(commonProp);\n }\n }\n };\n /**\n * Update FileMenu\n *\n * @param {FileMenuSettingsModel} fileMenuOptions - Gets the property of filemenu.\n * @returns {void}\n * @hidden\n */\n RibbonFileMenu.prototype.updateFileMenu = function (fileMenuOptions) {\n if (fileMenuOptions.visible) {\n if (this.fileMenuDDB) {\n if (fileMenuOptions.text) {\n this.fileMenuDDB.setProperties({\n content: fileMenuOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.ddbElement.offsetWidth + 'px');\n }\n if (fileMenuOptions.popupTemplate) {\n if (this.menuctrl) {\n this.destroyMenu();\n }\n this.fileMenuDDB.setProperties({ target: fileMenuOptions.popupTemplate });\n }\n else {\n if (this.menuctrl) {\n this.menuctrl.setProperties({\n animationSettings: fileMenuOptions.animationSettings,\n items: this.cloneMenuItem(fileMenuOptions.menuItems),\n showItemOnClick: fileMenuOptions.showItemOnClick,\n template: fileMenuOptions.itemTemplate\n });\n }\n else {\n this.createRibbonMenu(fileMenuOptions);\n }\n }\n this.removeFileMenuTooltip();\n this.addFileMenuTooltip(fileMenuOptions);\n }\n else {\n this.createFileMenu(fileMenuOptions);\n }\n }\n else if (this.fileMenuDDB) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonFileMenu.prototype.destroyMenu = function () {\n if (this.menuctrl) {\n this.menuctrl.destroy();\n this.menuctrl = null;\n }\n };\n RibbonFileMenu.prototype.destroyDDB = function () {\n this.removeFileMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.fileMenuDDB.destroy();\n this.fileMenuDDB = null;\n remove(this.ddbElement);\n this.ddbElement = null;\n };\n RibbonFileMenu.prototype.removeFileMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.ddbElement.id; });\n if (index !== -1) {\n this.ddbElement.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to FileMenu.\n *\n * @param {MenuItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.addItems = function (items, target, isAfter, isUniqueId) {\n if (isAfter) {\n this.menuctrl.insertAfter(items, target, isUniqueId);\n }\n else {\n this.menuctrl.insertBefore(items, target, isUniqueId);\n }\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Remove items from FileMenu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.removeItems = function (items, isUniqueId) {\n this.menuctrl.removeItems(items, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Enable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be enabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.enableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, true, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Disable items in FileMenu.\n *\n * @param {string[]} items - Gets the items to be disabled.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.disableItems = function (items, isUniqueId) {\n this.menuctrl.enableItems(items, false, isUniqueId);\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n /**\n * Update items in FileMenu.\n *\n * @param {MenuItem} item - Gets the item to be updated.\n * @param {boolean} id - Gets the id of the item to be updated.\n * @param {boolean} isUniqueId - Gets whether the id provided is uniqueId or not.\n * @returns {void}\n */\n RibbonFileMenu.prototype.setItem = function (item, id, isUniqueId) {\n this.menuctrl.setItem(item, id, isUniqueId);\n this.menuctrl.refresh();\n this.parent.fileMenu.setProperties({ menuItems: this.menuctrl.items }, true);\n };\n return RibbonFileMenu;\n}());\nexport { RibbonFileMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, append, Component, EventHandler } from '@syncfusion/ej2-base';\nimport { Menu } from '@syncfusion/ej2-navigations';\nimport { getIndex } from '../base/index';\nimport { getTemplateFunction, isTooltipPresent } from '../base/utils';\nimport * as constants from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\n/**\n * Defines the items of Ribbon.\n */\nvar RibbonBackstage = /** @class */ (function (_super) {\n __extends(RibbonBackstage, _super);\n function RibbonBackstage(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.render = function () {\n // render code\n };\n /**\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.preRender = function () {\n // pre render code\n };\n RibbonBackstage.prototype.getPersistData = function () {\n return '';\n };\n /**\n * This method is abstract member of the Component<HTMLElement>.\n *\n * @private\n * @returns {void}\n */\n RibbonBackstage.prototype.onPropertyChanged = function () {\n // onProperty changes code\n };\n RibbonBackstage.prototype.getModuleName = function () {\n return 'ribbonBackstage';\n };\n RibbonBackstage.prototype.destroy = function () {\n if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent = null;\n };\n /**\n * Creates Backstage Menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.createBackStage = function (backStageOptions) {\n var _this = this;\n if (!backStageOptions.visible) {\n return;\n }\n this.backstageButtonEle = this.parent.createElement('button', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID\n });\n var tabEle = this.parent.tabObj.element;\n var toolbarEle = tabEle.querySelector('.e-toolbar');\n tabEle.insertBefore(this.backstageButtonEle, toolbarEle);\n this.backstageButton = new Button({\n content: backStageOptions.text,\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE,\n created: function () {\n tabEle.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, _this.backstageButtonEle.offsetWidth + 'px');\n }\n }, this.backstageButtonEle);\n this.createBackStagePopup(backStageOptions);\n if (this.parent.backStageMenu.template) {\n this.createBackStageTemplate(this.parent.backStageMenu.template);\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n if (this.menuCtrl) {\n this.checkMenuItems(this.menuCtrl.items);\n }\n if (this.footerMenuCtrl) {\n this.checkMenuItems(this.footerMenuCtrl.items);\n }\n }\n this.backstageButtonEle.onclick = function (e) {\n e.stopPropagation();\n _this.showBackstage();\n _this.popupHTMLElement.classList.add(constants.RIBBON_BACKSTAGE_OPEN);\n var menuItem = _this.menuWrapper.querySelector('.e-menu-item.e-selected');\n if (menuItem) {\n menuItem.classList.remove('e-selected');\n }\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (!item.isFooter && _this.menuCtrl.items[0].text === item.text) {\n var firstMenuEle = _this.popupHTMLElement.querySelector('#' + _this.menuCtrl.items[0].id);\n if (firstMenuEle) {\n firstMenuEle.classList.add('e-selected');\n firstMenuEle.focus();\n }\n _this.createBackStageContent(_this.menuCtrl.items[0].id, item.content);\n break;\n }\n else {\n continue;\n }\n }\n };\n this.parent.tabObj.refreshActiveTabBorder();\n this.addBackStageMenuTooltip(backStageOptions);\n EventHandler.add(document, 'click', this.onClickEvent, this);\n };\n RibbonBackstage.prototype.onClickEvent = function (e) {\n var targetEle = e.target;\n if (this.popupHTMLElement.contains(targetEle)) {\n return;\n }\n else {\n this.hideBackstage();\n }\n };\n RibbonBackstage.prototype.addBackStageMenuTooltip = function (backStageOptions) {\n if (isTooltipPresent(backStageOptions.ribbonTooltipSettings)) {\n this.backstageButtonEle.classList.add(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.push({ id: this.backstageButtonEle.id, data: backStageOptions.ribbonTooltipSettings });\n }\n };\n RibbonBackstage.prototype.checkMenuItems = function (backStageItems) {\n for (var i = 0; i < backStageItems.length; i++) {\n var item = backStageItems[parseInt(i.toString(), 10)];\n if (!item.iconCss) {\n var menuItemEle = this.popupHTMLElement.querySelector('#' + item.id);\n menuItemEle.classList.add(constants.RIBBON_BACKSTAGE_TEXT_MENU);\n }\n }\n };\n RibbonBackstage.prototype.createBackStagePopup = function (backStageOptions) {\n var _this = this;\n this.popupHTMLElement = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_POPUP_ID,\n className: constants.RIBBON_BACKSTAGE_POPUP\n });\n var targetEle;\n if (backStageOptions.target) {\n targetEle = backStageOptions.target instanceof HTMLElement ? backStageOptions.target : document.querySelector(backStageOptions.target);\n targetEle.appendChild(this.popupHTMLElement);\n }\n else {\n this.parent.element.appendChild(this.popupHTMLElement);\n }\n this.popupEle = new Popup(this.popupHTMLElement, {\n height: backStageOptions.height,\n width: backStageOptions.width,\n relateTo: backStageOptions.target || this.parent.element,\n enableRtl: this.parent.enableRtl\n });\n if (this.parent.enableRtl) {\n this.updatePopupPositionOnRtl(this.parent.enableRtl);\n }\n this.popupHTMLElement.onkeydown = function (e) { if (e.code === 'Escape') {\n _this.hideBackstage();\n } };\n this.hideBackstage();\n };\n RibbonBackstage.prototype.updatePopupPositionOnRtl = function (enableRtl) {\n var popupStyle = this.popupHTMLElement.style;\n if (enableRtl) {\n popupStyle.right = popupStyle.left;\n popupStyle.left = 'unset';\n }\n else {\n popupStyle.left = popupStyle.right;\n popupStyle.right = 'unset';\n }\n };\n RibbonBackstage.prototype.createBackstageMenu = function (menuOptions, isFooter) {\n var _this = this;\n var wrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_wrapper');\n if (!wrapperEle) {\n this.menuWrapper = this.parent.createElement('div', {\n id: this.parent.element.id + '_wrapper',\n className: constants.RIBBON_BACKSTAGE_MENU_WRAPPER\n });\n this.popupHTMLElement.appendChild(this.menuWrapper);\n }\n if (menuOptions.backButton.visible && !isFooter) {\n var closeBtnEle = this.parent.createElement('button', {\n id: this.parent.element.id + '_close',\n className: 'e-ribbon-close-btn'\n });\n this.closeBtn = new Button({\n content: menuOptions.backButton.text,\n iconCss: menuOptions.backButton.iconCss ? menuOptions.backButton.iconCss : constants.BACKSTAGE_CLOSE_ICON,\n enableRtl: this.parent.enableRtl\n }, closeBtnEle);\n this.menuWrapper.append(closeBtnEle);\n closeBtnEle.onclick = function () {\n _this.popupHTMLElement.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n _this.hideBackstage();\n _this.isBackButtonClicked = true;\n };\n }\n var itemsWrapperEle = this.popupHTMLElement.querySelector('#' + this.parent.element.id + '_itemswrapper');\n if (!itemsWrapperEle) {\n this.itemsWrapperEle = this.parent.createElement('div', {\n id: this.parent.element.id + '_itemswrapper',\n className: constants.RIBBON_BACKSTAGE_ITEMS_WRAPPER\n });\n this.menuWrapper.append(this.itemsWrapperEle);\n }\n var ulFooterElem;\n if (isFooter) {\n ulFooterElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_FOOTER_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(ulFooterElem);\n }\n else {\n this.ulMenuElem = this.parent.createElement('ul', {\n id: this.parent.element.id + constants.RIBBON_MENU_LIST\n });\n this.itemsWrapperEle.appendChild(this.ulMenuElem);\n }\n if (!isFooter) {\n this.menuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, this.ulMenuElem);\n }\n else {\n this.footerMenuCtrl = new Menu({\n orientation: 'Vertical',\n enableRtl: this.parent.enableRtl,\n cssClass: constants.RIBBON_BACKSTAGE_MENU,\n items: this.cloneFooterMenuItem(menuOptions.items),\n select: this.menuSelect.bind(this, menuOptions)\n }, ulFooterElem);\n }\n };\n RibbonBackstage.prototype.cloneMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.cloneFooterMenuItem = function (items) {\n var itemsList = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (!item.isFooter) {\n continue;\n }\n else {\n itemsList.push({\n id: item.id,\n iconCss: item.iconCss,\n separator: item.separator,\n text: item.text\n });\n }\n }\n return itemsList;\n };\n RibbonBackstage.prototype.createBackStageContent = function (itemId, content) {\n var templateName = 'backstageContent';\n this.clearTemplate([templateName]);\n if (!this.backstageContentEle) {\n this.backstageContentEle = this.parent.createElement('div', {\n id: itemId + constants.CONTENT_ID,\n className: constants.RIBBON_BACKSTAGE_CONTENT\n });\n }\n else {\n this.backstageContentEle.innerHTML = '';\n this.backstageContentEle.id = itemId + constants.CONTENT_ID;\n }\n var templateFunction = getTemplateFunction(content);\n append(templateFunction({}, this, templateName, 'backstageContent', this.parent.isStringTemplate), this.backstageContentEle);\n if (content) {\n this.popupHTMLElement.append(this.backstageContentEle);\n }\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.createBackStageTemplate = function (template) {\n var templateName = 'backstageTemplate';\n this.clearTemplate([templateName]);\n this.backstageTempEle = this.parent.createElement('div', {\n id: this.parent.element.id + constants.RIBBON_BACKSTAGE_MENU_ID + '_template',\n className: constants.RIBBON_BACKSTAGE_TEMPLATE\n });\n var templateFunction = getTemplateFunction(template);\n append(templateFunction({}, this, templateName, 'backstageTemplate', this.parent.isStringTemplate), this.backstageTempEle);\n this.popupHTMLElement.append(this.backstageTempEle);\n this.renderReactTemplates();\n return templateFunction;\n };\n RibbonBackstage.prototype.menuSelect = function (menuOptions, args) {\n for (var i = 0; i < menuOptions.items.length; i++) {\n var item = menuOptions.items[parseInt(i.toString(), 10)];\n if (item.text === args.item.text) {\n this.contentItem = item;\n break;\n }\n }\n this.createBackStageContent(args.item.id, this.contentItem.content);\n var eventArgs = { cancel: false, target: args.element, item: this.contentItem, isBackButton: this.isBackButtonClicked };\n if (this.contentItem.backStageItemClick) {\n this.contentItem.backStageItemClick.call(this, eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n };\n /**\n * setRtl\n *\n * @param {commonProperties} commonProp - Get the common property of ribbon.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.setCommonProperties = function (commonProp) {\n if (this.backstageButton) {\n this.backstageButton.setProperties(commonProp);\n if (this.popupEle) {\n this.popupEle.setProperties(commonProp);\n if (this.popupHTMLElement)\n this.updatePopupPositionOnRtl(commonProp.enableRtl);\n if (this.menuCtrl) {\n this.menuCtrl.setProperties(commonProp);\n if (this.closeBtn) {\n this.closeBtn.setProperties(commonProp);\n }\n }\n }\n }\n };\n /**\n * Update Backstage menu\n *\n * @param {BackStageMenuModel} backStageOptions - Gets the property of backstage menu.\n * @returns {void}\n * @hidden\n */\n RibbonBackstage.prototype.updateBackStageMenu = function (backStageOptions) {\n if (backStageOptions.visible) {\n if (this.backstageButton) {\n if (backStageOptions.text) {\n this.backstageButton.setProperties({\n content: backStageOptions.text\n });\n this.parent.tabObj.element.style.setProperty(constants.RIBBON_FILE_MENU_WIDTH, this.backstageButtonEle.offsetWidth + 'px');\n }\n if (this.popupEle) {\n this.popupEle.setProperties({\n height: backStageOptions.height,\n width: backStageOptions.width,\n target: backStageOptions.target || this.parent.element,\n });\n }\n if (backStageOptions.template) {\n if (this.backstageTempEle) {\n remove(this.backstageTempEle);\n this.backstageTempEle = null;\n }\n this.createBackStageTemplate(backStageOptions.template);\n }\n else {\n if (this.menuCtrl) {\n this.menuCtrl.setProperties({\n items: this.cloneMenuItem(backStageOptions.items)\n });\n }\n if (this.footerMenuCtrl) {\n this.footerMenuCtrl.setProperties({\n items: this.cloneFooterMenuItem(backStageOptions.items)\n });\n }\n else {\n var footerItemCount = 0;\n var itemCount = 0;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n footerItemCount++;\n }\n else {\n itemCount++;\n }\n }\n if (itemCount > 0) {\n this.createBackstageMenu(backStageOptions, false);\n }\n if (footerItemCount > 0) {\n this.createBackstageMenu(backStageOptions, true);\n }\n }\n }\n this.removeBackstageMenuTooltip();\n this.addBackStageMenuTooltip(backStageOptions);\n }\n else {\n this.createBackStage(backStageOptions);\n }\n }\n else if (this.backstageButton) {\n this.destroyDDB();\n }\n this.parent.tabObj.refreshActiveTabBorder();\n };\n RibbonBackstage.prototype.destroyMenu = function () {\n if (this.menuCtrl) {\n this.menuCtrl.destroy();\n this.menuCtrl = null;\n }\n };\n RibbonBackstage.prototype.destroyDDB = function () {\n this.removeBackstageMenuTooltip();\n var tabEle = this.parent.tabObj.element;\n tabEle.style.removeProperty(constants.RIBBON_FILE_MENU_WIDTH);\n this.destroyMenu();\n this.backstageButton.destroy();\n this.backstageButton = null;\n remove(this.backstageButtonEle);\n this.backstageButtonEle = null;\n EventHandler.remove(document, 'click', this.onClickEvent);\n };\n RibbonBackstage.prototype.removeBackstageMenuTooltip = function () {\n var _this = this;\n var index = getIndex(this.parent.tooltipData, function (e) { return e.id === _this.backstageButtonEle.id; });\n if (index !== -1) {\n this.backstageButtonEle.classList.remove(constants.RIBBON_TOOLTIP_TARGET);\n this.parent.tooltipData.splice(index, 1);\n }\n };\n /**\n * Add items to Backstage Menu.\n *\n * @param {BackstageItemModel[]} items - Gets the items to be added.\n * @param {string} target - Gets the target item to add the items.\n * @param {boolean} isAfter - Gets the boolean value to add the items after or before the target item.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.addBackstageItems = function (items, target, isAfter, isUniqueId) {\n for (var i = 0; i < items.length; i++) {\n var item = items[parseInt(i.toString(), 10)];\n if (item.isFooter) {\n isAfter ? this.footerMenuCtrl.insertAfter(items, target, isUniqueId) : this.footerMenuCtrl.insertBefore(items, target, isUniqueId);\n }\n else {\n isAfter ? this.menuCtrl.insertAfter(items, target, isUniqueId) : this.menuCtrl.insertBefore(items, target, isUniqueId);\n }\n }\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n var backStageOptions = this.parent.backStageMenu;\n for (var i = 0; i < backStageOptions.items.length; i++) {\n var item = backStageOptions.items[parseInt(i.toString(), 10)];\n for (var i_1 = 0; i_1 < backstageItems.length; i_1++) {\n var item1 = backstageItems[parseInt(i_1.toString(), 10)];\n if (item.text === item1.text) {\n item1.content = item.content;\n break;\n }\n }\n }\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Remove items from Backstage Menu.\n *\n * @param {string[]} items - Gets the items to be removed.\n * @param {boolean} isUniqueId - Gets whether the target provided is uniqueId or not.\n * @returns {void}\n */\n RibbonBackstage.prototype.removeBackstageItems = function (items, isUniqueId) {\n this.menuCtrl.removeItems(items, isUniqueId);\n this.footerMenuCtrl.removeItems(items, isUniqueId);\n var backstageItems = [].concat(this.menuCtrl.items, this.footerMenuCtrl.items);\n this.parent.backStageMenu.setProperties({ items: backstageItems }, true);\n };\n /**\n * Renders the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.showBackstage = function () {\n this.popupEle.show();\n };\n /**\n * Hides the backstage dynamically.\n *\n * @returns {void}\n */\n RibbonBackstage.prototype.hideBackstage = function () {\n if (this.popupEle.element.classList.contains(constants.RIBBON_BACKSTAGE_OPEN)) {\n this.popupEle.element.classList.remove(constants.RIBBON_BACKSTAGE_OPEN);\n }\n this.popupEle.hide();\n };\n return RibbonBackstage;\n}(Component));\nexport { RibbonBackstage };\n","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonGroupButton, index.RibbonFileMenu, index.RibbonBackstage);\nexport * from './index';\n"],"names":["getIndex","arr","condition","i","length","parseInt","toString","getTemplateFunction","template","content","tempEle","select","tagName","innerHTML","outerHTML","e","compile","getItem","tabs","id","tab","j","groups","group","k","collections","collection","l","items","item","tabIndex","groupIndex","collectionIndex","itemIndex","getCollection","getGroup","destroyControl","element","moduleName","getComponent","destroy","updateCommonProperty","commonProp","setProperties","updateControlDisabled","disable","enabled","disabled","getItemElement","parent","itemProp","contentEle","tabObj","activeLayout","RibbonLayout","Classic","displayOptions","DisplayMode","ribbonDropDownModule","getOverflowDropDownPopup","querySelector","ele","Simplified","enableGroupOverflow","constants.GROUPOF_BUTTON_ID","DropDownButton","overflowDDB","target","isTooltipPresent","tooltip","iconCss","title","cssClass","setToolTipContent","args","tooltipData","targetId","getAttribute","data","filter","createElement","constants.RIBBON_TOOLTIP_CONTAINER","append","header","className","constants.RIBBON_TOOLTIP_TITLE","appendChild","textContainer","constants.RIBBON_TEXT_CONTAINER","customCss","constants.RIBBON_TOOLTIP_ICON","tooltipContent","constants.RIBBON_TOOLTIP_CONTENT","constants.RIBBON_TOOLTIP","createTooltip","ribbon","beforeTooltipRender","ribbonTooltip","Tooltip","constants.RIBBON_TOOLTIP_TARGET","beforeRender","bind","this","windowCollision","appendTo","destroyTooltip","updateTooltipProp","prop","setCustomAttributes","attributes","key","elementClass","replace","trim","addClass","split","value","setAttribute","ItemOrientation","RibbonItemSize","RibbonItemType","RibbonGroupButtonSelection","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","RibbonButtonSettings","_super","apply","muteOnChange","call","Property","Event","ChildProperty","RibbonCheckBoxSettings","RibbonColorPickerSettings","RibbonComboBoxSettings","Complex","text","groupBy","FieldSettings","RibbonDropDownSettings","Collection","Item","RibbonSplitButtonSettings","RibbonTooltip","RibbonGroupButtonItem","RibbonGroupButtonSettings","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","BackstageBackButton","BackstageItem","BackStageMenu","RIBBON_CONTROL","RIBBON_POPUP_CONTROL","HIDE_CSS","RIBBON_ITEM","RIBBON_ROW","RIBBON_TOOLTIP","RIBBON_TOOLTIP_TARGET","RIBBON_TOOLTIP_TITLE","RIBBON_TOOLTIP_CONTENT","RIBBON_TOOLTIP_ICON","RIBBON_TOOLTIP_CONTAINER","RIBBON_TEXT_CONTAINER","GROUPOF_BUTTON_ID","RibbonButton","getModuleName","createButton","itemEle","_this","buttonEle","btnSettings","buttonSettings","Button","locale","enableRtl","enablePersistence","iconPosition","activeSize","ITEM_VERTICAL_CENTER","isPrimary","isToggle","created","htmlAttributes","onclick","clicked","addOverFlowEvents","overflowButton","type","buttonObj","toggle","removeOverFlowEvents","join","click","controlId","updateButton","merge","classList","add","updateButtonSize","RibbonCheckBox","createCheckBox","inputEle","checkBoxSettings","CheckBox","checked","label","labelPosition","change","checkBoxObj","dataBind","updateCheckBox","RibbonColorPicker","createColorPicker","colorPickerSettings","colorPicker","ColorPicker","columns","enableOpacity","mode","modeSwitcher","noColor","presetColors","showButtons","beforeClose","parentElement","remove","beforeOpen","beforeTileRender","open","wrapper","EventHandler","toggleWrapperHover","isAdd","colorPickerEle","colorPickerObj","splitBtn","event","close","closest","getColorPickerObj","getValue","updateColorPicker","unwireColorPickerEvents","RibbonComboBox","createComboBox","comboBoxSettings","ComboBox","allowCustom","floatLabelType","ignoreAccent","ignoreCase","allowFiltering","autofill","dataSource","fields","filterType","footerTemplate","groupTemplate","headerTemplate","index","itemTemplate","noRecordsTemplate","placeholder","popupHeight","popupWidth","showClearButton","sortOrder","width","filtering","comboBoxObj","getComboBoxObj","query","hidePopup","showPopup","updateComboBox","RibbonDropDown","createDropDown","dropDownSettings","closeActionEvents","createPopupOnClick","beforeItemRender","dropdownElement","dropdown","createOverFlowDropDown","name","groupEle","overflowEle","VERTICAL_DDB","cancel","isNullOrUndefined","onkeydown","keyActionHandler","comboBoxEle","querySelectorAll","comboBoxElements","contains","shiftKey","handleNavigation","updateItemIndex","focusLauncherIcon","launcherIconEle","groupContainer","preventDefault","focus","ribbonItem","removeOverFlowDropDown","insertBefore","getDDBItemElement","dropDown","getDropDownObj","dropDownEle","addItems","Items","removeItems","isUniqueId","updateDropDown","btnEle","control","updateDropDownSize","push","RibbonSplitButton","createSplitButton","splitButtonSettings","splitbutton","SplitButton","dropdownEle","stopImmediatePropagation","setContent","splitButtonEle","ddbId","popupEle","document","getSplitButtonObj","updateSplitButton","updateSplitButtonSize","RibbonGroupButton","isSelected","createGroupButton","itemElement","groupBtnSettings","groupButtonSettings","count","btnContainerEle","groupButtonEle","selection","Single","selected","Multiple","ribbonTooltipSettings","groupButtonClicked","dropdownIcon","activeEleCount","grpBtnIndex","handleGroupButtonNavigation","grpBtnSettings","previousItems","selectingItems","selectedItems","eventArgs","beforeClick","n","itemsCount","eventArgs_1","switchGroupButton","containerEle","targetEle","isOverflowPopup","destroyDropDown","updateGroupButtonSize","Ribbon","options","Ribbon_1","Inject","render","initialize","preRender","idIndex","isAddRemove","keyConfigs","leftarrow","rightarrow","shiftTab","getPersistData","addOnPersist","requiredModules","modules","member","getUniqueID","concat","style","formatUnit","renderTabs","ribbonFileMenuModule","createFileMenu","fileMenu","ribbonBackstageModule","createBackStage","backStageMenu","createHelpPaneTemplate","refreshOverflow","wireEvents","wireKeyboardEvent","currentControlIndex","window","resizeHandler","keyboardModuleRibbon","KeyboardEvents","keyAction","eventName","activeContent","selectedTab","ribbonControls","action","prevGroupId","prevGroupContainer","checkOverflow","scrollModule","scrollEle","scrollStep","offsetWidth","tabsInternal","slice","checkID","tabEle","validateItemSize","tabItems","createTabItems","Tab","selectedItem","overflowMode","tabCreated","ribbonTabSelected","selecting","ribbonTabSelecting","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","trigger","display","refreshLayout","toggleLayout","switchLayout","hideLayoutSwitcher","addExpandCollapse","renderInitialTab","selectedTabId","selectedIndex","previousIndex","selectedContent","firstChild","overflowTarget","ofTabContainer","activeTab","constants.HIDE_CSS","tabContent","isOverFlow","isBreak","checkGroupShrinking","createOverflowDropdown","checkSimplifiedItemShrinking","createSimplfiedOverflow","HScroll","destroyScroll","removeOverflowDropdown","checkGroupExpanding","removeSimplfiedOverflow","checkSimplifiedItemExpanding","allowedSizes","itemContainer","setItemSize","valString","removeAttribute","orderedGroups","getGroupResizeOrder","collectionEle","Overflow","createOverflowPopup","DropDown","GroupButton","updatePopupItems","constants.RIBBON_ITEM","isGroupOF","isMenu","dropDownPopup","isLeft","position","X","Y","offsetX","removeProperty","isClear","flag","overflowtarget","overflowDDBEle","getInstance","groupEle_1","removeOverflowEvent","childElementCount","removeOverflowButton","ofGroupContainer","groupId","groupHeader","isResize","isDisabledGroup","addOverflowButton","overflowBtnTarget","createGroupContainer","createOfTabContainer","collapseButton","addOverflowEvents","ribbonButtonModule","ribbonSplitButtonModule","ribbonCheckBoxModule","ribbonColorPickerModule","ribbonComboBoxModule","ribbonGroupButtonModule","isLarge","checkLargeToMedium","checkMediumToSmall","checkValidCollectionLength","ind","checkClassicCollection","isIncrement","checkClassicItem","shouldSkip","isCollapsed","canReduceCollection","canReduceItem","createShrinkEle","firstItem","start","end","shrinkEle","constants.RIBBON_ROW","attrs","data-start","data-end","moveItemToColumn","moveCollectionToColumn","orientation","Column","m","shrinkColumns","reduceItemsToSmall","middle","reduce","ele_1","reduceCollectionsToSmall","ele_2","setWidth","classicItems","shrinkColumn","isSmall","checkSmallToMedium","checkMediumToLarge","shouldClear","expandItemToMedium","parentEle","ele_4","expandCollectionsToMedium","ele_5","Row","expandItemsToLarge","container","ele_6","insertAdjacentElement","expandCollectionsToLarge","ele_7","handleContentSize","isRemoveOverflow","Template","createTemplateContent","collapseOrder","this_1","groupOverFlow","constants.RIBBON_GROUP_OVERFLOW","groupIconCss","expandOrder","this_2","state_1","removeDropdown","isCollapse","isUndefined","isCollapsible","sort","a","priority","reverse","clearOverflowDropDown","nextTabId","selectingItem","previousTabId","previousItem","nextIndex","isInteracted","selectedTabContent","elements","createGroups","ribbonTab","ondblclick","btnId","tabindex","constants.DROPDOWNBUTTON_HIDE","constants.RIBBON_POPUP_CONTROL","isGroupOf","upDownKeyHandler","getElementsByClassName","findDisabledItem","currentItemIndex","itemType","checkBoxEle","checkBox","isIncrease","ofGroupHeader","constants.RIBBON_COLLAPSE_BUTTON","aria-label","role","removeExpandCollapse","splice","reRenderTabs","isNewTab","destroyTabItems","innerText","_i","groups_1","_a","_b","_c","_d","destroyFunction","forEach","groupList","i_1","alignType","i_2","groupContent","groupCollection","itemList","itemEle_1","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","itemElements","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_e","getItemModuleName","i_4","i_5","removeLauncherIcon","containerId","this_3","groupButtonID_1","clearOverflowResize","selectTab","tabId","showTab","showHideTab","hideTab","enableTab","enableDisableTab","disableTab","addTab","isAfter","tabItem","removeTab","groups_2","addGroup","ribbonGroups","removeGroup","removeItemElement","hideGroup","groupID","showHideGroup","showGroup","isHidden","grpContainer","disableGroup","enableDisableGroup","enableGroup","isDisabled","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","hideItem","showHideItem","showItem","updateTab","groups_3","updateGroup","removeCss","match","removeClass","ribbongroup","overflowHeader","updateCollection","ribboncollection","updateItem","enableDisableItem","getElementById","enableItem","disableItem","toggleAttribute","unwireEvents","undefined","onPropertyChanged","newProp","oldProp","keys","animation","tabAnimation","updateFileMenu","updateBackStageMenu","TabAnimationSettings","NotifyPropertyChanges","Component","RibbonFileMenu","fileMenuDDB","destroyDDB","fileMenuOptions","visible","ddbElement","ddbBeforeEvent","ddbAfterEvent","popupTemplate","createRibbonMenu","refreshActiveTabBorder","addFileMenuTooltip","isOpen","cloneMenuItem","itemsList","separator","url","menuOptions","ulElem","menuctrl","Menu","animationSettings","menuItems","showItemOnClick","menuBeforeEvent","onClose","menuAfterEvent","onOpen","menuSelect","parentItem","destroyMenu","removeFileMenuTooltip","insertAfter","enableItems","disableItems","setItem","refresh","RibbonBackstage","backstageButton","backStageOptions","backstageButtonEle","createBackStagePopup","createBackStageTemplate","footerItemCount","itemCount","isFooter","createBackstageMenu","menuCtrl","checkMenuItems","footerMenuCtrl","stopPropagation","showBackstage","popupHTMLElement","menuItem","menuWrapper","firstMenuEle","createBackStageContent","addBackStageMenuTooltip","onClickEvent","hideBackstage","backStageItems","HTMLElement","Popup","height","relateTo","updatePopupPositionOnRtl","code","popupStyle","right","left","backButton","closeBtnEle","closeBtn","isBackButtonClicked","itemsWrapperEle","ulFooterElem","ulMenuElem","cloneFooterMenuItem","backstageContentEle","backstageTempEle","contentItem","isBackButton","backStageItemClick","removeBackstageMenuTooltip","addBackstageItems","backstageItems","item1","removeBackstageItems","show","hide","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonGroupButton","index.RibbonFileMenu","index.RibbonBackstage"],"mappings":"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"}