@syncfusion/ej2-ribbon 23.2.5 → 24.1.41

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 (83) hide show
  1. package/CHANGELOG.md +0 -34
  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 +198 -32
  5. package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
  6. package/dist/es6/ej2-ribbon.es5.js +198 -32
  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/ribbon/base/interface.d.ts +17 -0
  13. package/src/ribbon/base/ribbon-model.d.ts +15 -1
  14. package/src/ribbon/base/ribbon.d.ts +14 -1
  15. package/src/ribbon/base/ribbon.js +95 -21
  16. package/src/ribbon/items/ribbon-colorpicker.js +16 -0
  17. package/src/ribbon/items/ribbon-combobox.js +16 -0
  18. package/src/ribbon/items/ribbon-dropdown.js +5 -3
  19. package/src/ribbon/items/ribbon-groupbutton.d.ts +3 -1
  20. package/src/ribbon/items/ribbon-groupbutton.js +50 -7
  21. package/src/ribbon/models/ribbon-colorpicker-settings-model.d.ts +8 -1
  22. package/src/ribbon/models/ribbon-colorpicker-settings.d.ts +7 -1
  23. package/src/ribbon/models/ribbon-colorpicker-settings.js +4 -1
  24. package/src/ribbon/models/ribbon-combobox-settings-model.d.ts +7 -0
  25. package/src/ribbon/models/ribbon-combobox-settings.d.ts +6 -0
  26. package/src/ribbon/models/ribbon-combobox-settings.js +3 -0
  27. package/src/ribbon/models/ribbon-group-button-settings-model.d.ts +7 -0
  28. package/src/ribbon/models/ribbon-group-button-settings.d.ts +6 -0
  29. package/src/ribbon/models/ribbon-group-button-settings.js +3 -0
  30. package/src/ribbon/models/ribbon-group-model.d.ts +7 -0
  31. package/src/ribbon/models/ribbon-group.d.ts +6 -0
  32. package/src/ribbon/models/ribbon-group.js +3 -0
  33. package/src/ribbon/modules/ribbon-backstage.js +3 -0
  34. package/styles/bootstrap-dark.css +105 -26
  35. package/styles/bootstrap.css +104 -25
  36. package/styles/bootstrap4.css +104 -25
  37. package/styles/bootstrap5-dark.css +105 -26
  38. package/styles/bootstrap5.css +104 -25
  39. package/styles/fabric-dark.css +103 -24
  40. package/styles/fabric.css +104 -25
  41. package/styles/fluent-dark.css +104 -25
  42. package/styles/fluent.css +104 -25
  43. package/styles/highcontrast-light.css +103 -24
  44. package/styles/highcontrast.css +103 -24
  45. package/styles/material-dark.css +105 -26
  46. package/styles/material.css +105 -26
  47. package/styles/material3-dark.css +105 -26
  48. package/styles/material3.css +105 -26
  49. package/styles/ribbon/_bootstrap-dark-definition.scss +8 -0
  50. package/styles/ribbon/_bootstrap-definition.scss +8 -0
  51. package/styles/ribbon/_bootstrap4-definition.scss +8 -0
  52. package/styles/ribbon/_bootstrap5-definition.scss +8 -0
  53. package/styles/ribbon/_fabric-dark-definition.scss +8 -0
  54. package/styles/ribbon/_fabric-definition.scss +8 -0
  55. package/styles/ribbon/_fluent-definition.scss +8 -0
  56. package/styles/ribbon/_fusionnew-definition.scss +8 -0
  57. package/styles/ribbon/_highcontrast-definition.scss +8 -0
  58. package/styles/ribbon/_highcontrast-light-definition.scss +8 -0
  59. package/styles/ribbon/_layout.scss +69 -5
  60. package/styles/ribbon/_material-dark-definition.scss +9 -1
  61. package/styles/ribbon/_material-definition.scss +9 -1
  62. package/styles/ribbon/_material3-definition.scss +8 -2
  63. package/styles/ribbon/_tailwind-definition.scss +8 -0
  64. package/styles/ribbon/_theme.scss +34 -13
  65. package/styles/ribbon/bootstrap-dark.css +105 -26
  66. package/styles/ribbon/bootstrap.css +104 -25
  67. package/styles/ribbon/bootstrap4.css +104 -25
  68. package/styles/ribbon/bootstrap5-dark.css +105 -26
  69. package/styles/ribbon/bootstrap5.css +104 -25
  70. package/styles/ribbon/fabric-dark.css +103 -24
  71. package/styles/ribbon/fabric.css +104 -25
  72. package/styles/ribbon/fluent-dark.css +104 -25
  73. package/styles/ribbon/fluent.css +104 -25
  74. package/styles/ribbon/highcontrast-light.css +103 -24
  75. package/styles/ribbon/highcontrast.css +103 -24
  76. package/styles/ribbon/material-dark.css +105 -26
  77. package/styles/ribbon/material.css +105 -26
  78. package/styles/ribbon/material3-dark.css +105 -26
  79. package/styles/ribbon/material3.css +105 -26
  80. package/styles/ribbon/tailwind-dark.css +104 -25
  81. package/styles/ribbon/tailwind.css +104 -25
  82. package/styles/tailwind-dark.css +104 -25
  83. package/styles/tailwind.css +104 -25
@@ -296,11 +296,14 @@ var RibbonColorPickerSettings = /** @__PURE__ @class */ (function (_super) {
296
296
  __decorate$7([
297
297
  Property('')
298
298
  ], RibbonColorPickerSettings.prototype, "cssClass", void 0);
299
+ __decorate$7([
300
+ Property('')
301
+ ], RibbonColorPickerSettings.prototype, "label", void 0);
299
302
  __decorate$7([
300
303
  Property(true)
301
304
  ], RibbonColorPickerSettings.prototype, "enableOpacity", void 0);
302
305
  __decorate$7([
303
- Property('Picker')
306
+ Property('Palette')
304
307
  ], RibbonColorPickerSettings.prototype, "mode", void 0);
305
308
  __decorate$7([
306
309
  Property(true)
@@ -389,6 +392,9 @@ var RibbonComboBoxSettings = /** @__PURE__ @class */ (function (_super) {
389
392
  __decorate$8([
390
393
  Property('')
391
394
  ], RibbonComboBoxSettings.prototype, "cssClass", void 0);
395
+ __decorate$8([
396
+ Property('')
397
+ ], RibbonComboBoxSettings.prototype, "label", void 0);
392
398
  __decorate$8([
393
399
  Property([])
394
400
  ], RibbonComboBoxSettings.prototype, "dataSource", void 0);
@@ -758,6 +764,9 @@ var RibbonGroupButtonSettings = /** @__PURE__ @class */ (function (_super) {
758
764
  function RibbonGroupButtonSettings() {
759
765
  return _super !== null && _super.apply(this, arguments) || this;
760
766
  }
767
+ __decorate$12([
768
+ Property('')
769
+ ], RibbonGroupButtonSettings.prototype, "header", void 0);
761
770
  __decorate$12([
762
771
  Property('Single')
763
772
  ], RibbonGroupButtonSettings.prototype, "selection", void 0);
@@ -965,6 +974,9 @@ var RibbonGroup = /** @__PURE__ @class */ (function (_super) {
965
974
  __decorate$2([
966
975
  Property('Column')
967
976
  ], RibbonGroup.prototype, "orientation", void 0);
977
+ __decorate$2([
978
+ Property('')
979
+ ], RibbonGroup.prototype, "overflowHeader", void 0);
968
980
  __decorate$2([
969
981
  Property(0)
970
982
  ], RibbonGroup.prototype, "priority", void 0);
@@ -1833,6 +1845,15 @@ var RibbonColorPicker = /** @__PURE__ @class */ (function () {
1833
1845
  */
1834
1846
  RibbonColorPicker.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {
1835
1847
  var _this = this;
1848
+ var colorPickerSettings = item.colorPickerSettings;
1849
+ if (colorPickerSettings.label && this.parent.activeLayout === 'Simplified') {
1850
+ var label = this.parent.createElement('div', {
1851
+ className: 'e-ribbon-colorpicker-label',
1852
+ id: item.id + '_label',
1853
+ innerHTML: colorPickerSettings.label
1854
+ });
1855
+ itemEle.insertBefore(label, itemEle.firstChild);
1856
+ }
1836
1857
  var colorPickerEle = itemEle.querySelector('#' + item.id);
1837
1858
  colorPickerEle.setAttribute('data-control', item.type.toString());
1838
1859
  var colorPickerObj = getComponent(colorPickerEle, ColorPicker);
@@ -1863,6 +1884,13 @@ var RibbonColorPicker = /** @__PURE__ @class */ (function () {
1863
1884
  */
1864
1885
  RibbonColorPicker.prototype.removeOverFlowEvents = function (item, itemEle) {
1865
1886
  var _this = this;
1887
+ var colorPickerSettings = item.colorPickerSettings;
1888
+ if (colorPickerSettings.label) {
1889
+ var label = itemEle.querySelector('#' + item.id + '_label');
1890
+ if (label) {
1891
+ label.remove();
1892
+ }
1893
+ }
1866
1894
  var colorPickerEle = itemEle.querySelector('#' + item.id);
1867
1895
  var colorPickerObj = getComponent(colorPickerEle, ColorPicker);
1868
1896
  var cssClass = colorPickerObj.cssClass.split(SPACE);
@@ -2028,6 +2056,15 @@ var RibbonComboBox = /** @__PURE__ @class */ (function () {
2028
2056
  */
2029
2057
  RibbonComboBox.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {
2030
2058
  var _this = this;
2059
+ var comboBoxSettings = item.comboBoxSettings;
2060
+ if (comboBoxSettings.label && this.parent.activeLayout === 'Simplified') {
2061
+ var label = this.parent.createElement('div', {
2062
+ className: 'e-ribbon-combobox-label',
2063
+ id: item.id + '_label',
2064
+ innerHTML: comboBoxSettings.label
2065
+ });
2066
+ itemEle.insertBefore(label, itemEle.firstChild);
2067
+ }
2031
2068
  var inputEle = itemEle.querySelector('#' + item.id);
2032
2069
  inputEle.setAttribute('data-control', item.type.toString());
2033
2070
  var comboBoxObj = getComponent(inputEle, ComboBox);
@@ -2052,6 +2089,13 @@ var RibbonComboBox = /** @__PURE__ @class */ (function () {
2052
2089
  */
2053
2090
  RibbonComboBox.prototype.removeOverFlowEvents = function (item, itemEle) {
2054
2091
  var _this = this;
2092
+ var comboBoxSettings = item.comboBoxSettings;
2093
+ if (comboBoxSettings.label) {
2094
+ var label = itemEle.querySelector('#' + item.id + '_label');
2095
+ if (label) {
2096
+ label.remove();
2097
+ }
2098
+ }
2055
2099
  var inputEle = itemEle.querySelector('#' + item.id);
2056
2100
  var comboBoxObj = getComponent(inputEle, ComboBox);
2057
2101
  var cssClass = comboBoxObj.cssClass.split(SPACE);
@@ -2293,7 +2337,9 @@ var RibbonDropDown = /** @__PURE__ @class */ (function () {
2293
2337
  return dropdown;
2294
2338
  };
2295
2339
  RibbonDropDown.prototype.keyActionHandler = function (e, target) {
2296
- var items = target.querySelectorAll('.e-control');
2340
+ var controlElements = Array.prototype.slice.call(target.querySelectorAll('.e-control'));
2341
+ var templateElements = Array.prototype.slice.call(target.querySelectorAll('.e-ribbon-template'));
2342
+ var items = controlElements.concat(templateElements);
2297
2343
  var comboBoxElements = target.querySelectorAll('.e-combobox');
2298
2344
  var comboBoxEle;
2299
2345
  if (comboBoxElements) {
@@ -2312,7 +2358,7 @@ var RibbonDropDown = /** @__PURE__ @class */ (function () {
2312
2358
  }
2313
2359
  }
2314
2360
  }
2315
- if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||
2361
+ if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template') || e.target.classList.contains('e-ribbon-launcher-icon') ||
2316
2362
  e.target.classList.contains('e-ribbon-last-item') || e.target.classList.contains('e-ribbon-first-item')) {
2317
2363
  if (e.key === 'ArrowRight' || (!e.shiftKey && e.key === 'Tab')) {
2318
2364
  this.handleNavigation(e, !this.enableRtl, items);
@@ -2335,7 +2381,7 @@ var RibbonDropDown = /** @__PURE__ @class */ (function () {
2335
2381
  }
2336
2382
  if (!e.target.classList.contains('e-combobox') && !e.target.classList.contains('e-ribbon-last-item') &&
2337
2383
  !e.target.classList.contains('e-ribbon-group-container') && (e.target.classList.contains('e-ribbon-first-item')
2338
- || this.itemIndex !== 0) && e.target.classList.contains('e-control')) {
2384
+ || this.itemIndex !== 0) && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template'))) {
2339
2385
  this.itemIndex++;
2340
2386
  this.updateItemIndex(e, items, true);
2341
2387
  }
@@ -3275,13 +3321,17 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3275
3321
  }
3276
3322
  count++;
3277
3323
  }
3278
- new DropDownButton({
3324
+ var dropdown = new DropDownButton({
3279
3325
  iconCss: dropdownIcon,
3280
3326
  target: btnContainerEle,
3281
3327
  enableRtl: this.parent.enableRtl,
3282
3328
  cssClass: 'e-ribbon-dropdown-group-button',
3283
3329
  disabled: item.disabled
3284
3330
  }, buttonEle);
3331
+ if (groupBtnSettings.header) {
3332
+ var dropDownPopup = dropdown.dropDown;
3333
+ this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);
3334
+ }
3285
3335
  buttonEle.onclick = buttonEle.onkeydown = function () {
3286
3336
  if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {
3287
3337
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + 0).focus();
@@ -3298,7 +3348,9 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3298
3348
  }
3299
3349
  };
3300
3350
  RibbonGroupButton.prototype.groupButtonClicked = function (itemIndex, item, grpBtnSettings) {
3301
- var previousItems = [], selectingItems = [], selectedItems = [];
3351
+ var previousItems = [];
3352
+ var selectingItems = [];
3353
+ var selectedItems = [];
3302
3354
  var groupButtonEle;
3303
3355
  var dropdown;
3304
3356
  for (var j = 0; j < grpBtnSettings.items.length; j++) {
@@ -3329,9 +3381,11 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3329
3381
  for (var j = 0; j < grpBtnSettings.items.length; j++) {
3330
3382
  if (document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + j) && document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + j).classList.contains('e-active')) {
3331
3383
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + j).classList.remove('e-active');
3384
+ grpBtnSettings.items[parseInt(j.toString(), 10)].selected = false;
3332
3385
  }
3333
3386
  }
3334
3387
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');
3388
+ grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = true;
3335
3389
  if (document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active') && this.parent.activeLayout === 'Simplified') {
3336
3390
  this.grpBtnIndex = itemIndex;
3337
3391
  groupButtonEle = document.querySelector('#' + item.id);
@@ -3347,6 +3401,12 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3347
3401
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID).classList.add(RIBBON_MULTIPLE_BUTTON_SELECTION);
3348
3402
  }
3349
3403
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + itemIndex).classList.toggle('e-active');
3404
+ if (document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + itemIndex).classList.contains('e-active')) {
3405
+ grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = true;
3406
+ }
3407
+ else {
3408
+ grpBtnSettings.items[parseInt(itemIndex.toString(), 10)].selected = false;
3409
+ }
3350
3410
  var activeEleCount = 0;
3351
3411
  for (var n = 0; n < grpBtnSettings.items.length; n++) {
3352
3412
  if (document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + n) && document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + n).classList.contains('e-active') && this.parent.activeLayout === 'Simplified' && n !== itemIndex) {
@@ -3435,13 +3495,17 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3435
3495
  }
3436
3496
  itemsCount++;
3437
3497
  }
3438
- new DropDownButton({
3498
+ var dropdown = new DropDownButton({
3439
3499
  iconCss: dropdownIcon,
3440
3500
  target: containerEle,
3441
3501
  enableRtl: this.parent.enableRtl,
3442
3502
  cssClass: 'e-ribbon-dropdown-group-button',
3443
3503
  disabled: item.disabled
3444
3504
  }, buttonEle);
3505
+ if (groupBtnSettings.header) {
3506
+ var dropDownPopup = dropdown.dropDown;
3507
+ this.addGroupButtonHeader(item.id, groupBtnSettings, dropDownPopup.element);
3508
+ }
3445
3509
  buttonEle.onclick = buttonEle.onkeydown = function () {
3446
3510
  if (itemElement.querySelector('#' + item.id).classList.contains('e-active')) {
3447
3511
  document.querySelector('#' + item.id + RIBBON_GROUP_BUTTON_ID + 0).focus();
@@ -3465,6 +3529,14 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3465
3529
  }
3466
3530
  }
3467
3531
  };
3532
+ RibbonGroupButton.prototype.addGroupButtonHeader = function (itemID, groupBtnSettings, popupEle) {
3533
+ var groupButtonHeader = this.parent.createElement('div', {
3534
+ className: 'e-ribbon-groupbutton-header',
3535
+ id: itemID + HEADER_ID,
3536
+ innerHTML: groupBtnSettings.header
3537
+ });
3538
+ popupEle.insertBefore(groupButtonHeader, popupEle.firstChild);
3539
+ };
3468
3540
  RibbonGroupButton.prototype.handleGroupButtonNavigation = function (e, item) {
3469
3541
  var groupButtonEle = document.querySelector('#' + item.id);
3470
3542
  var dropdown = getComponent(groupButtonEle, DropDownButton);
@@ -3530,16 +3602,29 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3530
3602
  * @returns {void}
3531
3603
  * @hidden
3532
3604
  */
3533
- RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle) {
3605
+ RibbonGroupButton.prototype.addOverFlowEvents = function (item, itemEle, overflowButton) {
3534
3606
  var _this = this;
3607
+ var groupBtnSettings = item.groupButtonSettings;
3608
+ var isIconOnly = true;
3535
3609
  var groupButtonEle = itemEle.querySelector('#' + item.id);
3536
3610
  var dropdown = getComponent(groupButtonEle, DropDownButton);
3537
- dropdown.setProperties({ cssClass: dropdown.cssClass + SPACE + RIBBON_GROUP_BUTTON_OVERFLOW_POPUP });
3611
+ dropdown.setProperties({ cssClass: dropdown.cssClass + SPACE + RIBBON_GROUP_BUTTON_OVERFLOW_POPUP, content: groupBtnSettings.header ? groupBtnSettings.header : '' });
3538
3612
  var targetEle = dropdown.target;
3613
+ if (targetEle.children.length) {
3614
+ for (var i = 0; i < targetEle.children.length; i++) {
3615
+ if (groupBtnSettings.items[parseInt(i.toString(), 10)].content) {
3616
+ isIconOnly = false;
3617
+ break;
3618
+ }
3619
+ }
3620
+ if (isIconOnly) {
3621
+ targetEle.classList.add('e-icon-btn');
3622
+ }
3623
+ }
3539
3624
  targetEle.onclick = function () {
3540
3625
  if (_this.parent.activeLayout === 'Simplified' && targetEle.closest('.e-ribbon-dropdown-group-button').classList.contains(RIBBON_GROUP_BUTTON_OVERFLOW_POPUP)) {
3541
- dropdown.element.focus();
3542
3626
  dropdown.toggle();
3627
+ overflowButton.toggle();
3543
3628
  }
3544
3629
  };
3545
3630
  };
@@ -3555,9 +3640,13 @@ var RibbonGroupButton = /** @__PURE__ @class */ (function () {
3555
3640
  var groupButtonEle = itemEle.querySelector('#' + item.id);
3556
3641
  if (groupButtonEle) {
3557
3642
  var dropdown = getComponent(groupButtonEle, DropDownButton);
3643
+ var targetEle = dropdown.target;
3644
+ if (targetEle.classList.contains('e-icon-btn')) {
3645
+ targetEle.classList.remove('e-icon-btn');
3646
+ }
3558
3647
  var cssClass = dropdown.cssClass.split(SPACE);
3559
3648
  cssClass = cssClass.filter(function (value) { return value !== RIBBON_GROUP_BUTTON_OVERFLOW_POPUP; });
3560
- dropdown.setProperties({ cssClass: cssClass.join(SPACE) });
3649
+ dropdown.setProperties({ cssClass: cssClass.join(SPACE), content: '' });
3561
3650
  }
3562
3651
  };
3563
3652
  /**
@@ -3730,7 +3819,9 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
3730
3819
  e.preventDefault();
3731
3820
  }
3732
3821
  var activeContent = this.tabObj.element.querySelector('#' + this.tabs[this.selectedTab].id + CONTENT_ID);
3733
- var ribbonControls = activeContent.querySelectorAll('.e-control');
3822
+ var controlElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-control'));
3823
+ var templateElements = Array.prototype.slice.call(activeContent.querySelectorAll('.e-ribbon-template'));
3824
+ var ribbonControls = controlElements.concat(templateElements);
3734
3825
  var comboBoxElements = activeContent.querySelectorAll('.e-combobox');
3735
3826
  var comboBoxEle;
3736
3827
  if (comboBoxElements) {
@@ -3759,7 +3850,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
3759
3850
  if (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-launcher-icon') ||
3760
3851
  e.target.classList.contains('e-ribbon-collapse-btn') || e.target.classList.contains('e-ribbon-last-item') ||
3761
3852
  e.target.classList.contains('e-ribbon-first-item') || e.target.classList.contains('e-ribbon-group-of-btn') ||
3762
- e.target.classList.contains('e-ribbon-overall-of-btn')) {
3853
+ e.target.classList.contains('e-ribbon-overall-of-btn') || e.target.classList.contains('e-ribbon-template')) {
3763
3854
  switch (e.action) {
3764
3855
  case 'rightarrow':
3765
3856
  this.handleNavigation(e, !this.enableRtl, ribbonControls);
@@ -3801,7 +3892,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
3801
3892
  }
3802
3893
  }
3803
3894
  if ((!enableRtl && (this.currentControlIndex > 0)) || (enableRtl && (this.currentControlIndex < ribbonControls.length - 1))) {
3804
- if (!e.target.classList.contains('e-combobox') && e.target.classList.contains('e-control') && !e.target.classList.contains('e-ribbon-last-item')) {
3895
+ if (!e.target.classList.contains('e-combobox') && (e.target.classList.contains('e-control') || e.target.classList.contains('e-ribbon-template')) && !e.target.classList.contains('e-ribbon-last-item')) {
3805
3896
  if (enableRtl) {
3806
3897
  this.currentControlIndex++;
3807
3898
  }
@@ -3835,7 +3926,10 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
3835
3926
  }
3836
3927
  if (launcherIconEle) {
3837
3928
  var items = groupContainer.querySelectorAll('.e-ribbon-item');
3838
- items[items.length - 1].querySelector('.e-control').classList.add('e-ribbon-last-item');
3929
+ var elem = items[items.length - 1].querySelector('.e-control');
3930
+ if (elem) {
3931
+ elem.classList.add('e-ribbon-last-item');
3932
+ }
3839
3933
  }
3840
3934
  }
3841
3935
  else {
@@ -3948,6 +4042,15 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
3948
4042
  var scrollEle = this.tabObj.element.querySelector('.' + HORIZONTAL_SCROLLBAR);
3949
4043
  this.scrollModule.scrollStep = scrollEle.offsetWidth;
3950
4044
  }
4045
+ if (this.activeLayout === 'Simplified') {
4046
+ var activePopup = document.querySelectorAll('.e-ribbon .e-dropdown-btn.e-active, .e-ribbon-group-overflow-ddb .e-dropdown-btn.e-active');
4047
+ if (activePopup.length) {
4048
+ for (var i = 0; i < activePopup.length; i++) {
4049
+ var dropDownBtn = getInstance(activePopup[parseInt(i.toString(), 10)], DropDownButton);
4050
+ dropDownBtn.toggle();
4051
+ }
4052
+ }
4053
+ }
3951
4054
  };
3952
4055
  Ribbon.prototype.renderTabs = function () {
3953
4056
  this.tabsInternal = this.tabs.slice();
@@ -4273,7 +4376,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4273
4376
  }
4274
4377
  if (overflowDDB) {
4275
4378
  if (group.enableGroupOverflow) {
4276
- if (overflowtarget.childElementCount === 0) {
4379
+ if (overflowtarget.childElementCount === 0 || (overflowtarget.childElementCount === 1 && this.isHeaderVisible(overflowtarget, group.id))) {
4277
4380
  this.removeOverflowButton(overflowDDB);
4278
4381
  }
4279
4382
  }
@@ -4345,6 +4448,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4345
4448
  };
4346
4449
  Ribbon.prototype.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {
4347
4450
  var overflowButton;
4451
+ var itemProp = getGroup(this.tabs, groupId);
4348
4452
  var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;
4349
4453
  var groupEle = contentEle.querySelector('#' + groupId);
4350
4454
  if (isGroupOF) {
@@ -4358,6 +4462,17 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4358
4462
  overflowButton = getInstance(overflowDDB, DropDownButton);
4359
4463
  }
4360
4464
  var overflowBtnTarget = overflowButton.target;
4465
+ var headerEle = overflowBtnTarget.querySelector('#' + groupId + GROUPOF_BUTTON_ID + HEADER_ID);
4466
+ if (!headerEle) {
4467
+ if (itemProp.group.overflowHeader) {
4468
+ var groupHeader_1 = this.createElement('div', {
4469
+ className: RIBBON_OVERFLOW_HEADER,
4470
+ id: groupId + GROUPOF_BUTTON_ID + HEADER_ID,
4471
+ innerHTML: itemProp.group.overflowHeader
4472
+ });
4473
+ overflowBtnTarget.append(groupHeader_1);
4474
+ }
4475
+ }
4361
4476
  if (groupEle) {
4362
4477
  if (groupEle.classList.contains('e-disabled')) {
4363
4478
  overflowBtnTarget.classList.add('e-disabled');
@@ -4386,7 +4501,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4386
4501
  if (ofTabContainer) {
4387
4502
  var ofGroupContainer = overflowEle.querySelector('#' + groupId + CONTAINER_ID);
4388
4503
  if (!ofGroupContainer) {
4389
- ofGroupContainer = this.createGroupContainer(groupId, groupHeader);
4504
+ ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);
4390
4505
  if (groupEle) {
4391
4506
  if (groupEle.classList.contains('e-disabled')) {
4392
4507
  ofGroupContainer.classList.add('e-disabled');
@@ -4434,7 +4549,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4434
4549
  break;
4435
4550
  case 'GroupButton':
4436
4551
  if (this.activeLayout === 'Simplified') {
4437
- this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle);
4552
+ this.ribbonGroupButtonModule.addOverFlowEvents(item, itemEle, overflowButton);
4438
4553
  break;
4439
4554
  }
4440
4555
  }
@@ -4446,7 +4561,8 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
4446
4561
  });
4447
4562
  var overflowtarget = this.overflowDDB.target;
4448
4563
  overflowtarget.append(ofTabContainer);
4449
- var ofGroupContainer = this.createGroupContainer(groupId, groupHeader);
4564
+ var itemProp = getGroup(this.tabs, groupId);
4565
+ var ofGroupContainer = itemProp.group.overflowHeader ? this.createGroupContainer(groupId, itemProp.group.overflowHeader) : this.createGroupContainer(groupId, groupHeader);
4450
4566
  ofGroupContainer.append(itemEle);
4451
4567
  ofTabContainer.append(ofGroupContainer);
4452
4568
  if (tabIndex === this.selectedTab) {
@@ -5293,11 +5409,23 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5293
5409
  locale: this.locale,
5294
5410
  enableRtl: this.enableRtl,
5295
5411
  enablePersistence: this.enablePersistence,
5412
+ beforeOpen: function (args) {
5413
+ var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };
5414
+ _this.trigger('overflowPopupOpen', eventArgs, function (ribbonArgs) {
5415
+ if (ribbonArgs.cancel) {
5416
+ args.cancel = true;
5417
+ }
5418
+ });
5419
+ },
5296
5420
  beforeClose: function (args) {
5297
5421
  var ele = args.event ? closest(args.event.target, '.' + RIBBON_POPUP_CONTROL) : null;
5298
- if (ele) {
5299
- args.cancel = true;
5300
- }
5422
+ var groupButtonEle = args.event ? closest(args.event.target, '.e-ribbon-group-button-overflow-popup') : null;
5423
+ var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };
5424
+ _this.trigger('overflowPopupClose', eventArgs, function (ribbonArgs) {
5425
+ if (ele || ribbonArgs.cancel || groupButtonEle) {
5426
+ args.cancel = true;
5427
+ }
5428
+ });
5301
5429
  }
5302
5430
  }, overflowButton);
5303
5431
  this.element.classList.add(RIBBON_OVERFLOW);
@@ -5316,8 +5444,10 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5316
5444
  var currentList = target.querySelector('.e-ribbon-of-tab.e-ribbon-active');
5317
5445
  items = currentList.getElementsByClassName('e-ribbon-item');
5318
5446
  }
5319
- 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;
5447
+ var control = items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-control');
5448
+ var comboBoxEle = control && control.classList.contains('e-combobox') ? items[(!this.itemIndex || this.itemIndex < 0) ? 0 : this.itemIndex].querySelector('.e-combobox') : null;
5320
5449
  var ribbonItem;
5450
+ var templateEle;
5321
5451
  if (comboBoxEle === null || (e.key === 'Tab') || this.itemIndex < 0) {
5322
5452
  if (e.key === 'ArrowDown' || (!e.shiftKey && e.key === 'Tab')) {
5323
5453
  if ((!this.itemIndex && this.itemIndex !== 0) || this.itemIndex < 0 || this.itemIndex === items.length - 1) {
@@ -5326,13 +5456,21 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5326
5456
  this.findDisabledItem(ribbonItem, items, true);
5327
5457
  if (comboBoxEle && e.key === 'Tab') {
5328
5458
  e.preventDefault();
5329
- items[this.itemIndex].querySelector('.e-control').focus();
5459
+ var item = items[this.itemIndex].querySelector('.e-control');
5460
+ if (item) {
5461
+ item.focus();
5462
+ }
5330
5463
  }
5464
+ templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');
5331
5465
  }
5332
5466
  else if (this.itemIndex < items.length - 1 && this.itemIndex >= 0) {
5333
5467
  this.itemIndex++;
5334
5468
  ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');
5335
5469
  this.findDisabledItem(ribbonItem, items, true);
5470
+ templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');
5471
+ }
5472
+ if (templateEle) {
5473
+ templateEle.focus();
5336
5474
  }
5337
5475
  }
5338
5476
  else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {
@@ -5343,20 +5481,32 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5343
5481
  this.findDisabledItem(ribbonItem, items, false);
5344
5482
  if (comboBoxEle && (e.shiftKey && e.key === 'Tab')) {
5345
5483
  e.preventDefault();
5346
- items[this.itemIndex].querySelector('.e-control').focus();
5484
+ var item = items[this.itemIndex].querySelector('.e-control');
5485
+ if (item) {
5486
+ item.focus();
5487
+ }
5347
5488
  }
5489
+ templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');
5348
5490
  }
5349
5491
  else if (this.itemIndex <= items.length - 1 && this.itemIndex > 0) {
5350
5492
  this.itemIndex--;
5351
5493
  ribbonItem = items[this.itemIndex].closest('.e-ribbon-item');
5352
5494
  this.findDisabledItem(ribbonItem, items, false);
5495
+ templateEle = items[this.itemIndex].querySelector('.e-ribbon-template');
5496
+ }
5497
+ if (templateEle) {
5498
+ templateEle.focus();
5353
5499
  }
5354
5500
  }
5355
5501
  }
5356
5502
  target.setAttribute('index', this.itemIndex.toString());
5357
5503
  }
5358
5504
  var currentItemIndex = parseInt(target.getAttribute('index'), 10);
5359
- var itemType = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').getAttribute('data-control') : null;
5505
+ var itemType = "";
5506
+ var controlItem = items[parseInt(currentItemIndex.toString(), 10)] ? items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control') : null;
5507
+ if (controlItem) {
5508
+ itemType = controlItem.getAttribute('data-control');
5509
+ }
5360
5510
  if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === ' ' || e.key === 'Tab') {
5361
5511
  if (itemType === 'ColorPicker') {
5362
5512
  if (e.key === 'Tab') {
@@ -5368,7 +5518,10 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5368
5518
  if (e.key === 'Tab') {
5369
5519
  e.preventDefault();
5370
5520
  }
5371
- items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control').focus();
5521
+ var elem = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');
5522
+ if (elem) {
5523
+ elem.focus();
5524
+ }
5372
5525
  }
5373
5526
  if (e.key === ' ' && (itemType === 'CheckBox')) {
5374
5527
  var checkBoxEle = items[parseInt(currentItemIndex.toString(), 10)].querySelector('.e-control');
@@ -5755,7 +5908,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
5755
5908
  this.setItemSize(ele, item);
5756
5909
  }
5757
5910
  if (group.enableGroupOverflow && overflowDDB) {
5758
- if (overflowtarget.childElementCount === 0) {
5911
+ if (overflowtarget.childElementCount === 0 || (overflowtarget.childElementCount === 1 && this.isHeaderVisible(overflowtarget, group.id))) {
5759
5912
  this.removeOverflowButton(overflowDDB);
5760
5913
  }
5761
5914
  }
@@ -6040,7 +6193,8 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
6040
6193
  Ribbon.prototype.createTemplateContent = function (item, itemElement) {
6041
6194
  var itemEle = this.createElement('div', {
6042
6195
  className: item.cssClass ? (RIBBON_TEMPLATE + SPACE + item.cssClass) : RIBBON_TEMPLATE,
6043
- id: item.id
6196
+ id: item.id,
6197
+ attrs: { 'tabindex': '-1' }
6044
6198
  });
6045
6199
  if (item.disabled) {
6046
6200
  itemEle.classList.add(DISABLED_CSS);
@@ -6516,7 +6670,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
6516
6670
  }
6517
6671
  if (this.activeLayout === RibbonLayout.Simplified) {
6518
6672
  if (itemProp.group.enableGroupOverflow) {
6519
- if (dropdown.target.childElementCount === 0) {
6673
+ if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {
6520
6674
  this.removeOverflowButton(dropdown);
6521
6675
  }
6522
6676
  }
@@ -6543,6 +6697,9 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
6543
6697
  this.refreshLayout();
6544
6698
  }
6545
6699
  };
6700
+ Ribbon.prototype.isHeaderVisible = function (headerEle, groupID) {
6701
+ return headerEle.querySelector('#' + groupID + GROUPOF_BUTTON_ID + HEADER_ID) ? true : false;
6702
+ };
6546
6703
  /**
6547
6704
  * Hides a specific group within a ribbon tab.
6548
6705
  *
@@ -7102,7 +7259,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
7102
7259
  }
7103
7260
  if (this.activeLayout === RibbonLayout.Simplified) {
7104
7261
  if (itemProp.group.enableGroupOverflow) {
7105
- if (dropdown.target.childElementCount === 0) {
7262
+ if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {
7106
7263
  this.removeOverflowButton(dropdown);
7107
7264
  }
7108
7265
  }
@@ -7321,7 +7478,7 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
7321
7478
  }
7322
7479
  this.createRibbonItem(ribbonItem, itemContainer);
7323
7480
  if (this.activeLayout === 'Simplified' && itemProp.group.enableGroupOverflow) {
7324
- if (dropdown.target.childElementCount === 0) {
7481
+ if (dropdown.target.childElementCount === 0 || (dropdown.target.childElementCount === 1 && this.isHeaderVisible(dropdown.target, itemProp.group.id))) {
7325
7482
  this.removeOverflowButton(dropdown);
7326
7483
  }
7327
7484
  }
@@ -7623,6 +7780,12 @@ var Ribbon = /** @__PURE__ @class */ (function (_super) {
7623
7780
  __decorate([
7624
7781
  Event()
7625
7782
  ], Ribbon.prototype, "created", void 0);
7783
+ __decorate([
7784
+ Event()
7785
+ ], Ribbon.prototype, "overflowPopupOpen", void 0);
7786
+ __decorate([
7787
+ Event()
7788
+ ], Ribbon.prototype, "overflowPopupClose", void 0);
7626
7789
  Ribbon = Ribbon_1 = __decorate([
7627
7790
  NotifyPropertyChanges
7628
7791
  ], Ribbon);
@@ -8326,6 +8489,9 @@ var RibbonBackstage = /** @__PURE__ @class */ (function (_super) {
8326
8489
  this.closeBtn.setProperties(commonProp);
8327
8490
  }
8328
8491
  }
8492
+ if (this.footerMenuCtrl) {
8493
+ this.footerMenuCtrl.setProperties(commonProp);
8494
+ }
8329
8495
  }
8330
8496
  }
8331
8497
  };