@fundamental-ngx/btp 0.46.0-rc.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +7 -0
  2. package/esm2022/fundamental-ngx-btp.mjs +5 -0
  3. package/esm2022/index.mjs +3 -0
  4. package/esm2022/navigation/directives/navigation-home.directive.mjs +19 -0
  5. package/esm2022/navigation/directives/navigation-list-spacer.directive.mjs +24 -0
  6. package/esm2022/navigation/fundamental-ngx-btp-navigation.mjs +5 -0
  7. package/esm2022/navigation/index.mjs +11 -0
  8. package/esm2022/navigation/navigation-component.token.mjs +22 -0
  9. package/esm2022/navigation/navigation-content-end.component.mjs +62 -0
  10. package/esm2022/navigation/navigation-content-start.component.mjs +207 -0
  11. package/esm2022/navigation/navigation-content.token.mjs +3 -0
  12. package/esm2022/navigation/navigation-link.component.mjs +188 -0
  13. package/esm2022/navigation/navigation-list/navigation-list-item.component.mjs +423 -0
  14. package/esm2022/navigation/navigation-list/navigation-list-overflow-item.component.mjs +57 -0
  15. package/esm2022/navigation/navigation-list/navigation-list.component.mjs +125 -0
  16. package/esm2022/navigation/navigation-list-component.token.mjs +3 -0
  17. package/esm2022/navigation/navigation-list-item-component.token.mjs +90 -0
  18. package/esm2022/navigation/navigation.component.mjs +251 -0
  19. package/esm2022/navigation/navigation.service.mjs +14 -0
  20. package/esm2022/navigation/navigation.types.mjs +2 -0
  21. package/esm2022/navigation-menu/fundamental-ngx-btp-navigation-menu.mjs +5 -0
  22. package/esm2022/navigation-menu/index.mjs +6 -0
  23. package/esm2022/navigation-menu/lib/navigation-menu-item.component.mjs +48 -0
  24. package/esm2022/navigation-menu/lib/navigation-menu-popover-control.directive.mjs +19 -0
  25. package/esm2022/navigation-menu/lib/navigation-menu-popover.component.mjs +38 -0
  26. package/esm2022/navigation-menu/lib/navigation-menu.component.mjs +13 -0
  27. package/esm2022/navigation-menu/lib/navigation-menu.module.mjs +17 -0
  28. package/esm2022/search-field/fundamental-ngx-btp-search-field.mjs +5 -0
  29. package/esm2022/search-field/index.mjs +2 -0
  30. package/esm2022/search-field/search-field.component.mjs +62 -0
  31. package/esm2022/shared/fundamental-ngx-btp-shared.mjs +5 -0
  32. package/esm2022/shared/index.mjs +2 -0
  33. package/esm2022/tool-header/components/tool-header/tool-header.component.mjs +227 -0
  34. package/esm2022/tool-header/components/tool-header-product-switch.component.mjs +102 -0
  35. package/esm2022/tool-header/directives/tool-header-action.directive.mjs +43 -0
  36. package/esm2022/tool-header/directives/tool-header-actions.directive.mjs +63 -0
  37. package/esm2022/tool-header/directives/tool-header-auto-mode.directive.mjs +114 -0
  38. package/esm2022/tool-header/directives/tool-header-button.directive.mjs +51 -0
  39. package/esm2022/tool-header/directives/tool-header-element.directive.mjs +17 -0
  40. package/esm2022/tool-header/directives/tool-header-group.directive.mjs +26 -0
  41. package/esm2022/tool-header/directives/tool-header-logo.directive.mjs +19 -0
  42. package/esm2022/tool-header/directives/tool-header-user.directive.mjs +14 -0
  43. package/esm2022/tool-header/fundamental-ngx-btp-tool-header.mjs +5 -0
  44. package/esm2022/tool-header/index.mjs +10 -0
  45. package/esm2022/tool-header/tool-header-action-button.type.mjs +2 -0
  46. package/esm2022/tool-header/tool-header-component.class.mjs +74 -0
  47. package/esm2022/tool-header/tool-header-state.type.mjs +2 -0
  48. package/esm2022/tool-layout/directives/tool-layout-container.directive.mjs +17 -0
  49. package/esm2022/tool-layout/directives/tool-layout-content-container.directive.mjs +50 -0
  50. package/esm2022/tool-layout/directives/tool-layout-header-container.directive.mjs +17 -0
  51. package/esm2022/tool-layout/directives/tool-layout-navigation-container.directive.mjs +37 -0
  52. package/esm2022/tool-layout/fundamental-ngx-btp-tool-layout.mjs +5 -0
  53. package/esm2022/tool-layout/index.mjs +7 -0
  54. package/esm2022/tool-layout/tool-layout.component.mjs +43 -0
  55. package/esm2022/tool-layout/tool-layout.module.mjs +40 -0
  56. package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs +130 -0
  57. package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs.map +1 -0
  58. package/fesm2022/fundamental-ngx-btp-navigation.mjs +1409 -0
  59. package/fesm2022/fundamental-ngx-btp-navigation.mjs.map +1 -0
  60. package/fesm2022/fundamental-ngx-btp-search-field.mjs +69 -0
  61. package/fesm2022/fundamental-ngx-btp-search-field.mjs.map +1 -0
  62. package/fesm2022/fundamental-ngx-btp-shared.mjs +4 -0
  63. package/fesm2022/fundamental-ngx-btp-shared.mjs.map +1 -0
  64. package/fesm2022/fundamental-ngx-btp-tool-header.mjs +717 -0
  65. package/fesm2022/fundamental-ngx-btp-tool-header.mjs.map +1 -0
  66. package/fesm2022/fundamental-ngx-btp-tool-layout.mjs +194 -0
  67. package/fesm2022/fundamental-ngx-btp-tool-layout.mjs.map +1 -0
  68. package/fesm2022/fundamental-ngx-btp.mjs +7 -0
  69. package/fesm2022/fundamental-ngx-btp.mjs.map +1 -0
  70. package/fundamental-ngx-btp-v0.46.0-rc.100.tgz +0 -0
  71. package/index.d.ts +2 -0
  72. package/navigation/README.md +3 -0
  73. package/navigation/directives/navigation-home.directive.d.ts +10 -0
  74. package/navigation/directives/navigation-list-spacer.directive.d.ts +8 -0
  75. package/navigation/index.d.ts +10 -0
  76. package/navigation/navigation-component.token.d.ts +34 -0
  77. package/navigation/navigation-content-end.component.d.ts +23 -0
  78. package/navigation/navigation-content-start.component.d.ts +54 -0
  79. package/navigation/navigation-content.token.d.ts +11 -0
  80. package/navigation/navigation-link.component.d.ts +49 -0
  81. package/navigation/navigation-list/navigation-list-item.component.d.ts +142 -0
  82. package/navigation/navigation-list/navigation-list-overflow-item.component.d.ts +16 -0
  83. package/navigation/navigation-list/navigation-list.component.d.ts +60 -0
  84. package/navigation/navigation-list-component.token.d.ts +17 -0
  85. package/navigation/navigation-list-item-component.token.d.ts +68 -0
  86. package/navigation/navigation.component.d.ts +82 -0
  87. package/navigation/navigation.service.d.ts +8 -0
  88. package/navigation/navigation.types.d.ts +2 -0
  89. package/navigation-menu/README.md +3 -0
  90. package/navigation-menu/index.d.ts +5 -0
  91. package/navigation-menu/lib/navigation-menu-item.component.d.ts +13 -0
  92. package/navigation-menu/lib/navigation-menu-popover-control.directive.d.ts +10 -0
  93. package/navigation-menu/lib/navigation-menu-popover.component.d.ts +11 -0
  94. package/navigation-menu/lib/navigation-menu.component.d.ts +5 -0
  95. package/navigation-menu/lib/navigation-menu.module.d.ts +8 -0
  96. package/package.json +63 -0
  97. package/search-field/README.md +3 -0
  98. package/search-field/index.d.ts +1 -0
  99. package/search-field/search-field.component.d.ts +34 -0
  100. package/shared/README.md +3 -0
  101. package/shared/index.d.ts +1 -0
  102. package/tool-header/README.md +3 -0
  103. package/tool-header/components/tool-header/tool-header.component.d.ts +91 -0
  104. package/tool-header/components/tool-header-product-switch.component.d.ts +11 -0
  105. package/tool-header/directives/tool-header-action.directive.d.ts +35 -0
  106. package/tool-header/directives/tool-header-actions.directive.d.ts +27 -0
  107. package/tool-header/directives/tool-header-auto-mode.directive.d.ts +68 -0
  108. package/tool-header/directives/tool-header-button.directive.d.ts +22 -0
  109. package/tool-header/directives/tool-header-element.directive.d.ts +5 -0
  110. package/tool-header/directives/tool-header-group.directive.d.ts +12 -0
  111. package/tool-header/directives/tool-header-logo.directive.d.ts +5 -0
  112. package/tool-header/directives/tool-header-user.directive.d.ts +5 -0
  113. package/tool-header/index.d.ts +9 -0
  114. package/tool-header/tool-header-action-button.type.d.ts +10 -0
  115. package/tool-header/tool-header-component.class.d.ts +20 -0
  116. package/tool-header/tool-header-state.type.d.ts +14 -0
  117. package/tool-layout/README.md +3 -0
  118. package/tool-layout/directives/tool-layout-container.directive.d.ts +5 -0
  119. package/tool-layout/directives/tool-layout-content-container.directive.d.ts +29 -0
  120. package/tool-layout/directives/tool-layout-header-container.directive.d.ts +5 -0
  121. package/tool-layout/directives/tool-layout-navigation-container.directive.d.ts +13 -0
  122. package/tool-layout/index.d.ts +6 -0
  123. package/tool-layout/tool-layout.component.d.ts +27 -0
  124. package/tool-layout/tool-layout.module.d.ts +11 -0
@@ -0,0 +1,227 @@
1
+ /* eslint-disable @angular-eslint/no-input-rename */
2
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
+ import { AsyncPipe, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
4
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostListener, Input, NgZone, Output, ViewEncapsulation, inject } from '@angular/core';
5
+ import { NavigationMenuComponent, NavigationMenuItemComponent, NavigationMenuPopoverComponent, NavigationMenuPopoverControlDirective } from '@fundamental-ngx/btp/navigation-menu';
6
+ import { SearchFieldComponent } from '@fundamental-ngx/btp/search-field';
7
+ import { FD_PRODUCT_SWITCH_COMPONENT, FocusableItemDirective, FocusableListDirective } from '@fundamental-ngx/core';
8
+ import { ButtonComponent } from '@fundamental-ngx/core/button';
9
+ import { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
10
+ import { IconComponent } from '@fundamental-ngx/core/icon';
11
+ import { GlyphMenuAddonDirective, MenuAddonDirective, MenuComponent, MenuInteractiveComponent, MenuItemComponent, MenuTitleDirective, MenuTriggerDirective } from '@fundamental-ngx/core/menu';
12
+ import { OverflowExpandDirective, OverflowItemRefDirective, OverflowLayoutComponent, OverflowLayoutItemDirective } from '@fundamental-ngx/core/overflow-layout';
13
+ import { PopoverBodyDirective, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';
14
+ import { FdTranslatePipe } from '@fundamental-ngx/i18n';
15
+ import { first } from 'rxjs';
16
+ import { ToolHeaderActionsDirective } from '../../directives/tool-header-actions.directive';
17
+ import { ToolHeaderButtonDirective } from '../../directives/tool-header-button.directive';
18
+ import { ToolHeaderElementDirective } from '../../directives/tool-header-element.directive';
19
+ import { ToolHeaderGroupDirective } from '../../directives/tool-header-group.directive';
20
+ import { ToolHeaderLogoDirective } from '../../directives/tool-header-logo.directive';
21
+ import { ToolHeaderUserDirective } from '../../directives/tool-header-user.directive';
22
+ import { ToolHeaderComponentClass } from '../../tool-header-component.class';
23
+ import * as i0 from "@angular/core";
24
+ const imports = [
25
+ ToolHeaderGroupDirective,
26
+ NgIf,
27
+ NgTemplateOutlet,
28
+ OverflowLayoutComponent,
29
+ NgForOf,
30
+ OverflowLayoutItemDirective,
31
+ OverflowItemRefDirective,
32
+ OverflowExpandDirective,
33
+ PopoverComponent,
34
+ PopoverControlComponent,
35
+ PopoverBodyDirective,
36
+ MenuTriggerDirective,
37
+ MenuComponent,
38
+ MenuItemComponent,
39
+ MenuInteractiveComponent,
40
+ MenuTitleDirective,
41
+ MenuAddonDirective,
42
+ GlyphMenuAddonDirective,
43
+ ToolHeaderElementDirective,
44
+ IconComponent,
45
+ ButtonComponent,
46
+ ToolHeaderButtonDirective,
47
+ ToolHeaderLogoDirective,
48
+ FdTranslatePipe
49
+ ];
50
+ export class ToolHeaderComponent extends ToolHeaderComponentClass {
51
+ constructor() {
52
+ super(...arguments);
53
+ /**
54
+ * Whether to show the voice input action button on
55
+ * the right side of the tool header, when the mode is mobile
56
+ * and the search input is expanded
57
+ */
58
+ this.showVoiceInputAction = true;
59
+ /**
60
+ * Event emitted when the menu button is clicked
61
+ **/
62
+ this.menuClick = new EventEmitter();
63
+ /**
64
+ * Event emitted when user intends to expand the menu.
65
+ * Happens when user clicks `right arrow` key on the menu button
66
+ * if on ltr or `left arrow` key if on rtl.
67
+ **/
68
+ this.menuExpand = new EventEmitter();
69
+ /**
70
+ * Event emitted when user intends to collapse the menu.
71
+ * Happens when user clicks `left arrow` key on the menu button
72
+ * if on ltr or `right arrow` key if on rtl.
73
+ **/
74
+ this.menuCollapse = new EventEmitter();
75
+ /**
76
+ * Event emitted when the microphone button is clicked
77
+ **/
78
+ this.microphoneClick = new EventEmitter();
79
+ /**
80
+ * Event emitted when the default logo is clicked
81
+ */
82
+ this.logoClick = new EventEmitter();
83
+ /** @hidden */
84
+ this._ngZone = inject(NgZone);
85
+ }
86
+ /** Mode */
87
+ set _mode(mode) {
88
+ if (mode !== this.mode()) {
89
+ this.mode.set(mode);
90
+ }
91
+ }
92
+ /** @hidden */
93
+ set _orientation(orientation) {
94
+ if (orientation !== this.orientation()) {
95
+ this.orientation.set(orientation);
96
+ }
97
+ }
98
+ /** @hidden */
99
+ set _searchField(searchField) {
100
+ this.searchField.set(searchField);
101
+ }
102
+ /**
103
+ * The handler, responsible for closing the search field
104
+ * on outside click
105
+ * @hidden
106
+ **/
107
+ _onClick(event) {
108
+ if (this.searchFieldExpanded()) {
109
+ if (this.mode() === 'tablet' &&
110
+ this.orientation() === 'portrait' &&
111
+ this.searchField() &&
112
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
113
+ !event.composedPath().includes(this.searchField().elementRef.nativeElement)) {
114
+ this.searchFieldExpanded.set(false);
115
+ }
116
+ }
117
+ }
118
+ /** @hidden */
119
+ ngOnDestroy() {
120
+ if (this._searchFieldOutsideClickSubscription) {
121
+ this._searchFieldOutsideClickSubscription.unsubscribe();
122
+ }
123
+ }
124
+ /**
125
+ * Expand the search field
126
+ **/
127
+ expandSearchField() {
128
+ this.searchFieldExpanded.set(true);
129
+ this._ngZone.onStable.pipe(first()).subscribe(() => {
130
+ this.searchField()?.focus();
131
+ });
132
+ }
133
+ /** @hidden */
134
+ _handleMenuLeftArrowKey() {
135
+ if (this._rtl()) {
136
+ this.menuExpand.emit();
137
+ }
138
+ else {
139
+ this.menuCollapse.emit();
140
+ }
141
+ }
142
+ /** @hidden */
143
+ _handleMenuRightArrowKey() {
144
+ if (this._rtl()) {
145
+ this.menuCollapse.emit();
146
+ }
147
+ else {
148
+ this.menuExpand.emit();
149
+ }
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
152
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ToolHeaderComponent, isStandalone: true, selector: "fdb-tool-header", inputs: { productName: "productName", secondTitle: "secondTitle", _mode: ["mode", "_mode"], _orientation: ["orientation", "_orientation"], showMenuButton: ["showMenuButton", "showMenuButton", coerceBooleanProperty], showVoiceInputAction: ["showVoiceInputAction", "showVoiceInputAction", coerceBooleanProperty] }, outputs: { menuClick: "menuClick", menuExpand: "menuExpand", menuCollapse: "menuCollapse", microphoneClick: "microphoneClick", logoClick: "logoClick" }, host: { listeners: { "document:click": "_onClick($event)" }, properties: { "class.fd-tool-header--menu": "showMenuButton" }, classAttribute: "fd-tool-header" }, providers: [
153
+ contentDensityObserverProviders(),
154
+ {
155
+ provide: ToolHeaderComponentClass,
156
+ useExisting: ToolHeaderComponent
157
+ }
158
+ ], queries: [{ propertyName: "_toolHeaderActionsDirective", first: true, predicate: ToolHeaderActionsDirective, descendants: true }, { propertyName: "_toolHeaderLogoDirective", first: true, predicate: ToolHeaderLogoDirective, descendants: true }, { propertyName: "_searchField", first: true, predicate: SearchFieldComponent, descendants: true }, { propertyName: "_toolHeaderUser", first: true, predicate: ToolHeaderUserDirective, descendants: true }, { propertyName: "_toolHeaderProductSwitch", first: true, predicate: FD_PRODUCT_SWITCH_COMPONENT, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div fdbToolHeaderGroup [class.fd-tool-header--menu]=\"showMenuButton\">\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().backButtonVisible\">\n <button fd-button fdbToolHeaderButton glyph=\"slim-arrow-left\" (click)=\"searchFieldExpanded.set(false)\"></button>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().menuButtonVisible && showMenuButton\">\n <button\n fd-button\n fdbToolHeaderButton\n [title]=\"'btpToolHeader.menuButtonAriaLabel' | fdTranslate\"\n [ariaLabel]=\"'btpToolHeader.menuButtonAriaLabel' | fdTranslate\"\n glyph=\"menu2\"\n (keydown.arrowLeft)=\"_handleMenuLeftArrowKey()\"\n (keydown.arrowRight)=\"_handleMenuRightArrowKey()\"\n (click)=\"menuClick.emit()\"\n ></button>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().logoVisible\">\n <ng-container *ngIf=\"_toolHeaderLogoDirective; else defaultLogo\">\n <ng-content select=\"[fdbToolHeaderLogo]\"></ng-content>\n </ng-container>\n <ng-template #defaultLogo>\n <img\n fdbToolHeaderLogo\n (click)=\"logoClick.emit()\"\n src=\"https://unpkg.com/fundamental-styles/dist/images/sap-logo.png\"\n srcset=\"\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@2x.png 1x,\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@3x.png 2x,\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@4x.png 3x\n \"\n alt=\"SAP logo\"\n aria-label=\"SAP logo\"\n title=\"SAP logo\"\n />\n </ng-template>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().productNameVisible\">\n <h1 class=\"fd-tool-header__product-name\">\n {{ productName }}\n </h1>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().secondTitleVisible && secondTitle\">\n <div class=\"fd-tool-header__second-title\">\n {{ secondTitle }}\n </div>\n </div>\n</div>\n\n<div fdbToolHeaderGroup center *ngIf=\"fdbToolHeaderState().searchFieldVisible\">\n <ng-content select=\"fdb-search-field\"></ng-content>\n</div>\n\n<div fdbToolHeaderGroup actions>\n <fd-overflow-layout fdbToolHeaderElement [style.justify-content]=\"'end'\">\n <ng-container *ngIf=\"fdbToolHeaderState().searchFieldToggleActionVisible\">\n <div fdbToolHeaderElement *fdOverflowItemRef=\"let hidden\" [forceVisibility]=\"true\" fdOverflowLayoutItem>\n <button\n fd-button\n fdbToolHeaderButton\n glyph=\"search\"\n (click)=\"$event.stopPropagation(); expandSearchField()\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"fdbToolHeaderState().providedActionsVisible\">\n <ng-container *ngFor=\"let action of _toolHeaderActionsDirective?._actions()\">\n <div\n fdbToolHeaderElement\n *fdOverflowItemRef=\"let hidden\"\n [forceVisibility]=\"!!action.forceVisibility\"\n fdOverflowLayoutItem\n >\n <ng-template\n [ngIf]=\"!!action.templateRef\"\n [ngIfThen]=\"$any(action.templateRef)\"\n [ngIfElse]=\"defaultActionButtonTemplate\"\n ></ng-template>\n <ng-template #defaultActionButtonTemplate>\n <button\n fd-button\n fdbToolHeaderButton\n [glyph]=\"action.glyph\"\n (click)=\"action.clickCallback()\"\n [ariaLabel]=\"action.label\"\n >\n <span class=\"fd-button__badge\" *ngIf=\"action.hasBadge\"></span>\n </button>\n </ng-template>\n <div\n class=\"fd-tool-header__separator\"\n *ngIf=\"action.hasSeparator && fdbToolHeaderState().separatorsBetweenActionsVisible\"\n ></div>\n </div>\n </ng-container>\n </ng-container>\n\n <fdb-navigation-menu-popover *fdOverflowExpand=\"let overflowItems\" fdbToolHeaderElement>\n <button *fdbNavigationMenuPopoverControl fd-button fdbToolHeaderButton glyph=\"overflow\"></button>\n <ul *fdPopoverBody fdkFocusableList [wrap]=\"true\" fdb-navigation-menu>\n <ng-container *ngFor=\"let item of overflowItems\">\n <ng-container *ngIf=\"_toolHeaderActionsDirective?._actions() as actions\">\n <li\n *ngIf=\"\n fdbToolHeaderState().searchFieldToggleActionVisible\n ? actions[item.globalIndex - 1]\n : actions[item.globalIndex] as action\n \"\n fdb-navigation-menu-item\n fdkFocusableItem\n [glyph]=\"action.glyph\"\n (click)=\"action.clickCallback()\"\n [label]=\"action.label\"\n ></li>\n </ng-container>\n </ng-container>\n </ul>\n </fdb-navigation-menu-popover>\n </fd-overflow-layout>\n <ng-container *ngIf=\"fdbToolHeaderState().userAvatarVisible && _toolHeaderUser\">\n <div fdbToolHeaderElement>\n <div class=\"fd-tool-header__separator\"></div>\n <ng-content select=\"[fdbToolHeaderUser]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"fdbToolHeaderState().productSwitchVisible && _toolHeaderProductSwitch\">\n <div fdbToolHeaderElement>\n <div class=\"fd-tool-header__separator\"></div>\n <ng-content select=\"fdb-tool-header-product-switch, fd-product-switch\"></ng-content>\n </div>\n </ng-container>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().voiceInputVisible\">\n <button\n fd-button\n fdbToolHeaderButton\n glyph=\"microphone\"\n [ariaLabel]=\"'Search with voice'\"\n (click)=\"microphoneClick.emit()\"\n ></button>\n </div>\n</div>\n", styles: ["@import\"../../../../../../node_modules/fundamental-styles/dist/tool-header.css\";.fd-popover__body.fdb-tool-header-actions-overflow-popover-body{--fdPopover_Offset: .3875rem;width:auto;height:auto;padding:.5rem;background:var(--sapGroup_ContentBackground);border:none;border-radius:.5rem;box-shadow:var(--sapMenu_Shadow1)}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu{--fdMenu_Item_Spacing_Left: 0}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link{--fdMenu_Link_Height: 2rem;border-radius:.375rem}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link:focus:after{display:none}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link:focus:before{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:.375rem;inset:.125rem;content:\"\";pointer-events:none;position:absolute}\n"], dependencies: [{ kind: "directive", type: ToolHeaderGroupDirective, selector: "[fdbToolHeaderGroup]", inputs: ["center", "actions"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OverflowLayoutComponent, selector: "fd-overflow-layout", inputs: ["maxVisibleItems", "navigationTrigger", "showMorePosition", "reverseHiddenItems", "enableKeyboardNavigation", "moreItemsButtonText"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: OverflowLayoutItemDirective, selector: "[fdOverflowLayoutItem]", inputs: ["forceVisibility"], outputs: ["hiddenChange"] }, { kind: "directive", type: OverflowItemRefDirective, selector: "[fdOverflowItemRef]", inputs: ["fdOverflowItemRef"] }, { kind: "directive", type: OverflowExpandDirective, selector: "[fdOverflowExpand]", inputs: ["fdOverflowExpandItems"] }, { kind: "directive", type: PopoverBodyDirective, selector: "[fdPopoverBody]" }, { kind: "directive", type: ToolHeaderElementDirective, selector: "[fdbToolHeaderElement]" }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: ToolHeaderButtonDirective, selector: "[fd-button][fdbToolHeaderButton]", inputs: ["hasBadge"] }, { kind: "directive", type: ToolHeaderLogoDirective, selector: "[fdbToolHeaderLogo]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "component", type: NavigationMenuComponent, selector: "fdb-navigation-menu, ul[fdb-navigation-menu]" }, { kind: "component", type: NavigationMenuItemComponent, selector: "fdb-navigation-menu-item, li[fdb-navigation-menu-item]", inputs: ["glyph", "label"] }, { kind: "directive", type: FocusableListDirective, selector: "[fdkFocusableList]", inputs: ["focusable", "navigationDirection", "contentDirection", "wrap", "listFocusedEventAnnouncer"], outputs: ["itemFocused"], exportAs: ["fdkFocusableList"] }, { kind: "directive", type: FocusableItemDirective, selector: "[fdkFocusableItem]", inputs: ["fdkFocusableItem", "cellFocusedEventAnnouncer"], outputs: ["cellFocused"] }, { kind: "component", type: NavigationMenuPopoverComponent, selector: "fdb-navigation-menu-popover" }, { kind: "directive", type: NavigationMenuPopoverControlDirective, selector: "[fdbNavigationMenuPopoverControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
159
+ }
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderComponent, decorators: [{
161
+ type: Component,
162
+ args: [{ selector: 'fdb-tool-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
163
+ class: 'fd-tool-header',
164
+ '[class.fd-tool-header--menu]': 'showMenuButton'
165
+ }, imports: [
166
+ imports,
167
+ NavigationMenuComponent,
168
+ NavigationMenuItemComponent,
169
+ FocusableListDirective,
170
+ FocusableItemDirective,
171
+ NavigationMenuPopoverComponent,
172
+ NavigationMenuPopoverControlDirective,
173
+ AsyncPipe
174
+ ], providers: [
175
+ contentDensityObserverProviders(),
176
+ {
177
+ provide: ToolHeaderComponentClass,
178
+ useExisting: ToolHeaderComponent
179
+ }
180
+ ], template: "<div fdbToolHeaderGroup [class.fd-tool-header--menu]=\"showMenuButton\">\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().backButtonVisible\">\n <button fd-button fdbToolHeaderButton glyph=\"slim-arrow-left\" (click)=\"searchFieldExpanded.set(false)\"></button>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().menuButtonVisible && showMenuButton\">\n <button\n fd-button\n fdbToolHeaderButton\n [title]=\"'btpToolHeader.menuButtonAriaLabel' | fdTranslate\"\n [ariaLabel]=\"'btpToolHeader.menuButtonAriaLabel' | fdTranslate\"\n glyph=\"menu2\"\n (keydown.arrowLeft)=\"_handleMenuLeftArrowKey()\"\n (keydown.arrowRight)=\"_handleMenuRightArrowKey()\"\n (click)=\"menuClick.emit()\"\n ></button>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().logoVisible\">\n <ng-container *ngIf=\"_toolHeaderLogoDirective; else defaultLogo\">\n <ng-content select=\"[fdbToolHeaderLogo]\"></ng-content>\n </ng-container>\n <ng-template #defaultLogo>\n <img\n fdbToolHeaderLogo\n (click)=\"logoClick.emit()\"\n src=\"https://unpkg.com/fundamental-styles/dist/images/sap-logo.png\"\n srcset=\"\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@2x.png 1x,\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@3x.png 2x,\n https://unpkg.com/fundamental-styles/dist/images/sap-logo@4x.png 3x\n \"\n alt=\"SAP logo\"\n aria-label=\"SAP logo\"\n title=\"SAP logo\"\n />\n </ng-template>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().productNameVisible\">\n <h1 class=\"fd-tool-header__product-name\">\n {{ productName }}\n </h1>\n </div>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().secondTitleVisible && secondTitle\">\n <div class=\"fd-tool-header__second-title\">\n {{ secondTitle }}\n </div>\n </div>\n</div>\n\n<div fdbToolHeaderGroup center *ngIf=\"fdbToolHeaderState().searchFieldVisible\">\n <ng-content select=\"fdb-search-field\"></ng-content>\n</div>\n\n<div fdbToolHeaderGroup actions>\n <fd-overflow-layout fdbToolHeaderElement [style.justify-content]=\"'end'\">\n <ng-container *ngIf=\"fdbToolHeaderState().searchFieldToggleActionVisible\">\n <div fdbToolHeaderElement *fdOverflowItemRef=\"let hidden\" [forceVisibility]=\"true\" fdOverflowLayoutItem>\n <button\n fd-button\n fdbToolHeaderButton\n glyph=\"search\"\n (click)=\"$event.stopPropagation(); expandSearchField()\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"fdbToolHeaderState().providedActionsVisible\">\n <ng-container *ngFor=\"let action of _toolHeaderActionsDirective?._actions()\">\n <div\n fdbToolHeaderElement\n *fdOverflowItemRef=\"let hidden\"\n [forceVisibility]=\"!!action.forceVisibility\"\n fdOverflowLayoutItem\n >\n <ng-template\n [ngIf]=\"!!action.templateRef\"\n [ngIfThen]=\"$any(action.templateRef)\"\n [ngIfElse]=\"defaultActionButtonTemplate\"\n ></ng-template>\n <ng-template #defaultActionButtonTemplate>\n <button\n fd-button\n fdbToolHeaderButton\n [glyph]=\"action.glyph\"\n (click)=\"action.clickCallback()\"\n [ariaLabel]=\"action.label\"\n >\n <span class=\"fd-button__badge\" *ngIf=\"action.hasBadge\"></span>\n </button>\n </ng-template>\n <div\n class=\"fd-tool-header__separator\"\n *ngIf=\"action.hasSeparator && fdbToolHeaderState().separatorsBetweenActionsVisible\"\n ></div>\n </div>\n </ng-container>\n </ng-container>\n\n <fdb-navigation-menu-popover *fdOverflowExpand=\"let overflowItems\" fdbToolHeaderElement>\n <button *fdbNavigationMenuPopoverControl fd-button fdbToolHeaderButton glyph=\"overflow\"></button>\n <ul *fdPopoverBody fdkFocusableList [wrap]=\"true\" fdb-navigation-menu>\n <ng-container *ngFor=\"let item of overflowItems\">\n <ng-container *ngIf=\"_toolHeaderActionsDirective?._actions() as actions\">\n <li\n *ngIf=\"\n fdbToolHeaderState().searchFieldToggleActionVisible\n ? actions[item.globalIndex - 1]\n : actions[item.globalIndex] as action\n \"\n fdb-navigation-menu-item\n fdkFocusableItem\n [glyph]=\"action.glyph\"\n (click)=\"action.clickCallback()\"\n [label]=\"action.label\"\n ></li>\n </ng-container>\n </ng-container>\n </ul>\n </fdb-navigation-menu-popover>\n </fd-overflow-layout>\n <ng-container *ngIf=\"fdbToolHeaderState().userAvatarVisible && _toolHeaderUser\">\n <div fdbToolHeaderElement>\n <div class=\"fd-tool-header__separator\"></div>\n <ng-content select=\"[fdbToolHeaderUser]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"fdbToolHeaderState().productSwitchVisible && _toolHeaderProductSwitch\">\n <div fdbToolHeaderElement>\n <div class=\"fd-tool-header__separator\"></div>\n <ng-content select=\"fdb-tool-header-product-switch, fd-product-switch\"></ng-content>\n </div>\n </ng-container>\n <div fdbToolHeaderElement *ngIf=\"fdbToolHeaderState().voiceInputVisible\">\n <button\n fd-button\n fdbToolHeaderButton\n glyph=\"microphone\"\n [ariaLabel]=\"'Search with voice'\"\n (click)=\"microphoneClick.emit()\"\n ></button>\n </div>\n</div>\n", styles: ["@import\"../../../../../../node_modules/fundamental-styles/dist/tool-header.css\";.fd-popover__body.fdb-tool-header-actions-overflow-popover-body{--fdPopover_Offset: .3875rem;width:auto;height:auto;padding:.5rem;background:var(--sapGroup_ContentBackground);border:none;border-radius:.5rem;box-shadow:var(--sapMenu_Shadow1)}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu{--fdMenu_Item_Spacing_Left: 0}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link{--fdMenu_Link_Height: 2rem;border-radius:.375rem}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link:focus:after{display:none}.fd-popover__body.fdb-tool-header-actions-overflow-popover-body .fd-menu .fd-menu__link:focus:before{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:.375rem;inset:.125rem;content:\"\";pointer-events:none;position:absolute}\n"] }]
181
+ }], propDecorators: { productName: [{
182
+ type: Input,
183
+ args: [{ required: true }]
184
+ }], secondTitle: [{
185
+ type: Input
186
+ }], _mode: [{
187
+ type: Input,
188
+ args: ['mode']
189
+ }], _orientation: [{
190
+ type: Input,
191
+ args: ['orientation']
192
+ }], showMenuButton: [{
193
+ type: Input,
194
+ args: [{ transform: coerceBooleanProperty }]
195
+ }], showVoiceInputAction: [{
196
+ type: Input,
197
+ args: [{ transform: coerceBooleanProperty }]
198
+ }], menuClick: [{
199
+ type: Output
200
+ }], menuExpand: [{
201
+ type: Output
202
+ }], menuCollapse: [{
203
+ type: Output
204
+ }], microphoneClick: [{
205
+ type: Output
206
+ }], logoClick: [{
207
+ type: Output
208
+ }], _toolHeaderActionsDirective: [{
209
+ type: ContentChild,
210
+ args: [ToolHeaderActionsDirective]
211
+ }], _toolHeaderLogoDirective: [{
212
+ type: ContentChild,
213
+ args: [ToolHeaderLogoDirective]
214
+ }], _searchField: [{
215
+ type: ContentChild,
216
+ args: [SearchFieldComponent]
217
+ }], _toolHeaderUser: [{
218
+ type: ContentChild,
219
+ args: [ToolHeaderUserDirective]
220
+ }], _toolHeaderProductSwitch: [{
221
+ type: ContentChild,
222
+ args: [FD_PRODUCT_SWITCH_COMPONENT]
223
+ }], _onClick: [{
224
+ type: HostListener,
225
+ args: ['document:click', ['$event']]
226
+ }] } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvdG9vbC1oZWFkZXIvc3JjL2NvbXBvbmVudHMvdG9vbC1oZWFkZXIvdG9vbC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvdG9vbC1oZWFkZXIvc3JjL2NvbXBvbmVudHMvdG9vbC1oZWFkZXIvdG9vbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QixxQ0FBcUMsRUFDeEMsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9B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QixFQUFFO3dCQUNqQzs0QkFDSSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxXQUFXLHFCQUFxQjt5QkFDbkM7cUJBQ0o7OEJBTTBCLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUloQixXQUFXO3NCQUFuQixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxNQUFNO2dCQVNULFlBQVk7c0JBRGYsS0FBSzt1QkFBQyxhQUFhO2dCQVdwQixjQUFjO3NCQURiLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBUzNDLG9CQUFvQjtzQkFEbkIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFPM0MsU0FBUztzQkFEUixNQUFNO2dCQVNQLFVBQVU7c0JBRFQsTUFBTTtnQkFTUCxZQUFZO3NCQURYLE1BQU07Z0JBT1AsZUFBZTtzQkFEZCxNQUFNO2dCQU9QLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCwyQkFBMkI7c0JBRDFCLFlBQVk7dUJBQUMsMEJBQTBCO2dCQUt4Qyx3QkFBd0I7c0JBRHZCLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUtqQyxZQUFZO3NCQURmLFlBQVk7dUJBQUMsb0JBQW9CO2dCQU9sQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUtyQyx3QkFBd0I7c0JBRHZCLFlBQVk7dUJBQUMsMkJBQTJCO2dCQWV6QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lICovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBOYXZpZ2F0aW9uTWVudUNvbXBvbmVudCxcbiAgICBOYXZpZ2F0aW9uTWVudUl0ZW1Db21wb25lbnQsXG4gICAgTmF2aWdhdGlvbk1lbnVQb3BvdmVyQ29tcG9uZW50LFxuICAgIE5hdmlnYXRpb25NZW51UG9wb3ZlckNvbnRyb2xEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9idHAvbmF2aWdhdGlvbi1tZW51JztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9idHAvc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZkYlZpZXdNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9idHAvc2hhcmVkJztcbmltcG9ydCB7IEZEX1BST0RVQ1RfU1dJVENIX0NPTVBPTkVOVCwgRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSwgRm9jdXNhYmxlTGlzdERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQge1xuICAgIEdseXBoTWVudUFkZG9uRGlyZWN0aXZlLFxuICAgIE1lbnVBZGRvbkRpcmVjdGl2ZSxcbiAgICBNZW51Q29tcG9uZW50LFxuICAgIE1lbnVJbnRlcmFjdGl2ZUNvbXBvbmVudCxcbiAgICBNZW51SXRlbUNvbXBvbmVudCxcbiAgICBNZW51VGl0bGVEaXJlY3RpdmUsXG4gICAgTWVudVRyaWdnZXJEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21lbnUnO1xuaW1wb3J0IHtcbiAgICBPdmVyZmxvd0V4cGFuZERpcmVjdGl2ZSxcbiAgICBPdmVyZmxvd0l0ZW1SZWZEaXJlY3RpdmUsXG4gICAgT3ZlcmZsb3dMYXlvdXRDb21wb25lbnQsXG4gICAgT3ZlcmZsb3dMYXlvdXRJdGVtRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vdmVyZmxvdy1sYXlvdXQnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlEaXJlY3RpdmUsIFBvcG92ZXJDb21wb25lbnQsIFBvcG92ZXJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlyc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRvb2xIZWFkZXJBY3Rpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b29sLWhlYWRlci1hY3Rpb25zLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb29sSGVhZGVyQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b29sLWhlYWRlci1idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRvb2xIZWFkZXJFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b29sLWhlYWRlci1lbGVtZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb29sSGVhZGVyR3JvdXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Rvb2wtaGVhZGVyLWdyb3VwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb29sSGVhZGVyTG9nb0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdG9vbC1oZWFkZXItbG9nby5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVG9vbEhlYWRlclVzZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Rvb2wtaGVhZGVyLXVzZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRvb2xIZWFkZXJDb21wb25lbnRDbGFzcyB9IGZyb20gJy4uLy4uL3Rvb2wtaGVhZGVyLWNvbXBvbmVudC5jbGFzcyc7XG5cbmNvbnN0IGltcG9ydHMgPSBbXG4gICAgVG9vbEhlYWRlckdyb3VwRGlyZWN0aXZlLFxuICAgIE5nSWYsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBPdmVyZmxvd0xheW91dENvbXBvbmVudCxcbiAgICBOZ0Zvck9mLFxuICAgIE92ZXJmbG93TGF5b3V0SXRlbURpcmVjdGl2ZSxcbiAgICBPdmVyZmxvd0l0ZW1SZWZEaXJlY3RpdmUsXG4gICAgT3ZlcmZsb3dFeHBhbmREaXJlY3RpdmUsXG4gICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudCxcbiAgICBQb3BvdmVyQm9keURpcmVjdGl2ZSxcbiAgICBNZW51VHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBNZW51Q29tcG9uZW50LFxuICAgIE1lbnVJdGVtQ29tcG9uZW50LFxuICAgIE1lbnVJbnRlcmFjdGl2ZUNvbXBvbmVudCxcbiAgICBNZW51VGl0bGVEaXJlY3RpdmUsXG4gICAgTWVudUFkZG9uRGlyZWN0aXZlLFxuICAgIEdseXBoTWVudUFkZG9uRGlyZWN0aXZlLFxuICAgIFRvb2xIZWFkZXJFbGVtZW50RGlyZWN0aXZlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIFRvb2xIZWFkZXJCdXR0b25EaXJlY3RpdmUsXG4gICAgVG9vbEhlYWRlckxvZ29EaXJlY3RpdmUsXG4gICAgRmRUcmFuc2xhdGVQaXBlXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkYi10b29sLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rvb2wtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtdG9vbC1oZWFkZXInLFxuICAgICAgICAnW2NsYXNzLmZkLXRvb2wtaGVhZGVyLS1tZW51XSc6ICdzaG93TWVudUJ1dHRvbidcbiAgICB9LFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgaW1wb3J0cyxcbiAgICAgICAgTmF2aWdhdGlvbk1lbnVDb21wb25lbnQsXG4gICAgICAgIE5hdmlnYXRpb25NZW51SXRlbUNvbXBvbmVudCxcbiAgICAgICAgRm9jdXNhYmxlTGlzdERpcmVjdGl2ZSxcbiAgICAgICAgRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgTmF2aWdhdGlvbk1lbnVQb3BvdmVyQ29tcG9uZW50LFxuICAgICAgICBOYXZpZ2F0aW9uTWVudVBvcG92ZXJDb250cm9sRGlyZWN0aXZlLFxuICAgICAgICBBc3luY1BpcGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRvb2xIZWFkZXJDb21wb25lbnRDbGFzcyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUb29sSGVhZGVyQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRvb2xIZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBUb29sSGVhZGVyQ29tcG9uZW50Q2xhc3MgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIChyZXF1aXJlZCkgdGhlIFByb2R1Y3QgTmFtZSBpcyB0aGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGUgdG9vbC5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwcm9kdWN0TmFtZSE6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTZWNvbmQgVGl0bGUgaXMgYW4gb3B0aW9uYWwgc2Vjb25kIHRleHQgaWRlbnRpZmllciBvZiB0aGUgdG9vbC5cbiAgICAgKiovXG4gICAgQElucHV0KCkgc2Vjb25kVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKiogTW9kZSAqL1xuICAgIEBJbnB1dCgnbW9kZScpXG4gICAgc2V0IF9tb2RlKG1vZGU6IEZkYlZpZXdNb2RlKSB7XG4gICAgICAgIGlmIChtb2RlICE9PSB0aGlzLm1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlLnNldChtb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KCdvcmllbnRhdGlvbicpXG4gICAgc2V0IF9vcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScgfCAncG9ydHJhaXQnKSB7XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiAhPT0gdGhpcy5vcmllbnRhdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uLnNldChvcmllbnRhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIG1lbnUgYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBzaG93TWVudUJ1dHRvbjogQm9vbGVhbklucHV0O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBzaG93IHRoZSB2b2ljZSBpbnB1dCBhY3Rpb24gYnV0dG9uIG9uXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHRvb2wgaGVhZGVyLCB3aGVuIHRoZSBtb2RlIGlzIG1vYmlsZVxuICAgICAqIGFuZCB0aGUgc2VhcmNoIGlucHV0IGlzIGV4cGFuZGVkXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBzaG93Vm9pY2VJbnB1dEFjdGlvbjogQm9vbGVhbklucHV0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbWVudSBidXR0b24gaXMgY2xpY2tlZFxuICAgICAqKi9cbiAgICBAT3V0cHV0KClcbiAgICBtZW51Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdXNlciBpbnRlbmRzIHRvIGV4cGFuZCB0aGUgbWVudS5cbiAgICAgKiBIYXBwZW5zIHdoZW4gdXNlciBjbGlja3MgYHJpZ2h0IGFycm93YCBrZXkgb24gdGhlIG1lbnUgYnV0dG9uXG4gICAgICogaWYgb24gbHRyIG9yIGBsZWZ0IGFycm93YCBrZXkgaWYgb24gcnRsLlxuICAgICAqKi9cbiAgICBAT3V0cHV0KClcbiAgICBtZW51RXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgaW50ZW5kcyB0byBjb2xsYXBzZSB0aGUgbWVudS5cbiAgICAgKiBIYXBwZW5zIHdoZW4gdXNlciBjbGlja3MgYGxlZnQgYXJyb3dgIGtleSBvbiB0aGUgbWVudSBidXR0b25cbiAgICAgKiBpZiBvbiBsdHIgb3IgYHJpZ2h0IGFycm93YCBrZXkgaWYgb24gcnRsLlxuICAgICAqKi9cbiAgICBAT3V0cHV0KClcbiAgICBtZW51Q29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG1pY3JvcGhvbmUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICAgKiovXG4gICAgQE91dHB1dCgpXG4gICAgbWljcm9waG9uZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkZWZhdWx0IGxvZ28gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxvZ29DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUb29sSGVhZGVyQWN0aW9uc0RpcmVjdGl2ZSlcbiAgICBfdG9vbEhlYWRlckFjdGlvbnNEaXJlY3RpdmU/OiBUb29sSGVhZGVyQWN0aW9uc0RpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUb29sSGVhZGVyTG9nb0RpcmVjdGl2ZSlcbiAgICBfdG9vbEhlYWRlckxvZ29EaXJlY3RpdmU/OiBUb29sSGVhZGVyTG9nb0RpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChTZWFyY2hGaWVsZENvbXBvbmVudClcbiAgICBzZXQgX3NlYXJjaEZpZWxkKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkLnNldChzZWFyY2hGaWVsZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRvb2xIZWFkZXJVc2VyRGlyZWN0aXZlKVxuICAgIF90b29sSGVhZGVyVXNlcj86IFRvb2xIZWFkZXJVc2VyRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEZEX1BST0RVQ1RfU1dJVENIX0NPTVBPTkVOVClcbiAgICBfdG9vbEhlYWRlclByb2R1Y3RTd2l0Y2g/OiB1bmtub3duO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWFyY2hGaWVsZE91dHNpZGVDbGlja1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGFuZGxlciwgcmVzcG9uc2libGUgZm9yIGNsb3NpbmcgdGhlIHNlYXJjaCBmaWVsZFxuICAgICAqIG9uIG91dHNpZGUgY2xpY2tcbiAgICAgKiBAaGlkZGVuXG4gICAgICoqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hGaWVsZEV4cGFuZGVkKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGUoKSA9PT0gJ3RhYmxldCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdwb3J0cmFpdCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZpZWxkKCkgJiZcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICFldmVudC5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaEZpZWxkKCkhLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRmllbGRFeHBhbmRlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaEZpZWxkT3V0c2lkZUNsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZE91dHNpZGVDbGlja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kIHRoZSBzZWFyY2ggZmllbGRcbiAgICAgKiovXG4gICAgZXhwYW5kU2VhcmNoRmllbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoRmllbGRFeHBhbmRlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZpZWxkKCk/LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVNZW51TGVmdEFycm93S2V5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcnRsKCkpIHtcbiAgICAgICAgICAgIHRoaXMubWVudUV4cGFuZC5lbWl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVDb2xsYXBzZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlTWVudVJpZ2h0QXJyb3dLZXkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9ydGwoKSkge1xuICAgICAgICAgICAgdGhpcy5tZW51Q29sbGFwc2UuZW1pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51RXhwYW5kLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgZmRiVG9vbEhlYWRlckdyb3VwIFtjbGFzcy5mZC10b29sLWhlYWRlci0tbWVudV09XCJzaG93TWVudUJ1dHRvblwiPlxuICAgIDxkaXYgZmRiVG9vbEhlYWRlckVsZW1lbnQgKm5nSWY9XCJmZGJUb29sSGVhZGVyU3RhdGUoKS5iYWNrQnV0dG9uVmlzaWJsZVwiPlxuICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZGJUb29sSGVhZGVyQnV0dG9uIGdseXBoPVwic2xpbS1hcnJvdy1sZWZ0XCIgKGNsaWNrKT1cInNlYXJjaEZpZWxkRXhwYW5kZWQuc2V0KGZhbHNlKVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmRiVG9vbEhlYWRlckVsZW1lbnQgKm5nSWY9XCJmZGJUb29sSGVhZGVyU3RhdGUoKS5tZW51QnV0dG9uVmlzaWJsZSAmJiBzaG93TWVudUJ1dHRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkYlRvb2xIZWFkZXJCdXR0b25cbiAgICAgICAgICAgIFt0aXRsZV09XCInYnRwVG9vbEhlYWRlci5tZW51QnV0dG9uQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2J0cFRvb2xIZWFkZXIubWVudUJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lbnUyXCJcbiAgICAgICAgICAgIChrZXlkb3duLmFycm93TGVmdCk9XCJfaGFuZGxlTWVudUxlZnRBcnJvd0tleSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmFycm93UmlnaHQpPVwiX2hhbmRsZU1lbnVSaWdodEFycm93S2V5KClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnVDbGljay5lbWl0KClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmZGJUb29sSGVhZGVyRWxlbWVudCAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLmxvZ29WaXNpYmxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdG9vbEhlYWRlckxvZ29EaXJlY3RpdmU7IGVsc2UgZGVmYXVsdExvZ29cIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZGJUb29sSGVhZGVyTG9nb11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2dvPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGZkYlRvb2xIZWFkZXJMb2dvXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ29DbGljay5lbWl0KClcIlxuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL2Z1bmRhbWVudGFsLXN0eWxlcy9kaXN0L2ltYWdlcy9zYXAtbG9nby5wbmdcIlxuICAgICAgICAgICAgICAgIHNyY3NldD1cIlxuICAgICAgICAgICAgICAgICAgICBodHRwczovL3VucGtnLmNvbS9mdW5kYW1lbnRhbC1zdHlsZXMvZGlzdC9pbWFnZXMvc2FwLWxvZ29AMngucG5nIDF4LFxuICAgICAgICAgICAgICAgICAgICBodHRwczovL3VucGtnLmNvbS9mdW5kYW1lbnRhbC1zdHlsZXMvZGlzdC9pbWFnZXMvc2FwLWxvZ29AM3gucG5nIDJ4LFxuICAgICAgICAgICAgICAgICAgICBodHRwczovL3VucGtnLmNvbS9mdW5kYW1lbnRhbC1zdHlsZXMvZGlzdC9pbWFnZXMvc2FwLWxvZ29ANHgucG5nIDN4XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJTQVAgbG9nb1wiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNBUCBsb2dvXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlNBUCBsb2dvXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmZGJUb29sSGVhZGVyRWxlbWVudCAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLnByb2R1Y3ROYW1lVmlzaWJsZVwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJmZC10b29sLWhlYWRlcl9fcHJvZHVjdC1uYW1lXCI+XG4gICAgICAgICAgICB7eyBwcm9kdWN0TmFtZSB9fVxuICAgICAgICA8L2gxPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmRiVG9vbEhlYWRlckVsZW1lbnQgKm5nSWY9XCJmZGJUb29sSGVhZGVyU3RhdGUoKS5zZWNvbmRUaXRsZVZpc2libGUgJiYgc2Vjb25kVGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXRvb2wtaGVhZGVyX19zZWNvbmQtdGl0bGVcIj5cbiAgICAgICAgICAgIHt7IHNlY29uZFRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgZmRiVG9vbEhlYWRlckdyb3VwIGNlbnRlciAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLnNlYXJjaEZpZWxkVmlzaWJsZVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkYi1zZWFyY2gtZmllbGRcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPGRpdiBmZGJUb29sSGVhZGVyR3JvdXAgYWN0aW9ucz5cbiAgICA8ZmQtb3ZlcmZsb3ctbGF5b3V0IGZkYlRvb2xIZWFkZXJFbGVtZW50IFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiJ2VuZCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLnNlYXJjaEZpZWxkVG9nZ2xlQWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICAgICAgPGRpdiBmZGJUb29sSGVhZGVyRWxlbWVudCAqZmRPdmVyZmxvd0l0ZW1SZWY9XCJsZXQgaGlkZGVuXCIgW2ZvcmNlVmlzaWJpbGl0eV09XCJ0cnVlXCIgZmRPdmVyZmxvd0xheW91dEl0ZW0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmRiVG9vbEhlYWRlckJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGV4cGFuZFNlYXJjaEZpZWxkKClcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLnByb3ZpZGVkQWN0aW9uc1Zpc2libGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBfdG9vbEhlYWRlckFjdGlvbnNEaXJlY3RpdmU/Ll9hY3Rpb25zKClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGZkYlRvb2xIZWFkZXJFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICpmZE92ZXJmbG93SXRlbVJlZj1cImxldCBoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICBbZm9yY2VWaXNpYmlsaXR5XT1cIiEhYWN0aW9uLmZvcmNlVmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dMYXlvdXRJdGVtXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cIiEhYWN0aW9uLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0lmVGhlbl09XCIkYW55KGFjdGlvbi50ZW1wbGF0ZVJlZilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nSWZFbHNlXT1cImRlZmF1bHRBY3Rpb25CdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBY3Rpb25CdXR0b25UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGJUb29sSGVhZGVyQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImFjdGlvbi5nbHlwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jbGlja0NhbGxiYWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWJ1dHRvbl9fYmFkZ2VcIiAqbmdJZj1cImFjdGlvbi5oYXNCYWRnZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRvb2wtaGVhZGVyX19zZXBhcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uaGFzU2VwYXJhdG9yICYmIGZkYlRvb2xIZWFkZXJTdGF0ZSgpLnNlcGFyYXRvcnNCZXR3ZWVuQWN0aW9uc1Zpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGZkYi1uYXZpZ2F0aW9uLW1lbnUtcG9wb3ZlciAqZmRPdmVyZmxvd0V4cGFuZD1cImxldCBvdmVyZmxvd0l0ZW1zXCIgZmRiVG9vbEhlYWRlckVsZW1lbnQ+XG4gICAgICAgICAgICA8YnV0dG9uICpmZGJOYXZpZ2F0aW9uTWVudVBvcG92ZXJDb250cm9sIGZkLWJ1dHRvbiBmZGJUb29sSGVhZGVyQnV0dG9uIGdseXBoPVwib3ZlcmZsb3dcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDx1bCAqZmRQb3BvdmVyQm9keSBmZGtGb2N1c2FibGVMaXN0IFt3cmFwXT1cInRydWVcIiBmZGItbmF2aWdhdGlvbi1tZW51PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3ZlcmZsb3dJdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Rvb2xIZWFkZXJBY3Rpb25zRGlyZWN0aXZlPy5fYWN0aW9ucygpIGFzIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkYlRvb2xIZWFkZXJTdGF0ZSgpLnNlYXJjaEZpZWxkVG9nZ2xlQWN0aW9uVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb25zW2l0ZW0uZ2xvYmFsSW5kZXggLSAxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb25zW2l0ZW0uZ2xvYmFsSW5kZXhdIGFzIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRiLW5hdmlnYXRpb24tbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRrRm9jdXNhYmxlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJhY3Rpb24uZ2x5cGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24uY2xpY2tDYWxsYmFjaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmRiLW5hdmlnYXRpb24tbWVudS1wb3BvdmVyPlxuICAgIDwvZmQtb3ZlcmZsb3ctbGF5b3V0PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZGJUb29sSGVhZGVyU3RhdGUoKS51c2VyQXZhdGFyVmlzaWJsZSAmJiBfdG9vbEhlYWRlclVzZXJcIj5cbiAgICAgICAgPGRpdiBmZGJUb29sSGVhZGVyRWxlbWVudD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10b29sLWhlYWRlcl9fc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmRiVG9vbEhlYWRlclVzZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmRiVG9vbEhlYWRlclN0YXRlKCkucHJvZHVjdFN3aXRjaFZpc2libGUgJiYgX3Rvb2xIZWFkZXJQcm9kdWN0U3dpdGNoXCI+XG4gICAgICAgIDxkaXYgZmRiVG9vbEhlYWRlckVsZW1lbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdG9vbC1oZWFkZXJfX3NlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmRiLXRvb2wtaGVhZGVyLXByb2R1Y3Qtc3dpdGNoLCBmZC1wcm9kdWN0LXN3aXRjaFwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBmZGJUb29sSGVhZGVyRWxlbWVudCAqbmdJZj1cImZkYlRvb2xIZWFkZXJTdGF0ZSgpLnZvaWNlSW5wdXRWaXNpYmxlXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRiVG9vbEhlYWRlckJ1dHRvblxuICAgICAgICAgICAgZ2x5cGg9XCJtaWNyb3Bob25lXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ1NlYXJjaCB3aXRoIHZvaWNlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibWljcm9waG9uZUNsaWNrLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,102 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { ButtonComponent } from '@fundamental-ngx/core/button';
3
+ import { BasePopoverClass, PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';
4
+ import { FD_PRODUCT_SWITCH_COMPONENT, ProductSwitchButtonDirective, ProductSwitchComponent } from '@fundamental-ngx/core/product-switch';
5
+ import { FdTranslatePipe } from '@fundamental-ngx/i18n';
6
+ import { ToolHeaderButtonDirective } from '../directives/tool-header-button.directive';
7
+ import * as i0 from "@angular/core";
8
+ export class ToolHeaderProductSwitchComponent extends BasePopoverClass {
9
+ constructor() {
10
+ super(...arguments);
11
+ /** Placement of a popover. */
12
+ this.placement = 'bottom-end';
13
+ /** Whether the product switch is disabled. */
14
+ this.disabled = false;
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderProductSwitchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ToolHeaderProductSwitchComponent, isStandalone: true, selector: "fdb-tool-header-product-switch", inputs: { placement: "placement", disabled: "disabled" }, providers: [
18
+ {
19
+ provide: FD_PRODUCT_SWITCH_COMPONENT,
20
+ useExisting: ToolHeaderProductSwitchComponent
21
+ }
22
+ ], usesInheritance: true, ngImport: i0, template: `
23
+ <fd-product-switch
24
+ [placement]="placement"
25
+ [closeOnEscapeKey]="closeOnEscapeKey"
26
+ [closeOnOutsideClick]="closeOnOutsideClick"
27
+ [(isOpen)]="isOpen"
28
+ (isOpenChange)="isOpenChange.emit($event)"
29
+ [disabled]="disabled"
30
+ [triggers]="triggers"
31
+ [focusTrapped]="false"
32
+ [focusAutoCapture]="true"
33
+ [noArrow]="noArrow"
34
+ [disableScrollbar]="true"
35
+ >
36
+ <button
37
+ *fdProductSwitchButton
38
+ fd-button
39
+ fdbToolHeaderButton
40
+ [attr.aria-label]="'coreProductSwitch.ariaLabel' | fdTranslate"
41
+ [attr.title]="'coreProductSwitch.ariaLabel' | fdTranslate"
42
+ glyph="grid"
43
+ fdType="transparent"
44
+ ></button>
45
+ <ng-content></ng-content>
46
+ </fd-product-switch>
47
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "directive", type: ToolHeaderButtonDirective, selector: "[fd-button][fdbToolHeaderButton]", inputs: ["hasBadge"] }, { kind: "component", type: ProductSwitchComponent, selector: "fd-product-switch", inputs: ["placement", "disabled"] }, { kind: "directive", type: ProductSwitchButtonDirective, selector: "[fdProductSwitchButton]" }] }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderProductSwitchComponent, decorators: [{
50
+ type: Component,
51
+ args: [{
52
+ selector: 'fdb-tool-header-product-switch',
53
+ imports: [
54
+ ButtonComponent,
55
+ FdTranslatePipe,
56
+ PopoverBodyComponent,
57
+ PopoverComponent,
58
+ PopoverControlComponent,
59
+ ToolHeaderButtonDirective,
60
+ ProductSwitchComponent,
61
+ ProductSwitchButtonDirective
62
+ ],
63
+ template: `
64
+ <fd-product-switch
65
+ [placement]="placement"
66
+ [closeOnEscapeKey]="closeOnEscapeKey"
67
+ [closeOnOutsideClick]="closeOnOutsideClick"
68
+ [(isOpen)]="isOpen"
69
+ (isOpenChange)="isOpenChange.emit($event)"
70
+ [disabled]="disabled"
71
+ [triggers]="triggers"
72
+ [focusTrapped]="false"
73
+ [focusAutoCapture]="true"
74
+ [noArrow]="noArrow"
75
+ [disableScrollbar]="true"
76
+ >
77
+ <button
78
+ *fdProductSwitchButton
79
+ fd-button
80
+ fdbToolHeaderButton
81
+ [attr.aria-label]="'coreProductSwitch.ariaLabel' | fdTranslate"
82
+ [attr.title]="'coreProductSwitch.ariaLabel' | fdTranslate"
83
+ glyph="grid"
84
+ fdType="transparent"
85
+ ></button>
86
+ <ng-content></ng-content>
87
+ </fd-product-switch>
88
+ `,
89
+ providers: [
90
+ {
91
+ provide: FD_PRODUCT_SWITCH_COMPONENT,
92
+ useExisting: ToolHeaderProductSwitchComponent
93
+ }
94
+ ],
95
+ standalone: true
96
+ }]
97
+ }], propDecorators: { placement: [{
98
+ type: Input
99
+ }], disabled: [{
100
+ type: Input
101
+ }] } });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1oZWFkZXItcHJvZHVjdC1zd2l0Y2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9idHAvdG9vbC1oZWFkZXIvc3JjL2NvbXBvbmVudHMvdG9vbC1oZWFkZXItcHJvZHVjdC1zd2l0Y2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQzFCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUNILDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3pCLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQWdEdkYsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLGdCQUFnQjtJQTlDdEU7O1FBK0NJLDhCQUE4QjtRQUVyQixjQUFTLEdBQWMsWUFBWSxDQUFDO1FBRTdDLDhDQUE4QztRQUVyQyxhQUFRLEdBQUcsS0FBSyxDQUFDO0tBQzdCOzhHQVJZLGdDQUFnQztrR0FBaEMsZ0NBQWdDLHVJQVI5QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSwyQkFBMkI7Z0JBQ3BDLFdBQVcsRUFBRSxnQ0FBZ0M7YUFDaEQ7U0FDSixpREEvQlM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlQsNERBbENHLGVBQWUsbUhBQ2YsZUFBZSxvREFJZix5QkFBeUIsbUdBQ3pCLHNCQUFzQixpR0FDdEIsNEJBQTRCOzsyRkFvQ3ZCLGdDQUFnQztrQkE5QzVDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsT0FBTyxFQUFFO3dCQUNMLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3FCQUMvQjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSwyQkFBMkI7NEJBQ3BDLFdBQVcsa0NBQWtDO3lCQUNoRDtxQkFDSjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7OEJBSVksU0FBUztzQkFEakIsS0FBSztnQkFLRyxRQUFRO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIEJhc2VQb3BvdmVyQ2xhc3MsXG4gICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQge1xuICAgIEZEX1BST0RVQ1RfU1dJVENIX0NPTVBPTkVOVCxcbiAgICBQcm9kdWN0U3dpdGNoQnV0dG9uRGlyZWN0aXZlLFxuICAgIFByb2R1Y3RTd2l0Y2hDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Byb2R1Y3Qtc3dpdGNoJztcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFRvb2xIZWFkZXJCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3Rvb2wtaGVhZGVyLWJ1dHRvbi5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkYi10b29sLWhlYWRlci1wcm9kdWN0LXN3aXRjaCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgICAgICBUb29sSGVhZGVyQnV0dG9uRGlyZWN0aXZlLFxuICAgICAgICBQcm9kdWN0U3dpdGNoQ29tcG9uZW50LFxuICAgICAgICBQcm9kdWN0U3dpdGNoQnV0dG9uRGlyZWN0aXZlXG4gICAgXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZmQtcHJvZHVjdC1zd2l0Y2hcbiAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgICAgICAgICAgIFtjbG9zZU9uRXNjYXBlS2V5XT1cImNsb3NlT25Fc2NhcGVLZXlcIlxuICAgICAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiY2xvc2VPbk91dHNpZGVDbGlja1wiXG4gICAgICAgICAgICBbKGlzT3BlbildPVwiaXNPcGVuXCJcbiAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgICAgIFtmb2N1c1RyYXBwZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbm9BcnJvd109XCJub0Fycm93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlU2Nyb2xsYmFyXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKmZkUHJvZHVjdFN3aXRjaEJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkYlRvb2xIZWFkZXJCdXR0b25cbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlUHJvZHVjdFN3aXRjaC5hcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIidjb3JlUHJvZHVjdFN3aXRjaC5hcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZ3JpZFwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2ZkLXByb2R1Y3Qtc3dpdGNoPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX1BST0RVQ1RfU1dJVENIX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUb29sSGVhZGVyUHJvZHVjdFN3aXRjaENvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRvb2xIZWFkZXJQcm9kdWN0U3dpdGNoQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBvcG92ZXJDbGFzcyB7XG4gICAgLyoqIFBsYWNlbWVudCBvZiBhIHBvcG92ZXIuICovXG4gICAgQElucHV0KClcbiAgICBvdmVycmlkZSBwbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20tZW5kJztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBwcm9kdWN0IHN3aXRjaCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG92ZXJyaWRlIGRpc2FibGVkID0gZmFsc2U7XG59XG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ToolHeaderActionDirective {
4
+ /** @hidden */
5
+ constructor(templateRef) {
6
+ this.templateRef = templateRef;
7
+ /**
8
+ * Whether the action should have a separator next to it
9
+ */
10
+ this.hasSeparator = false;
11
+ /**
12
+ * Event emitted when the action is clicked when in overflow mode.
13
+ **/
14
+ this.clicked = new EventEmitter();
15
+ /**
16
+ * Function to be called when the action is clicked
17
+ * when in overflow mode.
18
+ **/
19
+ this.clickCallback = () => this.clicked.emit();
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderActionDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
22
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.7", type: ToolHeaderActionDirective, isStandalone: true, selector: "[fdbToolHeaderAction]", inputs: { glyph: "glyph", label: "label", hasSeparator: "hasSeparator", forceVisibility: "forceVisibility" }, outputs: { clicked: "clicked" }, ngImport: i0 }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderActionDirective, decorators: [{
25
+ type: Directive,
26
+ args: [{
27
+ selector: '[fdbToolHeaderAction]',
28
+ standalone: true
29
+ }]
30
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { glyph: [{
31
+ type: Input,
32
+ args: [{ required: true }]
33
+ }], label: [{
34
+ type: Input,
35
+ args: [{ required: true }]
36
+ }], hasSeparator: [{
37
+ type: Input
38
+ }], forceVisibility: [{
39
+ type: Input
40
+ }], clicked: [{
41
+ type: Output
42
+ }] } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1oZWFkZXItYWN0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnRwL3Rvb2wtaGVhZGVyL3NyYy9kaXJlY3RpdmVzL3Rvb2wtaGVhZGVyLWFjdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3BGLE1BQU0sT0FBTyx5QkFBeUI7SUErQmxDLGNBQWM7SUFDZCxZQUFxQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFuQmxEOztXQUVHO1FBRUgsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFRckI7O1lBRUk7UUFFSixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUtuQzs7O1lBR0k7UUFDSixrQkFBYSxHQUFHLEdBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFOSyxDQUFDOzhHQWhDN0MseUJBQXlCO2tHQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7aUJBQ25CO2tHQU1HLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLFlBQVk7c0JBRFgsS0FBSztnQkFPTixlQUFlO3NCQURkLEtBQUs7Z0JBT04sT0FBTztzQkFETixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGZGJUb29sSGVhZGVyQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vdG9vbC1oZWFkZXItYWN0aW9uLWJ1dHRvbi50eXBlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRiVG9vbEhlYWRlckFjdGlvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVG9vbEhlYWRlckFjdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEZkYlRvb2xIZWFkZXJBY3Rpb25CdXR0b24ge1xuICAgIC8qKlxuICAgICAqIEdseXBoIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGFjdGlvbiB3aGVuIGluIG92ZXJmbG93IG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGFiZWwgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciB0aGUgYWN0aW9uIHdoZW4gaW4gb3ZlcmZsb3cgbW9kZS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBhY3Rpb24gc2hvdWxkIGhhdmUgYSBzZXBhcmF0b3IgbmV4dCB0byBpdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzU2VwYXJhdG9yID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBhY3Rpb24gaXMgYWx3YXlzIHZpc2libGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZVZpc2liaWxpdHk/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBhY3Rpb24gaXMgY2xpY2tlZCB3aGVuIGluIG92ZXJmbG93IG1vZGUuXG4gICAgICoqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGFjdGlvbiBpcyBjbGlja2VkXG4gICAgICogd2hlbiBpbiBvdmVyZmxvdyBtb2RlLlxuICAgICAqKi9cbiAgICBjbGlja0NhbGxiYWNrID0gKCk6IHZvaWQgPT4gdGhpcy5jbGlja2VkLmVtaXQoKTtcbn1cbiJdfQ==
@@ -0,0 +1,63 @@
1
+ /* eslint-disable @angular-eslint/no-input-rename */
2
+ import { ContentChildren, DestroyRef, Directive, inject, Input, QueryList } from '@angular/core';
3
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
4
+ import { BehaviorSubject, combineLatest, map, startWith } from 'rxjs';
5
+ import { ToolHeaderActionDirective } from './tool-header-action.directive';
6
+ import * as i0 from "@angular/core";
7
+ export class ToolHeaderActionsDirective {
8
+ /**
9
+ * Actions to be displayed in the header.
10
+ */
11
+ set actions(actions) {
12
+ this._inputActions$.next(actions.reduce((acc, actionOrActionGroup, index) => {
13
+ if (Array.isArray(actionOrActionGroup)) {
14
+ acc.push(...actionOrActionGroup);
15
+ if (index !== actions.length - 1) {
16
+ acc[acc.length - 1].hasSeparator = true;
17
+ }
18
+ }
19
+ else {
20
+ acc.push(actionOrActionGroup);
21
+ }
22
+ return acc;
23
+ }, []));
24
+ }
25
+ /** @hidden */
26
+ set _actionsFromContent(actions) {
27
+ if (this._contentActionsSubscription) {
28
+ this._contentActionsSubscription.unsubscribe();
29
+ this._contentActionsSubscription = undefined;
30
+ }
31
+ this._contentActionsSubscription = actions.changes
32
+ .pipe(startWith(actions), map((ql) => ql.toArray()), takeUntilDestroyed(this._destroyRef))
33
+ .subscribe((_actions) => {
34
+ this._contentActions$.next(_actions);
35
+ });
36
+ }
37
+ /** @hidden */
38
+ constructor() {
39
+ /** @hidden */
40
+ this._contentActions$ = new BehaviorSubject([]);
41
+ /** @hidden */
42
+ this._inputActions$ = new BehaviorSubject([]);
43
+ /** @hidden */
44
+ this._destroyRef = inject(DestroyRef);
45
+ this._actions = toSignal(combineLatest([this._contentActions$, this._inputActions$]).pipe(map(([contentActions, inputActions]) => [...contentActions, ...inputActions])), { requireSync: true });
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
48
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.7", type: ToolHeaderActionsDirective, isStandalone: true, selector: "fdb-tool-header-actions", inputs: { actions: "actions" }, queries: [{ propertyName: "_actionsFromContent", predicate: ToolHeaderActionDirective }], ngImport: i0 }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ToolHeaderActionsDirective, decorators: [{
51
+ type: Directive,
52
+ args: [{
53
+ // eslint-disable-next-line @angular-eslint/directive-selector
54
+ selector: 'fdb-tool-header-actions',
55
+ standalone: true
56
+ }]
57
+ }], ctorParameters: function () { return []; }, propDecorators: { actions: [{
58
+ type: Input
59
+ }], _actionsFromContent: [{
60
+ type: ContentChildren,
61
+ args: [ToolHeaderActionDirective]
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1oZWFkZXItYWN0aW9ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2J0cC90b29sLWhlYWRlci9zcmMvZGlyZWN0aXZlcy90b29sLWhlYWRlci1hY3Rpb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFPM0UsTUFBTSxPQUFPLDBCQUEwQjtJQUNuQzs7T0FFRztJQUNILElBQ0ksT0FBTyxDQUFDLE9BQXlFO1FBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNuQixPQUFlLENBQUMsTUFBTSxDQUNuQixDQUNJLEdBQWdDLEVBQ2hDLG1CQUE0RSxFQUM1RSxLQUFhLEVBQ2YsRUFBRTtZQUNBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztnQkFDakMsSUFBSSxLQUFLLEtBQU0sT0FBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQzNDO2FBQ0o7aUJBQU07Z0JBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2pDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQ0QsRUFBRSxDQUNMLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFDSSxtQkFBbUIsQ0FBQyxPQUE2QztRQUNqRSxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNsQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxPQUFPLENBQUMsT0FBTzthQUM3QyxJQUFJLENBQ0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUNsQixHQUFHLENBQUMsQ0FBQyxFQUF3QyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDL0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUN2QzthQUNBLFNBQVMsQ0FBQyxDQUFDLFFBQXFDLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQWdCRCxjQUFjO0lBQ2Q7UUFiQSxjQUFjO1FBQ0oscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQThCLEVBQUUsQ0FBQyxDQUFDO1FBRWxGLGNBQWM7UUFDSixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUE4QixFQUFFLENBQUMsQ0FBQztRQUVoRixjQUFjO1FBQ04sZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFPckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQ3BCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FDaEYsRUFDRCxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FDeEIsQ0FBQztJQUNOLENBQUM7OEdBcEVRLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHVKQTZCbEIseUJBQXlCOzsyRkE3QmpDLDBCQUEwQjtrQkFMdEMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjswRUFNTyxPQUFPO3NCQURWLEtBQUs7Z0JBMEJGLG1CQUFtQjtzQkFEdEIsZUFBZTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lICovXG5pbXBvcnQgeyBDb250ZW50Q2hpbGRyZW4sIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgUXVlcnlMaXN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZkYlRvb2xIZWFkZXJBY3Rpb25CdXR0b24gfSBmcm9tICcuLi90b29sLWhlYWRlci1hY3Rpb24tYnV0dG9uLnR5cGUnO1xuaW1wb3J0IHsgVG9vbEhlYWRlckFjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbC1oZWFkZXItYWN0aW9uLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdmZGItdG9vbC1oZWFkZXItYWN0aW9ucycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUb29sSGVhZGVyQWN0aW9uc0RpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhY3Rpb25zKGFjdGlvbnM6IEZkYlRvb2xIZWFkZXJBY3Rpb25CdXR0b25bXSB8IEFycmF5PEZkYlRvb2xIZWFkZXJBY3Rpb25CdXR0b25bXT4pIHtcbiAgICAgICAgdGhpcy5faW5wdXRBY3Rpb25zJC5uZXh0KFxuICAgICAgICAgICAgKGFjdGlvbnMgYXMgYW55KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBhY2M6IEZkYlRvb2xIZWFkZXJBY3Rpb25CdXR0b25bXSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uT3JBY3Rpb25Hcm91cDogRmRiVG9vbEhlYWRlckFjdGlvbkJ1dHRvbltdIHwgRmRiVG9vbEhlYWRlckFjdGlvbkJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3Rpb25PckFjdGlvbkdyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goLi4uYWN0aW9uT3JBY3Rpb25Hcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IChhY3Rpb25zIGFzIGFueSkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoIC0gMV0uaGFzU2VwYXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKGFjdGlvbk9yQWN0aW9uR3JvdXApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUb29sSGVhZGVyQWN0aW9uRGlyZWN0aXZlKVxuICAgIHNldCBfYWN0aW9uc0Zyb21Db250ZW50KGFjdGlvbnM6IFF1ZXJ5TGlzdDxUb29sSGVhZGVyQWN0aW9uRGlyZWN0aXZlPikge1xuICAgICAgICBpZiAodGhpcy5fY29udGVudEFjdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50QWN0aW9uc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZW50QWN0aW9uc1N1YnNjcmlwdGlvbiA9IGFjdGlvbnMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKGFjdGlvbnMpLFxuICAgICAgICAgICAgICAgIG1hcCgocWw6IFF1ZXJ5TGlzdDxUb29sSGVhZGVyQWN0aW9uRGlyZWN0aXZlPikgPT4gcWwudG9BcnJheSgpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKF9hY3Rpb25zOiBUb29sSGVhZGVyQWN0aW9uRGlyZWN0aXZlW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50QWN0aW9ucyQubmV4dChfYWN0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hY3Rpb25zOiBTaWduYWw8RmRiVG9vbEhlYWRlckFjdGlvbkJ1dHRvbltdPjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfY29udGVudEFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGZGJUb29sSGVhZGVyQWN0aW9uQnV0dG9uW10+KFtdKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9pbnB1dEFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGZGJUb29sSGVhZGVyQWN0aW9uQnV0dG9uW10+KFtdKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29udGVudEFjdGlvbnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9hY3Rpb25zID0gdG9TaWduYWwoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jb250ZW50QWN0aW9ucyQsIHRoaXMuX2lucHV0QWN0aW9ucyRdKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoW2NvbnRlbnRBY3Rpb25zLCBpbnB1dEFjdGlvbnNdKSA9PiBbLi4uY29udGVudEFjdGlvbnMsIC4uLmlucHV0QWN0aW9uc10pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgeyByZXF1aXJlU3luYzogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19