@syncfusion/ej2-ribbon 22.2.12 → 23.1.36

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 (126) hide show
  1. package/CHANGELOG.md +0 -26
  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 +1739 -192
  5. package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
  6. package/dist/es6/ej2-ribbon.es5.js +1800 -135
  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 +13 -13
  12. package/src/global.js +1 -1
  13. package/src/ribbon/base/constant.d.ts +40 -0
  14. package/src/ribbon/base/constant.js +40 -0
  15. package/src/ribbon/base/interface.d.ts +49 -2
  16. package/src/ribbon/base/interface.js +19 -1
  17. package/src/ribbon/base/ribbon-model.d.ts +25 -1
  18. package/src/ribbon/base/ribbon.d.ts +108 -3
  19. package/src/ribbon/base/ribbon.js +434 -61
  20. package/src/ribbon/items/index.d.ts +1 -0
  21. package/src/ribbon/items/index.js +1 -0
  22. package/src/ribbon/items/ribbon-button.js +3 -0
  23. package/src/ribbon/items/ribbon-colorpicker.js +1 -1
  24. package/src/ribbon/items/ribbon-dropdown.js +2 -1
  25. package/src/ribbon/items/ribbon-groupbutton.d.ts +69 -0
  26. package/src/ribbon/items/ribbon-groupbutton.js +444 -0
  27. package/src/ribbon/models/index.d.ts +10 -0
  28. package/src/ribbon/models/index.js +5 -0
  29. package/src/ribbon/models/ribbon-back-button-model.d.ts +29 -0
  30. package/src/ribbon/models/ribbon-back-button.d.ts +24 -0
  31. package/src/ribbon/models/ribbon-back-button.js +40 -0
  32. package/src/ribbon/models/ribbon-back-stage-settings-model.d.ts +76 -0
  33. package/src/ribbon/models/ribbon-back-stage-settings.d.ts +75 -0
  34. package/src/ribbon/models/ribbon-back-stage-settings.js +70 -0
  35. package/src/ribbon/models/ribbon-backstage-item-model.d.ts +62 -0
  36. package/src/ribbon/models/ribbon-backstage-item.d.ts +74 -0
  37. package/src/ribbon/models/ribbon-backstage-item.js +52 -0
  38. package/src/ribbon/models/ribbon-combobox-settings-model.d.ts +15 -0
  39. package/src/ribbon/models/ribbon-combobox-settings.d.ts +15 -0
  40. package/src/ribbon/models/ribbon-dropdown-settings-model.d.ts +7 -0
  41. package/src/ribbon/models/ribbon-dropdown-settings.d.ts +6 -0
  42. package/src/ribbon/models/ribbon-dropdown-settings.js +3 -0
  43. package/src/ribbon/models/ribbon-file-menu-settings-model.d.ts +6 -0
  44. package/src/ribbon/models/ribbon-file-menu-settings.d.ts +6 -0
  45. package/src/ribbon/models/ribbon-group-button-item-model.d.ts +50 -0
  46. package/src/ribbon/models/ribbon-group-button-item.d.ts +44 -0
  47. package/src/ribbon/models/ribbon-group-button-item.js +50 -0
  48. package/src/ribbon/models/ribbon-group-button-settings-model.d.ts +25 -0
  49. package/src/ribbon/models/ribbon-group-button-settings.d.ts +23 -0
  50. package/src/ribbon/models/ribbon-group-button-settings.js +38 -0
  51. package/src/ribbon/models/ribbon-item-model.d.ts +11 -1
  52. package/src/ribbon/models/ribbon-item.d.ts +10 -0
  53. package/src/ribbon/models/ribbon-item.js +4 -0
  54. package/src/ribbon/modules/index.d.ts +1 -0
  55. package/src/ribbon/modules/index.js +1 -0
  56. package/src/ribbon/modules/ribbon-backstage.d.ts +112 -0
  57. package/src/ribbon/modules/ribbon-backstage.js +554 -0
  58. package/styles/bootstrap-dark.css +511 -8
  59. package/styles/bootstrap.css +511 -8
  60. package/styles/bootstrap4.css +511 -8
  61. package/styles/bootstrap5-dark.css +511 -8
  62. package/styles/bootstrap5.css +511 -8
  63. package/styles/fabric-dark.css +511 -8
  64. package/styles/fabric.css +511 -8
  65. package/styles/fluent-dark.css +511 -8
  66. package/styles/fluent.css +511 -8
  67. package/styles/highcontrast-light.css +511 -8
  68. package/styles/highcontrast.css +511 -8
  69. package/styles/material-dark.css +511 -9
  70. package/styles/material.css +512 -9
  71. package/styles/material3-dark.css +511 -9
  72. package/styles/material3-dark.scss +1 -1
  73. package/styles/material3.css +511 -9
  74. package/styles/material3.scss +1 -1
  75. package/styles/ribbon/_bootstrap-dark-definition.scss +65 -0
  76. package/styles/ribbon/_bootstrap-definition.scss +65 -0
  77. package/styles/ribbon/_bootstrap4-definition.scss +65 -0
  78. package/styles/ribbon/_bootstrap5-definition.scss +65 -0
  79. package/styles/ribbon/_fabric-dark-definition.scss +65 -0
  80. package/styles/ribbon/_fabric-definition.scss +65 -0
  81. package/styles/ribbon/_fluent-definition.scss +65 -0
  82. package/styles/ribbon/_fusionnew-definition.scss +65 -0
  83. package/styles/ribbon/_highcontrast-definition.scss +65 -0
  84. package/styles/ribbon/_highcontrast-light-definition.scss +65 -0
  85. package/styles/ribbon/_layout.scss +280 -5
  86. package/styles/ribbon/_material-dark-definition.scss +65 -0
  87. package/styles/ribbon/_material-definition.scss +65 -0
  88. package/styles/ribbon/_material3-definition.scss +66 -0
  89. package/styles/ribbon/_tailwind-definition.scss +65 -0
  90. package/styles/ribbon/_theme.scss +144 -1
  91. package/styles/ribbon/bootstrap-dark.css +511 -8
  92. package/styles/ribbon/bootstrap-dark.scss +1 -1
  93. package/styles/ribbon/bootstrap.css +511 -8
  94. package/styles/ribbon/bootstrap.scss +1 -1
  95. package/styles/ribbon/bootstrap4.css +511 -8
  96. package/styles/ribbon/bootstrap4.scss +1 -1
  97. package/styles/ribbon/bootstrap5-dark.css +511 -8
  98. package/styles/ribbon/bootstrap5-dark.scss +1 -1
  99. package/styles/ribbon/bootstrap5.css +511 -8
  100. package/styles/ribbon/bootstrap5.scss +1 -1
  101. package/styles/ribbon/fabric-dark.css +511 -8
  102. package/styles/ribbon/fabric-dark.scss +1 -1
  103. package/styles/ribbon/fabric.css +511 -8
  104. package/styles/ribbon/fabric.scss +1 -1
  105. package/styles/ribbon/fluent-dark.css +511 -8
  106. package/styles/ribbon/fluent-dark.scss +1 -1
  107. package/styles/ribbon/fluent.css +511 -8
  108. package/styles/ribbon/fluent.scss +1 -1
  109. package/styles/ribbon/highcontrast-light.css +511 -8
  110. package/styles/ribbon/highcontrast-light.scss +1 -1
  111. package/styles/ribbon/highcontrast.css +511 -8
  112. package/styles/ribbon/highcontrast.scss +1 -1
  113. package/styles/ribbon/material-dark.css +511 -9
  114. package/styles/ribbon/material-dark.scss +1 -1
  115. package/styles/ribbon/material.css +512 -9
  116. package/styles/ribbon/material.scss +1 -1
  117. package/styles/ribbon/material3-dark.css +511 -9
  118. package/styles/ribbon/material3-dark.scss +1 -1
  119. package/styles/ribbon/material3.css +511 -9
  120. package/styles/ribbon/material3.scss +1 -1
  121. package/styles/ribbon/tailwind-dark.css +511 -9
  122. package/styles/ribbon/tailwind-dark.scss +1 -1
  123. package/styles/ribbon/tailwind.css +511 -9
  124. package/styles/ribbon/tailwind.scss +1 -1
  125. package/styles/tailwind-dark.css +511 -9
  126. package/styles/tailwind.css +511 -9
@@ -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-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/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/base/ribbon.js","../../src/ribbon/modules/ribbon-filemenu.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 template content as ribbon item.\n */\n RibbonItemType[\"Template\"] = \"Template\";\n})(RibbonItemType || (RibbonItemType = {}));\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 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, 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';\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 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","/**\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 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_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 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_FILE_MENU_LIST = '_filemenulist';\n/** @hidden */\nexport var RIBBON_HELP_PANE_TEMPLATE_ID = '_helppanetemplate';\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.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 (e) {\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 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 }, 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","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 } from '../models/index';\nimport { DisplayMode, RibbonLayout } from './interface';\nimport { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';\nimport { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonSplitButton } 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);\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: 'ribbonFileMenu', 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 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 this.addExpandCollapse();\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);\n if (item.activeSize === RibbonItemSize.Small) {\n var itemEle = itemContainer.querySelector('#' + item.id);\n item.setProperties({ activeSize: RibbonItemSize.Medium }, true);\n this.setItemSize(itemEle, item);\n }\n if ((item.type === RibbonItemType.DropDown) || (item.type === RibbonItemType.SplitButton)) {\n 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) ? 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)) {\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) {\n var overflowButton;\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 overflowButton.target.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 ofTabContainer.append(ofGroupContainer);\n }\n 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 }\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 _this.setItemSize(ele.querySelector('#' + item.id), item);\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 _this.setItemSize(ele.querySelector('#' + collection.items[0].id), collection.items[0]);\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 _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 _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 setWidth(item.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 _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 _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 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 _this.setItemSize(ele_6, item);\n parentEle.insertAdjacentElement('afterend', 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 _this.setItemSize(ele_7, collection.items[0]);\n parentEle.insertAdjacentElement('afterend', 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.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 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.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.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 }\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 () {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\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 var contentEle = this.tabObj.items[this.selectedTab].content;\n if (contentEle.innerHTML === '') {\n this.renderInitialTab(this.selectedTab);\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)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, true);\n }\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)) {\n this.updatePopupItems(item, itemEle, group.enableGroupOverflow, false);\n }\n this.removeOverflowEvent(item, itemEle);\n }\n groupCollection.append(itemEle);\n }\n var ele = groupContainer.querySelector('#' + item.id);\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 }\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)) {\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 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 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) : 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 updateCommonProperty(ele, moduleName, commonProp);\n }\n else if (!isNullOrUndefined(commonProp.enableRtl)) {\n ele.classList.toggle(constants.RTL_CSS, commonProp.enableRtl);\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 }\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 !== '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 };\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 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 * 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_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 }\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 * 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 * 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_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 (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 (this.activeLayout === RibbonLayout.Simplified && item.displayOptions === DisplayMode.Overflow) {\n this.createOverflowPopup(itemProp.item, itemProp.tabIndex, itemProp.group.enableGroupOverflow, itemProp.group.id, itemProp.group.header, itemContainer, groupContainer);\n if ((itemProp.item.type === RibbonItemType.DropDown) || (itemProp.item.type === RibbonItemType.SplitButton)) {\n 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 }\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 ele.closest('#' + item.id + constants.CONTAINER_ID).remove();\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 = getItemElement(this, itemId, itemProp);\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 updateControlDisabled(ele, moduleName, isDisabled);\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 this.removeExpandCollapse();\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();\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 'helpPaneTemplate':\n if (this.ribbonTempEle) {\n remove(this.ribbonTempEle);\n this.ribbonTempEle = null;\n this.tabObj.element.style.setProperty(constants.RIBBON_HELP_PANE_TEMPLATE_WIDTH, '0px');\n }\n if (this.helpPaneTemplate) {\n this.createHelpPaneTemplate();\n }\n var toolbar_1 = this.tabObj['tbObj'];\n toolbar_1.refreshOverflow();\n break;\n }\n }\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 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 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 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","import * as index from './index';\nindex.Ribbon.Inject(index.RibbonButton, index.RibbonDropDown, index.RibbonSplitButton, index.RibbonCheckBox, index.RibbonColorPicker, index.RibbonComboBox, index.RibbonFileMenu);\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","__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","RibbonItem","Medium","Small","Large","Auto","RibbonCollection","RibbonGroup","RibbonTab","FileMenuSettings","MenuItem","MenuAnimationSettings","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","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","classList","remove","beforeOpen","beforeTileRender","open","add","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","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","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","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","selected","ribbonTabSelected","selecting","ribbonTabSelecting","setProperty","toolbarEle","Toolbar","isMinimized","minimize","val","eventArgs","trigger","display","refreshLayout","toggleLayout","switchLayout","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","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","addOverflowButton","createGroupContainer","createOfTabContainer","collapseButton","addOverflowEvents","ribbonButtonModule","ribbonSplitButtonModule","ribbonCheckBoxModule","ribbonColorPickerModule","ribbonComboBoxModule","isLarge","checkLargeToMedium","checkMediumToSmall","checkValidCollectionLength","count","ind","checkClassicCollection","n","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","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","destroyTabItems","groupList","i_1","alignType","i_2","groupContent","replace","groupCollection","itemList","itemEle_1","destroyFunction","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","_a","itemElements","ribbonTooltipSettings","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","itemElement","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_i","_b","_c","_d","_e","getItemModuleName","removeLauncherIcon","containerId","containerEle","clearOverflowResize","selectTab","tabId","addTab","isAfter","tabItem","removeTab","groups_1","addGroup","ribbonGroups","targetEle","removeGroup","removeItemElement","addCollection","ribbonCollections","collection_1","removeCollection","collectionId","ribbonGroup","addItem","ribbonItems","item_1","removeItem","itemId","ribbonCollection","updateTab","groups_2","forEach","innerText","updateGroup","removeCss","match","removeClass","ribbongroup","overflowHeader","updateCollection","ribboncollection","updateItem","enableDisableItem","enableItem","disableItem","isDisabled","toggleAttribute","unwireEvents","undefined","onPropertyChanged","newProp","oldProp","keys","animation","tabAnimation","updateFileMenu","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","index.Ribbon","index.RibbonButton","index.RibbonDropDown","index.RibbonSplitButton","index.RibbonCheckBox","index.RibbonColorPicker","index.RibbonComboBox","index.RibbonFileMenu"],"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 } 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);\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) {\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 if (isDisabledGroup && isDisabledGroup.classList.contains('e-disabled')) {\n overflowButton.target.classList.add('e-disabled');\n }\n overflowButton.target.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 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 () {\n this.destroyScroll();\n this.checkID(this.tabs, 'tab', this.element.id);\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 var contentEle = this.tabObj.items[this.selectedTab].content;\n if (contentEle.innerHTML === '') {\n this.renderInitialTab(this.selectedTab);\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_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 (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_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 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();\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","isDisabledGroup","addOverflowButton","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","destroyTabItems","groupList","i_1","alignType","i_2","groupContent","replace","groupCollection","itemList","itemEle_1","destroyFunction","size","createItems","i_3","ele_8","itemsize","createLauncherIcon","launcherIcon","constants.RIBBON_LAUNCHER_ICON_ELE","launcherIconCss","launcherIconClicked","groupElements","showLauncherIcon","createCollection","collectionList","ribbonitem","sizeVal","collectionElements","createRibbonItem","_a","itemElements","helpPaneTemplate","clearTemplate","ribbonTempEle","templateFunction","isStringTemplate","after","renderReactTemplates","constants.RIBBON_TEMPLATE","renderItemTemplate","templateName","list","initId","listitem","setCommonProperties","_i","_b","_c","_d","_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_1","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_2","forEach","innerText","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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"}