@seniorsistemas/angular-components 17.7.3 → 17.7.5

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/bundles/seniorsistemas-angular-components.umd.js +335 -235
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +8 -4
  6. package/components/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +2 -1
  7. package/components/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +7 -4
  8. package/components/tiered-menu/models/tiered-menu-item-data.d.ts +2 -0
  9. package/components/tiered-menu/models/tiered-menu-item-internal-data.d.ts +2 -6
  10. package/components/tiered-menu/{tiered-menu.event.service.d.ts → services/tiered-menu.event.service.d.ts} +1 -8
  11. package/components/tiered-menu/services/tiered-menu.global.service.d.ts +4 -0
  12. package/components/tiered-menu/{tiered-menu.service.d.ts → services/tiered-menu.service.d.ts} +5 -3
  13. package/components/tiered-menu/tiered-menu.directive.d.ts +16 -14
  14. package/esm2015/components/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.js +3 -3
  15. package/esm2015/components/ia-insight/components/ia-insight-card/ia-insight-card.component.js +3 -2
  16. package/esm2015/components/tiered-menu/components/tiered-menu/tiered-menu.component.js +110 -51
  17. package/esm2015/components/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.js +16 -8
  18. package/esm2015/components/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.js +53 -9
  19. package/esm2015/components/tiered-menu/models/tiered-menu-item-data.js +1 -1
  20. package/esm2015/components/tiered-menu/models/tiered-menu-item-internal-data.js +1 -1
  21. package/esm2015/components/tiered-menu/services/tiered-menu.event.service.js +18 -0
  22. package/esm2015/components/tiered-menu/services/tiered-menu.global.service.js +9 -0
  23. package/esm2015/components/tiered-menu/services/tiered-menu.service.js +51 -0
  24. package/esm2015/components/tiered-menu/tiered-menu.directive.js +103 -109
  25. package/esm2015/components/tiered-menu/tiered-menu.module.js +8 -12
  26. package/esm2015/seniorsistemas-angular-components.js +18 -17
  27. package/esm5/components/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.js +3 -3
  28. package/esm5/components/ia-insight/components/ia-insight-card/ia-insight-card.component.js +3 -2
  29. package/esm5/components/tiered-menu/components/tiered-menu/tiered-menu.component.js +110 -51
  30. package/esm5/components/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.js +16 -8
  31. package/esm5/components/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.js +53 -9
  32. package/esm5/components/tiered-menu/models/tiered-menu-item-data.js +1 -1
  33. package/esm5/components/tiered-menu/models/tiered-menu-item-internal-data.js +1 -1
  34. package/esm5/components/tiered-menu/services/tiered-menu.event.service.js +19 -0
  35. package/esm5/components/tiered-menu/services/tiered-menu.global.service.js +12 -0
  36. package/esm5/components/tiered-menu/services/tiered-menu.service.js +54 -0
  37. package/esm5/components/tiered-menu/tiered-menu.directive.js +103 -110
  38. package/esm5/components/tiered-menu/tiered-menu.module.js +8 -12
  39. package/esm5/seniorsistemas-angular-components.js +18 -17
  40. package/fesm2015/seniorsistemas-angular-components.js +313 -214
  41. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  42. package/fesm5/seniorsistemas-angular-components.js +317 -218
  43. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  44. package/package.json +2 -1
  45. package/seniorsistemas-angular-components.d.ts +17 -16
  46. package/seniorsistemas-angular-components.metadata.json +1 -1
  47. package/esm2015/components/tiered-menu/tiered-menu.event.service.js +0 -39
  48. package/esm2015/components/tiered-menu/tiered-menu.service.js +0 -39
  49. package/esm5/components/tiered-menu/tiered-menu.event.service.js +0 -40
  50. package/esm5/components/tiered-menu/tiered-menu.service.js +0 -44
@@ -1,10 +1,11 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/animations'), require('rxjs'), require('rxjs/operators'), require('@angular/common'), require('@angular/forms'), require('@angular/router'), require('@angular/common/http'), require('@seniorsistemas/senior-platform-data'), require('moment'), require('ngx-cookie-service'), require('@seniorsistemas/ng2-currency-mask'), require('primeng/breadcrumb'), require('primeng/tieredmenu'), require('primeng/tooltip'), require('primeng/dom'), require('primeng/calendar'), require('@codemirror/view'), require('@codemirror/state'), require('@codemirror/lint'), require('@codemirror/language'), require('@lezer/generator'), require('@codemirror/highlight'), require('@codemirror/autocomplete'), require('@ngx-translate/core'), require('@codemirror/tooltip'), require('@codemirror/gutter'), require('ngx-mask'), require('angular2-hotkeys'), require('bignumber.js'), require('primeng/autocomplete'), require('primeng/dialog'), require('primeng/table'), require('ng2-currency-mask'), require('primeng/button'), require('primeng/checkbox'), require('primeng/chips'), require('primeng/dropdown'), require('primeng/fieldset'), require('primeng/inputmask'), require('primeng/inputtext'), require('primeng/inputtextarea'), require('primeng/keyfilter'), require('primeng/multiselect'), require('primeng/panel'), require('primeng/radiobutton'), require('primeng/slider'), require('primeng/api'), require('primeng/progressbar'), require('@angular/platform-browser'), require('@angular/cdk/clipboard'), require('cropperjs'), require('@angular/cdk/drag-drop'), require('element-resize-detector'), require('primeng/confirmdialog'), require('@angular/cdk/a11y'), require('primeng/scrollpanel'), require('primeng/sidebar')) :
3
- typeof define === 'function' && define.amd ? define('@seniorsistemas/angular-components', ['exports', '@angular/core', '@angular/animations', 'rxjs', 'rxjs/operators', '@angular/common', '@angular/forms', '@angular/router', '@angular/common/http', '@seniorsistemas/senior-platform-data', 'moment', 'ngx-cookie-service', '@seniorsistemas/ng2-currency-mask', 'primeng/breadcrumb', 'primeng/tieredmenu', 'primeng/tooltip', 'primeng/dom', 'primeng/calendar', '@codemirror/view', '@codemirror/state', '@codemirror/lint', '@codemirror/language', '@lezer/generator', '@codemirror/highlight', '@codemirror/autocomplete', '@ngx-translate/core', '@codemirror/tooltip', '@codemirror/gutter', 'ngx-mask', 'angular2-hotkeys', 'bignumber.js', 'primeng/autocomplete', 'primeng/dialog', 'primeng/table', 'ng2-currency-mask', 'primeng/button', 'primeng/checkbox', 'primeng/chips', 'primeng/dropdown', 'primeng/fieldset', 'primeng/inputmask', 'primeng/inputtext', 'primeng/inputtextarea', 'primeng/keyfilter', 'primeng/multiselect', 'primeng/panel', 'primeng/radiobutton', 'primeng/slider', 'primeng/api', 'primeng/progressbar', '@angular/platform-browser', '@angular/cdk/clipboard', 'cropperjs', '@angular/cdk/drag-drop', 'element-resize-detector', 'primeng/confirmdialog', '@angular/cdk/a11y', 'primeng/scrollpanel', 'primeng/sidebar'], factory) :
4
- (global = global || self, factory((global.seniorsistemas = global.seniorsistemas || {}, global.seniorsistemas['angular-components'] = {}), global.ng.core, global.ng.animations, global.rxjs, global.rxjs.operators, global.ng.common, global.ng.forms, global.ng.router, global.ng.common.http, global.seniorPlatformData, global.moment_, global.ngxCookieService, global.ng2CurrencyMask, global.breadcrumb, global.tieredmenu, global.tooltip, global.dom, global.calendar, global.view, global.state, global.lint, global.language, global.generator, global.highlight, global.autocomplete$1, global.core$1, global.tooltip$1, global.gutter, global.ngxMask, global.angular2Hotkeys, global.BigNumber, global.autocomplete$2, global.dialog, global.table, global.ng2CurrencyMask$1, global.button, global.checkbox, global.chips, global.dropdown, global.fieldset, global.inputmask, global.inputtext, global.inputtextarea, global.keyfilter, global.multiselect, global.panel, global.radiobutton, global.slider, global.api, global.progressbar, global.ng.platformBrowser, global.ng.cdk.clipboard, global.Cropper, global.ng.cdk['drag-drop'], global.elementResizeDetectorMaker_, global.confirmdialog, global.ng.cdk.a11y, global.scrollpanel, global.sidebar));
5
- }(this, (function (exports, core, animations, rxjs, operators, common, forms, router, http, seniorPlatformData, moment_, ngxCookieService, ng2CurrencyMask, breadcrumb, tieredmenu, tooltip, dom, calendar, view, state, lint, language, generator, highlight, autocomplete$1, core$1, tooltip$1, gutter, ngxMask, angular2Hotkeys, BigNumber, autocomplete$2, dialog, table, ng2CurrencyMask$1, button, checkbox, chips, dropdown, fieldset, inputmask, inputtext, inputtextarea, keyfilter, multiselect, panel, radiobutton, slider, api, progressbar, platformBrowser, clipboard, Cropper, dragDrop, elementResizeDetectorMaker_, confirmdialog, a11y, scrollpanel, sidebar) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/animations'), require('rxjs'), require('rxjs/operators'), require('@angular/common'), require('@angular/forms'), require('@angular/router'), require('@angular/common/http'), require('@seniorsistemas/senior-platform-data'), require('moment'), require('ngx-cookie-service'), require('@seniorsistemas/ng2-currency-mask'), require('primeng/breadcrumb'), require('primeng/tieredmenu'), require('primeng/tooltip'), require('primeng/dom'), require('primeng/calendar'), require('@codemirror/view'), require('@codemirror/state'), require('@codemirror/lint'), require('@codemirror/language'), require('@lezer/generator'), require('@codemirror/highlight'), require('@codemirror/autocomplete'), require('@ngx-translate/core'), require('@codemirror/tooltip'), require('@codemirror/gutter'), require('ngx-mask'), require('angular2-hotkeys'), require('bignumber.js'), require('primeng/autocomplete'), require('primeng/dialog'), require('primeng/table'), require('ng2-currency-mask'), require('primeng/button'), require('primeng/checkbox'), require('primeng/chips'), require('primeng/dropdown'), require('primeng/fieldset'), require('primeng/inputmask'), require('primeng/inputtext'), require('primeng/inputtextarea'), require('primeng/keyfilter'), require('primeng/multiselect'), require('primeng/panel'), require('primeng/radiobutton'), require('primeng/slider'), require('primeng/api'), require('primeng/progressbar'), require('@angular/platform-browser'), require('@angular/cdk/clipboard'), require('marked'), require('cropperjs'), require('@angular/cdk/drag-drop'), require('element-resize-detector'), require('primeng/confirmdialog'), require('@angular/cdk/a11y'), require('primeng/scrollpanel'), require('primeng/sidebar')) :
3
+ typeof define === 'function' && define.amd ? define('@seniorsistemas/angular-components', ['exports', '@angular/core', '@angular/animations', 'rxjs', 'rxjs/operators', '@angular/common', '@angular/forms', '@angular/router', '@angular/common/http', '@seniorsistemas/senior-platform-data', 'moment', 'ngx-cookie-service', '@seniorsistemas/ng2-currency-mask', 'primeng/breadcrumb', 'primeng/tieredmenu', 'primeng/tooltip', 'primeng/dom', 'primeng/calendar', '@codemirror/view', '@codemirror/state', '@codemirror/lint', '@codemirror/language', '@lezer/generator', '@codemirror/highlight', '@codemirror/autocomplete', '@ngx-translate/core', '@codemirror/tooltip', '@codemirror/gutter', 'ngx-mask', 'angular2-hotkeys', 'bignumber.js', 'primeng/autocomplete', 'primeng/dialog', 'primeng/table', 'ng2-currency-mask', 'primeng/button', 'primeng/checkbox', 'primeng/chips', 'primeng/dropdown', 'primeng/fieldset', 'primeng/inputmask', 'primeng/inputtext', 'primeng/inputtextarea', 'primeng/keyfilter', 'primeng/multiselect', 'primeng/panel', 'primeng/radiobutton', 'primeng/slider', 'primeng/api', 'primeng/progressbar', '@angular/platform-browser', '@angular/cdk/clipboard', 'marked', 'cropperjs', '@angular/cdk/drag-drop', 'element-resize-detector', 'primeng/confirmdialog', '@angular/cdk/a11y', 'primeng/scrollpanel', 'primeng/sidebar'], factory) :
4
+ (global = global || self, factory((global.seniorsistemas = global.seniorsistemas || {}, global.seniorsistemas['angular-components'] = {}), global.ng.core, global.ng.animations, global.rxjs, global.rxjs.operators, global.ng.common, global.ng.forms, global.ng.router, global.ng.common.http, global.seniorPlatformData, global.moment_, global.ngxCookieService, global.ng2CurrencyMask, global.breadcrumb, global.tieredmenu, global.tooltip, global.dom, global.calendar, global.view, global.state, global.lint, global.language, global.generator, global.highlight, global.autocomplete$1, global.core$1, global.tooltip$1, global.gutter, global.ngxMask, global.angular2Hotkeys, global.BigNumber, global.autocomplete$2, global.dialog, global.table, global.ng2CurrencyMask$1, global.button, global.checkbox, global.chips, global.dropdown, global.fieldset, global.inputmask, global.inputtext, global.inputtextarea, global.keyfilter, global.multiselect, global.panel, global.radiobutton, global.slider, global.api, global.progressbar, global.ng.platformBrowser, global.ng.cdk.clipboard, global.marked, global.Cropper, global.ng.cdk['drag-drop'], global.elementResizeDetectorMaker_, global.confirmdialog, global.ng.cdk.a11y, global.scrollpanel, global.sidebar));
5
+ }(this, (function (exports, core, animations, rxjs, operators, common, forms, router, http, seniorPlatformData, moment_, ngxCookieService, ng2CurrencyMask, breadcrumb, tieredmenu, tooltip, dom, calendar, view, state, lint, language, generator, highlight, autocomplete$1, core$1, tooltip$1, gutter, ngxMask, angular2Hotkeys, BigNumber, autocomplete$2, dialog, table, ng2CurrencyMask$1, button, checkbox, chips, dropdown, fieldset, inputmask, inputtext, inputtextarea, keyfilter, multiselect, panel, radiobutton, slider, api, progressbar, platformBrowser, clipboard, marked, Cropper, dragDrop, elementResizeDetectorMaker_, confirmdialog, a11y, scrollpanel, sidebar) { 'use strict';
6
6
 
7
7
  var BigNumber__default = 'default' in BigNumber ? BigNumber['default'] : BigNumber;
8
+ marked = marked && marked.hasOwnProperty('default') ? marked['default'] : marked;
8
9
  Cropper = Cropper && Cropper.hasOwnProperty('default') ? Cropper['default'] : Cropper;
9
10
 
10
11
  /*! *****************************************************************************
@@ -13483,7 +13484,7 @@
13483
13484
  this.insight.request$
13484
13485
  .pipe(operators.first(), operators.finalize(function () { return (_this.isLoading = false); }))
13485
13486
  .subscribe(function (content) {
13486
- _this.content = content;
13487
+ _this.content = marked.marked(content);
13487
13488
  });
13488
13489
  };
13489
13490
  IAInsightCardComponent.ctorParameters = function () { return [
@@ -13558,8 +13559,8 @@
13558
13559
  IAInsightCardLoaderComponent = __decorate([
13559
13560
  core.Component({
13560
13561
  selector: "s-ia-insight-card-loader",
13561
- template: "<div class=\"ia-insight-card-loader\">\n <div class=\"loader\">\n <div class=\"loader-icon\">\n <div sSVGFactory></div>\n </div>\n </div>\n \n <span class=\"loader-label\">{{ \"platform.angular_components.loading_insight\" | translate }}</span>\n</div>\n",
13562
- styles: [".ia-insight-card-loader{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:24px}.ia-insight-card-loader .loader{-ms-flex-align:center;align-items:center;animation:2s linear infinite spin;border:2px solid #f1f7f8;border-top:2px solid #0fa389;border-radius:50%;display:-ms-flexbox;display:flex;height:48px;-ms-flex-pack:center;justify-content:center;width:48px}.ia-insight-card-loader .loader .loader-icon{animation:2s linear infinite reverse spin;height:64px;transform:translate(-50%,-50%);width:64px}.ia-insight-card-loader .loader-label{color:#888b99;font-family:\"Open Sans\",sans-serif;font-size:16px}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"]
13562
+ template: "<div class=\"ia-insight-card-loader\">\n <div class=\"loader\">\n <div class=\"loader-icon\">\n <div *sSVGFactory=\"'iassist'\"></div>\n </div>\n </div>\n \n <span class=\"loader-label\">{{ \"platform.angular_components.loading_insight\" | translate }}</span>\n</div>\n",
13563
+ styles: [".ia-insight-card-loader{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:24px}.ia-insight-card-loader .loader{-ms-flex-align:center;align-items:center;animation:2s linear infinite spin;border:2px solid #f1f7f8;border-top:2px solid #0fa389;border-radius:50%;display:-ms-flexbox;display:flex;height:48px;-ms-flex-pack:center;justify-content:center;width:48px}.ia-insight-card-loader .loader .loader-icon{animation:2s linear infinite reverse spin;height:32px;transform:translate(-50%,-50%)}.ia-insight-card-loader .loader-label{color:#888b99;font-family:\"Open Sans\",sans-serif;font-size:16px}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"]
13563
13564
  })
13564
13565
  ], IAInsightCardLoaderComponent);
13565
13566
  return IAInsightCardLoaderComponent;
@@ -16119,27 +16120,6 @@
16119
16120
  this.closeItemMenuEvent = new core.EventEmitter();
16120
16121
  this.createMenuEvent = new core.EventEmitter();
16121
16122
  }
16122
- TieredMenuEventService.prototype.emitIncrementCurrentItemEvent = function () {
16123
- this.incrementCurrentItemEvent.emit();
16124
- };
16125
- TieredMenuEventService.prototype.emitDecrementCurrentItemEvent = function () {
16126
- this.decrementCurrentItemEvent.emit();
16127
- };
16128
- TieredMenuEventService.prototype.emitCloseAllMenusEvent = function () {
16129
- this.closeAllMenusEvent.emit();
16130
- };
16131
- TieredMenuEventService.prototype.emitSelectItemEvent = function (item) {
16132
- this.selectItemEvent.emit(item);
16133
- };
16134
- TieredMenuEventService.prototype.emitOpenItemMenuEvent = function (item) {
16135
- this.openItemMenuEvent.emit(item);
16136
- };
16137
- TieredMenuEventService.prototype.emitCloseItemMenuEvent = function (item) {
16138
- this.closeItemMenuEvent.emit(item);
16139
- };
16140
- TieredMenuEventService.prototype.emitCreateMenuEvent = function (item) {
16141
- this.createMenuEvent.emit(item);
16142
- };
16143
16123
  TieredMenuEventService = __decorate([
16144
16124
  core.Injectable()
16145
16125
  ], TieredMenuEventService);
@@ -16148,22 +16128,26 @@
16148
16128
 
16149
16129
  var TieredMenuService = /** @class */ (function () {
16150
16130
  function TieredMenuService() {
16131
+ this.currentItems = [];
16132
+ this.items = [];
16151
16133
  }
16152
16134
  TieredMenuService.prototype.normalizeData = function (items, parent) {
16153
16135
  var _this = this;
16154
16136
  return items.map(function (i) {
16155
- if (i.submenu) {
16156
- i.submenu = _this.normalizeData(i.submenu, i);
16137
+ var item = __assign({}, i);
16138
+ if (item.submenu) {
16139
+ item.submenu = _this.normalizeData(item.submenu, item);
16157
16140
  }
16158
- i.id = "id-" + Math.random().toString(36).substring(2, 9) + "-" + Date.now().toString(36);
16159
- i.parent = parent;
16160
- i.isOpen = false;
16161
- return i;
16141
+ item.id = _this._generateId();
16142
+ item.parent = parent;
16143
+ item.isOpen = false;
16144
+ return item;
16162
16145
  });
16163
16146
  };
16164
16147
  TieredMenuService.prototype.markAllItemsAsClosed = function (items) {
16165
16148
  var _this = this;
16166
- return items.map(function (item) {
16149
+ return items.map(function (i) {
16150
+ var item = __assign({}, i);
16167
16151
  if (item.submenu) {
16168
16152
  item.submenu = _this.markAllItemsAsClosed(item.submenu);
16169
16153
  }
@@ -16171,16 +16155,22 @@
16171
16155
  return item;
16172
16156
  });
16173
16157
  };
16174
- TieredMenuService.prototype.searchTheHierarchy = function (item1, item2) {
16175
- var itemAux = item2;
16176
- while (itemAux) {
16177
- if (itemAux === item1) {
16158
+ TieredMenuService.prototype.searchTheHierarchy = function (itemA, itemB) {
16159
+ var item = itemB;
16160
+ while (item) {
16161
+ if (item === itemA) {
16178
16162
  return true;
16179
16163
  }
16180
- itemAux = itemAux.parent;
16164
+ item = item.parent;
16181
16165
  }
16182
16166
  return false;
16183
16167
  };
16168
+ TieredMenuService.prototype.cloneItems = function (items) {
16169
+ return JSON.parse(JSON.stringify(items));
16170
+ };
16171
+ TieredMenuService.prototype._generateId = function () {
16172
+ return "id-" + Math.random().toString(36).substring(2, 9) + "-" + Math.random().toString(36).substring(2, 9) + "-" + Math.random().toString(36).substring(2, 9);
16173
+ };
16184
16174
  TieredMenuService = __decorate([
16185
16175
  core.Injectable()
16186
16176
  ], TieredMenuService);
@@ -16192,9 +16182,44 @@
16192
16182
  this.tieredMenuService = tieredMenuService;
16193
16183
  this._tieredMenuEventService = _tieredMenuEventService;
16194
16184
  this.top = 0;
16195
- this.maxHeight = 0;
16185
+ this.left = 0;
16196
16186
  this._unsubscribe$ = new rxjs.Subject();
16197
16187
  }
16188
+ TieredMenuNestedComponent.prototype.onResize = function () {
16189
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16190
+ };
16191
+ TieredMenuNestedComponent.prototype.onDocumentClick = function (event) {
16192
+ // Closing menu when clicked outside.
16193
+ var target = event.target;
16194
+ var clickedInside = target.closest("s-tiered-menu-item") || target.closest("s-tiered-menu-divider");
16195
+ if (!clickedInside) {
16196
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16197
+ }
16198
+ };
16199
+ TieredMenuNestedComponent.prototype.onKeydownHandler = function (event) {
16200
+ switch (event.key) {
16201
+ case "Escape":
16202
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16203
+ break;
16204
+ case " ":
16205
+ case "Enter":
16206
+ this._tieredMenuEventService.selectItemEvent.emit(this.tieredMenuService.currentItem);
16207
+ break;
16208
+ case "ArrowLeft":
16209
+ // When nested I need a reference to the current item's parent item, otherwise just the current item.
16210
+ this._tieredMenuEventService.closeItemMenuEvent.emit(this.tieredMenuService.currentItem.parent);
16211
+ break;
16212
+ case "ArrowRight":
16213
+ this._tieredMenuEventService.openItemMenuEvent.emit(this.tieredMenuService.currentItem);
16214
+ break;
16215
+ case "ArrowUp":
16216
+ this._tieredMenuEventService.decrementCurrentItemEvent.emit();
16217
+ break;
16218
+ case "ArrowDown":
16219
+ this._tieredMenuEventService.incrementCurrentItemEvent.emit();
16220
+ break;
16221
+ }
16222
+ };
16198
16223
  TieredMenuNestedComponent.prototype.ngOnInit = function () {
16199
16224
  this.tieredMenuService.currentItems = this.items;
16200
16225
  this._subscribeEvents();
@@ -16275,7 +16300,7 @@
16275
16300
  if (item.command) {
16276
16301
  item.command();
16277
16302
  // Close all menus after the item was selected.
16278
- _this._tieredMenuEventService.emitCloseAllMenusEvent();
16303
+ _this._tieredMenuEventService.closeAllMenusEvent.emit();
16279
16304
  }
16280
16305
  });
16281
16306
  this._tieredMenuEventService.openItemMenuEvent
@@ -16287,7 +16312,7 @@
16287
16312
  while ((_a = itemAux === null || itemAux === void 0 ? void 0 : itemAux.parent) === null || _a === void 0 ? void 0 : _a.parent) {
16288
16313
  itemAux = itemAux.parent;
16289
16314
  }
16290
- _this._tieredMenuEventService.emitCloseItemMenuEvent((_b = itemAux.parent) !== null && _b !== void 0 ? _b : itemAux);
16315
+ _this._tieredMenuEventService.closeItemMenuEvent.emit((_b = itemAux.parent) !== null && _b !== void 0 ? _b : itemAux);
16291
16316
  }
16292
16317
  _this._lastOpenItem = item;
16293
16318
  _this._openItem(item);
@@ -16304,20 +16329,30 @@
16304
16329
  { type: TieredMenuService },
16305
16330
  { type: TieredMenuEventService }
16306
16331
  ]; };
16332
+ __decorate([
16333
+ core.HostListener("window:resize")
16334
+ ], TieredMenuNestedComponent.prototype, "onResize", null);
16335
+ __decorate([
16336
+ core.HostListener("document:click", ["$event"])
16337
+ ], TieredMenuNestedComponent.prototype, "onDocumentClick", null);
16338
+ __decorate([
16339
+ core.HostListener("document:keydown", ["$event"])
16340
+ ], TieredMenuNestedComponent.prototype, "onKeydownHandler", null);
16307
16341
  TieredMenuNestedComponent = __decorate([
16308
16342
  core.Component({
16309
- template: "<div\n class=\"menu menu--nested\"\n [ngStyle]=\"{\n 'top': top + 'px',\n 'max-height': maxHeight + 'px'\n }\">\n <ng-container *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: items }\"></ng-container>\n</div>\n\n<ng-template #itemsTemplate let-items>\n <div *ngFor=\"let item of items\">\n <s-tiered-menu-item\n *ngIf=\"!item.divider\"\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n [closeOnClick]=\"true\">\n </s-tiered-menu-item>\n\n <s-tiered-menu-divider *ngIf=\"item.divider\"></s-tiered-menu-divider>\n\n <div *ngIf=\"item.submenu && item.isOpen\">\n <div class=\"submenu\">\n <ng-container *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: item.submenu }\"></ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n",
16310
- styles: [".menu{background-color:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;min-width:176px;padding:4px 0;position:fixed;z-index:9999;overflow:auto}.menu--nested{width:90vw;margin:0 5vw}.menu .submenu{margin-left:24px}"]
16343
+ template: "<div\n class=\"menu menu--nested\"\n [ngStyle]=\"{\n 'top': top + 'px',\n 'left': left + 'px'\n }\">\n <ng-container *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: items }\"></ng-container>\n</div>\n\n<ng-template #itemsTemplate let-items>\n <div *ngFor=\"let item of items\">\n <s-tiered-menu-item\n *ngIf=\"!item.divider\"\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n [closeOnClick]=\"true\">\n </s-tiered-menu-item>\n\n <s-tiered-menu-divider *ngIf=\"item.divider\"></s-tiered-menu-divider>\n\n <div *ngIf=\"item.submenu && item.isOpen\">\n <div class=\"submenu\">\n <ng-container *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: item.submenu }\"></ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n",
16344
+ styles: [".menu{background-color:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;min-width:176px;padding:4px 0;position:absolute;z-index:9999;overflow:auto;width:calc(100vw - 8px)}.menu .submenu{margin-left:24px}"]
16311
16345
  })
16312
16346
  ], TieredMenuNestedComponent);
16313
16347
  return TieredMenuNestedComponent;
16314
16348
  }());
16315
16349
 
16316
16350
  var TieredMenuComponent = /** @class */ (function () {
16317
- function TieredMenuComponent(_appRef, _componentFactoryResolver, _injector, tieredMenuService, _tieredMenuEventService) {
16351
+ function TieredMenuComponent(_appRef, _componentFactoryResolver, _injector, _changeDetectorRef, tieredMenuService, _tieredMenuEventService) {
16318
16352
  this._appRef = _appRef;
16319
16353
  this._componentFactoryResolver = _componentFactoryResolver;
16320
16354
  this._injector = _injector;
16355
+ this._changeDetectorRef = _changeDetectorRef;
16321
16356
  this.tieredMenuService = tieredMenuService;
16322
16357
  this._tieredMenuEventService = _tieredMenuEventService;
16323
16358
  this.top = 0;
@@ -16328,6 +16363,54 @@
16328
16363
  this.destroyRequest = new core.EventEmitter();
16329
16364
  }
16330
16365
  TieredMenuComponent_1 = TieredMenuComponent;
16366
+ TieredMenuComponent.prototype.onResize = function () {
16367
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16368
+ };
16369
+ TieredMenuComponent.prototype.onDocumentClick = function (event) {
16370
+ // Closing menu when clicked outside.
16371
+ var target = event.target;
16372
+ var clickedInside = target.closest("s-tiered-menu-item") || target.closest("s-tiered-menu-divider");
16373
+ if (!clickedInside) {
16374
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16375
+ }
16376
+ };
16377
+ TieredMenuComponent.prototype.onKeydownHandler = function (event) {
16378
+ switch (event.key) {
16379
+ case "Escape":
16380
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16381
+ break;
16382
+ case " ":
16383
+ case "Enter":
16384
+ if (!this.tieredMenuService.currentItem.disabled) {
16385
+ this._tieredMenuEventService.selectItemEvent.emit(this.tieredMenuService.currentItem);
16386
+ }
16387
+ break;
16388
+ case "ArrowLeft":
16389
+ if (this.items.includes(this.tieredMenuService.currentItem)) {
16390
+ this._tieredMenuEventService.closeItemMenuEvent.emit(this.tieredMenuService.currentItem);
16391
+ this._changeDetectorRef.detectChanges();
16392
+ }
16393
+ break;
16394
+ case "ArrowRight":
16395
+ if (!this.tieredMenuService.currentItem.disabled && this.items.includes(this.tieredMenuService.currentItem)) {
16396
+ this._tieredMenuEventService.openItemMenuEvent.emit(this.tieredMenuService.currentItem);
16397
+ event.stopImmediatePropagation();
16398
+ }
16399
+ break;
16400
+ case "ArrowUp":
16401
+ if (!this.tieredMenuService.currentItem || this.items.includes(this.tieredMenuService.currentItem)) {
16402
+ this._tieredMenuEventService.decrementCurrentItemEvent.emit();
16403
+ event.stopImmediatePropagation();
16404
+ }
16405
+ break;
16406
+ case "ArrowDown":
16407
+ if (!this.tieredMenuService.currentItem || this.items.includes(this.tieredMenuService.currentItem)) {
16408
+ this._tieredMenuEventService.incrementCurrentItemEvent.emit();
16409
+ event.stopImmediatePropagation();
16410
+ }
16411
+ break;
16412
+ }
16413
+ };
16331
16414
  TieredMenuComponent.prototype.ngOnInit = function () {
16332
16415
  this.tieredMenuService.currentItems = this.items;
16333
16416
  this._subscribeEvents();
@@ -16387,8 +16470,7 @@
16387
16470
  // Setting the menu items.
16388
16471
  this._componentRef.instance.items = items;
16389
16472
  // Subscribe menu events.
16390
- this._componentRef.instance.destroyRequest
16391
- .subscribe(function (propagate) {
16473
+ this._componentRef.instance.destroyRequest.subscribe(function (propagate) {
16392
16474
  _this._destroy(propagate);
16393
16475
  });
16394
16476
  this._menuDivElement = domElem.querySelector(".menu");
@@ -16408,14 +16490,23 @@
16408
16490
  }
16409
16491
  };
16410
16492
  TieredMenuComponent.prototype._setMenuPosition = function (position) {
16411
- var _a;
16493
+ var _a, _b;
16494
+ var ITEM_HEIGHT = 37;
16495
+ var DIVIDER_HEIGHT = 5;
16496
+ var PADDING = 8;
16412
16497
  if (this._componentRef !== null) {
16413
16498
  var top_1 = position.top, right = position.right, bottom = position.bottom, left = position.left;
16499
+ var itemsCount = (_a = this._componentRef.instance.items) === null || _a === void 0 ? void 0 : _a.reduce(function (count, item) {
16500
+ return !item.divider ? count + 1 : count;
16501
+ }, 0);
16502
+ var dividersCount = (_b = this._componentRef.instance.items) === null || _b === void 0 ? void 0 : _b.reduce(function (count, item) {
16503
+ return item.divider ? count + 1 : count;
16504
+ }, 0);
16414
16505
  // I need to calculate the height of the component because the internal elements have not been created yet.
16415
- var menuHeight = ((_a = this.items) === null || _a === void 0 ? void 0 : _a.length) * 40;
16506
+ var menuHeight = itemsCount * ITEM_HEIGHT + dividersCount * DIVIDER_HEIGHT + PADDING + 8;
16416
16507
  var menuWidth = this._menuDivElement.getBoundingClientRect().width;
16417
- var rightFreeSpace = document.body.clientWidth - right;
16418
- var bottomFreeSpace = document.body.clientHeight - bottom;
16508
+ var rightFreeSpace = window.innerWidth - right;
16509
+ var bottomFreeSpace = window.innerHeight - bottom;
16419
16510
  if (rightFreeSpace > menuWidth) {
16420
16511
  this._componentRef.instance.left = right;
16421
16512
  }
@@ -16423,85 +16514,77 @@
16423
16514
  this._componentRef.instance.left = left - menuWidth;
16424
16515
  }
16425
16516
  if (bottomFreeSpace <= menuHeight) {
16426
- this._componentRef.instance.top = top_1 - menuHeight;
16517
+ this._componentRef.instance.top = Math.max(window.innerHeight - menuHeight, window.scrollY);
16427
16518
  }
16428
16519
  else {
16429
- this._componentRef.instance.top = top_1;
16520
+ this._componentRef.instance.top = window.scrollY + top_1;
16430
16521
  }
16431
16522
  }
16432
16523
  };
16433
16524
  TieredMenuComponent.prototype._subscribeEvents = function () {
16434
16525
  var _this = this;
16435
16526
  // Increment current item event.
16436
- this._tieredMenuEventService.incrementCurrentItemEvent
16437
- .pipe(operators.takeUntil(this._unsubscribe$))
16438
- .subscribe(function () {
16527
+ this._tieredMenuEventService.incrementCurrentItemEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function () {
16439
16528
  _this._incrementCurItem();
16440
16529
  });
16441
16530
  // Decrement current item event.
16442
- this._tieredMenuEventService.decrementCurrentItemEvent
16443
- .pipe(operators.takeUntil(this._unsubscribe$))
16444
- .subscribe(function () {
16531
+ this._tieredMenuEventService.decrementCurrentItemEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function () {
16445
16532
  _this._decrementCurItem();
16446
16533
  });
16447
16534
  // Select item event.
16448
- this._tieredMenuEventService.selectItemEvent
16449
- .pipe(operators.takeUntil(this._unsubscribe$))
16450
- .subscribe(function (item) {
16535
+ this._tieredMenuEventService.selectItemEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function (item) {
16451
16536
  if (item.submenu) {
16452
- _this._tieredMenuEventService.emitOpenItemMenuEvent(item);
16537
+ _this._tieredMenuEventService.openItemMenuEvent.emit(item);
16453
16538
  }
16454
16539
  else if (item.command) {
16455
- _this._tieredMenuEventService.emitCloseAllMenusEvent();
16540
+ _this._tieredMenuEventService.closeAllMenusEvent.emit();
16456
16541
  item.command();
16457
16542
  }
16458
16543
  });
16459
16544
  // Close all menus event.
16460
- this._tieredMenuEventService.closeAllMenusEvent
16461
- .pipe(operators.takeUntil(this._unsubscribe$))
16462
- .subscribe(function () {
16545
+ this._tieredMenuEventService.closeAllMenusEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function () {
16463
16546
  _this._destroy();
16464
16547
  _this.tieredMenuService.currentItem = null;
16465
16548
  _this.tieredMenuService.currentItems = _this.tieredMenuService.items;
16549
+ _this.tieredMenuService.markAllItemsAsClosed(_this.tieredMenuService.items);
16466
16550
  });
16467
16551
  // Open item menu event.
16468
- this._tieredMenuEventService.openItemMenuEvent
16469
- .pipe(operators.takeUntil(this._unsubscribe$))
16470
- .subscribe(function (item) {
16471
- item.isOpen = false;
16552
+ this._tieredMenuEventService.openItemMenuEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function (item) {
16472
16553
  if (_this.tieredMenuService.currentItem) {
16473
16554
  if (_this.tieredMenuService.currentItem.parent === item) {
16474
16555
  return;
16475
16556
  }
16476
16557
  if (!_this.tieredMenuService.searchTheHierarchy(_this.tieredMenuService.currentItem.parent, item)) {
16477
- var itemAux = _this.tieredMenuService.currentItem;
16478
- while (itemAux.parent !== item.parent) {
16479
- _this._tieredMenuEventService.emitCloseItemMenuEvent(itemAux);
16480
- itemAux = itemAux.parent;
16558
+ var current = _this.tieredMenuService.currentItem;
16559
+ current.isOpen = false;
16560
+ while ((current === null || current === void 0 ? void 0 : current.parent) !== item.parent) {
16561
+ _this._tieredMenuEventService.closeItemMenuEvent.emit(current);
16562
+ _this._changeDetectorRef.detectChanges();
16563
+ current = current.parent;
16481
16564
  }
16482
- }
16483
- }
16484
- if (item.submenu) {
16485
- if (!item.isOpen) {
16486
- var _a = document
16487
- .querySelector("#" + item.id)
16488
- .getBoundingClientRect(), top_2 = _a.top, right = _a.right, left = _a.left, bottom = _a.bottom;
16489
- var position = { top: top_2, right: right, left: left, bottom: bottom };
16490
- if (_this.items.includes(item)) {
16491
- _this._createMenu(item.submenu, position);
16492
- _this.tieredMenuService.currentItems = item.submenu;
16493
- _this.tieredMenuService.currentItem = item.submenu[0];
16565
+ if (current) {
16566
+ current.isOpen = false;
16494
16567
  }
16495
16568
  }
16496
16569
  }
16570
+ if (item.submenu && !item.isOpen && _this.items.includes(item)) {
16571
+ var _a = document.querySelector("#" + item.id).getBoundingClientRect(), top_2 = _a.top, right = _a.right, left = _a.left, bottom = _a.bottom;
16572
+ var position = { top: top_2, right: right, left: left, bottom: bottom };
16573
+ _this._createMenu(item.submenu, position);
16574
+ _this.tieredMenuService.currentItems = item.submenu;
16575
+ _this.tieredMenuService.currentItem = item.submenu[0];
16576
+ item.isOpen = true;
16577
+ }
16497
16578
  });
16498
16579
  // Close item menu event.
16499
16580
  this._tieredMenuEventService.closeItemMenuEvent
16500
16581
  .pipe(operators.takeUntil(this._unsubscribe$))
16501
16582
  .subscribe(function (item) {
16502
16583
  var _a, _b;
16503
- if (_this.items.includes(item)) {
16504
- item.isOpen = false;
16584
+ if (_this.items.some(function (i) { return i.id === item.id; })) {
16585
+ if (item.parent) {
16586
+ item.parent.isOpen = false;
16587
+ }
16505
16588
  _this.tieredMenuService.currentItems = ((_b = (_a = item === null || item === void 0 ? void 0 : item.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.submenu) || _this.tieredMenuService.items;
16506
16589
  _this.tieredMenuService.currentItem = item.parent;
16507
16590
  _this.destroyRequest.emit(false);
@@ -16513,108 +16596,106 @@
16513
16596
  { type: core.ApplicationRef },
16514
16597
  { type: core.ComponentFactoryResolver },
16515
16598
  { type: core.Injector },
16599
+ { type: core.ChangeDetectorRef },
16516
16600
  { type: TieredMenuService },
16517
16601
  { type: TieredMenuEventService }
16518
16602
  ]; };
16519
16603
  __decorate([
16520
16604
  core.Output()
16521
16605
  ], TieredMenuComponent.prototype, "destroyRequest", void 0);
16606
+ __decorate([
16607
+ core.HostListener("window:resize")
16608
+ ], TieredMenuComponent.prototype, "onResize", null);
16609
+ __decorate([
16610
+ core.HostListener("document:click", ["$event"])
16611
+ ], TieredMenuComponent.prototype, "onDocumentClick", null);
16612
+ __decorate([
16613
+ core.HostListener("document:keydown", ["$event"])
16614
+ ], TieredMenuComponent.prototype, "onKeydownHandler", null);
16522
16615
  TieredMenuComponent = TieredMenuComponent_1 = __decorate([
16523
16616
  core.Component({
16524
16617
  selector: "s-tiered-menu",
16525
- template: "<div class=\"menu\" [ngStyle]=\"{\n 'left': left + 'px',\n 'top': top + 'px'\n }\">\n\n <div *ngFor=\"let item of items\">\n <s-tiered-menu-item\n *ngIf=\"!item.divider\"\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n triggerEvent=\"hover\"\n [closeOnClick]=\"false\">\n </s-tiered-menu-item>\n <s-tiered-menu-divider *ngIf=\"item.divider\"></s-tiered-menu-divider>\n </div>\n</div>",
16526
- styles: [".menu{background-color:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;min-width:176px;padding:4px 0;position:fixed;z-index:9999}"]
16618
+ template: "<div\n class=\"menu\"\n [ngStyle]=\"{\n 'left': left + 'px',\n 'top': top + 'px'\n }\">\n\n <div *ngFor=\"let item of items\">\n <s-tiered-menu-item\n *ngIf=\"!item.divider\"\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n [highlight]=\"item.isOpen\"\n triggerEvent=\"hover\"\n [closeOnClick]=\"false\">\n </s-tiered-menu-item>\n <s-tiered-menu-divider *ngIf=\"item.divider\"></s-tiered-menu-divider>\n </div>\n</div>",
16619
+ styles: [".menu{background-color:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;max-height:100vh;min-width:176px;padding:4px 0;overflow-y:auto;position:absolute;z-index:9999}"]
16527
16620
  })
16528
16621
  ], TieredMenuComponent);
16529
16622
  return TieredMenuComponent;
16530
16623
  }());
16531
16624
 
16625
+ var TieredMenuGlobalService = /** @class */ (function () {
16626
+ function TieredMenuGlobalService() {
16627
+ }
16628
+ TieredMenuGlobalService = __decorate([
16629
+ core.Injectable()
16630
+ ], TieredMenuGlobalService);
16631
+ return TieredMenuGlobalService;
16632
+ }());
16633
+
16532
16634
  var TieredMenuDirective = /** @class */ (function () {
16533
- function TieredMenuDirective(_elementRef, _appRef, _componentFactoryResolver, _injector, _tieredMenuEventService, _tieredMenuService) {
16635
+ function TieredMenuDirective(_elementRef, _appRef, _componentFactoryResolver, _injector, _tieredMenuEventService, _tieredMenuService, _tieredMenuGlobalService, _changeDetectorRef) {
16534
16636
  this._elementRef = _elementRef;
16535
16637
  this._appRef = _appRef;
16536
16638
  this._componentFactoryResolver = _componentFactoryResolver;
16537
16639
  this._injector = _injector;
16538
16640
  this._tieredMenuEventService = _tieredMenuEventService;
16539
16641
  this._tieredMenuService = _tieredMenuService;
16642
+ this._tieredMenuGlobalService = _tieredMenuGlobalService;
16643
+ this._changeDetectorRef = _changeDetectorRef;
16644
+ this.items = [];
16645
+ this.triggerEvent = "click";
16540
16646
  this._componentRef = null;
16541
16647
  this._isNested = false;
16542
16648
  this._isOpen = false;
16543
16649
  this._unsubscribe$ = new rxjs.Subject();
16544
- this.alwaysOpen = false;
16545
- this.triggerEvent = "click";
16546
16650
  }
16651
+ TieredMenuDirective.prototype.onClick = function (event) {
16652
+ var _a;
16653
+ if (this.triggerEvent === "click" && ((_a = this._tieredMenuService.items) === null || _a === void 0 ? void 0 : _a.length) > 0 && !this._isOpen) {
16654
+ this._lastActiveElement = document.activeElement;
16655
+ this._createMenu();
16656
+ event.preventDefault();
16657
+ event.stopPropagation();
16658
+ }
16659
+ };
16547
16660
  TieredMenuDirective.prototype.ngOnInit = function () {
16548
- this._tieredMenuService.items = this._tieredMenuService.normalizeData(this.items);
16549
- this._tieredMenuService.currentItems = this._tieredMenuService.items;
16550
- this._tieredMenuService.currentItem = this._tieredMenuService.items[0];
16661
+ this._updateServiceItems();
16551
16662
  this._subscribeEvents();
16552
16663
  };
16553
- TieredMenuDirective.prototype.ngAfterViewInit = function () {
16554
- var _this = this;
16555
- // setTimeout to create the menu after creating the elements.
16556
- if (this.alwaysOpen) {
16557
- setTimeout(function () {
16558
- _this._createMenu();
16559
- }, 0);
16664
+ TieredMenuDirective.prototype.ngDoCheck = function () {
16665
+ if (!this.previousItems) {
16666
+ this.previousItems = this._tieredMenuService.cloneItems(this.items);
16667
+ }
16668
+ ;
16669
+ var hasChanges = false;
16670
+ if (this.items.length !== this.previousItems.length) {
16671
+ hasChanges = true;
16560
16672
  }
16673
+ else {
16674
+ for (var i = 0; i < this.items.length; i++) {
16675
+ if (!this._compareItems(this.items[i], this.previousItems[i])) {
16676
+ hasChanges = true;
16677
+ break;
16678
+ }
16679
+ }
16680
+ }
16681
+ if (hasChanges) {
16682
+ this._updateServiceItems();
16683
+ this._changeDetectorRef.detectChanges();
16684
+ this._rebuildMenu();
16685
+ }
16686
+ this.previousItems = this._tieredMenuService.cloneItems(this.items);
16561
16687
  };
16562
16688
  TieredMenuDirective.prototype.ngOnDestroy = function () {
16563
16689
  this._unsubscribe$.next();
16564
16690
  this._unsubscribe$.complete();
16565
16691
  this._destroy();
16566
16692
  };
16567
- TieredMenuDirective.prototype.onResize = function () {
16568
- if (!this.alwaysOpen) {
16569
- this._tieredMenuEventService.emitCloseAllMenusEvent();
16570
- }
16571
- };
16572
- TieredMenuDirective.prototype.onKeydownHandler = function (event) {
16573
- if (!this._isOpen)
16574
- return;
16575
- switch (event.key) {
16576
- case "Escape":
16577
- this._tieredMenuEventService.emitCloseAllMenusEvent();
16578
- break;
16579
- case " ":
16580
- case "Enter":
16581
- this._tieredMenuEventService.emitSelectItemEvent(this._tieredMenuService.currentItem);
16582
- break;
16583
- case "ArrowLeft":
16584
- // When nested I need a reference to the current item's parent item, otherwise just the current item.
16585
- this._tieredMenuEventService.emitCloseItemMenuEvent(this._isNested ? this._tieredMenuService.currentItem.parent : this._tieredMenuService.currentItem);
16586
- break;
16587
- case "ArrowRight":
16588
- this._tieredMenuEventService.emitOpenItemMenuEvent(this._tieredMenuService.currentItem);
16589
- break;
16590
- case "ArrowUp":
16591
- this._tieredMenuEventService.emitDecrementCurrentItemEvent();
16592
- break;
16593
- case "ArrowDown":
16594
- this._tieredMenuEventService.emitIncrementCurrentItemEvent();
16595
- break;
16596
- }
16597
- };
16598
- TieredMenuDirective.prototype.onClick = function (event) {
16599
- if (this.triggerEvent === "click" && this.items && this.items && !this._isOpen) {
16600
- this._lastActiveElement = document.activeElement;
16601
- this._createMenu();
16602
- event.preventDefault();
16603
- event.stopPropagation();
16604
- }
16605
- };
16606
- TieredMenuDirective.prototype.onDocumentClick = function (event) {
16607
- // Closing menu when clicked outside.
16608
- var target = event.target;
16609
- var clickedInside = target.closest("s-tiered-menu-item") || target.closest("s-tiered-menu-divider");
16610
- if (!clickedInside) {
16611
- this._tieredMenuEventService.emitCloseAllMenusEvent();
16612
- }
16613
- };
16614
16693
  TieredMenuDirective.prototype._createMenu = function () {
16615
- var _a;
16616
- if (!this._componentRef && this.items) {
16617
- (_a = this._lastActiveElement) === null || _a === void 0 ? void 0 : _a.blur();
16694
+ var _a, _b, _c;
16695
+ if (!this._componentRef && ((_a = this._tieredMenuService.items) === null || _a === void 0 ? void 0 : _a.length) > 0) {
16696
+ (_b = this._tieredMenuGlobalService.lastInstance) === null || _b === void 0 ? void 0 : _b._destroy();
16697
+ this._tieredMenuGlobalService.lastInstance = this;
16698
+ (_c = this._lastActiveElement) === null || _c === void 0 ? void 0 : _c.blur();
16618
16699
  this._isOpen = true;
16619
16700
  this._isNested = document.body.clientWidth < 600;
16620
16701
  this._isNested ? this._createNestedMenu() : this._createTieredMenu();
@@ -16622,145 +16703,176 @@
16622
16703
  };
16623
16704
  TieredMenuDirective.prototype._createTieredMenu = function () {
16624
16705
  var _this = this;
16625
- if (!this._componentRef && this.items) {
16706
+ var _a;
16707
+ if (!this._componentRef && ((_a = this._tieredMenuService.items) === null || _a === void 0 ? void 0 : _a.length) > 0) {
16626
16708
  var componentFactory = this._componentFactoryResolver.resolveComponentFactory(TieredMenuComponent);
16627
16709
  this._componentRef = componentFactory.create(this._injector);
16628
16710
  this._appRef.attachView(this._componentRef.hostView);
16629
16711
  var domElem = this._componentRef.hostView.rootNodes[0];
16630
16712
  document.body.appendChild(domElem);
16631
16713
  this._setMenuComponentProperties();
16632
- this._componentRef.instance.destroyRequest
16633
- .pipe(operators.takeUntil(this._unsubscribe$))
16634
- .subscribe(function () {
16714
+ this._componentRef.instance.destroyRequest.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function () {
16635
16715
  _this._destroy();
16636
16716
  });
16637
- this._menuDivElement = domElem.querySelector(".menu");
16638
16717
  this._setMenuPosition();
16639
16718
  }
16640
16719
  };
16641
16720
  TieredMenuDirective.prototype._createNestedMenu = function () {
16642
- if (!this._componentRef && this.items) {
16721
+ var _a;
16722
+ if (!this._componentRef && ((_a = this._tieredMenuService.items) === null || _a === void 0 ? void 0 : _a.length) > 0) {
16643
16723
  var componentFactory = this._componentFactoryResolver.resolveComponentFactory(TieredMenuNestedComponent);
16644
16724
  this._componentRef = componentFactory.create(this._injector);
16645
16725
  this._appRef.attachView(this._componentRef.hostView);
16646
16726
  var domElem = this._componentRef.hostView.rootNodes[0];
16647
16727
  document.body.appendChild(domElem);
16648
16728
  this._setMenuComponentProperties();
16649
- this._menuDivElement = domElem.querySelector(".menu");
16650
16729
  this._setMenuPosition();
16651
16730
  }
16652
16731
  };
16653
16732
  TieredMenuDirective.prototype._destroy = function () {
16654
- var _a;
16655
- if (this._componentRef !== null && !this.alwaysOpen) {
16733
+ if (this._componentRef) {
16656
16734
  this._isOpen = false;
16657
16735
  window.clearTimeout(this._showTimeout);
16658
16736
  this._appRef.detachView(this._componentRef.hostView);
16659
16737
  this._componentRef.destroy();
16660
16738
  this._componentRef = null;
16661
- this._menuDivElement = null;
16662
- (_a = this._lastActiveElement) === null || _a === void 0 ? void 0 : _a.focus();
16663
16739
  this._tieredMenuService.currentItems = this._tieredMenuService.items;
16664
16740
  this._tieredMenuService.currentItem = this._tieredMenuService.items[0];
16741
+ this._tieredMenuEventService.closeAllMenusEvent.emit();
16665
16742
  }
16666
16743
  };
16667
16744
  TieredMenuDirective.prototype._setMenuPosition = function () {
16745
+ var _a, _b;
16746
+ var ITEM_HEIGHT = 37;
16747
+ var ITEM_WIDTH = 176;
16748
+ var DIVIDER_HEIGHT = 5;
16749
+ var PADDING = 8;
16750
+ var MARGIN = 4;
16668
16751
  if (this._componentRef !== null) {
16669
- var _a = this._elementRef.nativeElement.getBoundingClientRect(), right = _a.right, bottom = _a.bottom, left = _a.left;
16670
- var menuWidth = this._menuDivElement.getBoundingClientRect().width;
16671
- var rightFreeSpace = document.body.clientWidth - right;
16672
- var topPosition = bottom + 2;
16673
- this._componentRef.instance.top = topPosition;
16674
- if (!this._isNested) {
16675
- if (rightFreeSpace > menuWidth) {
16676
- this._componentRef.instance.left = left;
16677
- }
16678
- else {
16679
- this._componentRef.instance.left = left - menuWidth;
16680
- }
16752
+ this._componentRef.instance.top = 8;
16753
+ var _c = this._elementRef.nativeElement.getBoundingClientRect(), bottom = _c.bottom, left = _c.left, right = _c.right;
16754
+ var itemsCount = (_a = this._componentRef.instance.items) === null || _a === void 0 ? void 0 : _a.reduce(function (count, item) {
16755
+ return !item.divider ? count + 1 : count;
16756
+ }, 0);
16757
+ var dividersCount = (_b = this._componentRef.instance.items) === null || _b === void 0 ? void 0 : _b.reduce(function (count, item) {
16758
+ return item.divider ? count + 1 : count;
16759
+ }, 0);
16760
+ var menuHeight = itemsCount * ITEM_HEIGHT + dividersCount * DIVIDER_HEIGHT + PADDING + MARGIN;
16761
+ var rightFreeSpace = window.innerWidth - right;
16762
+ var bottomFreeSpace = window.innerHeight - bottom;
16763
+ this._componentRef.instance.top = bottom;
16764
+ this._componentRef.instance.left = left;
16765
+ if (bottomFreeSpace <= menuHeight) {
16766
+ this._componentRef.instance.top = Math.max(bottom - menuHeight, 0);
16681
16767
  }
16682
16768
  else {
16683
- // setting the maximum menu size to ensure its content is always visible. 10px margin.
16684
- this._componentRef.instance.maxHeight = window.innerHeight - topPosition - 10;
16769
+ this._componentRef.instance.top = bottom + MARGIN;
16770
+ }
16771
+ if (rightFreeSpace > 176) {
16772
+ this._componentRef.instance.left = left;
16773
+ }
16774
+ else {
16775
+ this._componentRef.instance.left = right - ITEM_WIDTH;
16776
+ }
16777
+ if (this._isNested) {
16778
+ this._componentRef.instance.left = MARGIN;
16685
16779
  }
16686
16780
  }
16687
16781
  };
16688
16782
  TieredMenuDirective.prototype._setMenuComponentProperties = function () {
16689
16783
  if (this._componentRef != null) {
16690
- this._componentRef.instance.items = this.items;
16784
+ this._componentRef.instance.items = this._tieredMenuService.items;
16691
16785
  }
16692
16786
  };
16693
16787
  TieredMenuDirective.prototype._subscribeEvents = function () {
16694
16788
  var _this = this;
16695
- this._tieredMenuEventService.closeAllMenusEvent
16696
- .pipe(operators.takeUntil(this._unsubscribe$))
16697
- .subscribe(function () {
16698
- _this.items = _this._tieredMenuService.markAllItemsAsClosed(_this.items);
16789
+ this._tieredMenuEventService.closeAllMenusEvent.pipe(operators.takeUntil(this._unsubscribe$)).subscribe(function () {
16790
+ _this._tieredMenuService.items = _this._tieredMenuService.markAllItemsAsClosed(_this._tieredMenuService.items);
16699
16791
  _this._destroy();
16700
16792
  });
16701
16793
  };
16794
+ TieredMenuDirective.prototype._compareItems = function (item1, item2) {
16795
+ return JSON.stringify(item1) === JSON.stringify(item2);
16796
+ };
16797
+ TieredMenuDirective.prototype._rebuildMenu = function () {
16798
+ this._destroy();
16799
+ };
16800
+ TieredMenuDirective.prototype._updateServiceItems = function () {
16801
+ this._tieredMenuService.items = this._tieredMenuService.normalizeData(this.items);
16802
+ this._tieredMenuService.currentItems = this._tieredMenuService.items;
16803
+ this._tieredMenuService.currentItem = this._tieredMenuService.items[0];
16804
+ };
16702
16805
  TieredMenuDirective.ctorParameters = function () { return [
16703
16806
  { type: core.ElementRef },
16704
16807
  { type: core.ApplicationRef },
16705
16808
  { type: core.ComponentFactoryResolver },
16706
16809
  { type: core.Injector },
16707
16810
  { type: TieredMenuEventService },
16708
- { type: TieredMenuService }
16811
+ { type: TieredMenuService },
16812
+ { type: TieredMenuGlobalService },
16813
+ { type: core.ChangeDetectorRef }
16709
16814
  ]; };
16710
16815
  __decorate([
16711
16816
  core.Input()
16712
16817
  ], TieredMenuDirective.prototype, "items", void 0);
16713
- __decorate([
16714
- core.Input()
16715
- ], TieredMenuDirective.prototype, "alwaysOpen", void 0);
16716
16818
  __decorate([
16717
16819
  core.Input()
16718
16820
  ], TieredMenuDirective.prototype, "triggerEvent", void 0);
16719
- __decorate([
16720
- core.HostListener("window:resize")
16721
- ], TieredMenuDirective.prototype, "onResize", null);
16722
- __decorate([
16723
- core.HostListener("document:keydown", ["$event"])
16724
- ], TieredMenuDirective.prototype, "onKeydownHandler", null);
16725
16821
  __decorate([
16726
16822
  core.HostListener("click", ["$event"])
16727
16823
  ], TieredMenuDirective.prototype, "onClick", null);
16728
- __decorate([
16729
- core.HostListener("document:click", ["$event"])
16730
- ], TieredMenuDirective.prototype, "onDocumentClick", null);
16731
16824
  TieredMenuDirective = __decorate([
16732
16825
  core.Directive({
16733
16826
  selector: "[sTieredMenu]",
16827
+ providers: [TieredMenuEventService, TieredMenuService],
16734
16828
  })
16735
16829
  ], TieredMenuDirective);
16736
16830
  return TieredMenuDirective;
16737
16831
  }());
16738
16832
 
16833
+ var TieredMenuDividerComponent = /** @class */ (function () {
16834
+ function TieredMenuDividerComponent() {
16835
+ }
16836
+ TieredMenuDividerComponent = __decorate([
16837
+ core.Component({
16838
+ selector: "s-tiered-menu-divider",
16839
+ template: "<div class=\"divider\"></div>",
16840
+ styles: [".divider{margin:2px 0;height:1px;background-color:#ccc}"]
16841
+ })
16842
+ ], TieredMenuDividerComponent);
16843
+ return TieredMenuDividerComponent;
16844
+ }());
16845
+
16739
16846
  var TieredMenuItemComponent = /** @class */ (function () {
16740
16847
  function TieredMenuItemComponent(_tieredMenuEventService) {
16741
16848
  this._tieredMenuEventService = _tieredMenuEventService;
16742
16849
  this.focused = false;
16850
+ this.highlight = false;
16743
16851
  this.triggerEvent = "click";
16744
16852
  this.closeOnClick = false;
16745
16853
  }
16746
16854
  TieredMenuItemComponent.prototype.onClick = function () {
16855
+ if (this.item.disabled)
16856
+ return;
16747
16857
  if (this.item.submenu) {
16748
16858
  if (!this.item.isOpen) {
16749
- this._tieredMenuEventService.emitOpenItemMenuEvent(this.item);
16859
+ this._tieredMenuEventService.openItemMenuEvent.emit(this.item);
16750
16860
  }
16751
16861
  else if (this.closeOnClick) {
16752
- this._tieredMenuEventService.emitCloseItemMenuEvent(this.item);
16862
+ this._tieredMenuEventService.closeItemMenuEvent.emit(this.item);
16753
16863
  }
16754
16864
  }
16755
16865
  else {
16756
- this._tieredMenuEventService.emitSelectItemEvent(this.item);
16866
+ this._tieredMenuEventService.selectItemEvent.emit(this.item);
16757
16867
  }
16758
16868
  };
16759
16869
  TieredMenuItemComponent.prototype.onMouseEnter = function () {
16760
16870
  var _this = this;
16871
+ if (this.item.disabled)
16872
+ return;
16761
16873
  if (this.triggerEvent === "hover" && !this.item.isOpen) {
16762
16874
  this._showTimeout = window.setTimeout(function () {
16763
- _this._tieredMenuEventService.emitOpenItemMenuEvent(_this.item);
16875
+ _this._tieredMenuEventService.openItemMenuEvent.emit(_this.item);
16764
16876
  }, 300);
16765
16877
  }
16766
16878
  };
@@ -16776,6 +16888,9 @@
16776
16888
  __decorate([
16777
16889
  core.Input()
16778
16890
  ], TieredMenuItemComponent.prototype, "focused", void 0);
16891
+ __decorate([
16892
+ core.Input()
16893
+ ], TieredMenuItemComponent.prototype, "highlight", void 0);
16779
16894
  __decorate([
16780
16895
  core.Input()
16781
16896
  ], TieredMenuItemComponent.prototype, "triggerEvent", void 0);
@@ -16795,26 +16910,13 @@
16795
16910
  TieredMenuItemComponent = __decorate([
16796
16911
  core.Component({
16797
16912
  selector: "s-tiered-menu-item",
16798
- template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused\n }\">\n <div class=\"tiered-menu-item-content\">\n <span class=\"icon\" [ngClass]=\"item.iconClass\"></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n <span\n *ngIf=\"item.submenu\"\n class=\"submenu-icon\"\n [ngClass]=\"{\n 'fas': true,\n 'fa-chevron-left': item.isOpen,\n 'fa-chevron-right': !item.isOpen\n }\">\n </span>\n</div>",
16799
- styles: [".tiered-menu-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important}.tiered-menu-item--open{background-color:#e4e2e2}"]
16913
+ template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused,\n 'tiered-menu-item--disabled': item.disabled\n }\">\n <div class=\"tiered-menu-item-content\">\n <span class=\"icon\" [ngClass]=\"item.iconClass\"></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n <span\n *ngIf=\"item.submenu\"\n class=\"submenu-icon\"\n [ngClass]=\"{\n 'fas': true,\n 'fa-chevron-left': item.isOpen,\n 'fa-chevron-right': !item.isOpen\n }\">\n </span>\n</div>",
16914
+ styles: [".tiered-menu-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important}.tiered-menu-item--open{background-color:#e4e2e2}.tiered-menu-item--disabled{opacity:50%;cursor:default}"]
16800
16915
  })
16801
16916
  ], TieredMenuItemComponent);
16802
16917
  return TieredMenuItemComponent;
16803
16918
  }());
16804
16919
 
16805
- var TieredMenuDividerComponent = /** @class */ (function () {
16806
- function TieredMenuDividerComponent() {
16807
- }
16808
- TieredMenuDividerComponent = __decorate([
16809
- core.Component({
16810
- selector: "s-tiered-menu-divider",
16811
- template: "<div class=\"divider\"></div>",
16812
- styles: [".divider{margin:2px 0;height:1px;background-color:#ccc}"]
16813
- })
16814
- ], TieredMenuDividerComponent);
16815
- return TieredMenuDividerComponent;
16816
- }());
16817
-
16818
16920
  var TieredMenuModule = /** @class */ (function () {
16819
16921
  function TieredMenuModule() {
16820
16922
  }
@@ -16831,10 +16933,7 @@
16831
16933
  TieredMenuDividerComponent,
16832
16934
  ],
16833
16935
  exports: [TieredMenuDirective],
16834
- providers: [
16835
- TieredMenuEventService,
16836
- TieredMenuService,
16837
- ],
16936
+ providers: [TieredMenuGlobalService],
16838
16937
  })
16839
16938
  ], TieredMenuModule);
16840
16939
  return TieredMenuModule;
@@ -18006,20 +18105,21 @@
18006
18105
  exports.ɵcz = TieredMenuEventService;
18007
18106
  exports.ɵd = TemplateModule;
18008
18107
  exports.ɵda = TieredMenuService;
18009
- exports.ɵdb = TieredMenuComponent;
18010
- exports.ɵdc = TieredMenuNestedComponent;
18011
- exports.ɵdd = TieredMenuItemComponent;
18012
- exports.ɵde = TieredMenuDividerComponent;
18013
- exports.ɵdf = TimelineItemModule;
18014
- exports.ɵdg = TimelineIconItemComponent;
18015
- exports.ɵdh = HorizontalTimelineModule;
18016
- exports.ɵdi = HorizontalTimelineComponent;
18017
- exports.ɵdj = VerticalTimelineModule;
18018
- exports.ɵdk = VerticalTimelineComponent;
18019
- exports.ɵdl = RangeLineComponent;
18020
- exports.ɵdm = CollapseOptionComponent;
18021
- exports.ɵdn = CollapsedItemsComponent;
18022
- exports.ɵdo = VerticalItemsComponent;
18108
+ exports.ɵdb = TieredMenuGlobalService;
18109
+ exports.ɵdc = TieredMenuComponent;
18110
+ exports.ɵdd = TieredMenuNestedComponent;
18111
+ exports.ɵde = TieredMenuItemComponent;
18112
+ exports.ɵdf = TieredMenuDividerComponent;
18113
+ exports.ɵdg = TimelineItemModule;
18114
+ exports.ɵdh = TimelineIconItemComponent;
18115
+ exports.ɵdi = HorizontalTimelineModule;
18116
+ exports.ɵdj = HorizontalTimelineComponent;
18117
+ exports.ɵdk = VerticalTimelineModule;
18118
+ exports.ɵdl = VerticalTimelineComponent;
18119
+ exports.ɵdm = RangeLineComponent;
18120
+ exports.ɵdn = CollapseOptionComponent;
18121
+ exports.ɵdo = CollapsedItemsComponent;
18122
+ exports.ɵdp = VerticalItemsComponent;
18023
18123
  exports.ɵe = CustomTranslationsModule;
18024
18124
  exports.ɵf = CodeEditorComponent;
18025
18125
  exports.ɵg = CoreFacade;