@messaia/cdk 17.1.5-rc01 → 17.1.5-rc02
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.
|
@@ -58,6 +58,12 @@ export class VdSelectComponent extends AbstractSelectFormField {
|
|
|
58
58
|
this.triggerCssClass = 'chip';
|
|
59
59
|
this.stateChanges.next();
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Gets the display values of the selected options for the trigger.
|
|
63
|
+
*
|
|
64
|
+
* @returns The display values of the selected options
|
|
65
|
+
*/
|
|
66
|
+
get triggerValues() { return this.selectedOptions?.map(option => option[this.optionValueProperty]); }
|
|
61
67
|
/**
|
|
62
68
|
* Retrieves the currently selected options from the filtered options.
|
|
63
69
|
* If multiple options are selected, returns them as an array.
|
|
@@ -153,26 +159,12 @@ export class VdSelectComponent extends AbstractSelectFormField {
|
|
|
153
159
|
return fieldValue?.toLowerCase().includes(searchText.toLowerCase());
|
|
154
160
|
});
|
|
155
161
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Gets the display values of the selected options for the trigger.
|
|
158
|
-
*
|
|
159
|
-
* @param options The selected options
|
|
160
|
-
* @returns The display values of the selected options
|
|
161
|
-
*/
|
|
162
|
-
getTriggerValues(options) {
|
|
163
|
-
if (Array.isArray(options)) {
|
|
164
|
-
return options.map(x => x.viewValue);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
return options?.viewValue;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
162
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: VdSelectComponent, deps: [{ token: i0.Injector }, { token: i1.NgControl, optional: true, self: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2.ErrorStateMatcher }, { token: i3.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: VdSelectComponent, selector: "vd-select", inputs: { triggerCssClass: "triggerCssClass", triggerMode: "triggerMode" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"matIconKey || svgIconKey\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i5.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }] });
|
|
163
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: VdSelectComponent, selector: "vd-select", inputs: { triggerCssClass: "triggerCssClass", triggerMode: "triggerMode" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"(matIconKey || svgIconKey) && !triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i5.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }] });
|
|
172
164
|
}
|
|
173
165
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: VdSelectComponent, decorators: [{
|
|
174
166
|
type: Component,
|
|
175
|
-
args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger:
|
|
167
|
+
args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"(matIconKey || svgIconKey) && !triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"] }]
|
|
176
168
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
177
169
|
type: Optional
|
|
178
170
|
}, {
|
|
@@ -198,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
198
190
|
}], triggerMode: [{
|
|
199
191
|
type: Input
|
|
200
192
|
}] } });
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7O0FBUXJGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx1QkFBNEI7SUFtR3ZEO0lBakdYOztPQUVHO0lBQ08sZ0JBQWdCLENBQVU7SUFFcEM7O09BRUc7SUFDTyxZQUFZLEdBQVcsTUFBTSxDQUFDO0lBRXhDOztPQUVHO0lBRUksY0FBYyxDQUEyQjtJQUVo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bnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciwgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgQWJzdHJhY3RTZWxlY3RGb3JtRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy9oZWxwZXJzL2Fic3RyYWN0LXNlbGVjdC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZkU2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92ZC1zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFZkU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmQtc2VsZWN0LXRyaWdnZXIuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAndmQtc2VsZWN0JyxcclxuXHR0ZW1wbGF0ZVVybDogJ3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJ3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxyXG5cdHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFZkU2VsZWN0Q29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0U2VsZWN0Rm9ybUZpZWxkPGFueT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcblx0LyoqXHJcblx0ICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHRyaWdnZXIgZWxlbWVudC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX3RyaWdnZXJDc3NDbGFzcz86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogTW9kZSBvZiB0aGUgdHJpZ2dlciwgZGVmYXVsdCBpcyAnY2hpcCcuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIF90cmlnZ2VyTW9kZTogc3RyaW5nID0gJ2NoaXAnO1xyXG5cclxuXHQvKipcclxuXHQgKiBUZW1wbGF0ZSBmb3IgcmVuZGVyaW5nIG9wdGlvbnMuXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSlcclxuXHRwdWJsaWMgb3B0aW9uVGVtcGxhdGU/OiBWZFNlbGVjdE9wdGlvbkRpcmVjdGl2ZTtcclxuXHJcblx0LyoqXHJcblx0ICogVGVtcGxhdGUgZm9yIHJlbmRlcmluZyB0aGUgdHJpZ2dlci5cclxuXHQgKi9cclxuXHRAQ29udGVudENoaWxkKFZkU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZSlcclxuXHRwdWJsaWMgdHJpZ2dlclRlbXBsYXRlPzogVmRTZWxlY3RUcmlnZ2VyRGlyZWN0aXZlO1xyXG5cclxuXHQvKiogXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBNYXRTZWxlY3QgZWxlbWVudC5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFNlbGVjdCwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIHNlbGVjdEVsPzogTWF0U2VsZWN0O1xyXG5cclxuXHQvKiogXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBmaWx0ZXIgaW5wdXQgZWxlbWVudC5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHB1YmxpYyBmaWx0ZXJJbnB1dD86IEVsZW1lbnRSZWY7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IHRyaWdnZXJDc3NDbGFzcygpIHsgcmV0dXJuIHRoaXMuX3RyaWdnZXJDc3NDbGFzczsgfVxyXG5cdHB1YmxpYyBzZXQgdHJpZ2dlckNzc0NsYXNzKHRyaWdnZXJDc3NDbGFzcykge1xyXG5cdFx0dGhpcy5fdHJpZ2dlckNzc0NsYXNzID0gdHJpZ2dlckNzc0NsYXNzO1xyXG5cdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTW9kZSBvZiB0aGUgdHJpZ2dlciwgZGVmYXVsdCBpcyAnY2hpcCcuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IHRyaWdnZXJNb2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl90cmlnZ2VyTW9kZTsgfVxyXG5cdHB1YmxpYyBzZXQgdHJpZ2dlck1vZGUodHJpZ2dlck1vZGU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fdHJpZ2dlck1vZGUgPSB0cmlnZ2VyTW9kZTtcclxuXHRcdHRoaXMudHJpZ2dlckNzc0NsYXNzID0gJ2NoaXAnO1xyXG5cdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9ucyBmcm9tIHRoZSBmaWx0ZXJlZCBvcHRpb25zLlxyXG5cdCAqIElmIG11bHRpcGxlIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCByZXR1cm5zIHRoZW0gYXMgYW4gYXJyYXkuXHJcblx0ICogSWYgYSBzaW5nbGUgb3B0aW9uIGlzIHNlbGVjdGVkLCByZXR1cm5zIGl0IGFzIGFuIGFycmF5IHdpdGggb25lIGVsZW1lbnQuXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgZmlsdGVyZWQgb3B0aW9ucy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0IHNlbGVjdGVkT3B0aW9ucygpOiBhbnlbXSB7XHJcblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0RWw/LnNlbGVjdGVkO1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/IHNlbGVjdGVkLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKSA6IHNlbGVjdGVkID8gW3NlbGVjdGVkLnZhbHVlXSA6IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucykge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKChmaWx0ZXJlZE9wdGlvbjogYW55KSA9PlxyXG5cdFx0XHRcdHNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKGZpbHRlcmVkT3B0aW9uW3RoaXMub3B0aW9uVmFsdWVQcm9wZXJ0eV0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtdO1xyXG5cdH1cclxuXHJcblx0LyoqIFxyXG5cdCAqIENoZWNrcyBpZiB0aGUgc2VsZWN0IGVsZW1lbnQgaXMgZW1wdHkuXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc2VsZWN0IGVsZW1lbnQgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3JlYWRvbmx5ID8gIXRoaXMuY3VycmVudFZhbHVlIDogIXRoaXMuc2VsZWN0RWw/Ll9zZWxlY3Rpb25Nb2RlbCB8fCB0aGlzLnNlbGVjdEVsPy5fc2VsZWN0aW9uTW9kZWw/LmlzRW1wdHkoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgdGhlIFZkU2VsZWN0Q29tcG9uZW50LlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBpbmplY3RvciBEZXBlbmRlbmN5IGluamVjdG9yXHJcblx0ICogQHBhcmFtIG5nQ29udHJvbCBBbmd1bGFyIGZvcm0gY29udHJvbCBkaXJlY3RpdmVcclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybSBQYXJlbnQgZm9ybVxyXG5cdCAqIEBwYXJhbSBwYXJlbnRGb3JtR3JvdXAgUGFyZW50IGZvcm0gZ3JvdXBcclxuXHQgKiBAcGFyYW0gZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyIERlZmF1bHQgZXJyb3Igc3RhdGUgbWF0Y2hlclxyXG5cdCAqIEBwYXJhbSBmb2N1c01vbml0b3IgRm9jdXMgbW9uaXRvciBmb3IgbWFuYWdpbmcgZm9jdXMgc3RhdGVcclxuXHQgKiBAcGFyYW0gZWxlbWVudFJlZiBSZWZlcmVuY2UgdG8gdGhlIGNvbXBvbmVudCBlbGVtZW50XHJcblx0ICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIENoYW5nZSBkZXRlY3RvciByZWZlcmVuY2VcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXHJcblx0XHRAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG5cdFx0QE9wdGlvbmFsKCkgcGFyZW50Rm9ybTogTmdGb3JtLFxyXG5cdFx0QE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcblx0XHRkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG5cdFx0Zm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcblx0XHRlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG5cdFx0Y2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcblx0KSB7XHJcblx0XHRzdXBlcihcInZkLXNlbGVjdFwiLCBpbmplY3RvciwgbmdDb250cm9sLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciwgZm9jdXNNb25pdG9yLCBlbGVtZW50UmVmLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBBbmd1bGFyIGhhcyBpbml0aWFsaXplZCB0aGUgY29tcG9uZW50J3Mgdmlldy5cclxuXHQgKiBTZXRzIHVwIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGZvY3VzIHRoZSBmaWx0ZXIgaW5wdXQgd2hlbiB0aGUgc2VsZWN0IGVsZW1lbnQgaXMgb3BlbmVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VsZWN0RWw/Lm9wZW5lZENoYW5nZT8uc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRpZiAoeCAmJiB0aGlzLmZpbHRlcmFibGUpIHtcclxuXHRcdFx0XHR0aGlzLmZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdyaXRlcyB0aGUgdmFsdWUgdG8gdGhlIGNvbXBvbmVudC4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlblxyXG5cdCAqL1xyXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG5cdFx0c3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKCF0aGlzLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0RWw/LndyaXRlVmFsdWUobnVsbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGZvY3VzIG9uIHRoZSBzZWxlY3QgZWxlbWVudCBhbmQgb3BlbnMgdGhlIGRyb3Bkb3duLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VsZWN0RWw/LmZvY3VzKCk7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5vcGVuKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIHRoZSBsYXVuY2ggYnV0dG9uIGNsaWNrIGV2ZW50LlxyXG5cdCAqIEVtaXRzIHRoZSBzZWxlY3RlZCBvcHRpb25zIHRocm91Z2ggdGhlIG9uTGF1bmNoIGV2ZW50IGVtaXR0ZXIuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBlbWl0dGVkXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWU6IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcclxuXHRcdFx0dGhpcy5vbkxhdW5jaC5lbWl0KHRoaXMub3B0aW9ucy5maWx0ZXIoKHg6IGFueSkgPT4gKHZhbHVlIHx8IFtdKS5pbmNsdWRlcyh4W3RoaXMub3B0aW9uVmFsdWVQcm9wZXJ0eV0pKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLm9uTGF1bmNoLmVtaXQodGhpcy5vcHRpb25zLmZpbmQoKHg6IGFueSkgPT4geFt0aGlzLm9wdGlvblZhbHVlUHJvcGVydHldID09IHZhbHVlKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIHRoZSBmaWx0ZXIgZXZlbnQgdG8gZmlsdGVyIHRoZSBvcHRpb25zIGJhc2VkIG9uIHRoZSBpbnB1dC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gJGV2ZW50IFRoZSBmaWx0ZXIgZXZlbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlRmlsdGVyKCRldmVudD86IEV2ZW50KTogdm9pZCB7XHJcblx0XHRjb25zdCBzZWFyY2hUZXh0OiBzdHJpbmcgPSAoJGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlID8/ICcnO1xyXG5cdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuc2VhcmNoRmllbGQgPyB0aGlzLnNlYXJjaEZpZWxkKHgpIDogeFt0aGlzLm9wdGlvblRleHRQcm9wZXJ0eV07XHJcblx0XHRcdHJldHVybiBmaWVsZFZhbHVlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGRpc3BsYXkgdmFsdWVzIG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGZvciB0aGUgdHJpZ2dlci5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gb3B0aW9ucyBUaGUgc2VsZWN0ZWQgb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIFRoZSBkaXNwbGF5IHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRUcmlnZ2VyVmFsdWVzKG9wdGlvbnM6IE1hdE9wdGlvbiB8IE1hdE9wdGlvbltdKTogYW55IHtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zLm1hcCh4ID0+IHgudmlld1ZhbHVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zPy52aWV3VmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG59IiwiPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgaTE4bi1wbGFjZWhvbGRlciBbKG5nTW9kZWwpXT1cInZhbHVlXCIgI3NlbGVjdD1cIm1hdFNlbGVjdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIiBbaGlkZGVuXT1cInJlYWRvbmx5XCIgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVXaXRoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgZmxleD5cclxuICAgIDwhLS0gI3JlZ2lvbiBGaWx0ZXIgaW5wdXQgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyYWJsZVwiIGNsYXNzPVwidmQtc2VsZWN0LWZpbHRlci13cmFwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZkLXNlbGVjdC1maWx0ZXItaW5uZXJcIj5cclxuICAgICAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uIGRpc2FibGVkICpuZ0lmPVwiIWZpbHRlcklucHV0LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDxhIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImZpbHRlcklucHV0LnZhbHVlXCIgKGNsaWNrKT1cImZpbHRlcklucHV0LnZhbHVlID0gJyc7IGhhbmRsZUZpbHRlcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyLi4uXCIgY2xhc3M9XCJ2ZC1zZWxlY3QtZmlsdGVyIG1hdC1pbnB1dC1lbGVtZW50XCIgKGtleXVwKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gVHJpZ2dlciBmb3IgbGF1bmNoIGJ1dHRvbiAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIob25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoPz8wKSA+IDBcIiBbY2xhc3NdPVwidHJpZ2dlckNzc0NsYXNzXCI+XHJcbiAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnM7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWF0SWNvbktleSAmJiAhc3ZnSWNvbktleVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+e3tvcHRpb25bbWF0SWNvbktleV19fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ZnSWNvbktleSAmJiAhbWF0SWNvbktleVwiIFtzdmdJY29uXT1cIm9wdGlvbltzdmdJY29uS2V5XVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbltvcHRpb25UZXh0UHJvcGVydHldfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmQtc2VsZWN0LWxhdW5jaFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWUpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBDdXN0b20gdHJpZ2dlciB0ZW1wbGF0ZSAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIhb25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoICYmIHRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbY2xhc3NdPVwidHJpZ2dlckNzc0NsYXNzXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWYhXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJpZ2dlcjogZ2V0VHJpZ2dlclZhbHVlcyhzZWxlY3Quc2VsZWN0ZWQpIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIE9wdGlvbiB0ZW1wbGF0ZSBhcyB0cmlnZ2VyIC0tPlxyXG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGggJiYgIXRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiYgb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW2NsYXNzXT1cInRyaWdnZXJDc3NDbGFzc1wiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0cmlnZ2VyOiBnZXRUcmlnZ2VyVmFsdWVzKHNlbGVjdC5zZWxlY3RlZCkgfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gVHJpZ2dlciBmb3IgaWNvbnMgLS0+XHJcbiAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPVwibWF0SWNvbktleSB8fCBzdmdJY29uS2V5XCI+XHJcbiAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnM7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWF0SWNvbktleSAmJiAhc3ZnSWNvbktleVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+e3tvcHRpb25bbWF0SWNvbktleV19fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ZnSWNvbktleSAmJiAhbWF0SWNvbktleVwiIFtzdmdJY29uXT1cIm9wdGlvbltzdmdJY29uS2V5XVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbltvcHRpb25UZXh0UHJvcGVydHldfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gRGVmYXVsdCBvcHRpb24gLS0+XHJcbiAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInRjLWdyZXktNTAwXCIgKm5nSWY9XCIhbXVsdGlwbGUgJiYgZGVmYXVsdE9wdGlvblwiIGkxOG49XCJAQHBsZWFzZVNlbGVjdFwiPi0tLSBQbGVhc2UgU2VsZWN0IC0tLTwvbWF0LW9wdGlvbj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gT3B0aW9ucyAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIGxldC1maXJzdD1cImZpcnN0XCIgbmdGb3IgW25nRm9yT2ZdPVwiZmlsdGVyZWRPcHRpb25zXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm1hcHBlciA/IG9wdGlvbiA6IG9wdGlvbltvcHRpb25WYWx1ZVByb3BlcnR5XVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtYXRJY29uS2V5ICYmICFzdmdJY29uS2V5XCIgW2ZvbnRTZXRdPVwiZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCdcIj57e29wdGlvblttYXRJY29uS2V5XX19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ZnSWNvbktleSAmJiAhbWF0SWNvbktleVwiIFtzdmdJY29uXT1cIm9wdGlvbltzdmdJY29uS2V5XVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e29wdGlvbltvcHRpb25UZXh0UHJvcGVydHldLCBzZWxlY3QsIG9wdGlvbiB7b3B0aW9ufSBvdGhlciB7e3tvcHRpb25bb3B0aW9uVGV4dFByb3BlcnR5XX19fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IG9wdGlvbiB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG48L21hdC1zZWxlY3Q+XHJcblxyXG48IS0tICNyZWdpb24gUmVhZCBvbmx5IHZhbHVlIC0tPlxyXG48ZGl2ICpuZ0lmPVwicmVhZG9ubHlcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50VmFsdWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVhZG9ubHktdmFsdWVcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmICF0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtYXRJY29uS2V5ICYmICFzdmdJY29uS2V5XCIgW2ZvbnRTZXRdPVwiZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCdcIj57e2N1cnJlbnRWYWx1ZVttYXRJY29uS2V5XX19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInN2Z0ljb25LZXkgJiYgIW1hdEljb25LZXlcIiBbc3ZnSWNvbl09XCJjdXJyZW50VmFsdWVbc3ZnSWNvbktleV1cIiBbZm9udFNldF09XCJmb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mbmJzcDsmbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpMThuPVwiQEBzZWxlY3Rpb25cIj57Y3VycmVudFZhbHVlW29wdGlvblRleHRQcm9wZXJ0eV0sIHNlbGVjdCwgb3B0aW9uIHtvcHRpb259IG90aGVyIHt7e2N1cnJlbnRWYWx1ZVtvcHRpb25UZXh0UHJvcGVydHldfX19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+LCZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZiFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0cmlnZ2VyOiBjdXJyZW50VmFsdWUgfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiAmJiAhdHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZiFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IGN1cnJlbnRWYWx1ZSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIob25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoPz8wKSA+IDBcIiBjbGFzcz1cInZkLXNlbGVjdC1sYXVuY2gtcmVhZG9ubHlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVMYXVuY2hDbGlja2VkKHZhbHVlKVwiPmxhdW5jaDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhY3VycmVudFZhbHVlXCI+Jm5ic3A7PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tICNlbmRyZWdpb24gLS0+Il19
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL3NlbGVjdC9jb21wb25lbnRzL3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7O0FBUXJGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx1QkFBNEI7SUEwR3ZEO0lBeEdYOztPQUVHO0lBQ08sZ0JBQWdCLENBQVU7SUFFcEM7O09BRUc7SUFDTyxZQUFZLEdBQVcsTUFBTSxDQUFDO0lBRXhDOztPQUVHO0lBRUksY0FBYyxDQUEyQjtJQUVo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LENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDckQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7MEhBbExXLGlCQUFpQjs4R0FBakIsaUJBQWlCLGdIQUZsQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLHNFQWlCL0QsdUJBQXVCLGtGQU12Qix3QkFBd0IsMEZBTTNCLFNBQVMsb0tDM0NyQiwrdFBBNEdtQjs7MkZENUZOLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDQyxXQUFXLGFBR1YsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLG1CQUFtQixFQUFFLENBQUM7OzBCQTZHM0UsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUNSLFFBQVE7NkpBN0ZILGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsdUJBQXVCO2dCQU85QixlQUFlO3NCQURyQixZQUFZO3VCQUFDLHdCQUF3QjtnQkFPL0IsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT2hDLFdBQVc7c0JBRGpCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPaEMsZUFBZTtzQkFEekIsS0FBSztnQkFXSyxXQUFXO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IEFic3RyYWN0U2VsZWN0Rm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvaGVscGVycy9hYnN0cmFjdC1zZWxlY3QtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWZFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmQtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBWZFNlbGVjdFRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3ZkLXNlbGVjdC10cmlnZ2VyLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3ZkLXNlbGVjdCcsXHJcblx0dGVtcGxhdGVVcmw6ICdzZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWydzZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuXHRwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBWZFNlbGVjdENvbXBvbmVudCB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdEZvcm1GaWVsZDxhbnk+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIF90cmlnZ2VyQ3NzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1vZGUgb2YgdGhlIHRyaWdnZXIsIGRlZmF1bHQgaXMgJ2NoaXAnLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBfdHJpZ2dlck1vZGU6IHN0cmluZyA9ICdjaGlwJztcclxuXHJcblx0LyoqXHJcblx0ICogVGVtcGxhdGUgZm9yIHJlbmRlcmluZyBvcHRpb25zLlxyXG5cdCAqL1xyXG5cdEBDb250ZW50Q2hpbGQoVmRTZWxlY3RPcHRpb25EaXJlY3RpdmUpXHJcblx0cHVibGljIG9wdGlvblRlbXBsYXRlPzogVmRTZWxlY3RPcHRpb25EaXJlY3RpdmU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRlbXBsYXRlIGZvciByZW5kZXJpbmcgdGhlIHRyaWdnZXIuXHJcblx0ICovXHJcblx0QENvbnRlbnRDaGlsZChWZFNlbGVjdFRyaWdnZXJEaXJlY3RpdmUpXHJcblx0cHVibGljIHRyaWdnZXJUZW1wbGF0ZT86IFZkU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZTtcclxuXHJcblx0LyoqIFxyXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUgTWF0U2VsZWN0IGVsZW1lbnQuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTZWxlY3QsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHB1YmxpYyBzZWxlY3RFbD86IE1hdFNlbGVjdDtcclxuXHJcblx0LyoqIFxyXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUgZmlsdGVyIGlucHV0IGVsZW1lbnQuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgnZmlsdGVySW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwdWJsaWMgZmlsdGVySW5wdXQ/OiBFbGVtZW50UmVmO1xyXG5cclxuXHQvKipcclxuXHQgKiBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciBlbGVtZW50LlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCB0cmlnZ2VyQ3NzQ2xhc3MoKSB7IHJldHVybiB0aGlzLl90cmlnZ2VyQ3NzQ2xhc3M7IH1cclxuXHRwdWJsaWMgc2V0IHRyaWdnZXJDc3NDbGFzcyh0cmlnZ2VyQ3NzQ2xhc3MpIHtcclxuXHRcdHRoaXMuX3RyaWdnZXJDc3NDbGFzcyA9IHRyaWdnZXJDc3NDbGFzcztcclxuXHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1vZGUgb2YgdGhlIHRyaWdnZXIsIGRlZmF1bHQgaXMgJ2NoaXAnLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCB0cmlnZ2VyTW9kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdHJpZ2dlck1vZGU7IH1cclxuXHRwdWJsaWMgc2V0IHRyaWdnZXJNb2RlKHRyaWdnZXJNb2RlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX3RyaWdnZXJNb2RlID0gdHJpZ2dlck1vZGU7XHJcblx0XHR0aGlzLnRyaWdnZXJDc3NDbGFzcyA9ICdjaGlwJztcclxuXHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGRpc3BsYXkgdmFsdWVzIG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGZvciB0aGUgdHJpZ2dlci5cclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBUaGUgZGlzcGxheSB2YWx1ZXMgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0IHRyaWdnZXJWYWx1ZXMoKTogYW55W10geyByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbnM/Lm1hcChvcHRpb24gPT4gb3B0aW9uW3RoaXMub3B0aW9uVmFsdWVQcm9wZXJ0eV0pOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbnMgZnJvbSB0aGUgZmlsdGVyZWQgb3B0aW9ucy5cclxuXHQgKiBJZiBtdWx0aXBsZSBvcHRpb25zIGFyZSBzZWxlY3RlZCwgcmV0dXJucyB0aGVtIGFzIGFuIGFycmF5LlxyXG5cdCAqIElmIGEgc2luZ2xlIG9wdGlvbiBpcyBzZWxlY3RlZCwgcmV0dXJucyBpdCBhcyBhbiBhcnJheSB3aXRoIG9uZSBlbGVtZW50LlxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIGZpbHRlcmVkIG9wdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIGdldCBzZWxlY3RlZE9wdGlvbnMoKTogYW55W10ge1xyXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEVsPy5zZWxlY3RlZDtcclxuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyBzZWxlY3RlZC5tYXAob3B0aW9uID0+IG9wdGlvbi52YWx1ZSkgOiBzZWxlY3RlZCA/IFtzZWxlY3RlZC52YWx1ZV0gOiBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbHRlcigoZmlsdGVyZWRPcHRpb246IGFueSkgPT5cclxuXHRcdFx0XHRzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhmaWx0ZXJlZE9wdGlvblt0aGlzLm9wdGlvblZhbHVlUHJvcGVydHldKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbXTtcclxuXHR9XHJcblxyXG5cdC8qKiBcclxuXHQgKiBDaGVja3MgaWYgdGhlIHNlbGVjdCBlbGVtZW50IGlzIGVtcHR5LlxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdCBlbGVtZW50IGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuXHJcblx0ICovXHJcblx0cHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9yZWFkb25seSA/ICF0aGlzLmN1cnJlbnRWYWx1ZSA6ICF0aGlzLnNlbGVjdEVsPy5fc2VsZWN0aW9uTW9kZWwgfHwgdGhpcy5zZWxlY3RFbD8uX3NlbGVjdGlvbk1vZGVsPy5pc0VtcHR5KCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBWZFNlbGVjdENvbXBvbmVudC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaW5qZWN0b3IgRGVwZW5kZW5jeSBpbmplY3RvclxyXG5cdCAqIEBwYXJhbSBuZ0NvbnRyb2wgQW5ndWxhciBmb3JtIGNvbnRyb2wgZGlyZWN0aXZlXHJcblx0ICogQHBhcmFtIHBhcmVudEZvcm0gUGFyZW50IGZvcm1cclxuXHQgKiBAcGFyYW0gcGFyZW50Rm9ybUdyb3VwIFBhcmVudCBmb3JtIGdyb3VwXHJcblx0ICogQHBhcmFtIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciBEZWZhdWx0IGVycm9yIHN0YXRlIG1hdGNoZXJcclxuXHQgKiBAcGFyYW0gZm9jdXNNb25pdG9yIEZvY3VzIG1vbml0b3IgZm9yIG1hbmFnaW5nIGZvY3VzIHN0YXRlXHJcblx0ICogQHBhcmFtIGVsZW1lbnRSZWYgUmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgZWxlbWVudFxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBDaGFuZ2UgZGV0ZWN0b3IgcmVmZXJlbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxyXG5cdFx0QE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuXHRcdEBPcHRpb25hbCgpIHBhcmVudEZvcm06IE5nRm9ybSxcclxuXHRcdEBPcHRpb25hbCgpIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG5cdFx0ZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcclxuXHRcdGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxyXG5cdFx0ZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuXHRcdGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdFx0c3VwZXIoXCJ2ZC1zZWxlY3RcIiwgaW5qZWN0b3IsIG5nQ29udHJvbCwgcGFyZW50Rm9ybSwgcGFyZW50Rm9ybUdyb3VwLCBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsIGZvY3VzTW9uaXRvciwgZWxlbWVudFJlZiwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgQW5ndWxhciBoYXMgaW5pdGlhbGl6ZWQgdGhlIGNvbXBvbmVudCdzIHZpZXcuXHJcblx0ICogU2V0cyB1cCBhbiBldmVudCBsaXN0ZW5lciB0byBmb2N1cyB0aGUgZmlsdGVyIGlucHV0IHdoZW4gdGhlIHNlbGVjdCBlbGVtZW50IGlzIG9wZW5lZC5cclxuXHQgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5vcGVuZWRDaGFuZ2U/LnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0aWYgKHggJiYgdGhpcy5maWx0ZXJhYmxlKSB7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXcml0ZXMgdGhlIHZhbHVlIHRvIHRoZSBjb21wb25lbnQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW5cclxuXHQgKi9cclxuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuXHRcdHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdGlmICghdGhpcy52YWx1ZSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdEVsPy53cml0ZVZhbHVlKG51bGwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmb2N1cyBvbiB0aGUgc2VsZWN0IGVsZW1lbnQgYW5kIG9wZW5zIHRoZSBkcm9wZG93bi5cclxuXHQgKi9cclxuXHRwdWJsaWMgZm9jdXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdEVsPy5mb2N1cygpO1xyXG5cdFx0dGhpcy5zZWxlY3RFbD8ub3BlbigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyB0aGUgbGF1bmNoIGJ1dHRvbiBjbGljayBldmVudC5cclxuXHQgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgb3B0aW9ucyB0aHJvdWdoIHRoZSBvbkxhdW5jaCBldmVudCBlbWl0dGVyLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgZW1pdHRlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVMYXVuY2hDbGlja2VkKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XHJcblx0XHRcdHRoaXMub25MYXVuY2guZW1pdCh0aGlzLm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+ICh2YWx1ZSB8fCBbXSkuaW5jbHVkZXMoeFt0aGlzLm9wdGlvblZhbHVlUHJvcGVydHldKSkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5vbkxhdW5jaC5lbWl0KHRoaXMub3B0aW9ucy5maW5kKCh4OiBhbnkpID0+IHhbdGhpcy5vcHRpb25WYWx1ZVByb3BlcnR5XSA9PSB2YWx1ZSkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyB0aGUgZmlsdGVyIGV2ZW50IHRvIGZpbHRlciB0aGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgaW5wdXQuXHJcblx0ICogXHJcblx0ICogQHBhcmFtICRldmVudCBUaGUgZmlsdGVyIGV2ZW50XHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUZpbHRlcigkZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qgc2VhcmNoVGV4dDogc3RyaW5nID0gKCRldmVudD8udGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSA/PyAnJztcclxuXHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigoeDogYW55KSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLnNlYXJjaEZpZWxkID8gdGhpcy5zZWFyY2hGaWVsZCh4KSA6IHhbdGhpcy5vcHRpb25UZXh0UHJvcGVydHldO1xyXG5cdFx0XHRyZXR1cm4gZmllbGRWYWx1ZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59IiwiPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgaTE4bi1wbGFjZWhvbGRlciBbKG5nTW9kZWwpXT1cInZhbHVlXCIgI3NlbGVjdD1cIm1hdFNlbGVjdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIiBbaGlkZGVuXT1cInJlYWRvbmx5XCIgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVXaXRoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgZmxleD5cclxuICAgIDwhLS0gI3JlZ2lvbiBGaWx0ZXIgaW5wdXQgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyYWJsZVwiIGNsYXNzPVwidmQtc2VsZWN0LWZpbHRlci13cmFwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZkLXNlbGVjdC1maWx0ZXItaW5uZXJcIj5cclxuICAgICAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uIGRpc2FibGVkICpuZ0lmPVwiIWZpbHRlcklucHV0LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDxhIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImZpbHRlcklucHV0LnZhbHVlXCIgKGNsaWNrKT1cImZpbHRlcklucHV0LnZhbHVlID0gJyc7IGhhbmRsZUZpbHRlcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyLi4uXCIgY2xhc3M9XCJ2ZC1zZWxlY3QtZmlsdGVyIG1hdC1pbnB1dC1lbGVtZW50XCIgKGtleXVwKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gVHJpZ2dlciBmb3IgbGF1bmNoIGJ1dHRvbiAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIob25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoPz8wKSA+IDBcIiBbY2xhc3NdPVwidHJpZ2dlckNzc0NsYXNzXCI+XHJcbiAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnM7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gbGF5b3V0PVwicm93XCIgbGF5b3V0LWFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwibWF0SWNvbktleSAmJiAhc3ZnSWNvbktleVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+e3tvcHRpb25bbWF0SWNvbktleV19fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ZnSWNvbktleSAmJiAhbWF0SWNvbktleVwiIFtzdmdJY29uXT1cIm9wdGlvbltzdmdJY29uS2V5XVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbltvcHRpb25UZXh0UHJvcGVydHldfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsYXN0XCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmQtc2VsZWN0LWxhdW5jaFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWUpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBDdXN0b20gdHJpZ2dlciB0ZW1wbGF0ZSAtLT5cclxuICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgKm5nSWY9XCIhb25MYXVuY2g/Lm9ic2VydmVycz8ubGVuZ3RoICYmIHRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbY2xhc3NdPVwidHJpZ2dlckNzc0NsYXNzXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWYhXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJpZ2dlcjogc2VsZWN0ZWRPcHRpb25zIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIE9wdGlvbiB0ZW1wbGF0ZSBhcyB0cmlnZ2VyIC0tPlxyXG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIiFvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGggJiYgIXRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiYgb3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW2NsYXNzXT1cInRyaWdnZXJDc3NDbGFzc1wiPlxyXG4gICAgICAgIDxzcGFuIGxheW91dD1cInJvd1wiIGxheW91dC1hbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGxheW91dD1cInJvd1wiIGxheW91dC1hbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1hdEljb25LZXkgJiYgIXN2Z0ljb25LZXlcIiBbZm9udFNldF09XCJmb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ1wiPnt7b3B0aW9uW21hdEljb25LZXldfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInN2Z0ljb25LZXkgJiYgIW1hdEljb25LZXlcIiBbc3ZnSWNvbl09XCJvcHRpb25bc3ZnSWNvbktleV1cIiBbZm9udFNldF09XCJmb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmIVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGFzdFwiPiZuYnNwOyZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIFRyaWdnZXIgZm9yIGljb25zIC0tPlxyXG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj1cIihtYXRJY29uS2V5IHx8IHN2Z0ljb25LZXkpICYmICF0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmICFvcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuICAgICAgICA8c3BhbiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNlbGVjdGVkT3B0aW9uczsgbGV0IGkgPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJtYXRJY29uS2V5ICYmICFzdmdJY29uS2V5XCIgW2ZvbnRTZXRdPVwiZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCdcIj57e29wdGlvblttYXRJY29uS2V5XX19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzdmdJY29uS2V5ICYmICFtYXRJY29uS2V5XCIgW3N2Z0ljb25dPVwib3B0aW9uW3N2Z0ljb25LZXldXCIgW2ZvbnRTZXRdPVwiZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7b3B0aW9uW29wdGlvblRleHRQcm9wZXJ0eV19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxhc3RcIj4mbmJzcDsmbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBEZWZhdWx0IG9wdGlvbiAtLT5cclxuICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwidGMtZ3JleS01MDBcIiAqbmdJZj1cIiFtdWx0aXBsZSAmJiBkZWZhdWx0T3B0aW9uXCIgaTE4bj1cIkBAcGxlYXNlU2VsZWN0XCI+LS0tIFBsZWFzZSBTZWxlY3QgLS0tPC9tYXQtb3B0aW9uPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBPcHRpb25zIC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gbGV0LWZpcnN0PVwiZmlyc3RcIiBuZ0ZvciBbbmdGb3JPZl09XCJmaWx0ZXJlZE9wdGlvbnNcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibWFwcGVyID8gb3B0aW9uIDogb3B0aW9uW29wdGlvblZhbHVlUHJvcGVydHldXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1hdEljb25LZXkgJiYgIXN2Z0ljb25LZXlcIiBbZm9udFNldF09XCJmb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ1wiPnt7b3B0aW9uW21hdEljb25LZXldfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzdmdJY29uS2V5ICYmICFtYXRJY29uS2V5XCIgW3N2Z0ljb25dPVwib3B0aW9uW3N2Z0ljb25LZXldXCIgW2ZvbnRTZXRdPVwiZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFvcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBpMThuPVwiQEBzZWxlY3Rpb25cIj57b3B0aW9uW29wdGlvblRleHRQcm9wZXJ0eV0sIHNlbGVjdCwgb3B0aW9uIHtvcHRpb259IG90aGVyIHt7e29wdGlvbltvcHRpb25UZXh0UHJvcGVydHldfX19fTwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmIVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbjwvbWF0LXNlbGVjdD5cclxuXHJcbjwhLS0gI3JlZ2lvbiBSZWFkIG9ubHkgdmFsdWUgLS0+XHJcbjxkaXYgKm5nSWY9XCJyZWFkb25seVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cImN1cnJlbnRWYWx1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWFkb25seS12YWx1ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFvcHRpb25UZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiYgIXRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGxheW91dD1cInJvd1wiIGxheW91dC1hbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnM7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1hdEljb25LZXkgJiYgIXN2Z0ljb25LZXlcIiBbZm9udFNldF09XCJmb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ1wiPnt7Y3VycmVudFZhbHVlW21hdEljb25LZXldfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ZnSWNvbktleSAmJiAhbWF0SWNvbktleVwiIFtzdmdJY29uXT1cImN1cnJlbnRWYWx1ZVtzdmdJY29uS2V5XVwiIFtmb250U2V0XT1cImZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwOyZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGkxOG49XCJAQHNlbGVjdGlvblwiPntjdXJyZW50VmFsdWVbb3B0aW9uVGV4dFByb3BlcnR5XSwgc2VsZWN0LCBvcHRpb24ge29wdGlvbn0gb3RoZXIge3t7Y3VycmVudFZhbHVlW29wdGlvblRleHRQcm9wZXJ0eV19fX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxhc3RcIj4sJm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmIVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyaWdnZXI6IGN1cnJlbnRWYWx1ZSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmICF0cmlnZ2VyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGU/LnRlbXBsYXRlUmVmIVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogY3VycmVudFZhbHVlIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIihvbkxhdW5jaD8ub2JzZXJ2ZXJzPy5sZW5ndGg/PzApID4gMFwiIGNsYXNzPVwidmQtc2VsZWN0LWxhdW5jaC1yZWFkb25seVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUxhdW5jaENsaWNrZWQodmFsdWUpXCI+bGF1bmNoPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFjdXJyZW50VmFsdWVcIj4mbmJzcDs8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gI2VuZHJlZ2lvbiAtLT4iXX0=
|
package/fesm2022/messaia-cdk.mjs
CHANGED
|
@@ -12482,6 +12482,12 @@ class VdSelectComponent extends AbstractSelectFormField {
|
|
|
12482
12482
|
this.triggerCssClass = 'chip';
|
|
12483
12483
|
this.stateChanges.next();
|
|
12484
12484
|
}
|
|
12485
|
+
/**
|
|
12486
|
+
* Gets the display values of the selected options for the trigger.
|
|
12487
|
+
*
|
|
12488
|
+
* @returns The display values of the selected options
|
|
12489
|
+
*/
|
|
12490
|
+
get triggerValues() { return this.selectedOptions?.map(option => option[this.optionValueProperty]); }
|
|
12485
12491
|
/**
|
|
12486
12492
|
* Retrieves the currently selected options from the filtered options.
|
|
12487
12493
|
* If multiple options are selected, returns them as an array.
|
|
@@ -12577,26 +12583,12 @@ class VdSelectComponent extends AbstractSelectFormField {
|
|
|
12577
12583
|
return fieldValue?.toLowerCase().includes(searchText.toLowerCase());
|
|
12578
12584
|
});
|
|
12579
12585
|
}
|
|
12580
|
-
/**
|
|
12581
|
-
* Gets the display values of the selected options for the trigger.
|
|
12582
|
-
*
|
|
12583
|
-
* @param options The selected options
|
|
12584
|
-
* @returns The display values of the selected options
|
|
12585
|
-
*/
|
|
12586
|
-
getTriggerValues(options) {
|
|
12587
|
-
if (Array.isArray(options)) {
|
|
12588
|
-
return options.map(x => x.viewValue);
|
|
12589
|
-
}
|
|
12590
|
-
else {
|
|
12591
|
-
return options?.viewValue;
|
|
12592
|
-
}
|
|
12593
|
-
}
|
|
12594
12586
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: VdSelectComponent, deps: [{ token: i0.Injector }, { token: i1.NgControl, optional: true, self: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2$1.ErrorStateMatcher }, { token: i3$3.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
12595
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: VdSelectComponent, selector: "vd-select", inputs: { triggerCssClass: "triggerCssClass", triggerMode: "triggerMode" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: getTriggerValues(select.selected) }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"matIconKey || svgIconKey\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i5$3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i5$3.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }] });
|
|
12587
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: VdSelectComponent, selector: "vd-select", inputs: { triggerCssClass: "triggerCssClass", triggerMode: "triggerMode" }, providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"(matIconKey || svgIconKey) && !triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i5$3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i5$3.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }] });
|
|
12596
12588
|
}
|
|
12597
12589
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: VdSelectComponent, decorators: [{
|
|
12598
12590
|
type: Component,
|
|
12599
|
-
args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger:
|
|
12591
|
+
args: [{ selector: 'vd-select', providers: [{ provide: MatFormFieldControl, useExisting: VdSelectComponent }], template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div *ngIf=\"filterable\" class=\"vd-select-filter-wrap\">\r\n <div class=\"vd-select-filter-inner\">\r\n <a mat-icon-button disabled *ngIf=\"!filterInput.value\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">search</mat-icon>\r\n </a>\r\n <a mat-icon-button *ngIf=\"filterInput.value\" (click)=\"filterInput.value = ''; handleFilter()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </a>\r\n <input #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter mat-input-element\" (keyup)=\"handleFilter($event)\">\r\n </div>\r\n <div class=\"mat-divider\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"(matIconKey || svgIconKey) && !triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span>{{option[optionTextProperty]}}</span>\r\n </span>\r\n <span *ngIf=\"!last\"> </span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <span> </span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">, </span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\"> </div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-chip{background-color:var(--mdc-chip-elevated-container-color, transparent);border-radius:var(--mdc-chip-container-shape-radius, 16px 16px 16px 16px);color:inherit;display:inline-block;line-height:20px;height:24px!important;padding:1px 16px}::ng-deep .mat-mdc-chip:not(:last-child){margin:1px 4px 1px 0}::ng-deep .mat-mdc-chip>span{color:var(--mdc-chip-label-text-color, inherit);display:inline-block;font-size:.94em;line-height:1.8em}\n"] }]
|
|
12600
12592
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
12601
12593
|
type: Optional
|
|
12602
12594
|
}, {
|