@firestitch/form 18.0.33 → 18.0.35

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.
@@ -17,7 +17,6 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
17
17
  appendHintClass: string;
18
18
  set validateMessages(messages: Record<string, string>);
19
19
  errors: any[];
20
- protected _control: AbstractControl;
21
20
  protected _elementRef: ElementRef<any>;
22
21
  protected _renderer2: Renderer2;
23
22
  protected _injector: Injector;
@@ -25,7 +24,20 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
25
24
  protected _ngControl: NgControl;
26
25
  protected _formDirective: FsFormDirective;
27
26
  private _destroy$;
27
+ private _statusChanges$;
28
+ private _boundControl;
28
29
  constructor();
30
+ /**
31
+ * Always read the control through the directive rather than caching it.
32
+ *
33
+ * NgForm.addControl() runs in a microtask and reassigns dir.control to
34
+ * whatever FormGroup.registerControl() returns — and registerControl() hands
35
+ * back the EXISTING control when the name is already taken (two fields
36
+ * sharing a name, or lazily created content re-registering). A control
37
+ * captured in the constructor is then an orphan: it never emits again, so
38
+ * statusChanges never fires and the validation message is never rendered.
39
+ */
40
+ protected get _control(): AbstractControl;
29
41
  ngOnInit(): void;
30
42
  ngOnDestroy(): void;
31
43
  ngAfterContentInit(): void;
@@ -40,6 +52,7 @@ export declare class FsControlDirective implements OnInit, AfterContentInit, OnD
40
52
  protected _renderHint(error: any, messageWrapper: any): void;
41
53
  protected _renderError(wrapper: any, messageWrapper: any, error: any): void;
42
54
  protected _subscribeToStatusChagnes(): void;
55
+ private _bindStatusChanges;
43
56
  protected _getWrapper(node: any, count?: number): any;
44
57
  protected _parseErrorMessage(message: any, args: any): string;
45
58
  protected _getError(controlRef: any): {
@@ -79,7 +79,7 @@ export class FsFormDialogActionsComponent {
79
79
  return withinSameDialog(owner, this._dialogRef) ? owner : null;
80
80
  }
81
81
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormDialogActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsFormDialogActionsComponent, isStandalone: true, selector: "fs-form-dialog-actions", inputs: { save: "save", create: "create", close: "close", done: "done", closeData: "closeData", name: "name" }, host: { properties: { "class.save-create": "showSave || create" }, classAttribute: "form-buttons" }, ngImport: i0, template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;width:100%}:host.save-create .close-button{float:right}@media (max-width: 599px){:host{display:flex;flex-direction:column;flex-wrap:nowrap}:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0 0 4px;margin-inline:0!important}:host ::ng-deep button:last-child,:host ::ng-deep .mat-button:last-child,:host ::ng-deep .mdc-button:last-child,:host ::ng-deep .mat-mdc-button-base:last-child{margin-bottom:0}}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "submitDisabled"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: ["closeData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsFormDialogActionsComponent, isStandalone: true, selector: "fs-form-dialog-actions", inputs: { save: "save", create: "create", close: "close", done: "done", closeData: "closeData", name: "name" }, host: { properties: { "class.save-create": "showSave || create" }, classAttribute: "form-buttons" }, ngImport: i0, template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;align-items:center;gap:4px;width:100%}:host.save-create .close-button{float:right}:host ::ng-deep>*{margin-inline:0!important}@media (max-width: 599px){:host{flex-direction:column;flex-wrap:nowrap;align-items:stretch}:host ::ng-deep>*,:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0!important}}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "submitDisabled"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: ["closeData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
83
83
  }
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormDialogActionsComponent, decorators: [{
85
85
  type: Component,
@@ -92,7 +92,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
92
92
  MatDialogClose,
93
93
  NgTemplateOutlet,
94
94
  FsFormDialogCloseDirective,
95
- ], template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;width:100%}:host.save-create .close-button{float:right}@media (max-width: 599px){:host{display:flex;flex-direction:column;flex-wrap:nowrap}:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0 0 4px;margin-inline:0!important}:host ::ng-deep button:last-child,:host ::ng-deep .mat-button:last-child,:host ::ng-deep .mdc-button:last-child,:host ::ng-deep .mat-mdc-button-base:last-child{margin-bottom:0}}\n"] }]
95
+ ], template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;align-items:center;gap:4px;width:100%}:host.save-create .close-button{float:right}:host ::ng-deep>*{margin-inline:0!important}@media (max-width: 599px){:host{flex-direction:column;flex-wrap:nowrap;align-items:stretch}:host ::ng-deep>*,:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0!important}}\n"] }]
96
96
  }], propDecorators: { save: [{
97
97
  type: Input
98
98
  }], create: [{
@@ -106,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
106
106
  }], name: [{
107
107
  type: Input
108
108
  }] } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2Qyx5RkFBeUY7SUFDekUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsY0FBYyxDQUFnQyxLQUFRO1FBQzVELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQzt1R0FyRlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsdVNDbkN6Qyw2L0JBNkNjLG1pRERqQlYsU0FBUyxpTEFDVCxpQkFBaUIsdUtBQ2pCLGNBQWMscUxBQ2QsZ0JBQWdCLG9KQUNoQiwwQkFBMEI7OzJGQUdqQiw0QkFBNEI7a0JBbEJ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFFBQ1Y7d0JBQ0osT0FBTyxFQUFFLGNBQWM7d0JBQ3ZCLHFCQUFxQixFQUFFLG9CQUFvQjtxQkFDNUMsV0FDUTt3QkFDUCxTQUFTO3dCQUNULGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEJBS2UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tY29udGFpbmVyJztcbmltcG9ydCB7IEZzRm9ybURpYWxvZ0Nsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWRpYWxvZy1jbG9zZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcbmltcG9ydCB7IHdpdGhpblNhbWVEaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3dpdGhpbi1zYW1lLWRpYWxvZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmb3JtLWJ1dHRvbnMnLFxuICAgICdbY2xhc3Muc2F2ZS1jcmVhdGVdJzogJ3Nob3dTYXZlIHx8IGNyZWF0ZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgRnNCdXR0b25EaXJlY3RpdmUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGb3JtRGlhbG9nQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogTGVhdmUgdW5zZXQgaW5zaWRlIGFuIGBmc0Zvcm1Db250YWluZXJgIHRvIGZvbGxvdyB3aGV0aGVyIGl0IGhhcyBhbnl0aGluZyB0byBzYXZlLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNyZWF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2UgPSBmYWxzZTtcbiAgLyoqIExlYXZlIHVuc2V0IGluc2lkZSBhbiBgZnNGb3JtQ29udGFpbmVyYCB0byBmaWxsIGluIHdoZW5ldmVyIFNhdmUgZG9lcyBub3QgYXBwbHkuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkb25lOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvLyBBIGRpYWxvZyBvcGVuZWQgd2l0aCBgdmlld0NvbnRhaW5lclJlZmAgcmVzb2x2ZXMgdGhyb3VnaCB0byB3aGF0ZXZlciBvcGVuZWRcbiAgLy8gaXQsIHNvIGFuIG93bmVyIGZyb20gYW5vdGhlciBkaWFsb2cgaXMgZGlzY2FyZGVkIC0gdGhlc2UgYWN0aW9ucyBiZWxvbmcgdG9cbiAgLy8gdGhlaXIgb3duIGRpYWxvZydzIGZvcm0gc2V0IGFuZCBubyBvbmUgZWxzZSdzLlxuICBwcml2YXRlIF9jb250YWluZXIgPSB0aGlzLl9vd25EaWFsb2dPbmx5KGluamVjdChGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSkpO1xuICBwcml2YXRlIF9mb3JtID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBJbnNpZGUgYSBjb250YWluZXIgdGhlc2UgZGVmYXVsdCB0byB3aGV0aGVyIGFueXRoaW5nIG1vdW50ZWQgY2FuIGFjdHVhbGx5XG4gICAqIHNhdmUsIHNvIGEgZm9vdGVyIGxlZnQgYXMgYSBiYXJlIGA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5gIHN3YXBzIFNhdmUgZm9yXG4gICAqIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3Rpbmcgd2hpY2ggdGFicyBhcmUgc2F2YWJsZS4gQW5cbiAgICogZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucywgYW5kIG91dHNpZGUgYSBjb250YWluZXIgU2F2ZSBzdGF5cyBvbiBhcyBpdFxuICAgKiBhbHdheXMgZGlkLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93U2F2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlID8/ICh0aGlzLl9jb250YWluZXIgPyB0aGlzLl9jb250YWluZXIuc3VibWl0cyA6IHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93RG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8/ICh0aGlzLl9jb250YWluZXIgPyAhdGhpcy5fY29udGFpbmVyLnN1Ym1pdHMgJiYgIXRoaXMuY3JlYXRlIDogZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG93bmVyID0gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtO1xuXG4gICAgaWYob3duZXIpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSB3aG9sZSBzZXQsIG5vdCBvbmUgZm9ybSdzIG93biBjb250cm9sczogd2l0aCBhIGZvcm0gc2NvcGVkIHRvIGFcbiAgICAgIC8vIHRhYidzIGZpZWxkcywgdGhlIGFjdGlvbnMgc2l0IG91dHNpZGUgaXQgaW4gdGhlIGRpYWxvZyBmb290ZXIgYW5kIHRoYXRcbiAgICAgIC8vIGZvcm0ncyBOZ0Zvcm0gaG9sZHMgbm90aGluZyBvZiBpdHMgb3duLiBSZWNvbXB1dGVkIG9uIGV2ZXJ5IGVtaXNzaW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBsYXRjaGVkLCBzbyBhIHN3aXRjaCB0byBhIHByaXN0aW5lIHRhYiBjbGVhcnMgaXQgdG9vLlxuICAgICAgb3duZXIuZGlydHlDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IG93bmVyLmRpcnR5TGlua2VkO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgb3duZXIuc3VibWl0dGVkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSg1MCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBLZWVwcyBhIERJLXJlc29sdmVkIG93bmVyIG9ubHkgd2hlbiBpdCBiZWxvbmdzIHRvIHRoZXNlIGFjdGlvbnMnIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfb3duRGlhbG9nT25seTxUIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZT4ob3duZXI6IFQpOiBUIHtcbiAgICByZXR1cm4gd2l0aGluU2FtZURpYWxvZyhvd25lciwgdGhpcy5fZGlhbG9nUmVmKSA/IG93bmVyIDogbnVsbDtcbiAgfVxufVxuIiwiQGlmIChzaG93U2F2ZSB8fCBjcmVhdGUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW25hbWVdPVwibmFtZVwiPlxuICAgIHt7IGNyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd0RvbmUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIERvbmVcbiAgPC9idXR0b24+XG59XG5AaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG59XG5AaWYgKGNsb3NlKSB7XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZS1idXR0b25cIlxuICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgIFtjbG9zZURhdGFdPVwiY2xvc2VEYXRhXCJcbiAgICAgIFtjb2xvcl09XCJkaXJ0eSA/ICdiYXNpYycgOiAncHJpbWFyeSdcIj5cbiAgICBDbG9zZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoIShzaG93U2F2ZSB8fCBjcmVhdGUpKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2Qyx5RkFBeUY7SUFDekUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsY0FBYyxDQUFnQyxLQUFRO1FBQzVELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQzt1R0FyRlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsdVNDbkN6Qyw2L0JBNkNjLDY3Q0RqQlYsU0FBUyxpTEFDVCxpQkFBaUIsdUtBQ2pCLGNBQWMscUxBQ2QsZ0JBQWdCLG9KQUNoQiwwQkFBMEI7OzJGQUdqQiw0QkFBNEI7a0JBbEJ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFFBQ1Y7d0JBQ0osT0FBTyxFQUFFLGNBQWM7d0JBQ3ZCLHFCQUFxQixFQUFFLG9CQUFvQjtxQkFDNUMsV0FDUTt3QkFDUCxTQUFTO3dCQUNULGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEJBS2UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tY29udGFpbmVyJztcbmltcG9ydCB7IEZzRm9ybURpYWxvZ0Nsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWRpYWxvZy1jbG9zZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcbmltcG9ydCB7IHdpdGhpblNhbWVEaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3dpdGhpbi1zYW1lLWRpYWxvZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmb3JtLWJ1dHRvbnMnLFxuICAgICdbY2xhc3Muc2F2ZS1jcmVhdGVdJzogJ3Nob3dTYXZlIHx8IGNyZWF0ZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgRnNCdXR0b25EaXJlY3RpdmUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGb3JtRGlhbG9nQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogTGVhdmUgdW5zZXQgaW5zaWRlIGFuIGBmc0Zvcm1Db250YWluZXJgIHRvIGZvbGxvdyB3aGV0aGVyIGl0IGhhcyBhbnl0aGluZyB0byBzYXZlLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNyZWF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2UgPSBmYWxzZTtcbiAgLyoqIExlYXZlIHVuc2V0IGluc2lkZSBhbiBgZnNGb3JtQ29udGFpbmVyYCB0byBmaWxsIGluIHdoZW5ldmVyIFNhdmUgZG9lcyBub3QgYXBwbHkuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkb25lOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvLyBBIGRpYWxvZyBvcGVuZWQgd2l0aCBgdmlld0NvbnRhaW5lclJlZmAgcmVzb2x2ZXMgdGhyb3VnaCB0byB3aGF0ZXZlciBvcGVuZWRcbiAgLy8gaXQsIHNvIGFuIG93bmVyIGZyb20gYW5vdGhlciBkaWFsb2cgaXMgZGlzY2FyZGVkIC0gdGhlc2UgYWN0aW9ucyBiZWxvbmcgdG9cbiAgLy8gdGhlaXIgb3duIGRpYWxvZydzIGZvcm0gc2V0IGFuZCBubyBvbmUgZWxzZSdzLlxuICBwcml2YXRlIF9jb250YWluZXIgPSB0aGlzLl9vd25EaWFsb2dPbmx5KGluamVjdChGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSkpO1xuICBwcml2YXRlIF9mb3JtID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBJbnNpZGUgYSBjb250YWluZXIgdGhlc2UgZGVmYXVsdCB0byB3aGV0aGVyIGFueXRoaW5nIG1vdW50ZWQgY2FuIGFjdHVhbGx5XG4gICAqIHNhdmUsIHNvIGEgZm9vdGVyIGxlZnQgYXMgYSBiYXJlIGA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5gIHN3YXBzIFNhdmUgZm9yXG4gICAqIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3Rpbmcgd2hpY2ggdGFicyBhcmUgc2F2YWJsZS4gQW5cbiAgICogZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucywgYW5kIG91dHNpZGUgYSBjb250YWluZXIgU2F2ZSBzdGF5cyBvbiBhcyBpdFxuICAgKiBhbHdheXMgZGlkLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93U2F2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlID8/ICh0aGlzLl9jb250YWluZXIgPyB0aGlzLl9jb250YWluZXIuc3VibWl0cyA6IHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93RG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8/ICh0aGlzLl9jb250YWluZXIgPyAhdGhpcy5fY29udGFpbmVyLnN1Ym1pdHMgJiYgIXRoaXMuY3JlYXRlIDogZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG93bmVyID0gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtO1xuXG4gICAgaWYob3duZXIpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSB3aG9sZSBzZXQsIG5vdCBvbmUgZm9ybSdzIG93biBjb250cm9sczogd2l0aCBhIGZvcm0gc2NvcGVkIHRvIGFcbiAgICAgIC8vIHRhYidzIGZpZWxkcywgdGhlIGFjdGlvbnMgc2l0IG91dHNpZGUgaXQgaW4gdGhlIGRpYWxvZyBmb290ZXIgYW5kIHRoYXRcbiAgICAgIC8vIGZvcm0ncyBOZ0Zvcm0gaG9sZHMgbm90aGluZyBvZiBpdHMgb3duLiBSZWNvbXB1dGVkIG9uIGV2ZXJ5IGVtaXNzaW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBsYXRjaGVkLCBzbyBhIHN3aXRjaCB0byBhIHByaXN0aW5lIHRhYiBjbGVhcnMgaXQgdG9vLlxuICAgICAgb3duZXIuZGlydHlDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IG93bmVyLmRpcnR5TGlua2VkO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgb3duZXIuc3VibWl0dGVkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSg1MCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBLZWVwcyBhIERJLXJlc29sdmVkIG93bmVyIG9ubHkgd2hlbiBpdCBiZWxvbmdzIHRvIHRoZXNlIGFjdGlvbnMnIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfb3duRGlhbG9nT25seTxUIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZT4ob3duZXI6IFQpOiBUIHtcbiAgICByZXR1cm4gd2l0aGluU2FtZURpYWxvZyhvd25lciwgdGhpcy5fZGlhbG9nUmVmKSA/IG93bmVyIDogbnVsbDtcbiAgfVxufVxuIiwiQGlmIChzaG93U2F2ZSB8fCBjcmVhdGUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW25hbWVdPVwibmFtZVwiPlxuICAgIHt7IGNyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd0RvbmUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIERvbmVcbiAgPC9idXR0b24+XG59XG5AaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG59XG5AaWYgKGNsb3NlKSB7XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZS1idXR0b25cIlxuICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgIFtjbG9zZURhdGFdPVwiY2xvc2VEYXRhXCJcbiAgICAgIFtjb2xvcl09XCJkaXJ0eSA/ICdiYXNpYycgOiAncHJpbWFyeSdcIj5cbiAgICBDbG9zZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoIShzaG93U2F2ZSB8fCBjcmVhdGUpKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -6,6 +6,7 @@ import { keys, values } from 'lodash-es';
6
6
  import { VALIDATE_MESSAGES, VALIDATE_MESSAGE_PROVIDER, } from '../../providers/validate-messages.provider';
7
7
  import { FsFormDirective } from '../form/form.directive';
8
8
  import * as i0 from "@angular/core";
9
+ const resolvedPromise = Promise.resolve();
9
10
  export class FsControlDirective {
10
11
  wrapperSelector;
11
12
  messageSelector;
@@ -21,7 +22,6 @@ export class FsControlDirective {
21
22
  };
22
23
  }
23
24
  errors = [];
24
- _control;
25
25
  _elementRef = inject(ElementRef);
26
26
  _renderer2 = inject(Renderer2);
27
27
  _injector = inject(Injector);
@@ -29,19 +29,31 @@ export class FsControlDirective {
29
29
  _ngControl = inject(NgControl, { optional: true });
30
30
  _formDirective = inject(FsFormDirective, { optional: true });
31
31
  _destroy$ = new Subject();
32
+ _statusChanges$ = new Subject();
33
+ _boundControl;
32
34
  constructor() {
33
- const _ngControl = this._ngControl;
34
- if (_ngControl) {
35
- this._control = _ngControl.control;
36
- }
37
- else {
35
+ if (!this._ngControl) {
38
36
  console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);
39
37
  }
40
38
  }
39
+ /**
40
+ * Always read the control through the directive rather than caching it.
41
+ *
42
+ * NgForm.addControl() runs in a microtask and reassigns dir.control to
43
+ * whatever FormGroup.registerControl() returns — and registerControl() hands
44
+ * back the EXISTING control when the name is already taken (two fields
45
+ * sharing a name, or lazily created content re-registering). A control
46
+ * captured in the constructor is then an orphan: it never emits again, so
47
+ * statusChanges never fires and the validation message is never rendered.
48
+ */
49
+ get _control() {
50
+ return this._ngControl?.control;
51
+ }
41
52
  ngOnInit() {
42
53
  this._setupValidators();
43
54
  }
44
55
  ngOnDestroy() {
56
+ this._statusChanges$.complete();
45
57
  this._destroy$.next(null);
46
58
  this._destroy$.complete();
47
59
  }
@@ -183,11 +195,30 @@ export class FsControlDirective {
183
195
  }
184
196
  }
185
197
  _subscribeToStatusChagnes() {
186
- if (this._control) {
187
- this._control.statusChanges
188
- .pipe(takeUntil(this._destroy$))
189
- .subscribe(this.render.bind(this));
198
+ // Registration is deferred to a microtask by NgForm.addControl(), so wait
199
+ // for it to settle before binding — otherwise we subscribe to the control
200
+ // that is about to be replaced.
201
+ resolvedPromise
202
+ .then(() => this._bindStatusChanges());
203
+ }
204
+ _bindStatusChanges() {
205
+ const control = this._control;
206
+ if (!control || control === this._boundControl) {
207
+ return;
190
208
  }
209
+ this._boundControl = control;
210
+ this._statusChanges$.next();
211
+ control.statusChanges
212
+ .pipe(takeUntil(this._statusChanges$), takeUntil(this._destroy$))
213
+ .subscribe(() => {
214
+ // The control can still be swapped out from under us (a sibling with
215
+ // the same name registering later), so re-bind before rendering.
216
+ if (this._control !== this._boundControl) {
217
+ this._bindStatusChanges();
218
+ }
219
+ this.render();
220
+ });
221
+ this.render();
191
222
  }
192
223
  _getWrapper(node, count = 0) {
193
224
  if (!node || count > 10) {
@@ -263,4 +294,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
263
294
  }], validateMessages: [{
264
295
  type: Input
265
296
  }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQW1CLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHlCQUF5QixHQUMxQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFnQnpELE1BQU0sT0FBTyxrQkFBa0I7SUFFYixlQUFlLENBQWlCO0lBQ2hDLGVBQWUsQ0FBaUI7SUFDaEMsWUFBWSxDQUFpQjtJQUM3QixhQUFhLENBQWlCO0lBQzlCLGtCQUFrQixDQUFTO0lBQzNCLGdCQUFnQixDQUFTO0lBQ3pCLGVBQWUsQ0FBUztJQUV4QyxJQUNXLGdCQUFnQixDQUFDLFFBQWdDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixHQUFHLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRVQsUUFBUSxDQUFrQjtJQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLFVBQVUsR0FBRyxN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Z0I7c0JBRDFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBrZXlzLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQge1xuICBWQUxJREFURV9NRVNTQUdFUyxcbiAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbn0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3ZhbGlkYXRlLW1lc3NhZ2VzLnByb3ZpZGVyJztcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRnNDb250cm9sRGlyZWN0aXZlIHtcbiAgdmFsaWRhdGU/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuICB2YWxpZGF0ZUFzeW5jPyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiB8IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xufVxuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1Db250cm9sXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgd3JhcHBlclNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIG1lc3NhZ2VTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBoaW50U2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWxTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBhcHBlbmRNZXNzYWdlQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZEVycm9yQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZEhpbnRDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGVNZXNzYWdlcyhtZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMgPSB7XG4gICAgICAuLi50aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLFxuICAgICAgLi4ubWVzc2FnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcnMgPSBbXTtcblxuICBwcm90ZWN0ZWQgX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgcHJvdGVjdGVkIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgX3JlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcm90ZWN0ZWQgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJvdGVjdGVkIF92YWxpZGF0ZU1lc3NhZ2VzID0gaW5qZWN0KFZBTElEQVRFX01FU1NBR0VTLCB7IHNlbGY6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJvdGVjdGVkIF9mb3JtRGlyZWN0aXZlID0gaW5qZWN0PEZzRm9ybURpcmVjdGl2ZT4oRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBfbmdDb250cm9sID0gdGhpcy5fbmdDb250cm9sO1xuXG5cbiAgICBpZiAoX25nQ29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbCA9IF9uZ0NvbnRyb2wuY29udHJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIG5nTW9kZWwnLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zZXR1cFZhbGlkYXRvcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmliZVRvU3RhdHVzQ2hhZ25lcygpO1xuICB9XG5cbiAgcHVibGljIGdldE1lc3NhZ2VTZWxlY3RvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5fZm9ybURpcmVjdGl2ZT8ubWVzc2FnZVNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybURpcmVjdGl2ZS5tZXNzYWdlU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEhpbnRXcmFwcGVyKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaW50U2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LmhpbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUuaGludFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwcGVyU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVyU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUud3JhcHBlclNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRsYWJlbFNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/LmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLmxhYmVsU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFdyYXBwZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLl9nZXRXcmFwcGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAod3JhcHBlcikge1xuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8qXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZvcm0tZmllbGRcIj4gIDwtLSBGaWVsZCBXcmFwcGVyIENsYXNzLiBMb29rIGZvciBwYXJlbnRzIGZyb20gdGhlIG5hdGl2ZSBlbGVtZW50IHdpdGggdGhlIG1hdGNoaW5nIHdyYXBwZXJTZWxlY3Rvci4gSWYgbm90IGZvdW5kIGRlZmF1bHRzIHRvIG5hdGl2ZSBlbGVtZW50LlxuICAgICAgPGlucHV0PlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPiA8LS0gTWVzc2FnZSBTZWxlY3Rvci4gTG9vayBmb3IgdGhlIGVsZW1lbnQgd2l0aCBjbGFzcyAuZnMtZm9ybS1tZXNzYWdlIG9yIG1lc3NhZ2VTZWxlY3RvclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLWhpbnRcIj48L2Rpdj4gPC0tIEhpbnQgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0taGludCBvciBoaW50U2VsZWN0b3JcbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICovXG5cbiAgcHJpdmF0ZSBnZXQgX3Nob3VsZEVycm9yQmVSZW5kZXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sLmludmFsaWRcbiAgICAgICYmICh0aGlzLl9uZ0NvbnRyb2wuZGlydHkgfHwgdGhpcy5fZm9ybURpcmVjdGl2ZT8ubmdGb3JtPy5zdWJtaXR0ZWQpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyMjtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5kaXJ0eSA/IHRoaXMuX2dldEVycm9yKHRoaXMuX25nQ29udHJvbCkgOiBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fc2hvdWxkRXJyb3JCZVJlbmRlcmVkICYmIGVycm9yKSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnbmctaW52YWxpZCcsICduZy1kaXJ0eScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCduZy1pbnZhbGlkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpO1xuICAgXG4gICAgICBpZiAoIW1lc3NhZ2VXcmFwcGVyKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlXG4gICAgICAgICAgLndhcm4oYEZhaWxlZCB0byBsb2NhdGUgJHsgIHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCl9YCwgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MobWVzc2FnZVdyYXBwZXIsICdmcy1mb3JtLW1lc3NhZ2UnKTtcblxuICAgICAgaWYgKHRoaXMuYXBwZW5kTWVzc2FnZUNsYXNzKSB7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG1lc3NhZ2VXcmFwcGVyLCB0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlbmRlckhpbnQoZXJyb3IsIG1lc3NhZ2VXcmFwcGVyKTtcbiAgICAgIHRoaXMuX3JlbmRlckVycm9yKHdyYXBwZXIsIG1lc3NhZ2VXcmFwcGVyLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJIaW50KGVycm9yLCBtZXNzYWdlV3JhcHBlcikge1xuICAgIGNvbnN0IGhpbnRzID0gW1xuICAgICAgLi4ubWVzc2FnZVdyYXBwZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1tZGMtZm9ybS1maWVsZC1oaW50JyksXG4gICAgXTtcblxuICAgIGNvbnN0IGhpbnRXcmFwcGVyOiBIVE1MRWxlbWVudCA9IHRoaXMuZ2V0SGludFdyYXBwZXIoKTtcbiAgICBpZiAoaGludFdyYXBwZXIpIHtcbiAgICAgIGhpbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZzLWZvcm0taGludC13cmFwcGVyJyk7XG4gICAgfVxuXG4gICAgaGludHMuZm9yRWFjaCgoaGludCkgPT4ge1xuICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKGhpbnQsICdkaXNwbGF5JywgZXJyb3IgPyAnbm9uZScgOiAnYmxvY2snKTtcblxuICAgICAgaWYgKHRoaXMuYXBwZW5kSGludENsYXNzKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhoaW50LCAnZnMtZm9ybS1oaW50Jyk7XG4gICAgICAgIGlmKHRoaXMuYXBwZW5kSGludENsYXNzKSB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGhpbnQsIHRoaXMuYXBwZW5kSGludENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJFcnJvcih3cmFwcGVyLCBtZXNzYWdlV3JhcHBlciwgZXJyb3IpIHtcbiAgICBsZXQgZXJyb3JXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZnMtZm9ybS1lcnJvcicpO1xuICAgIGlmIChlcnJvcldyYXBwZXIpIHtcbiAgICAgIGVycm9yV3JhcHBlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3Nob3VsZEVycm9yQmVSZW5kZXJlZCB8fCAhZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcldyYXBwZXIgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgJ2ZzLWZvcm0tZXJyb3InKTtcbiAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCBgZnMtZm9ybS1lcnJvci0ke2Vycm9yLm5hbWV9YCk7XG5cbiAgICBpZih0aGlzLmFwcGVuZEVycm9yQ2xhc3MpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhlcnJvcldyYXBwZXIsIHRoaXMuYXBwZW5kRXJyb3JDbGFzcyk7XG4gICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCBgJHt0aGlzLmFwcGVuZEVycm9yQ2xhc3N9LSR7ZXJyb3IubmFtZX1gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXJyb3JUZXh0ID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZVRleHQoZXJyb3IubWVzc2FnZSk7XG5cbiAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyLCBlcnJvclRleHQpO1xuXG4gICAgY29uc3QgaGludFdyYXBwZXI6IEhUTUxFbGVtZW50ID0gbWVzc2FnZVdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gICAgaWYgKGhpbnRXcmFwcGVyKSB7XG4gICAgICBoaW50V3JhcHBlci5wcmVwZW5kKGVycm9yV3JhcHBlcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmVUb1N0YXR1c0NoYWduZXMoKTp2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG4gICAgaWYgKCFub2RlIHx8IGNvdW50ID4gMTApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRXcmFwcGVyU2VsZWN0b3IoKSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRXcmFwcGVyKG5vZGUucGFyZW50Tm9kZSwgKytjb3VudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3BhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwkXFwoXFxkXFwpLywgbmFtZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbY29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0ZUFzeW5jKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBjb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICAgID8gW2NvbnRyb2wuYXN5bmNWYWxpZGF0b3IsIHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpXVxuICAgICAgICA6IHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbn1cbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQW1CLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHlCQUF5QixHQUMxQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHekQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBZ0IxQyxNQUFNLE9BQU8sa0JBQWtCO0lBRWIsZUFBZSxDQUFpQjtJQUNoQyxlQUFlLENBQWlCO0lBQ2hDLFlBQVksQ0FBaUI7SUFDN0IsYUFBYSxDQUFpQjtJQUM5QixrQkFBa0IsQ0FBUztJQUMzQixnQkFBZ0IsQ0FBUztJQUN6QixlQUFlLENBQVM7SUFFeEMsSUFDVyxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCO1lBQ3pCLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVULFdBQVcsR0FBRyxNQUFNLENBQUMsVUFB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O2dCQUM1QyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3VHQXRVVSxrQkFBa0I7MkZBQWxCLGtCQUFrQiwwV0FMbEI7WUFDVCx5QkFBeUI7U0FDMUI7OzJGQUdVLGtCQUFrQjtrQkFQOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBR2lCLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUdLLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTmdDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGtleXMsIHZhbHVlcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7XG4gIFZBTElEQVRFX01FU1NBR0VTLFxuICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSLFxufSBmcm9tICcuLi8uLi9wcm92aWRlcnMvdmFsaWRhdGUtbWVzc2FnZXMucHJvdmlkZXInO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5cblxuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBGc0NvbnRyb2xEaXJlY3RpdmUge1xuICB2YWxpZGF0ZT8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG4gIHZhbGlkYXRlQXN5bmM/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD47XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybUNvbnRyb2xdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnNDb250cm9sRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyB3cmFwcGVyU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbWVzc2FnZVNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGhpbnRTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbFNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZE1lc3NhZ2VDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kRXJyb3JDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kSGludENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWxpZGF0ZU1lc3NhZ2VzKG1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5fdmFsaWRhdGVNZXNzYWdlcyA9IHtcbiAgICAgIC4uLnRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMsXG4gICAgICAuLi5tZXNzYWdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVycm9ycyA9IFtdO1xuXG4gIHByb3RlY3RlZCBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJvdGVjdGVkIF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByb3RlY3RlZCBfdmFsaWRhdGVNZXNzYWdlcyA9IGluamVjdChWQUxJREFURV9NRVNTQUdFUywgeyBzZWxmOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX25nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfZm9ybURpcmVjdGl2ZSA9IGluamVjdDxGc0Zvcm1EaXJlY3RpdmU+KEZzRm9ybURpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfYm91bmRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBuZ01vZGVsJywgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWx3YXlzIHJlYWQgdGhlIGNvbnRyb2wgdGhyb3VnaCB0aGUgZGlyZWN0aXZlIHJhdGhlciB0aGFuIGNhY2hpbmcgaXQuXG4gICAqXG4gICAqIE5nRm9ybS5hZGRDb250cm9sKCkgcnVucyBpbiBhIG1pY3JvdGFzayBhbmQgcmVhc3NpZ25zIGRpci5jb250cm9sIHRvXG4gICAqIHdoYXRldmVyIEZvcm1Hcm91cC5yZWdpc3RlckNvbnRyb2woKSByZXR1cm5zIOKAlCBhbmQgcmVnaXN0ZXJDb250cm9sKCkgaGFuZHNcbiAgICogYmFjayB0aGUgRVhJU1RJTkcgY29udHJvbCB3aGVuIHRoZSBuYW1lIGlzIGFscmVhZHkgdGFrZW4gKHR3byBmaWVsZHNcbiAgICogc2hhcmluZyBhIG5hbWUsIG9yIGxhemlseSBjcmVhdGVkIGNvbnRlbnQgcmUtcmVnaXN0ZXJpbmcpLiBBIGNvbnRyb2xcbiAgICogY2FwdHVyZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGlzIHRoZW4gYW4gb3JwaGFuOiBpdCBuZXZlciBlbWl0cyBhZ2Fpbiwgc29cbiAgICogc3RhdHVzQ2hhbmdlcyBuZXZlciBmaXJlcyBhbmQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBpcyBuZXZlciByZW5kZXJlZC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgX2NvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sPy5jb250cm9sO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3NldHVwVmFsaWRhdG9ycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb1N0YXR1c0NoYWduZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXNzYWdlU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWVzc2FnZVNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Zvcm1EaXJlY3RpdmU/Lm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXJlY3RpdmUubWVzc2FnZVNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRIaW50V3JhcHBlcigpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpO1xuICB9XG5cbiAgcHVibGljIGdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhpbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuaGludFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy5oaW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLmhpbnRTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMud3JhcHBlclNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy53cmFwcGVyU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtRGlyZWN0aXZlLndyYXBwZXJTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0bGFiZWxTZWxlY3RvcigpOiBzdHJpbmcge1xuXG4gICAgaWYgKHRoaXMubGFiZWxTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9mb3JtRGlyZWN0aXZlPy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybURpcmVjdGl2ZS5sYWJlbFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRXcmFwcGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5fZ2V0V3JhcHBlcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkXCI+ICA8LS0gRmllbGQgV3JhcHBlciBDbGFzcy4gTG9vayBmb3IgcGFyZW50cyBmcm9tIHRoZSBuYXRpdmUgZWxlbWVudCB3aXRoIHRoZSBtYXRjaGluZyB3cmFwcGVyU2VsZWN0b3IuIElmIG5vdCBmb3VuZCBkZWZhdWx0cyB0byBuYXRpdmUgZWxlbWVudC5cbiAgICAgIDxpbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj4gPC0tIE1lc3NhZ2UgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0tbWVzc2FnZSBvciBtZXNzYWdlU2VsZWN0b3JcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1oaW50XCI+PC9kaXY+IDwtLSBIaW50IFNlbGVjdG9yLiBMb29rIGZvciB0aGUgZWxlbWVudCB3aXRoIGNsYXNzIC5mcy1mb3JtLWhpbnQgb3IgaGludFNlbGVjdG9yXG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAqL1xuXG4gIHByaXZhdGUgZ2V0IF9zaG91bGRFcnJvckJlUmVuZGVyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5pbnZhbGlkXG4gICAgICAmJiAodGhpcy5fbmdDb250cm9sLmRpcnR5IHx8IHRoaXMuX2Zvcm1EaXJlY3RpdmU/Lm5nRm9ybT8uc3VibWl0dGVkKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjI7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuZGlydHkgPyB0aGlzLl9nZXRFcnJvcih0aGlzLl9uZ0NvbnRyb2wpIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3Nob3VsZEVycm9yQmVSZW5kZXJlZCAmJiBlcnJvcikge1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ25nLWludmFsaWQnLCAnbmctZGlydHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnbmctaW52YWxpZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpKTtcbiAgIFxuICAgICAgaWYgKCFtZXNzYWdlV3JhcHBlcikge1xuICAgICAgICByZXR1cm4gY29uc29sZVxuICAgICAgICAgIC53YXJuKGBGYWlsZWQgdG8gbG9jYXRlICR7ICB0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpfWAsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG1lc3NhZ2VXcmFwcGVyLCAnZnMtZm9ybS1tZXNzYWdlJyk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcykge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhtZXNzYWdlV3JhcHBlciwgdGhpcy5hcHBlbmRNZXNzYWdlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW5kZXJIaW50KGVycm9yLCBtZXNzYWdlV3JhcHBlcik7XG4gICAgICB0aGlzLl9yZW5kZXJFcnJvcih3cmFwcGVyLCBtZXNzYWdlV3JhcHBlciwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVuZGVySGludChlcnJvciwgbWVzc2FnZVdyYXBwZXIpIHtcbiAgICBjb25zdCBoaW50cyA9IFtcbiAgICAgIC4uLm1lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtbWRjLWZvcm0tZmllbGQtaGludCcpLFxuICAgIF07XG5cbiAgICBjb25zdCBoaW50V3JhcHBlcjogSFRNTEVsZW1lbnQgPSB0aGlzLmdldEhpbnRXcmFwcGVyKCk7XG4gICAgaWYgKGhpbnRXcmFwcGVyKSB7XG4gICAgICBoaW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmcy1mb3JtLWhpbnQtd3JhcHBlcicpO1xuICAgIH1cblxuICAgIGhpbnRzLmZvckVhY2goKGhpbnQpID0+IHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShoaW50LCAnZGlzcGxheScsIGVycm9yID8gJ25vbmUnIDogJ2Jsb2NrJyk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoaGludCwgJ2ZzLWZvcm0taGludCcpO1xuICAgICAgICBpZih0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhoaW50LCB0aGlzLmFwcGVuZEhpbnRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVuZGVyRXJyb3Iod3JhcHBlciwgbWVzc2FnZVdyYXBwZXIsIGVycm9yKSB7XG4gICAgbGV0IGVycm9yV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcignLmZzLWZvcm0tZXJyb3InKTtcbiAgICBpZiAoZXJyb3JXcmFwcGVyKSB7XG4gICAgICBlcnJvcldyYXBwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zaG91bGRFcnJvckJlUmVuZGVyZWQgfHwgIWVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3JXcmFwcGVyID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyhlcnJvcldyYXBwZXIsICdmcy1mb3JtLWVycm9yJyk7XG4gICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgYGZzLWZvcm0tZXJyb3ItJHtlcnJvci5uYW1lfWApO1xuXG4gICAgaWYodGhpcy5hcHBlbmRFcnJvckNsYXNzKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCB0aGlzLmFwcGVuZEVycm9yQ2xhc3MpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgYCR7dGhpcy5hcHBlbmRFcnJvckNsYXNzfS0ke2Vycm9yLm5hbWV9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGVycm9yVGV4dCA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVUZXh0KGVycm9yLm1lc3NhZ2UpO1xuXG4gICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlciwgZXJyb3JUZXh0KTtcblxuICAgIGNvbnN0IGhpbnRXcmFwcGVyOiBIVE1MRWxlbWVudCA9IG1lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgIGlmIChoaW50V3JhcHBlcikge1xuICAgICAgaGludFdyYXBwZXIucHJlcGVuZChlcnJvcldyYXBwZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfc3Vic2NyaWJlVG9TdGF0dXNDaGFnbmVzKCk6dm9pZCB7XG4gICAgLy8gUmVnaXN0cmF0aW9uIGlzIGRlZmVycmVkIHRvIGEgbWljcm90YXNrIGJ5IE5nRm9ybS5hZGRDb250cm9sKCksIHNvIHdhaXRcbiAgICAvLyBmb3IgaXQgdG8gc2V0dGxlIGJlZm9yZSBiaW5kaW5nIOKAlCBvdGhlcndpc2Ugd2Ugc3Vic2NyaWJlIHRvIHRoZSBjb250cm9sXG4gICAgLy8gdGhhdCBpcyBhYm91dCB0byBiZSByZXBsYWNlZC5cbiAgICByZXNvbHZlZFByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuX2JpbmRTdGF0dXNDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYmluZFN0YXR1c0NoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2NvbnRyb2w7XG5cbiAgICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbCA9PT0gdGhpcy5fYm91bmRDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYm91bmRDb250cm9sID0gY29udHJvbDtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC5uZXh0KCk7XG5cbiAgICBjb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fc3RhdHVzQ2hhbmdlcyQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sIGNhbiBzdGlsbCBiZSBzd2FwcGVkIG91dCBmcm9tIHVuZGVyIHVzIChhIHNpYmxpbmcgd2l0aFxuICAgICAgICAvLyB0aGUgc2FtZSBuYW1lIHJlZ2lzdGVyaW5nIGxhdGVyKSwgc28gcmUtYmluZCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAgICBpZiAodGhpcy5fY29udHJvbCAhPT0gdGhpcy5fYm91bmRDb250cm9sKSB7XG4gICAgICAgICAgdGhpcy5fYmluZFN0YXR1c0NoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG4gICAgaWYgKCFub2RlIHx8IGNvdW50ID4gMTApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRXcmFwcGVyU2VsZWN0b3IoKSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRXcmFwcGVyKG5vZGUucGFyZW50Tm9kZSwgKytjb3VudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3BhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwkXFwoXFxkXFwpLywgbmFtZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbY29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0ZUFzeW5jKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBjb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICAgID8gW2NvbnRyb2wuYXN5bmNWYWxpZGF0b3IsIHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpXVxuICAgICAgICA6IHRoaXMudmFsaWRhdGVBc3luYy5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1657,7 +1657,7 @@ class FsFormDialogActionsComponent {
1657
1657
  return withinSameDialog(owner, this._dialogRef) ? owner : null;
1658
1658
  }
1659
1659
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormDialogActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1660
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsFormDialogActionsComponent, isStandalone: true, selector: "fs-form-dialog-actions", inputs: { save: "save", create: "create", close: "close", done: "done", closeData: "closeData", name: "name" }, host: { properties: { "class.save-create": "showSave || create" }, classAttribute: "form-buttons" }, ngImport: i0, template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;width:100%}:host.save-create .close-button{float:right}@media (max-width: 599px){:host{display:flex;flex-direction:column;flex-wrap:nowrap}:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0 0 4px;margin-inline:0!important}:host ::ng-deep button:last-child,:host ::ng-deep .mat-button:last-child,:host ::ng-deep .mdc-button:last-child,:host ::ng-deep .mat-mdc-button-base:last-child{margin-bottom:0}}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "submitDisabled"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: ["closeData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1660
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsFormDialogActionsComponent, isStandalone: true, selector: "fs-form-dialog-actions", inputs: { save: "save", create: "create", close: "close", done: "done", closeData: "closeData", name: "name" }, host: { properties: { "class.save-create": "showSave || create" }, classAttribute: "form-buttons" }, ngImport: i0, template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;align-items:center;gap:4px;width:100%}:host.save-create .close-button{float:right}:host ::ng-deep>*{margin-inline:0!important}@media (max-width: 599px){:host{flex-direction:column;flex-wrap:nowrap;align-items:stretch}:host ::ng-deep>*,:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0!important}}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "submitDisabled"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: ["closeData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1661
1661
  }
1662
1662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormDialogActionsComponent, decorators: [{
1663
1663
  type: Component,
@@ -1670,7 +1670,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1670
1670
  MatDialogClose,
1671
1671
  NgTemplateOutlet,
1672
1672
  FsFormDialogCloseDirective,
1673
- ], template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;width:100%}:host.save-create .close-button{float:right}@media (max-width: 599px){:host{display:flex;flex-direction:column;flex-wrap:nowrap}:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0 0 4px;margin-inline:0!important}:host ::ng-deep button:last-child,:host ::ng-deep .mat-button:last-child,:host ::ng-deep .mdc-button:last-child,:host ::ng-deep .mat-mdc-button-base:last-child{margin-bottom:0}}\n"] }]
1673
+ ], template: "@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>", styles: ["@charset \"UTF-8\";@media (max-width: 599px){h1[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-xs*=fs-heading][fs\\.lt-xs*=\".top-none\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-sm*=fs-heading][fs\\.lt-sm*=\".top-none\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h2[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"],h3[class*=\".top\"][fs\\.lt-md*=fs-heading][fs\\.lt-md*=\".top-none\"]{margin-top:0}}div[class*=fs-delimit]:not([class*=\".middot\"])>:not(:last-child):after{content:\",\\a0\"}div[class*=fs-delimit][class*=\".middot\"]>:not(:last-child):after{content:\"\\a0\\b7\\a0\"}div[class*=fs-delimit]>*{display:inline-flex}:host{display:flex;align-items:center;gap:4px;width:100%}:host.save-create .close-button{float:right}:host ::ng-deep>*{margin-inline:0!important}@media (max-width: 599px){:host{flex-direction:column;flex-wrap:nowrap;align-items:stretch}:host ::ng-deep>*,:host ::ng-deep button,:host ::ng-deep .mat-button,:host ::ng-deep .mdc-button,:host ::ng-deep .mat-mdc-button-base{width:100%;margin:0!important}}\n"] }]
1674
1674
  }], propDecorators: { save: [{
1675
1675
  type: Input
1676
1676
  }], create: [{
@@ -1759,6 +1759,7 @@ function messageProviderFactory() {
1759
1759
  return { ...ERROR_MESSAGES };
1760
1760
  }
1761
1761
 
1762
+ const resolvedPromise = Promise.resolve();
1762
1763
  class FsControlDirective {
1763
1764
  wrapperSelector;
1764
1765
  messageSelector;
@@ -1774,7 +1775,6 @@ class FsControlDirective {
1774
1775
  };
1775
1776
  }
1776
1777
  errors = [];
1777
- _control;
1778
1778
  _elementRef = inject(ElementRef);
1779
1779
  _renderer2 = inject(Renderer2);
1780
1780
  _injector = inject(Injector);
@@ -1782,19 +1782,31 @@ class FsControlDirective {
1782
1782
  _ngControl = inject(NgControl, { optional: true });
1783
1783
  _formDirective = inject(FsFormDirective, { optional: true });
1784
1784
  _destroy$ = new Subject();
1785
+ _statusChanges$ = new Subject();
1786
+ _boundControl;
1785
1787
  constructor() {
1786
- const _ngControl = this._ngControl;
1787
- if (_ngControl) {
1788
- this._control = _ngControl.control;
1789
- }
1790
- else {
1788
+ if (!this._ngControl) {
1791
1789
  console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);
1792
1790
  }
1793
1791
  }
1792
+ /**
1793
+ * Always read the control through the directive rather than caching it.
1794
+ *
1795
+ * NgForm.addControl() runs in a microtask and reassigns dir.control to
1796
+ * whatever FormGroup.registerControl() returns — and registerControl() hands
1797
+ * back the EXISTING control when the name is already taken (two fields
1798
+ * sharing a name, or lazily created content re-registering). A control
1799
+ * captured in the constructor is then an orphan: it never emits again, so
1800
+ * statusChanges never fires and the validation message is never rendered.
1801
+ */
1802
+ get _control() {
1803
+ return this._ngControl?.control;
1804
+ }
1794
1805
  ngOnInit() {
1795
1806
  this._setupValidators();
1796
1807
  }
1797
1808
  ngOnDestroy() {
1809
+ this._statusChanges$.complete();
1798
1810
  this._destroy$.next(null);
1799
1811
  this._destroy$.complete();
1800
1812
  }
@@ -1936,11 +1948,30 @@ class FsControlDirective {
1936
1948
  }
1937
1949
  }
1938
1950
  _subscribeToStatusChagnes() {
1939
- if (this._control) {
1940
- this._control.statusChanges
1941
- .pipe(takeUntil(this._destroy$))
1942
- .subscribe(this.render.bind(this));
1951
+ // Registration is deferred to a microtask by NgForm.addControl(), so wait
1952
+ // for it to settle before binding — otherwise we subscribe to the control
1953
+ // that is about to be replaced.
1954
+ resolvedPromise
1955
+ .then(() => this._bindStatusChanges());
1956
+ }
1957
+ _bindStatusChanges() {
1958
+ const control = this._control;
1959
+ if (!control || control === this._boundControl) {
1960
+ return;
1943
1961
  }
1962
+ this._boundControl = control;
1963
+ this._statusChanges$.next();
1964
+ control.statusChanges
1965
+ .pipe(takeUntil(this._statusChanges$), takeUntil(this._destroy$))
1966
+ .subscribe(() => {
1967
+ // The control can still be swapped out from under us (a sibling with
1968
+ // the same name registering later), so re-bind before rendering.
1969
+ if (this._control !== this._boundControl) {
1970
+ this._bindStatusChanges();
1971
+ }
1972
+ this.render();
1973
+ });
1974
+ this.render();
1944
1975
  }
1945
1976
  _getWrapper(node, count = 0) {
1946
1977
  if (!node || count > 10) {