@gipisistemas/ng-core 1.1.4 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/bundles/gipisistemas-ng-core.umd.js +598 -165
  2. package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
  3. package/bundles/gipisistemas-ng-core.umd.min.js +9 -9
  4. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
  5. package/core/guards/auth.guard.d.ts +3 -3
  6. package/core/guards/permission.guard.d.ts +3 -3
  7. package/core/guards/public.guard.d.ts +3 -3
  8. package/core/models/dto/confirmation.dto.d.ts +1 -1
  9. package/core/models/dto/dialog.dto.d.ts +4 -4
  10. package/core/models/dto/menu.dto.d.ts +1 -0
  11. package/core/services/dialog.service.d.ts +5 -1
  12. package/core/services/message.service.d.ts +1 -1
  13. package/core/services/nav.service.d.ts +1 -1
  14. package/core/services/svg-register.service.d.ts +7 -1
  15. package/core/utils/string.util.d.ts +4 -0
  16. package/esm2015/core/gipi-components/services/file.service.js +2 -4
  17. package/esm2015/core/guards/auth.guard.js +13 -14
  18. package/esm2015/core/guards/permission.guard.js +12 -13
  19. package/esm2015/core/guards/public.guard.js +12 -13
  20. package/esm2015/core/models/dto/confirmation.dto.js +1 -5
  21. package/esm2015/core/models/dto/dialog.dto.js +1 -1
  22. package/esm2015/core/models/dto/menu.dto.js +2 -1
  23. package/esm2015/core/services/authentication.service.js +5 -6
  24. package/esm2015/core/services/breakpoint-observer.service.js +2 -4
  25. package/esm2015/core/services/confirmation.service.js +2 -4
  26. package/esm2015/core/services/dialog.service.js +54 -14
  27. package/esm2015/core/services/message.service.js +3 -5
  28. package/esm2015/core/services/nav.service.js +2 -4
  29. package/esm2015/core/services/svg-register.service.js +16 -5
  30. package/esm2015/core/utils/string.util.js +27 -1
  31. package/esm2015/gipi-components.js +2 -1
  32. package/esm2015/shared/components/input/input.component.js +1 -1
  33. package/esm2015/shared/components/input-currency/input-currency.component.js +1 -1
  34. package/esm2015/shared/components/input-file/input-file.component.js +1 -1
  35. package/esm2015/shared/components/popover/popover.service.js +6 -7
  36. package/esm2015/shared/components/radio-group-entity/radio-group-entity.component.js +1 -1
  37. package/esm2015/shared/components/radio-group-enum/radio-group-enum.component.js +1 -1
  38. package/esm2015/shared/components/select-entity/select-entity.component.js +1 -1
  39. package/esm2015/shared/components/select-entity-paged/select-entity-paged.component.js +1 -1
  40. package/esm2015/shared/components/select-entity-paged/shared/select-search/select-search.component.js +2 -2
  41. package/esm2015/shared/components/select-enum/select-enum.component.js +1 -1
  42. package/esm2015/shared/components/select-month-period/select-month-period.component.js +1 -1
  43. package/esm2015/shared/components/textarea/textarea.component.js +1 -1
  44. package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +65 -3
  45. package/esm2015/shared/gipi-components/button/button.component.js +18 -2
  46. package/esm2015/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +3 -3
  47. package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  48. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +1 -1
  49. package/esm2015/shared/gipi-components/form-field/form-field.component.js +1 -1
  50. package/esm2015/shared/gipi-components/input-checkbox/input-checkbox.component.js +1 -1
  51. package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  52. package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  53. package/esm2015/shared/gipi-components/input-select/input-select.component.js +1 -1
  54. package/esm2015/shared/gipi-components/input-select-enum/input-select-enum.component.js +1 -1
  55. package/esm2015/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +1 -1
  56. package/esm2015/shared/gipi-components/input-select-paged/input-search/input-search.component.js +2 -2
  57. package/esm2015/shared/gipi-components/input-select-paged/input-select-paged.component.js +1 -1
  58. package/esm2015/shared/gipi-components/input-select-radio/input-select-radio.component.js +1 -1
  59. package/esm2015/shared/gipi-components/layout-grid/services/breakpoint.service.js +2 -4
  60. package/esm2015/shared/gipi-components/layout-grid/services/resize.service.js +2 -4
  61. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +3 -3
  62. package/esm2015/shared/gipi-components/popover/shared/popover-trigger.js +4 -4
  63. package/esm2015/shared/gipi-components/select/select.component.js +1 -1
  64. package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +33 -10
  65. package/esm2015/shared/gipi-components/split-button/split-button.component.js +243 -0
  66. package/esm2015/shared/gipi-components/tabs/tab/tab.component.js +13 -1
  67. package/esm2015/shared/gipi-components/tabs/tab-group/tab-group.component.js +18 -4
  68. package/esm2015/shared/gipi-components/textarea/textarea.component.js +1 -1
  69. package/esm2015/shared/shared.module.js +3 -1
  70. package/esm5/core/gipi-components/services/file.service.js +2 -4
  71. package/esm5/core/guards/auth.guard.js +13 -14
  72. package/esm5/core/guards/permission.guard.js +12 -13
  73. package/esm5/core/guards/public.guard.js +12 -13
  74. package/esm5/core/models/dto/confirmation.dto.js +2 -4
  75. package/esm5/core/models/dto/dialog.dto.js +1 -1
  76. package/esm5/core/models/dto/menu.dto.js +2 -1
  77. package/esm5/core/services/authentication.service.js +5 -6
  78. package/esm5/core/services/breakpoint-observer.service.js +2 -4
  79. package/esm5/core/services/confirmation.service.js +2 -4
  80. package/esm5/core/services/dialog.service.js +54 -14
  81. package/esm5/core/services/message.service.js +3 -5
  82. package/esm5/core/services/nav.service.js +2 -4
  83. package/esm5/core/services/svg-register.service.js +16 -5
  84. package/esm5/core/utils/string.util.js +27 -1
  85. package/esm5/gipi-components.js +2 -1
  86. package/esm5/shared/components/input/input.component.js +1 -1
  87. package/esm5/shared/components/input-currency/input-currency.component.js +1 -1
  88. package/esm5/shared/components/input-file/input-file.component.js +1 -1
  89. package/esm5/shared/components/popover/popover.service.js +6 -7
  90. package/esm5/shared/components/radio-group-entity/radio-group-entity.component.js +1 -1
  91. package/esm5/shared/components/radio-group-enum/radio-group-enum.component.js +1 -1
  92. package/esm5/shared/components/select-entity/select-entity.component.js +1 -1
  93. package/esm5/shared/components/select-entity-paged/select-entity-paged.component.js +1 -1
  94. package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js +2 -2
  95. package/esm5/shared/components/select-enum/select-enum.component.js +1 -1
  96. package/esm5/shared/components/select-month-period/select-month-period.component.js +1 -1
  97. package/esm5/shared/components/textarea/textarea.component.js +1 -1
  98. package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +66 -3
  99. package/esm5/shared/gipi-components/button/button.component.js +22 -2
  100. package/esm5/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +3 -3
  101. package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +1 -1
  102. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +1 -1
  103. package/esm5/shared/gipi-components/form-field/form-field.component.js +1 -1
  104. package/esm5/shared/gipi-components/input-checkbox/input-checkbox.component.js +1 -1
  105. package/esm5/shared/gipi-components/input-currency/input-currency.component.js +1 -1
  106. package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
  107. package/esm5/shared/gipi-components/input-select/input-select.component.js +1 -1
  108. package/esm5/shared/gipi-components/input-select-enum/input-select-enum.component.js +1 -1
  109. package/esm5/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +1 -1
  110. package/esm5/shared/gipi-components/input-select-paged/input-search/input-search.component.js +2 -2
  111. package/esm5/shared/gipi-components/input-select-paged/input-select-paged.component.js +1 -1
  112. package/esm5/shared/gipi-components/input-select-radio/input-select-radio.component.js +1 -1
  113. package/esm5/shared/gipi-components/layout-grid/services/breakpoint.service.js +2 -4
  114. package/esm5/shared/gipi-components/layout-grid/services/resize.service.js +2 -4
  115. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +3 -3
  116. package/esm5/shared/gipi-components/popover/shared/popover-trigger.js +4 -4
  117. package/esm5/shared/gipi-components/select/select.component.js +1 -1
  118. package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +38 -10
  119. package/esm5/shared/gipi-components/split-button/split-button.component.js +249 -0
  120. package/esm5/shared/gipi-components/tabs/tab/tab.component.js +13 -1
  121. package/esm5/shared/gipi-components/tabs/tab-group/tab-group.component.js +18 -4
  122. package/esm5/shared/gipi-components/textarea/textarea.component.js +1 -1
  123. package/esm5/shared/shared.module.js +3 -1
  124. package/fesm2015/gipisistemas-ng-core.js +581 -167
  125. package/fesm2015/gipisistemas-ng-core.js.map +1 -1
  126. package/fesm5/gipisistemas-ng-core.js +602 -170
  127. package/fesm5/gipisistemas-ng-core.js.map +1 -1
  128. package/gipi-components.d.ts +1 -0
  129. package/gipisistemas-ng-core.metadata.json +1 -1
  130. package/package.json +1 -1
  131. package/shared/components/popover/popover.service.d.ts +1 -1
  132. package/shared/gipi-components/abstract-form/abstract-form.component.d.ts +10 -2
  133. package/shared/gipi-components/button/button.component.d.ts +14 -0
  134. package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +5 -2
  135. package/shared/gipi-components/split-button/split-button.component.d.ts +60 -0
  136. package/shared/gipi-components/tabs/tab/tab.component.d.ts +3 -0
  137. package/shared/gipi-components/tabs/tab-group/tab-group.component.d.ts +3 -0
@@ -20,7 +20,7 @@ let GIPISidenavComponent = GIPISidenavComponent_1 = class GIPISidenavComponent {
20
20
  this._levelOneMenuCollapsableSelected = null;
21
21
  this._levelTwoMenuCollapsableSelected = null;
22
22
  this._mouseEnter = false;
23
- this.menuItems = [];
23
+ this._menuItems = [];
24
24
  this.labelToggle = 'Retrair menu';
25
25
  this.showTagNewIntegration = false;
26
26
  this.showIntegration = false;
@@ -29,6 +29,12 @@ let GIPISidenavComponent = GIPISidenavComponent_1 = class GIPISidenavComponent {
29
29
  this.onClickMenuIntegration = new EventEmitter();
30
30
  this.onClickMenuConfiguration = new EventEmitter();
31
31
  }
32
+ get menuItems() {
33
+ return this._menuItems;
34
+ }
35
+ set menuItems(value) {
36
+ this._menuItems = value;
37
+ }
32
38
  ngOnInit() { }
33
39
  ngAfterViewInit() {
34
40
  this._navService.sidenav = this.sidenav;
@@ -51,16 +57,21 @@ let GIPISidenavComponent = GIPISidenavComponent_1 = class GIPISidenavComponent {
51
57
  return of(`${this._levelOneMenuCollapsableSelected.name} / ${this._levelTwoMenuCollapsableSelected.name}`);
52
58
  }
53
59
  }
54
- get levelMenuCollapsableSelected() {
60
+ get levelMenuSelected() {
61
+ let levelMenuActive = [];
55
62
  if (ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {
56
- return of(this.menuItems);
63
+ levelMenuActive = this.menuItems;
57
64
  }
58
65
  else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {
59
- return of(this._levelOneMenuCollapsableSelected.menuList);
66
+ levelMenuActive = this._levelOneMenuCollapsableSelected.menuList;
60
67
  }
61
68
  else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && !ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {
62
- return of(this._levelTwoMenuCollapsableSelected.menuList);
69
+ levelMenuActive = this._levelTwoMenuCollapsableSelected.menuList;
70
+ }
71
+ if (!ArrayUtil.isEmpty(levelMenuActive)) {
72
+ levelMenuActive.forEach(item => item.id = this._toCamelCase(item.route));
63
73
  }
74
+ return of(levelMenuActive);
64
75
  }
65
76
  toggleSidenav() {
66
77
  this._levelOneMenuCollapsableSelected = null;
@@ -173,6 +184,17 @@ let GIPISidenavComponent = GIPISidenavComponent_1 = class GIPISidenavComponent {
173
184
  }
174
185
  });
175
186
  }
187
+ _toCamelCase(name) {
188
+ if (StringUtil.isEmpty(name)) {
189
+ return '';
190
+ }
191
+ const normalized = StringUtil.replaceAccents(name);
192
+ return normalized
193
+ .split(/[/\-]/) // Divide por '/' e '-'
194
+ .filter(Boolean) // Remove elementos vazios da lista
195
+ .map((word, index) => (index === 0) ? word.toLowerCase() : (word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()))
196
+ .join('');
197
+ }
176
198
  };
177
199
  GIPISidenavComponent.ctorParameters = () => [
178
200
  { type: NavService },
@@ -185,8 +207,9 @@ __decorate([
185
207
  ], GIPISidenavComponent.prototype, "sidenav", void 0);
186
208
  __decorate([
187
209
  Input(),
188
- __metadata("design:type", Array)
189
- ], GIPISidenavComponent.prototype, "menuItems", void 0);
210
+ __metadata("design:type", Array),
211
+ __metadata("design:paramtypes", [Array])
212
+ ], GIPISidenavComponent.prototype, "menuItems", null);
190
213
  __decorate([
191
214
  Input(),
192
215
  __metadata("design:type", String)
@@ -243,7 +266,7 @@ GIPISidenavComponent = GIPISidenavComponent_1 = __decorate([
243
266
  Component({
244
267
  selector: `gipi-sidenav`,
245
268
  exportAs: 'gipiSidenav',
246
- template: "<mat-sidenav #sidenav\n [mode]=\"(isScreenLarge | async) ? 'side' : 'over'\"\n class=\"sidenav\"\n [class.large-sidenav]=\"(isOpened | async)\"\n [class.small-sidenav]=\"!(isOpened | async)\"\n [disableClose]=\"(isScreenLarge | async)\"\n opened=\"true\">\n\n <div [ngClass]=\"{'sidenav-content-menu': true,\n 'show-bottom': (showConfiguration || showIntegration)}\">\n\n <!-- Bot\u00E3o expandir e retrair o menu -->\n <button id=\"buttonToogleSidenav\"\n name=\"toggleSidenav\"\n class=\"toggle-sidenav\"\n (click)=\"toggleSidenav(); _mouseEnter = false;\">\n <mat-icon [@indicatorRotate]=\"(isOpened | async) ? 'opened': 'closed'\">\n chevron_right\n </mat-icon>\n\n {{ ((labelToggle) && (isOpened | async)) ? labelToggle : '' }}\n </button>\n\n <!-- Bot\u00E3o voltar do submenu -->\n <div class=\"sidenav-action-menu sidenav-menu-collapsable\">\n <a *ngIf=\"(isOpened | async) && (_levelOneMenuCollapsableSelected || _levelTwoMenuCollapsableSelected)\"\n (click)=\"onMenuCollapsableGoBack()\"\n (mouseenter)=\"!_mouseEnter && onMouseEnter()\"\n (mouseleave)=\"_mouseEnter && onMouseLeave()\">\n <mat-icon>\n arrow_back\n </mat-icon>\n <span>\n {{ (submenuBackButtonName | async) }}\n </span>\n </a>\n </div>\n\n <!-- Se o menu item for do tipo submenu -->\n <mat-nav-list class=\"sidenav-menu-list\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <div *ngFor=\"let menu of (levelMenuCollapsableSelected | async)\"\n class=\"sidenav-action-menu\">\n\n <a *ngIf=\"menu.type === 'ITEM'\"\n [routerLink]=\"menu.route\"\n [class.menu-active]=\"isMenuActive(menu)\"\n (click)=\"onMenuItemSelected(menu)\">\n <mat-icon *ngIf=\"menu.icon\">\n {{ menu.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"menu.svgIcon\"\n [svgIcon]=\"menu.svgIcon\">\n </mat-icon>\n <span *ngIf=\"(isOpened | async)\">\n {{ getMenuName(menu.name) }}\n </span>\n </a>\n\n <a *ngIf=\"menu.type === 'COLLAPSABLE'\"\n [class.menu-active]=\"isMenuCollapsableActive(menu)\"\n (click)=\"onMenuCollapsableSelected(menu); onMenuItemSelected(menu, false)\">\n <mat-icon *ngIf=\"menu.icon\">\n {{ menu.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"menu.svgIcon\"\n [svgIcon]=\"menu.svgIcon\">\n </mat-icon>\n <span *ngIf=\"(isOpened | async)\">\n {{ getMenuName(menu.name) }}\n </span>\n <mat-icon *ngIf=\"(isOpened | async)\">\n chevron_right\n </mat-icon>\n </a>\n\n </div>\n </mat-nav-list>\n </div>\n\n <div class=\"sidenav-action-menu sidenav-bottom-menu\">\n <a *ngIf=\"showIntegration\"\n (click)=\"onMenuItemSelected(null); onClickMenuIntegration.emit()\">\n <mat-icon *ngIf=\"iconIntegration\">\n {{ iconIntegration }}\n </mat-icon>\n <mat-icon *ngIf=\"svgIconIntegration\"\n [svgIcon]=\"svgIconIntegration\">\n </mat-icon>\n <span *ngIf=\"(labelIntegration) && (isOpened | async)\">\n {{ labelIntegration }}\n </span>\n <div class=\"tag-new\"\n *ngIf=\"showTagNewIntegration\">\n Novo\n </div>\n </a>\n\n <a *ngIf=\"showConfiguration\"\n (click)=\"onMenuItemSelected(null); onClickMenuConfiguration.emit()\">\n <mat-icon *ngIf=\"iconConfiguration\">\n {{ iconConfiguration }}\n </mat-icon>\n <mat-icon *ngIf=\"svgIconConfiguration\"\n [svgIcon]=\"svgIconConfiguration\">\n </mat-icon>\n <span *ngIf=\"(labelConfiguration) && (isOpened | async)\">\n {{ labelConfiguration }}\n </span>\n </a>\n </div>\n</mat-sidenav>\n",
269
+ template: "<mat-sidenav #sidenav\n class=\"sidenav\"\n opened=\"true\"\n [class.large-sidenav]=\"(isOpened | async)\"\n [class.small-sidenav]=\"!(isOpened | async)\"\n [disableClose]=\"(isScreenLarge | async)\"\n [mode]=\"(isScreenLarge | async) ? 'side' : 'over'\">\n\n <div [ngClass]=\"{'sidenav-content-menu': true,\n 'show-bottom': (showConfiguration || showIntegration)}\">\n\n <!-- Bot\u00E3o expandir e retrair o menu -->\n <button [attr.id]=\"'buttonToogleSidenav'\"\n [attr.name]=\"'buttonToogleSidenav'\"\n class=\"toggle-sidenav\"\n (click)=\"toggleSidenav(); _mouseEnter = false;\">\n <mat-icon [@indicatorRotate]=\"(isOpened | async) ? 'opened': 'closed'\">\n chevron_right\n </mat-icon>\n\n {{ ((labelToggle) && (isOpened | async)) ? labelToggle : '' }}\n </button>\n\n <!-- Bot\u00E3o voltar do submenu -->\n <div class=\"sidenav-action-menu sidenav-menu-collapsable\">\n <a [attr.id]=\"'buttonSubmenuBack'\"\n [attr.name]=\"'buttonSubmenuBack'\"\n *ngIf=\"(isOpened | async) && (_levelOneMenuCollapsableSelected || _levelTwoMenuCollapsableSelected)\"\n (click)=\"onMenuCollapsableGoBack()\"\n (mouseenter)=\"!_mouseEnter && onMouseEnter()\"\n (mouseleave)=\"_mouseEnter && onMouseLeave()\">\n <mat-icon>\n arrow_back\n </mat-icon>\n <span>\n {{ (submenuBackButtonName | async) }}\n </span>\n </a>\n </div>\n\n <!-- Se o menu item for do tipo submenu -->\n <mat-nav-list class=\"sidenav-menu-list\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <div class=\"sidenav-action-menu\"\n *ngFor=\"let menu of (levelMenuSelected | async)\">\n <a [attr.id]=\"menu.id\"\n [attr.name]=\"menu.id\"\n [class.menu-active]=\"isMenuActive(menu)\"\n [routerLink]=\"menu.route\"\n *ngIf=\"menu.type === 'ITEM'\"\n (click)=\"onMenuItemSelected(menu)\">\n <mat-icon *ngIf=\"menu.icon\">\n {{ menu.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"menu.svgIcon\"\n [svgIcon]=\"menu.svgIcon\">\n </mat-icon>\n <span *ngIf=\"(isOpened | async)\">\n {{ getMenuName(menu.name) }}\n </span>\n </a>\n\n <a [attr.id]=\"menu.id\"\n [attr.name]=\"menu.id\"\n [class.menu-active]=\"isMenuCollapsableActive(menu)\"\n *ngIf=\"menu.type === 'COLLAPSABLE'\"\n (click)=\"onMenuCollapsableSelected(menu); onMenuItemSelected(menu, false)\">\n <mat-icon *ngIf=\"menu.icon\">\n {{ menu.icon }}\n </mat-icon>\n <mat-icon *ngIf=\"menu.svgIcon\"\n [svgIcon]=\"menu.svgIcon\">\n </mat-icon>\n <span *ngIf=\"(isOpened | async)\">\n {{ getMenuName(menu.name) }}\n </span>\n <mat-icon *ngIf=\"(isOpened | async)\">\n chevron_right\n </mat-icon>\n </a>\n </div>\n </mat-nav-list>\n </div>\n\n <div class=\"sidenav-action-menu sidenav-bottom-menu\">\n <a [attr.id]=\"'integracoes'\"\n [attr.name]=\"'integracoes'\"\n *ngIf=\"showIntegration\"\n (click)=\"onMenuItemSelected(null); onClickMenuIntegration.emit()\">\n <mat-icon *ngIf=\"iconIntegration\">\n {{ iconIntegration }}\n </mat-icon>\n <mat-icon *ngIf=\"svgIconIntegration\"\n [svgIcon]=\"svgIconIntegration\">\n </mat-icon>\n <span *ngIf=\"(labelIntegration) && (isOpened | async)\">\n {{ labelIntegration }}\n </span>\n <div class=\"tag-new\"\n [class.closed]=\"!(isOpened | async)\"\n *ngIf=\"showTagNewIntegration\">\n Novo\n </div>\n </a>\n\n <a [attr.id]=\"'configuracoes'\"\n [attr.name]=\"'configuracoes'\"\n *ngIf=\"showConfiguration\"\n (click)=\"onMenuItemSelected(null); onClickMenuConfiguration.emit()\">\n <mat-icon *ngIf=\"iconConfiguration\">\n {{ iconConfiguration }}\n </mat-icon>\n <mat-icon *ngIf=\"svgIconConfiguration\"\n [svgIcon]=\"svgIconConfiguration\">\n </mat-icon>\n <span *ngIf=\"(labelConfiguration) && (isOpened | async)\">\n {{ labelConfiguration }}\n </span>\n </a>\n </div>\n</mat-sidenav>",
247
270
  encapsulation: ViewEncapsulation.None,
248
271
  providers: [
249
272
  {
@@ -262,11 +285,11 @@ GIPISidenavComponent = GIPISidenavComponent_1 = __decorate([
262
285
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),
263
286
  ])
264
287
  ],
265
- styles: [".sidenav{padding:.8rem 1.2rem;border-radius:5px;background-color:#fff;position:fixed!important;top:66px!important;bottom:8px!important;border:0!important}.sidenav.small-sidenav{overflow-y:auto;width:76px}.sidenav.small-sidenav .sidenav-bottom-menu,.sidenav.small-sidenav .sidenav-content-menu .sidenav-menu-list .action-sidenav,.sidenav.small-sidenav .sidenav-content-menu .toggle-sidenav{text-align:center!important}.sidenav.large-sidenav{overflow-y:auto;width:248px}.sidenav .sidenav-content-menu{width:100%;background-color:#f5f5f6;border-radius:4px;display:flex;flex-direction:column;align-items:stretch;height:100%}.sidenav .sidenav-content-menu.show-bottom{height:calc(100% - 18px - 52px)!important}.sidenav .sidenav-content-menu .toggle-sidenav{all:unset;border-radius:4px;border:none;text-align:left;cursor:pointer;background-color:#e0313e;color:#fff;display:flex;align-items:center;gap:8px;padding:10px 16px}.sidenav .sidenav-content-menu .toggle-sidenav>mat-icon{width:2rem;height:2rem;font-size:2rem}.sidenav .sidenav-content-menu .toggle-sidenav:hover{background-color:#cc2d38}.sidenav .sidenav-content-menu .sidenav-menu-list{overflow-y:scroll;-ms-overflow-style:none;scrollbar-width:none;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.sidenav .sidenav-content-menu .sidenav-menu-list::-webkit-scrollbar{display:none}.menu-active{color:#e0313e!important;background-color:#e0e1e2!important}.menu-active>mat-icon,.menu-active>mat-icon svg,.menu-active>mat-icon svg path{color:#e0313e!important;fill:#e0313e!important}.sidenav-action-menu{cursor:pointer;display:flex}.sidenav-action-menu.sidenav-bottom-menu{flex-direction:column;gap:1rem;margin-top:1rem}.sidenav-action-menu a{flex:1;padding:16px;background-color:#f5f5f6;display:flex;align-items:center;gap:8px;cursor:pointer;font-size:1.4rem;font-weight:600}.sidenav-action-menu a:hover{background-color:#e0e1e2}.sidenav-action-menu a>span{flex:1;line-height:2rem}.sidenav-action-menu a>mat-icon{width:2rem;height:2rem;font-size:2rem;line-height:2rem;color:#595959;fill:#595959}.sidenav-action-menu a>mat-icon svg,.sidenav-action-menu a>mat-icon svg path{color:#595959;fill:#595959}.sidenav-bottom-menu a{border-radius:4px}.sidenav-menu-collapsable a{background-color:#e0e1e2}.sidenav-menu-collapsable a:hover{background-color:#d1d2d4}.mat-list-base{padding-top:0!important}.mat-drawer-inner-container{display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;overflow:hidden!important}.mat-drawer:not(.mat-drawer-side){box-shadow:none!important}.tag-new{display:flex;align-items:center;justify-content:center;background-color:#e0313e;color:#fff;padding:.2rem .6rem;font-size:1rem;line-height:1.2rem;border-radius:.4rem}"]
288
+ styles: [".sidenav{padding:.8rem 1.2rem;border-radius:5px;background-color:#fff;position:fixed!important;top:66px!important;bottom:8px!important;border:0!important}.sidenav.small-sidenav{overflow-y:auto;width:76px}.sidenav.small-sidenav .sidenav-bottom-menu,.sidenav.small-sidenav .sidenav-content-menu .sidenav-menu-list .action-sidenav,.sidenav.small-sidenav .sidenav-content-menu .toggle-sidenav{text-align:center!important}.sidenav.large-sidenav{overflow-y:auto;width:248px}.sidenav .sidenav-content-menu{width:100%;background-color:#f5f5f6;border-radius:4px;display:flex;flex-direction:column;align-items:stretch;height:100%}.sidenav .sidenav-content-menu.show-bottom{height:calc(100% - 18px - 104px)!important}.sidenav .sidenav-content-menu .toggle-sidenav{all:unset;border-radius:4px;border:none;text-align:left;cursor:pointer;background-color:#e0313e;color:#fff;display:flex;align-items:center;gap:8px;padding:10px 16px}.sidenav .sidenav-content-menu .toggle-sidenav>mat-icon{width:2rem;height:2rem;font-size:2rem}.sidenav .sidenav-content-menu .toggle-sidenav:hover{background-color:#cc2d38}.sidenav .sidenav-content-menu .sidenav-menu-list{overflow-y:scroll;-ms-overflow-style:none;scrollbar-width:none;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.sidenav .sidenav-content-menu .sidenav-menu-list::-webkit-scrollbar{display:none}.menu-active{color:#e0313e!important;background-color:#e0e1e2!important}.menu-active>mat-icon,.menu-active>mat-icon svg,.menu-active>mat-icon svg path{color:#e0313e!important;fill:#e0313e!important}.sidenav-action-menu{cursor:pointer;display:flex}.sidenav-action-menu.sidenav-bottom-menu{flex-direction:column;gap:1rem;margin-top:1rem}.sidenav-action-menu a{flex:1;padding:16px;background-color:#f5f5f6;display:flex;align-items:center;gap:8px;cursor:pointer;font-size:1.4rem;font-weight:600;position:relative;overflow:hidden}.sidenav-action-menu a:hover{background-color:#e0e1e2}.sidenav-action-menu a>span{flex:1;line-height:2rem}.sidenav-action-menu a>mat-icon{width:2rem;height:2rem;font-size:2rem;line-height:2rem;color:#595959;fill:#595959}.sidenav-action-menu a>mat-icon svg,.sidenav-action-menu a>mat-icon svg path{color:#595959;fill:#595959}.sidenav-bottom-menu a{border-radius:4px}.sidenav-menu-collapsable a{background-color:#e0e1e2}.sidenav-menu-collapsable a:hover{background-color:#d1d2d4}.mat-list-base{padding-top:0!important}.mat-drawer-inner-container{display:flex;flex-direction:column;align-items:stretch;justify-content:space-between;overflow:hidden!important}.mat-drawer:not(.mat-drawer-side){box-shadow:none!important}.tag-new{display:flex;align-items:center;justify-content:center;background-color:#e0313e;color:#fff;padding:.2rem .6rem;font-size:1rem;line-height:1rem;border-radius:.4rem}.tag-new.closed{position:absolute;top:15px;right:20px;width:52px;z-index:1;transform:translateX(70%) translateY(-85%) rotate(45deg);transform-origin:center;overflow:hidden;font-size:.8rem!important;line-height:.8rem!important}"]
266
289
  }),
267
290
  __metadata("design:paramtypes", [NavService,
268
291
  BreakpointObserverService,
269
292
  Router])
270
293
  ], GIPISidenavComponent);
271
294
  export { GIPISidenavComponent };
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJzaGFyZWQvZ2lwaS1jb21wb25lbnRzL3NpZGViYXIvc2lkZW5hdi9zaWRlbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQTBCaEUsSUFBYSxvQkFBb0IsNEJBQWpDLE1BQWEsb0JBQW9CO0lBNkI3QixZQUNZLFdBQXVCLEVBQ3ZCLDBCQUFxRCxFQUNyRCxPQUFlO1FBRmYsZ0JBQVcsR0FBWCxX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Q0FBQztnQkFDdkQsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2FBQ3JGLENBQUM7U0FDTDs7S0FDSixDQUFDO3FDQStCMkIsVUFBVTtRQUNLLHlCQUF5QjtRQUM1QyxNQUFNO0dBaENsQixvQkFBb0IsQ0F3TWhDO1NBeE1ZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTaWRlbmF2IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTWVudURUTyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by9tZW51LmR0byc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9icmVha3BvaW50LW9ic2VydmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbmF2LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9hcnJheS51dGlsJztcbmltcG9ydCB7IE9iamVjdFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlsJztcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL3N0cmluZy51dGlsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IGBnaXBpLXNpZGVuYXZgLFxuICAgIGV4cG9ydEFzOiAnZ2lwaVNpZGVuYXYnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlbmF2LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKTogdHlwZW9mIEdJUElTaWRlbmF2Q29tcG9uZW50ID0+IEdJUElTaWRlbmF2Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2NsYXNzJzogJ2dpcGktc2lkZW5hdicsXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2luZGljYXRvclJvdGF0ZScsIFtcbiAgICAgICAgICAgIHN0YXRlKCdjbG9zZWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZSgwZGVnKScgfSkpLFxuICAgICAgICAgICAgc3RhdGUoJ29wZW5lZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknIH0pKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSknKSksXG4gICAgICAgIF0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBHSVBJU2lkZW5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKCdzaWRlbmF2JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNpZGVuYXY6IE1hdFNpZGVuYXY7XG5cbiAgICBwdWJsaWMgX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQ6IE1lbnVEVE8gPSBudWxsO1xuICAgIHB1YmxpYyBfbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZDogTWVudURUTyA9IG51bGw7XG5cbiAgICBwdWJsaWMgX21vdXNlRW50ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG1lbnVJdGVtczogTWVudURUT1tdID0gW107XG5cbiAgICBASW5wdXQoKSBsYWJlbFRvZ2dsZTogc3RyaW5nID0gJ1JldHJhaXIgbWVudSc7XG5cbiAgICBASW5wdXQoKSBzaG93VGFnTmV3SW50ZWdyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGljb25JbnRlZ3JhdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHN2Z0ljb25JbnRlZ3JhdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhYmVsSW50ZWdyYXRpb246IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93SW50ZWdyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGljb25Db25maWd1cmF0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3ZnSWNvbkNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICBASW5wdXQoKSBsYWJlbENvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93Q29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uQ2xpY2tNZW51SXRlbTogRXZlbnRFbWl0dGVyPE1lbnVEVE8gfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudURUTyB8IG51bGw+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2xpY2tNZW51SW50ZWdyYXRpb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgb25DbGlja01lbnVDb25maWd1cmF0aW9uOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfbmF2U2VydmljZTogTmF2U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYnJlYWtwb2ludE9ic2VydmVyU2VydmljZTogQnJlYWtwb2ludE9ic2VydmVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25hdlNlcnZpY2Uuc2lkZW5hdiA9IHRoaXMuc2lkZW5hdjtcbiAgICAgICAgdGhpcy5fbmF2U2VydmljZS5tZW51SXRlbXMgPSB0aGlzLm1lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzT3BlbmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gb2YodGhpcy5fbmF2U2VydmljZS5pc09wZW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NjcmVlbkxhcmdlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyU2VydmljZS5zaXplJC5waXBlKFxuICAgICAgICAgICAgbWFwKHNpemUgPT4gKHNpemUgIT09ICd4cycpICYmIChzaXplICE9PSAnc20nKSAmJiAoc2l6ZSAhPT0gJ21kJykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJtZW51QmFja0J1dHRvbk5hbWUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoJ1ZvbHRhcicpO1xuICAgICAgICB9IGVsc2UgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGAke3RoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubmFtZX0gLyAke3RoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubmFtZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWxNZW51Q29sbGFwc2FibGVTZWxlY3RlZCgpOiBPYnNlcnZhYmxlPE1lbnVEVE9bXT4ge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZC5tZW51TGlzdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubWVudUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVNpZGVuYXYoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9uYXZTZXJ2aWNlLnRvZ2dsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKG1lbnU6IE1lbnVEVE8pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdlNlcnZpY2UuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uYXZTZXJ2aWNlLm9wZW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX25hdlNlcnZpY2UuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBtZW51LmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNlIG8gbWVudUxpc3QgZXN0w6EgY2FycmVnYWRvIGUgbyAodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9PT0gbnVsbCkgc2lnbmlmaWNhIHF1ZSBwb3NzdWkgbWFpcyBuaXZlaXMsIHBvcnRhbnRvIGVzdGUgw6kgbyBuaXZlbCAxLlxuICAgICAgICAgICAgICAgICAqIFNlIG8gbWVudUxpc3QgZXN0w6EgY2FycmVnYWRvIGUgbyAodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9PT0gbnVsbCkgc2lnbmlmaWNhIHF1ZSBlc3RlIMOpIG8gw7p0aW1vIG7DrXZlbCwgcG9ydGFudG8gZXN0ZSDDqSBvIG5pdmVsIDIuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eShtZW51Lm1lbnVMaXN0KSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gT2JqZWN0VXRpbC5jbG9uZShtZW51KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFBcnJheVV0aWwuaXNFbXB0eShtZW51Lm1lbnVMaXN0KSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gT2JqZWN0VXRpbC5jbG9uZShtZW51KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVDb2xsYXBzYWJsZVJlc2V0KG1lbnVMaXN0OiBNZW51RFRPW10pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWVudUxpc3RbaV0uZXhwYW5kZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkobWVudUxpc3RbaV0ubWVudUxpc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25NZW51Q29sbGFwc2FibGVSZXNldChtZW51TGlzdFtpXS5tZW51TGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NZW51Q29sbGFwc2FibGVHb0JhY2soKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTWVudUFjdGl2ZShtZW51OiBNZW51RFRPKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIudXJsLnN0YXJ0c1dpdGgobWVudS5yb3V0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTWVudUNvbGxhcHNhYmxlQWN0aXZlKG1lbnU6IE1lbnVEVE8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShtZW51LnJvdXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RJblJvdXRlOiBib29sZWFuID0gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhtZW51LnJvdXRlKTtcblxuICAgICAgICBsZXQgbWVudUxpc3Q6IE1lbnVEVE9bXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIG1lbnVMaXN0ID0gQXJyYXlVdGlsLmNsb25lKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubWVudUxpc3QpO1xuICAgICAgICB9IGVsc2UgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgbWVudUxpc3QgPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZC5tZW51TGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZXZlbFplcm9BY3RpdmU6IE1lbnVEVE8gPSBtZW51TGlzdFxuICAgICAgICAgICAgLmZpbHRlcihtaSA9PiAhQXJyYXlVdGlsLmlzRW1wdHkobWkubWVudUxpc3QpKVxuICAgICAgICAgICAgLmZpbmQobWkgPT4gKChtaS5yb3V0ZSA9PT0gbWVudS5yb3V0ZSkgJiYgKG1pLmluZGV4ID09PSBtZW51LmluZGV4KSAmJiAobWkudHlwZSAmJiBtZW51LnR5cGUpKSk7XG5cbiAgICAgICAgaWYgKGV4aXN0SW5Sb3V0ZSAmJiAhT2JqZWN0VXRpbC5pc051bGwobGV2ZWxaZXJvQWN0aXZlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkobGV2ZWxaZXJvQWN0aXZlLm1lbnVMaXN0KSkge1xuICAgICAgICAgICAgY29uc3QgbGV2ZWxPbmVBY3RpdmU6IE1lbnVEVE8gPSBsZXZlbFplcm9BY3RpdmUubWVudUxpc3QuZmluZChtaSA9PiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKG1pLnJvdXRlKSk7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKGxldmVsT25lQWN0aXZlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkobGV2ZWxPbmVBY3RpdmUubWVudUxpc3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxUd29BY3RpdmU6IE1lbnVEVE8gPSBsZXZlbE9uZUFjdGl2ZS5tZW51TGlzdC5maW5kKG1pID0+IHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMobWkucm91dGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIU9iamVjdFV0aWwuaXNOdWxsKGxldmVsVHdvQWN0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFPYmplY3RVdGlsLmlzTnVsbChsZXZlbE9uZUFjdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTWVudUl0ZW1TZWxlY3RlZChtZW51OiBNZW51RFRPID0gbnVsbCwgY2xvc2VOYXY6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChjbG9zZU5hdikge1xuICAgICAgICAgICAgdGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgICAgICAgdGhpcy5pc1NjcmVlbkxhcmdlLnN1YnNjcmliZShpc1NjcmVlbkxhcmdlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzU2NyZWVuTGFyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2U2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNsaWNrTWVudUl0ZW0uZW1pdChtZW51KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWVudU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChuYW1lLmxlbmd0aCA8PSAzNSkgPyBuYW1lIDogKG5hbWUuc2xpY2UoMCwgMzUpICsgJy4uLicpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuZWQudG9Qcm9taXNlKCkudGhlbihpc09wZW5lZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW91c2VFbnRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVTaWRlbmF2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuZWQudG9Qcm9taXNlKCkudGhlbihpc09wZW5lZCA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPcGVuZWQgJiYgdGhpcy5fbW91c2VFbnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlRW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNpZGVuYXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbn1cbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJzaGFyZWQvZ2lwaS1jb21wb25lbnRzL3NpZGViYXIvc2lkZW5hdi9zaWRlbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQTBCaEUsSUFBYSxvQkFBb0IsNEJBQWpDLE1BQWEsb0JBQW9CO0lBbUM3QixZQUNZLFdBQXVCLEVBQ3ZCLDBCQUFxRCxFQUNyRCxPQUFlO1FBRmYsZ0JBQVcsR0FBWCxX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bUNBQW1DLENBQUMsQ0FBQzthQUNyRixDQUFDO1NBQ0w7O0tBQ0osQ0FBQztxQ0FxQzJCLFVBQVU7UUFDSyx5QkFBeUI7UUFDNUMsTUFBTTtHQXRDbEIsb0JBQW9CLENBaU9oQztTQWpPWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U2lkZW5hdiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1lbnVEVE8gfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vbWVudS5kdG8nO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYnJlYWtwb2ludC1vYnNlcnZlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL25hdi5zZXJ2aWNlJztcbmltcG9ydCB7IEFycmF5VXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvYXJyYXkudXRpbCc7XG5pbXBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9vYmplY3QudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9zdHJpbmcudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBgZ2lwaS1zaWRlbmF2YCxcbiAgICBleHBvcnRBczogJ2dpcGlTaWRlbmF2JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2lkZW5hdi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2lkZW5hdi5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCk6IHR5cGVvZiBHSVBJU2lkZW5hdkNvbXBvbmVudCA9PiBHSVBJU2lkZW5hdkNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdnaXBpLXNpZGVuYXYnLFxuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdpbmRpY2F0b3JSb3RhdGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY2xvc2VkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdyb3RhdGUoMGRlZyknIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdvcGVuZWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJyB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpJykpLFxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgR0lQSVNpZGVuYXZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gICAgQFZpZXdDaGlsZCgnc2lkZW5hdicsIHsgc3RhdGljOiBmYWxzZSB9KSBzaWRlbmF2OiBNYXRTaWRlbmF2O1xuXG4gICAgcHVibGljIF9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkOiBNZW51RFRPID0gbnVsbDtcbiAgICBwdWJsaWMgX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQ6IE1lbnVEVE8gPSBudWxsO1xuXG4gICAgcHVibGljIF9tb3VzZUVudGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9tZW51SXRlbXM6IE1lbnVEVE9bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGdldCBtZW51SXRlbXMoKTogTWVudURUT1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcztcbiAgICB9XG4gICAgc2V0IG1lbnVJdGVtcyh2YWx1ZTogTWVudURUT1tdKSB7XG4gICAgICAgIHRoaXMuX21lbnVJdGVtcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxhYmVsVG9nZ2xlOiBzdHJpbmcgPSAnUmV0cmFpciBtZW51JztcblxuICAgIEBJbnB1dCgpIHNob3dUYWdOZXdJbnRlZ3JhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaWNvbkludGVncmF0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3ZnSWNvbkludGVncmF0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbGFiZWxJbnRlZ3JhdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNob3dJbnRlZ3JhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaWNvbkNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICBASW5wdXQoKSBzdmdJY29uQ29uZmlndXJhdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhYmVsQ29uZmlndXJhdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNob3dDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgb25DbGlja01lbnVJdGVtOiBFdmVudEVtaXR0ZXI8TWVudURUTyB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51RFRPIHwgbnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgb25DbGlja01lbnVJbnRlZ3JhdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrTWVudUNvbmZpZ3VyYXRpb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9uYXZTZXJ2aWNlOiBOYXZTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9icmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmF2U2VydmljZS5zaWRlbmF2ID0gdGhpcy5zaWRlbmF2O1xuICAgICAgICB0aGlzLl9uYXZTZXJ2aWNlLm1lbnVJdGVtcyA9IHRoaXMubWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNPcGVuZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLl9uYXZTZXJ2aWNlLmlzT3BlbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2NyZWVuTGFyZ2UoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLnNpemUkLnBpcGUoXG4gICAgICAgICAgICBtYXAoc2l6ZSA9PiAoc2l6ZSAhPT0gJ3hzJykgJiYgKHNpemUgIT09ICdzbScpICYmIChzaXplICE9PSAnbWQnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1lbnVCYWNrQnV0dG9uTmFtZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZignVm9sdGFyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoYCR7dGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZC5uYW1lfSAvICR7dGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZC5uYW1lfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsZXZlbE1lbnVTZWxlY3RlZCgpOiBPYnNlcnZhYmxlPE1lbnVEVE9bXT4ge1xuICAgICAgICBsZXQgbGV2ZWxNZW51QWN0aXZlOiBNZW51RFRPW10gPSBbXTtcbiAgICAgICAgaWYgKE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmIE9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICBsZXZlbE1lbnVBY3RpdmUgPSB0aGlzLm1lbnVJdGVtcztcbiAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIGxldmVsTWVudUFjdGl2ZSA9IHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubWVudUxpc3Q7XG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgbGV2ZWxNZW51QWN0aXZlID0gdGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZC5tZW51TGlzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkobGV2ZWxNZW51QWN0aXZlKSkge1xuICAgICAgICAgICAgbGV2ZWxNZW51QWN0aXZlLmZvckVhY2goaXRlbSA9PiBpdGVtLmlkID0gdGhpcy5fdG9DYW1lbENhc2UoaXRlbS5yb3V0ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKGxldmVsTWVudUFjdGl2ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVNpZGVuYXYoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9uYXZTZXJ2aWNlLnRvZ2dsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKG1lbnU6IE1lbnVEVE8pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdlNlcnZpY2UuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uYXZTZXJ2aWNlLm9wZW4oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX25hdlNlcnZpY2UuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBtZW51LmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNlIG8gbWVudUxpc3QgZXN0w6EgY2FycmVnYWRvIGUgbyAodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9PT0gbnVsbCkgc2lnbmlmaWNhIHF1ZSBwb3NzdWkgbWFpcyBuaXZlaXMsIHBvcnRhbnRvIGVzdGUgw6kgbyBuaXZlbCAxLlxuICAgICAgICAgICAgICAgICAqIFNlIG8gbWVudUxpc3QgZXN0w6EgY2FycmVnYWRvIGUgbyAodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9PT0gbnVsbCkgc2lnbmlmaWNhIHF1ZSBlc3RlIMOpIG8gw7p0aW1vIG7DrXZlbCwgcG9ydGFudG8gZXN0ZSDDqSBvIG5pdmVsIDIuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eShtZW51Lm1lbnVMaXN0KSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gT2JqZWN0VXRpbC5jbG9uZShtZW51KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFBcnJheVV0aWwuaXNFbXB0eShtZW51Lm1lbnVMaXN0KSAmJiBPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gT2JqZWN0VXRpbC5jbG9uZShtZW51KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1lbnVDb2xsYXBzYWJsZVJlc2V0KG1lbnVMaXN0OiBNZW51RFRPW10pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWVudUxpc3RbaV0uZXhwYW5kZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkobWVudUxpc3RbaV0ubWVudUxpc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25NZW51Q29sbGFwc2FibGVSZXNldChtZW51TGlzdFtpXS5tZW51TGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NZW51Q29sbGFwc2FibGVHb0JhY2soKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xldmVsVHdvTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZXZlbE9uZU1lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTWVudUFjdGl2ZShtZW51OiBNZW51RFRPKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIudXJsLnN0YXJ0c1dpdGgobWVudS5yb3V0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTWVudUNvbGxhcHNhYmxlQWN0aXZlKG1lbnU6IE1lbnVEVE8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKFN0cmluZ1V0aWwuaXNFbXB0eShtZW51LnJvdXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RJblJvdXRlOiBib29sZWFuID0gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhtZW51LnJvdXRlKTtcblxuICAgICAgICBsZXQgbWVudUxpc3Q6IE1lbnVEVE9bXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCkgJiYgT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIG1lbnVMaXN0ID0gQXJyYXlVdGlsLmNsb25lKHRoaXMuX2xldmVsT25lTWVudUNvbGxhcHNhYmxlU2VsZWN0ZWQubWVudUxpc3QpO1xuICAgICAgICB9IGVsc2UgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkKSkge1xuICAgICAgICAgICAgbWVudUxpc3QgPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fbGV2ZWxUd29NZW51Q29sbGFwc2FibGVTZWxlY3RlZC5tZW51TGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZXZlbFplcm9BY3RpdmU6IE1lbnVEVE8gPSBtZW51TGlzdFxuICAgICAgICAgICAgLmZpbHRlcihtaSA9PiAhQXJyYXlVdGlsLmlzRW1wdHkobWkubWVudUxpc3QpKVxuICAgICAgICAgICAgLmZpbmQobWkgPT4gKChtaS5yb3V0ZSA9PT0gbWVudS5yb3V0ZSkgJiYgKG1pLmluZGV4ID09PSBtZW51LmluZGV4KSAmJiAobWkudHlwZSAmJiBtZW51LnR5cGUpKSk7XG5cbiAgICAgICAgaWYgKGV4aXN0SW5Sb3V0ZSAmJiAhT2JqZWN0VXRpbC5pc051bGwobGV2ZWxaZXJvQWN0aXZlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkobGV2ZWxaZXJvQWN0aXZlLm1lbnVMaXN0KSkge1xuICAgICAgICAgICAgY29uc3QgbGV2ZWxPbmVBY3RpdmU6IE1lbnVEVE8gPSBsZXZlbFplcm9BY3RpdmUubWVudUxpc3QuZmluZChtaSA9PiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKG1pLnJvdXRlKSk7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKGxldmVsT25lQWN0aXZlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkobGV2ZWxPbmVBY3RpdmUubWVudUxpc3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxUd29BY3RpdmU6IE1lbnVEVE8gPSBsZXZlbE9uZUFjdGl2ZS5tZW51TGlzdC5maW5kKG1pID0+IHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMobWkucm91dGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIU9iamVjdFV0aWwuaXNOdWxsKGxldmVsVHdvQWN0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFPYmplY3RVdGlsLmlzTnVsbChsZXZlbE9uZUFjdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTWVudUl0ZW1TZWxlY3RlZChtZW51OiBNZW51RFRPID0gbnVsbCwgY2xvc2VOYXY6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChjbG9zZU5hdikge1xuICAgICAgICAgICAgdGhpcy5fbGV2ZWxPbmVNZW51Q29sbGFwc2FibGVTZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sZXZlbFR3b01lbnVDb2xsYXBzYWJsZVNlbGVjdGVkID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5vbk1lbnVDb2xsYXBzYWJsZVJlc2V0KHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgICAgICAgdGhpcy5pc1NjcmVlbkxhcmdlLnN1YnNjcmliZShpc1NjcmVlbkxhcmdlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzU2NyZWVuTGFyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2U2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNsaWNrTWVudUl0ZW0uZW1pdChtZW51KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWVudU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChuYW1lLmxlbmd0aCA8PSAzNSkgPyBuYW1lIDogKG5hbWUuc2xpY2UoMCwgMzUpICsgJy4uLicpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuZWQudG9Qcm9taXNlKCkudGhlbihpc09wZW5lZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW91c2VFbnRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVTaWRlbmF2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuZWQudG9Qcm9taXNlKCkudGhlbihpc09wZW5lZCA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPcGVuZWQgJiYgdGhpcy5fbW91c2VFbnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlRW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNpZGVuYXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIF90b0NhbWVsQ2FzZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoU3RyaW5nVXRpbC5pc0VtcHR5KG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogc3RyaW5nID0gU3RyaW5nVXRpbC5yZXBsYWNlQWNjZW50cyhuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgICAgICAgICAgIC5zcGxpdCgvWy9cXC1dLykgIC8vIERpdmlkZSBwb3IgJy8nIGUgJy0nXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pICAvLyBSZW1vdmUgZWxlbWVudG9zIHZhemlvcyBkYSBsaXN0YVxuICAgICAgICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCkgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiAod29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgfVxuXG59XG4iXX0=
@@ -0,0 +1,243 @@
1
+ var GIPISplitButtonComponent_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { animate, state, style, transition, trigger } from '@angular/animations';
4
+ import { Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';
5
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+ import { GIPIPopoverTrigger } from '../popover/shared/popover-trigger';
7
+ import { ObjectUtil } from './../../../core/utils/object.util';
8
+ let nextUniqueId = 0;
9
+ let GIPISplitButtonComponent = GIPISplitButtonComponent_1 = class GIPISplitButtonComponent {
10
+ constructor(elementRef) {
11
+ this.elementRef = elementRef;
12
+ this._uniqueId = nextUniqueId++;
13
+ this._name = `gipi-split-button-${this._uniqueId}`;
14
+ this.idBtnDefault = `gipi-split-button-default-${this._uniqueId}`;
15
+ this.idBtnMenu = `gipi-split-button-menu-${this._uniqueId}`;
16
+ this.isSplitButtonPrimary = this._hasHostAttributes('gipi-primary');
17
+ this.isSplitButtonSecondary = this._hasHostAttributes('gipi-secondary');
18
+ this.isSplitButtonTertiary = this._hasHostAttributes('gipi-tertiary');
19
+ this.isSplitButtonAction = this._hasHostAttributes('gipi-action');
20
+ this.id = this._name;
21
+ this.name = this._name;
22
+ this.type = 'button';
23
+ this.ariaLabel = '';
24
+ this.title = '';
25
+ this.label = '';
26
+ this.disabled = false;
27
+ this.loading = false;
28
+ this.tooltip = '';
29
+ this.splitOptions = [];
30
+ this.onOpenPopover = new EventEmitter();
31
+ this.onClosePopover = new EventEmitter();
32
+ this.onClick = new EventEmitter(true);
33
+ this.onFocus = new EventEmitter(true);
34
+ this.onBlur = new EventEmitter(true);
35
+ }
36
+ ngOnInit() { }
37
+ ngOnDestroy() {
38
+ if (this.popoverTrigger) {
39
+ this.popoverTrigger.destroyPopover();
40
+ }
41
+ }
42
+ getHostElement() {
43
+ return this.elementRef.nativeElement;
44
+ }
45
+ _hasHostAttributes(...attributes) {
46
+ return attributes.some(attribute => this.getHostElement().hasAttribute(attribute));
47
+ }
48
+ btnIdAndName() {
49
+ const uniqueId = nextUniqueId++;
50
+ return {
51
+ btnDefault: `gipi-split-button-default-${uniqueId}`,
52
+ btnMenu: `gipi-split-button-menu-${uniqueId}`,
53
+ };
54
+ }
55
+ getInternalButtonClass(isBtnDefault) {
56
+ return {
57
+ 'button-default': isBtnDefault,
58
+ 'button-menu': !isBtnDefault,
59
+ 'button-primary': this.isSplitButtonPrimary,
60
+ 'button-secondary': this.isSplitButtonSecondary,
61
+ 'button-tertiary': this.isSplitButtonTertiary,
62
+ 'button-action': this.isSplitButtonAction,
63
+ };
64
+ }
65
+ showPopover() {
66
+ if (this.disabled || this.loading) {
67
+ return;
68
+ }
69
+ else {
70
+ this.popoverTrigger.openPopover();
71
+ }
72
+ }
73
+ closePopover() {
74
+ if (this.disabled || this.loading) {
75
+ return;
76
+ }
77
+ else {
78
+ this.popoverTrigger.closePopover();
79
+ }
80
+ }
81
+ handleClick(event) {
82
+ if (this.disabled || this.loading) {
83
+ return;
84
+ }
85
+ else {
86
+ this.onClick.emit(event);
87
+ this.closePopover();
88
+ event.stopPropagation();
89
+ }
90
+ }
91
+ handleFocus(event) {
92
+ if (this.disabled || this.loading) {
93
+ return;
94
+ }
95
+ else {
96
+ this.onFocus.emit(event);
97
+ event.stopPropagation();
98
+ }
99
+ }
100
+ handleBlur(event) {
101
+ if (this.disabled || this.loading) {
102
+ return;
103
+ }
104
+ else {
105
+ this.onBlur.emit(event);
106
+ event.stopPropagation();
107
+ }
108
+ }
109
+ handleClickBtnMenu(event) {
110
+ if (this.disabled || this.loading) {
111
+ return;
112
+ }
113
+ else {
114
+ if (!ObjectUtil.isNull(this.popoverTrigger)) {
115
+ this.popoverTrigger.togglePopover();
116
+ }
117
+ event.stopPropagation();
118
+ }
119
+ }
120
+ handleClickBtnSplitOption(option) {
121
+ if (this.disabled || this.loading || !option || option.disabled || !option.clickFn) {
122
+ return;
123
+ }
124
+ else {
125
+ option.clickFn();
126
+ this.closePopover();
127
+ }
128
+ }
129
+ onResize(event) {
130
+ if (this.popoverTrigger) {
131
+ this.popoverTrigger.closePopover();
132
+ event.stopPropagation();
133
+ }
134
+ }
135
+ };
136
+ GIPISplitButtonComponent.ctorParameters = () => [
137
+ { type: ElementRef }
138
+ ];
139
+ __decorate([
140
+ ViewChild(GIPIPopoverTrigger, { static: false }),
141
+ __metadata("design:type", GIPIPopoverTrigger)
142
+ ], GIPISplitButtonComponent.prototype, "popoverTrigger", void 0);
143
+ __decorate([
144
+ Input(),
145
+ __metadata("design:type", String)
146
+ ], GIPISplitButtonComponent.prototype, "id", void 0);
147
+ __decorate([
148
+ Input(),
149
+ __metadata("design:type", String)
150
+ ], GIPISplitButtonComponent.prototype, "name", void 0);
151
+ __decorate([
152
+ Input(),
153
+ __metadata("design:type", String)
154
+ ], GIPISplitButtonComponent.prototype, "type", void 0);
155
+ __decorate([
156
+ Input(),
157
+ __metadata("design:type", String)
158
+ ], GIPISplitButtonComponent.prototype, "ariaLabel", void 0);
159
+ __decorate([
160
+ Input(),
161
+ __metadata("design:type", String)
162
+ ], GIPISplitButtonComponent.prototype, "title", void 0);
163
+ __decorate([
164
+ Input(),
165
+ __metadata("design:type", String)
166
+ ], GIPISplitButtonComponent.prototype, "label", void 0);
167
+ __decorate([
168
+ Input(),
169
+ __metadata("design:type", String)
170
+ ], GIPISplitButtonComponent.prototype, "buttonClass", void 0);
171
+ __decorate([
172
+ Input(),
173
+ __metadata("design:type", Boolean)
174
+ ], GIPISplitButtonComponent.prototype, "disabled", void 0);
175
+ __decorate([
176
+ Input(),
177
+ __metadata("design:type", Boolean)
178
+ ], GIPISplitButtonComponent.prototype, "loading", void 0);
179
+ __decorate([
180
+ Input(),
181
+ __metadata("design:type", String)
182
+ ], GIPISplitButtonComponent.prototype, "tooltip", void 0);
183
+ __decorate([
184
+ Input('options'),
185
+ __metadata("design:type", Array)
186
+ ], GIPISplitButtonComponent.prototype, "splitOptions", void 0);
187
+ __decorate([
188
+ Output(),
189
+ __metadata("design:type", EventEmitter)
190
+ ], GIPISplitButtonComponent.prototype, "onOpenPopover", void 0);
191
+ __decorate([
192
+ Output(),
193
+ __metadata("design:type", EventEmitter)
194
+ ], GIPISplitButtonComponent.prototype, "onClosePopover", void 0);
195
+ __decorate([
196
+ Output('click'),
197
+ __metadata("design:type", EventEmitter)
198
+ ], GIPISplitButtonComponent.prototype, "onClick", void 0);
199
+ __decorate([
200
+ Output('focus'),
201
+ __metadata("design:type", EventEmitter)
202
+ ], GIPISplitButtonComponent.prototype, "onFocus", void 0);
203
+ __decorate([
204
+ Output('blur'),
205
+ __metadata("design:type", EventEmitter)
206
+ ], GIPISplitButtonComponent.prototype, "onBlur", void 0);
207
+ __decorate([
208
+ HostListener('window:resize', ['$event']),
209
+ __metadata("design:type", Function),
210
+ __metadata("design:paramtypes", [UIEvent]),
211
+ __metadata("design:returntype", void 0)
212
+ ], GIPISplitButtonComponent.prototype, "onResize", null);
213
+ GIPISplitButtonComponent = GIPISplitButtonComponent_1 = __decorate([
214
+ Component({
215
+ selector: `gipi-split-button[gipi-primary], gipi-split-button[gipi-secondary],
216
+ gipi-split-button[gipi-tertiary], gipi-split-button[gipi-action]`,
217
+ exportAs: 'gipiSplitButton',
218
+ template: "<div [matTooltip]=\"tooltip\"\n [class]=\"buttonClass || ''\"\n [class.button-base]=\"true\"\n [class.disabled]=\"disabled || loading\"\n #popoverTrigger=\"popoverTrigger\"\n [popoverTriggerFor]=\"btnPopover\"\n [popoverTriggerOn]=\"'none'\"\n [popoverBackdropCloseOnClick]=\"true\"\n (opened)=\"onOpenPopover.emit()\"\n (closed)=\"onClosePopover.emit()\">\n <button [attr.id]=\"idBtnDefault\"\n [attr.name]=\"idBtnDefault\"\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : label\"\n [attr.title]=\"title ? title : label\"\n [disabled]=\"disabled || loading\"\n [ngClass]=\"getInternalButtonClass(true)\"\n role=\"button\"\n (click)=\"handleClick($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\">\n {{ label ? label : '' }}\n </button>\n <button [attr.id]=\"idBtnMenu\"\n [attr.name]=\"idBtnMenu\"\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : label\"\n [attr.title]=\"title ? title : label\"\n [disabled]=\"disabled || loading\"\n [ngClass]=\"getInternalButtonClass(false)\"\n role=\"button\"\n (click)=\"handleClickBtnMenu($event)\">\n <mat-icon [@indicatorRotate]=\"popoverTrigger?.popoverOpen ? 'opened': 'closed'\"> expand_more </mat-icon>\n </button>\n</div>\n\n<gipi-popover #btnPopover=\"gipiPopover\"\n [popoverOverlapTrigger]=\"false\"\n [popoverCloseOnClick]=\"false\"\n [popoverArrowWidth]=\"0\"\n [popoverOffsetY]=\"3\">\n <div class=\"btn-popover-content\">\n <button class=\"btn-split-option\"\n *ngFor=\"let option of splitOptions\"\n [disabled]=\"option?.disabled\"\n (click)=\"handleClickBtnSplitOption(option)\">\n {{ option.label }}\n </button>\n </div>\n</gipi-popover>",
219
+ providers: [
220
+ {
221
+ provide: NG_VALUE_ACCESSOR,
222
+ useExisting: forwardRef(() => GIPISplitButtonComponent_1),
223
+ multi: true
224
+ }
225
+ ],
226
+ host: {
227
+ 'class': 'gipi-split-button',
228
+ '[attr.id]': 'id',
229
+ '[attr.name]': 'name',
230
+ },
231
+ animations: [
232
+ trigger('indicatorRotate', [
233
+ state('closed', style({ transform: 'rotate(0deg)' })),
234
+ state('opened', style({ transform: 'rotate(-180deg)' })),
235
+ transition('opened <=> closed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),
236
+ ])
237
+ ],
238
+ styles: [".button-base{display:flex;flex-direction:row;justify-content:center;border-radius:4px;font-weight:600;font-size:1.4rem;line-height:1.6rem;cursor:pointer;outline:0;white-space:nowrap;text-decoration:none;vertical-align:middle;text-align:center;box-shadow:1px 1px 5px 0 rgba(0,0,0,.1);transition:.2s;width:100%;max-height:4rem;border:1px solid transparent;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.button-base.disabled{cursor:not-allowed!important;box-shadow:none}.button-base>button{display:flex;align-items:center;justify-content:center;border:none;outline:0;box-shadow:none;width:100%;height:40px;padding:12px 16px;overflow:hidden;border-radius:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;white-space:nowrap;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.button-base>button:not(.disabled):active{opacity:.8}.button-base .button-default{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.button-base .button-menu{max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.button-primary:not(:disabled),.button-primary:not(:disabled)>mat-icon{background-color:#e0313e;color:#fff;fill:#fff}.button-primary:not(:disabled).button-default,.button-primary:not(:disabled)>mat-icon.button-default{border-right:1px solid #9f232c}.button-primary:not(:disabled) svg,.button-primary:not(:disabled) svg g path,.button-primary:not(:disabled) svg path,.button-primary:not(:disabled)>mat-icon svg,.button-primary:not(:disabled)>mat-icon svg g path,.button-primary:not(:disabled)>mat-icon svg path{color:#fff;fill:#fff}.button-primary:disabled,.button-primary:disabled>mat-icon{background-color:#d1d2d4;color:#9a9da2;fill:#9a9da2}.button-primary:disabled.button-default,.button-primary:disabled>mat-icon.button-default{border-right:1px solid #9a9da2}.button-primary:disabled svg,.button-primary:disabled svg g path,.button-primary:disabled svg path,.button-primary:disabled>mat-icon svg,.button-primary:disabled>mat-icon svg g path,.button-primary:disabled>mat-icon svg path{color:#9a9da2;fill:#9a9da2}.button-primary:not(:disabled):hover,.button-primary:not(:disabled):hover>mat-icon{background-color:#cc2d38;color:#fff;fill:#fff}.button-primary:not(:disabled):hover svg,.button-primary:not(:disabled):hover svg g path,.button-primary:not(:disabled):hover svg path,.button-primary:not(:disabled):hover>mat-icon svg,.button-primary:not(:disabled):hover>mat-icon svg g path,.button-primary:not(:disabled):hover>mat-icon svg path{color:#fff;fill:#fff}.button-secondary{background-color:transparent}.button-secondary:not(:disabled),.button-secondary:not(:disabled)>mat-icon{border-color:#595959;color:#595959;fill:#595959}.button-secondary:not(:disabled).button-default,.button-secondary:not(:disabled)>mat-icon.button-default{border-right:1px solid #595959}.button-secondary:not(:disabled) svg,.button-secondary:not(:disabled) svg g path,.button-secondary:not(:disabled) svg path,.button-secondary:not(:disabled)>mat-icon svg,.button-secondary:not(:disabled)>mat-icon svg g path,.button-secondary:not(:disabled)>mat-icon svg path{color:#595959;fill:#595959}.button-secondary:disabled,.button-secondary:disabled>mat-icon{border-color:#d1d2d4;background-color:#d1d2d4;color:#9a9da2;fill:#9a9da2}.button-secondary:disabled.button-default,.button-secondary:disabled>mat-icon.button-default{border-right:1px solid #9a9da2}.button-secondary:disabled svg,.button-secondary:disabled svg g path,.button-secondary:disabled svg path,.button-secondary:disabled>mat-icon svg,.button-secondary:disabled>mat-icon svg g path,.button-secondary:disabled>mat-icon svg path{color:#9a9da2;fill:#9a9da2}.button-secondary:not(:disabled):hover,.button-secondary:not(:disabled):hover>mat-icon{border-color:#595959;background-color:#e0e1e2;color:#595959;fill:#595959}.button-secondary:not(:disabled):hover svg,.button-secondary:not(:disabled):hover svg g path,.button-secondary:not(:disabled):hover svg path,.button-secondary:not(:disabled):hover>mat-icon svg,.button-secondary:not(:disabled):hover>mat-icon svg g path,.button-secondary:not(:disabled):hover>mat-icon svg path{color:#595959;fill:#595959}.button-tertiary{background-color:#e7ebee;box-shadow:none}.button-tertiary:not(:disabled),.button-tertiary:not(:disabled)>mat-icon{color:#595959;fill:#595959}.button-tertiary:not(:disabled).button-default,.button-tertiary:not(:disabled)>mat-icon.button-default{border-right:1px solid #595959}.button-tertiary:not(:disabled) svg,.button-tertiary:not(:disabled) svg g path,.button-tertiary:not(:disabled) svg path,.button-tertiary:not(:disabled)>mat-icon svg,.button-tertiary:not(:disabled)>mat-icon svg g path,.button-tertiary:not(:disabled)>mat-icon svg path{color:#595959;fill:#595959}.button-tertiary:disabled,.button-tertiary:disabled>mat-icon{background-color:#d1d2d4;color:#9a9da2;fill:#9a9da2}.button-tertiary:disabled.button-default,.button-tertiary:disabled>mat-icon.button-default{border-right:1px solid #9a9da2}.button-tertiary:disabled svg,.button-tertiary:disabled svg g path,.button-tertiary:disabled svg path,.button-tertiary:disabled>mat-icon svg,.button-tertiary:disabled>mat-icon svg g path,.button-tertiary:disabled>mat-icon svg path{color:#9a9da2;fill:#9a9da2}.button-tertiary:not(:disabled):hover,.button-tertiary:not(:disabled):hover>mat-icon{background-color:#e0e1e2;color:#595959;fill:#595959}.button-tertiary:not(:disabled):hover svg,.button-tertiary:not(:disabled):hover svg g path,.button-tertiary:not(:disabled):hover svg path,.button-tertiary:not(:disabled):hover>mat-icon svg,.button-tertiary:not(:disabled):hover>mat-icon svg g path,.button-tertiary:not(:disabled):hover>mat-icon svg path{color:#595959;fill:#595959}.button-action{background-color:transparent;box-shadow:none;display:flex;justify-content:flex-start!important}.button-action:not(:disabled),.button-action:not(:disabled)>mat-icon{color:#262626;fill:#262626}.button-action:not(:disabled).button-default,.button-action:not(:disabled)>mat-icon.button-default{border-right:1px solid #262626}.button-action:not(:disabled) svg,.button-action:not(:disabled) svg g path,.button-action:not(:disabled) svg path,.button-action:not(:disabled)>mat-icon svg,.button-action:not(:disabled)>mat-icon svg g path,.button-action:not(:disabled)>mat-icon svg path{color:#262626;fill:#262626}.button-action:disabled,.button-action:disabled>mat-icon{color:#9a9da2;fill:#9a9da2}.button-action:disabled.button-default,.button-action:disabled>mat-icon.button-default{border-right:1px solid #9a9da2}.button-action:disabled svg,.button-action:disabled svg g path,.button-action:disabled svg path,.button-action:disabled>mat-icon svg,.button-action:disabled>mat-icon svg g path,.button-action:disabled>mat-icon svg path{color:#9a9da2;fill:#9a9da2}.button-action:not(:disabled):hover,.button-action:not(:disabled):hover>mat-icon{background-color:#f5f5f6;color:#262626;fill:#262626}.button-action:not(:disabled):hover svg,.button-action:not(:disabled):hover svg g path,.button-action:not(:disabled):hover svg path,.button-action:not(:disabled):hover>mat-icon svg,.button-action:not(:disabled):hover>mat-icon svg g path,.button-action:not(:disabled):hover>mat-icon svg path{color:#262626;fill:#262626}.disabled,:disabled{pointer-events:none!important}.btn-popover-content{display:flex;flex-direction:column;gap:.8rem;background-color:#fff;border-radius:4px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);padding:8px}.btn-split-option{width:100%;padding:.8rem;border-radius:.4rem;border:1px solid transparent;text-align:left;outline:0;background-color:transparent;cursor:pointer}.btn-split-option:not(:disabled){color:#595959}.btn-split-option:disabled{border-color:#d1d2d4;background-color:#d1d2d4;color:#9a9da2;cursor:not-allowed}.btn-split-option:not(:disabled):hover{border-color:#595959;background-color:#e0e1e2;color:#595959}"]
239
+ }),
240
+ __metadata("design:paramtypes", [ElementRef])
241
+ ], GIPISplitButtonComponent);
242
+ export { GIPISplitButtonComponent };
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvc3BsaXQtYnV0dG9uL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFRL0QsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBNEJyQixJQUFhLHdCQUF3QixnQ0FBckMsTUFBYSx3QkFBd0I7SUEyQ2pDLFlBQW1CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF6Q2pDLGNBQVMsR0FBVyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxVQUFLLEdBQVcscUJBQXFCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV2RCxpQkFBWSxHQUFHLDZCQUE2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0QsY0FBUyxHQUFHLDBCQUEwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFckQseUJBQW9CLEdBQVksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLDJCQUFzQixHQUFZLElBQUksQ0FB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QkFBd0I7SUExQnBDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRTtnRkFDa0U7UUFDNUUsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQiw0Z0VBQTRDO1FBRTVDLFNBQVMsRUFBRTtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQXdCLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSjtRQUNELElBQUksRUFBRTtZQUNGLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFLE1BQU07U0FDeEI7UUFDRCxVQUFVLEVBQUU7WUFDUixPQUFPLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3ZCLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztnQkFDeEQsVUFBVSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2FBQ2hGLENBQUM7U0FDTDs7S0FDSixDQUFDO3FDQTRDaUMsVUFBVTtHQTNDaEMsd0JBQXdCLENBd0pwQztTQXhKWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEdJUElQb3BvdmVyVHJpZ2dlciB9IGZyb20gJy4uL3BvcG92ZXIvc2hhcmVkL3BvcG92ZXItdHJpZ2dlcic7XG5pbXBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTcGxpdE9wdGlvbnMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgY2xpY2tGbjogRnVuY3Rpb247XG59XG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogYGdpcGktc3BsaXQtYnV0dG9uW2dpcGktcHJpbWFyeV0sIGdpcGktc3BsaXQtYnV0dG9uW2dpcGktc2Vjb25kYXJ5XSxcbiAgICAgICAgICAgICAgIGdpcGktc3BsaXQtYnV0dG9uW2dpcGktdGVydGlhcnldLCBnaXBpLXNwbGl0LWJ1dHRvbltnaXBpLWFjdGlvbl1gLFxuICAgIGV4cG9ydEFzOiAnZ2lwaVNwbGl0QnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3BsaXQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zcGxpdC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHSVBJU3BsaXRCdXR0b25Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS1zcGxpdC1idXR0b24nLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgJ1thdHRyLm5hbWVdJzogJ25hbWUnLFxuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdpbmRpY2F0b3JSb3RhdGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY2xvc2VkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdyb3RhdGUoMGRlZyknIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdvcGVuZWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3JvdGF0ZSgtMTgwZGVnKScgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignb3BlbmVkIDw9PiBjbG9zZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSknKSksXG4gICAgICAgIF0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBHSVBJU3BsaXRCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJpdmF0ZSBfdW5pcXVlSWQ6IG51bWJlciA9IG5leHRVbmlxdWVJZCsrO1xuICAgIHByaXZhdGUgX25hbWU6IHN0cmluZyA9IGBnaXBpLXNwbGl0LWJ1dHRvbi0ke3RoaXMuX3VuaXF1ZUlkfWA7XG5cbiAgICBwdWJsaWMgaWRCdG5EZWZhdWx0ID0gYGdpcGktc3BsaXQtYnV0dG9uLWRlZmF1bHQtJHt0aGlzLl91bmlxdWVJZH1gO1xuICAgIHB1YmxpYyBpZEJ0bk1lbnUgPSBgZ2lwaS1zcGxpdC1idXR0b24tbWVudS0ke3RoaXMuX3VuaXF1ZUlkfWA7XG5cbiAgICByZWFkb25seSBpc1NwbGl0QnV0dG9uUHJpbWFyeTogYm9vbGVhbiA9IHRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCdnaXBpLXByaW1hcnknKTtcbiAgICByZWFkb25seSBpc1NwbGl0QnV0dG9uU2Vjb25kYXJ5OiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktc2Vjb25kYXJ5Jyk7XG4gICAgcmVhZG9ubHkgaXNTcGxpdEJ1dHRvblRlcnRpYXJ5OiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktdGVydGlhcnknKTtcbiAgICByZWFkb25seSBpc1NwbGl0QnV0dG9uQWN0aW9uOiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktYWN0aW9uJyk7XG5cbiAgICBAVmlld0NoaWxkKEdJUElQb3BvdmVyVHJpZ2dlciwgeyBzdGF0aWM6IGZhbHNlIH0pIHBvcG92ZXJUcmlnZ2VyOiBHSVBJUG9wb3ZlclRyaWdnZXI7XG5cbiAgICBASW5wdXQoKSBpZDogc3RyaW5nID0gdGhpcy5fbmFtZTtcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IHRoaXMuX25hbWU7XG5cbiAgICBASW5wdXQoKSB0eXBlOiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyA9ICdidXR0b24nO1xuXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIGJ1dHRvbkNsYXNzOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgdG9vbHRpcDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoJ29wdGlvbnMnKSBzcGxpdE9wdGlvbnM6IFNwbGl0T3B0aW9uc1tdID0gW107XG5cbiAgICBAT3V0cHV0KCkgb25PcGVuUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoJ2NsaWNrJykgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgICBAT3V0cHV0KCdmb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gICAgQE91dHB1dCgnYmx1cicpIG9uQmx1cjogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQgeyB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9wb3ZlclRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclRyaWdnZXIuZGVzdHJveVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEhvc3RFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYXNIb3N0QXR0cmlidXRlcyguLi5hdHRyaWJ1dGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5zb21lKGF0dHJpYnV0ZSA9PiB0aGlzLmdldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBidG5JZEFuZE5hbWUoKTogeyBidG5EZWZhdWx0OiBzdHJpbmcsIGJ0bk1lbnU6IHN0cmluZyB9IHtcbiAgICAgICAgY29uc3QgdW5pcXVlSWQ6IG51bWJlciA9IG5leHRVbmlxdWVJZCsrO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnRuRGVmYXVsdDogYGdpcGktc3BsaXQtYnV0dG9uLWRlZmF1bHQtJHt1bmlxdWVJZH1gLFxuICAgICAgICAgICAgYnRuTWVudTogYGdpcGktc3BsaXQtYnV0dG9uLW1lbnUtJHt1bmlxdWVJZH1gLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEludGVybmFsQnV0dG9uQ2xhc3MoaXNCdG5EZWZhdWx0OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYnV0dG9uLWRlZmF1bHQnOiBpc0J0bkRlZmF1bHQsXG4gICAgICAgICAgICAnYnV0dG9uLW1lbnUnOiAhaXNCdG5EZWZhdWx0LFxuICAgICAgICAgICAgJ2J1dHRvbi1wcmltYXJ5JzogdGhpcy5pc1NwbGl0QnV0dG9uUHJpbWFyeSxcbiAgICAgICAgICAgICdidXR0b24tc2Vjb25kYXJ5JzogdGhpcy5pc1NwbGl0QnV0dG9uU2Vjb25kYXJ5LFxuICAgICAgICAgICAgJ2J1dHRvbi10ZXJ0aWFyeSc6IHRoaXMuaXNTcGxpdEJ1dHRvblRlcnRpYXJ5LFxuICAgICAgICAgICAgJ2J1dHRvbi1hY3Rpb24nOiB0aGlzLmlzU3BsaXRCdXR0b25BY3Rpb24sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclRyaWdnZXIub3BlblBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGb2N1cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUJsdXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUNsaWNrQnRuTWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5wb3BvdmVyVHJpZ2dlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJUcmlnZ2VyLnRvZ2dsZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUNsaWNrQnRuU3BsaXRPcHRpb24ob3B0aW9uOiBTcGxpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nIHx8ICFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkIHx8ICFvcHRpb24uY2xpY2tGbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uLmNsaWNrRm4oKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBvblJlc2l6ZShldmVudDogVUlFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
@@ -1,7 +1,11 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
3
+ let nextUniqueId = 0;
3
4
  let GIPITabComponent = class GIPITabComponent {
4
5
  constructor() {
6
+ this._name = `gipi-tab-${nextUniqueId++}`;
7
+ this.id = this._name;
8
+ this.name = this._name;
5
9
  this.active = false;
6
10
  this.closeable = false;
7
11
  this.disabled = false;
@@ -9,6 +13,14 @@ let GIPITabComponent = class GIPITabComponent {
9
13
  }
10
14
  ngOnInit() { }
11
15
  };
16
+ __decorate([
17
+ Input(),
18
+ __metadata("design:type", Object)
19
+ ], GIPITabComponent.prototype, "id", void 0);
20
+ __decorate([
21
+ Input(),
22
+ __metadata("design:type", String)
23
+ ], GIPITabComponent.prototype, "name", void 0);
12
24
  __decorate([
13
25
  Input(),
14
26
  __metadata("design:type", Number)
@@ -63,4 +75,4 @@ GIPITabComponent = __decorate([
63
75
  __metadata("design:paramtypes", [])
64
76
  ], GIPITabComponent);
65
77
  export { GIPITabComponent };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvdGFicy90YWIvdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZNUYsSUFBYSxnQkFBZ0IsR0FBN0IsTUFBYSxnQkFBZ0I7SUF1QnpCO1FBakJTLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFJeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBU3pCLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFbEQsQ0FBQztJQUVqQixRQUFRLEtBQVcsQ0FBQztDQUV2QixDQUFBO0FBekJZO0lBQVIsS0FBSyxFQUFFOzsrQ0FBZTtBQUVkO0lBQVIsS0FBSyxFQUFFOzsrQ0FBZTtBQUVkO0lBQVIsS0FBSyxFQUFFOztnREFBeUI7QUFFeEI7SUFBUixLQUFLLEVBQUU7OEJBQVcsV0FBVztrREFBTTtBQUUzQjtJQUFSLEtBQUssRUFBRTs7bURBQTRCO0FBRTNCO0lBQVIsS0FBSyxFQUFFOztrREFBMkI7QUFFMUI7SUFBUixLQUFLLEVBQUU7OzhDQUFXO0FBRVY7SUFBUixLQUFLLEVBQUU7OzhDQUFjO0FBQ2I7SUFBUixLQUFLLEVBQUU7O2lEQUFpQjtBQUlmO0lBQVQsTUFBTSxFQUFFOzhCQUFrQixZQUFZO3lEQUEyQjtBQXJCekQsZ0JBQWdCO0lBVjVCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLDhRQUFtQztRQUVuQyxJQUFJLEVBQUU7WUFDRixPQUFPLEVBQUUsVUFBVTtZQUNuQixpQkFBaUIsRUFBRSw0QkFBNEI7U0FDbEQ7O0tBQ0osQ0FBQzs7R0FDVyxnQkFBZ0IsQ0EyQjVCO1NBM0JZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2lwaS10YWInLFxuICAgIGV4cG9ydEFzOiAnZ2lwaVRhYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS10YWInLFxuICAgICAgICAnW3N0eWxlLmRpc3BsYXldJzogJyFhY3RpdmUgPyBcIm5vbmVcIiA6IFwiYmxvY2tcIicsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR0lQSVRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBjbG9zZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBkYXRhOiBhbnk7XG5cbiAgICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3ZnSWNvbjogc3RyaW5nO1xuXG4gICAgYWN0aW9uOiAob2JqOiBhbnkpID0+IHZvaWQ7XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG59XG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvdGFicy90YWIvdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUYsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBWXJCLElBQWEsZ0JBQWdCLEdBQTdCLE1BQWEsZ0JBQWdCO0lBNkJ6QjtRQTNCUSxVQUFLLEdBQVcsWUFBWSxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBRTVDLE9BQUUsR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVqQyxTQUFJLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQU0xQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBSXhCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFM0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQVN6QixvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRWxELENBQUM7SUFFakIsUUFBUSxLQUFXLENBQUM7Q0FFdkIsQ0FBQTtBQTdCWTtJQUFSLEtBQUssRUFBRTs7NENBQWtDO0FBRWpDO0lBQVIsS0FBSyxFQUFFOzs4Q0FBMkI7QUFFMUI7SUFBUixLQUFLLEVBQUU7OytDQUFlO0FBRWQ7SUFBUixLQUFLLEVBQUU7OytDQUFlO0FBRWQ7SUFBUixLQUFLLEVBQUU7O2dEQUF5QjtBQUV4QjtJQUFSLEtBQUssRUFBRTs4QkFBVyxXQUFXO2tEQUFNO0FBRTNCO0lBQVIsS0FBSyxFQUFFOzttREFBNEI7QUFFM0I7SUFBUixLQUFLLEVBQUU7O2tEQUEyQjtBQUUxQjtJQUFSLEtBQUssRUFBRTs7OENBQVc7QUFFVjtJQUFSLEtBQUssRUFBRTs7OENBQWM7QUFDYjtJQUFSLEtBQUssRUFBRTs7aURBQWlCO0FBSWY7SUFBVCxNQUFNLEVBQUU7OEJBQWtCLFlBQVk7eURBQTJCO0FBM0J6RCxnQkFBZ0I7SUFWNUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLFVBQVU7UUFDcEIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsOFFBQW1DO1FBRW5DLElBQUksRUFBRTtZQUNGLE9BQU8sRUFBRSxVQUFVO1lBQ25CLGlCQUFpQixFQUFFLDRCQUE0QjtTQUNsRDs7S0FDSixDQUFDOztHQUNXLGdCQUFnQixDQWlDNUI7U0FqQ1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2lwaS10YWInLFxuICAgIGV4cG9ydEFzOiAnZ2lwaVRhYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS10YWInLFxuICAgICAgICAnW3N0eWxlLmRpc3BsYXldJzogJyFhY3RpdmUgPyBcIm5vbmVcIiA6IFwiYmxvY2tcIicsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR0lQSVRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSBgZ2lwaS10YWItJHtuZXh0VW5pcXVlSWQrK31gO1xuXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IG51bWJlciA9IHRoaXMuX25hbWU7XG5cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSB0aGlzLl9uYW1lO1xuXG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgY2xvc2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZGF0YTogYW55O1xuXG4gICAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHN2Z0ljb246IHN0cmluZztcblxuICAgIGFjdGlvbjogKG9iajogYW55KSA9PiB2b2lkO1xuXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxufVxuIl19