@bcgov/nr-ngx-component-lib 0.0.22 → 0.0.24
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/components/filter-select/filter-select.component.d.ts +3 -2
- package/esm2022/components/filter-select/filter-select.component.mjs +21 -18
- package/esm2022/components/row-list-pagination/row-list-pagination.component.mjs +1 -1
- package/esm2022/components/row-list-sorting/row-list-sorting.component.mjs +1 -1
- package/fesm2022/bcgov-nr-ngx-component-lib.mjs +22 -19
- package/fesm2022/bcgov-nr-ngx-component-lib.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,8 @@ import { Overlay, OverlayRef } from "@angular/cdk/overlay";
|
|
|
2
2
|
import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, ViewContainerRef } from "@angular/core";
|
|
3
3
|
import { FormControl } from "@angular/forms";
|
|
4
4
|
import { MatSelectionListChange } from "@angular/material/list";
|
|
5
|
-
import { CodeDescription } from "../../utils/code-table.util";
|
|
6
5
|
import { NrclBase } from "../../directives/nrcl.base";
|
|
6
|
+
import { CodeDescription } from "../../utils/code-table.util";
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
/**
|
|
9
9
|
* A filter select component that allows users to select multiple options from a list.
|
|
@@ -29,6 +29,7 @@ export declare class FilterSelectComponent extends NrclBase implements OnInit, O
|
|
|
29
29
|
optionFormatter: (option: CodeDescription, plaintext: boolean) => string;
|
|
30
30
|
overlayClass: any;
|
|
31
31
|
wide: any;
|
|
32
|
+
filterCharsMinMessage: string;
|
|
32
33
|
valueChange: EventEmitter<string[]>;
|
|
33
34
|
floatLabel: string;
|
|
34
35
|
inputValue: any;
|
|
@@ -66,7 +67,7 @@ export declare class FilterSelectComponent extends NrclBase implements OnInit, O
|
|
|
66
67
|
optionForCode(code: string): CodeDescription;
|
|
67
68
|
formatOption(option: CodeDescription): string;
|
|
68
69
|
static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectComponent, never>;
|
|
69
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "nrcl-filter-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "selectMax": { "alias": "selectMax"; "required": false; }; "tooltips": { "alias": "tooltips"; "required": false; }; "summary": { "alias": "summary"; "required": false; }; "clear": { "alias": "clear"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "filterCharsMin": { "alias": "filterCharsMin"; "required": false; }; "optionFormatter": { "alias": "optionFormatter"; "required": false; }; "overlayClass": { "alias": "overlayClass"; "required": false; }; "wide": { "alias": "wide"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
|
|
70
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "nrcl-filter-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "selectMax": { "alias": "selectMax"; "required": false; }; "tooltips": { "alias": "tooltips"; "required": false; }; "summary": { "alias": "summary"; "required": false; }; "clear": { "alias": "clear"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "filterCharsMin": { "alias": "filterCharsMin"; "required": false; }; "optionFormatter": { "alias": "optionFormatter"; "required": false; }; "overlayClass": { "alias": "overlayClass"; "required": false; }; "wide": { "alias": "wide"; "required": false; }; "filterCharsMinMessage": { "alias": "filterCharsMinMessage"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
|
|
70
71
|
static ngAcceptInputType_selectMax: unknown;
|
|
71
72
|
static ngAcceptInputType_tooltips: unknown;
|
|
72
73
|
static ngAcceptInputType_summary: unknown;
|
|
@@ -3,7 +3,6 @@ import { TemplatePortal } from "@angular/cdk/portal";
|
|
|
3
3
|
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, numberAttribute, Output, ViewChild, ViewContainerRef } from "@angular/core";
|
|
4
4
|
import { FormControl } from "@angular/forms";
|
|
5
5
|
import { fromEvent } from "rxjs";
|
|
6
|
-
import { filter } from "rxjs/operators";
|
|
7
6
|
import { NrclBase } from "../../directives/nrcl.base";
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
import * as i1 from "@angular/forms";
|
|
@@ -32,6 +31,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
32
31
|
this.filter = true;
|
|
33
32
|
this.filterCharsMin = 0;
|
|
34
33
|
this.optionFormatter = (o, p) => o.description;
|
|
34
|
+
this.filterCharsMinMessage = 'Too many options';
|
|
35
35
|
this.valueChange = new EventEmitter();
|
|
36
36
|
this.floatLabel = 'auto';
|
|
37
37
|
this.isFiltered = false;
|
|
@@ -46,16 +46,19 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
46
46
|
ngOnInit() {
|
|
47
47
|
super.ngOnInit();
|
|
48
48
|
this.clickSubscription = fromEvent(document, 'click')
|
|
49
|
-
.
|
|
49
|
+
.subscribe((event) => {
|
|
50
50
|
const clickTarget = event.target;
|
|
51
51
|
const triggerEl = this.trigger.nativeElement;
|
|
52
52
|
const overlayEl = this.overlayRef?.overlayElement;
|
|
53
|
-
// console.log(triggerEl,
|
|
53
|
+
// console.log('triggerEl',triggerEl,triggerEl?.contains(clickTarget))
|
|
54
|
+
// console.log('overlayEl',overlayEl,overlayEl?.contains(clickTarget))
|
|
54
55
|
// Only close if click is outside both trigger and overlay
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
if (triggerEl?.contains(clickTarget))
|
|
57
|
+
return;
|
|
58
|
+
if (!overlayEl)
|
|
59
|
+
return;
|
|
60
|
+
if (overlayEl?.contains(clickTarget))
|
|
61
|
+
return;
|
|
59
62
|
// console.log('outside click')
|
|
60
63
|
this.close();
|
|
61
64
|
this.setInputToSelection();
|
|
@@ -101,6 +104,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
101
104
|
}
|
|
102
105
|
}
|
|
103
106
|
ngOnDestroy() {
|
|
107
|
+
// console.log('destroy',this.inst)
|
|
104
108
|
this.clickSubscription?.unsubscribe();
|
|
105
109
|
}
|
|
106
110
|
get single() {
|
|
@@ -111,11 +115,9 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
111
115
|
this.valueChange.emit(this.selection.value || []);
|
|
112
116
|
}
|
|
113
117
|
open() {
|
|
114
|
-
// console.log('open',this.isOpen
|
|
118
|
+
// console.log('open',this.isOpen)
|
|
115
119
|
if (this.isOpen)
|
|
116
120
|
return;
|
|
117
|
-
if (this.filterCharsMin && !this.isFiltered)
|
|
118
|
-
return;
|
|
119
121
|
this.isOpen = true;
|
|
120
122
|
this.changeDetectorRef.markForCheck();
|
|
121
123
|
// Create overlay
|
|
@@ -160,7 +162,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
160
162
|
this.openingValue = JSON.stringify(this.selection.value);
|
|
161
163
|
}
|
|
162
164
|
close() {
|
|
163
|
-
// console.
|
|
165
|
+
// console.warn('close',this.isOpen)
|
|
164
166
|
if (!this.isOpen)
|
|
165
167
|
return;
|
|
166
168
|
this.isOpen = false;
|
|
@@ -174,6 +176,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
174
176
|
this.emitValueChange();
|
|
175
177
|
}
|
|
176
178
|
setInputToSelection() {
|
|
179
|
+
// console.warn('setInputToSelection')
|
|
177
180
|
this.inputValue = this.selection?.value?.map(c => this.optionFormatter(this.optionForCode(c), true)).join(', ') || null;
|
|
178
181
|
this.isFiltered = false;
|
|
179
182
|
}
|
|
@@ -186,15 +189,11 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
186
189
|
// console.log('filtering')
|
|
187
190
|
this.isFiltered = true;
|
|
188
191
|
this.match = (option) => option.description.toLowerCase().includes(t);
|
|
189
|
-
if (this.filterCharsMin)
|
|
190
|
-
this.open();
|
|
191
192
|
}
|
|
192
193
|
else {
|
|
193
194
|
// console.log('not filtering')
|
|
194
195
|
this.isFiltered = false;
|
|
195
196
|
this.match = (o) => true;
|
|
196
|
-
if (this.filterCharsMin)
|
|
197
|
-
this.close();
|
|
198
197
|
}
|
|
199
198
|
this.changeDetectorRef.detectChanges();
|
|
200
199
|
}
|
|
@@ -202,6 +201,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
202
201
|
return this.match(option);
|
|
203
202
|
}
|
|
204
203
|
onSelectionChange(ev) {
|
|
204
|
+
// console.log('onSelectionChange',this.single)
|
|
205
205
|
if (this.single) {
|
|
206
206
|
this.close();
|
|
207
207
|
this.setInputToSelection();
|
|
@@ -228,6 +228,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
230
|
onCancelClick() {
|
|
231
|
+
// console.log('onCancelClick')
|
|
231
232
|
this.selection.setValue(null);
|
|
232
233
|
this.selection.enable();
|
|
233
234
|
this.setInputToSelection();
|
|
@@ -258,7 +259,7 @@ export class FilterSelectComponent extends NrclBase {
|
|
|
258
259
|
return this.optionFormatter(option, false);
|
|
259
260
|
}
|
|
260
261
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
261
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterSelectComponent, selector: "nrcl-filter-select", inputs: { label: "label", placeholder: "placeholder", hint: "hint", options: "options", value: "value", selectMax: ["selectMax", "selectMax", numberAttribute], tooltips: ["tooltips", "tooltips", booleanAttribute], summary: ["summary", "summary", booleanAttribute], clear: ["clear", "clear", booleanAttribute], filter: ["filter", "filter", booleanAttribute], filterCharsMin: ["filterCharsMin", "filterCharsMin", numberAttribute], optionFormatter: "optionFormatter", overlayClass: "overlayClass", wide: "wide" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.has-value": "hasValue", "class.is-open": "isOpen", "class.is-closed": "!isOpen", "class.use-filter": "filter", "style.--nrcl-filter-select-width": "this.wide ? \"var( --nrcl-filter-width-\" + this.wide + \" )\" : null" } }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "overlayTemplate", first: true, predicate: ["overlayTemplate"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<mat-form-field #trigger\n [floatLabel]=\"floatLabel\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n @if ( label ) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input class=\"filter-input\" #searchInput\n matInput \n [placeholder]=\"placeholder\" \n [value]=\"inputValue\"\n (input)=\"onInput( $event )\"\n (keydown.escape)=\"close()\"\n (focus)=\"onInputFocus()\"\n [matTooltip]=\"inputValue\"\n [readonly]=\"!filter\"\n >\n\n @if ( isOpen ) {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_up\"\n (click)=\"onCloseClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else if ( selection?.value?.length > 0 && clear ) {\n <nrcl-button tertiary matSuffix\n icon=\"close\"\n (click)=\"onCancelClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_down\"\n (click)=\"onInputFocus(); $event.stopPropagation()\"\n ></nrcl-button>\n } \n</mat-form-field> \n<ng-template #overlayTemplate>\n <div class=\"filter-select-options\" [class.multiple]=\"!single\" [class.single]=\"single\" [class]=\"overlayClass\">\n @if ( !isFiltered && !single && summary ) {\n @if ( !selection?.value?.length && hint ) {\n <div class=\"selection-overview\">\n <div class=\"summary\">\n <span>({{ hint }})</span>\n </div>\n </div>\n }\n\n @if ( selection?.value?.length > 0 && selection?.value?.length < options?.length ) {\n <div class=\"selection-overview\">\n <div class=\"summary\">\n <span>{{ selection?.value?.length }} selected of {{ options?.length }}</span>\n </div>\n\n <mat-selection-list\n (selectionChange)=\"onUpperSelectionChange( $event )\"\n >\n @for ( code of selection?.value; track code ) {\n <mat-list-option \n [value]=\"code\" \n togglePosition=\"before\"\n selected\n [matTooltip]=\"tooltips ? descriptionForCode( code ) : null\"\n matTooltipPosition=\"after\"\n >\n <span [innerHTML]=\"formatOption( optionForCode( code ) )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n\n @if ( hint ) {\n <div class=\"summary\">\n <span>({{ hint }})</span>\n </div>\n }\n </div>\n }\n\n @if ( selection?.value?.length == options?.length ) {\n <div class=\"selection-overview\">\n <div class=\"summary\">All options selected</div>\n </div>\n }\n }\n\n <mat-selection-list\n [formControl]=\"selection\"\n (selectionChange)=\"onSelectionChange( $event )\"\n [multiple]=\"!single\"\n hideSingleSelectionIndicator\n >\n @for ( option of options; track option ) {\n <mat-list-option [class.hide]=\"!matchesFilter( option )\"\n [value]=\"option.code\" \n togglePosition=\"before\" \n [matTooltip]=\"tooltips ? option.description : null\"\n matTooltipPosition=\"after\" \n >\n <span [innerHTML]=\"formatOption( option )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</ng-template>\n", styles: ["::ng-deep :root{--nrcl-filter-select-width: var( --nrcl-filter-width-2 );--nrcl-filter-select-height: var( --nrcl-filter-height )}:host{--mat-form-field-container-height: calc( var( --nrcl-filter-select-height ) - 4px );--mat-form-field-container-vertical-padding: 8px;--mat-form-field-container-text-size: 15px;--mdc-outlined-text-field-focus-label-text-color: black;--mdc-outlined-text-field-hover-label-text-color: black;width:var(--nrcl-filter-select-width);display:block}:host.has-value{--mdc-outlined-text-field-label-text-color: black}:host ::ng-deep .mat-mdc-form-field{width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:#fff;height:var(--nrcl-filter-select-height);cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix{width:var(--nrcl-filter-select-width)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{margin:0}:host.is-open.use-filter ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:text}::ng-deep .filter-select-options{--mdc-list-list-item-selected-container-color: #007bff;font-family:var(--nrcl-font-family);overflow-x:hidden;overflow-y:auto;padding:0;background:#fff;color:#000;border:1px solid #aaa;border-radius:4px;font-size:var(--nrcl-font-size);pointer-events:all;box-shadow:0 4px 5px #00000026;display:block;width:100%}::ng-deep .filter-select-options .selection-overview{background-color:#eee;border-bottom:1px solid black}::ng-deep .filter-select-options .selection-overview .summary{padding-top:4px;padding-left:4px;font-size:14px;color:#000000bc;font-family:var(--nrcl-font-family)}::ng-deep .filter-select-options .mat-mdc-selection-list{padding-top:0;padding-bottom:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option{height:30px;font-size:var(--nrcl-font-size);padding-left:4px;padding-right:8px}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.hide{display:none}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start{margin:0;padding:0 8px}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__primary-text{flex-grow:1;font-size:var(--nrcl-font-size)}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.mdc-list-item--selected .mdc-list-item__primary-text{color:#fff}::ng-deep .filter-select-options.single .mat-mdc-selection-list .mat-mdc-list-option{padding-left:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i4.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.ButtonComponent, selector: "nrcl-button", inputs: ["label", "icon", "iconRight", "iconCompact", "tooltip", "compact", "primary", "secondary", "tertiary", "disabled", "small"], outputs: ["click"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
262
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterSelectComponent, selector: "nrcl-filter-select", inputs: { label: "label", placeholder: "placeholder", hint: "hint", options: "options", value: "value", selectMax: ["selectMax", "selectMax", numberAttribute], tooltips: ["tooltips", "tooltips", booleanAttribute], summary: ["summary", "summary", booleanAttribute], clear: ["clear", "clear", booleanAttribute], filter: ["filter", "filter", booleanAttribute], filterCharsMin: ["filterCharsMin", "filterCharsMin", numberAttribute], optionFormatter: "optionFormatter", overlayClass: "overlayClass", wide: "wide", filterCharsMinMessage: "filterCharsMinMessage" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.has-value": "hasValue", "class.is-open": "isOpen", "class.is-closed": "!isOpen", "class.use-filter": "filter", "style.--nrcl-filter-select-width": "this.wide ? \"var( --nrcl-filter-width-\" + this.wide + \" )\" : null" } }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "overlayTemplate", first: true, predicate: ["overlayTemplate"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<mat-form-field #trigger\n [floatLabel]=\"floatLabel\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n @if ( label ) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input class=\"filter-input\" #filterInput\n matInput \n [placeholder]=\"placeholder\" \n [value]=\"inputValue\"\n (input)=\"onInput( $event )\"\n (keydown.escape)=\"close()\"\n (focus)=\"onInputFocus()\"\n [matTooltip]=\"inputValue\"\n [readonly]=\"!filter\"\n >\n\n @if ( isOpen ) {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_up\"\n (click)=\"onCloseClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else if ( selection?.value?.length > 0 && clear ) {\n <nrcl-button tertiary matSuffix\n icon=\"close\"\n (click)=\"onCancelClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_down\"\n (click)=\"onInputFocus(); $event.stopPropagation()\"\n ></nrcl-button>\n } \n</mat-form-field> \n\n<ng-template #overlayTemplate>\n <div class=\"nrcl filter-select-options\" [class.multiple]=\"!single\" [class.single]=\"single\" [class]=\"overlayClass\">\n @if ( !isFiltered && ( !single || filterCharsMin ) && summary ) {\n @if ( !selection?.value?.length && ( hint || filterCharsMin ) ) {\n <div class=\"selection-overview\">\n @if ( hint ) {\n <div class=\"summary\">\n <span>{{ hint }}</span>\n </div>\n } \n\n @if ( filterCharsMin && filterCharsMinMessage ) {\n <div class=\"summary\">\n <span>{{ filterCharsMinMessage }}</span>\n </div>\n }\n </div>\n }\n\n @if ( selection?.value?.length > 0 && selection?.value?.length < options?.length ) {\n <div class=\"selection-overview\">\n @if ( !single ) {\n <div class=\"summary\">\n <span>Selected {{ selection?.value?.length }} of {{ options?.length }} options</span>\n </div>\n }\n\n <mat-selection-list\n (selectionChange)=\"onUpperSelectionChange( $event )\"\n >\n @for ( code of selection?.value; track code ) {\n <mat-list-option \n [value]=\"code\" \n togglePosition=\"before\"\n selected\n [matTooltip]=\"tooltips ? descriptionForCode( code ) : null\"\n matTooltipPosition=\"after\"\n >\n <span [innerHTML]=\"formatOption( optionForCode( code ) )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n\n @if ( hint ) {\n <div class=\"summary\">\n <span>{{ hint }}</span>\n </div>\n } \n\n @if ( filterCharsMin && filterCharsMinMessage ) {\n <div class=\"summary\">\n <span>{{ filterCharsMinMessage }}</span>\n </div>\n }\n </div>\n }\n\n @if ( selection?.value?.length == options?.length ) {\n <div class=\"selection-overview\">\n <div class=\"summary\">All options selected</div>\n </div>\n }\n }\n\n @if ( !filterCharsMin || isFiltered ) {\n <mat-selection-list\n [formControl]=\"selection\"\n (selectionChange)=\"onSelectionChange( $event )\"\n [multiple]=\"!single\"\n hideSingleSelectionIndicator\n >\n @for ( option of options; track option ) {\n <mat-list-option [class.hide]=\"!matchesFilter( option )\"\n [value]=\"option.code\" \n togglePosition=\"before\" \n [matTooltip]=\"tooltips ? option.description : null\"\n matTooltipPosition=\"after\" \n >\n <span [innerHTML]=\"formatOption( option )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n }\n </div>\n</ng-template>\n", styles: ["::ng-deep :root{--nrcl-filter-select-width: var( --nrcl-filter-width-2 );--nrcl-filter-select-height: var( --nrcl-filter-height )}:host{--mat-form-field-container-height: calc( var( --nrcl-filter-select-height ) - 4px );--mat-form-field-container-vertical-padding: 8px;--mat-form-field-container-text-size: 15px;--mdc-outlined-text-field-focus-label-text-color: black;--mdc-outlined-text-field-hover-label-text-color: black;width:var(--nrcl-filter-select-width);display:block}:host.has-value{--mdc-outlined-text-field-label-text-color: black}:host ::ng-deep .mat-mdc-form-field{width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:#fff;height:var(--nrcl-filter-select-height);cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix{width:var(--nrcl-filter-select-width)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{margin:0}:host.is-open.use-filter ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:text}::ng-deep .filter-select-options{--mdc-list-list-item-selected-container-color: #007bff;font-family:var(--nrcl-font-family);overflow-x:hidden;overflow-y:auto;padding:0;background:#fff;color:#000;border:1px solid #aaa;border-radius:4px;font-size:var(--nrcl-font-size);pointer-events:all;box-shadow:0 4px 5px #00000026;display:block;width:100%}::ng-deep .filter-select-options .selection-overview{background-color:#eee;border-bottom:1px solid black}::ng-deep .filter-select-options .selection-overview .summary{padding:4px 8px 4px 16px;font-size:14px;color:#000000bc;font-family:var(--nrcl-font-family)}::ng-deep .filter-select-options .mat-mdc-selection-list{padding-top:0;padding-bottom:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option{height:30px;font-size:var(--nrcl-font-size);padding-left:16px;padding-right:8px}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.hide{display:none}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start{margin:0;padding:0 8px 0 0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start .mdc-checkbox{padding:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start .mdc-checkbox .mdc-checkbox__background{top:0;left:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__primary-text{flex-grow:1;font-size:var(--nrcl-font-size)}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.mdc-list-item--selected .mdc-list-item__primary-text{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i4.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.ButtonComponent, selector: "nrcl-button", inputs: ["label", "icon", "iconRight", "iconCompact", "tooltip", "compact", "primary", "secondary", "tertiary", "disabled", "small"], outputs: ["click"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
262
263
|
}
|
|
263
264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterSelectComponent, decorators: [{
|
|
264
265
|
type: Component,
|
|
@@ -268,7 +269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
268
269
|
'[class.is-closed]': "!isOpen",
|
|
269
270
|
'[class.use-filter]': "filter",
|
|
270
271
|
'[style.--nrcl-filter-select-width]': 'this.wide ? "var( --nrcl-filter-width-" + this.wide + " )" : null'
|
|
271
|
-
}, template: "<mat-form-field #trigger\n [floatLabel]=\"floatLabel\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n @if ( label ) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input class=\"filter-input\" #
|
|
272
|
+
}, template: "<mat-form-field #trigger\n [floatLabel]=\"floatLabel\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n @if ( label ) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input class=\"filter-input\" #filterInput\n matInput \n [placeholder]=\"placeholder\" \n [value]=\"inputValue\"\n (input)=\"onInput( $event )\"\n (keydown.escape)=\"close()\"\n (focus)=\"onInputFocus()\"\n [matTooltip]=\"inputValue\"\n [readonly]=\"!filter\"\n >\n\n @if ( isOpen ) {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_up\"\n (click)=\"onCloseClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else if ( selection?.value?.length > 0 && clear ) {\n <nrcl-button tertiary matSuffix\n icon=\"close\"\n (click)=\"onCancelClick($event); $event.stopPropagation()\"\n ></nrcl-button>\n }\n @else {\n <nrcl-button tertiary matSuffix\n icon=\"arrow_drop_down\"\n (click)=\"onInputFocus(); $event.stopPropagation()\"\n ></nrcl-button>\n } \n</mat-form-field> \n\n<ng-template #overlayTemplate>\n <div class=\"nrcl filter-select-options\" [class.multiple]=\"!single\" [class.single]=\"single\" [class]=\"overlayClass\">\n @if ( !isFiltered && ( !single || filterCharsMin ) && summary ) {\n @if ( !selection?.value?.length && ( hint || filterCharsMin ) ) {\n <div class=\"selection-overview\">\n @if ( hint ) {\n <div class=\"summary\">\n <span>{{ hint }}</span>\n </div>\n } \n\n @if ( filterCharsMin && filterCharsMinMessage ) {\n <div class=\"summary\">\n <span>{{ filterCharsMinMessage }}</span>\n </div>\n }\n </div>\n }\n\n @if ( selection?.value?.length > 0 && selection?.value?.length < options?.length ) {\n <div class=\"selection-overview\">\n @if ( !single ) {\n <div class=\"summary\">\n <span>Selected {{ selection?.value?.length }} of {{ options?.length }} options</span>\n </div>\n }\n\n <mat-selection-list\n (selectionChange)=\"onUpperSelectionChange( $event )\"\n >\n @for ( code of selection?.value; track code ) {\n <mat-list-option \n [value]=\"code\" \n togglePosition=\"before\"\n selected\n [matTooltip]=\"tooltips ? descriptionForCode( code ) : null\"\n matTooltipPosition=\"after\"\n >\n <span [innerHTML]=\"formatOption( optionForCode( code ) )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n\n @if ( hint ) {\n <div class=\"summary\">\n <span>{{ hint }}</span>\n </div>\n } \n\n @if ( filterCharsMin && filterCharsMinMessage ) {\n <div class=\"summary\">\n <span>{{ filterCharsMinMessage }}</span>\n </div>\n }\n </div>\n }\n\n @if ( selection?.value?.length == options?.length ) {\n <div class=\"selection-overview\">\n <div class=\"summary\">All options selected</div>\n </div>\n }\n }\n\n @if ( !filterCharsMin || isFiltered ) {\n <mat-selection-list\n [formControl]=\"selection\"\n (selectionChange)=\"onSelectionChange( $event )\"\n [multiple]=\"!single\"\n hideSingleSelectionIndicator\n >\n @for ( option of options; track option ) {\n <mat-list-option [class.hide]=\"!matchesFilter( option )\"\n [value]=\"option.code\" \n togglePosition=\"before\" \n [matTooltip]=\"tooltips ? option.description : null\"\n matTooltipPosition=\"after\" \n >\n <span [innerHTML]=\"formatOption( option )\"></span>\n </mat-list-option>\n }\n </mat-selection-list>\n }\n </div>\n</ng-template>\n", styles: ["::ng-deep :root{--nrcl-filter-select-width: var( --nrcl-filter-width-2 );--nrcl-filter-select-height: var( --nrcl-filter-height )}:host{--mat-form-field-container-height: calc( var( --nrcl-filter-select-height ) - 4px );--mat-form-field-container-vertical-padding: 8px;--mat-form-field-container-text-size: 15px;--mdc-outlined-text-field-focus-label-text-color: black;--mdc-outlined-text-field-hover-label-text-color: black;width:var(--nrcl-filter-select-width);display:block}:host.has-value{--mdc-outlined-text-field-label-text-color: black}:host ::ng-deep .mat-mdc-form-field{width:100%}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:#fff;height:var(--nrcl-filter-select-height);cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix{width:var(--nrcl-filter-select-width)}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:pointer}:host ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{margin:0}:host.is-open.use-filter ::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .filter-input{cursor:text}::ng-deep .filter-select-options{--mdc-list-list-item-selected-container-color: #007bff;font-family:var(--nrcl-font-family);overflow-x:hidden;overflow-y:auto;padding:0;background:#fff;color:#000;border:1px solid #aaa;border-radius:4px;font-size:var(--nrcl-font-size);pointer-events:all;box-shadow:0 4px 5px #00000026;display:block;width:100%}::ng-deep .filter-select-options .selection-overview{background-color:#eee;border-bottom:1px solid black}::ng-deep .filter-select-options .selection-overview .summary{padding:4px 8px 4px 16px;font-size:14px;color:#000000bc;font-family:var(--nrcl-font-family)}::ng-deep .filter-select-options .mat-mdc-selection-list{padding-top:0;padding-bottom:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option{height:30px;font-size:var(--nrcl-font-size);padding-left:16px;padding-right:8px}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.hide{display:none}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start{margin:0;padding:0 8px 0 0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start .mdc-checkbox{padding:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__start .mdc-checkbox .mdc-checkbox__background{top:0;left:0}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option .mdc-list-item__primary-text{flex-grow:1;font-size:var(--nrcl-font-size)}::ng-deep .filter-select-options .mat-mdc-selection-list .mat-mdc-list-option.mdc-list-item--selected .mdc-list-item__primary-text{color:#fff}\n"] }]
|
|
272
273
|
}], propDecorators: { label: [{
|
|
273
274
|
type: Input
|
|
274
275
|
}], placeholder: [{
|
|
@@ -303,6 +304,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
303
304
|
type: Input
|
|
304
305
|
}], wide: [{
|
|
305
306
|
type: Input
|
|
307
|
+
}], filterCharsMinMessage: [{
|
|
308
|
+
type: Input
|
|
306
309
|
}], valueChange: [{
|
|
307
310
|
type: Output
|
|
308
311
|
}], trigger: [{
|
|
@@ -315,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
315
318
|
type: ViewChild,
|
|
316
319
|
args: ['overlayTemplate']
|
|
317
320
|
}] } });
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvY29tcG9uZW50cy9maWx0ZXItc2VsZWN0L2ZpbHRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvZmlsdGVyLXNlbGVjdC9maWx0ZXItc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUlmLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBR3REOzs7Ozs7OztHQVFHO0FBY0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFFBQVE7SUFibkQ7O1FBZWEsZ0JBQVcsR0FBRyxXQUFXLENBQUE7UUFJTyxjQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ1osYUFBUSxHQUFHLElBQUksQ0FBQTtRQUNmLFlBQU8sR0FBRyxJQUFJLENBQUE7UUFDZCxVQUFL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QkFDRSxjQUFjO3NCQUF0RCxLQUFLO3VCQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFDN0IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQWlCdUMsT0FBTztzQkFBcEQsU0FBUzt1QkFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNmLFdBQVc7c0JBQXRDLFNBQVM7dUJBQUUsYUFBYTtnQkFDTyxlQUFlO3NCQUE5QyxTQUFTO3VCQUFFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdFwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgQ29kZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvZGUtdGFibGUudXRpbFwiO1xuaW1wb3J0IHsgTnJjbEJhc2UgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9ucmNsLmJhc2VcIjtcblxuXG4vKipcbiAqIEEgZmlsdGVyIHNlbGVjdCBjb21wb25lbnQgdGhhdCBhbGxvd3MgdXNlcnMgdG8gc2VsZWN0IG11bHRpcGxlIG9wdGlvbnMgZnJvbSBhIGxpc3QuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNlbGVjdCB3aXRoIG9wdGlvbmFsIG1heGltdW0gc2VsZWN0aW9uIGxpbWl0XG4gKiAtIFNlYXJjaC9maWx0ZXIgZnVuY3Rpb25hbGl0eVxuICogLSBUb29sdGlwcyBmb3IgbG9uZyBkZXNjcmlwdGlvbnNcbiAqIC0gU3VtbWFyeSBkaXNwbGF5IG9mIHNlbGVjdGVkIGl0ZW1zXG4gKi9cbkBDb21wb25lbnQoIHtcbiAgICBzZWxlY3RvcjogXCJucmNsLWZpbHRlci1zZWxlY3RcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2ZpbHRlci1zZWxlY3QuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybDogXCIuL2ZpbHRlci1zZWxlY3QuY29tcG9uZW50LnNjc3NcIixcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuaGFzLXZhbHVlXSc6IFwiaGFzVmFsdWVcIixcbiAgICAgICAgJ1tjbGFzcy5pcy1vcGVuXSc6IFwiaXNPcGVuXCIsXG4gICAgICAgICdbY2xhc3MuaXMtY2xvc2VkXSc6IFwiIWlzT3BlblwiLFxuICAgICAgICAnW2NsYXNzLnVzZS1maWx0ZXJdJzogXCJmaWx0ZXJcIixcbiAgICAgICAgJ1tzdHlsZS4tLW5yY2wtZmlsdGVyLXNlbGVjdC13aWR0aF0nOiAndGhpcy53aWRlID8gXCJ2YXIoIC0tbnJjbC1maWx0ZXItd2lkdGgtXCIgKyB0aGlzLndpZGUgKyBcIiApXCIgOiBudWxsJ1xuICAgIH1cbn0gKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlbGVjdENvbXBvbmVudCBleHRlbmRzIE5yY2xCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgbGFiZWxcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdGaWx0ZXIuLi4nXG4gICAgQElucHV0KCkgaGludFxuICAgIEBJbnB1dCgpIG9wdGlvbnM6IENvZGVEZXNjcmlwdGlvbltdXG4gICAgQElucHV0KCkgdmFsdWU6IHN0cmluZ1tdXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0gKSBzZWxlY3RNYXggPSAwXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9ICkgdG9vbHRpcHMgPSB0cnVlXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9ICkgc3VtbWFyeSA9IHRydWVcbiAgICBASW5wdXQoIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0gKSBjbGVhciA9IHRydWVcbiAgICBASW5wdXQoIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0gKSBmaWx0ZXIgPSB0cnVlXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0gKSBmaWx0ZXJDaGFyc01pbiA9IDBcbiAgICBASW5wdXQoKSBvcHRpb25Gb3JtYXR0ZXI6ICggb3B0aW9uOiBDb2RlRGVzY3JpcHRpb24sIHBsYWludGV4dDogYm9vbGVhbiApID0+IHN0cmluZyA9ICggbywgcCApID0+IG8uZGVzY3JpcHRpb25cbiAgICBASW5wdXQoKSBvdmVybGF5Q2xhc3NcbiAgICBASW5wdXQoKSB3aWRlIFxuXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICAgIGZsb2F0TGFiZWwgPSAnYXV0bydcbiAgICBpbnB1dFZhbHVlXG4gICAgb3BlbmluZ1ZhbHVlXG4gICAgaXNGaWx0ZXJlZCA9IGZhbHNlXG4gICAgaXNPcGVuID0gZmFsc2VcbiAgICBoYXNWYWx1ZSA9IGZhbHNlXG4gICAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZlxuICAgIHNlbGVjdGlvbiA9IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgbWF0Y2g6ICggb3B0aW9uOiBDb2RlRGVzY3JpcHRpb24gKSA9PiBib29sZWFuID0gKCBvICkgPT4gdHJ1ZVxuICAgIGNsaWNrU3Vic2NyaXB0aW9uXG5cbiAgICBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdCggQ2hhbmdlRGV0ZWN0b3JSZWYgKVxuICAgIG92ZXJsYXkgPSBpbmplY3QoIE92ZXJsYXkgKVxuICAgIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoIFZpZXdDb250YWluZXJSZWYgKVxuXG4gICAgQFZpZXdDaGlsZCggJ3RyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSApIHRyaWdnZXIhOiBFbGVtZW50UmVmXG4gICAgQFZpZXdDaGlsZCggJ2ZpbHRlcklucHV0JyApIGZpbHRlcklucHV0ITogRWxlbWVudFJlZlxuICAgIEBWaWV3Q2hpbGQoICdvdmVybGF5VGVtcGxhdGUnICkgb3ZlcmxheVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PlxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KClcblxuICAgICAgICB0aGlzLmNsaWNrU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KCBkb2N1bWVudCwgJ2NsaWNrJyApXG4gICAgICAgICAgICAucGlwZSggZmlsdGVyKCAoIGV2ZW50OiBNb3VzZUV2ZW50ICkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlckVsID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5RWwgPSB0aGlzLm92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0cmlnZ2VyRWwsb3ZlcmxheUVsKVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xvc2UgaWYgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRyaWdnZXIgYW5kIG92ZXJsYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRyaWdnZXJFbD8uY29udGFpbnMoY2xpY2tUYXJnZXQpXG4gICAgICAgICAgICAgICAgICAgICYmICFvdmVybGF5RWw/LmNvbnRhaW5zKGNsaWNrVGFyZ2V0KVxuICAgICAgICAgICAgfSApIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnb3V0c2lkZSBjbGljaycpXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRvU2VsZWN0aW9uKClcbiAgICAgICAgICAgICAgICB0aGlzLmZsb2F0TGFiZWwgPSAnYXV0bydcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICAgICAgfSApXG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKTogdm9pZCB7XG4gICAgICAgIGlmICggdGhpcy5pc09wZW4gKSByZXR1cm5cblxuICAgICAgICBpZiAoIGNoYW5nZXMub3B0aW9ucyApIHtcbiAgICAgICAgICAgIGxldCBwdiA9IEpTT04uc3RyaW5naWZ5KCBjaGFuZ2VzLm9wdGlvbnMucHJldmlvdXNWYWx1ZSApXG4gICAgICAgICAgICBsZXQgY3YgPSBKU09OLnN0cmluZ2lmeSggY2hhbmdlcy5vcHRpb25zLmN1cnJlbnRWYWx1ZSApXG4gICAgICAgICAgICBpZiAoIHB2ICE9IGN2ICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFZhbHVlKCBudWxsIClcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VG9TZWxlY3Rpb24oKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggY2hhbmdlcy52YWx1ZSApIHtcbiAgICAgICAgICAgIGxldCBwdiA9IEpTT04uc3RyaW5naWZ5KCBjaGFuZ2VzLnZhbHVlLnByZXZpb3VzVmFsdWUgKVxuICAgICAgICAgICAgbGV0IGN2ID0gSlNPTi5zdHJpbmdpZnkoIGNoYW5nZXMudmFsdWUuY3VycmVudFZhbHVlIClcbiAgICAgICAgICAgIGlmICggcHYgIT0gY3YgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLnZhbHVlICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdGhpcy52YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFZhbHVlKCB0aGlzLnZhbHVlIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdE1heCA+IDEgJiYgdGhpcy52YWx1ZS5sZW5ndGggPj0gdGhpcy5zZWxlY3RNYXggKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmVuYWJsZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRWYWx1ZSggbnVsbCApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmVuYWJsZSgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXIoKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRUb1NlbGVjdGlvbigpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgZ2V0IHNpbmdsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TWF4ID09IDFcbiAgICB9XG5cbiAgICBlbWl0VmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSAoIHRoaXMuc2VsZWN0aW9uLnZhbHVlIHx8IFtdICkubGVuZ3RoID4gMFxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoIHRoaXMuc2VsZWN0aW9uLnZhbHVlIHx8IFtdIClcbiAgICB9XG5cbiAgICBvcGVuKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnb3BlbicsdGhpcy5pc09wZW4sdGhpcy5maWx0ZXJDaGFyc01pbiAmJiAhdGhpcy5pc0ZpbHRlcmVkKVxuICAgICAgICBpZiAoIHRoaXMuaXNPcGVuICkgcmV0dXJuXG5cbiAgICAgICAgaWYgKCB0aGlzLmZpbHRlckNoYXJzTWluICYmICF0aGlzLmlzRmlsdGVyZWQgKSByZXR1cm5cblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWVcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuXG4gICAgICAgIC8vIENyZWF0ZSBvdmVybGF5XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyggdGhpcy50cmlnZ2VyIClcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0gKVxuICAgICAgICAgICAgLndpdGhQdXNoKCBmYWxzZSApXG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcblxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKCB7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBtYXhXaWR0aDogdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiAyLFxuICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICAgIH0gKVxuXG4gICAgICAgIC8vIEF0dGFjaCB0ZW1wbGF0ZVxuICAgICAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoIHRoaXMub3ZlcmxheVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYgKVxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKCBwb3J0YWwgKVxuXG4gICAgICAgIC8vIEZvY3VzIGlucHV0IGFmdGVyIG92ZXJsYXkgaXMgYXR0YWNoZWRcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGxpc3QgZnJvbSBzY3JvbGxpbmcgd2hlbiBzZWxlY3Rpb24gY2hhbmdlcyAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5jaGlsZHJlblswXS5zY3JvbGwoIDAsIDEgKVxuICAgICAgICB9LDEwMCApXG5cbiAgICAgICAgdGhpcy5vcGVuaW5nVmFsdWUgPSBKU09OLnN0cmluZ2lmeSggdGhpcy5zZWxlY3Rpb24udmFsdWUgKVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2xvc2UnLHRoaXMuaXNPcGVuKVxuICAgICAgICBpZiAoICF0aGlzLmlzT3BlbiApIHJldHVyblxuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2VcblxuICAgICAgICBpZiAoIHRoaXMub3ZlcmxheVJlZiApIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKClcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGxcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG5cbiAgICAgICAgbGV0IGNsb3NpbmdWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KCB0aGlzLnNlbGVjdGlvbi52YWx1ZSApXG4gICAgICAgIGlmICggdGhpcy5vcGVuaW5nVmFsdWUgIT0gY2xvc2luZ1ZhbHVlIClcbiAgICAgICAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlKClcbiAgICB9XG5cbiAgICBzZXRJbnB1dFRvU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLnNlbGVjdGlvbj8udmFsdWU/Lm1hcCggYyA9PiB0aGlzLm9wdGlvbkZvcm1hdHRlciggdGhpcy5vcHRpb25Gb3JDb2RlKCBjICksIHRydWUgKSApLmpvaW4oICcsICcgKSB8fCBudWxsXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgb25JbnB1dCggZXY/KSB7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyKCBldj8udGFyZ2V0Py52YWx1ZSApXG4gICAgfVxuXG4gICAgc2V0RmlsdGVyKCB0ZXh0Pzogc3RyaW5nICkge1xuICAgICAgICBsZXQgdCA9IHRleHQ/LnRyaW0oKS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgICAgaWYgKCB0Py5sZW5ndGggPj0gdGhpcy5maWx0ZXJDaGFyc01pbiApIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWx0ZXJpbmcnKVxuICAgICAgICAgICAgdGhpcy5pc0ZpbHRlcmVkID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICggb3B0aW9uICkgPT4gb3B0aW9uLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIHQgKVxuXG4gICAgICAgICAgICBpZiAoIHRoaXMuZmlsdGVyQ2hhcnNNaW4gKSB0aGlzLm9wZW4oKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ25vdCBmaWx0ZXJpbmcnKVxuICAgICAgICAgICAgdGhpcy5pc0ZpbHRlcmVkID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAoIG8gKSA9PiB0cnVlXG5cbiAgICAgICAgICAgIGlmICggdGhpcy5maWx0ZXJDaGFyc01pbiApIHRoaXMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG5cbiAgICBtYXRjaGVzRmlsdGVyKCBvcHRpb246IENvZGVEZXNjcmlwdGlvbiApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2goIG9wdGlvbiApXG4gICAgfVxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoIGV2ICkge1xuICAgICAgICBpZiAoIHRoaXMuc2luZ2xlICkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICB0aGlzLnNldElucHV0VG9TZWxlY3Rpb24oKVxuICAgICAgICAgICAgdGhpcy5mbG9hdExhYmVsID0gJ2F1dG8nXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggdGhpcy5zZWxlY3RNYXggPiAxICkge1xuICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdGlvbi52YWx1ZS5sZW5ndGggPj0gdGhpcy5zZWxlY3RNYXggKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGlzYWJsZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5lbmFibGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG5cbiAgICBvblVwcGVyU2VsZWN0aW9uQ2hhbmdlKCBldjogTWF0U2VsZWN0aW9uTGlzdENoYW5nZSApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29kZXMgPSB0aGlzLnNlbGVjdGlvbi52YWx1ZS5maWx0ZXIoIGMgPT4gYyAhPSBldi5vcHRpb25zWyAwIF0udmFsdWUgKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0VmFsdWUoIGNvZGVzIClcblxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSggZXYgKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ2FuY2VsQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFZhbHVlKCBudWxsIClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlKClcbiAgICAgICAgdGhpcy5zZXRJbnB1dFRvU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2UoKVxuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uSW5wdXRGb2N1cycpXG4gICAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhbHdheXMnXG5cbiAgICAgICAgaWYgKCB0aGlzLmZpbHRlciApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnXG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlcigpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW4oKVxuICAgIH1cblxuICAgIG9uQ2xvc2VDbGljaygpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIHRoaXMuc2V0SW5wdXRUb1NlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhdXRvJ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cblxuICAgIGRlc2NyaXB0aW9uRm9yQ29kZSggY29kZTogc3RyaW5nICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCggbyA9PiBvLmNvZGUgPT0gY29kZSApPy5kZXNjcmlwdGlvblxuICAgIH1cblxuICAgIG9wdGlvbkZvckNvZGUoIGNvZGU6IHN0cmluZyApOiBDb2RlRGVzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoIG8gPT4gby5jb2RlID09IGNvZGUgKVxuICAgIH1cblxuICAgIGZvcm1hdE9wdGlvbiggb3B0aW9uOiBDb2RlRGVzY3JpcHRpb24gKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRm9ybWF0dGVyKCBvcHRpb24sIGZhbHNlIClcbiAgICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgI3RyaWdnZXJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiXG4+XG4gICAgQGlmICggbGFiZWwgKSB7XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICB9XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJmaWx0ZXItaW5wdXRcIiAjc2VhcmNoSW5wdXRcbiAgICAgICAgbWF0SW5wdXQgXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFxuICAgICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KCAkZXZlbnQgKVwiXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCIhZmlsdGVyXCJcbiAgICA+XG5cbiAgICBAaWYgKCBpc09wZW4gKSB7XG4gICAgICAgIDxucmNsLWJ1dHRvbiB0ZXJ0aWFyeSBtYXRTdWZmaXhcbiAgICAgICAgICAgIGljb249XCJhcnJvd19kcm9wX3VwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgPjwvbnJjbC1idXR0b24+XG4gICAgfVxuICAgIEBlbHNlIGlmICggc2VsZWN0aW9uPy52YWx1ZT8ubGVuZ3RoID4gMCAmJiBjbGVhciApIHtcbiAgICAgICAgPG5yY2wtYnV0dG9uIHRlcnRpYXJ5IG1hdFN1ZmZpeFxuICAgICAgICAgICAgaWNvbj1cImNsb3NlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbENsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgID48L25yY2wtYnV0dG9uPlxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAgIDxucmNsLWJ1dHRvbiB0ZXJ0aWFyeSBtYXRTdWZmaXhcbiAgICAgICAgICAgIGljb249XCJhcnJvd19kcm9wX2Rvd25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW5wdXRGb2N1cygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+PC9ucmNsLWJ1dHRvbj5cbiAgICB9ICAgICAgICAgICAgICAgIFxuPC9tYXQtZm9ybS1maWVsZD4gICAgICAgIFxuPG5nLXRlbXBsYXRlICNvdmVybGF5VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1zZWxlY3Qtb3B0aW9uc1wiIFtjbGFzcy5tdWx0aXBsZV09XCIhc2luZ2xlXCIgW2NsYXNzLnNpbmdsZV09XCJzaW5nbGVcIiBbY2xhc3NdPVwib3ZlcmxheUNsYXNzXCI+XG4gICAgICAgIEBpZiAoICFpc0ZpbHRlcmVkICYmICFzaW5nbGUgJiYgc3VtbWFyeSApIHtcbiAgICAgICAgICAgIEBpZiAoICFzZWxlY3Rpb24/LnZhbHVlPy5sZW5ndGggJiYgaGludCApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uLW92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgaGludCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCBzZWxlY3Rpb24/LnZhbHVlPy5sZW5ndGggPiAwICYmIHNlbGVjdGlvbj8udmFsdWU/Lmxlbmd0aCA8IG9wdGlvbnM/Lmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uLW92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBzZWxlY3Rpb24/LnZhbHVlPy5sZW5ndGggfX0gc2VsZWN0ZWQgb2Yge3sgb3B0aW9ucz8ubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdGlvbi1saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVXBwZXJTZWxlY3Rpb25DaGFuZ2UoICRldmVudCApXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoIGNvZGUgb2Ygc2VsZWN0aW9uPy52YWx1ZTsgdHJhY2sgY29kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxpc3Qtb3B0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29kZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVQb3NpdGlvbj1cImJlZm9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInRvb2x0aXBzID8gZGVzY3JpcHRpb25Gb3JDb2RlKCBjb2RlICkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJmb3JtYXRPcHRpb24oIG9wdGlvbkZvckNvZGUoIGNvZGUgKSApXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKCBoaW50ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgaGludCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCBzZWxlY3Rpb24/LnZhbHVlPy5sZW5ndGggPT0gb3B0aW9ucz8ubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tb3ZlcnZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5BbGwgb3B0aW9ucyBzZWxlY3RlZDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCAkZXZlbnQgKVwiXG4gICAgICAgICAgICBbbXVsdGlwbGVdPVwiIXNpbmdsZVwiXG4gICAgICAgICAgICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yXG4gICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKCBvcHRpb24gb2Ygb3B0aW9uczsgdHJhY2sgb3B0aW9uICkge1xuICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gW2NsYXNzLmhpZGVdPVwiIW1hdGNoZXNGaWx0ZXIoIG9wdGlvbiApXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5jb2RlXCIgXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvc2l0aW9uPVwiYmVmb3JlXCIgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0b29sdGlwcyA/IG9wdGlvbi5kZXNjcmlwdGlvbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhZnRlclwiICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImZvcm1hdE9wdGlvbiggb3B0aW9uIClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvY29tcG9uZW50cy9maWx0ZXItc2VsZWN0L2ZpbHRlci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvZmlsdGVyLXNlbGVjdC9maWx0ZXItc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUlmLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFHdEQ7Ozs7Ozs7O0dBUUc7QUFjSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsUUFBUTtJQWJuRDs7UUFlYSxnQkFBVyxHQUFHLFdBQVcsQ0FBQTtRQUlPLGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDWixhQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ2YsWUFBTyxHQUFHLElBQUksQ0FBQTtRQUNkLFVBQUssR0FBRyxJQUFJLENBQUE7UUFDWixXQUFNLEdBQUcsSUFBSSxDQUFBO1FB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O3NCQUE3QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBaUJ1QyxPQUFPO3NCQUFwRCxTQUFTO3VCQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2YsV0FBVztzQkFBdEMsU0FBUzt1QkFBRSxhQUFhO2dCQUNPLGVBQWU7c0JBQTlDLFNBQVM7dUJBQUUsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTWF0U2VsZWN0aW9uTGlzdENoYW5nZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9saXN0XCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTnJjbEJhc2UgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9ucmNsLmJhc2VcIjtcbmltcG9ydCB7IENvZGVEZXNjcmlwdGlvbiB9IGZyb20gXCIuLi8uLi91dGlscy9jb2RlLXRhYmxlLnV0aWxcIjtcblxuLyoqXG4gKiBBIGZpbHRlciBzZWxlY3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHVzZXJzIHRvIHNlbGVjdCBtdWx0aXBsZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBNdWx0aS1zZWxlY3Qgd2l0aCBvcHRpb25hbCBtYXhpbXVtIHNlbGVjdGlvbiBsaW1pdFxuICogLSBTZWFyY2gvZmlsdGVyIGZ1bmN0aW9uYWxpdHlcbiAqIC0gVG9vbHRpcHMgZm9yIGxvbmcgZGVzY3JpcHRpb25zXG4gKiAtIFN1bW1hcnkgZGlzcGxheSBvZiBzZWxlY3RlZCBpdGVtc1xuICovXG5AQ29tcG9uZW50KCB7XG4gICAgc2VsZWN0b3I6IFwibnJjbC1maWx0ZXItc2VsZWN0XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9maWx0ZXItc2VsZWN0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9maWx0ZXItc2VsZWN0LmNvbXBvbmVudC5zY3NzXCIsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLmhhcy12YWx1ZV0nOiBcImhhc1ZhbHVlXCIsXG4gICAgICAgICdbY2xhc3MuaXMtb3Blbl0nOiBcImlzT3BlblwiLFxuICAgICAgICAnW2NsYXNzLmlzLWNsb3NlZF0nOiBcIiFpc09wZW5cIixcbiAgICAgICAgJ1tjbGFzcy51c2UtZmlsdGVyXSc6IFwiZmlsdGVyXCIsXG4gICAgICAgICdbc3R5bGUuLS1ucmNsLWZpbHRlci1zZWxlY3Qtd2lkdGhdJzogJ3RoaXMud2lkZSA/IFwidmFyKCAtLW5yY2wtZmlsdGVyLXdpZHRoLVwiICsgdGhpcy53aWRlICsgXCIgKVwiIDogbnVsbCdcbiAgICB9XG59IClcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOcmNsQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGxhYmVsXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnRmlsdGVyLi4uJ1xuICAgIEBJbnB1dCgpIGhpbnRcbiAgICBASW5wdXQoKSBvcHRpb25zOiBDb2RlRGVzY3JpcHRpb25bXVxuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmdbXVxuICAgIEBJbnB1dCggeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9ICkgc2VsZWN0TWF4ID0gMFxuICAgIEBJbnB1dCggeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSApIHRvb2x0aXBzID0gdHJ1ZVxuICAgIEBJbnB1dCggeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSApIHN1bW1hcnkgPSB0cnVlXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9ICkgY2xlYXIgPSB0cnVlXG4gICAgQElucHV0KCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9ICkgZmlsdGVyID0gdHJ1ZVxuICAgIEBJbnB1dCggeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9ICkgZmlsdGVyQ2hhcnNNaW4gPSAwXG4gICAgQElucHV0KCkgb3B0aW9uRm9ybWF0dGVyOiAoIG9wdGlvbjogQ29kZURlc2NyaXB0aW9uLCBwbGFpbnRleHQ6IGJvb2xlYW4gKSA9PiBzdHJpbmcgPSAoIG8sIHAgKSA9PiBvLmRlc2NyaXB0aW9uXG4gICAgQElucHV0KCkgb3ZlcmxheUNsYXNzXG4gICAgQElucHV0KCkgd2lkZSBcbiAgICBASW5wdXQoKSBmaWx0ZXJDaGFyc01pbk1lc3NhZ2UgPSAnVG9vIG1hbnkgb3B0aW9ucydcblxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgICBmbG9hdExhYmVsID0gJ2F1dG8nXG4gICAgaW5wdXRWYWx1ZVxuICAgIG9wZW5pbmdWYWx1ZVxuICAgIGlzRmlsdGVyZWQgPSBmYWxzZVxuICAgIGlzT3BlbiA9IGZhbHNlXG4gICAgaGFzVmFsdWUgPSBmYWxzZVxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWZcbiAgICBzZWxlY3Rpb24gPSBuZXcgRm9ybUNvbnRyb2woKVxuICAgIG1hdGNoOiAoIG9wdGlvbjogQ29kZURlc2NyaXB0aW9uICkgPT4gYm9vbGVhbiA9ICggbyApID0+IHRydWVcbiAgICBjbGlja1N1YnNjcmlwdGlvblxuXG4gICAgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoIENoYW5nZURldGVjdG9yUmVmIClcbiAgICBvdmVybGF5ID0gaW5qZWN0KCBPdmVybGF5IClcbiAgICB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KCBWaWV3Q29udGFpbmVyUmVmIClcblxuICAgIEBWaWV3Q2hpbGQoICd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0gKSB0cmlnZ2VyITogRWxlbWVudFJlZlxuICAgIEBWaWV3Q2hpbGQoICdmaWx0ZXJJbnB1dCcgKSBmaWx0ZXJJbnB1dCE6IEVsZW1lbnRSZWZcbiAgICBAVmlld0NoaWxkKCAnb3ZlcmxheVRlbXBsYXRlJyApIG92ZXJsYXlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT5cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpXG5cbiAgICAgICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxNb3VzZUV2ZW50PiggZG9jdW1lbnQsICdjbGljaycgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSggKCBldmVudDogTW91c2VFdmVudCApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGlja1RhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJFbCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUVsID0gdGhpcy5vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudFxuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RyaWdnZXJFbCcsdHJpZ2dlckVsLHRyaWdnZXJFbD8uY29udGFpbnMoY2xpY2tUYXJnZXQpKVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdvdmVybGF5RWwnLG92ZXJsYXlFbCxvdmVybGF5RWw/LmNvbnRhaW5zKGNsaWNrVGFyZ2V0KSlcblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xvc2UgaWYgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRyaWdnZXIgYW5kIG92ZXJsYXlcbiAgICAgICAgICAgICAgICBpZiAoIHRyaWdnZXJFbD8uY29udGFpbnMoY2xpY2tUYXJnZXQpICkgcmV0dXJuIFxuICAgICAgICAgICAgICAgIGlmICggIW92ZXJsYXlFbCApIHJldHVybiBcbiAgICAgICAgICAgICAgICBpZiAoIG92ZXJsYXlFbD8uY29udGFpbnMoY2xpY2tUYXJnZXQpICkgcmV0dXJuIFxuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ291dHNpZGUgY2xpY2snKVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRUb1NlbGVjdGlvbigpXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9hdExhYmVsID0gJ2F1dG8nXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH0gKVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICk6IHZvaWQge1xuICAgICAgICBpZiAoIHRoaXMuaXNPcGVuICkgcmV0dXJuXG5cbiAgICAgICAgaWYgKCBjaGFuZ2VzLm9wdGlvbnMgKSB7XG4gICAgICAgICAgICBsZXQgcHYgPSBKU09OLnN0cmluZ2lmeSggY2hhbmdlcy5vcHRpb25zLnByZXZpb3VzVmFsdWUgKVxuICAgICAgICAgICAgbGV0IGN2ID0gSlNPTi5zdHJpbmdpZnkoIGNoYW5nZXMub3B0aW9ucy5jdXJyZW50VmFsdWUgKVxuICAgICAgICAgICAgaWYgKCBwdiAhPSBjdiApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRWYWx1ZSggbnVsbCApXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRvU2VsZWN0aW9uKClcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIGNoYW5nZXMudmFsdWUgKSB7XG4gICAgICAgICAgICBsZXQgcHYgPSBKU09OLnN0cmluZ2lmeSggY2hhbmdlcy52YWx1ZS5wcmV2aW91c1ZhbHVlIClcbiAgICAgICAgICAgIGxldCBjdiA9IEpTT04uc3RyaW5naWZ5KCBjaGFuZ2VzLnZhbHVlLmN1cnJlbnRWYWx1ZSApXG4gICAgICAgICAgICBpZiAoIHB2ICE9IGN2ICkge1xuICAgICAgICAgICAgICAgIGlmICggdGhpcy52YWx1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMudmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRWYWx1ZSggdGhpcy52YWx1ZSApXG4gICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZWxlY3RNYXggPiAxICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMuc2VsZWN0TWF4ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGlzYWJsZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5lbmFibGUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0VmFsdWUoIG51bGwgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5lbmFibGUoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyKClcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VG9TZWxlY3Rpb24oKVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2Rlc3Ryb3knLHRoaXMuaW5zdClcbiAgICAgICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGdldCBzaW5nbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1heCA9PSAxXG4gICAgfVxuXG4gICAgZW1pdFZhbHVlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gKCB0aGlzLnNlbGVjdGlvbi52YWx1ZSB8fCBbXSApLmxlbmd0aCA+IDBcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KCB0aGlzLnNlbGVjdGlvbi52YWx1ZSB8fCBbXSApXG4gICAgfVxuXG4gICAgb3BlbigpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4nLHRoaXMuaXNPcGVuKVxuICAgICAgICBpZiAoIHRoaXMuaXNPcGVuICkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKClcblxuICAgICAgICAvLyBDcmVhdGUgb3ZlcmxheVxuICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8oIHRoaXMudHJpZ2dlciApXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyggW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdIClcbiAgICAgICAgICAgIC53aXRoUHVzaCggZmFsc2UgKVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpXG5cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSgge1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgbWF4V2lkdGg6IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogMixcbiAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMzAwLFxuICAgICAgICB9IClcblxuICAgICAgICAvLyBBdHRhY2ggdGVtcGxhdGVcbiAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKCB0aGlzLm92ZXJsYXlUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmIClcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCggcG9ydGFsIClcblxuICAgICAgICAvLyBGb2N1cyBpbnB1dCBhZnRlciBvdmVybGF5IGlzIGF0dGFjaGVkXG4gICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICAgICAgLy8gcHJldmVudCBsaXN0IGZyb20gc2Nyb2xsaW5nIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXMgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY2hpbGRyZW5bMF0uc2Nyb2xsKCAwLCAxIClcbiAgICAgICAgfSwxMDAgKVxuXG4gICAgICAgIHRoaXMub3BlbmluZ1ZhbHVlID0gSlNPTi5zdHJpbmdpZnkoIHRoaXMuc2VsZWN0aW9uLnZhbHVlIClcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCdjbG9zZScsdGhpcy5pc09wZW4pXG4gICAgICAgIGlmICggIXRoaXMuaXNPcGVuICkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZVxuXG4gICAgICAgIGlmICggdGhpcy5vdmVybGF5UmVmICkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKVxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcblxuICAgICAgICBsZXQgY2xvc2luZ1ZhbHVlID0gSlNPTi5zdHJpbmdpZnkoIHRoaXMuc2VsZWN0aW9uLnZhbHVlIClcbiAgICAgICAgaWYgKCB0aGlzLm9wZW5pbmdWYWx1ZSAhPSBjbG9zaW5nVmFsdWUgKVxuICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2UoKVxuICAgIH1cblxuICAgIHNldElucHV0VG9TZWxlY3Rpb24oKSB7XG4gICAgICAgIC8vIGNvbnNvbGUud2Fybignc2V0SW5wdXRUb1NlbGVjdGlvbicpXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuc2VsZWN0aW9uPy52YWx1ZT8ubWFwKCBjID0+IHRoaXMub3B0aW9uRm9ybWF0dGVyKCB0aGlzLm9wdGlvbkZvckNvZGUoIGMgKSwgdHJ1ZSApICkuam9pbiggJywgJyApIHx8IG51bGxcbiAgICAgICAgdGhpcy5pc0ZpbHRlcmVkID0gZmFsc2VcbiAgICB9XG5cbiAgICBvbklucHV0KCBldj8pIHtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXIoIGV2Py50YXJnZXQ/LnZhbHVlIClcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXIoIHRleHQ/OiBzdHJpbmcgKSB7XG4gICAgICAgIGxldCB0ID0gdGV4dD8udHJpbSgpLnRvTG93ZXJDYXNlKClcblxuICAgICAgICBpZiAoIHQ/Lmxlbmd0aCA+PSB0aGlzLmZpbHRlckNoYXJzTWluICkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpbHRlcmluZycpXG4gICAgICAgICAgICB0aGlzLmlzRmlsdGVyZWQgPSB0cnVlXG4gICAgICAgICAgICB0aGlzLm1hdGNoID0gKCBvcHRpb24gKSA9PiBvcHRpb24uZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyggdCApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbm90IGZpbHRlcmluZycpXG4gICAgICAgICAgICB0aGlzLmlzRmlsdGVyZWQgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICggbyApID0+IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuXG4gICAgbWF0Y2hlc0ZpbHRlciggb3B0aW9uOiBDb2RlRGVzY3JpcHRpb24gKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoKCBvcHRpb24gKVxuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCBldiApIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uU2VsZWN0aW9uQ2hhbmdlJyx0aGlzLnNpbmdsZSlcbiAgICAgICAgaWYgKCB0aGlzLnNpbmdsZSApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRvU2VsZWN0aW9uKClcbiAgICAgICAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhdXRvJ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMuc2VsZWN0TWF4ID4gMSApIHtcbiAgICAgICAgICAgIGlmICggdGhpcy5zZWxlY3Rpb24udmFsdWUubGVuZ3RoID49IHRoaXMuc2VsZWN0TWF4ICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRpc2FibGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuXG4gICAgb25VcHBlclNlbGVjdGlvbkNoYW5nZSggZXY6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UgKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvZGVzID0gdGhpcy5zZWxlY3Rpb24udmFsdWUuZmlsdGVyKCBjID0+IGMgIT0gZXYub3B0aW9uc1sgMCBdLnZhbHVlIClcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFZhbHVlKCBjb2RlcyApXG5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoIGV2IClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvbkNhbmNlbENsaWNrKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnb25DYW5jZWxDbGljaycpXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFZhbHVlKCBudWxsIClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlKClcbiAgICAgICAgdGhpcy5zZXRJbnB1dFRvU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2UoKVxuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uSW5wdXRGb2N1cycpXG4gICAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhbHdheXMnXG5cbiAgICAgICAgaWYgKCB0aGlzLmZpbHRlciApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnXG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlcigpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW4oKVxuICAgIH1cblxuICAgIG9uQ2xvc2VDbGljaygpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIHRoaXMuc2V0SW5wdXRUb1NlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhdXRvJ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cblxuICAgIGRlc2NyaXB0aW9uRm9yQ29kZSggY29kZTogc3RyaW5nICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCggbyA9PiBvLmNvZGUgPT0gY29kZSApPy5kZXNjcmlwdGlvblxuICAgIH1cblxuICAgIG9wdGlvbkZvckNvZGUoIGNvZGU6IHN0cmluZyApOiBDb2RlRGVzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoIG8gPT4gby5jb2RlID09IGNvZGUgKVxuICAgIH1cblxuICAgIGZvcm1hdE9wdGlvbiggb3B0aW9uOiBDb2RlRGVzY3JpcHRpb24gKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRm9ybWF0dGVyKCBvcHRpb24sIGZhbHNlIClcbiAgICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgI3RyaWdnZXJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiXG4+XG4gICAgQGlmICggbGFiZWwgKSB7XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICB9XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJmaWx0ZXItaW5wdXRcIiAjZmlsdGVySW5wdXRcbiAgICAgICAgbWF0SW5wdXQgXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFxuICAgICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KCAkZXZlbnQgKVwiXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCIhZmlsdGVyXCJcbiAgICA+XG5cbiAgICBAaWYgKCBpc09wZW4gKSB7XG4gICAgICAgIDxucmNsLWJ1dHRvbiB0ZXJ0aWFyeSBtYXRTdWZmaXhcbiAgICAgICAgICAgIGljb249XCJhcnJvd19kcm9wX3VwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgPjwvbnJjbC1idXR0b24+XG4gICAgfVxuICAgIEBlbHNlIGlmICggc2VsZWN0aW9uPy52YWx1ZT8ubGVuZ3RoID4gMCAmJiBjbGVhciApIHtcbiAgICAgICAgPG5yY2wtYnV0dG9uIHRlcnRpYXJ5IG1hdFN1ZmZpeFxuICAgICAgICAgICAgaWNvbj1cImNsb3NlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbENsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgID48L25yY2wtYnV0dG9uPlxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAgIDxucmNsLWJ1dHRvbiB0ZXJ0aWFyeSBtYXRTdWZmaXhcbiAgICAgICAgICAgIGljb249XCJhcnJvd19kcm9wX2Rvd25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW5wdXRGb2N1cygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+PC9ucmNsLWJ1dHRvbj5cbiAgICB9ICAgICAgICAgICAgICAgIFxuPC9tYXQtZm9ybS1maWVsZD4gICAgICAgIFxuXG48bmctdGVtcGxhdGUgI292ZXJsYXlUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwibnJjbCBmaWx0ZXItc2VsZWN0LW9wdGlvbnNcIiBbY2xhc3MubXVsdGlwbGVdPVwiIXNpbmdsZVwiIFtjbGFzcy5zaW5nbGVdPVwic2luZ2xlXCIgW2NsYXNzXT1cIm92ZXJsYXlDbGFzc1wiPlxuICAgICAgICBAaWYgKCAhaXNGaWx0ZXJlZCAmJiAoICFzaW5nbGUgfHwgZmlsdGVyQ2hhcnNNaW4gKSAmJiBzdW1tYXJ5ICkge1xuICAgICAgICAgICAgQGlmICggIXNlbGVjdGlvbj8udmFsdWU/Lmxlbmd0aCAmJiAoIGhpbnQgfHwgZmlsdGVyQ2hhcnNNaW4gKSApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uLW92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIGhpbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGhpbnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICggZmlsdGVyQ2hhcnNNaW4gJiYgZmlsdGVyQ2hhcnNNaW5NZXNzYWdlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmaWx0ZXJDaGFyc01pbk1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCBzZWxlY3Rpb24/LnZhbHVlPy5sZW5ndGggPiAwICYmIHNlbGVjdGlvbj8udmFsdWU/Lmxlbmd0aCA8IG9wdGlvbnM/Lmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uLW92ZXJ2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoICFzaW5nbGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlNlbGVjdGVkIHt7IHNlbGVjdGlvbj8udmFsdWU/Lmxlbmd0aCB9fSBvZiB7eyBvcHRpb25zPy5sZW5ndGggfX0gb3B0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblVwcGVyU2VsZWN0aW9uQ2hhbmdlKCAkZXZlbnQgKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKCBjb2RlIG9mIHNlbGVjdGlvbj8udmFsdWU7IHRyYWNrIGNvZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvZGVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0b29sdGlwcyA/IGRlc2NyaXB0aW9uRm9yQ29kZSggY29kZSApIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFmdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZm9ybWF0T3B0aW9uKCBvcHRpb25Gb3JDb2RlKCBjb2RlICkgKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICggaGludCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaGludCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICBAaWYgKCBmaWx0ZXJDaGFyc01pbiAmJiBmaWx0ZXJDaGFyc01pbk1lc3NhZ2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpbHRlckNoYXJzTWluTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoIHNlbGVjdGlvbj8udmFsdWU/Lmxlbmd0aCA9PSBvcHRpb25zPy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGlvbi1vdmVydmlld1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPkFsbCBvcHRpb25zIHNlbGVjdGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCAhZmlsdGVyQ2hhcnNNaW4gfHwgaXNGaWx0ZXJlZCApIHtcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCAkZXZlbnQgKVwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIiFzaW5nbGVcIlxuICAgICAgICAgICAgICAgIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yICggb3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbiApIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBbY2xhc3MuaGlkZV09XCIhbWF0Y2hlc0ZpbHRlciggb3B0aW9uIClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5jb2RlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVQb3NpdGlvbj1cImJlZm9yZVwiICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInRvb2x0aXBzID8gb3B0aW9uLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhZnRlclwiICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZm9ybWF0T3B0aW9uKCBvcHRpb24gKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -77,7 +77,7 @@ export class RowListPaginationComponent extends NrclBase {
|
|
|
77
77
|
return this.rowCount;
|
|
78
78
|
}
|
|
79
79
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListPaginationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
80
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RowListPaginationComponent, selector: "nrcl-row-list-pagination", inputs: { paginationId: "paginationId", pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", pageNumber: "pageNumber", rowCount: "rowCount", showPageSize: "showPageSize", noRowsMessage: "noRowsMessage" }, outputs: { pageSizeChange: "pageSizeChange", pageNumberChange: "pageNumberChange" }, host: { listeners: { "window:resize": "onResize($event)" }, properties: { "class.width-sufficient": "componentWidth == 'sufficient'", "class.width-tight": "componentWidth == 'tight'", "class.width-restrictive": "componentWidth == 'restrictive'" } }, usesInheritance: true, ngImport: i0, template: "@if ( hasRows ) {\n <nrcl-filter-container class=\"summary\"\n label=\"Showing Rows\"\n >\n <span>{{ firstRow }} to {{ lastRow }} <small>(of {{ rowCount }})</small></span>\n </nrcl-filter-container>\n}\n@else {\n <div class=\"no-rows\">{{ noRowsMessage }}</div>\n}\n\n@if ( hasRows ) {\n <div class=\"pagination\">\n <pagination-controls \n [id]=\"paginationId\" \n [maxSize]=\"paginationMaxSize\"\n [responsive]=\"false\"\n [directionLinks]=\"true\"\n previousLabel=\"\"\n nextLabel=\"\"\n [autoHide]=\"false\"\n (pageChange)=\"onPageNumberChange( $event )\"\n ></pagination-controls>\n </div>\n}\n\n@if ( hasRows && showPageSize ) {\n <nrcl-filter-select class=\"page-size\"\n label=\"Page Size\"\n [value]=\"[ pageSize ]\"\n [options]=\"pageSizeOptions\"\n (valueChange)=\"onPageSizeChange( $event[ 0 ] )\"\n selectMax=\"1\"\n [clear]=\"false\"\n [filter]=\"false\"\n placeholder=\"Select...\"\n ></nrcl-filter-select>\n}\n", styles: [":host{display:flex;align-items:center;font-family:var(--nrcl-font-family);position:relative;min-height:40px}:host .summary{--nrcl-filter-container-width: 180px;position:absolute;top:0;left:0;bottom:0;white-space:nowrap}:host .no-rows{font-size:var(--nrcl-font-size);grid-column:span 2}:host .pagination{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .pagination ::ng-deep .ngx-pagination{text-align:center;padding-inline-start:0;margin:0}:host .pagination ::ng-deep .ngx-pagination li{border-left:#c6c8cb solid 1px;border-top:#c6c8cb solid 1px;border-bottom:#c6c8cb solid 1px;border-right:none;vertical-align:middle;margin:0;height:35px;padding:0}:host .pagination ::ng-deep .ngx-pagination li a{padding:0;line-height:35px;text-decoration:none}:host .pagination ::ng-deep .ngx-pagination li>*>span{padding:0 15px;line-height:35px}:host .pagination ::ng-deep .ngx-pagination li.current{color:#036;font-weight:700;background:#fff;border:2px solid #003366;border-radius:2px}:host .pagination ::ng-deep .ngx-pagination li.disabled span{display:none}:host .pagination ::ng-deep .ngx-pagination li:first-child{border-left:none;border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination li:last-child{border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination a:hover,:host .pagination ::ng-deep .ngx-pagination button:hover{color:#131313;background-color:#ffd3a0}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{font-family:Material Symbols Outlined;vertical-align:middle;display:inline;font-size:25px;margin:0;line-height:40px;padding:0 10px}:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"arrow_back\"}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"arrow_forward\"}:host .page-size{--nrcl-filter-select-width: 180px;position:absolute;top:0;right:0;bottom:0;display:flex;gap:8px;align-items:center;pointer-events:auto}:host.width-restrictive{display:grid;grid-template-columns:1fr 1fr;gap:8px}:host.width-restrictive .summary{--nrcl-filter-container-width: auto;position:static;grid-column:1;grid-row:1}:host.width-restrictive .page-size{--nrcl-filter-select-width: auto;position:static;grid-column:2;grid-row:1}:host.width-restrictive .pagination{position:static;grid-column:1/span 2;grid-row:2}\n"], dependencies: [{ kind: "component", type: i1.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i2.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint", "wide"] }, { kind: "component", type: i3.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear", "filter", "filterCharsMin", "optionFormatter", "overlayClass", "wide"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RowListPaginationComponent, selector: "nrcl-row-list-pagination", inputs: { paginationId: "paginationId", pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", pageNumber: "pageNumber", rowCount: "rowCount", showPageSize: "showPageSize", noRowsMessage: "noRowsMessage" }, outputs: { pageSizeChange: "pageSizeChange", pageNumberChange: "pageNumberChange" }, host: { listeners: { "window:resize": "onResize($event)" }, properties: { "class.width-sufficient": "componentWidth == 'sufficient'", "class.width-tight": "componentWidth == 'tight'", "class.width-restrictive": "componentWidth == 'restrictive'" } }, usesInheritance: true, ngImport: i0, template: "@if ( hasRows ) {\n <nrcl-filter-container class=\"summary\"\n label=\"Showing Rows\"\n >\n <span>{{ firstRow }} to {{ lastRow }} <small>(of {{ rowCount }})</small></span>\n </nrcl-filter-container>\n}\n@else {\n <div class=\"no-rows\">{{ noRowsMessage }}</div>\n}\n\n@if ( hasRows ) {\n <div class=\"pagination\">\n <pagination-controls \n [id]=\"paginationId\" \n [maxSize]=\"paginationMaxSize\"\n [responsive]=\"false\"\n [directionLinks]=\"true\"\n previousLabel=\"\"\n nextLabel=\"\"\n [autoHide]=\"false\"\n (pageChange)=\"onPageNumberChange( $event )\"\n ></pagination-controls>\n </div>\n}\n\n@if ( hasRows && showPageSize ) {\n <nrcl-filter-select class=\"page-size\"\n label=\"Page Size\"\n [value]=\"[ pageSize ]\"\n [options]=\"pageSizeOptions\"\n (valueChange)=\"onPageSizeChange( $event[ 0 ] )\"\n selectMax=\"1\"\n [clear]=\"false\"\n [filter]=\"false\"\n placeholder=\"Select...\"\n ></nrcl-filter-select>\n}\n", styles: [":host{display:flex;align-items:center;font-family:var(--nrcl-font-family);position:relative;min-height:40px}:host .summary{--nrcl-filter-container-width: 180px;position:absolute;top:0;left:0;bottom:0;white-space:nowrap}:host .no-rows{font-size:var(--nrcl-font-size);grid-column:span 2}:host .pagination{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .pagination ::ng-deep .ngx-pagination{text-align:center;padding-inline-start:0;margin:0}:host .pagination ::ng-deep .ngx-pagination li{border-left:#c6c8cb solid 1px;border-top:#c6c8cb solid 1px;border-bottom:#c6c8cb solid 1px;border-right:none;vertical-align:middle;margin:0;height:35px;padding:0}:host .pagination ::ng-deep .ngx-pagination li a{padding:0;line-height:35px;text-decoration:none}:host .pagination ::ng-deep .ngx-pagination li>*>span{padding:0 15px;line-height:35px}:host .pagination ::ng-deep .ngx-pagination li.current{color:#036;font-weight:700;background:#fff;border:2px solid #003366;border-radius:2px}:host .pagination ::ng-deep .ngx-pagination li.disabled span{display:none}:host .pagination ::ng-deep .ngx-pagination li:first-child{border-left:none;border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination li:last-child{border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination a:hover,:host .pagination ::ng-deep .ngx-pagination button:hover{color:#131313;background-color:#ffd3a0}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{font-family:Material Symbols Outlined;vertical-align:middle;display:inline;font-size:25px;margin:0;line-height:40px;padding:0 10px}:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"arrow_back\"}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"arrow_forward\"}:host .page-size{--nrcl-filter-select-width: 180px;position:absolute;top:0;right:0;bottom:0;display:flex;gap:8px;align-items:center;pointer-events:auto}:host.width-restrictive{display:grid;grid-template-columns:1fr 1fr;gap:8px}:host.width-restrictive .summary{--nrcl-filter-container-width: auto;position:static;grid-column:1;grid-row:1}:host.width-restrictive .page-size{--nrcl-filter-select-width: auto;position:static;grid-column:2;grid-row:1}:host.width-restrictive .pagination{position:static;grid-column:1/span 2;grid-row:2}\n"], dependencies: [{ kind: "component", type: i1.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i2.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint", "wide"] }, { kind: "component", type: i3.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear", "filter", "filterCharsMin", "optionFormatter", "overlayClass", "wide", "filterCharsMinMessage"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
81
81
|
}
|
|
82
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListPaginationComponent, decorators: [{
|
|
83
83
|
type: Component,
|
|
@@ -29,7 +29,7 @@ export class RowListSortingComponent extends NrclBase {
|
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListSortingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowListSortingComponent, selector: "nrcl-row-list-sorting", inputs: { sortColumn: "sortColumn", sortColumnOptions: "sortColumnOptions", sortDirection: "sortDirection" }, outputs: { sortChange: "sortChange" }, usesInheritance: true, ngImport: i0, template: "<nrcl-filter-select class=\"sort-order\" \n label=\"Sort By\"\n [value]=\"wrapFilterValue( sortColumn )\"\n [options]=\"sortColumnOptions\"\n (valueChange)=\"onSortColumnChange( unwrapFilterValue( $event ) )\"\n selectMax=\"1\" \n></nrcl-filter-select>\n\n<nrcl-filter-container class=\"sort-direction\" \n label=\"Sort Order\"\n>\n <mat-radio-group\n [(ngModel)]=\"sortDirection\" \n (ngModelChange)=\"onSortDirectionChange()\"\n [disabled]=\"!sortColumn\"\n >\n <mat-radio-button aria-label=\"Sort A to Z\" value=\"asc\">A → Z</mat-radio-button>\n <mat-radio-button aria-label=\"Sort Z to A\" value=\"desc\">Z → A</mat-radio-button>\n </mat-radio-group>\n</nrcl-filter-container>\n", styles: [":host{gap:8px;width:100%;display:grid;grid-template-columns:1fr 1fr}:host .sort-order{--nrcl-filter-select-width: auto;grid-column:1}:host .sort-direction{--nrcl-filter-container-width: auto;grid-column:2}:host .sort-direction ::ng-deep .content .mat-mdc-radio-group{justify-content:space-evenly;width:100%}\n"], dependencies: [{ 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: "directive", type: i2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i3.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint", "wide"] }, { kind: "component", type: i4.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear", "filter", "filterCharsMin", "optionFormatter", "overlayClass", "wide"], outputs: ["valueChange"] }] }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowListSortingComponent, selector: "nrcl-row-list-sorting", inputs: { sortColumn: "sortColumn", sortColumnOptions: "sortColumnOptions", sortDirection: "sortDirection" }, outputs: { sortChange: "sortChange" }, usesInheritance: true, ngImport: i0, template: "<nrcl-filter-select class=\"sort-order\" \n label=\"Sort By\"\n [value]=\"wrapFilterValue( sortColumn )\"\n [options]=\"sortColumnOptions\"\n (valueChange)=\"onSortColumnChange( unwrapFilterValue( $event ) )\"\n selectMax=\"1\" \n></nrcl-filter-select>\n\n<nrcl-filter-container class=\"sort-direction\" \n label=\"Sort Order\"\n>\n <mat-radio-group\n [(ngModel)]=\"sortDirection\" \n (ngModelChange)=\"onSortDirectionChange()\"\n [disabled]=\"!sortColumn\"\n >\n <mat-radio-button aria-label=\"Sort A to Z\" value=\"asc\">A → Z</mat-radio-button>\n <mat-radio-button aria-label=\"Sort Z to A\" value=\"desc\">Z → A</mat-radio-button>\n </mat-radio-group>\n</nrcl-filter-container>\n", styles: [":host{gap:8px;width:100%;display:grid;grid-template-columns:1fr 1fr}:host .sort-order{--nrcl-filter-select-width: auto;grid-column:1}:host .sort-direction{--nrcl-filter-container-width: auto;grid-column:2}:host .sort-direction ::ng-deep .content .mat-mdc-radio-group{justify-content:space-evenly;width:100%}\n"], dependencies: [{ 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: "directive", type: i2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i3.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint", "wide"] }, { kind: "component", type: i4.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear", "filter", "filterCharsMin", "optionFormatter", "overlayClass", "wide", "filterCharsMinMessage"], outputs: ["valueChange"] }] }); }
|
|
33
33
|
}
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListSortingComponent, decorators: [{
|
|
35
35
|
type: Component,
|