@ngx-formly/material
Version:
Formly is a dynamic (JSON powered) form library for Angular that bring unmatched maintainability to your application's forms.
199 lines (183 loc) • 18 kB
JavaScript
import { Component, ViewChild, ViewEncapsulation, } from '@angular/core';
import { ɵdefineHiddenProp as defineHiddenProp, FieldWrapper, } from '@ngx-formly/core';
import { MatFormField } from '@angular/material/form-field';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/a11y";
import * as i2 from "@angular/common";
import * as i3 from "@angular/material/form-field";
import * as i4 from "@ngx-formly/core";
export class FormlyWrapperFormField extends FieldWrapper {
constructor(renderer, elementRef, focusMonitor) {
super();
this.renderer = renderer;
this.elementRef = elementRef;
this.focusMonitor = focusMonitor;
}
ngOnInit() {
defineHiddenProp(this.field, '_formField', this.formField);
this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {
if (!origin && this.field.focus) {
this.field.focus = false;
}
});
}
ngAfterViewInit() {
// temporary fix for https://github.com/angular/material2/issues/7891
if (this.formField.appearance !== 'outline' && this.props.hideFieldUnderline === true) {
const underlineElement = this.formField._elementRef.nativeElement.querySelector('.mat-form-field-underline');
underlineElement && this.renderer.removeChild(underlineElement.parentNode, underlineElement);
}
}
ngOnDestroy() {
delete this.field._formField;
this.focusMonitor.stopMonitoring(this.elementRef);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyWrapperFormField, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormlyWrapperFormField, selector: "formly-wrapper-mat-form-field", viewQueries: [{ propertyName: "formField", first: true, predicate: MatFormField, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
<!-- fix https://github.com/angular/material2/pull/7083 by setting width to 100% -->
<mat-form-field
[hideRequiredMarker]="true"
[floatLabel]="props.floatLabel"
[appearance]="props.appearance"
[subscriptSizing]="props.subscriptSizing"
[color]="props.color ?? 'primary'"
>
<ng-container #fieldComponent></ng-container>
(props.label && props.hideLabel !== true) {
<mat-label>
{{ props.label }}
(props.required && props.hideRequiredMarker !== true) {
<span aria-hidden="true" class="mat-form-field-required-marker mat-mdc-form-field-required-marker">*</span>
}
</mat-label>
}
(props.textPrefix) {
<ng-container
matTextPrefix
[ngTemplateOutlet]="props.textPrefix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.prefix) {
<ng-container
matPrefix
[ngTemplateOutlet]="props.prefix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.textSuffix) {
<ng-container
matTextSuffix
[ngTemplateOutlet]="props.textSuffix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.suffix) {
<ng-container
matSuffix
[ngTemplateOutlet]="props.suffix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
<mat-error>
<formly-validation-message [field]="field"></formly-validation-message>
</mat-error>
(props.description || props.hintStart; as hint) {
<mat-hint>
<ng-container [ngTemplateOutlet]="stringOrTemplate" [ngTemplateOutletContext]="{ content: hint }">
</ng-container>
</mat-hint>
}
(props.hintEnd; as hintEnd) {
<mat-hint align="end">
<ng-container [ngTemplateOutlet]="stringOrTemplate" [ngTemplateOutletContext]="{ content: hintEnd }">
</ng-container>
</mat-hint>
}
</mat-form-field>
<ng-template #stringOrTemplate let-content="content">
(!content.createEmbeddedView) {
<ng-container>{{ content }}</ng-container>
} {
<ng-container [ngTemplateOutlet]="content" [ngTemplateOutletContext]="{ field: field }"></ng-container>
}
</ng-template>
`, isInline: true, styles: ["formly-wrapper-mat-form-field .mat-mdc-form-field,formly-wrapper-mat-form-field .mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.LegacyFormlyValidationMessage, selector: "formly-validation-message" }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyWrapperFormField, decorators: [{
type: Component,
args: [{ selector: 'formly-wrapper-mat-form-field', template: `
<!-- fix https://github.com/angular/material2/pull/7083 by setting width to 100% -->
<mat-form-field
[hideRequiredMarker]="true"
[floatLabel]="props.floatLabel"
[appearance]="props.appearance"
[subscriptSizing]="props.subscriptSizing"
[color]="props.color ?? 'primary'"
>
<ng-container #fieldComponent></ng-container>
(props.label && props.hideLabel !== true) {
<mat-label>
{{ props.label }}
(props.required && props.hideRequiredMarker !== true) {
<span aria-hidden="true" class="mat-form-field-required-marker mat-mdc-form-field-required-marker">*</span>
}
</mat-label>
}
(props.textPrefix) {
<ng-container
matTextPrefix
[ngTemplateOutlet]="props.textPrefix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.prefix) {
<ng-container
matPrefix
[ngTemplateOutlet]="props.prefix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.textSuffix) {
<ng-container
matTextSuffix
[ngTemplateOutlet]="props.textSuffix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
(props.suffix) {
<ng-container
matSuffix
[ngTemplateOutlet]="props.suffix"
[ngTemplateOutletContext]="{ field: field }"
></ng-container>
}
<mat-error>
<formly-validation-message [field]="field"></formly-validation-message>
</mat-error>
(props.description || props.hintStart; as hint) {
<mat-hint>
<ng-container [ngTemplateOutlet]="stringOrTemplate" [ngTemplateOutletContext]="{ content: hint }">
</ng-container>
</mat-hint>
}
(props.hintEnd; as hintEnd) {
<mat-hint align="end">
<ng-container [ngTemplateOutlet]="stringOrTemplate" [ngTemplateOutletContext]="{ content: hintEnd }">
</ng-container>
</mat-hint>
}
</mat-form-field>
<ng-template #stringOrTemplate let-content="content">
(!content.createEmbeddedView) {
<ng-container>{{ content }}</ng-container>
} {
<ng-container [ngTemplateOutlet]="content" [ngTemplateOutletContext]="{ field: field }"></ng-container>
}
</ng-template>
`, encapsulation: ViewEncapsulation.None, styles: ["formly-wrapper-mat-form-field .mat-mdc-form-field,formly-wrapper-mat-form-field .mat-form-field{width:100%}\n"] }]
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.FocusMonitor }], propDecorators: { formField: [{
type: ViewChild,
args: [MatFormField, { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC53cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3VpL21hdGVyaWFsL2Zvcm0tZmllbGQvc3JjL2Zvcm0tZmllbGQud3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFNVCxpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixJQUFJLGdCQUFnQixFQUdyQyxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQTRHNUQsTUFBTSxPQUFPLHNCQUNYLFNBQVEsWUFBa0M7SUFLMUMsWUFDVSxRQUFtQixFQUNuQixVQUFzQixFQUN0QixZQUEwQjtRQUVsQyxLQUFLLEVBQUUsQ0FBQztRQUpBLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUdwQyxDQUFDO0lBRUQsUUFBUTtRQUNOLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0csZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQzsrR0FsQ1Usc0JBQXNCO21HQUF0QixzQkFBc0IsZ0hBSXRCLFlBQVkscUZBckZiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZFVDs7NEZBSVUsc0JBQXNCO2tCQW5GbEMsU0FBUzsrQkFDRSwrQkFBK0IsWUFDL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkVULGlCQUVjLGlCQUFpQixDQUFDLElBQUk7a0lBTU0sU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIEFmdGVyVmlld0luaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICDJtWRlZmluZUhpZGRlblByb3AgYXMgZGVmaW5lSGlkZGVuUHJvcCxcbiAgRm9ybWx5RmllbGRDb25maWcsXG4gIEZvcm1seUZpZWxkUHJvcHMgYXMgQ29yZUZvcm1seUZpZWxkUHJvcHMsXG4gIEZpZWxkV3JhcHBlcixcbn0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlLCBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW50ZXJmYWNlIE1hdEZvcm1seUZpZWxkQ29uZmlnIGV4dGVuZHMgRm9ybWx5RmllbGRDb25maWc8Rm9ybWx5RmllbGRQcm9wcz4ge1xuICBfZm9ybUZpZWxkPzogRm9ybWx5V3JhcHBlckZvcm1GaWVsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlGaWVsZFByb3BzIGV4dGVuZHMgQ29yZUZvcm1seUZpZWxkUHJvcHMge1xuICBwcmVmaXg/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdWZmaXg/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICB0ZXh0UHJlZml4PzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdGV4dFN1ZmZpeD86IFRlbXBsYXRlUmVmPGFueT47XG4gIGhpZGVMYWJlbD86IGJvb2xlYW47XG4gIGhpZGVSZXF1aXJlZE1hcmtlcj86IGJvb2xlYW47XG4gIGhpZGVGaWVsZFVuZGVybGluZT86IGJvb2xlYW47XG4gIGZsb2F0TGFiZWw/OiBGbG9hdExhYmVsVHlwZTtcbiAgYXBwZWFyYW5jZT86IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHN1YnNjcmlwdFNpemluZz86ICdmaXhlZCcgfCAnZHluYW1pYyc7XG4gIGNvbG9yPzogVGhlbWVQYWxldHRlO1xuICBoaW50U3RhcnQ/OiBUZW1wbGF0ZVJlZjxhbnk+IHwgc3RyaW5nO1xuICBoaW50RW5kPzogVGVtcGxhdGVSZWY8YW55PiB8IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LXdyYXBwZXItbWF0LWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL21hdGVyaWFsMi9wdWxsLzcwODMgYnkgc2V0dGluZyB3aWR0aCB0byAxMDAlIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCJ0cnVlXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cInByb3BzLmZsb2F0TGFiZWxcIlxuICAgICAgW2FwcGVhcmFuY2VdPVwicHJvcHMuYXBwZWFyYW5jZVwiXG4gICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInByb3BzLnN1YnNjcmlwdFNpemluZ1wiXG4gICAgICBbY29sb3JdPVwicHJvcHMuY29sb3IgPz8gJ3ByaW1hcnknXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICNmaWVsZENvbXBvbmVudD48L25nLWNvbnRhaW5lcj5cbiAgICAgIEBpZiAocHJvcHMubGFiZWwgJiYgcHJvcHMuaGlkZUxhYmVsICE9PSB0cnVlKSB7XG4gICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAge3sgcHJvcHMubGFiZWwgfX1cbiAgICAgICAgICBAaWYgKHByb3BzLnJlcXVpcmVkICYmIHByb3BzLmhpZGVSZXF1aXJlZE1hcmtlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIgbWF0LW1kYy1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIH1cblxuICAgICAgQGlmIChwcm9wcy50ZXh0UHJlZml4KSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBtYXRUZXh0UHJlZml4XG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJvcHMudGV4dFByZWZpeFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocHJvcHMucHJlZml4KSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBtYXRQcmVmaXhcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9wcy5wcmVmaXhcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzLnRleHRTdWZmaXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIG1hdFRleHRTdWZmaXhcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9wcy50ZXh0U3VmZml4XCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cblxuICAgICAgQGlmIChwcm9wcy5zdWZmaXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb3BzLnN1ZmZpeFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgIDxmb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlIFtmaWVsZF09XCJmaWVsZFwiPjwvZm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZT5cbiAgICAgIDwvbWF0LWVycm9yPlxuXG4gICAgICBAaWYgKHByb3BzLmRlc2NyaXB0aW9uIHx8IHByb3BzLmhpbnRTdGFydDsgYXMgaGludCkge1xuICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdHJpbmdPclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29udGVudDogaGludCB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocHJvcHMuaGludEVuZDsgYXMgaGludEVuZCkge1xuICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0cmluZ09yVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb250ZW50OiBoaW50RW5kIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtaGludD5cbiAgICAgIH1cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG5nLXRlbXBsYXRlICNzdHJpbmdPclRlbXBsYXRlIGxldC1jb250ZW50PVwiY29udGVudFwiPlxuICAgICAgQGlmICghY29udGVudC5jcmVhdGVFbWJlZGRlZFZpZXcpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lcj57eyBjb250ZW50IH19PC9uZy1jb250YWluZXI+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLndyYXBwZXIuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlXcmFwcGVyRm9ybUZpZWxkXG4gIGV4dGVuZHMgRmllbGRXcmFwcGVyPE1hdEZvcm1seUZpZWxkQ29uZmlnPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIEBWaWV3Q2hpbGQoTWF0Rm9ybUZpZWxkLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb3JtRmllbGQhOiBNYXRGb3JtRmllbGQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZGVmaW5lSGlkZGVuUHJvcCh0aGlzLmZpZWxkLCAnX2Zvcm1GaWVsZCcsIHRoaXMuZm9ybUZpZWxkKTtcbiAgICB0aGlzLmZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKChvcmlnaW4pID0+IHtcbiAgICAgIGlmICghb3JpZ2luICYmIHRoaXMuZmllbGQuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5maWVsZC5mb2N1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIHRlbXBvcmFyeSBmaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL21hdGVyaWFsMi9pc3N1ZXMvNzg5MVxuICAgIGlmICh0aGlzLmZvcm1GaWVsZC5hcHBlYXJhbmNlICE9PSAnb3V0bGluZScgJiYgdGhpcy5wcm9wcy5oaWRlRmllbGRVbmRlcmxpbmUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHVuZGVybGluZUVsZW1lbnQgPSB0aGlzLmZvcm1GaWVsZC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUnKTtcbiAgICAgIHVuZGVybGluZUVsZW1lbnQgJiYgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh1bmRlcmxpbmVFbGVtZW50LnBhcmVudE5vZGUsIHVuZGVybGluZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGRlbGV0ZSB0aGlzLmZpZWxkLl9mb3JtRmllbGQ7XG4gICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxufVxuIl19