@syncfusion/ej2-ribbon 23.2.4 → 23.2.7

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 (50) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/ej2-ribbon.umd.min.js +2 -2
  3. package/dist/ej2-ribbon.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-ribbon.es2015.js +201 -11
  5. package/dist/es6/ej2-ribbon.es2015.js.map +1 -1
  6. package/dist/es6/ej2-ribbon.es5.js +201 -11
  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 +9 -9
  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 +17 -1
  15. package/src/ribbon/base/ribbon.js +201 -11
  16. package/styles/bootstrap-dark.css +7 -3
  17. package/styles/bootstrap.css +7 -3
  18. package/styles/bootstrap4.css +7 -3
  19. package/styles/bootstrap5-dark.css +7 -3
  20. package/styles/bootstrap5.css +7 -3
  21. package/styles/fabric-dark.css +7 -3
  22. package/styles/fabric.css +7 -3
  23. package/styles/fluent-dark.css +7 -3
  24. package/styles/fluent.css +7 -3
  25. package/styles/highcontrast-light.css +7 -3
  26. package/styles/highcontrast.css +7 -3
  27. package/styles/material-dark.css +7 -3
  28. package/styles/material.css +7 -3
  29. package/styles/material3-dark.css +7 -3
  30. package/styles/material3.css +7 -3
  31. package/styles/ribbon/_layout.scss +10 -3
  32. package/styles/ribbon/bootstrap-dark.css +7 -3
  33. package/styles/ribbon/bootstrap.css +7 -3
  34. package/styles/ribbon/bootstrap4.css +7 -3
  35. package/styles/ribbon/bootstrap5-dark.css +7 -3
  36. package/styles/ribbon/bootstrap5.css +7 -3
  37. package/styles/ribbon/fabric-dark.css +7 -3
  38. package/styles/ribbon/fabric.css +7 -3
  39. package/styles/ribbon/fluent-dark.css +7 -3
  40. package/styles/ribbon/fluent.css +7 -3
  41. package/styles/ribbon/highcontrast-light.css +7 -3
  42. package/styles/ribbon/highcontrast.css +7 -3
  43. package/styles/ribbon/material-dark.css +7 -3
  44. package/styles/ribbon/material.css +7 -3
  45. package/styles/ribbon/material3-dark.css +7 -3
  46. package/styles/ribbon/material3.css +7 -3
  47. package/styles/ribbon/tailwind-dark.css +7 -3
  48. package/styles/ribbon/tailwind.css +7 -3
  49. package/styles/tailwind-dark.css +7 -3
  50. package/styles/tailwind.css +7 -3
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 23.2.4
3
+ * version : 23.2.7
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-ribbon@*",
3
- "_id": "@syncfusion/ej2-ribbon@23.1.44",
3
+ "_id": "@syncfusion/ej2-ribbon@23.2.5",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-xT6KW19AWenecFnlvwMfgBJ0UPFa9L7EMy7QCj6X6AVb5+r01bwmcAZ+/2pgb8IEyfpRcfJvfy1jsWqk7pkgSQ==",
5
+ "_integrity": "sha512-yaxRdEtxHw8Ko6CIOCA3KeaoQuBu8pNB/hDtISHgRg+VlFVdvfxy450RiOQFaN8ivXOiwi7jyGT4NvHA4E+qlA==",
6
6
  "_location": "/@syncfusion/ej2-ribbon",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,8 +23,8 @@
23
23
  "/@syncfusion/ej2-react-ribbon",
24
24
  "/@syncfusion/ej2-vue-ribbon"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-ribbon/-/ej2-ribbon-23.1.44.tgz",
27
- "_shasum": "77c3d9e46f87b29534cde8f8d6417a66289bc5a7",
26
+ "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-ribbon/-/ej2-ribbon-23.2.5.tgz",
27
+ "_shasum": "249585a25ef9d78e2207bdcecd2ee38fd2d74c05",
28
28
  "_spec": "@syncfusion/ej2-ribbon@*",
29
29
  "_where": "/jenkins/workspace/elease-automation_release_23.1.1/packages/included",
30
30
  "author": {
@@ -35,11 +35,11 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~23.2.4",
39
- "@syncfusion/ej2-buttons": "~23.2.4",
40
- "@syncfusion/ej2-dropdowns": "~23.2.4",
38
+ "@syncfusion/ej2-base": "~23.2.6",
39
+ "@syncfusion/ej2-buttons": "~23.2.7",
40
+ "@syncfusion/ej2-dropdowns": "~23.2.7",
41
41
  "@syncfusion/ej2-lists": "~23.2.4",
42
- "@syncfusion/ej2-navigations": "~23.2.4",
42
+ "@syncfusion/ej2-navigations": "~23.2.7",
43
43
  "@syncfusion/ej2-popups": "~23.2.4",
44
44
  "@syncfusion/ej2-splitbuttons": "~23.2.4"
45
45
  },
@@ -62,6 +62,6 @@
62
62
  "url": "git+https://github.com/syncfusion/ej2-ribbon-component.git"
63
63
  },
64
64
  "typings": "index.d.ts",
65
- "version": "23.2.4",
65
+ "version": "23.2.7",
66
66
  "sideEffects": false
67
67
  }
@@ -200,6 +200,23 @@ export interface ClickGroupButtonEventArgs extends BaseEventArgs {
200
200
  */
201
201
  selectedItems: RibbonGroupButtonItemModel[];
202
202
  }
203
+ /**
204
+ * Triggers before open / close of overflow popup menu.
205
+ */
206
+ export interface OverflowPopupEventArgs extends BaseEventArgs {
207
+ /**
208
+ * Provides the HTML element of the overflow popup.
209
+ */
210
+ element: HTMLElement;
211
+ /**
212
+ * Defines the original event arguments.
213
+ */
214
+ event: Event;
215
+ /**
216
+ * Defines whether to cancel the overflow popup open or close.
217
+ */
218
+ cancel?: boolean;
219
+ }
203
220
  /** @hidden */
204
221
  export interface itemProps {
205
222
  item?: RibbonItemModel;
@@ -1,4 +1,4 @@
1
- import { addClass, append, Event, Collection, Complex, Component, EmitType, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEventArgs, KeyboardEvents } from '@syncfusion/ej2-base';import { INotifyPropertyChanged, isNullOrUndefined, isUndefined, ModuleDeclaration, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';import { Tab, TabAnimationSettings, TabAnimationSettingsModel, TabItemModel, SelectEventArgs, SelectingEventArgs, HScroll, Toolbar } from '@syncfusion/ej2-navigations';import { RibbonTab, RibbonTabModel, RibbonGroupModel, RibbonCollectionModel, RibbonItemModel, FileMenuSettings, FileMenuSettingsModel, BackStageMenu, BackStageMenuModel, RibbonItem, RibbonCollection, RibbonGroup } from '../models/index';import { commonProperties, DisplayMode, ExpandCollapseEventArgs, itemProps, LauncherClickEventArgs, ribbonItemPropsList, RibbonLayout, ribbonTooltipData, TabSelectedEventArgs, TabSelectingEventArgs } from './interface';import { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';import { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonColorPicker, RibbonSplitButton, RibbonGroupButton } from '../items/index';import { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';import * as constants from './constant';import { RibbonFileMenu, RibbonBackstage } from '../modules/index';import { RibbonTooltipModel } from '../models/ribbon-tooltip-model';import { Popup } from '@syncfusion/ej2-popups';import { BeforeOpenCloseMenuEventArgs, DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';import { CheckBox } from '@syncfusion/ej2-buttons';
1
+ import { addClass, append, Event, Collection, Complex, Component, EmitType, EventHandler, formatUnit, getInstance, getComponent, getUniqueID, closest, KeyboardEventArgs, KeyboardEvents } from '@syncfusion/ej2-base';import { INotifyPropertyChanged, isNullOrUndefined, isUndefined, ModuleDeclaration, NotifyPropertyChanges, Property, remove, removeClass } from '@syncfusion/ej2-base';import { Tab, TabAnimationSettings, TabAnimationSettingsModel, TabItemModel, SelectEventArgs, SelectingEventArgs, HScroll, Toolbar } from '@syncfusion/ej2-navigations';import { RibbonTab, RibbonTabModel, RibbonGroupModel, RibbonCollectionModel, RibbonItemModel, FileMenuSettings, FileMenuSettingsModel, BackStageMenu, BackStageMenuModel, RibbonItem, RibbonCollection, RibbonGroup } from '../models/index';import { commonProperties, DisplayMode, ExpandCollapseEventArgs, itemProps, LauncherClickEventArgs, OverflowPopupEventArgs, ribbonItemPropsList, RibbonLayout, ribbonTooltipData, TabSelectedEventArgs, TabSelectingEventArgs } from './interface';import { ItemOrientation, RibbonItemSize, RibbonItemType } from './interface';import { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonColorPicker, RibbonSplitButton, RibbonGroupButton } from '../items/index';import { destroyControl, getCollection, getGroup, getIndex, getItem, getItemElement, updateCommonProperty, updateControlDisabled, isTooltipPresent, getTemplateFunction, createTooltip, destroyTooltip, updateTooltipProp } from './utils';import * as constants from './constant';import { RibbonFileMenu, RibbonBackstage } from '../modules/index';import { RibbonTooltipModel } from '../models/ribbon-tooltip-model';import { Popup } from '@syncfusion/ej2-popups';import { BeforeOpenCloseMenuEventArgs, DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';import { CheckBox } from '@syncfusion/ej2-buttons';
2
2
  import {ComponentModel} from '@syncfusion/ej2-base';
3
3
 
4
4
  /**
@@ -150,4 +150,18 @@ export interface RibbonModel extends ComponentModel{
150
150
  */
151
151
  created?: EmitType<Event>;
152
152
 
153
+ /**
154
+ * Event triggers when the overflow popup opens.
155
+ *
156
+ * @event overflowPopupOpen
157
+ */
158
+ overflowPopupOpen?: EmitType<OverflowPopupEventArgs>;
159
+
160
+ /**
161
+ * Event triggers when the overflow popup closes.
162
+ *
163
+ * @event overflowPopupClose
164
+ */
165
+ overflowPopupClose?: EmitType<OverflowPopupEventArgs>;
166
+
153
167
  }
@@ -3,7 +3,7 @@ import { INotifyPropertyChanged, ModuleDeclaration } from '@syncfusion/ej2-base'
3
3
  import { Tab, TabAnimationSettingsModel } from '@syncfusion/ej2-navigations';
4
4
  import { RibbonTabModel, RibbonGroupModel, RibbonCollectionModel, RibbonItemModel, FileMenuSettingsModel, BackStageMenuModel } from '../models/index';
5
5
  import { RibbonModel } from './ribbon-model';
6
- import { ExpandCollapseEventArgs, LauncherClickEventArgs, RibbonLayout, ribbonTooltipData, TabSelectedEventArgs, TabSelectingEventArgs } from './interface';
6
+ import { ExpandCollapseEventArgs, LauncherClickEventArgs, OverflowPopupEventArgs, RibbonLayout, ribbonTooltipData, TabSelectedEventArgs, TabSelectingEventArgs } from './interface';
7
7
  import { RibbonButton, RibbonComboBox, RibbonCheckBox, RibbonDropDown, RibbonColorPicker, RibbonSplitButton, RibbonGroupButton } from '../items/index';
8
8
  import { RibbonFileMenu, RibbonBackstage } from '../modules/index';
9
9
  import { DropDownButton } from '@syncfusion/ej2-splitbuttons';
@@ -136,6 +136,18 @@ export declare class Ribbon extends Component<HTMLElement> implements INotifyPro
136
136
  * @event created
137
137
  */
138
138
  created: EmitType<Event>;
139
+ /**
140
+ * Event triggers when the overflow popup opens.
141
+ *
142
+ * @event overflowPopupOpen
143
+ */
144
+ overflowPopupOpen: EmitType<OverflowPopupEventArgs>;
145
+ /**
146
+ * Event triggers when the overflow popup closes.
147
+ *
148
+ * @event overflowPopupClose
149
+ */
150
+ overflowPopupClose: EmitType<OverflowPopupEventArgs>;
139
151
  /**
140
152
  * The `ribbonButtonModule` is used to create and manipulate buttons in ribbon item.
141
153
  */
@@ -240,8 +252,10 @@ export declare class Ribbon extends Component<HTMLElement> implements INotifyPro
240
252
  private checkSimplifiedItemShrinking;
241
253
  private checkSimplifiedItemExpanding;
242
254
  private createSimplfiedOverflow;
255
+ private checkEmptyCollection;
243
256
  private updatePopupItems;
244
257
  private removeSimplfiedOverflow;
258
+ private checkOverflowHiddenItems;
245
259
  private createOverflowPopup;
246
260
  private addOverflowEvents;
247
261
  private createOfTabContainer;
@@ -449,6 +463,8 @@ export declare class Ribbon extends Component<HTMLElement> implements INotifyPro
449
463
  showItem(itemId: string): void;
450
464
  private showHideItem;
451
465
  private updateInitialProps;
466
+ private checkHiddenItems;
467
+ private checkOverflowItems;
452
468
  /**
453
469
  * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.
454
470
  *
@@ -428,6 +428,7 @@ var Ribbon = /** @class */ (function (_super) {
428
428
  if (activeTab) {
429
429
  activeTab.classList.add(constants.RIBBON_TAB_ACTIVE);
430
430
  this.overflowDDB.element.classList.remove(constants.HIDE_CSS);
431
+ this.checkOverflowHiddenItems(false, selectedIndex);
431
432
  }
432
433
  else {
433
434
  this.overflowDDB.element.classList.add(constants.HIDE_CSS);
@@ -537,6 +538,7 @@ var Ribbon = /** @class */ (function (_super) {
537
538
  };
538
539
  Ribbon.prototype.createSimplfiedOverflow = function (tabContent, activeContent, tabIndex) {
539
540
  var orderedGroups = this.getGroupResizeOrder(true, tabIndex);
541
+ var isEmptyCollection;
540
542
  for (var i = 0; ((i < orderedGroups.length) && (tabContent.offsetWidth < activeContent.offsetWidth)); i++) {
541
543
  var group = orderedGroups[parseInt(i.toString(), 10)];
542
544
  var groupEle = tabContent.querySelector('#' + group.id);
@@ -565,7 +567,25 @@ var Ribbon = /** @class */ (function (_super) {
565
567
  if (!(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {
566
568
  groupEle.classList.add('e-ribbon-emptyCollection');
567
569
  }
570
+ var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);
571
+ if (itemsLength && !group.enableGroupOverflow) {
572
+ isEmptyCollection = this.checkEmptyCollection(itemsLength);
573
+ if (isEmptyCollection) {
574
+ groupEle.classList.add('e-ribbon-emptyCollection');
575
+ }
576
+ }
577
+ this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);
578
+ }
579
+ };
580
+ Ribbon.prototype.checkEmptyCollection = function (itemsLength) {
581
+ var isEmptyCollection = true;
582
+ for (var i = 0; i < itemsLength.length; i++) {
583
+ if (!(itemsLength[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {
584
+ isEmptyCollection = false;
585
+ break;
586
+ }
568
587
  }
588
+ return isEmptyCollection;
569
589
  };
570
590
  Ribbon.prototype.updatePopupItems = function (item, itemEle, isGroupOF, isMenu) {
571
591
  var dropdown = getComponent(itemEle.querySelector('#' + item.id), (item.type === RibbonItemType.DropDown || item.type === RibbonItemType.GroupButton) ? DropDownButton : SplitButton);
@@ -597,6 +617,7 @@ var Ribbon = /** @class */ (function (_super) {
597
617
  if (isClear === void 0) { isClear = false; }
598
618
  var orderedGroups = this.getGroupResizeOrder(false, tabIndex);
599
619
  var flag = true;
620
+ var isEmptyCollection;
600
621
  for (var i = 0; ((i < orderedGroups.length) && flag); i++) {
601
622
  var group = orderedGroups[parseInt(i.toString(), 10)];
602
623
  var overflowDDB = void 0;
@@ -644,7 +665,13 @@ var Ribbon = /** @class */ (function (_super) {
644
665
  var groupEle = tabContent.querySelector('#' + group.id);
645
666
  var itemEle = groupEle.querySelector('.' + constants.RIBBON_ITEM);
646
667
  if (groupEle.classList.contains('e-ribbon-emptyCollection') && itemEle !== null) {
647
- groupEle.classList.remove('e-ribbon-emptyCollection');
668
+ var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);
669
+ if (itemsLength) {
670
+ isEmptyCollection = this.checkEmptyCollection(itemsLength);
671
+ if (!isEmptyCollection) {
672
+ groupEle.classList.remove('e-ribbon-emptyCollection');
673
+ }
674
+ }
648
675
  }
649
676
  if (overflowDDB) {
650
677
  if (group.enableGroupOverflow) {
@@ -664,6 +691,7 @@ var Ribbon = /** @class */ (function (_super) {
664
691
  }
665
692
  }
666
693
  }
694
+ this.checkOverflowHiddenItems(group.enableGroupOverflow, tabIndex, group.id);
667
695
  }
668
696
  if (this.overflowDDB) {
669
697
  var overflowEle = this.overflowDDB.target;
@@ -673,6 +701,50 @@ var Ribbon = /** @class */ (function (_super) {
673
701
  }
674
702
  }
675
703
  };
704
+ Ribbon.prototype.checkOverflowHiddenItems = function (isGroupOF, tabIndex, groupId) {
705
+ if (isGroupOF) {
706
+ var overflowDDB = document.querySelector('#' + groupId + constants.GROUPOF_BUTTON_ID);
707
+ if (overflowDDB) {
708
+ var overflowButton = getInstance(overflowDDB, DropDownButton);
709
+ var overflowBtnTarget = overflowButton.target;
710
+ var itemEle = overflowBtnTarget.querySelectorAll('.e-ribbon-item');
711
+ var isHidden = true;
712
+ for (var i = 0; i < itemEle.length; i++) {
713
+ if (!(itemEle[parseInt(i.toString(), 10)].classList.contains('e-hidden'))) {
714
+ isHidden = false;
715
+ break;
716
+ }
717
+ }
718
+ overflowButton.element.classList[isHidden ? 'add' : 'remove']('e-hidden');
719
+ }
720
+ }
721
+ else {
722
+ if (this.overflowDDB) {
723
+ var isGroupHidden = true;
724
+ var isItemHidden = void 0;
725
+ var overflowEle = this.overflowDDB.target;
726
+ var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);
727
+ if (ofTabContainer) {
728
+ for (var k = 0; k < ofTabContainer.children.length; k++) {
729
+ isItemHidden = true;
730
+ var overflowTab = ofTabContainer.children[parseInt(k.toString(), 10)];
731
+ var groupTabContainer = overflowTab.querySelectorAll('.e-ribbon-item');
732
+ for (var n = 0; n < groupTabContainer.length; n++) {
733
+ if (!(groupTabContainer[parseInt(n.toString(), 10)].classList.contains('e-hidden'))) {
734
+ isItemHidden = false;
735
+ break;
736
+ }
737
+ }
738
+ overflowTab.classList[isItemHidden ? 'add' : 'remove']('e-hide-group');
739
+ if (!(overflowTab.classList.contains('e-hide-group')) && !(overflowTab.classList.contains('e-hidden'))) {
740
+ isGroupHidden = false;
741
+ }
742
+ }
743
+ this.overflowDDB.element.classList[isGroupHidden ? 'add' : 'remove'](constants.HIDE_CSS);
744
+ }
745
+ }
746
+ }
747
+ };
676
748
  Ribbon.prototype.createOverflowPopup = function (item, tabIndex, isGroupOF, groupId, groupHeader, itemEle, groupContainer, isResize) {
677
749
  var overflowButton;
678
750
  var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;
@@ -688,11 +760,16 @@ var Ribbon = /** @class */ (function (_super) {
688
760
  overflowButton = getInstance(overflowDDB, DropDownButton);
689
761
  }
690
762
  var overflowBtnTarget = overflowButton.target;
691
- if (groupEle && groupEle.classList.contains('e-disabled')) {
692
- overflowBtnTarget.classList.add('e-disabled');
693
- }
694
- if (groupEle && groupEle.classList.contains('e-hidden')) {
695
- overflowBtnTarget.classList.add('e-hidden');
763
+ if (groupEle) {
764
+ if (groupEle.classList.contains('e-disabled')) {
765
+ overflowBtnTarget.classList.add('e-disabled');
766
+ }
767
+ if (groupEle.classList.contains('e-hidden')) {
768
+ overflowBtnTarget.classList.add('e-hidden');
769
+ }
770
+ if (groupEle.classList.contains('e-hide-group')) {
771
+ overflowBtnTarget.classList.add('e-hide-group');
772
+ }
696
773
  }
697
774
  isResize ? overflowBtnTarget.insertBefore(itemEle, overflowBtnTarget.querySelector('.' + constants.RIBBON_ITEM))
698
775
  : overflowBtnTarget.append(itemEle);
@@ -712,8 +789,16 @@ var Ribbon = /** @class */ (function (_super) {
712
789
  var ofGroupContainer = overflowEle.querySelector('#' + groupId + constants.CONTAINER_ID);
713
790
  if (!ofGroupContainer) {
714
791
  ofGroupContainer = this.createGroupContainer(groupId, groupHeader);
715
- if (groupEle && groupEle.classList.contains('e-disabled')) {
716
- ofGroupContainer.classList.add('e-disabled');
792
+ if (groupEle) {
793
+ if (groupEle.classList.contains('e-disabled')) {
794
+ ofGroupContainer.classList.add('e-disabled');
795
+ }
796
+ if (groupEle.classList.contains('e-hidden')) {
797
+ ofGroupContainer.classList.add('e-hidden');
798
+ }
799
+ if (groupEle.classList.contains('e-hide-group')) {
800
+ ofGroupContainer.classList.add('e-hide-group');
801
+ }
717
802
  }
718
803
  ofTabContainer.append(ofGroupContainer);
719
804
  }
@@ -777,6 +862,9 @@ var Ribbon = /** @class */ (function (_super) {
777
862
  if (groupEle.classList.contains('e-hidden')) {
778
863
  ofGroupContainer.classList.add('e-hidden');
779
864
  }
865
+ if (groupEle.classList.contains('e-hide-group')) {
866
+ ofGroupContainer.classList.add('e-hide-group');
867
+ }
780
868
  }
781
869
  };
782
870
  Ribbon.prototype.checkGroupShrinking = function (tabIndex, tabContent, activeContent, isLarge) {
@@ -1607,11 +1695,22 @@ var Ribbon = /** @class */ (function (_super) {
1607
1695
  locale: this.locale,
1608
1696
  enableRtl: this.enableRtl,
1609
1697
  enablePersistence: this.enablePersistence,
1698
+ beforeOpen: function (args) {
1699
+ var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };
1700
+ _this.trigger('overflowPopupOpen', eventArgs, function (ribbonArgs) {
1701
+ if (ribbonArgs.cancel) {
1702
+ args.cancel = true;
1703
+ }
1704
+ });
1705
+ },
1610
1706
  beforeClose: function (args) {
1611
1707
  var ele = args.event ? closest(args.event.target, '.' + constants.RIBBON_POPUP_CONTROL) : null;
1612
- if (ele) {
1613
- args.cancel = true;
1614
- }
1708
+ var eventArgs = { element: args.element, event: args.event, cancel: args.cancel };
1709
+ _this.trigger('overflowPopupClose', eventArgs, function (ribbonArgs) {
1710
+ if (ele || ribbonArgs.cancel) {
1711
+ args.cancel = true;
1712
+ }
1713
+ });
1615
1714
  }
1616
1715
  }, overflowButton);
1617
1716
  this.element.classList.add(constants.RIBBON_OVERFLOW);
@@ -2142,6 +2241,20 @@ var Ribbon = /** @class */ (function (_super) {
2142
2241
  }
2143
2242
  var elements = this.createCollection(group.collections, group.orientation, group.id, group.header, group.enableGroupOverflow, tabIndex, groupContainer);
2144
2243
  append(elements, groupContent);
2244
+ var isItemsHidden = true;
2245
+ for (var j = 0; j < elements.length; j++) {
2246
+ if (isItemsHidden) {
2247
+ for (var k = 0; k < elements[parseInt(j.toString(), 10)].children.length; k++) {
2248
+ if (!(elements[parseInt(j.toString(), 10)].children[parseInt(k.toString(), 10)].classList.contains('e-hidden'))) {
2249
+ isItemsHidden = false;
2250
+ break;
2251
+ }
2252
+ }
2253
+ }
2254
+ }
2255
+ if (isItemsHidden) {
2256
+ groupEle.classList.add('e-hide-group');
2257
+ }
2145
2258
  if ((this.activeLayout === 'Simplified') && !(group.enableGroupOverflow || groupEle.querySelector('.' + constants.RIBBON_ITEM))) {
2146
2259
  groupEle.classList.add('e-ribbon-emptyCollection');
2147
2260
  }
@@ -3158,6 +3271,7 @@ var Ribbon = /** @class */ (function (_super) {
3158
3271
  if (ele) {
3159
3272
  var itemEle = closest(ele, '.e-ribbon-item');
3160
3273
  isHidden ? itemEle.classList.add('e-hidden') : itemEle.classList.remove('e-hidden');
3274
+ this.checkHiddenItems(itemProp.group, isHidden, itemProp.tabIndex);
3161
3275
  this.refreshLayout();
3162
3276
  }
3163
3277
  else {
@@ -3190,6 +3304,76 @@ var Ribbon = /** @class */ (function (_super) {
3190
3304
  }
3191
3305
  }
3192
3306
  };
3307
+ Ribbon.prototype.checkHiddenItems = function (group, isHidden, tabIndex) {
3308
+ var isItemsHidden = true;
3309
+ var isEmptyCollection;
3310
+ var contentEle = this.tabObj.items[parseInt(tabIndex.toString(), 10)].content;
3311
+ var groupEle = contentEle.querySelector('#' + group.id);
3312
+ if (isHidden) {
3313
+ for (var i = 0; i < group.collections.length; i++) {
3314
+ if (isItemsHidden) {
3315
+ var collection = group.collections[parseInt(i.toString(), 10)];
3316
+ for (var j = 0; j < collection.items.length; j++) {
3317
+ var item = collection.items[parseInt(j.toString(), 10)];
3318
+ var itemEle = void 0;
3319
+ if (item.type === 'GroupButton') {
3320
+ var itemProp = getItem(this.tabs, item.id);
3321
+ itemEle = getItemElement(this, item.id + constants.RIBBON_GROUP_BUTTON_ID, itemProp);
3322
+ }
3323
+ else {
3324
+ itemEle = getItemElement(this, item.id);
3325
+ }
3326
+ var itemContainer = itemEle ? itemEle.closest('.e-ribbon-item') : null;
3327
+ if (!(itemContainer.classList.contains('e-hidden'))) {
3328
+ isItemsHidden = false;
3329
+ break;
3330
+ }
3331
+ }
3332
+ }
3333
+ }
3334
+ if (isItemsHidden) {
3335
+ groupEle.classList.add('e-hide-group');
3336
+ this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);
3337
+ }
3338
+ }
3339
+ else {
3340
+ groupEle.classList.remove('e-hide-group');
3341
+ this.checkOverflowItems(isHidden, contentEle, group.enableGroupOverflow, tabIndex, group.id);
3342
+ }
3343
+ if (this.activeLayout === 'Simplified' && !group.enableGroupOverflow) {
3344
+ var itemsLength = groupEle.querySelectorAll('.' + constants.RIBBON_ITEM);
3345
+ if (itemsLength) {
3346
+ isEmptyCollection = this.checkEmptyCollection(itemsLength);
3347
+ groupEle.classList[isEmptyCollection ? 'add' : 'remove']('e-ribbon-emptyCollection');
3348
+ }
3349
+ }
3350
+ };
3351
+ Ribbon.prototype.checkOverflowItems = function (isHidden, contentEle, isGroupOF, tabIndex, groupID) {
3352
+ var overflowDDB;
3353
+ var overflowtarget;
3354
+ if (isGroupOF) {
3355
+ var overflowDDBEle = contentEle.querySelector('#' + groupID + constants.GROUPOF_BUTTON_ID);
3356
+ if (overflowDDBEle) {
3357
+ overflowDDB = getInstance(overflowDDBEle, DropDownButton);
3358
+ overflowtarget = overflowDDB.target;
3359
+ }
3360
+ if (overflowtarget) {
3361
+ isHidden ? overflowtarget.classList.add('e-hide-group') : overflowtarget.classList.remove('e-hide-group');
3362
+ }
3363
+ }
3364
+ else {
3365
+ if (this.overflowDDB) {
3366
+ var overflowEle = this.overflowDDB.target;
3367
+ var ofTabContainer = overflowEle.querySelector('#' + this.tabs[parseInt(tabIndex.toString(), 10)].id + constants.OVERFLOW_ID);
3368
+ if (ofTabContainer) {
3369
+ var grpContainer = ofTabContainer.querySelector('#' + groupID + constants.CONTAINER_ID);
3370
+ if (grpContainer) {
3371
+ isHidden ? grpContainer.classList.add('e-hide-group') : grpContainer.classList.remove('e-hide-group');
3372
+ }
3373
+ }
3374
+ }
3375
+ }
3376
+ };
3193
3377
  /**
3194
3378
  * tab - Gets the ribbon tab to be updated. The id of the tab is a required property. Other properties are optional.
3195
3379
  *
@@ -3852,6 +4036,12 @@ var Ribbon = /** @class */ (function (_super) {
3852
4036
  __decorate([
3853
4037
  Event()
3854
4038
  ], Ribbon.prototype, "created", void 0);
4039
+ __decorate([
4040
+ Event()
4041
+ ], Ribbon.prototype, "overflowPopupOpen", void 0);
4042
+ __decorate([
4043
+ Event()
4044
+ ], Ribbon.prototype, "overflowPopupClose", void 0);
3855
4045
  Ribbon = Ribbon_1 = __decorate([
3856
4046
  NotifyPropertyChanges
3857
4047
  ], Ribbon);
@@ -298,6 +298,10 @@
298
298
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn:focus {
299
299
  outline: none;
300
300
  }
301
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-group-of-btn.e-hidden,
302
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn.e-hidden {
303
+ display: none;
304
+ }
301
305
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn {
302
306
  bottom: 4px;
303
307
  position: absolute;
@@ -349,7 +353,7 @@
349
353
  padding-top: 6px;
350
354
  height: 140px;
351
355
  }
352
- .e-ribbon.e-rbn .e-ribbon-group.e-hidden {
356
+ .e-ribbon.e-rbn .e-ribbon-group.e-hidden, .e-ribbon.e-rbn .e-ribbon-group.e-hide-group {
353
357
  display: none;
354
358
  }
355
359
  .e-ribbon.e-rbn .e-ribbon-group.e-disabled {
@@ -850,13 +854,13 @@
850
854
  .e-ribbon-group-overflow-ddb .e-ribbon-of-tab:not(.e-ribbon-active) {
851
855
  display: none;
852
856
  }
853
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden {
857
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hide-group {
854
858
  display: none;
855
859
  }
856
860
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-disabled {
857
861
  pointer-events: none;
858
862
  }
859
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden {
863
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hide-group {
860
864
  display: none;
861
865
  }
862
866
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-disabled {
@@ -303,6 +303,10 @@
303
303
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn:focus {
304
304
  outline: none;
305
305
  }
306
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-group-of-btn.e-hidden,
307
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn.e-hidden {
308
+ display: none;
309
+ }
306
310
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn {
307
311
  bottom: 4px;
308
312
  position: absolute;
@@ -354,7 +358,7 @@
354
358
  padding-top: 6px;
355
359
  height: 140px;
356
360
  }
357
- .e-ribbon.e-rbn .e-ribbon-group.e-hidden {
361
+ .e-ribbon.e-rbn .e-ribbon-group.e-hidden, .e-ribbon.e-rbn .e-ribbon-group.e-hide-group {
358
362
  display: none;
359
363
  }
360
364
  .e-ribbon.e-rbn .e-ribbon-group.e-disabled {
@@ -855,13 +859,13 @@
855
859
  .e-ribbon-group-overflow-ddb .e-ribbon-of-tab:not(.e-ribbon-active) {
856
860
  display: none;
857
861
  }
858
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden {
862
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hide-group {
859
863
  display: none;
860
864
  }
861
865
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-disabled {
862
866
  pointer-events: none;
863
867
  }
864
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden {
868
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hide-group {
865
869
  display: none;
866
870
  }
867
871
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-disabled {
@@ -364,6 +364,10 @@
364
364
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn:focus {
365
365
  outline: none;
366
366
  }
367
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-group-of-btn.e-hidden,
368
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn.e-hidden {
369
+ display: none;
370
+ }
367
371
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn {
368
372
  bottom: 4px;
369
373
  position: absolute;
@@ -415,7 +419,7 @@
415
419
  padding-top: 6px;
416
420
  height: 134px;
417
421
  }
418
- .e-ribbon.e-rbn .e-ribbon-group.e-hidden {
422
+ .e-ribbon.e-rbn .e-ribbon-group.e-hidden, .e-ribbon.e-rbn .e-ribbon-group.e-hide-group {
419
423
  display: none;
420
424
  }
421
425
  .e-ribbon.e-rbn .e-ribbon-group.e-disabled {
@@ -916,13 +920,13 @@
916
920
  .e-ribbon-group-overflow-ddb .e-ribbon-of-tab:not(.e-ribbon-active) {
917
921
  display: none;
918
922
  }
919
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden {
923
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hide-group {
920
924
  display: none;
921
925
  }
922
926
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-disabled {
923
927
  pointer-events: none;
924
928
  }
925
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden {
929
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hide-group {
926
930
  display: none;
927
931
  }
928
932
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-disabled {
@@ -382,6 +382,10 @@
382
382
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn:focus {
383
383
  outline: none;
384
384
  }
385
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-group-of-btn.e-hidden,
386
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn.e-hidden {
387
+ display: none;
388
+ }
385
389
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn {
386
390
  bottom: 3px;
387
391
  position: absolute;
@@ -433,7 +437,7 @@
433
437
  padding-top: 6px;
434
438
  height: 120px;
435
439
  }
436
- .e-ribbon.e-rbn .e-ribbon-group.e-hidden {
440
+ .e-ribbon.e-rbn .e-ribbon-group.e-hidden, .e-ribbon.e-rbn .e-ribbon-group.e-hide-group {
437
441
  display: none;
438
442
  }
439
443
  .e-ribbon.e-rbn .e-ribbon-group.e-disabled {
@@ -934,13 +938,13 @@
934
938
  .e-ribbon-group-overflow-ddb .e-ribbon-of-tab:not(.e-ribbon-active) {
935
939
  display: none;
936
940
  }
937
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden {
941
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hide-group {
938
942
  display: none;
939
943
  }
940
944
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-disabled {
941
945
  pointer-events: none;
942
946
  }
943
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden {
947
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hide-group {
944
948
  display: none;
945
949
  }
946
950
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-disabled {
@@ -382,6 +382,10 @@
382
382
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn:focus {
383
383
  outline: none;
384
384
  }
385
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-group-of-btn.e-hidden,
386
+ .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn.e-hidden {
387
+ display: none;
388
+ }
385
389
  .e-ribbon.e-rbn.e-ribbon-overflow .e-ribbon-overall-of-btn {
386
390
  bottom: 3px;
387
391
  position: absolute;
@@ -433,7 +437,7 @@
433
437
  padding-top: 6px;
434
438
  height: 120px;
435
439
  }
436
- .e-ribbon.e-rbn .e-ribbon-group.e-hidden {
440
+ .e-ribbon.e-rbn .e-ribbon-group.e-hidden, .e-ribbon.e-rbn .e-ribbon-group.e-hide-group {
437
441
  display: none;
438
442
  }
439
443
  .e-ribbon.e-rbn .e-ribbon-group.e-disabled {
@@ -934,13 +938,13 @@
934
938
  .e-ribbon-group-overflow-ddb .e-ribbon-of-tab:not(.e-ribbon-active) {
935
939
  display: none;
936
940
  }
937
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden {
941
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-hide-group {
938
942
  display: none;
939
943
  }
940
944
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target.e-disabled {
941
945
  pointer-events: none;
942
946
  }
943
- .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden {
947
+ .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hidden, .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-hide-group {
944
948
  display: none;
945
949
  }
946
950
  .e-ribbon-group-overflow-ddb .e-ribbon-overflow-target .e-ribbon-of-tab .e-ribbon-of-group-container.e-disabled {