@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.
- package/README.md +7 -0
- package/esm2022/fundamental-ngx-btp.mjs +5 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/navigation/directives/navigation-home.directive.mjs +19 -0
- package/esm2022/navigation/directives/navigation-list-spacer.directive.mjs +24 -0
- package/esm2022/navigation/fundamental-ngx-btp-navigation.mjs +5 -0
- package/esm2022/navigation/index.mjs +11 -0
- package/esm2022/navigation/navigation-component.token.mjs +22 -0
- package/esm2022/navigation/navigation-content-end.component.mjs +62 -0
- package/esm2022/navigation/navigation-content-start.component.mjs +207 -0
- package/esm2022/navigation/navigation-content.token.mjs +3 -0
- package/esm2022/navigation/navigation-link.component.mjs +188 -0
- package/esm2022/navigation/navigation-list/navigation-list-item.component.mjs +423 -0
- package/esm2022/navigation/navigation-list/navigation-list-overflow-item.component.mjs +57 -0
- package/esm2022/navigation/navigation-list/navigation-list.component.mjs +125 -0
- package/esm2022/navigation/navigation-list-component.token.mjs +3 -0
- package/esm2022/navigation/navigation-list-item-component.token.mjs +90 -0
- package/esm2022/navigation/navigation.component.mjs +251 -0
- package/esm2022/navigation/navigation.service.mjs +14 -0
- package/esm2022/navigation/navigation.types.mjs +2 -0
- package/esm2022/navigation-menu/fundamental-ngx-btp-navigation-menu.mjs +5 -0
- package/esm2022/navigation-menu/index.mjs +6 -0
- package/esm2022/navigation-menu/lib/navigation-menu-item.component.mjs +48 -0
- package/esm2022/navigation-menu/lib/navigation-menu-popover-control.directive.mjs +19 -0
- package/esm2022/navigation-menu/lib/navigation-menu-popover.component.mjs +38 -0
- package/esm2022/navigation-menu/lib/navigation-menu.component.mjs +13 -0
- package/esm2022/navigation-menu/lib/navigation-menu.module.mjs +17 -0
- package/esm2022/search-field/fundamental-ngx-btp-search-field.mjs +5 -0
- package/esm2022/search-field/index.mjs +2 -0
- package/esm2022/search-field/search-field.component.mjs +62 -0
- package/esm2022/shared/fundamental-ngx-btp-shared.mjs +5 -0
- package/esm2022/shared/index.mjs +2 -0
- package/esm2022/tool-header/components/tool-header/tool-header.component.mjs +227 -0
- package/esm2022/tool-header/components/tool-header-product-switch.component.mjs +102 -0
- package/esm2022/tool-header/directives/tool-header-action.directive.mjs +43 -0
- package/esm2022/tool-header/directives/tool-header-actions.directive.mjs +63 -0
- package/esm2022/tool-header/directives/tool-header-auto-mode.directive.mjs +114 -0
- package/esm2022/tool-header/directives/tool-header-button.directive.mjs +51 -0
- package/esm2022/tool-header/directives/tool-header-element.directive.mjs +17 -0
- package/esm2022/tool-header/directives/tool-header-group.directive.mjs +26 -0
- package/esm2022/tool-header/directives/tool-header-logo.directive.mjs +19 -0
- package/esm2022/tool-header/directives/tool-header-user.directive.mjs +14 -0
- package/esm2022/tool-header/fundamental-ngx-btp-tool-header.mjs +5 -0
- package/esm2022/tool-header/index.mjs +10 -0
- package/esm2022/tool-header/tool-header-action-button.type.mjs +2 -0
- package/esm2022/tool-header/tool-header-component.class.mjs +74 -0
- package/esm2022/tool-header/tool-header-state.type.mjs +2 -0
- package/esm2022/tool-layout/directives/tool-layout-container.directive.mjs +17 -0
- package/esm2022/tool-layout/directives/tool-layout-content-container.directive.mjs +50 -0
- package/esm2022/tool-layout/directives/tool-layout-header-container.directive.mjs +17 -0
- package/esm2022/tool-layout/directives/tool-layout-navigation-container.directive.mjs +37 -0
- package/esm2022/tool-layout/fundamental-ngx-btp-tool-layout.mjs +5 -0
- package/esm2022/tool-layout/index.mjs +7 -0
- package/esm2022/tool-layout/tool-layout.component.mjs +43 -0
- package/esm2022/tool-layout/tool-layout.module.mjs +40 -0
- package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs +130 -0
- package/fesm2022/fundamental-ngx-btp-navigation-menu.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-navigation.mjs +1409 -0
- package/fesm2022/fundamental-ngx-btp-navigation.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-search-field.mjs +69 -0
- package/fesm2022/fundamental-ngx-btp-search-field.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-shared.mjs +4 -0
- package/fesm2022/fundamental-ngx-btp-shared.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-tool-header.mjs +717 -0
- package/fesm2022/fundamental-ngx-btp-tool-header.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp-tool-layout.mjs +194 -0
- package/fesm2022/fundamental-ngx-btp-tool-layout.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-btp.mjs +7 -0
- package/fesm2022/fundamental-ngx-btp.mjs.map +1 -0
- package/fundamental-ngx-btp-v0.46.0-rc.100.tgz +0 -0
- package/index.d.ts +2 -0
- package/navigation/README.md +3 -0
- package/navigation/directives/navigation-home.directive.d.ts +10 -0
- package/navigation/directives/navigation-list-spacer.directive.d.ts +8 -0
- package/navigation/index.d.ts +10 -0
- package/navigation/navigation-component.token.d.ts +34 -0
- package/navigation/navigation-content-end.component.d.ts +23 -0
- package/navigation/navigation-content-start.component.d.ts +54 -0
- package/navigation/navigation-content.token.d.ts +11 -0
- package/navigation/navigation-link.component.d.ts +49 -0
- package/navigation/navigation-list/navigation-list-item.component.d.ts +142 -0
- package/navigation/navigation-list/navigation-list-overflow-item.component.d.ts +16 -0
- package/navigation/navigation-list/navigation-list.component.d.ts +60 -0
- package/navigation/navigation-list-component.token.d.ts +17 -0
- package/navigation/navigation-list-item-component.token.d.ts +68 -0
- package/navigation/navigation.component.d.ts +82 -0
- package/navigation/navigation.service.d.ts +8 -0
- package/navigation/navigation.types.d.ts +2 -0
- package/navigation-menu/README.md +3 -0
- package/navigation-menu/index.d.ts +5 -0
- package/navigation-menu/lib/navigation-menu-item.component.d.ts +13 -0
- package/navigation-menu/lib/navigation-menu-popover-control.directive.d.ts +10 -0
- package/navigation-menu/lib/navigation-menu-popover.component.d.ts +11 -0
- package/navigation-menu/lib/navigation-menu.component.d.ts +5 -0
- package/navigation-menu/lib/navigation-menu.module.d.ts +8 -0
- package/package.json +63 -0
- package/search-field/README.md +3 -0
- package/search-field/index.d.ts +1 -0
- package/search-field/search-field.component.d.ts +34 -0
- package/shared/README.md +3 -0
- package/shared/index.d.ts +1 -0
- package/tool-header/README.md +3 -0
- package/tool-header/components/tool-header/tool-header.component.d.ts +91 -0
- package/tool-header/components/tool-header-product-switch.component.d.ts +11 -0
- package/tool-header/directives/tool-header-action.directive.d.ts +35 -0
- package/tool-header/directives/tool-header-actions.directive.d.ts +27 -0
- package/tool-header/directives/tool-header-auto-mode.directive.d.ts +68 -0
- package/tool-header/directives/tool-header-button.directive.d.ts +22 -0
- package/tool-header/directives/tool-header-element.directive.d.ts +5 -0
- package/tool-header/directives/tool-header-group.directive.d.ts +12 -0
- package/tool-header/directives/tool-header-logo.directive.d.ts +5 -0
- package/tool-header/directives/tool-header-user.directive.d.ts +5 -0
- package/tool-header/index.d.ts +9 -0
- package/tool-header/tool-header-action-button.type.d.ts +10 -0
- package/tool-header/tool-header-component.class.d.ts +20 -0
- package/tool-header/tool-header-state.type.d.ts +14 -0
- package/tool-layout/README.md +3 -0
- package/tool-layout/directives/tool-layout-container.directive.d.ts +5 -0
- package/tool-layout/directives/tool-layout-content-container.directive.d.ts +29 -0
- package/tool-layout/directives/tool-layout-header-container.directive.d.ts +5 -0
- package/tool-layout/directives/tool-layout-navigation-container.directive.d.ts +13 -0
- package/tool-layout/index.d.ts +6 -0
- package/tool-layout/tool-layout.component.d.ts +27 -0
- 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
|