@energinet/watt 3.0.18 → 3.0.20

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/code/index.d.ts CHANGED
@@ -16,3 +16,4 @@
16
16
  */
17
17
  export { WattCodeComponent } from './watt-code.component';
18
18
  export { WATT_CODE_HIGHLIGHT_WORKER_FACTORY } from './watt-code.worker.token';
19
+ export { WattCodeIntlService } from './watt-code-intl.service';
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class WattCodeIntlService {
3
+ searchPlaceholder: string;
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<WattCodeIntlService, never>;
5
+ static ɵprov: i0.ɵɵInjectableDeclaration<WattCodeIntlService>;
6
+ }
@@ -16,10 +16,12 @@
16
16
  */
17
17
  import { OnDestroy } from '@angular/core';
18
18
  import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
19
+ import { WattCodeIntlService } from './watt-code-intl.service';
19
20
  import * as i0 from "@angular/core";
20
21
  export declare class WattCodeComponent implements OnDestroy {
21
22
  private highlightWorkerFactory;
22
23
  private worker;
24
+ intl: WattCodeIntlService;
23
25
  viewport: import("@angular/core").Signal<CdkVirtualScrollViewport>;
24
26
  code: import("@angular/core").InputSignal<string | null | undefined>;
25
27
  language: import("@angular/core").InputSignal<"xml" | "json" | "auto">;
@@ -18,4 +18,5 @@
18
18
  //#endregion
19
19
  export { WattCodeComponent } from './watt-code.component';
20
20
  export { WATT_CODE_HIGHLIGHT_WORKER_FACTORY } from './watt-code.worker.token';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9jb2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxZQUFZO0FBQ1osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBXYXR0Q29kZUNvbXBvbmVudCB9IGZyb20gJy4vd2F0dC1jb2RlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBXQVRUX0NPREVfSElHSExJR0hUX1dPUktFUl9GQUNUT1JZIH0gZnJvbSAnLi93YXR0LWNvZGUud29ya2VyLnRva2VuJztcbiJdfQ==
21
+ export { WattCodeIntlService } from './watt-code-intl.service';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9jb2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxZQUFZO0FBQ1osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBXYXR0Q29kZUNvbXBvbmVudCB9IGZyb20gJy4vd2F0dC1jb2RlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBXQVRUX0NPREVfSElHSExJR0hUX1dPUktFUl9GQUNUT1JZIH0gZnJvbSAnLi93YXR0LWNvZGUud29ya2VyLnRva2VuJztcbmV4cG9ydCB7IFdhdHRDb2RlSW50bFNlcnZpY2UgfSBmcm9tICcuL3dhdHQtY29kZS1pbnRsLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,30 @@
1
+ //#region License
2
+ /**
3
+ * @license
4
+ * Copyright 2020 Energinet DataHub A/S
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License2");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ //#endregion
19
+ import { Injectable } from '@angular/core';
20
+ import * as i0 from "@angular/core";
21
+ export class WattCodeIntlService {
22
+ searchPlaceholder = 'Search in code';
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattCodeIntlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattCodeIntlService, providedIn: 'root' });
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattCodeIntlService, decorators: [{
27
+ type: Injectable,
28
+ args: [{ providedIn: 'root' }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1jb2RlLWludGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2NvZGUvd2F0dC1jb2RlLWludGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7dUdBRDFCLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBRE4sTUFBTTs7MkZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV2F0dENvZGVJbnRsU2VydmljZSB7XG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaCBpbiBjb2RlJztcbn1cbiJdfQ==
@@ -21,12 +21,14 @@ import { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrollin
21
21
  import { VaterStackComponent } from '@energinet/watt/vater';
22
22
  import { WattSearchComponent } from '@energinet/watt/search';
23
23
  import { WattSpinnerComponent } from '@energinet/watt/spinner';
24
+ import { WattCodeIntlService } from './watt-code-intl.service';
24
25
  import { WATT_CODE_HIGHLIGHT_WORKER_FACTORY } from './watt-code.worker.token';
25
26
  import * as i0 from "@angular/core";
26
27
  import * as i1 from "@angular/cdk/scrolling";
27
28
  export class WattCodeComponent {
28
29
  highlightWorkerFactory = inject(WATT_CODE_HIGHLIGHT_WORKER_FACTORY);
29
30
  worker = this.highlightWorkerFactory?.();
31
+ intl = inject(WattCodeIntlService);
30
32
  viewport = viewChild.required(CdkVirtualScrollViewport);
31
33
  code = input.required(...(ngDevMode ? [{ debugName: "code" }] : []));
32
34
  language = input('auto', ...(ngDevMode ? [{ debugName: "language" }] : []));
@@ -111,9 +113,12 @@ export class WattCodeComponent {
111
113
  <watt-spinner />
112
114
  </vater-stack>
113
115
  } @else {
114
- <div class="search-container">
115
- <watt-search (search)="searchTerm.set($event)" (keyup.enter)="searchNext()" />
116
- </div>
116
+ <watt-search
117
+ size="m"
118
+ [label]="intl.searchPlaceholder"
119
+ (search)="searchTerm.set($event)"
120
+ (keyup.enter)="searchNext()"
121
+ />
117
122
  <pre>
118
123
  <cdk-virtual-scroll-viewport
119
124
  [itemSize]="20"
@@ -128,7 +133,7 @@ export class WattCodeComponent {
128
133
  </cdk-virtual-scroll-viewport>
129
134
  </pre>
130
135
  }
131
- `, isInline: true, styles: ["watt-tabs watt-code pre code.watt-code-content{padding:0}watt-code{display:block;height:100%;width:100%}watt-code .viewport{height:100%;width:100%}watt-code pre{display:flex;margin:0;padding:0;height:calc(100% - 60px);width:100%;word-wrap:break-word}watt-code pre .cdk-virtual-scroll-content-wrapper{width:100%}watt-code pre .cdk-virtual-scroll-content-wrapper code{padding:2px 8px;line-height:20px;font-family:monospace;white-space:pre;width:100%;display:block;font-size:14px}watt-code pre .cdk-virtual-scroll-content-wrapper code.highlight{background-color:#ffeb3b4d;font-weight:700}\n"], dependencies: [{ kind: "component", type: WattSpinnerComponent, selector: "watt-spinner", inputs: ["diameter", "strokeWidth"] }, { kind: "component", type: VaterStackComponent, selector: "vater-stack, [vater-stack]" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: WattSearchComponent, selector: "watt-search", inputs: ["label", "debounceTime", "trim"], outputs: ["search"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
136
+ `, isInline: true, styles: ["watt-tabs watt-code pre code.watt-code-content{padding:0}watt-code{display:block;height:100%;width:100%}watt-code .viewport{height:100%;width:100%}watt-code pre{display:flex;margin:0;padding:0;height:calc(100% - 60px);width:100%;word-wrap:break-word}watt-code pre .cdk-virtual-scroll-content-wrapper{width:100%}watt-code pre .cdk-virtual-scroll-content-wrapper code{padding:2px 8px;line-height:20px;font-family:monospace;white-space:pre;width:100%;display:block;font-size:14px}watt-code pre .cdk-virtual-scroll-content-wrapper code.highlight{background-color:#ffeb3b4d;font-weight:700}\n"], dependencies: [{ kind: "component", type: WattSpinnerComponent, selector: "watt-spinner", inputs: ["diameter", "strokeWidth"] }, { kind: "component", type: VaterStackComponent, selector: "vater-stack, [vater-stack]" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: WattSearchComponent, selector: "watt-search", inputs: ["label", "debounceTime", "trim", "size"], outputs: ["search"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
132
137
  }
133
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattCodeComponent, decorators: [{
134
139
  type: Component,
@@ -138,9 +143,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
138
143
  <watt-spinner />
139
144
  </vater-stack>
140
145
  } @else {
141
- <div class="search-container">
142
- <watt-search (search)="searchTerm.set($event)" (keyup.enter)="searchNext()" />
143
- </div>
146
+ <watt-search
147
+ size="m"
148
+ [label]="intl.searchPlaceholder"
149
+ (search)="searchTerm.set($event)"
150
+ (keyup.enter)="searchNext()"
151
+ />
144
152
  <pre>
145
153
  <cdk-virtual-scroll-viewport
146
154
  [itemSize]="20"
@@ -157,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
157
165
  }
158
166
  `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [WattSpinnerComponent, VaterStackComponent, ScrollingModule, WattSearchComponent], styles: ["watt-tabs watt-code pre code.watt-code-content{padding:0}watt-code{display:block;height:100%;width:100%}watt-code .viewport{height:100%;width:100%}watt-code pre{display:flex;margin:0;padding:0;height:calc(100% - 60px);width:100%;word-wrap:break-word}watt-code pre .cdk-virtual-scroll-content-wrapper{width:100%}watt-code pre .cdk-virtual-scroll-content-wrapper code{padding:2px 8px;line-height:20px;font-family:monospace;white-space:pre;width:100%;display:block;font-size:14px}watt-code pre .cdk-virtual-scroll-content-wrapper code.highlight{background-color:#ffeb3b4d;font-weight:700}\n"] }]
159
167
  }], ctorParameters: () => [] });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2NvZGUvd2F0dC1jb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQWlDOUUsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixzQkFBc0IsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNwRSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztJQUVqRCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRXhELElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSwrQ0FBNkIsQ0FBQztJQUNuRCxRQUFRLEdBQUcsS0FBSyxDQUEwQixNQUFNLG9EQUFDLENBQUM7SUFFbEQsY0FBYztJQUNkLGFBQWEsR0FBRyxNQUFNLENBQVMsRUFBRSx5REFBQyxDQUFDO0lBQ25DLGNBQWM7SUFDZCxPQUFPLEdBQUcs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Qjs7MkZBRTlFLGlCQUFpQjtrQkEvQjdCLFNBQVM7K0JBQ0UsV0FBVyxZQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCVCxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIGlucHV0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbiAgdmlld0NoaWxkLFxuICBDb21wb25lbnQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlLCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuaW1wb3J0IHsgVmF0ZXJTdGFja0NvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC92YXRlcic7XG5pbXBvcnQgeyBXYXR0U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3NlYXJjaCc7XG5pbXBvcnQgeyBXYXR0U3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9zcGlubmVyJztcblxuaW1wb3J0IHsgV0FUVF9DT0RFX0hJR0hMSUdIVF9XT1JLRVJfRkFDVE9SWSB9IGZyb20gJy4vd2F0dC1jb2RlLndvcmtlci50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtY29kZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgIDx2YXRlci1zdGFjayBmaWxsPVwiaG9yaXpvbnRhbFwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgIDx3YXR0LXNwaW5uZXIgLz5cbiAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICA8d2F0dC1zZWFyY2ggKHNlYXJjaCk9XCJzZWFyY2hUZXJtLnNldCgkZXZlbnQpXCIgKGtleXVwLmVudGVyKT1cInNlYXJjaE5leHQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwcmU+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgXG4gICAgICAgICAgW2l0ZW1TaXplXT1cIjIwXCIgXG4gICAgICAgICAgbWluQnVmZmVyUHg9XCI1MDBcIlxuICAgICAgICAgIG1heEJ1ZmZlclB4PVwiMTAwMFwiXG4gICAgICAgICAgY2xhc3M9XCJ2aWV3cG9ydFwiIFxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgPGNvZGUgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBjaHVua3MoKTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW1cIiBcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0XT1cImlzTGluZUhpZ2hsaWdodGVkKGkpXCI+PC9jb2RlPlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgIDwvcHJlPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC1jb2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbV2F0dFNwaW5uZXJDb21wb25lbnQsIFZhdGVyU3RhY2tDb21wb25lbnQsIFNjcm9sbGluZ01vZHVsZSwgV2F0dFNlYXJjaENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRDb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBoaWdobGlnaHRXb3JrZXJGYWN0b3J5ID0gaW5qZWN0KFdBVFRfQ09ERV9ISUdITElHSFRfV09SS0VSX0ZBQ1RPUlkpO1xuICBwcml2YXRlIHdvcmtlciA9IHRoaXMuaGlnaGxpZ2h0V29ya2VyRmFjdG9yeT8uKCk7XG5cbiAgdmlld3BvcnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KTtcblxuICBjb2RlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgbGFuZ3VhZ2UgPSBpbnB1dDwneG1sJyB8ICdqc29uJyB8ICdhdXRvJz4oJ2F1dG8nKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBmb3JtYXR0ZWRDb2RlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAvKiogQGlnbm9yZSAqL1xuICBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBTZWFyY2ggZnVuY3Rpb25hbGl0eVxuICBzZWFyY2hUZXJtID0gc2lnbmFsKCcnKTtcbiAgbWF0Y2hJbmRpY2VzID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGN1cnJlbnRNYXRjaEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIGNodW5rcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy5mb3JtYXR0ZWRDb2RlKCk7XG4gICAgaWYgKCFjb2RlKSByZXR1cm4gWycnXTtcbiAgICBjb25zdCBsaW5lcyA9IGNvZGUuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiBsaW5lcy5sZW5ndGggPT09IDAgPyBbJyddIDogbGluZXM7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5jb2RlKCk7XG4gICAgICB0aGlzLmZvcm1hdHRlZENvZGUuc2V0KCcnKTtcblxuICAgICAgaWYgKCFjb2RlKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMud29ya2VyKSByZXR1cm47XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVkQ29kZS5zZXQoZXZlbnQuZGF0YSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHsgZGF0YTogY29kZSwgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UoKSB9IGFzIGNvbnN0KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCk7XG5cbiAgICAgIGlmICghdGVybSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXdNYXRjaEluZGljZXMgPSB0aGlzLmNodW5rcygpXG4gICAgICAgIC5tYXAoKGNodW5rLCBpbmRleCkgPT4gKGNodW5rLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSA/IGluZGV4IDogLTEpKVxuICAgICAgICAuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggIT09IC0xKTtcblxuICAgICAgdGhpcy5tYXRjaEluZGljZXMuc2V0KG5ld01hdGNoSW5kaWNlcyk7XG4gICAgICBpZiAobmV3TWF0Y2hJbmRpY2VzLmxlbmd0aCA+IDAgJiYgdGhpcy5jdXJyZW50TWF0Y2hJbmRleCgpID09PSAtMSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldCgwKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3TWF0Y2hJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldCgtMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0xpbmVIaWdobGlnaHRlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hJbmRleCA9IHRoaXMuY3VycmVudE1hdGNoSW5kZXgoKTtcbiAgICBpZiAobWF0Y2hJbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5tYXRjaEluZGljZXMoKVttYXRjaEluZGV4XSA9PT0gaW5kZXg7XG4gIH1cblxuICBzZWFyY2hOZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydCgpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLm1hdGNoSW5kaWNlcygpO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IG5leHRJbmRleCA9IHRoaXMuY3VycmVudE1hdGNoSW5kZXgoKSArIDE7XG4gICAgaWYgKG5leHRJbmRleCA+PSBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldChuZXh0SW5kZXgpO1xuXG4gICAgY29uc3QgbGluZUluZGV4ID0gbWF0Y2hlc1tuZXh0SW5kZXhdO1xuICAgIGlmIChsaW5lSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlld3BvcnQuc2Nyb2xsVG9JbmRleChsaW5lSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XG4gIH1cbn1cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2NvZGUvd2F0dC1jb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQW9DOUUsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixzQkFBc0IsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNwRSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztJQUNqRCxJQUFJLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbkMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUV4RCxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQTZCLENBQUM7SUFDbkQsUUFBUSxHQUFHLEtBQUssQ0FBMEIsTUFBTSxvREFBQyxDQUFDO0lBRWxELGNBQWM7SUFDZCxhQUFhLEdBQUcsTUFBTSxDQUFTLEVBQUUseURBQUMsQ0FBQztJQUNuQyxjQUFjO0lBQ2QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLG1EQUFDLENBQUM7SUFFeEIsdUJBQXVCO0lBQ3ZCLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxzREFBQyxDQUFDO0lBQ3hCLFlBQVksR0FBRyxNQUFNLENBQVcsRUFBRSx3REFBQyxDQUFDO0lBQ3BDLGlCQUFpQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsNkRBQUMsQ0FBQztJQUV2QyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0MsQ0FBQyxrREFBQyxDQUFDO0lBRUg7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTNCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBVyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFFbEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtpQkFDbEMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RGLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ25ELENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFakMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7dUdBM0ZVLGlCQUFpQjsyRkFBakIsaUJBQWlCLGdYQUtFLHdCQUF3QixnRUFyQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCxxcEJBSVMsb0JBQW9CLDhGQUFFLG1CQUFtQixzRUFBRSxlQUFlLDRqQkFBRSxtQkFBbUI7OzJGQUU5RSxpQkFBaUI7a0JBbEM3QixTQUFTOytCQUNFLFdBQVcsWUFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQge1xuICBpbnB1dCxcbiAgc2lnbmFsLFxuICBpbmplY3QsXG4gIGVmZmVjdCxcbiAgY29tcHV0ZWQsXG4gIHZpZXdDaGlsZCxcbiAgQ29tcG9uZW50LFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbmltcG9ydCB7IFZhdGVyU3RhY2tDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvdmF0ZXInO1xuaW1wb3J0IHsgV2F0dFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9zZWFyY2gnO1xuaW1wb3J0IHsgV2F0dFNwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvc3Bpbm5lcic7XG5cbmltcG9ydCB7IFdhdHRDb2RlSW50bFNlcnZpY2UgfSBmcm9tICcuL3dhdHQtY29kZS1pbnRsLnNlcnZpY2UnO1xuaW1wb3J0IHsgV0FUVF9DT0RFX0hJR0hMSUdIVF9XT1JLRVJfRkFDVE9SWSB9IGZyb20gJy4vd2F0dC1jb2RlLndvcmtlci50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtY29kZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgIDx2YXRlci1zdGFjayBmaWxsPVwiaG9yaXpvbnRhbFwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgIDx3YXR0LXNwaW5uZXIgLz5cbiAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8d2F0dC1zZWFyY2hcbiAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICBbbGFiZWxdPVwiaW50bC5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoVGVybS5zZXQoJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2hOZXh0KClcIlxuICAgICAgLz5cbiAgICAgIDxwcmU+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgXG4gICAgICAgICAgW2l0ZW1TaXplXT1cIjIwXCIgXG4gICAgICAgICAgbWluQnVmZmVyUHg9XCI1MDBcIlxuICAgICAgICAgIG1heEJ1ZmZlclB4PVwiMTAwMFwiXG4gICAgICAgICAgY2xhc3M9XCJ2aWV3cG9ydFwiIFxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgPGNvZGUgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBjaHVua3MoKTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW1cIiBcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0XT1cImlzTGluZUhpZ2hsaWdodGVkKGkpXCI+PC9jb2RlPlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgIDwvcHJlPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC1jb2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbV2F0dFNwaW5uZXJDb21wb25lbnQsIFZhdGVyU3RhY2tDb21wb25lbnQsIFNjcm9sbGluZ01vZHVsZSwgV2F0dFNlYXJjaENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRDb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBoaWdobGlnaHRXb3JrZXJGYWN0b3J5ID0gaW5qZWN0KFdBVFRfQ09ERV9ISUdITElHSFRfV09SS0VSX0ZBQ1RPUlkpO1xuICBwcml2YXRlIHdvcmtlciA9IHRoaXMuaGlnaGxpZ2h0V29ya2VyRmFjdG9yeT8uKCk7XG4gIGludGwgPSBpbmplY3QoV2F0dENvZGVJbnRsU2VydmljZSk7XG5cbiAgdmlld3BvcnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KTtcblxuICBjb2RlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgbGFuZ3VhZ2UgPSBpbnB1dDwneG1sJyB8ICdqc29uJyB8ICdhdXRvJz4oJ2F1dG8nKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBmb3JtYXR0ZWRDb2RlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAvKiogQGlnbm9yZSAqL1xuICBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBTZWFyY2ggZnVuY3Rpb25hbGl0eVxuICBzZWFyY2hUZXJtID0gc2lnbmFsKCcnKTtcbiAgbWF0Y2hJbmRpY2VzID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGN1cnJlbnRNYXRjaEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIGNodW5rcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy5mb3JtYXR0ZWRDb2RlKCk7XG4gICAgaWYgKCFjb2RlKSByZXR1cm4gWycnXTtcbiAgICBjb25zdCBsaW5lcyA9IGNvZGUuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiBsaW5lcy5sZW5ndGggPT09IDAgPyBbJyddIDogbGluZXM7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5jb2RlKCk7XG4gICAgICB0aGlzLmZvcm1hdHRlZENvZGUuc2V0KCcnKTtcblxuICAgICAgaWYgKCFjb2RlKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMud29ya2VyKSByZXR1cm47XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybWF0dGVkQ29kZS5zZXQoZXZlbnQuZGF0YSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfTtcbiAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHsgZGF0YTogY29kZSwgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UoKSB9IGFzIGNvbnN0KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCk7XG5cbiAgICAgIGlmICghdGVybSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXdNYXRjaEluZGljZXMgPSB0aGlzLmNodW5rcygpXG4gICAgICAgIC5tYXAoKGNodW5rLCBpbmRleCkgPT4gKGNodW5rLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSA/IGluZGV4IDogLTEpKVxuICAgICAgICAuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggIT09IC0xKTtcblxuICAgICAgdGhpcy5tYXRjaEluZGljZXMuc2V0KG5ld01hdGNoSW5kaWNlcyk7XG4gICAgICBpZiAobmV3TWF0Y2hJbmRpY2VzLmxlbmd0aCA+IDAgJiYgdGhpcy5jdXJyZW50TWF0Y2hJbmRleCgpID09PSAtMSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldCgwKTtcbiAgICAgIH0gZWxzZSBpZiAobmV3TWF0Y2hJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldCgtMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0xpbmVIaWdobGlnaHRlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hJbmRleCA9IHRoaXMuY3VycmVudE1hdGNoSW5kZXgoKTtcbiAgICBpZiAobWF0Y2hJbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5tYXRjaEluZGljZXMoKVttYXRjaEluZGV4XSA9PT0gaW5kZXg7XG4gIH1cblxuICBzZWFyY2hOZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydCgpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLm1hdGNoSW5kaWNlcygpO1xuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IG5leHRJbmRleCA9IHRoaXMuY3VycmVudE1hdGNoSW5kZXgoKSArIDE7XG4gICAgaWYgKG5leHRJbmRleCA+PSBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRNYXRjaEluZGV4LnNldChuZXh0SW5kZXgpO1xuXG4gICAgY29uc3QgbGluZUluZGV4ID0gbWF0Y2hlc1tuZXh0SW5kZXhdO1xuICAgIGlmIChsaW5lSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlld3BvcnQuc2Nyb2xsVG9JbmRleChsaW5lSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -114,7 +114,7 @@ export class WattDataTableComponent {
114
114
  }
115
115
  </vater-flex>
116
116
  </watt-card>
117
- `, isInline: true, styles: ["watt-data-table h3,watt-data-table h4{line-height:44px;min-height:44px;margin:0}watt-data-table watt-paginator{display:block;margin:calc(-1 * var(--watt-space-m)) -24px -24px}watt-data-table watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}watt-data-table watt-empty-state{margin:var(--watt-space-xl) 0}\n"], dependencies: [{ kind: "component", type: VaterFlexComponent, selector: "vater-flex, [vater-flex]", inputs: ["autoSize"] }, { kind: "component", type: VaterSpacerComponent, selector: "vater-spacer, [vater-spacer]" }, { kind: "component", type: VaterStackComponent, selector: "vater-stack, [vater-stack]" }, { kind: "directive", type: VaterUtilityDirective, selector: "[vater]", inputs: ["center", "fill", "inset", "scrollable"] }, { kind: "component", type: WattCardComponent, selector: "watt-card", inputs: ["variant", "loading"] }, { kind: "component", type: WattEmptyStateComponent, selector: "watt-empty-state", inputs: ["icon", "size", "title", "message", "useHTML"] }, { kind: "component", type: WattPaginatorComponent, selector: "watt-paginator", inputs: ["length", "pageSizeOptions", "pageSize", "pageIndex", "for"], outputs: ["changed"] }, { kind: "component", type: WattSearchComponent, selector: "watt-search", inputs: ["label", "debounceTime", "trim"], outputs: ["search"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }], encapsulation: i0.ViewEncapsulation.None });
117
+ `, isInline: true, styles: ["watt-data-table h3,watt-data-table h4{line-height:44px;min-height:44px;margin:0}watt-data-table watt-paginator{display:block;margin:calc(-1 * var(--watt-space-m)) -24px -24px}watt-data-table watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}watt-data-table watt-empty-state{margin:var(--watt-space-xl) 0}\n"], dependencies: [{ kind: "component", type: VaterFlexComponent, selector: "vater-flex, [vater-flex]", inputs: ["autoSize"] }, { kind: "component", type: VaterSpacerComponent, selector: "vater-spacer, [vater-spacer]" }, { kind: "component", type: VaterStackComponent, selector: "vater-stack, [vater-stack]" }, { kind: "directive", type: VaterUtilityDirective, selector: "[vater]", inputs: ["center", "fill", "inset", "scrollable"] }, { kind: "component", type: WattCardComponent, selector: "watt-card", inputs: ["variant", "loading"] }, { kind: "component", type: WattEmptyStateComponent, selector: "watt-empty-state", inputs: ["icon", "size", "title", "message", "useHTML"] }, { kind: "component", type: WattPaginatorComponent, selector: "watt-paginator", inputs: ["length", "pageSizeOptions", "pageSize", "pageIndex", "for"], outputs: ["changed"] }, { kind: "component", type: WattSearchComponent, selector: "watt-search", inputs: ["label", "debounceTime", "trim", "size"], outputs: ["search"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }], encapsulation: i0.ViewEncapsulation.None });
118
118
  }
119
119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattDataTableComponent, decorators: [{
120
120
  type: Component,
@@ -190,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
190
190
  </watt-card>
191
191
  `, styles: ["watt-data-table h3,watt-data-table h4{line-height:44px;min-height:44px;margin:0}watt-data-table watt-paginator{display:block;margin:calc(-1 * var(--watt-space-m)) -24px -24px}watt-data-table watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}watt-data-table watt-empty-state{margin:var(--watt-space-xl) 0}\n"] }]
192
192
  }] });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2RhdGEvd2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUN0QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFxRy9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5DLEtBQUssR0FBRyxLQUFLLDJEQUFXLENBQUM7SUFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLGlEQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7SUFDM0IsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLHNEQUFDLENBQUM7SUFDekIsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLHVEQUFDLENBQUM7SUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLHVEQUFDLENBQUM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksNERBQUMsQ0FBQztJQUMvQixTQUFTLEdBQUcsS0FBSywrREFBVSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxLQUFLLGlFQUFVLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLDJEQUFDLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztJQUN4QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsS0FBSyxDQUFvQixXQUFXLG1EQUFDLENBQUM7SUFDaEQsY0FBYyxHQUFHLEtBQUssQ0FDcEIsUUFBUSwwREFDVCxDQUFDO0lBRUYsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxNQUFNLEVBQWEsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFFakIsS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQSxrQkFBMkIsQ0FBQSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbEYsTUFBTSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsa0RBQUMsQ0FBQztJQUN4QyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzt1R0FoQ1Usc0JBQXNCOzJGQUF0QixzQkFBc0Isa2lFQXdCSCxDQUFBLGtCQUEyQixDQUFBLHdHQUV0QyxtQkFBbUIsZ0VBeEY1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERULHVhQTlGQyxrQkFBa0IsMkZBQ2xCLG9CQUFvQix5RUFDcEIsbUJBQW1CLHVFQUNuQixxQkFBcUIsdUdBQ3JCLGlCQUFpQixzRkFDakIsdUJBQXVCLHNIQUN2QixzQkFBc0Isd0pBQ3RCLG1CQUFtQix3SEFDbkIsbUJBQW1COzsyRkF3RlYsc0JBQXNCO2tCQW5HbEMsU0FBUzsrQkFDRSxpQkFBaUIsV0FDbEI7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxZQXdCM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTREVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbnRlbnRDaGlsZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcblxuaW1wb3J0IHtcbiAgVmF0ZXJGbGV4Q29tcG9uZW50LFxuICBWYXRlclNwYWNlckNvbXBvbmVudCxcbiAgVmF0ZXJTdGFja0NvbXBvbmVudCxcbiAgVmF0ZXJVdGlsaXR5RGlyZWN0aXZlLFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvdmF0ZXInO1xuaW1wb3J0IHsgV0FUVF9DQVJEX1ZBUklBTlQsIFdhdHRDYXJkQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NhcmQnO1xuaW1wb3J0IHsgV2F0dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9idXR0b24nO1xuaW1wb3J0IHsgV2F0dEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZW1wdHktc3RhdGUnO1xuaW1wb3J0IHsgV2F0dFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgV2F0dFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9zZWFyY2gnO1xuaW1wb3J0IHsgV2F0dFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3RhYmxlJztcbmltcG9ydCB7IFdhdHRJY29uIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ljb24nO1xuXG5pbXBvcnQgeyBXYXR0RGF0YUludGxTZXJ2aWNlIH0gZnJvbSAnLi93YXR0LWRhdGEtaW50bC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC1kYXRhLXRhYmxlJyxcbiAgaW1wb3J0czogW1xuICAgIFZhdGVyRmxleENvbXBvbmVudCxcbiAgICBWYXRlclNwYWNlckNvbXBvbmVudCxcbiAgICBWYXRlclN0YWNrQ29tcG9uZW50LFxuICAgIFZhdGVyVXRpbGl0eURpcmVjdGl2ZSxcbiAgICBXYXR0Q2FyZENvbXBvbmVudCxcbiAgICBXYXR0RW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBXYXR0UGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIFdhdHRTZWFyY2hDb21wb25lbnQsXG4gICAgV2F0dEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgd2F0dC1kYXRhLXRhYmxlIGgzLFxuICAgICAgd2F0dC1kYXRhLXRhYmxlIGg0IHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDQ0cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQ0cHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgd2F0dC1kYXRhLXRhYmxlIHdhdHQtcGFnaW5hdG9yIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLXdhdHQtc3BhY2UtbSkpIC0yNHB4IC0yNHB4O1xuICAgICAgfVxuXG4gICAgICB3YXR0LWRhdGEtdGFibGUgd2F0dC10YWJsZSAubWF0LW1kYy10YWJsZSB0ci5tZGMtZGF0YS10YWJsZV9fcm93Omxhc3QtY2hpbGQgLm1hdC1tZGMtY2VsbCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIHdhdHQtZGF0YS10YWJsZSB3YXR0LWVtcHR5LXN0YXRlIHtcbiAgICAgICAgbWFyZ2luOiB2YXIoLS13YXR0LXNwYWNlLXhsKSAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHdhdHQtY2FyZCB2YXRlciBmaWxsPVwidmVydGljYWxcIiBbdmFyaWFudF09XCJ2YXJpYW50KClcIj5cbiAgICAgIDx2YXRlci1mbGV4IGF1dG9TaXplIGZpbGw9XCJ2ZXJ0aWNhbFwiIGdhcD1cIm1cIj5cbiAgICAgICAgPHZhdGVyLXN0YWNrIGRpcmVjdGlvbj1cInJvd1wiIGdhcD1cIm1cIj5cbiAgICAgICAgICA8dmF0ZXItc3RhY2sgZGlyZWN0aW9uPVwicm93XCIgZ2FwPVwic1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDNcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDRcIiAvPlxuICAgICAgICAgICAgQGlmIChlbmFibGVDb3VudCgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1jaGlwLWxhYmVsXCI+e3sgY291bnQoKSA/PyB0YWJsZSgpLmRhdGFTb3VyY2UudG90YWxDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocXVlcnlUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3YXR0LWxhYmVsXCI+aW4ge3sgcXVlcnlUaW1lKCkgfX0gbXM8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC92YXRlci1zdGFjaz5cbiAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgIDx2YXRlci1zcGFjZXIgLz5cbiAgICAgICAgICBAaWYgKGVuYWJsZVNlYXJjaCgpKSB7XG4gICAgICAgICAgICA8d2F0dC1zZWFyY2hcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInNlYXJjaExhYmVsKCkgPz8gaW50bC5zZWFyY2hcIlxuICAgICAgICAgICAgICBbdHJpbV09XCJ0cmltU2VhcmNoKClcIlxuICAgICAgICAgICAgICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWFjdGlvbnNcIiAvPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtYnV0dG9uXCIgLz5cbiAgICAgICAgPC92YXRlci1zdGFjaz5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWZpbHRlcnNcIiAvPlxuICAgICAgICA8dmF0ZXItZmxleCBbYXV0b1NpemVdPVwiYXV0b1NpemUoKVwiIGZpbGw9XCJ2ZXJ0aWNhbFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtdGFibGVcIiAvPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBlbmFibGVFbXB0eVN0YXRlKCkgJiYgIXRhYmxlKCkubG9hZGluZyAmJiB0YWJsZSgpLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgPHZhdGVyLWZsZXggW2F1dG9TaXplXT1cImF1dG9TaXplKClcIiBmaWxsPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPHZhdGVyLXN0YWNrIHNjcm9sbGFibGUganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx3YXR0LWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJlcnJvcigpID8gJ2N1c3RvbS1wb3dlcicgOiByZWFkeSgpID8gZW1wdHlTdGF0ZUljb24oKSA6ICdjdXN0b20tZXhwbG9yZSdcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBlcnJvcigpID8gaW50bC5lcnJvclRpdGxlIDogcmVhZHkoKSA/IGludGwuZW1wdHlUaXRsZSA6IGludGwuZGVmYXVsdFRpdGxlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiZXJyb3IoKSA/IGludGwuZXJyb3JUZXh0IDogcmVhZHkoKSA/IGludGwuZW1wdHlUZXh0IDogaW50bC5kZWZhdWx0VGV4dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVSZXRyeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx3YXR0LWJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJldHJ5LmVtaXQoKVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaW50bC5lbXB0eVJldHJ5XG4gICAgICAgICAgICAgICAgICAgIH19PC93YXR0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3dhdHQtZW1wdHktc3RhdGU+XG4gICAgICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgIEBpZiAoZW5hYmxlUGFnaW5hdG9yKCkpIHtcbiAgICAgICAgICA8d2F0dC1wYWdpbmF0b3JcbiAgICAgICAgICAgIFtmb3JdPVwidGFibGUoKS5kYXRhU291cmNlXCJcbiAgICAgICAgICAgIFtsZW5ndGhdPVwiY291bnQoKSA/PyAwXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC92YXRlci1mbGV4PlxuICAgIDwvd2F0dC1jYXJkPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0RGF0YVRhYmxlQ29tcG9uZW50IHtcbiAgaW50bCA9IGluamVjdChXYXR0RGF0YUludGxTZXJ2aWNlKTtcblxuICBlcnJvciA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWR5ID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVNlYXJjaCA9IGlucHV0KHRydWUpO1xuICB0cmltU2VhcmNoID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVJldHJ5ID0gaW5wdXQoZmFsc2UpO1xuICBlbmFibGVDb3VudCA9IGlucHV0KHRydWUpO1xuICBlbmFibGVFbXB0eVN0YXRlID0gaW5wdXQodHJ1ZSk7XG4gIHF1ZXJ5VGltZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgc2VhcmNoTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGVuYWJsZVBhZ2luYXRvciA9IGlucHV0KHRydWUpO1xuICBjb3VudCA9IGlucHV0PG51bWJlcj4oKTtcbiAgYXV0b1NpemUgPSBpbnB1dChmYWxzZSk7XG4gIHZhcmlhbnQgPSBpbnB1dDxXQVRUX0NBUkRfVkFSSUFOVD4oJ2VsZXZhdGlvbicpO1xuICBlbXB0eVN0YXRlSWNvbiA9IGlucHV0PFdhdHRJY29uIHwgJ2N1c3RvbS1wb3dlcicgfCAnY3VzdG9tLWV4cGxvcmUnIHwgJ2N1c3RvbS1uby1yZXN1bHRzJz4oXG4gICAgJ2NhbmNlbCdcbiAgKTtcblxuICBjbGVhciA9IG91dHB1dCgpO1xuICBwYWdlQ2hhbmdlZCA9IG91dHB1dDxQYWdlRXZlbnQ+KCk7XG4gIHJldHJ5ID0gb3V0cHV0KCk7XG5cbiAgdGFibGUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoV2F0dFRhYmxlQ29tcG9uZW50PHVua25vd24+LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuXG4gIHNlYXJjaCA9IHZpZXdDaGlsZChXYXR0U2VhcmNoQ29tcG9uZW50KTtcbiAgcmVzZXQgPSAoKSA9PiB0aGlzLnNlYXJjaCgpPy5jbGVhcigpO1xuXG4gIG9uU2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRhYmxlKCkuZGF0YVNvdXJjZS5maWx0ZXIgPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgfVxufVxuIl19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2RhdGEvd2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUN0QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFxRy9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5DLEtBQUssR0FBRyxLQUFLLDJEQUFXLENBQUM7SUFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLGlEQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7SUFDM0IsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLHNEQUFDLENBQUM7SUFDekIsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLHVEQUFDLENBQUM7SUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLHVEQUFDLENBQUM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksNERBQUMsQ0FBQztJQUMvQixTQUFTLEdBQUcsS0FBSywrREFBVSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxLQUFLLGlFQUFVLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLDJEQUFDLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztJQUN4QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsS0FBSyxDQUFvQixXQUFXLG1EQUFDLENBQUM7SUFDaEQsY0FBYyxHQUFHLEtBQUssQ0FDcEIsUUFBUSwwREFDVCxDQUFDO0lBRUYsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxNQUFNLEVBQWEsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFFakIsS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQSxrQkFBMkIsQ0FBQSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbEYsTUFBTSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsa0RBQUMsQ0FBQztJQUN4QyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzt1R0FoQ1Usc0JBQXNCOzJGQUF0QixzQkFBc0Isa2lFQXdCSCxDQUFBLGtCQUEyQixDQUFBLHdHQUV0QyxtQkFBbUIsZ0VBeEY1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNERULHVhQTlGQyxrQkFBa0IsMkZBQ2xCLG9CQUFvQix5RUFDcEIsbUJBQW1CLHVFQUNuQixxQkFBcUIsdUdBQ3JCLGlCQUFpQixzRkFDakIsdUJBQXVCLHNIQUN2QixzQkFBc0Isd0pBQ3RCLG1CQUFtQixnSUFDbkIsbUJBQW1COzsyRkF3RlYsc0JBQXNCO2tCQW5HbEMsU0FBUzsrQkFDRSxpQkFBaUIsV0FDbEI7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxZQXdCM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTREVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbnRlbnRDaGlsZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcblxuaW1wb3J0IHtcbiAgVmF0ZXJGbGV4Q29tcG9uZW50LFxuICBWYXRlclNwYWNlckNvbXBvbmVudCxcbiAgVmF0ZXJTdGFja0NvbXBvbmVudCxcbiAgVmF0ZXJVdGlsaXR5RGlyZWN0aXZlLFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvdmF0ZXInO1xuaW1wb3J0IHsgV0FUVF9DQVJEX1ZBUklBTlQsIFdhdHRDYXJkQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NhcmQnO1xuaW1wb3J0IHsgV2F0dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9idXR0b24nO1xuaW1wb3J0IHsgV2F0dEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZW1wdHktc3RhdGUnO1xuaW1wb3J0IHsgV2F0dFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgV2F0dFNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9zZWFyY2gnO1xuaW1wb3J0IHsgV2F0dFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3RhYmxlJztcbmltcG9ydCB7IFdhdHRJY29uIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ljb24nO1xuXG5pbXBvcnQgeyBXYXR0RGF0YUludGxTZXJ2aWNlIH0gZnJvbSAnLi93YXR0LWRhdGEtaW50bC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC1kYXRhLXRhYmxlJyxcbiAgaW1wb3J0czogW1xuICAgIFZhdGVyRmxleENvbXBvbmVudCxcbiAgICBWYXRlclNwYWNlckNvbXBvbmVudCxcbiAgICBWYXRlclN0YWNrQ29tcG9uZW50LFxuICAgIFZhdGVyVXRpbGl0eURpcmVjdGl2ZSxcbiAgICBXYXR0Q2FyZENvbXBvbmVudCxcbiAgICBXYXR0RW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBXYXR0UGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIFdhdHRTZWFyY2hDb21wb25lbnQsXG4gICAgV2F0dEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgd2F0dC1kYXRhLXRhYmxlIGgzLFxuICAgICAgd2F0dC1kYXRhLXRhYmxlIGg0IHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDQ0cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQ0cHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgd2F0dC1kYXRhLXRhYmxlIHdhdHQtcGFnaW5hdG9yIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLXdhdHQtc3BhY2UtbSkpIC0yNHB4IC0yNHB4O1xuICAgICAgfVxuXG4gICAgICB3YXR0LWRhdGEtdGFibGUgd2F0dC10YWJsZSAubWF0LW1kYy10YWJsZSB0ci5tZGMtZGF0YS10YWJsZV9fcm93Omxhc3QtY2hpbGQgLm1hdC1tZGMtY2VsbCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIHdhdHQtZGF0YS10YWJsZSB3YXR0LWVtcHR5LXN0YXRlIHtcbiAgICAgICAgbWFyZ2luOiB2YXIoLS13YXR0LXNwYWNlLXhsKSAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHdhdHQtY2FyZCB2YXRlciBmaWxsPVwidmVydGljYWxcIiBbdmFyaWFudF09XCJ2YXJpYW50KClcIj5cbiAgICAgIDx2YXRlci1mbGV4IGF1dG9TaXplIGZpbGw9XCJ2ZXJ0aWNhbFwiIGdhcD1cIm1cIj5cbiAgICAgICAgPHZhdGVyLXN0YWNrIGRpcmVjdGlvbj1cInJvd1wiIGdhcD1cIm1cIj5cbiAgICAgICAgICA8dmF0ZXItc3RhY2sgZGlyZWN0aW9uPVwicm93XCIgZ2FwPVwic1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDNcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDRcIiAvPlxuICAgICAgICAgICAgQGlmIChlbmFibGVDb3VudCgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1jaGlwLWxhYmVsXCI+e3sgY291bnQoKSA/PyB0YWJsZSgpLmRhdGFTb3VyY2UudG90YWxDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocXVlcnlUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3YXR0LWxhYmVsXCI+aW4ge3sgcXVlcnlUaW1lKCkgfX0gbXM8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC92YXRlci1zdGFjaz5cbiAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgIDx2YXRlci1zcGFjZXIgLz5cbiAgICAgICAgICBAaWYgKGVuYWJsZVNlYXJjaCgpKSB7XG4gICAgICAgICAgICA8d2F0dC1zZWFyY2hcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInNlYXJjaExhYmVsKCkgPz8gaW50bC5zZWFyY2hcIlxuICAgICAgICAgICAgICBbdHJpbV09XCJ0cmltU2VhcmNoKClcIlxuICAgICAgICAgICAgICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWFjdGlvbnNcIiAvPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtYnV0dG9uXCIgLz5cbiAgICAgICAgPC92YXRlci1zdGFjaz5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWZpbHRlcnNcIiAvPlxuICAgICAgICA8dmF0ZXItZmxleCBbYXV0b1NpemVdPVwiYXV0b1NpemUoKVwiIGZpbGw9XCJ2ZXJ0aWNhbFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtdGFibGVcIiAvPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBlbmFibGVFbXB0eVN0YXRlKCkgJiYgIXRhYmxlKCkubG9hZGluZyAmJiB0YWJsZSgpLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgPHZhdGVyLWZsZXggW2F1dG9TaXplXT1cImF1dG9TaXplKClcIiBmaWxsPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPHZhdGVyLXN0YWNrIHNjcm9sbGFibGUganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx3YXR0LWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJlcnJvcigpID8gJ2N1c3RvbS1wb3dlcicgOiByZWFkeSgpID8gZW1wdHlTdGF0ZUljb24oKSA6ICdjdXN0b20tZXhwbG9yZSdcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBlcnJvcigpID8gaW50bC5lcnJvclRpdGxlIDogcmVhZHkoKSA/IGludGwuZW1wdHlUaXRsZSA6IGludGwuZGVmYXVsdFRpdGxlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiZXJyb3IoKSA/IGludGwuZXJyb3JUZXh0IDogcmVhZHkoKSA/IGludGwuZW1wdHlUZXh0IDogaW50bC5kZWZhdWx0VGV4dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVSZXRyeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx3YXR0LWJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJldHJ5LmVtaXQoKVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaW50bC5lbXB0eVJldHJ5XG4gICAgICAgICAgICAgICAgICAgIH19PC93YXR0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3dhdHQtZW1wdHktc3RhdGU+XG4gICAgICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgIEBpZiAoZW5hYmxlUGFnaW5hdG9yKCkpIHtcbiAgICAgICAgICA8d2F0dC1wYWdpbmF0b3JcbiAgICAgICAgICAgIFtmb3JdPVwidGFibGUoKS5kYXRhU291cmNlXCJcbiAgICAgICAgICAgIFtsZW5ndGhdPVwiY291bnQoKSA/PyAwXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC92YXRlci1mbGV4PlxuICAgIDwvd2F0dC1jYXJkPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0RGF0YVRhYmxlQ29tcG9uZW50IHtcbiAgaW50bCA9IGluamVjdChXYXR0RGF0YUludGxTZXJ2aWNlKTtcblxuICBlcnJvciA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWR5ID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVNlYXJjaCA9IGlucHV0KHRydWUpO1xuICB0cmltU2VhcmNoID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVJldHJ5ID0gaW5wdXQoZmFsc2UpO1xuICBlbmFibGVDb3VudCA9IGlucHV0KHRydWUpO1xuICBlbmFibGVFbXB0eVN0YXRlID0gaW5wdXQodHJ1ZSk7XG4gIHF1ZXJ5VGltZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgc2VhcmNoTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGVuYWJsZVBhZ2luYXRvciA9IGlucHV0KHRydWUpO1xuICBjb3VudCA9IGlucHV0PG51bWJlcj4oKTtcbiAgYXV0b1NpemUgPSBpbnB1dChmYWxzZSk7XG4gIHZhcmlhbnQgPSBpbnB1dDxXQVRUX0NBUkRfVkFSSUFOVD4oJ2VsZXZhdGlvbicpO1xuICBlbXB0eVN0YXRlSWNvbiA9IGlucHV0PFdhdHRJY29uIHwgJ2N1c3RvbS1wb3dlcicgfCAnY3VzdG9tLWV4cGxvcmUnIHwgJ2N1c3RvbS1uby1yZXN1bHRzJz4oXG4gICAgJ2NhbmNlbCdcbiAgKTtcblxuICBjbGVhciA9IG91dHB1dCgpO1xuICBwYWdlQ2hhbmdlZCA9IG91dHB1dDxQYWdlRXZlbnQ+KCk7XG4gIHJldHJ5ID0gb3V0cHV0KCk7XG5cbiAgdGFibGUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoV2F0dFRhYmxlQ29tcG9uZW50PHVua25vd24+LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuXG4gIHNlYXJjaCA9IHZpZXdDaGlsZChXYXR0U2VhcmNoQ29tcG9uZW50KTtcbiAgcmVzZXQgPSAoKSA9PiB0aGlzLnNlYXJjaCgpPy5jbGVhcigpO1xuXG4gIG9uU2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRhYmxlKCkuZGF0YVNvdXJjZS5maWx0ZXIgPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgfVxufVxuIl19
@@ -46,6 +46,10 @@ export class WattSearchComponent {
46
46
  * @ignore
47
47
  */
48
48
  search = outputFromObservable(this.search$.pipe(skip(1), debounceTime(this.debounceTime())));
49
+ /**
50
+ * @ignore
51
+ */
52
+ size = input('s', ...(ngDevMode ? [{ debugName: "size" }] : []));
49
53
  /**
50
54
  * Handles input event, optionally trimming the value.
51
55
  */
@@ -64,7 +68,7 @@ export class WattSearchComponent {
64
68
  this.onInput(element.value);
65
69
  }
66
70
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.3", type: WattSearchComponent, isStandalone: true, selector: "watt-search", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, trim: { classPropertyName: "trim", publicName: "trim", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "search" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: `
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.3", type: WattSearchComponent, isStandalone: true, selector: "watt-search", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, trim: { classPropertyName: "trim", publicName: "trim", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "search" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: `
68
72
  <label>
69
73
  <input
70
74
  #input
@@ -75,12 +79,12 @@ export class WattSearchComponent {
75
79
  />
76
80
  <span class="wrapper">
77
81
  <span class="button">
78
- <watt-icon name="search" size="s" aria-hidden="true" />
82
+ <watt-icon name="search" [size]="size()" aria-hidden="true" />
79
83
  <span class="text">{{ label() }}</span>
80
84
  </span>
81
85
  </span>
82
86
  <button class="clear" (click)="clear()">
83
- <watt-icon name="close" size="s" />
87
+ <watt-icon name="close" [size]="size()" />
84
88
  </button>
85
89
  </label>
86
90
  `, isInline: true, styles: [":host{height:44px}label{display:inline-block;width:100%;position:relative;text-transform:none;overflow:hidden;pointer-events:none}input{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;font-family:inherit;width:100%;height:44px;padding-left:var(--watt-space-l);padding-right:12px;border:1px solid var(--watt-on-light-low-emphasis);border-radius:4px;outline:0;opacity:0;transition-property:opacity}.wrapper{display:inline-flex;position:absolute;left:100%;width:100%;height:100%;transition-property:transform}.button{display:inline-flex;gap:var(--watt-space-xs);align-items:center;height:44px;padding:0 16px;color:var(--watt-color-primary);transform:translate(-100%);transition-property:transform;pointer-events:auto;cursor:pointer}.button:hover{color:var(--watt-color-primary-dark)}.text{opacity:1;transition-property:opacity}.clear{position:absolute;top:50%;right:var(--watt-space-s);padding:var(--watt-space-xs);border:none;border-radius:4px;background:none;color:var(--watt-color-primary);transform:translateY(-50%);cursor:pointer;pointer-events:auto}.clear:focus-visible{outline:2px solid var(--watt-color-primary)}input:placeholder-shown~.clear{display:none}input,.wrapper,.button,.text{transition-duration:.3s;transition-timing-function:cubic-bezier(.75,0,.25,1)}input{transition-timing-function:cubic-bezier(0,.5,0,1)}input:focus{border:1px solid var(--watt-color-primary)}input:not(:placeholder-shown),input:focus{pointer-events:auto;opacity:1;transition-timing-function:cubic-bezier(1,0,.5,0)}input:not(:placeholder-shown)+.wrapper,input:focus+.wrapper{transform:translate(-100%)}input:not(:placeholder-shown)+.wrapper .button,input:focus+.wrapper .button{pointer-events:none;transform:translate(-6px)}input:not(:placeholder-shown)+.wrapper .text,input:focus+.wrapper .text{opacity:0}\n"], dependencies: [{ kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }] });
@@ -98,14 +102,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
98
102
  />
99
103
  <span class="wrapper">
100
104
  <span class="button">
101
- <watt-icon name="search" size="s" aria-hidden="true" />
105
+ <watt-icon name="search" [size]="size()" aria-hidden="true" />
102
106
  <span class="text">{{ label() }}</span>
103
107
  </span>
104
108
  </span>
105
109
  <button class="clear" (click)="clear()">
106
- <watt-icon name="close" size="s" />
110
+ <watt-icon name="close" [size]="size()" />
107
111
  </button>
108
112
  </label>
109
113
  `, styles: [":host{height:44px}label{display:inline-block;width:100%;position:relative;text-transform:none;overflow:hidden;pointer-events:none}input{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;font-family:inherit;width:100%;height:44px;padding-left:var(--watt-space-l);padding-right:12px;border:1px solid var(--watt-on-light-low-emphasis);border-radius:4px;outline:0;opacity:0;transition-property:opacity}.wrapper{display:inline-flex;position:absolute;left:100%;width:100%;height:100%;transition-property:transform}.button{display:inline-flex;gap:var(--watt-space-xs);align-items:center;height:44px;padding:0 16px;color:var(--watt-color-primary);transform:translate(-100%);transition-property:transform;pointer-events:auto;cursor:pointer}.button:hover{color:var(--watt-color-primary-dark)}.text{opacity:1;transition-property:opacity}.clear{position:absolute;top:50%;right:var(--watt-space-s);padding:var(--watt-space-xs);border:none;border-radius:4px;background:none;color:var(--watt-color-primary);transform:translateY(-50%);cursor:pointer;pointer-events:auto}.clear:focus-visible{outline:2px solid var(--watt-color-primary)}input:placeholder-shown~.clear{display:none}input,.wrapper,.button,.text{transition-duration:.3s;transition-timing-function:cubic-bezier(.75,0,.25,1)}input{transition-timing-function:cubic-bezier(0,.5,0,1)}input:focus{border:1px solid var(--watt-color-primary)}input:not(:placeholder-shown),input:focus{pointer-events:auto;opacity:1;transition-timing-function:cubic-bezier(1,0,.5,0)}input:not(:placeholder-shown)+.wrapper,input:focus+.wrapper{transform:translate(-100%)}input:not(:placeholder-shown)+.wrapper .button,input:focus+.wrapper .button{pointer-events:none;transform:translate(-6px)}input:not(:placeholder-shown)+.wrapper .text,input:focus+.wrapper .text{opacity:0}\n"] }]
110
114
  }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy93YXR0L3BhY2thZ2Uvc2VhcmNoL3dhdHQtc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBMkJ6RCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCOztPQUVHO0lBQ0gsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQStCLE9BQU8sQ0FBQyxDQUFDO0lBRWxFOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBUyxFQUFFLGlEQUFDLENBQUM7SUFFMUI7O09BRUc7SUFDSCxZQUFZLEdBQUcsS0FBSyxDQUFTLEdBQUcsd0RBQUMsQ0FBQztJQUVsQzs7T0FFRztJQUNILElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxnREFBQyxDQUFDO0lBRW5COztPQUVHO0lBQ0gsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdGOztPQUVHO0lBQ0gsT0FBTyxDQUFDLEtBQWE7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU87UUFFakMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt1R0FoRFUsbUJBQW1COzJGQUFuQixtQkFBbUIsNGxCQXJCcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQlQsczNEQXRCUyxpQkFBaUI7OzJGQXdCaEIsbUJBQW1CO2tCQXpCL0IsU0FBUzs4QkFDQyxDQUFDLGlCQUFpQixDQUFDLFlBQ2xCLGFBQWEsWUFFYjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBza2lwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFdhdHRJY29uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1dhdHRJY29uQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICd3YXR0LXNlYXJjaCcsXG4gIHN0eWxlVXJsczogWycuL3dhdHQtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWwoKVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KGlucHV0LnZhbHVlKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPHdhdHQtaWNvbiBuYW1lPVwic2VhcmNoXCIgc2l6ZT1cInNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPnt7IGxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjbGVhclwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgIDx3YXR0LWljb24gbmFtZT1cImNsb3NlXCIgc2l6ZT1cInNcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9sYWJlbD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFNlYXJjaENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpbnB1dCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignaW5wdXQnKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCcnKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVib3VuY2VUaW1lID0gaW5wdXQ8bnVtYmVyPigzMDApO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0cmltcyB3aGl0ZXNwYWNlIGZyb20gdGhlIHNlYXJjaCB2YWx1ZSBiZWZvcmUgZW1pdHRpbmcuXG4gICAqL1xuICB0cmltID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzZWFyY2ggPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLnNlYXJjaCQucGlwZShza2lwKDEpLCBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUoKSkpKTtcblxuICAvKipcbiAgICogSGFuZGxlcyBpbnB1dCBldmVudCwgb3B0aW9uYWxseSB0cmltbWluZyB0aGUgdmFsdWUuXG4gICAqL1xuICBvbklucHV0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSB0aGlzLnRyaW0oKSA/IHZhbHVlLnRyaW0oKSA6IHZhbHVlO1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KHByb2Nlc3NlZCk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaW5wdXQoKS5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbGVtZW50LnZhbHVlID09PSAnJykgcmV0dXJuO1xuXG4gICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMub25JbnB1dChlbGVtZW50LnZhbHVlKTtcbiAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy93YXR0L3BhY2thZ2Uvc2VhcmNoL3dhdHQtc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFnQixNQUFNLHNCQUFzQixDQUFDOztBQTJCdkUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7T0FFRztJQUNILEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUErQixPQUFPLENBQUMsQ0FBQztJQUVsRTs7T0FFRztJQUNILEtBQUssR0FBRyxLQUFLLENBQVMsRUFBRSxpREFBQyxDQUFDO0lBRTFCOztPQUVHO0lBQ0gsWUFBWSxHQUFHLEtBQUssQ0FBUyxHQUFHLHdEQUFDLENBQUM7SUFFbEM7O09BRUc7SUFDSCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksZ0RBQUMsQ0FBQztJQUVuQjs7T0FFRztJQUNILE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUUxQzs7T0FFRztJQUNILE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3Rjs7T0FFRztJQUNILElBQUksR0FBRyxLQUFLLENBQWUsR0FBRyxnREFBQyxDQUFDO0lBRWhDOztPQUVHO0lBQ0gsT0FBTyxDQUFDLEtBQWE7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU87UUFFakMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt1R0FyRFUsbUJBQW1COzJGQUFuQixtQkFBbUIsaXRCQXJCcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQlQsczNEQXRCUyxpQkFBaUI7OzJGQXdCaEIsbUJBQW1CO2tCQXpCL0IsU0FBUzs4QkFDQyxDQUFDLGlCQUFpQixDQUFDLFlBQ2xCLGFBQWEsWUFFYjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBza2lwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFdhdHRJY29uQ29tcG9uZW50LCBXYXR0SWNvblNpemUgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbV2F0dEljb25Db21wb25lbnRdLFxuICBzZWxlY3RvcjogJ3dhdHQtc2VhcmNoJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC1zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbCgpXCJcbiAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoaW5wdXQudmFsdWUpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b25cIj5cbiAgICAgICAgICA8d2F0dC1pY29uIG5hbWU9XCJzZWFyY2hcIiBbc2l6ZV09XCJzaXplKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPnt7IGxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjbGVhclwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgIDx3YXR0LWljb24gbmFtZT1cImNsb3NlXCIgW3NpemVdPVwic2l6ZSgpXCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGFiZWw+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRTZWFyY2hDb21wb25lbnQge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaW5wdXQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2lucHV0Jyk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlYm91bmNlVGltZSA9IGlucHV0PG51bWJlcj4oMzAwKTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdHJpbXMgd2hpdGVzcGFjZSBmcm9tIHRoZSBzZWFyY2ggdmFsdWUgYmVmb3JlIGVtaXR0aW5nLlxuICAgKi9cbiAgdHJpbSA9IGlucHV0KHRydWUpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2VhcmNoID0gb3V0cHV0RnJvbU9ic2VydmFibGUodGhpcy5zZWFyY2gkLnBpcGUoc2tpcCgxKSwgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKCkpKSk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHNpemUgPSBpbnB1dDxXYXR0SWNvblNpemU+KCdzJyk7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaW5wdXQgZXZlbnQsIG9wdGlvbmFsbHkgdHJpbW1pbmcgdGhlIHZhbHVlLlxuICAgKi9cbiAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gdGhpcy50cmltKCkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcbiAgICB0aGlzLnNlYXJjaCQubmV4dChwcm9jZXNzZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmlucHV0KCkubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC52YWx1ZSA9PT0gJycpIHJldHVybjtcblxuICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLm9uSW5wdXQoZWxlbWVudC52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,60 @@
1
+ //#region License
2
+ /**
3
+ * @license
4
+ * Copyright 2020 Energinet DataHub A/S
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License2");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ //#endregion
19
+ import { afterRenderEffect, computed, linkedSignal, untracked, } from '@angular/core';
20
+ import { EXPANDABLE_CLASS } from './watt-table.component';
21
+ export const animateExpandableCells = (elements, trigger) => {
22
+ const cells = computed(() => elements().map((c) => c.nativeElement), ...(ngDevMode ? [{ debugName: "cells" }] : []));
23
+ const expandable = computed(() => cells().filter((c) => c.classList.contains(EXPANDABLE_CLASS)), ...(ngDevMode ? [{ debugName: "expandable" }] : []));
24
+ // Accumulate a map of the height of cells. This needs to remember previous values
25
+ // in case the table navigates/filters or otherwise changes the cells, since cell
26
+ // elements will be added or removed from the list dynamically.
27
+ const heightMap = linkedSignal({
28
+ source: computed(() => {
29
+ trigger(); // recalculate when cells are expanded
30
+ return Object.fromEntries(expandable().map((cell) => [cell.dataset.key, cell.offsetHeight]));
31
+ }),
32
+ computation: (source, prev) => ({ ...prev?.value, ...source }),
33
+ });
34
+ // Compute the differences in height for each cell since the last `trigger`
35
+ const deltaMap = linkedSignal({
36
+ source: heightMap,
37
+ computation: (source, prev) => Object.entries(source).map(([key, height]) => [key, height - (prev?.source[key] ?? 0)]),
38
+ });
39
+ return afterRenderEffect({
40
+ read: () => {
41
+ trigger(); // run the animation in response to the `trigger` signal only
42
+ untracked(() => {
43
+ deltaMap()
44
+ .filter(([, deltaY]) => deltaY !== 0)
45
+ .forEach(([key, deltaY]) => {
46
+ // Animate all cells below the expanding cell
47
+ const rowIndex = cells().find((c) => c.dataset.key === key)?.dataset.rowIndex;
48
+ if (!rowIndex)
49
+ return;
50
+ cells()
51
+ .filter((c) => c.dataset.rowIndex && c.dataset.rowIndex > rowIndex)
52
+ .forEach((c) => {
53
+ c.animate({ transform: [`translateY(${deltaY * -1}px)`, 'translateY(0)'] }, { duration: 300, easing: 'cubic-bezier(0.4, 0, 0.2, 1)', composite: 'add' });
54
+ });
55
+ });
56
+ });
57
+ },
58
+ });
59
+ };
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10YWJsZS1leHBhbmQtYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy93YXR0L3BhY2thZ2UvdGFibGUvd2F0dC10YWJsZS1leHBhbmQtYW5pbWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxZQUFZO0FBQ1osT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBRVIsWUFBWSxFQUVaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxRQUE2RCxFQUM3RCxPQUF3QixFQUN4QixFQUFFO0lBQ0YsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUF5QixHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsaURBQUMsQ0FBQztJQUM3RixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLHNEQUFDLENBQUM7SUFFakcsa0ZBQWtGO0lBQ2xGLGlGQUFpRjtJQUNqRiwrREFBK0Q7SUFDL0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFpRDtRQUM3RSxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztZQUNqRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBQ0YsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztJQUVILDJFQUEyRTtJQUMzRSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQTZDO1FBQ3hFLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUYsQ0FBQyxDQUFDO0lBRUgsT0FBTyxpQkFBaUIsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyw2REFBNkQ7WUFDeEUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixRQUFRLEVBQUU7cUJBQ1AsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO3FCQUNwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO29CQUN6Qiw2Q0FBNkM7b0JBQzdDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLFFBQVE7d0JBQUUsT0FBTztvQkFDdEIsS0FBSyxFQUFFO3lCQUNKLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO3lCQUNsRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDYixDQUFDLENBQUMsT0FBTyxDQUNQLEVBQUUsU0FBUyxFQUFFLENBQUMsY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsRUFBRSxFQUNoRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FDNUUsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIGFmdGVyUmVuZGVyRWZmZWN0LFxuICBjb21wdXRlZCxcbiAgRWxlbWVudFJlZixcbiAgbGlua2VkU2lnbmFsLFxuICBTaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFWFBBTkRBQkxFX0NMQVNTIH0gZnJvbSAnLi93YXR0LXRhYmxlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBhbmltYXRlRXhwYW5kYWJsZUNlbGxzID0gKFxuICBlbGVtZW50czogU2lnbmFsPHJlYWRvbmx5IEVsZW1lbnRSZWY8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+W10+LFxuICB0cmlnZ2VyOiBTaWduYWw8dW5rbm93bj5cbikgPT4ge1xuICBjb25zdCBjZWxscyA9IGNvbXB1dGVkPEhUTUxUYWJsZUNlbGxFbGVtZW50W10+KCgpID0+IGVsZW1lbnRzKCkubWFwKChjKSA9PiBjLm5hdGl2ZUVsZW1lbnQpKTtcbiAgY29uc3QgZXhwYW5kYWJsZSA9IGNvbXB1dGVkKCgpID0+IGNlbGxzKCkuZmlsdGVyKChjKSA9PiBjLmNsYXNzTGlzdC5jb250YWlucyhFWFBBTkRBQkxFX0NMQVNTKSkpO1xuXG4gIC8vIEFjY3VtdWxhdGUgYSBtYXAgb2YgdGhlIGhlaWdodCBvZiBjZWxscy4gVGhpcyBuZWVkcyB0byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXNcbiAgLy8gaW4gY2FzZSB0aGUgdGFibGUgbmF2aWdhdGVzL2ZpbHRlcnMgb3Igb3RoZXJ3aXNlIGNoYW5nZXMgdGhlIGNlbGxzLCBzaW5jZSBjZWxsXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGR5bmFtaWNhbGx5LlxuICBjb25zdCBoZWlnaHRNYXAgPSBsaW5rZWRTaWduYWw8UmVjb3JkPHN0cmluZywgbnVtYmVyPiwgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4oe1xuICAgIHNvdXJjZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgdHJpZ2dlcigpOyAvLyByZWNhbGN1bGF0ZSB3aGVuIGNlbGxzIGFyZSBleHBhbmRlZFxuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhleHBhbmRhYmxlKCkubWFwKChjZWxsKSA9PiBbY2VsbC5kYXRhc2V0LmtleSwgY2VsbC5vZmZzZXRIZWlnaHRdKSk7XG4gICAgfSksXG4gICAgY29tcHV0YXRpb246IChzb3VyY2UsIHByZXYpID0+ICh7IC4uLnByZXY/LnZhbHVlLCAuLi5zb3VyY2UgfSksXG4gIH0pO1xuXG4gIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGluIGhlaWdodCBmb3IgZWFjaCBjZWxsIHNpbmNlIHRoZSBsYXN0IGB0cmlnZ2VyYFxuICBjb25zdCBkZWx0YU1hcCA9IGxpbmtlZFNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LCBbc3RyaW5nLCBudW1iZXJdW10+KHtcbiAgICBzb3VyY2U6IGhlaWdodE1hcCxcbiAgICBjb21wdXRhdGlvbjogKHNvdXJjZSwgcHJldikgPT5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkubWFwKChba2V5LCBoZWlnaHRdKSA9PiBba2V5LCBoZWlnaHQgLSAocHJldj8uc291cmNlW2tleV0gPz8gMCldKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGFmdGVyUmVuZGVyRWZmZWN0KHtcbiAgICByZWFkOiAoKSA9PiB7XG4gICAgICB0cmlnZ2VyKCk7IC8vIHJ1biB0aGUgYW5pbWF0aW9uIGluIHJlc3BvbnNlIHRvIHRoZSBgdHJpZ2dlcmAgc2lnbmFsIG9ubHlcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGRlbHRhTWFwKClcbiAgICAgICAgICAuZmlsdGVyKChbLCBkZWx0YVldKSA9PiBkZWx0YVkgIT09IDApXG4gICAgICAgICAgLmZvckVhY2goKFtrZXksIGRlbHRhWV0pID0+IHtcbiAgICAgICAgICAgIC8vIEFuaW1hdGUgYWxsIGNlbGxzIGJlbG93IHRoZSBleHBhbmRpbmcgY2VsbFxuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBjZWxscygpLmZpbmQoKGMpID0+IGMuZGF0YXNldC5rZXkgPT09IGtleSk/LmRhdGFzZXQucm93SW5kZXg7XG4gICAgICAgICAgICBpZiAoIXJvd0luZGV4KSByZXR1cm47XG4gICAgICAgICAgICBjZWxscygpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMuZGF0YXNldC5yb3dJbmRleCAmJiBjLmRhdGFzZXQucm93SW5kZXggPiByb3dJbmRleClcbiAgICAgICAgICAgICAgLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjLmFuaW1hdGUoXG4gICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogW2B0cmFuc2xhdGVZKCR7ZGVsdGFZICogLTF9cHgpYCwgJ3RyYW5zbGF0ZVkoMCknXSB9LFxuICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzAwLCBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJywgY29tcG9zaXRlOiAnYWRkJyB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn07XG4iXX0=
@@ -18,7 +18,7 @@
18
18
  //#endregion
19
19
  import { SelectionModel } from '@angular/cdk/collections';
20
20
  import { KeyValuePipe, NgClass, NgTemplateOutlet } from '@angular/common';
21
- import { Component, ContentChild, ContentChildren, Directive, effect, ElementRef, EventEmitter, inject, input, Input, Output, signal, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
21
+ import { Component, ContentChild, ContentChildren, Directive, effect, ElementRef, EventEmitter, inject, input, Input, model, Output, signal, TemplateRef, ViewChild, viewChildren, ViewEncapsulation, } from '@angular/core';
22
22
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
23
23
  import { FormsModule } from '@angular/forms';
24
24
  import { MatSort, MatSortModule } from '@angular/material/sort';
@@ -28,10 +28,13 @@ import { WattCheckboxComponent } from '@energinet/watt/checkbox';
28
28
  import { WattDatePipe } from '@energinet/watt/core/date';
29
29
  import { WattIconComponent } from '@energinet/watt/icon';
30
30
  import { WattTableDataSource } from './watt-table-data-source';
31
+ import { animateExpandableCells } from './watt-table-expand-animation';
31
32
  import * as i0 from "@angular/core";
32
33
  import * as i1 from "@angular/forms";
33
34
  import * as i2 from "@angular/material/sort";
34
35
  import * as i3 from "@angular/material/table";
36
+ /** Class name for expandable cells. */
37
+ export const EXPANDABLE_CLASS = 'watt-table-cell--expandable';
35
38
  export class WattTableCellDirective {
36
39
  /** The WattTableColumn this template applies to. */
37
40
  column;
@@ -155,6 +158,18 @@ export class WattTableComponent {
155
158
  * If set to `true`, the column headers will not be shown. Default is `false`.
156
159
  */
157
160
  hideColumnHeaders = false;
161
+ /**
162
+ * Choose from a predefined set of display variants.
163
+ */
164
+ variant = input(...(ngDevMode ? [undefined, { debugName: "variant" }] : []));
165
+ /**
166
+ * Array of rows that are currently expanded.
167
+ */
168
+ expanded = model([], ...(ngDevMode ? [{ debugName: "expanded" }] : []));
169
+ /**
170
+ * Optional function for uniquely identifying rows.
171
+ */
172
+ trackBy = input(...(ngDevMode ? [undefined, { debugName: "trackBy" }] : []));
158
173
  /**
159
174
  * Emits whenever the selection updates. Only works when selectable is `true`.
160
175
  */
@@ -174,10 +189,16 @@ export class WattTableComponent {
174
189
  /** @ignore */
175
190
  _sort;
176
191
  /** @ignore */
192
+ _tableCellElements = viewChildren('td', ...(ngDevMode ? [{ debugName: "_tableCellElements" }] : []));
193
+ /** @ignore */
194
+ _animationEffect = animateExpandableCells(this._tableCellElements, this.expanded);
195
+ /** @ignore */
177
196
  _selectionModel = new SelectionModel(true, []);
178
197
  /** @ignore */
179
198
  _checkboxColumn = '__checkboxColumn__';
180
199
  /** @ignore */
200
+ _expandableColumn = '__expandableColumn__';
201
+ /** @ignore */
181
202
  _element = inject(ElementRef);
182
203
  /** @ignore */
183
204
  _datePipe = inject(WattDatePipe);
@@ -240,12 +261,17 @@ export class WattTableComponent {
240
261
  return;
241
262
  const sizing = Object.keys(this.columns)
242
263
  .filter((key) => !displayedColumns || displayedColumns.includes(key))
243
- .map((key) => this.columns[key].size)
244
- .map((size) => size ?? 'auto');
264
+ .map((key) => this.columns[key])
265
+ .filter((column) => !column.expandable)
266
+ .map((column) => column.size ?? 'auto');
245
267
  if (this.selectable) {
246
268
  // Add space for extra checkbox column
247
269
  sizing.unshift('var(--watt-space-xl)');
248
270
  }
271
+ if (this._isExpandable()) {
272
+ // Add space for extra expandable column
273
+ sizing.push('min-content');
274
+ }
249
275
  this._element.nativeElement.style.setProperty('--watt-table-grid-template-columns', sizing.join(' '));
250
276
  this.checkHasFooter();
251
277
  }
@@ -281,7 +307,12 @@ export class WattTableComponent {
281
307
  if (this.columns === undefined)
282
308
  return [];
283
309
  const columns = this.displayedColumns ?? Object.keys(this.columns);
284
- return this.selectable ? [this._checkboxColumn, ...columns] : columns;
310
+ return [
311
+ ...(this.selectable ? [this._checkboxColumn] : []),
312
+ ...columns.filter((key) => !this.columns[key].expandable),
313
+ ...(this._isExpandable() ? [this._expandableColumn] : []),
314
+ ...columns.filter((key) => this.columns[key].expandable),
315
+ ];
285
316
  }
286
317
  /** @ignore */
287
318
  _getColumnTemplate(column) {
@@ -307,6 +338,15 @@ export class WattTableComponent {
307
338
  return column.value.cell?.(row) ?? this.getCellData(row, column.value);
308
339
  }
309
340
  /** @ignore */
341
+ _getRowKey = (index, row) => {
342
+ const trackBy = this.trackBy();
343
+ if (typeof trackBy === 'string')
344
+ return row[trackBy];
345
+ if (typeof trackBy === 'function')
346
+ return trackBy(index, row);
347
+ return this.dataSource.data.indexOf(row);
348
+ };
349
+ /** @ignore */
310
350
  _isActiveRow(row) {
311
351
  if (!this.activeRow)
312
352
  return false;
@@ -315,13 +355,20 @@ export class WattTableComponent {
315
355
  : row === this.activeRow;
316
356
  }
317
357
  /** @ignore */
358
+ _isExpandable() {
359
+ return Object.values(this.columns).some((column) => column.expandable);
360
+ }
361
+ /** @ignore */
318
362
  _onRowClick(row) {
319
363
  if (this.disabled || window.getSelection()?.toString() !== '')
320
364
  return;
365
+ if (this._isExpandable()) {
366
+ this.expanded.update((rows) => rows.includes(row) ? rows.filter((r) => r != row) : [...rows, row]);
367
+ }
321
368
  this.rowClick.emit(row);
322
369
  }
323
370
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
324
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTableComponent, isStandalone: true, selector: "watt-table", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: false, isRequired: false, transformFunction: null }, resolveHeader: { classPropertyName: "resolveHeader", publicName: "resolveHeader", isSignal: false, isRequired: false, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: false, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: false, isRequired: false, transformFunction: null }, sortClear: { classPropertyName: "sortClear", publicName: "sortClear", isSignal: false, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: false, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, suppressRowHoverHighlight: { classPropertyName: "suppressRowHoverHighlight", publicName: "suppressRowHoverHighlight", isSignal: false, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: false, isRequired: false, transformFunction: null }, activeRowComparator: { classPropertyName: "activeRowComparator", publicName: "activeRowComparator", isSignal: false, isRequired: false, transformFunction: null }, hideColumnHeaders: { classPropertyName: "hideColumnHeaders", publicName: "hideColumnHeaders", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", rowClick: "rowClick", sortChange: "sortChange" }, providers: [WattDatePipe], queries: [{ propertyName: "_toolbar", first: true, predicate: WattTableToolbarDirective, descendants: true }, { propertyName: "_cells", predicate: WattTableCellDirective }], viewQueries: [{ propertyName: "_sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n >\n @if (_getColumnTemplate(column.value); as template) {\n <div>\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n (click)=\"_onRowClick(row)\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row td{cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row) td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattCheckboxComponent, selector: "watt-checkbox", inputs: ["required"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None });
371
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTableComponent, isStandalone: true, selector: "watt-table", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: false, isRequired: false, transformFunction: null }, resolveHeader: { classPropertyName: "resolveHeader", publicName: "resolveHeader", isSignal: false, isRequired: false, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: false, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: false, isRequired: false, transformFunction: null }, sortClear: { classPropertyName: "sortClear", publicName: "sortClear", isSignal: false, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: false, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, suppressRowHoverHighlight: { classPropertyName: "suppressRowHoverHighlight", publicName: "suppressRowHoverHighlight", isSignal: false, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: false, isRequired: false, transformFunction: null }, activeRowComparator: { classPropertyName: "activeRowComparator", publicName: "activeRowComparator", isSignal: false, isRequired: false, transformFunction: null }, hideColumnHeaders: { classPropertyName: "hideColumnHeaders", publicName: "hideColumnHeaders", isSignal: false, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange", selectionChange: "selectionChange", rowClick: "rowClick", sortChange: "sortChange" }, host: { properties: { "class.watt-table-variant-zebra": "variant() === \"zebra\"" } }, providers: [WattDatePipe], queries: [{ propertyName: "_toolbar", first: true, predicate: WattTableToolbarDirective, descendants: true }, { propertyName: "_cells", predicate: WattTableCellDirective }], viewQueries: [{ propertyName: "_tableCellElements", predicate: ["td"], descendants: true, isSignal: true }, { propertyName: "_sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattCheckboxComponent, selector: "watt-checkbox", inputs: ["required"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [NgTemplateOutlet]] });
325
372
  }
326
373
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTableComponent, decorators: [{
327
374
  type: Component,
@@ -334,7 +381,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
334
381
  MatTableModule,
335
382
  WattIconComponent,
336
383
  WattCheckboxComponent,
337
- ], providers: [WattDatePipe], encapsulation: ViewEncapsulation.None, selector: 'watt-table', template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n >\n @if (_getColumnTemplate(column.value); as template) {\n <div>\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n (click)=\"_onRowClick(row)\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row td{cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row) td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"] }]
384
+ ], providers: [WattDatePipe], encapsulation: ViewEncapsulation.None, selector: 'watt-table', host: {
385
+ '[class.watt-table-variant-zebra]': 'variant() === "zebra"',
386
+ }, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"] }]
338
387
  }], ctorParameters: () => [], propDecorators: { dataSource: [{
339
388
  type: Input
340
389
  }], columns: [{
@@ -397,4 +446,4 @@ export const WATT_TABLE = [
397
446
  WattTableToolbarDirective,
398
447
  WattTableToolbarSpacerComponent,
399
448
  ];
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS93YXR0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3RhYmxlL3dhdHQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFZLFlBQVksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVB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cEIsS0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQU9OLGFBQWE7c0JBRFosS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixlQUFlO3NCQURkLE1BQU07Z0JBT1AsUUFBUTtzQkFEUCxNQUFNO2dCQU9QLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxNQUFNO3NCQURMLGVBQWU7dUJBQUMsc0JBQXNCO2dCQUt2QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCO2dCQUt2QyxLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTzs7QUEwTHBCLE1BQU0sT0FBTywrQkFBK0I7dUdBQS9CLCtCQUErQjsyRkFBL0IsK0JBQStCLHFGQVRoQyxFQUFFOzsyRkFTRCwrQkFBK0I7a0JBWDNDLFNBQVM7K0JBQ0UsMkJBQTJCLFlBQzNCLEVBQUU7O0FBV2QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLCtCQUErQjtDQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgS2V5VmFsdWUsIEtleVZhbHVlUGlwZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBRdWVyeUxpc3QsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0TW9kdWxlLCBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBXYXR0Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY2hlY2tib3gnO1xuaW1wb3J0IHsgV2F0dERhdGVQaXBlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0SWNvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcbmltcG9ydCB7IElXYXR0VGFibGVEYXRhU291cmNlLCBXYXR0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi93YXR0LXRhYmxlLWRhdGEtc291cmNlJztcblxuZXhwb3J0IGludGVyZmFjZSBXYXR0VGFibGVDb2x1bW48VD4ge1xuICAvKipcbiAgICogVGhlIGRhdGEgdGhhdCB0aGlzIGNvbHVtbiBzaG91bGQgYmUgYm91bmQgdG8sIGVpdGhlciBhcyBhIHByb3BlcnR5IG9mIGBUYFxuICAgKiBvciBkZXJpdmVkIGZyb20gZWFjaCByb3cgb2YgYFRgIHVzaW5nIGFuIGFjY2Vzc29yIGZ1bmN0aW9uLiAgVXNlIGBudWxsYFxuICAgKiBmb3IgY29sdW1ucyB0aGF0IHNob3VsZCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGRhdGEsIGJ1dCBub3RlIHRoYXQgdGhpc1xuICAgKiB3aWxsIGRpc2FibGUgc29ydGluZyBhbmQgYXV0b21hdGljIGNlbGwgcG9wdWxhdGlvbi5cbiAgICovXG4gIGFjY2Vzc29yOiBrZXlvZiBUIHwgKChyb3c6IFQpID0+IHVua25vd24pIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgaGVhZGVyIHRleHQgdG8gYSBzdGF0aWMgZGlzcGxheSB2YWx1ZS4gVGhpcyB3aWxsIHByZXZlbnRcbiAgICogdGhlIGByZXNvbHZlSGVhZGVyYCBpbnB1dCBmdW5jdGlvbiBmcm9tIGJlaW5nIGNhbGxlZCBmb3IgdGhpcyBjb2x1bW4uXG4gICAqL1xuICBoZWFkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBjZWxsIGNvbnRlbnQgd2hlbiBub3QgdXNpbmcgdGVtcGxhdGUuIEJ5IGRlZmF1bHQsXG4gICAqIGNlbGwgY29udGVudCBpcyBmb3VuZCB1c2luZyB0aGUgYGFjY2Vzc29yYCAodW5sZXNzIGl0IGlzIGBudWxsYCkuXG4gICAqL1xuICBjZWxsPzogKHJvdzogVCkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbi4gRGVmYXVsdHMgdG8gYHRydWVgXG4gICAqIHVubGVzcyBgYWNjZXNzb3JgIGlzIGBudWxsYC5cbiAgICovXG4gIHNvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbHVtbiBzaXplIHVzaW5nIGdyaWQgc2l6aW5nIHZhbHVlcy4gRGVmYXVsdHMgdG8gYFwiYXV0b1wiYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWNjZXB0cyBhbGwgb2YgdGhlIENTUyBncmlkIHRyYWNrIHNpemUga2V5d29yZHMgKHN1Y2ggYXMgYG1pbi1jb250ZW50YCxcbiAgICogYG1heC1jb250ZW50YCwgYG1pbm1heCgpYCkgYXMgd2VsbCBhcyBmcmFjdGlvbmFsIChgZnJgKSwgcGVyY2VudGFnZSAoYCVgKVxuICAgKiBhbmQgbGVuZ3RoIChgcHhgLCBgZW1gLCBldGMpIHVuaXRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8jdHJhY2stc2l6ZXNcbiAgICovXG4gIHNpemU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvcml6b250YWxseSBhbGlnbiB0aGUgY29udGVudHMgb2YgdGhlIGNvbHVtbi4gRGVmYXVsdHMgdG8gYFwibGVmdFwiYC5cbiAgICovXG4gIGFsaWduPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgaWNvbiB3aWxsIGJlIHNob3duIGluIHRoZSBoZWFkZXIgY2VsbCwgd2l0aCBhbiBjbGljayBldmVudC5cbiAgICovXG4gIGhlbHBlckFjdGlvbj86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgaGVhZGVyIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGhlYWRlckNlbGxDbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBkYXRhIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGRhdGFDZWxsQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZvb3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgY29sdW1uLlxuICAgKi9cbiAgZm9vdGVyPzogV2F0dFRhYmxlQ29sdW1uRm9vdGVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBjb2x1bW4gcmVtYWlucyB2aXNpYmxlIHdoZW4gaG9yaXpvbnRhbGx5IHNjcm9sbGluZy5cbiAgICovXG4gIHN0aWNreUVuZD86IFNpZ25hbDxib29sZWFuPjtcblxuICB0b29sdGlwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBmb290ZXIgY2VsbCBvZiBhIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXR0VGFibGVDb2x1bW5Gb290ZXIge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvb3RlciBjZWxsLlxuICAgKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nIHwgbnVtYmVyPjtcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBmb290ZXIgY2VsbC5cbiAgICovXG4gIGNsYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlY29yZCBmb3IgZGVmaW5pbmcgY29sdW1ucyB3aXRoIGtleXMgdXNlZCBhcyBjb2x1bW4gaWRlbnRpZmllcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFdhdHRUYWJsZUNvbHVtbkRlZjxUPiA9IFJlY29yZDxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj47XG5cbi8vIFVzZWQgZm9yIHN0cm9uZ2x5IHR5cGluZyB0aGUgc3RydWN0dXJhbCBkaXJlY3RpdmVcbmludGVyZmFjZSBXYXR0VGFibGVDZWxsQ29udGV4dDxUPiB7XG4gICRpbXBsaWNpdDogVDtcbn1cblxuaW50ZXJmYWNlIFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFQ+IHtcbiAgJGltcGxpY2l0OiBUO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbd2F0dFRhYmxlQ2VsbF0nLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0VGFibGVDZWxsRGlyZWN0aXZlPFQ+IHtcbiAgLyoqIFRoZSBXYXR0VGFibGVDb2x1bW4gdGhpcyB0ZW1wbGF0ZSBhcHBsaWVzIHRvLiAqL1xuICBASW5wdXQoJ3dhdHRUYWJsZUNlbGwnKSBjb2x1bW4hOiBXYXR0VGFibGVDb2x1bW48VD47XG4gIEBJbnB1dCgnd2F0dFRhYmxlQ2VsbEhlYWRlcicpIGhlYWRlcj86IHN0cmluZztcbiAgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8V2F0dFRhYmxlQ2VsbENvbnRleHQ8VD4+KTtcbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgX2RpcmVjdGl2ZTogV2F0dFRhYmxlQ2VsbERpcmVjdGl2ZTxUPixcbiAgICBjb250ZXh0OiB1bmtub3duXG4gICk6IGNvbnRleHQgaXMgV2F0dFRhYmxlQ2VsbENvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t3YXR0VGFibGVUb29sYmFyXScsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmU8VD4ge1xuICB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxXYXR0VGFibGVUb29sYmFyQ29udGV4dDxUW10+Pik7XG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFQ+KFxuICAgIF9kaXJlY3RpdmU6IFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmU8VD4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApOiBjb250ZXh0IGlzIFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFRbXT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVXNhZ2U6XG4gKiBgaW1wb3J0IHsgV0FUVF9UQUJMRSB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RhYmxlJztgXG4gKi9cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIFdhdHRJY29uQ29tcG9uZW50LFxuICAgIFdhdHRDaGVja2JveENvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbV2F0dERhdGVQaXBlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc2VsZWN0b3I6ICd3YXR0LXRhYmxlJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vd2F0dC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUncyBzb3VyY2Ugb2YgZGF0YS4gUHJvcGVydHkgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAqIGluaXRpYWxpemF0aW9uLCBpbnN0ZWFkIHVwZGF0ZSB0aGUgZGF0YSBvbiB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IElXYXR0VGFibGVEYXRhU291cmNlPFQ+O1xuXG4gIC8qKlxuICAgKiBDb2x1bW4gZGVmaW5pdGlvbiByZWNvcmQgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgY29sdW1uIGlkZW50aWZpZXJzXG4gICAqIGFuZCB2YWx1ZXMgYmVpbmcgdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uLiBUaGUgb3JkZXIgb2YgdGhlIGNvbHVtbnNcbiAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvcGVydHkgb3JkZXIsIGJ1dCBjYW4gYmUgb3ZlcnJ1bGVkIGJ5IHRoZVxuICAgKiBgZGlzcGxheWVkQ29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiBXYXR0VGFibGVDb2x1bW5EZWY8VD4gPSB7fTtcblxuICAvKipcbiAgICogVXNlZCBmb3IgaGlkaW5nIG9yIHJlb3JkZXJpbmcgY29sdW1ucyBkZWZpbmVkIGluIHRoZSBgY29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGRpc2FibGluZyB0aGUgdGFibGUuIFRoaXMgd2lsbCBkaXNhYmxlIGFsbCB1c2VyIGludGVyYWN0aW9uXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRhYmxlIGZvciB2aXN1YWxseSBpbXBhaXJlZCB1c2Vycy5cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB0YWJsZSB3aWxsIHNob3cgYSBsb2FkaW5nIGluZGljYXRvclxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGZvb3RlciB3aWxsIGJlIHN0aWNreVxuICAgKi9cbiAgQElucHV0KCkgc3RpY2t5Rm9vdGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBoZWFkZXIgdGV4dCBmb3IgY29sdW1ucyB0aGF0XG4gICAqIGRvIG5vdCBoYXZlIGEgc3RhdGljIGhlYWRlciB0ZXh0IHNldCBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24uXG4gICAqIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBvZiBjb2x1bW4gaGVhZGVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlc29sdmVIZWFkZXI/OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgY29sdW1uIHRoYXQgc2hvdWxkIGJlIHNvcnRlZCBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzb3J0QnkgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNvcnQgZGlyZWN0aW9uIG9mIHRoZSBpbml0aWFsbHkgc29ydGVkIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgdXNlciB0byBjbGVhciB0aGUgc29ydC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgc29ydENsZWFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGluY2x1ZGUgYSBjaGVja2JveCBjb2x1bW4gZm9yIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWxseSBzZWxlY3RlZCByb3dzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuXG4gIGluaXRpYWxTZWxlY3Rpb24gPSBpbnB1dDxUW10+KFtdKTtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZGlzYWJsZSByb3cgaG92ZXIgaGlnaGxpZ2h0LlxuICAgKi9cbiAgQElucHV0KClcbiAgc3VwcHJlc3NSb3dIb3ZlckhpZ2hsaWdodCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZVJvdz86IFQ7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0d28gcm93cyBhcmUgZXF1YWwuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBkZXRlcm1pbmluZyB0aGUgYWN0aXZlIHJvdyBpcyB0byBjb21wYXJlXG4gICAqIHRoZSB0d28gcm93IG9iamVjdHMgdXNpbmcgc3RyaWN0IGVxdWFsaXR5IGNoZWNrLiBUaGlzIGlzIHN1ZmZpY2llbnRcbiAgICogYXMgbG9uZyBhcyB0aGUgaW5zdGFuY2VzIHJlbWFpbiB0aGUgc2FtZSwgd2hpY2ggbWF5IG5vdCBiZSB0aGUgY2FzZVxuICAgKiBpZiByb3cgZGF0YSBpcyByZWNyZWF0ZWQgb3IgcmVidWlsdCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBhY3RpdmVSb3dDb21wYXJhdG9yPzogKGN1cnJlbnRSb3c6IFQsIGFjdGl2ZVJvdzogVCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbHVtbiBoZWFkZXJzIHdpbGwgbm90IGJlIHNob3duLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBoaWRlQ29sdW1uSGVhZGVycyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIHVwZGF0ZXMuIE9ubHkgd29ya3Mgd2hlbiBzZWxlY3RhYmxlIGlzIGB0cnVlYC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGFjdGl2ZSBzb3J0IG9yIHNvcnQgZGlyZWN0aW9uLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihXYXR0VGFibGVDZWxsRGlyZWN0aXZlKVxuICBfY2VsbHMhOiBRdWVyeUxpc3Q8V2F0dFRhYmxlQ2VsbERpcmVjdGl2ZTxUPj47XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZChXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlKVxuICBfdG9vbGJhcj86IFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmU8VD47XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQFZpZXdDaGlsZChNYXRTb3J0KVxuICBfc29ydCE6IE1hdFNvcnQ7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfY2hlY2tib3hDb2x1bW4gPSAnX19jaGVja2JveENvbHVtbl9fJztcblxuICAvKiogQGlnbm9yZSAqL1xuICBfZWxlbWVudCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2RhdGVQaXBlID0gaW5qZWN0KFdhdHREYXRlUGlwZSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2hhc0Zvb3RlciA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBmb3JtYXRDZWxsRGF0YShjZWxsOiB1bmtub3duKSB7XG4gICAgaWYgKCFjZWxsKSByZXR1cm4gJ+KAlCc7XG4gICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKGNlbGwpO1xuICAgIHJldHVybiBjZWxsO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBnZXRDZWxsRGF0YShyb3c6IFQsIGNvbHVtbj86IFdhdHRUYWJsZUNvbHVtbjxUPikge1xuICAgIGlmICghY29sdW1uPy5hY2Nlc3NvcikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBhY2Nlc3NvciB9ID0gY29sdW1uO1xuICAgIGNvbnN0IGNlbGwgPSB0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicgPyBhY2Nlc3Nvcihyb3cpIDogcm93W2FjY2Vzc29yXTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRDZWxsRGF0YShjZWxsKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgY2hlY2tIYXNGb290ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5faGFzRm9vdGVyLnNldChPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykuc29tZSgoY29sdW1uKSA9PiAhIWNvbHVtbi5mb290ZXIpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4uKHRoaXMuaW5pdGlhbFNlbGVjdGlvbigpID8/IFtdKSk7XG4gICAgfSk7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3Rpb24pID0+IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICB0aGlzLmNoZWNrSGFzRm9vdGVyKCk7XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLl9zb3J0O1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBXYXR0VGFibGVEYXRhU291cmNlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKHJvdzogVCwgc29ydEhlYWRlcklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNvcnRDb2x1bW4gPSB0aGlzLmNvbHVtbnNbc29ydEhlYWRlcklkXTtcbiAgICAgIGlmICghc29ydENvbHVtbj8uYWNjZXNzb3IpIHJldHVybiAnJztcblxuICAgICAgLy8gQWNjZXNzIHJhdyB2YWx1ZSBmb3Igc29ydGluZywgaW5zdGVhZCBvZiBhcHBseWluZyBkZWZhdWx0IGZvcm1hdHRpbmcuXG4gICAgICBjb25zdCB7IGFjY2Vzc29yIH0gPSBzb3J0Q29sdW1uO1xuICAgICAgY29uc3QgY2VsbCA9IHR5cGVvZiBhY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGFjY2Vzc29yKHJvdykgOiByb3dbYWNjZXNzb3JdO1xuXG4gICAgICAvLyBNYWtlIHNvcnRpbmcgYnkgdGV4dCBjYXNlIGluc2Vuc2l0aXZlLlxuICAgICAgaWYgKHR5cGVvZiBjZWxsID09PSAnc3RyaW5nJykgcmV0dXJuIGNlbGwudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGNlbGwuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIGNlbGwgYXMgbnVtYmVyO1xuICAgIH07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSB8fCBjaGFuZ2VzWydkaXNwbGF5ZWRDb2x1bW5zJ10gfHwgY2hhbmdlc1snc2VsZWN0YWJsZSddKSB7XG4gICAgICBjb25zdCB7IGRpc3BsYXllZENvbHVtbnMgfSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmNvbHVtbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzaXppbmcgPSBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4gIWRpc3BsYXllZENvbHVtbnMgfHwgZGlzcGxheWVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAubWFwKChrZXkpID0+IHRoaXMuY29sdW1uc1trZXldLnNpemUpXG4gICAgICAgIC5tYXAoKHNpemUpID0+IHNpemUgPz8gJ2F1dG8nKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIGV4dHJhIGNoZWNrYm94IGNvbHVtblxuICAgICAgICBzaXppbmcudW5zaGlmdCgndmFyKC0td2F0dC1zcGFjZS14bCknKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnLS13YXR0LXRhYmxlLWdyaWQtdGVtcGxhdGUtY29sdW1ucycsXG4gICAgICAgIHNpemluZy5qb2luKCcgJylcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY2hlY2tIYXNGb290ZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzZWxlY3Rpb24uIE9ubHkgd29ya3Mgd2hlbiBzZWxlY3RhYmxlIGlzIGB0cnVlYC5cbiAgICovXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgZ2V0IF9jb2x1bW5TZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEuZXZlcnkoKHJvdykgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHNldCBfY29sdW1uU2VsZWN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBnZXQgX2ZpbHRlcmVkU2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maWx0ZXIoKHJvdykgPT5cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEuaW5jbHVkZXMocm93KVxuICAgICk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Q29sdW1ucygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID8/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSA/IFt0aGlzLl9jaGVja2JveENvbHVtbiwgLi4uY29sdW1uc10gOiBjb2x1bW5zO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbjogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29sdW1uID09PSBjb2x1bW4pPy50ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi52YWx1ZS5oZWFkZXIgPT09ICdzdHJpbmcnKSByZXR1cm4gY29sdW1uLnZhbHVlLmhlYWRlcjtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5fY2VsbHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbi52YWx1ZSk7XG4gICAgcmV0dXJuIGNlbGw/LmhlYWRlciA/PyB0aGlzLnJlc29sdmVIZWFkZXI/Lihjb2x1bW4ua2V5KSA/PyBjb2x1bW4ua2V5O1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlbHBlckFjdGlvbihjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Pikge1xuICAgIHJldHVybiBjb2x1bW4udmFsdWUuaGVscGVyQWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbHVlLnRvb2x0aXA7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Q29sdW1uQ2VsbChjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Piwgcm93OiBUKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZS5jZWxsPy4ocm93KSA/PyB0aGlzLmdldENlbGxEYXRhKHJvdywgY29sdW1uLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0FjdGl2ZVJvdyhyb3c6IFQpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlUm93Q29tcGFyYXRvclxuICAgICAgPyB0aGlzLmFjdGl2ZVJvd0NvbXBhcmF0b3Iocm93LCB0aGlzLmFjdGl2ZVJvdylcbiAgICAgIDogcm93ID09PSB0aGlzLmFjdGl2ZVJvdztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9vblJvd0NsaWNrKHJvdzogVCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSAhPT0gJycpIHJldHVybjtcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQocm93KTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YXR0LXRhYmxlLXRvb2xiYXItc3BhY2VyJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS13YXR0LXNwYWNlLXhsKTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0VGFibGVUb29sYmFyU3BhY2VyQ29tcG9uZW50IHt9XG5cbmV4cG9ydCBjb25zdCBXQVRUX1RBQkxFID0gW1xuICBXYXR0VGFibGVDb21wb25lbnQsXG4gIFdhdHRUYWJsZUNlbGxEaXJlY3RpdmUsXG4gIFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmUsXG4gIFdhdHRUYWJsZVRvb2xiYXJTcGFjZXJDb21wb25lbnQsXG5dO1xuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx0YWJsZVxuICBtYXQtdGFibGVcbiAgbWF0U29ydFxuICByb2xlPVwidHJlZWdyaWRcIlxuICBbbmdDbGFzc109XCJ7ICd3YXR0LXRhYmxlLWhhcy1zZWxlY3Rpb24nOiBfZmlsdGVyZWRTZWxlY3Rpb24ubGVuZ3RoID4gMCB9XCJcbiAgW21hdFNvcnRBY3RpdmVdPVwic29ydEJ5XCJcbiAgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gIFttYXRTb3J0RGlzYWJsZUNsZWFyXT1cIiFzb3J0Q2xlYXJcIlxuICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJkZXNjcmlwdGlvblwiXG4gIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbj5cbiAgQGlmIChzZWxlY3RhYmxlKSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIl9jaGVja2JveENvbHVtblwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cIndhdHQtdGFibGUtY2hlY2tib3gtY2VsbFwiPlxuICAgICAgICA8d2F0dC1jaGVja2JveCBbKG5nTW9kZWwpXT1cIl9jb2x1bW5TZWxlY3Rpb25cIiAvPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIndhdHQtdGFibGUtY2hlY2tib3gtY2VsbFwiPlxuICAgICAgICA8d2F0dC1jaGVja2JveFxuICAgICAgICAgIFtuZ01vZGVsXT1cIl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUocm93KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICB9XG5cbiAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnMgfCBrZXl2YWx1ZTsgdHJhY2sgY29sdW1uLmtleSkge1xuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ua2V5XCIgW3N0aWNreUVuZF09XCJjb2x1bW4udmFsdWUuc3RpY2t5RW5kPy4oKVwiPlxuICAgICAgPHRoXG4gICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtYWxpZ24te3sgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0JyB9fSB7e1xuICAgICAgICAgIGNvbHVtbi52YWx1ZS5oZWFkZXJDZWxsQ2xhc3NcbiAgICAgICAgfX1cIlxuICAgICAgPlxuICAgICAgICBAaWYgKF9nZXRDb2x1bW5IZWxwZXJBY3Rpb24oY29sdW1uKTsgYXMgYWN0aW9uKSB7XG4gICAgICAgICAgPHdhdHQtaWNvbiBuYW1lPVwiaGVscFwiIChjbGljayk9XCJhY3Rpb24oKVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ3YXR0LXRhYmxlLWhlYWRlci1jZWxsXCJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW4udmFsdWUuYWxpZ24gPT09ICdyaWdodCcgPyAnYmVmb3JlJyA6ICdhZnRlcidcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnZhbHVlLmFjY2Vzc29yIHx8IGNvbHVtbi52YWx1ZS5zb3J0ID09PSBmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBfZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbikgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uKTsgYXMgdG9vbHRpcCkge1xuICAgICAgICAgIDx3YXR0LWljb24gW3RpdGxlXT1cInRvb2x0aXBcIiBuYW1lPVwiaW5mb1wiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgY2xhc3M9XCJ3YXR0LXRhYmxlLWFsaWduLXt7IGNvbHVtbi52YWx1ZS5hbGlnbiA/PyAnbGVmdCcgfX0ge3sgY29sdW1uLnZhbHVlLmRhdGFDZWxsQ2xhc3MgfX1cIlxuICAgICAgPlxuICAgICAgICBAaWYgKF9nZXRDb2x1bW5UZW1wbGF0ZShjb2x1bW4udmFsdWUpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IF9nZXRDb2x1bW5DZWxsKGNvbHVtbiwgcm93KSB9fVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuXG4gICAgICBAaWYgKF9oYXNGb290ZXIoKSkge1xuICAgICAgICA8dGRcbiAgICAgICAgICBtYXQtZm9vdGVyLWNlbGxcbiAgICAgICAgICAqbWF0Rm9vdGVyQ2VsbERlZlxuICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLnZhbHVlLmZvb3Rlcj8uY2xhc3MgfX0gd2F0dC10YWJsZS1hbGlnbi17e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0J1xuICAgICAgICAgIH19IFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4udmFsdWUuZm9vdGVyPy52YWx1ZT8uKCkgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3BhY2VyXCI+XG4gICAgPHRkIGNsYXNzPVwid2F0dC10YWJsZS1mb290ZXItc3BhY2VyXCIgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIEBpZiAoIWhpZGVDb2x1bW5IZWFkZXJzKSB7XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpXCI+PC90cj5cbiAgfVxuICA8dHJcbiAgICBtYXQtcm93XG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IF9nZXRDb2x1bW5zKClcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93ID09PSBhY3RpdmVSb3dcIlxuICAgIChjbGljayk9XCJfb25Sb3dDbGljayhyb3cpXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnd2F0dC10YWJsZS1oaWdobGlnaHQtcm93JzogIWRpc2FibGVkICYmICFzdXBwcmVzc1Jvd0hvdmVySGlnaGxpZ2h0LFxuICAgICAgJ3dhdHQtdGFibGUtY2xpY2thYmxlLXJvdyc6ICFkaXNhYmxlZCAmJiByb3dDbGljay5vYnNlcnZlZCxcbiAgICAgICd3YXR0LXRhYmxlLWFjdGl2ZS1yb3cnOiBfaXNBY3RpdmVSb3cocm93KSxcbiAgICAgICd3YXR0LXRhYmxlLW5vLWVuZC1kaXZpZGVyJzogaGlkZUNvbHVtbkhlYWRlcnMsXG4gICAgfVwiXG4gID48L3RyPlxuXG4gIEBpZiAoX3Rvb2xiYXIpIHtcbiAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIlsnc3BhY2VyJ11cIj48L3RyPlxuICB9XG5cbiAgQGlmIChfaGFzRm9vdGVyKCkpIHtcbiAgICA8dHJcbiAgICAgIG1hdC1mb290ZXItcm93XG4gICAgICBbY2xhc3Mud2F0dC10YWJsZS1oaWRlLWZvb3Rlcl09XCJsb2FkaW5nIHx8IGRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFwiXG4gICAgICAqbWF0Rm9vdGVyUm93RGVmPVwiX2dldENvbHVtbnMoKTsgc3RpY2t5OiBzdGlja3lGb290ZXJcIlxuICAgID48L3RyPlxuICB9XG5cbiAgPG5nLWNvbnRhaW5lciAqbWF0Tm9EYXRhUm93PlxuICAgIEBpZiAobG9hZGluZykge1xuICAgICAgQGZvciAoaSBvZiBbMSwgMiwgM107IHRyYWNrIGkpIHtcbiAgICAgICAgPHRyIGNsYXNzPVwibWF0LW1kYy1yb3dcIj5cbiAgICAgICAgICBAZm9yIChfIG9mIF9nZXRDb2x1bW5zKCk7IHRyYWNrIF87IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtbWRjLWNlbGxcIiBbY2xhc3Mud2F0dC10YWJsZS1sb2FkaW5nLWNlbGxdPVwiaSA+IDAgfHwgIXNlbGVjdGFibGVcIj48L3RkPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90cj5cbiAgICAgIH1cbiAgICB9XG4gIDwvbmctY29udGFpbmVyPlxuPC90YWJsZT5cblxuQGlmIChfdG9vbGJhcikge1xuICA8ZGl2IGNsYXNzPVwid2F0dC10YWJsZS10b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIl90b29sYmFyLnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogX2ZpbHRlcmVkU2VsZWN0aW9uIH1cIlxuICAgIC8+XG4gIDwvZGl2PlxufVxuIl19
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS93YXR0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3RhYmxlL3dhdHQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFZLFlBQVksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pE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QWE7c0JBRFosS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQVlOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFzQk4sZUFBZTtzQkFEZCxNQUFNO2dCQU9QLFFBQVE7c0JBRFAsTUFBTTtnQkFPUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsTUFBTTtzQkFETCxlQUFlO3VCQUFDLHNCQUFzQjtnQkFLdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFLdkMsS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU87O0FBaU9wQixNQUFNLE9BQU8sK0JBQStCO3VHQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQixxRkFUaEMsRUFBRTs7MkZBU0QsK0JBQStCO2tCQVgzQyxTQUFTOytCQUNFLDJCQUEyQixZQUMzQixFQUFFOztBQVdkLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUN6QiwrQkFBK0I7Q0FDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEtleVZhbHVlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIG1vZGVsLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICB2aWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0LCBTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0TW9kdWxlLCBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBXYXR0Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY2hlY2tib3gnO1xuaW1wb3J0IHsgV2F0dERhdGVQaXBlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0SWNvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcbmltcG9ydCB7IElXYXR0VGFibGVEYXRhU291cmNlLCBXYXR0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi93YXR0LXRhYmxlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IGFuaW1hdGVFeHBhbmRhYmxlQ2VsbHMgfSBmcm9tICcuL3dhdHQtdGFibGUtZXhwYW5kLWFuaW1hdGlvbic7XG5cbi8qKiBDbGFzcyBuYW1lIGZvciBleHBhbmRhYmxlIGNlbGxzLiAqL1xuZXhwb3J0IGNvbnN0IEVYUEFOREFCTEVfQ0xBU1MgPSAnd2F0dC10YWJsZS1jZWxsLS1leHBhbmRhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBXYXR0VGFibGVDb2x1bW48VD4ge1xuICAvKipcbiAgICogVGhlIGRhdGEgdGhhdCB0aGlzIGNvbHVtbiBzaG91bGQgYmUgYm91bmQgdG8sIGVpdGhlciBhcyBhIHByb3BlcnR5IG9mIGBUYFxuICAgKiBvciBkZXJpdmVkIGZyb20gZWFjaCByb3cgb2YgYFRgIHVzaW5nIGFuIGFjY2Vzc29yIGZ1bmN0aW9uLiAgVXNlIGBudWxsYFxuICAgKiBmb3IgY29sdW1ucyB0aGF0IHNob3VsZCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGRhdGEsIGJ1dCBub3RlIHRoYXQgdGhpc1xuICAgKiB3aWxsIGRpc2FibGUgc29ydGluZyBhbmQgYXV0b21hdGljIGNlbGwgcG9wdWxhdGlvbi5cbiAgICovXG4gIGFjY2Vzc29yOiBrZXlvZiBUIHwgKChyb3c6IFQpID0+IHVua25vd24pIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgaGVhZGVyIHRleHQgdG8gYSBzdGF0aWMgZGlzcGxheSB2YWx1ZS4gVGhpcyB3aWxsIHByZXZlbnRcbiAgICogdGhlIGByZXNvbHZlSGVhZGVyYCBpbnB1dCBmdW5jdGlvbiBmcm9tIGJlaW5nIGNhbGxlZCBmb3IgdGhpcyBjb2x1bW4uXG4gICAqL1xuICBoZWFkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBjZWxsIGNvbnRlbnQgd2hlbiBub3QgdXNpbmcgdGVtcGxhdGUuIEJ5IGRlZmF1bHQsXG4gICAqIGNlbGwgY29udGVudCBpcyBmb3VuZCB1c2luZyB0aGUgYGFjY2Vzc29yYCAodW5sZXNzIGl0IGlzIGBudWxsYCkuXG4gICAqL1xuICBjZWxsPzogKHJvdzogVCkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbi4gRGVmYXVsdHMgdG8gYHRydWVgXG4gICAqIHVubGVzcyBgYWNjZXNzb3JgIGlzIGBudWxsYC5cbiAgICovXG4gIHNvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbHVtbiBzaXplIHVzaW5nIGdyaWQgc2l6aW5nIHZhbHVlcy4gRGVmYXVsdHMgdG8gYFwiYXV0b1wiYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWNjZXB0cyBhbGwgb2YgdGhlIENTUyBncmlkIHRyYWNrIHNpemUga2V5d29yZHMgKHN1Y2ggYXMgYG1pbi1jb250ZW50YCxcbiAgICogYG1heC1jb250ZW50YCwgYG1pbm1heCgpYCkgYXMgd2VsbCBhcyBmcmFjdGlvbmFsIChgZnJgKSwgcGVyY2VudGFnZSAoYCVgKVxuICAgKiBhbmQgbGVuZ3RoIChgcHhgLCBgZW1gLCBldGMpIHVuaXRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8jdHJhY2stc2l6ZXNcbiAgICovXG4gIHNpemU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvcml6b250YWxseSBhbGlnbiB0aGUgY29udGVudHMgb2YgdGhlIGNvbHVtbi4gRGVmYXVsdHMgdG8gYFwibGVmdFwiYC5cbiAgICovXG4gIGFsaWduPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgaWNvbiB3aWxsIGJlIHNob3duIGluIHRoZSBoZWFkZXIgY2VsbCwgd2l0aCBhbiBjbGljayBldmVudC5cbiAgICovXG4gIGhlbHBlckFjdGlvbj86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgaGVhZGVyIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGhlYWRlckNlbGxDbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBkYXRhIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGRhdGFDZWxsQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZvb3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgY29sdW1uLlxuICAgKi9cbiAgZm9vdGVyPzogV2F0dFRhYmxlQ29sdW1uRm9vdGVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBjb2x1bW4gcmVtYWlucyB2aXNpYmxlIHdoZW4gaG9yaXpvbnRhbGx5IHNjcm9sbGluZy5cbiAgICovXG4gIHN0aWNreUVuZD86IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBjZWxsIGlzIHJlcGxhY2VkIHdpdGggYW4gZXhwYW5kYWJsZSBhcnJvdyBhbmQgdGhlIGNvbnRlbnQgaXMgZGVmZXJyZWQuXG4gICAqIENsaWNraW5nIG9uIHRoZSBhcnJvdyByZXZlYWxzIHRoZSBjb250ZW50IGJlbG93IHRoZSBjdXJyZW50IHJvdy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIGN1c3RvbSBgdHJhY2tCeWAgZnVuY3Rpb24gd2hlbiB1c2luZyBgZXhwYW5kYWJsZWAsXG4gICAqIG90aGVyd2lzZSBhbmltYXRpb25zIGNhbiBiZSBpbmFjY3VyYXRlIHdoZW4gZGF0YSBpcyBjaGFuZ2VkLlxuICAgKi9cbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgdGV4dCB0byBzaG93IG9uIGhvdmVyIG9mIHRoZSBoZWFkZXIgY2VsbC5cbiAgICovXG4gIHRvb2x0aXA/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGZvb3RlciBjZWxsIG9mIGEgY29sdW1uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdHRUYWJsZUNvbHVtbkZvb3RlciB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgZm9vdGVyIGNlbGwuXG4gICAqL1xuICB2YWx1ZT86IFNpZ25hbDxzdHJpbmcgfCBudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGZvb3RlciBjZWxsLlxuICAgKi9cbiAgY2xhc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVjb3JkIGZvciBkZWZpbmluZyBjb2x1bW5zIHdpdGgga2V5cyB1c2VkIGFzIGNvbHVtbiBpZGVudGlmaWVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV2F0dFRhYmxlQ29sdW1uRGVmPFQ+ID0gUmVjb3JkPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+PjtcblxuLy8gVXNlZCBmb3Igc3Ryb25nbHkgdHlwaW5nIHRoZSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZVxuaW50ZXJmYWNlIFdhdHRUYWJsZUNlbGxDb250ZXh0PFQ+IHtcbiAgJGltcGxpY2l0OiBUO1xufVxuXG5pbnRlcmZhY2UgV2F0dFRhYmxlVG9vbGJhckNvbnRleHQ8VD4ge1xuICAkaW1wbGljaXQ6IFQ7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t3YXR0VGFibGVDZWxsXScsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZUNlbGxEaXJlY3RpdmU8VD4ge1xuICAvKiogVGhlIFdhdHRUYWJsZUNvbHVtbiB0aGlzIHRlbXBsYXRlIGFwcGxpZXMgdG8uICovXG4gIEBJbnB1dCgnd2F0dFRhYmxlQ2VsbCcpIGNvbHVtbiE6IFdhdHRUYWJsZUNvbHVtbjxUPjtcbiAgQElucHV0KCd3YXR0VGFibGVDZWxsSGVhZGVyJykgaGVhZGVyPzogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxXYXR0VGFibGVDZWxsQ29udGV4dDxUPj4pO1xuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxUPihcbiAgICBfZGlyZWN0aXZlOiBXYXR0VGFibGVDZWxsRGlyZWN0aXZlPFQ+LFxuICAgIGNvbnRleHQ6IHVua25vd25cbiAgKTogY29udGV4dCBpcyBXYXR0VGFibGVDZWxsQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3dhdHRUYWJsZVRvb2xiYXJdJyxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZTxUPiB7XG4gIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFRbXT4+KTtcbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgX2RpcmVjdGl2ZTogV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZTxUPixcbiAgICBjb250ZXh0OiB1bmtub3duXG4gICk6IGNvbnRleHQgaXMgV2F0dFRhYmxlVG9vbGJhckNvbnRleHQ8VFtdPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXQVRUX1RBQkxFIH0gZnJvbSAnQGVuZXJnaW5ldC1kYXRhaHViL3dhdHQvdGFibGUnO2BcbiAqL1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgV2F0dEljb25Db21wb25lbnQsXG4gICAgV2F0dENoZWNrYm94Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtXYXR0RGF0ZVBpcGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzZWxlY3RvcjogJ3dhdHQtdGFibGUnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mud2F0dC10YWJsZS12YXJpYW50LXplYnJhXSc6ICd2YXJpYW50KCkgPT09IFwiemVicmFcIicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUncyBzb3VyY2Ugb2YgZGF0YS4gUHJvcGVydHkgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAqIGluaXRpYWxpemF0aW9uLCBpbnN0ZWFkIHVwZGF0ZSB0aGUgZGF0YSBvbiB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IElXYXR0VGFibGVEYXRhU291cmNlPFQ+O1xuXG4gIC8qKlxuICAgKiBDb2x1bW4gZGVmaW5pdGlvbiByZWNvcmQgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgY29sdW1uIGlkZW50aWZpZXJzXG4gICAqIGFuZCB2YWx1ZXMgYmVpbmcgdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uLiBUaGUgb3JkZXIgb2YgdGhlIGNvbHVtbnNcbiAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvcGVydHkgb3JkZXIsIGJ1dCBjYW4gYmUgb3ZlcnJ1bGVkIGJ5IHRoZVxuICAgKiBgZGlzcGxheWVkQ29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiBXYXR0VGFibGVDb2x1bW5EZWY8VD4gPSB7fTtcblxuICAvKipcbiAgICogVXNlZCBmb3IgaGlkaW5nIG9yIHJlb3JkZXJpbmcgY29sdW1ucyBkZWZpbmVkIGluIHRoZSBgY29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGRpc2FibGluZyB0aGUgdGFibGUuIFRoaXMgd2lsbCBkaXNhYmxlIGFsbCB1c2VyIGludGVyYWN0aW9uXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRhYmxlIGZvciB2aXN1YWxseSBpbXBhaXJlZCB1c2Vycy5cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB0YWJsZSB3aWxsIHNob3cgYSBsb2FkaW5nIGluZGljYXRvclxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGZvb3RlciB3aWxsIGJlIHN0aWNreVxuICAgKi9cbiAgQElucHV0KCkgc3RpY2t5Rm9vdGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBoZWFkZXIgdGV4dCBmb3IgY29sdW1ucyB0aGF0XG4gICAqIGRvIG5vdCBoYXZlIGEgc3RhdGljIGhlYWRlciB0ZXh0IHNldCBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24uXG4gICAqIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBvZiBjb2x1bW4gaGVhZGVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlc29sdmVIZWFkZXI/OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgY29sdW1uIHRoYXQgc2hvdWxkIGJlIHNvcnRlZCBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzb3J0QnkgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNvcnQgZGlyZWN0aW9uIG9mIHRoZSBpbml0aWFsbHkgc29ydGVkIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgdXNlciB0byBjbGVhciB0aGUgc29ydC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgc29ydENsZWFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGluY2x1ZGUgYSBjaGVja2JveCBjb2x1bW4gZm9yIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWxseSBzZWxlY3RlZCByb3dzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBpbml0aWFsU2VsZWN0aW9uID0gaW5wdXQ8VFtdPihbXSk7XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgcm93IGhvdmVyIGhpZ2hsaWdodC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1cHByZXNzUm93SG92ZXJIaWdobGlnaHQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBhY3RpdmVSb3c/OiBUO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdHdvIHJvd3MgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFjdGl2ZSByb3cgaXMgdG8gY29tcGFyZVxuICAgKiB0aGUgdHdvIHJvdyBvYmplY3RzIHVzaW5nIHN0cmljdCBlcXVhbGl0eSBjaGVjay4gVGhpcyBpcyBzdWZmaWNpZW50XG4gICAqIGFzIGxvbmcgYXMgdGhlIGluc3RhbmNlcyByZW1haW4gdGhlIHNhbWUsIHdoaWNoIG1heSBub3QgYmUgdGhlIGNhc2VcbiAgICogaWYgcm93IGRhdGEgaXMgcmVjcmVhdGVkIG9yIHJlYnVpbHQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgYWN0aXZlUm93Q29tcGFyYXRvcj86IChjdXJyZW50Um93OiBULCBhY3RpdmVSb3c6IFQpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBjb2x1bW4gaGVhZGVycyB3aWxsIG5vdCBiZSBzaG93bi4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUNvbHVtbkhlYWRlcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2hvb3NlIGZyb20gYSBwcmVkZWZpbmVkIHNldCBvZiBkaXNwbGF5IHZhcmlhbnRzLlxuICAgKi9cbiAgdmFyaWFudCA9IGlucHV0PCd6ZWJyYSc+KCk7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIHJvd3MgdGhhdCBhcmUgY3VycmVudGx5IGV4cGFuZGVkLlxuICAgKi9cbiAgZXhwYW5kZWQgPSBtb2RlbDxUW10+KFtdKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gZm9yIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHJvd3MuXG4gICAqL1xuICB0cmFja0J5ID0gaW5wdXQ8VHJhY2tCeUZ1bmN0aW9uPFQ+IHwga2V5b2YgVD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiB1cGRhdGVzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBhY3RpdmUgc29ydCBvciBzb3J0IGRpcmVjdGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oV2F0dFRhYmxlQ2VsbERpcmVjdGl2ZSlcbiAgX2NlbGxzITogUXVlcnlMaXN0PFdhdHRUYWJsZUNlbGxEaXJlY3RpdmU8VD4+O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBDb250ZW50Q2hpbGQoV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZSlcbiAgX3Rvb2xiYXI/OiBXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlPFQ+O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBWaWV3Q2hpbGQoTWF0U29ydClcbiAgX3NvcnQhOiBNYXRTb3J0O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF90YWJsZUNlbGxFbGVtZW50cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPEhUTUxUYWJsZUNlbGxFbGVtZW50Pj4oJ3RkJyk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2FuaW1hdGlvbkVmZmVjdCA9IGFuaW1hdGVFeHBhbmRhYmxlQ2VsbHModGhpcy5fdGFibGVDZWxsRWxlbWVudHMsIHRoaXMuZXhwYW5kZWQpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2NoZWNrYm94Q29sdW1uID0gJ19fY2hlY2tib3hDb2x1bW5fXyc7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2V4cGFuZGFibGVDb2x1bW4gPSAnX19leHBhbmRhYmxlQ29sdW1uX18nO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9lbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfZGF0ZVBpcGUgPSBpbmplY3QoV2F0dERhdGVQaXBlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfaGFzRm9vdGVyID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGZvcm1hdENlbGxEYXRhKGNlbGw6IHVua25vd24pIHtcbiAgICBpZiAoIWNlbGwpIHJldHVybiAn4oCUJztcbiAgICBpZiAoY2VsbCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oY2VsbCk7XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGdldENlbGxEYXRhKHJvdzogVCwgY29sdW1uPzogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgaWYgKCFjb2x1bW4/LmFjY2Vzc29yKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IGFjY2Vzc29yIH0gPSBjb2x1bW47XG4gICAgY29uc3QgY2VsbCA9IHR5cGVvZiBhY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGFjY2Vzc29yKHJvdykgOiByb3dbYWNjZXNzb3JdO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdENlbGxEYXRhKGNlbGwpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjaGVja0hhc0Zvb3RlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9oYXNGb290ZXIuc2V0KE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKS5zb21lKChjb2x1bW4pID0+ICEhY29sdW1uLmZvb3RlcikpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi4odGhpcy5pbml0aWFsU2VsZWN0aW9uKCkgPz8gW10pKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGlvbikgPT4gdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3Rpb24pKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIHRoaXMuY2hlY2tIYXNGb290ZXIoKTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuX3NvcnQ7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIFdhdHRUYWJsZURhdGFTb3VyY2UgPT09IGZhbHNlKSByZXR1cm47XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAocm93OiBULCBzb3J0SGVhZGVySWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuY29sdW1uc1tzb3J0SGVhZGVySWRdO1xuICAgICAgaWYgKCFzb3J0Q29sdW1uPy5hY2Nlc3NvcikgcmV0dXJuICcnO1xuXG4gICAgICAvLyBBY2Nlc3MgcmF3IHZhbHVlIGZvciBzb3J0aW5nLCBpbnN0ZWFkIG9mIGFwcGx5aW5nIGRlZmF1bHQgZm9ybWF0dGluZy5cbiAgICAgIGNvbnN0IHsgYWNjZXNzb3IgfSA9IHNvcnRDb2x1bW47XG4gICAgICBjb25zdCBjZWxsID0gdHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nID8gYWNjZXNzb3Iocm93KSA6IHJvd1thY2Nlc3Nvcl07XG5cbiAgICAgIC8vIE1ha2Ugc29ydGluZyBieSB0ZXh0IGNhc2UgaW5zZW5zaXRpdmUuXG4gICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gY2VsbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gY2VsbC5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gY2VsbCBhcyBudW1iZXI7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2Rpc3BsYXllZENvbHVtbnMnXSB8fCBjaGFuZ2VzWydzZWxlY3RhYmxlJ10pIHtcbiAgICAgIGNvbnN0IHsgZGlzcGxheWVkQ29sdW1ucyB9ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuY29sdW1ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNpemluZyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiAhZGlzcGxheWVkQ29sdW1ucyB8fCBkaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gdGhpcy5jb2x1bW5zW2tleV0pXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5leHBhbmRhYmxlKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5zaXplID8/ICdhdXRvJyk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gQWRkIHNwYWNlIGZvciBleHRyYSBjaGVja2JveCBjb2x1bW5cbiAgICAgICAgc2l6aW5nLnVuc2hpZnQoJ3ZhcigtLXdhdHQtc3BhY2UteGwpJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc0V4cGFuZGFibGUoKSkge1xuICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIGV4dHJhIGV4cGFuZGFibGUgY29sdW1uXG4gICAgICAgIHNpemluZy5wdXNoKCdtaW4tY29udGVudCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLXdhdHQtdGFibGUtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJyxcbiAgICAgICAgc2l6aW5nLmpvaW4oJyAnKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jaGVja0hhc0Zvb3RlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNlbGVjdGlvbi4gT25seSB3b3JrcyB3aGVuIHNlbGVjdGFibGUgaXMgYHRydWVgLlxuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgX2NvbHVtblNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5ldmVyeSgocm93KSA9PiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvdykpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgc2V0IF9jb2x1bW5TZWxlY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi50aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfZmlsdGVyZWRTZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5pbmNsdWRlcyhyb3cpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnMgPz8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKTtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuc2VsZWN0YWJsZSA/IFt0aGlzLl9jaGVja2JveENvbHVtbl0gOiBbXSksXG4gICAgICAuLi5jb2x1bW5zLmZpbHRlcigoa2V5KSA9PiAhdGhpcy5jb2x1bW5zW2tleV0uZXhwYW5kYWJsZSksXG4gICAgICAuLi4odGhpcy5faXNFeHBhbmRhYmxlKCkgPyBbdGhpcy5fZXhwYW5kYWJsZUNvbHVtbl0gOiBbXSksXG4gICAgICAuLi5jb2x1bW5zLmZpbHRlcigoa2V5KSA9PiB0aGlzLmNvbHVtbnNba2V5XS5leHBhbmRhYmxlKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbjogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29sdW1uID09PSBjb2x1bW4pPy50ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi52YWx1ZS5oZWFkZXIgPT09ICdzdHJpbmcnKSByZXR1cm4gY29sdW1uLnZhbHVlLmhlYWRlcjtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5fY2VsbHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbi52YWx1ZSk7XG4gICAgcmV0dXJuIGNlbGw/LmhlYWRlciA/PyB0aGlzLnJlc29sdmVIZWFkZXI/Lihjb2x1bW4ua2V5KSA/PyBjb2x1bW4ua2V5O1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlbHBlckFjdGlvbihjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Pikge1xuICAgIHJldHVybiBjb2x1bW4udmFsdWUuaGVscGVyQWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbHVlLnRvb2x0aXA7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Q29sdW1uQ2VsbChjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Piwgcm93OiBUKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZS5jZWxsPy4ocm93KSA/PyB0aGlzLmdldENlbGxEYXRhKHJvdywgY29sdW1uLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRSb3dLZXkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSgpO1xuICAgIGlmICh0eXBlb2YgdHJhY2tCeSA9PT0gJ3N0cmluZycpIHJldHVybiByb3dbdHJhY2tCeV07XG4gICAgaWYgKHR5cGVvZiB0cmFja0J5ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdHJhY2tCeShpbmRleCwgcm93KTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihyb3cpO1xuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0FjdGl2ZVJvdyhyb3c6IFQpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlUm93Q29tcGFyYXRvclxuICAgICAgPyB0aGlzLmFjdGl2ZVJvd0NvbXBhcmF0b3Iocm93LCB0aGlzLmFjdGl2ZVJvdylcbiAgICAgIDogcm93ID09PSB0aGlzLmFjdGl2ZVJvdztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0V4cGFuZGFibGUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKS5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5leHBhbmRhYmxlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9vblJvd0NsaWNrKHJvdzogVCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSAhPT0gJycpIHJldHVybjtcbiAgICBpZiAodGhpcy5faXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQudXBkYXRlKChyb3dzKSA9PlxuICAgICAgICByb3dzLmluY2x1ZGVzKHJvdykgPyByb3dzLmZpbHRlcigocikgPT4gciAhPSByb3cpIDogWy4uLnJvd3MsIHJvd11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHJvdyk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC10YWJsZS10b29sYmFyLXNwYWNlcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICB3aWR0aDogdmFyKC0td2F0dC1zcGFjZS14bCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFRhYmxlVG9vbGJhclNwYWNlckNvbXBvbmVudCB7fVxuXG5leHBvcnQgY29uc3QgV0FUVF9UQUJMRSA9IFtcbiAgV2F0dFRhYmxlQ29tcG9uZW50LFxuICBXYXR0VGFibGVDZWxsRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyU3BhY2VyQ29tcG9uZW50LFxuXTtcbiIsIjwhLS1cbkBsaWNlbnNlXG5Db3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS0+XG48dGFibGVcbiAgbWF0LXRhYmxlXG4gIG1hdFNvcnRcbiAgcm9sZT1cInRyZWVncmlkXCJcbiAgW25nQ2xhc3NdPVwieyAnd2F0dC10YWJsZS1oYXMtc2VsZWN0aW9uJzogX2ZpbHRlcmVkU2VsZWN0aW9uLmxlbmd0aCA+IDAgfVwiXG4gIFttYXRTb3J0QWN0aXZlXT1cInNvcnRCeVwiXG4gIFttYXRTb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICBbbWF0U29ydERpc2FibGVDbGVhcl09XCIhc29ydENsZWFyXCJcbiAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVzY3JpcHRpb25cIlxuICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4+XG4gIEBpZiAoc2VsZWN0YWJsZSkge1xuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfY2hlY2tib3hDb2x1bW5cIiBbc3RpY2t5XT1cInRydWVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJfY29sdW1uU2VsZWN0aW9uXCIgLz5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3hcbiAgICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfc2VsZWN0aW9uTW9kZWwudG9nZ2xlKHJvdylcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAvPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfZXhwYW5kYWJsZUNvbHVtblwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cbiAgICA8dGRcbiAgICAgICN0ZFxuICAgICAgbWF0LWNlbGxcbiAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgW2F0dHIuZGF0YS1rZXldPVwiX2dldFJvd0tleShpbmRleCwgcm93KVwiXG4gICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJpbmRleFwiXG4gICAgICAoY2xpY2spPVwiX29uUm93Q2xpY2socm93KVwiXG4gICAgICBbY2xhc3Mud2F0dC10YWJsZS1jZWxsLS1leHBhbmRlZF09XCJleHBhbmRlZCgpLmluY2x1ZGVzKHJvdylcIlxuICAgID5cbiAgICAgIDx3YXR0LWljb24gbmFtZT1cInJpZ2h0XCIgc2l6ZT1cInhzXCIgLz5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICBAZm9yIChjb2x1bW4gb2YgY29sdW1ucyB8IGtleXZhbHVlOyB0cmFjayBjb2x1bW4ua2V5KSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5rZXlcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi52YWx1ZS5zdGlja3lFbmQ/LigpXCI+XG4gICAgICA8dGhcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGFibGVdPVwiY29sdW1uLnZhbHVlLmV4cGFuZGFibGVcIlxuICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtYWxpZ24te3sgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0JyB9fSB7e1xuICAgICAgICAgIGNvbHVtbi52YWx1ZS5oZWFkZXJDZWxsQ2xhc3NcbiAgICAgICAgfX1cIlxuICAgICAgPlxuICAgICAgICBAaWYgKF9nZXRDb2x1bW5IZWxwZXJBY3Rpb24oY29sdW1uKTsgYXMgYWN0aW9uKSB7XG4gICAgICAgICAgPHdhdHQtaWNvbiBuYW1lPVwiaGVscFwiIChjbGljayk9XCJhY3Rpb24oKVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ3YXR0LXRhYmxlLWhlYWRlci1jZWxsXCJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW4udmFsdWUuYWxpZ24gPT09ICdyaWdodCcgPyAnYmVmb3JlJyA6ICdhZnRlcidcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnZhbHVlLmFjY2Vzc29yIHx8IGNvbHVtbi52YWx1ZS5zb3J0ID09PSBmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBfZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbikgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uKTsgYXMgdG9vbHRpcCkge1xuICAgICAgICAgIDx3YXR0LWljb24gW3RpdGxlXT1cInRvb2x0aXBcIiBuYW1lPVwiaW5mb1wiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG5cbiAgICAgIDx0ZFxuICAgICAgICAjdGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgIFthdHRyLmRhdGEta2V5XT1cIl9nZXRSb3dLZXkoaW5kZXgsIHJvdylcIlxuICAgICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJpbmRleFwiXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGVkXT1cImV4cGFuZGVkKCkuaW5jbHVkZXMocm93KVwiXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGFibGVdPVwiY29sdW1uLnZhbHVlLmV4cGFuZGFibGVcIlxuICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtYWxpZ24te3sgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0JyB9fSB7eyBjb2x1bW4udmFsdWUuZGF0YUNlbGxDbGFzcyB9fVwiXG4gICAgICAgIChjbGljayk9XCIhY29sdW1uLnZhbHVlLmV4cGFuZGFibGUgJiYgX29uUm93Q2xpY2socm93KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoX2lzRXhwYW5kYWJsZSgpKSB7XG4gICAgICAgICAgQGRlZmVyICh3aGVuICFjb2x1bW4udmFsdWUuZXhwYW5kYWJsZSB8fCBleHBhbmRlZCgpLmluY2x1ZGVzKHJvdykpIHtcbiAgICAgICAgICAgIEBpZiAoX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbi52YWx1ZSk7IGFzIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YXR0LXRhYmxlLWNlbGwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAge3sgX2dldENvbHVtbkNlbGwoY29sdW1uLCByb3cpIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKF9nZXRDb2x1bW5UZW1wbGF0ZShjb2x1bW4udmFsdWUpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhdHQtdGFibGUtY2VsbC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3sgX2dldENvbHVtbkNlbGwoY29sdW1uLCByb3cpIH19XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuXG4gICAgICBAaWYgKF9oYXNGb290ZXIoKSkge1xuICAgICAgICA8dGRcbiAgICAgICAgICBtYXQtZm9vdGVyLWNlbGxcbiAgICAgICAgICAqbWF0Rm9vdGVyQ2VsbERlZlxuICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLnZhbHVlLmZvb3Rlcj8uY2xhc3MgfX0gd2F0dC10YWJsZS1hbGlnbi17e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0J1xuICAgICAgICAgIH19IFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4udmFsdWUuZm9vdGVyPy52YWx1ZT8uKCkgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3BhY2VyXCI+XG4gICAgPHRkIGNsYXNzPVwid2F0dC10YWJsZS1mb290ZXItc3BhY2VyXCIgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIEBpZiAoIWhpZGVDb2x1bW5IZWFkZXJzKSB7XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpXCI+PC90cj5cbiAgfVxuICA8dHJcbiAgICBtYXQtcm93XG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IF9nZXRDb2x1bW5zKClcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93ID09PSBhY3RpdmVSb3dcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd3YXR0LXRhYmxlLWhpZ2hsaWdodC1yb3cnOiAhZGlzYWJsZWQgJiYgIXN1cHByZXNzUm93SG92ZXJIaWdobGlnaHQsXG4gICAgICAnd2F0dC10YWJsZS1jbGlja2FibGUtcm93JzogIWRpc2FibGVkICYmIHJvd0NsaWNrLm9ic2VydmVkLFxuICAgICAgJ3dhdHQtdGFibGUtYWN0aXZlLXJvdyc6IF9pc0FjdGl2ZVJvdyhyb3cpLFxuICAgICAgJ3dhdHQtdGFibGUtbm8tZW5kLWRpdmlkZXInOiBoaWRlQ29sdW1uSGVhZGVycyxcbiAgICB9XCJcbiAgPjwvdHI+XG5cbiAgQGlmIChfdG9vbGJhcikge1xuICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiWydzcGFjZXInXVwiPjwvdHI+XG4gIH1cblxuICBAaWYgKF9oYXNGb290ZXIoKSkge1xuICAgIDx0clxuICAgICAgbWF0LWZvb3Rlci1yb3dcbiAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWhpZGUtZm9vdGVyXT1cImxvYWRpbmcgfHwgZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwXCJcbiAgICAgICptYXRGb290ZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpOyBzdGlja3k6IHN0aWNreUZvb3RlclwiXG4gICAgPjwvdHI+XG4gIH1cblxuICA8bmctY29udGFpbmVyICptYXROb0RhdGFSb3c+XG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICBAZm9yIChpIG9mIFsxLCAyLCAzXTsgdHJhY2sgaSkge1xuICAgICAgICA8dHIgY2xhc3M9XCJtYXQtbWRjLXJvd1wiPlxuICAgICAgICAgIEBmb3IgKF8gb2YgX2dldENvbHVtbnMoKTsgdHJhY2sgXzsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtY2VsbFwiIFtjbGFzcy53YXR0LXRhYmxlLWxvYWRpbmctY2VsbF09XCJpID4gMCB8fCAhc2VsZWN0YWJsZVwiPjwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgfVxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L3RhYmxlPlxuXG5AaWYgKF90b29sYmFyKSB7XG4gIDxkaXYgY2xhc3M9XCJ3YXR0LXRhYmxlLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3Rvb2xiYXIudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBfZmlsdGVyZWRTZWxlY3Rpb24gfVwiXG4gICAgLz5cbiAgPC9kaXY+XG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@energinet/watt",
4
- "version": "3.0.18",
4
+ "version": "3.0.20",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
7
7
  ".": {
@@ -1,5 +1,6 @@
1
1
  import { ElementRef } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
+ import { WattIconSize } from '@energinet/watt/icon';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class WattSearchComponent {
5
6
  /**
@@ -26,6 +27,10 @@ export declare class WattSearchComponent {
26
27
  * @ignore
27
28
  */
28
29
  search: import("@angular/core").OutputRef<string>;
30
+ /**
31
+ * @ignore
32
+ */
33
+ size: import("@angular/core").InputSignal<WattIconSize>;
29
34
  /**
30
35
  * Handles input event, optionally trimming the value.
31
36
  */
@@ -35,5 +40,5 @@ export declare class WattSearchComponent {
35
40
  */
36
41
  clear(): void;
37
42
  static ɵfac: i0.ɵɵFactoryDeclaration<WattSearchComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<WattSearchComponent, "watt-search", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "trim": { "alias": "trim"; "required": false; "isSignal": true; }; }, { "search": "search"; }, never, never, true, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<WattSearchComponent, "watt-search", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "trim": { "alias": "trim"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "search": "search"; }, never, never, true, never>;
39
44
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2020 Energinet DataHub A/S
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License2");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { ElementRef, Signal } from '@angular/core';
18
+ export declare const animateExpandableCells: (elements: Signal<readonly ElementRef<HTMLTableCellElement>[]>, trigger: Signal<unknown>) => import("@angular/core").AfterRenderRef;
@@ -17,11 +17,13 @@
17
17
  import { SelectionModel } from '@angular/cdk/collections';
18
18
  import { KeyValue } from '@angular/common';
19
19
  import { AfterViewInit, ElementRef, EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
20
- import type { QueryList, Signal } from '@angular/core';
20
+ import type { QueryList, Signal, TrackByFunction } from '@angular/core';
21
21
  import { MatSort, Sort, SortDirection } from '@angular/material/sort';
22
22
  import { WattDatePipe } from '@energinet/watt/core/date';
23
23
  import { IWattTableDataSource } from './watt-table-data-source';
24
24
  import * as i0 from "@angular/core";
25
+ /** Class name for expandable cells. */
26
+ export declare const EXPANDABLE_CLASS = "watt-table-cell--expandable";
25
27
  export interface WattTableColumn<T> {
26
28
  /**
27
29
  * The data that this column should be bound to, either as a property of `T`
@@ -80,6 +82,18 @@ export interface WattTableColumn<T> {
80
82
  * When set to `true`, the column remains visible when horizontally scrolling.
81
83
  */
82
84
  stickyEnd?: Signal<boolean>;
85
+ /**
86
+ * When `true`, the cell is replaced with an expandable arrow and the content is deferred.
87
+ * Clicking on the arrow reveals the content below the current row.
88
+ *
89
+ * @remarks
90
+ * It is recommended to provide a custom `trackBy` function when using `expandable`,
91
+ * otherwise animations can be inaccurate when data is changed.
92
+ */
93
+ expandable?: boolean;
94
+ /**
95
+ * Tooltip text to show on hover of the header cell.
96
+ */
83
97
  tooltip?: string;
84
98
  }
85
99
  /**
@@ -206,6 +220,18 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
206
220
  * If set to `true`, the column headers will not be shown. Default is `false`.
207
221
  */
208
222
  hideColumnHeaders: boolean;
223
+ /**
224
+ * Choose from a predefined set of display variants.
225
+ */
226
+ variant: import("@angular/core").InputSignal<"zebra" | undefined>;
227
+ /**
228
+ * Array of rows that are currently expanded.
229
+ */
230
+ expanded: import("@angular/core").ModelSignal<T[]>;
231
+ /**
232
+ * Optional function for uniquely identifying rows.
233
+ */
234
+ trackBy: import("@angular/core").InputSignal<TrackByFunction<T> | keyof T | undefined>;
209
235
  /**
210
236
  * Emits whenever the selection updates. Only works when selectable is `true`.
211
237
  */
@@ -225,10 +251,16 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
225
251
  /** @ignore */
226
252
  _sort: MatSort;
227
253
  /** @ignore */
254
+ _tableCellElements: Signal<readonly ElementRef<HTMLTableCellElement>[]>;
255
+ /** @ignore */
256
+ _animationEffect: import("@angular/core").AfterRenderRef;
257
+ /** @ignore */
228
258
  _selectionModel: SelectionModel<T>;
229
259
  /** @ignore */
230
260
  _checkboxColumn: string;
231
261
  /** @ignore */
262
+ _expandableColumn: string;
263
+ /** @ignore */
232
264
  _element: ElementRef<HTMLElement>;
233
265
  /** @ignore */
234
266
  _datePipe: WattDatePipe;
@@ -265,11 +297,15 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
265
297
  /** @ignore */
266
298
  _getColumnCell(column: KeyValue<string, WattTableColumn<T>>, row: T): {} | null;
267
299
  /** @ignore */
300
+ _getRowKey: (index: number, row: T) => any;
301
+ /** @ignore */
268
302
  _isActiveRow(row: T): boolean;
269
303
  /** @ignore */
304
+ _isExpandable(): boolean;
305
+ /** @ignore */
270
306
  _onRowClick(row: T): void;
271
307
  static ɵfac: i0.ɵɵFactoryDeclaration<WattTableComponent<any>, never>;
272
- static ɵcmp: i0.ɵɵComponentDeclaration<WattTableComponent<any>, "watt-table", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "description": { "alias": "description"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "stickyFooter": { "alias": "stickyFooter"; "required": false; }; "resolveHeader": { "alias": "resolveHeader"; "required": false; }; "sortBy": { "alias": "sortBy"; "required": false; }; "sortDirection": { "alias": "sortDirection"; "required": false; }; "sortClear": { "alias": "sortClear"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "suppressRowHoverHighlight": { "alias": "suppressRowHoverHighlight"; "required": false; }; "activeRow": { "alias": "activeRow"; "required": false; }; "activeRowComparator": { "alias": "activeRowComparator"; "required": false; }; "hideColumnHeaders": { "alias": "hideColumnHeaders"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; }, ["_toolbar", "_cells"], never, true, never>;
308
+ static ɵcmp: i0.ɵɵComponentDeclaration<WattTableComponent<any>, "watt-table", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "description": { "alias": "description"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "stickyFooter": { "alias": "stickyFooter"; "required": false; }; "resolveHeader": { "alias": "resolveHeader"; "required": false; }; "sortBy": { "alias": "sortBy"; "required": false; }; "sortDirection": { "alias": "sortDirection"; "required": false; }; "sortClear": { "alias": "sortClear"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "suppressRowHoverHighlight": { "alias": "suppressRowHoverHighlight"; "required": false; }; "activeRow": { "alias": "activeRow"; "required": false; }; "activeRowComparator": { "alias": "activeRowComparator"; "required": false; }; "hideColumnHeaders": { "alias": "hideColumnHeaders"; "required": false; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; }, ["_toolbar", "_cells"], never, true, never>;
273
309
  }
274
310
  export declare class WattTableToolbarSpacerComponent {
275
311
  static ɵfac: i0.ɵɵFactoryDeclaration<WattTableToolbarSpacerComponent, never>;