@firestitch/form 18.0.29 → 18.0.30

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.
Files changed (32) hide show
  1. package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +14 -2
  2. package/app/directives/button.directive.d.ts +1 -1
  3. package/app/directives/form/form.directive.d.ts +87 -29
  4. package/app/directives/form-base/form-base.directive.d.ts +73 -5
  5. package/app/directives/form-container/form-container.directive.d.ts +80 -0
  6. package/app/directives/form-container/index.d.ts +1 -0
  7. package/app/directives/index.d.ts +1 -1
  8. package/app/fs-form.module.d.ts +2 -2
  9. package/app/interfaces/form-owner.d.ts +17 -0
  10. package/app/interfaces/index.d.ts +1 -0
  11. package/app/services/fsform.service.d.ts +5 -5
  12. package/esm2022/app/components/form-dialog-actions/form-dialog-actions.component.mjs +41 -17
  13. package/esm2022/app/directives/button.directive.mjs +13 -8
  14. package/esm2022/app/directives/form/form.directive.mjs +238 -241
  15. package/esm2022/app/directives/form-base/form-base.directive.mjs +239 -6
  16. package/esm2022/app/directives/form-container/form-container.directive.mjs +164 -0
  17. package/esm2022/app/directives/form-container/index.mjs +2 -0
  18. package/esm2022/app/directives/index.mjs +2 -2
  19. package/esm2022/app/fs-form.module.mjs +6 -6
  20. package/esm2022/app/guards/form-deactivate.guard.mjs +1 -1
  21. package/esm2022/app/interfaces/form-owner.mjs +2 -0
  22. package/esm2022/app/interfaces/index.mjs +2 -1
  23. package/esm2022/app/services/fsform.service.mjs +10 -7
  24. package/esm2022/public_api.mjs +2 -2
  25. package/fesm2022/firestitch-form.mjs +702 -317
  26. package/fesm2022/firestitch-form.mjs.map +1 -1
  27. package/package.json +1 -1
  28. package/public_api.d.ts +2 -1
  29. package/app/directives/form-group/form-group.directive.d.ts +0 -15
  30. package/app/directives/form-group/index.d.ts +0 -1
  31. package/esm2022/app/directives/form-group/form-group.directive.mjs +0 -35
  32. package/esm2022/app/directives/form-group/index.mjs +0 -2
@@ -1,25 +1,62 @@
1
- import { ChangeDetectorRef, ContentChildren, Directive, inject, Input, NgZone, QueryList, } from '@angular/core';
1
+ import { ChangeDetectorRef, ContentChildren, Directive, ElementRef, inject, Input, NgZone, QueryList, } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { MatDialogRef } from '@angular/material/dialog';
2
4
  import { MatTabGroup } from '@angular/material/tabs';
3
- import { of, Subject } from 'rxjs';
4
- import { filter, switchMap, takeUntil, tap } from 'rxjs/operators';
5
+ import { DrawerRef } from '@firestitch/drawer';
6
+ import { defer, fromEvent, iif, of, Subject } from 'rxjs';
7
+ import { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
8
+ import { ConfirmResult } from '../../enums';
9
+ import { FormStatus } from '../../enums/form-status';
10
+ import { FormDeactivateGuard } from '../../guards/form-deactivate.guard';
5
11
  import { confirmResultContinue } from '../../helpers';
12
+ import { getActiveRoute } from '../../helpers/get-active-route';
13
+ import { FsForm } from '../../services/fsform.service';
6
14
  import * as i0 from "@angular/core";
15
+ /**
16
+ * Shared by the two things that can own a set of forms: an `fsForm` sitting at
17
+ * the root of its linked set, and an `fsFormContainer` holding forms that are
18
+ * siblings rather than nested.
19
+ *
20
+ * It holds the submit-button registry both of them expose to buttons, and the
21
+ * lifecycle that belongs to the set as a whole rather than to any one form -
22
+ * the dialog backdrop and Escape, Ctrl+S, the browser close prompt, the drawer
23
+ * and tab-switch confirms. Exactly one owner registers that lifecycle; see
24
+ * `_registerOwnerLifecycle`.
25
+ */
7
26
  export class FsFormBaseDirective {
8
27
  confirmTabs = true;
9
28
  tabGroup;
29
+ confirm = true;
30
+ confirmDialog = true;
31
+ confirmDrawer = true;
32
+ confirmBrowser = true;
33
+ shortcuts = true; // Ctrl + s
34
+ deactivationGuard = true;
10
35
  _ngZone = inject(NgZone);
11
36
  _cdRef = inject(ChangeDetectorRef);
37
+ _element = inject(ElementRef);
38
+ _form = inject(FsForm);
39
+ _route = inject(ActivatedRoute);
40
+ _dialogRef = inject(MatDialogRef, { optional: true });
41
+ _drawerRef = inject(DrawerRef, { optional: true });
42
+ _dialogBackdropEscape = false;
43
+ _activatedRouteConfig;
12
44
  _tabGroups = new QueryList();
13
45
  _buttons = new QueryList();
14
46
  _activeSubmitButton;
47
+ _confirmTabGroups = new WeakSet();
15
48
  _destroy$ = new Subject();
49
+ ngOnInit() {
50
+ this._registerOwnerLifecycle();
51
+ }
16
52
  ngAfterContentInit() {
17
- this._registerConfirmTabs();
53
+ this._registerOwnerContentLifecycle();
18
54
  }
19
55
  get destroy$() {
20
56
  return this._destroy$.asObservable();
21
57
  }
22
58
  ngOnDestroy() {
59
+ this._cleanupCanDeactivate();
23
60
  this._destroy$.next(null);
24
61
  this._destroy$.complete();
25
62
  }
@@ -52,6 +89,160 @@ export class FsFormBaseDirective {
52
89
  ]);
53
90
  this._buttons.notifyOnChanges();
54
91
  }
92
+ /**
93
+ * Everything here acts on the form set as a whole, so exactly one thing may
94
+ * register it. A form linked into a parent defers to that parent; every form
95
+ * inside a container defers to the container. Registering twice would put two
96
+ * confirms on the same backdrop click and two handlers on the same Ctrl+S.
97
+ */
98
+ _registerOwnerLifecycle() {
99
+ if (this.deactivationGuard) {
100
+ this._registerCanDeactivateGuard();
101
+ }
102
+ this._registerConfirmDialogBackdropEscape();
103
+ this._listenHotKeys();
104
+ this._listenWindowClose();
105
+ }
106
+ /** The half of the same ownership that needs projected content resolved. */
107
+ _registerOwnerContentLifecycle() {
108
+ this._registerConfirmTabs();
109
+ this._registerConfirmDrawerClose();
110
+ this._registerDrawerClose();
111
+ }
112
+ /**
113
+ * Whether the element is inside what this owner covers. Overridden by the
114
+ * container, whose own element is a poor proxy: it may be an `<ng-container>`,
115
+ * which is a comment node and contains nothing.
116
+ */
117
+ _containsElement(el) {
118
+ return this._nodeContains(this._element.nativeElement, el);
119
+ }
120
+ _nodeContains(root, el) {
121
+ if (!root || !el) {
122
+ return false;
123
+ }
124
+ if (el === root) {
125
+ return true;
126
+ }
127
+ return el.parentElement ? this._nodeContains(root, el.parentElement) : false;
128
+ }
129
+ _formClose() {
130
+ if (this.confirm && this.confirmDialog) {
131
+ this.triggerConfirm()
132
+ .pipe(filter((result) => confirmResultContinue(result)), switchMap((result) => {
133
+ return result === ConfirmResult.NoChanges || result === ConfirmResult.Discard
134
+ ? of(null)
135
+ : this.submitted$;
136
+ }), takeUntil(this._destroy$))
137
+ .subscribe((result) => {
138
+ this._dialogRef.close(result?.response);
139
+ });
140
+ }
141
+ else {
142
+ this._dialogRef.close(null);
143
+ }
144
+ }
145
+ _listenWindowClose() {
146
+ fromEvent(window, 'beforeunload')
147
+ .pipe(takeUntil(this._destroy$))
148
+ .subscribe((event) => {
149
+ if (this.confirm && this.confirmBrowser && this.dirtyLinked) {
150
+ event.returnValue = false;
151
+ }
152
+ });
153
+ }
154
+ _activeDialog(el, dialog) {
155
+ return this._nodeContains(dialog, el);
156
+ }
157
+ _listenHotKeys() {
158
+ this._ngZone.runOutsideAngular(() => {
159
+ fromEvent(document, 'keydown')
160
+ .pipe(takeUntil(this._destroy$))
161
+ .subscribe((event) => {
162
+ if (this._dialogBackdropEscape && event.code === 'Escape') {
163
+ const cdkOverlayPane = Array
164
+ .from(document.querySelectorAll('.cdk-overlay-pane')).pop();
165
+ const activeDialog = this
166
+ ._activeDialog(document.getElementById(this._dialogRef.id), cdkOverlayPane);
167
+ if (activeDialog) {
168
+ this._ngZone.run(() => {
169
+ this._formClose();
170
+ });
171
+ }
172
+ }
173
+ if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {
174
+ event.preventDefault();
175
+ if (this.shortcuts) {
176
+ if (this._containsElement(document.activeElement)) {
177
+ this._ngZone.run(() => {
178
+ this.triggerSubmit();
179
+ });
180
+ }
181
+ }
182
+ }
183
+ });
184
+ });
185
+ }
186
+ _registerConfirmDialogBackdropEscape() {
187
+ if (this._dialogRef) {
188
+ this._dialogBackdropEscape = !this._dialogRef?.disableClose;
189
+ if (this._dialogBackdropEscape) {
190
+ this._dialogRef.backdropClick()
191
+ .pipe(takeUntil(this._destroy$))
192
+ .subscribe(() => {
193
+ this._formClose();
194
+ });
195
+ this._destroy$
196
+ .subscribe(() => {
197
+ this._dialogRef.disableClose = false;
198
+ });
199
+ }
200
+ }
201
+ }
202
+ _registerDrawerClose() {
203
+ if (this._drawerRef) {
204
+ this._drawerRef.closeStart$
205
+ .pipe(takeUntil(this._destroy$))
206
+ .subscribe((subscriber) => {
207
+ if (this.submitting) {
208
+ this.status$
209
+ .pipe(filter((status) => status === FormStatus.Success || status === FormStatus.Error), takeUntil(this._destroy$))
210
+ .subscribe((status) => {
211
+ if (status === FormStatus.Success) {
212
+ subscriber.next(null);
213
+ subscriber.complete();
214
+ }
215
+ else {
216
+ subscriber.error();
217
+ }
218
+ });
219
+ }
220
+ else {
221
+ subscriber.next(null);
222
+ subscriber.complete();
223
+ }
224
+ });
225
+ }
226
+ }
227
+ _registerConfirmDrawerClose() {
228
+ if (this._drawerRef) {
229
+ this._drawerRef.closeStart$
230
+ .pipe(switchMap((subscriber) => {
231
+ return iif(() => !!this.confirm && this.confirmDrawer, this.triggerConfirm()
232
+ .pipe(map((result) => confirmResultContinue(result)), tap((result) => {
233
+ if (result) {
234
+ subscriber.next(null);
235
+ subscriber.complete();
236
+ }
237
+ })), defer(() => {
238
+ subscriber.next(null);
239
+ subscriber.complete();
240
+ return of(null);
241
+ }));
242
+ }), takeUntil(this._destroy$))
243
+ .subscribe();
244
+ }
245
+ }
55
246
  _registerConfirmTabs() {
56
247
  this._registerConfirmTabGroups(this._tabGroups.toArray());
57
248
  this._tabGroups.changes
@@ -66,6 +257,15 @@ export class FsFormBaseDirective {
66
257
  });
67
258
  }
68
259
  _registerConfirmTabGroup(tabGroup) {
260
+ // `_tabGroups.changes` re-emits the whole list, not just what arrived, and it
261
+ // emits every time a lazy tab body mounts a nested group. Groups already
262
+ // wired therefore come back around - so without this the outer group
263
+ // accumulates one subscription per emission, and a single click on it opens
264
+ // that many stacked confirm dialogs.
265
+ if (this._confirmTabGroups.has(tabGroup)) {
266
+ return;
267
+ }
268
+ this._confirmTabGroups.add(tabGroup);
69
269
  const confirmTabGroup = tabGroup;
70
270
  if (!confirmTabGroup._originalHandleClick) {
71
271
  confirmTabGroup._originalHandleClick = tabGroup._handleClick;
@@ -94,8 +294,29 @@ export class FsFormBaseDirective {
94
294
  }), takeUntil(this._destroy$))
95
295
  .subscribe();
96
296
  }
297
+ _registerCanDeactivateGuard() {
298
+ this._activatedRouteConfig = getActiveRoute(this._route)?.routeConfig;
299
+ if (!this._activatedRouteConfig) {
300
+ return;
301
+ }
302
+ this._form.registerFormDirective(this._activatedRouteConfig.component, this);
303
+ if (!Array.isArray(this._activatedRouteConfig.canDeactivate)) {
304
+ this._activatedRouteConfig.canDeactivate = [];
305
+ }
306
+ if (this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard) === -1) {
307
+ this._activatedRouteConfig.canDeactivate.push(FormDeactivateGuard);
308
+ }
309
+ }
310
+ _cleanupCanDeactivate() {
311
+ if (!this._activatedRouteConfig) {
312
+ return;
313
+ }
314
+ const guardIndex = this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard);
315
+ this._activatedRouteConfig.canDeactivate.splice(guardIndex, 1);
316
+ this._form.removeFormDirective(this._activatedRouteConfig.component);
317
+ }
97
318
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormBaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
98
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: FsFormBaseDirective, inputs: { confirmTabs: "confirmTabs", tabGroup: "tabGroup" }, queries: [{ propertyName: "_tabGroups", predicate: MatTabGroup, descendants: true }], ngImport: i0 });
319
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: FsFormBaseDirective, inputs: { confirmTabs: "confirmTabs", tabGroup: "tabGroup", confirm: "confirm", confirmDialog: "confirmDialog", confirmDrawer: "confirmDrawer", confirmBrowser: "confirmBrowser", shortcuts: "shortcuts", deactivationGuard: "deactivationGuard" }, queries: [{ propertyName: "_tabGroups", predicate: MatTabGroup, descendants: true }], ngImport: i0 });
99
320
  }
100
321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormBaseDirective, decorators: [{
101
322
  type: Directive
@@ -103,8 +324,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
103
324
  type: Input
104
325
  }], tabGroup: [{
105
326
  type: Input
327
+ }], confirm: [{
328
+ type: Input
329
+ }], confirmDialog: [{
330
+ type: Input
331
+ }], confirmDrawer: [{
332
+ type: Input
333
+ }], confirmBrowser: [{
334
+ type: Input
335
+ }], shortcuts: [{
336
+ type: Input
337
+ }], deactivationGuard: [{
338
+ type: Input
106
339
  }], _tabGroups: [{
107
340
  type: ContentChildren,
108
341
  args: [MatTabGroup, { descendants: true }]
109
342
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNdEQsTUFBTSxPQUFnQixtQkFBbUI7SUFHaEMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUduQixRQUFRLENBQWM7SUFFbkIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFHckMsVUFBVSxHQUEyQixJQUFJLFNBQVMsRUFBRSxDQUFDO0lBRXJELFFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBcUIsQ0FBQztJQUM5QyxtQkFBbUIsQ0FBb0I7SUFDdkMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFLakMsa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FB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YUFDekIsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEIsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFO3FCQUN6QixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxlQUFlLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNOLENBQUM7WUFFRCxlQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU1RSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7dUdBcEltQixtQkFBbUI7MkZBQW5CLG1CQUFtQixtSEFXdEIsV0FBVzs7MkZBWFIsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQUlELFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQU9FLFVBQVU7c0JBRGpCLGVBQWU7dUJBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb25maXJtUmVzdWx0IH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgY29uZmlybVJlc3VsdENvbnRpbnVlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBDb25maXJtQ29uZmlnLCBDb25maXJtVGFiR3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vYnV0dG9uLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1UYWJzID0gdHJ1ZTtcbiAgXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG5cbiAgcHJvdGVjdGVkIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNYXRUYWJHcm91cCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIF90YWJHcm91cHM6IFF1ZXJ5TGlzdDxNYXRUYWJHcm91cD4gPSBuZXcgUXVlcnlMaXN0KCk7XG5cbiAgcHJpdmF0ZSBfYnV0dG9ucyA9IG5ldyBRdWVyeUxpc3Q8RnNCdXR0b25EaXJlY3RpdmU+KCk7XG4gIHByaXZhdGUgX2FjdGl2ZVN1Ym1pdEJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmU7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgXG4gIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXR0aW5nOiBib29sZWFuO1xuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlybTogQ29uZmlybUNvbmZpZyB8IGJvb2xlYW47ICBcblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuICBcbiAgcHVibGljIGdldCBidXR0b25zKCk6IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4ge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25zO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVTdWJtaXRCdXR0b24oKTogRnNCdXR0b25EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gYnV0dG9uO1xuICB9XG5cbiAgcHVibGljIGFkZEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5fYnV0dG9uc1xuICAgICAgLnJlc2V0KFxuICAgICAgICBbXG4gICAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KCksXG4gICAgICAgICAgYnV0dG9uLFxuICAgICAgICBdKTtcblxuICAgIC8vIFF1ZXJ5TGlzdC5yZXNldCgpIGRvZXMgbm90IGVtaXQgYGNoYW5nZXNgOyBub3RpZnkgc28gc3Vic2NyaWJlcnMgKGUuZy4gdGhlXG4gICAgLy8gZm9ybSdzIGRpcnR5LXN1Ym1pdC1idXR0b24gdHJhY2tpbmcpIHJlYWN0IHRvIGJ1dHRvbnMgYmVpbmcgcmVnaXN0ZXJlZC5cbiAgICB0aGlzLl9idXR0b25zLm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYodGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID09PSBidXR0b24pIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fYnV0dG9ucy5yZXNldChcbiAgICAgIFtcbiAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAoYnV0dG9uICE9PSBpdGVtKSksXG4gICAgICBdKTtcblxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cbiAgXG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFicygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgdGhpcy5fdGFiR3JvdXBzLmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0aGlzLl90YWJHcm91cHMudG9BcnJheSgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRhYkdyb3VwczogTWF0VGFiR3JvdXBbXSk6IHZvaWQge1xuICAgIHRhYkdyb3Vwcy5mb3JFYWNoKCh0YWJHcm91cDogTWF0VGFiR3JvdXApID0+IHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwOiBNYXRUYWJHcm91cCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpcm1UYWJHcm91cCA9IHRhYkdyb3VwIGFzIENvbmZpcm1UYWJHcm91cDtcbiAgICBpZiAoIWNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljaykge1xuICAgICAgY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrID0gdGFiR3JvdXAuX2hhbmRsZUNsaWNrO1xuICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgIHRhYjogTWF0VGFiOyBcbiAgICAgICAgIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyOyBcbiAgICAgICAgIGlkeDogbnVtYmVyIFxuICAgICAgICB9PigpO1xuXG4gICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsZUNsaWNrID0gKHRhYjogTWF0VGFiLCB0YWJIZWFkZXI6IE1hdFRhYkhlYWRlciwgaWR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpcm1UYWJHcm91cC5faGFuZGxDbGljayQub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxDbGljayQubmV4dCh7IHRhYiwgdGFiSGVhZGVyLCBpZHggfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKHRhYiwgdGFiSGVhZGVyLCBpZHgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxDbGljayRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc3VibWl0dGluZyksXG4gICAgICAgIHN3aXRjaE1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZih0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtVGFicykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UYWJHcm91cC5zZWxlY3RlZEluZGV4ID0gZXZlbnQuaWR4O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljayhldmVudC50YWIsIGV2ZW50LnRhYkhlYWRlciwgZXZlbnQuaWR4KTtcblxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbiAgXG4gIFxuICBwdWJsaWMgYWJzdHJhY3QgdHJpZ2dlclN1Ym1pdCgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3QgdHJpZ2dlckNvbmZpcm0oKTogT2JzZXJ2YWJsZTxDb25maXJtUmVzdWx0Pjtcbn1cbiJdfQ==
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3ZEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxN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QUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7dUdBOVptQixtQkFBbUI7MkZBQW5CLG1CQUFtQix5U0FvQ3RCLFdBQVc7OzJGQXBDUixtQkFBbUI7a0JBRHhDLFNBQVM7OEJBSUQsV0FBVztzQkFEakIsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBY0UsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpaWYsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IENvbmZpcm1Db25maWcsIENvbmZpcm1UYWJHcm91cCwgU3VibWl0RXZlbnQsIFN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcblxuXG4vKipcbiAqIFNoYXJlZCBieSB0aGUgdHdvIHRoaW5ncyB0aGF0IGNhbiBvd24gYSBzZXQgb2YgZm9ybXM6IGFuIGBmc0Zvcm1gIHNpdHRpbmcgYXRcbiAqIHRoZSByb290IG9mIGl0cyBsaW5rZWQgc2V0LCBhbmQgYW4gYGZzRm9ybUNvbnRhaW5lcmAgaG9sZGluZyBmb3JtcyB0aGF0IGFyZVxuICogc2libGluZ3MgcmF0aGVyIHRoYW4gbmVzdGVkLlxuICpcbiAqIEl0IGhvbGRzIHRoZSBzdWJtaXQtYnV0dG9uIHJlZ2lzdHJ5IGJvdGggb2YgdGhlbSBleHBvc2UgdG8gYnV0dG9ucywgYW5kIHRoZVxuICogbGlmZWN5Y2xlIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gdG8gYW55IG9uZSBmb3JtIC1cbiAqIHRoZSBkaWFsb2cgYmFja2Ryb3AgYW5kIEVzY2FwZSwgQ3RybCtTLCB0aGUgYnJvd3NlciBjbG9zZSBwcm9tcHQsIHRoZSBkcmF3ZXJcbiAqIGFuZCB0YWItc3dpdGNoIGNvbmZpcm1zLiBFeGFjdGx5IG9uZSBvd25lciByZWdpc3RlcnMgdGhhdCBsaWZlY3ljbGU7IHNlZVxuICogYF9yZWdpc3Rlck93bmVyTGlmZWN5Y2xlYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybVRhYnMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm06IENvbmZpcm1Db25maWcgfCBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybURpYWxvZyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1EcmF3ZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtQnJvd3NlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3J0Y3V0cyA9IHRydWU7IC8vIEN0cmwgKyBzXG5cbiAgQElucHV0KClcbiAgcHVibGljIGRlYWN0aXZhdGlvbkd1YXJkID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcm90ZWN0ZWQgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIF9lbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgX2Zvcm0gPSBpbmplY3QoRnNGb3JtKTtcbiAgcHJvdGVjdGVkIF9yb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByb3RlY3RlZCBfZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxhbnk+PihNYXREaWFsb2dSZWYsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfZHJhd2VyUmVmID0gaW5qZWN0PERyYXdlclJlZjxhbnk+PihEcmF3ZXJSZWYsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByb3RlY3RlZCBfZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZUNvbmZpZzogUm91dGUgfCBudWxsO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0VGFiR3JvdXAsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfdGFiR3JvdXBzOiBRdWVyeUxpc3Q8TWF0VGFiR3JvdXA+ID0gbmV3IFF1ZXJ5TGlzdCgpO1xuXG4gIHByaXZhdGUgX2J1dHRvbnMgPSBuZXcgUXVlcnlMaXN0PEZzQnV0dG9uRGlyZWN0aXZlPigpO1xuICBwcml2YXRlIF9hY3RpdmVTdWJtaXRCdXR0b246IEZzQnV0dG9uRGlyZWN0aXZlO1xuICBwcml2YXRlIF9jb25maXJtVGFiR3JvdXBzID0gbmV3IFdlYWtTZXQ8TWF0VGFiR3JvdXA+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwdWJsaWMgYWJzdHJhY3Qgc3VibWl0dGluZzogYm9vbGVhbjtcblxuICAvKiogVHJ1ZSB3aGVuIGFueXRoaW5nIGluIHRoZSBvd25lZCBzZXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gKi9cbiAgcHVibGljIGFic3RyYWN0IGRpcnR5TGlua2VkOiBib29sZWFuO1xuXG4gIC8qKiBFdmVyeSBmb3JtIGluIHRoZSBvd25lZCBzZXQsIGF0IGFueSBkZXB0aC4gKi9cbiAgcHVibGljIGFic3RyYWN0IGxpbmtlZEZvcm1zOiBGc0Zvcm1EaXJlY3RpdmVbXTtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIG93bmVkIHNldCdzIGRpcnR5IHN0YXRlIG1heSBoYXZlIG1vdmVkLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZGlydHlDaGFuZ2UkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuXG4gIC8qKiBFbWl0cyBvbmNlIGEgc3VibWl0IG92ZXIgdGhlIG93bmVkIHNldCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi9cbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdHRlZCQ6IE9ic2VydmFibGU8U3VibWl0dGVkRXZlbnQ+O1xuXG4gIC8qKiBUcmFja3MgdGhlIG93bmVkIHNldCdzIHN1Ym1pdCBsaWZlY3ljbGUsIHNvIHRoZSBkcmF3ZXIgY2FuIHdhaXQgb25lIG91dC4gKi9cbiAgcHVibGljIGFic3RyYWN0IHN0YXR1cyQ6IE9ic2VydmFibGU8Rm9ybVN0YXR1cz47XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPd25lckNvbnRlbnRMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b25zKCk6IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4ge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25zO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVTdWJtaXRCdXR0b24oKTogRnNCdXR0b25EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gYnV0dG9uO1xuICB9XG5cbiAgcHVibGljIGFkZEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5fYnV0dG9uc1xuICAgICAgLnJlc2V0KFxuICAgICAgICBbXG4gICAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KCksXG4gICAgICAgICAgYnV0dG9uLFxuICAgICAgICBdKTtcblxuICAgIC8vIFF1ZXJ5TGlzdC5yZXNldCgpIGRvZXMgbm90IGVtaXQgYGNoYW5nZXNgOyBub3RpZnkgc28gc3Vic2NyaWJlcnMgKGUuZy4gdGhlXG4gICAgLy8gZm9ybSdzIGRpcnR5LXN1Ym1pdC1idXR0b24gdHJhY2tpbmcpIHJlYWN0IHRvIGJ1dHRvbnMgYmVpbmcgcmVnaXN0ZXJlZC5cbiAgICB0aGlzLl9idXR0b25zLm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYodGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID09PSBidXR0b24pIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fYnV0dG9ucy5yZXNldChcbiAgICAgIFtcbiAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAoYnV0dG9uICE9PSBpdGVtKSksXG4gICAgICBdKTtcblxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnl0aGluZyBoZXJlIGFjdHMgb24gdGhlIGZvcm0gc2V0IGFzIGEgd2hvbGUsIHNvIGV4YWN0bHkgb25lIHRoaW5nIG1heVxuICAgKiByZWdpc3RlciBpdC4gQSBmb3JtIGxpbmtlZCBpbnRvIGEgcGFyZW50IGRlZmVycyB0byB0aGF0IHBhcmVudDsgZXZlcnkgZm9ybVxuICAgKiBpbnNpZGUgYSBjb250YWluZXIgZGVmZXJzIHRvIHRoZSBjb250YWluZXIuIFJlZ2lzdGVyaW5nIHR3aWNlIHdvdWxkIHB1dCB0d29cbiAgICogY29uZmlybXMgb24gdGhlIHNhbWUgYmFja2Ryb3AgY2xpY2sgYW5kIHR3byBoYW5kbGVycyBvbiB0aGUgc2FtZSBDdHJsK1MuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVhY3RpdmF0aW9uR3VhcmQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ2FuRGVhY3RpdmF0ZUd1YXJkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTtcbiAgICB0aGlzLl9saXN0ZW5Ib3RLZXlzKCk7XG4gICAgdGhpcy5fbGlzdGVuV2luZG93Q2xvc2UoKTtcbiAgfVxuXG4gIC8qKiBUaGUgaGFsZiBvZiB0aGUgc2FtZSBvd25lcnNoaXAgdGhhdCBuZWVkcyBwcm9qZWN0ZWQgY29udGVudCByZXNvbHZlZC4gKi9cbiAgcHJvdGVjdGVkIF9yZWdpc3Rlck93bmVyQ29udGVudExpZmVjeWNsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJzKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRHJhd2VyQ2xvc2UoKTtcbiAgICB0aGlzLl9yZWdpc3RlckRyYXdlckNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyBpbnNpZGUgd2hhdCB0aGlzIG93bmVyIGNvdmVycy4gT3ZlcnJpZGRlbiBieSB0aGVcbiAgICogY29udGFpbmVyLCB3aG9zZSBvd24gZWxlbWVudCBpcyBhIHBvb3IgcHJveHk6IGl0IG1heSBiZSBhbiBgPG5nLWNvbnRhaW5lcj5gLFxuICAgKiB3aGljaCBpcyBhIGNvbW1lbnQgbm9kZSBhbmQgY29udGFpbnMgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBfY29udGFpbnNFbGVtZW50KGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGVsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbm9kZUNvbnRhaW5zKHJvb3Q6IE5vZGUsIGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb290IHx8ICFlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlbCA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsLnBhcmVudEVsZW1lbnQgPyB0aGlzLl9ub2RlQ29udGFpbnMocm9vdCwgZWwucGFyZW50RWxlbWVudCkgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZm9ybUNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtRGlhbG9nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gQ29uZmlybVJlc3VsdC5Ob0NoYW5nZXMgfHwgcmVzdWx0ID09PSBDb25maXJtUmVzdWx0LkRpc2NhcmRcbiAgICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgICA6IHRoaXMuc3VibWl0dGVkJDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogU3VibWl0dGVkRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UocmVzdWx0Py5yZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93Q2xvc2UoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybUJyb3dzZXIgJiYgdGhpcy5kaXJ0eUxpbmtlZCkge1xuICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nKGVsOiBOb2RlLCBkaWFsb2c6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyhkaWFsb2csIGVsIGFzIEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSG90S2V5cygpOiB2b2lkIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgJiYgZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNka092ZXJsYXlQYW5lID0gQXJyYXlcbiAgICAgICAgICAgICAgLmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5jZGstb3ZlcmxheS1wYW5lJykpLnBvcCgpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVEaWFsb2cgPSB0aGlzXG4gICAgICAgICAgICAgIC5fYWN0aXZlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2RpYWxvZ1JlZi5pZCksIGNka092ZXJsYXlQYW5lKTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlTJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRjdXRzKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluc0VsZW1lbnQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURpYWxvZ0JhY2tkcm9wRXNjYXBlKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgdGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSAhdGhpcy5fZGlhbG9nUmVmPy5kaXNhYmxlQ2xvc2U7XG5cbiAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSkge1xuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuYmFja2Ryb3BDbGljaygpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJEcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VibWl0dGluZykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdHVzKSA9PiBzdGF0dXMgPT09IEZvcm1TdGF0dXMuU3VjY2VzcyB8fCBzdGF0dXMgPT09IEZvcm1TdGF0dXMuRXJyb3IpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaWlmKFxuICAgICAgICAgICAgICAoKSA9PiAhIXRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EcmF3ZXIsXG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRoaXMuX3RhYkdyb3Vwcy50b0FycmF5KCkpO1xuICAgIHRoaXMuX3RhYkdyb3Vwcy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0YWJHcm91cHM6IE1hdFRhYkdyb3VwW10pOiB2b2lkIHtcbiAgICB0YWJHcm91cHMuZm9yRWFjaCgodGFiR3JvdXA6IE1hdFRhYkdyb3VwKSA9PiB7XG4gICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cDogTWF0VGFiR3JvdXApOiB2b2lkIHtcbiAgICAvLyBgX3RhYkdyb3Vwcy5jaGFuZ2VzYCByZS1lbWl0cyB0aGUgd2hvbGUgbGlzdCwgbm90IGp1c3Qgd2hhdCBhcnJpdmVkLCBhbmQgaXRcbiAgICAvLyBlbWl0cyBldmVyeSB0aW1lIGEgbGF6eSB0YWIgYm9keSBtb3VudHMgYSBuZXN0ZWQgZ3JvdXAuIEdyb3VwcyBhbHJlYWR5XG4gICAgLy8gd2lyZWQgdGhlcmVmb3JlIGNvbWUgYmFjayBhcm91bmQgLSBzbyB3aXRob3V0IHRoaXMgdGhlIG91dGVyIGdyb3VwXG4gICAgLy8gYWNjdW11bGF0ZXMgb25lIHN1YnNjcmlwdGlvbiBwZXIgZW1pc3Npb24sIGFuZCBhIHNpbmdsZSBjbGljayBvbiBpdCBvcGVuc1xuICAgIC8vIHRoYXQgbWFueSBzdGFja2VkIGNvbmZpcm0gZGlhbG9ncy5cbiAgICBpZiAodGhpcy5fY29uZmlybVRhYkdyb3Vwcy5oYXModGFiR3JvdXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlybVRhYkdyb3Vwcy5hZGQodGFiR3JvdXApO1xuXG4gICAgY29uc3QgY29uZmlybVRhYkdyb3VwID0gdGFiR3JvdXAgYXMgQ29uZmlybVRhYkdyb3VwO1xuICAgIGlmICghY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKSB7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sgPSB0YWJHcm91cC5faGFuZGxlQ2xpY2s7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICAgdGFiOiBNYXRUYWI7XG4gICAgICAgICB0YWJIZWFkZXI6IE1hdFRhYkhlYWRlcjtcbiAgICAgICAgIGlkeDogbnVtYmVyXG4gICAgICAgIH0+KCk7XG5cbiAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxlQ2xpY2sgPSAodGFiOiBNYXRUYWIsIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyLCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5uZXh0KHsgdGFiLCB0YWJIZWFkZXIsIGlkeCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sodGFiLCB0YWJIZWFkZXIsIGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5zdWJtaXR0aW5nKSxcbiAgICAgICAgc3dpdGNoTWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1UYWJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSBldmVudC5pZHg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKGV2ZW50LnRhYiwgZXZlbnQudGFiSGVhZGVyLCBldmVudC5pZHgpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcgPSBnZXRBY3RpdmVSb3V0ZSh0aGlzLl9yb3V0ZSk/LnJvdXRlQ29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm0ucmVnaXN0ZXJGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCwgdGhpcyk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSkpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpID09PSAtMSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5wdXNoKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBndWFyZEluZGV4ID0gdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuc3BsaWNlKGd1YXJkSW5kZXgsIDEpO1xuXG4gICAgdGhpcy5fZm9ybS5yZW1vdmVGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCk7XG4gIH1cblxuXG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyU3VibWl0KCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyQ29uZmlybSgpOiBPYnNlcnZhYmxlPENvbmZpcm1SZXN1bHQ+O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVzZXQoKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdCQoZXZlbnQ/OiBTdWJtaXRFdmVudCk6IE9ic2VydmFibGU8U3VibWl0dGVkRXZlbnQ+O1xufVxuIl19
@@ -0,0 +1,164 @@
1
+ import { Directive } from '@angular/core';
2
+ import { defer, EMPTY, of, Subject } from 'rxjs';
3
+ import { map, startWith, switchMap } from 'rxjs/operators';
4
+ import { ConfirmResult } from '../../enums';
5
+ import { FormStatus } from '../../enums/form-status';
6
+ import { FsFormBaseDirective } from '../form-base';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Bounds a set of forms without being one.
10
+ *
11
+ * An `fsForm` can only reach the forms nested inside it through DI, which forces
12
+ * a wrapper carrying `ngForm` around anything that needs to see them - and that
13
+ * wrapper then owns a real, empty `NgForm` whose control namespace every field
14
+ * below it falls into. A container has no `ngForm` and no controls. It only
15
+ * watches: forms register themselves as they mount, buttons resolve to it, and
16
+ * `fs-form-dialog-actions` reads Save-vs-Done off it. Put it on whatever element
17
+ * already frames the layout - or on an `<ng-container>` for no element at all.
18
+ *
19
+ * Forms in a container are siblings rather than nested, so on registration each
20
+ * one is linked into the first. That reproduces exactly the structure DI nesting
21
+ * builds, which is why validation, dirty state, the unsaved-changes confirm and
22
+ * the submit chain all span a container without any of that machinery knowing
23
+ * containers exist.
24
+ *
25
+ * A form marked `[link]="false"` never registers, so an instant-save panel stays
26
+ * out of the set the same way it does when nested.
27
+ */
28
+ export class FsFormContainerDirective extends FsFormBaseDirective {
29
+ _forms = [];
30
+ _formsChange$ = new Subject();
31
+ /** The forms registered into this container, in registration order. */
32
+ get forms() {
33
+ return [...this._forms];
34
+ }
35
+ /**
36
+ * The form the rest of the set is linked into, or null while the container
37
+ * holds none - an open tab that has nothing to save, say.
38
+ */
39
+ get rootForm() {
40
+ return this._forms[0] || null;
41
+ }
42
+ /** Emits whenever a form registers or deregisters. */
43
+ get formsChange$() {
44
+ return this._formsChange$.asObservable();
45
+ }
46
+ get linkedForms() {
47
+ return this.rootForm?.linkedForms || [];
48
+ }
49
+ /**
50
+ * True when anything in the container has a submit handler - i.e. there is
51
+ * something for a Save button to do. `fs-form-dialog-actions` reads this to
52
+ * swap Save for Done as the mounted tab changes, so a dialog never has to keep
53
+ * a list of which tabs happen to be savable.
54
+ */
55
+ get submits() {
56
+ return this.linkedForms
57
+ .some((form) => form.hasSubmit);
58
+ }
59
+ get dirtyLinked() {
60
+ return this.rootForm?.dirtyLinked || false;
61
+ }
62
+ get submitting() {
63
+ return this.rootForm?.submitting || false;
64
+ }
65
+ /**
66
+ * Emits whenever the set's dirty state may have moved, including when the set
67
+ * itself changes. Anything rendering off it - the dialog actions - subscribes
68
+ * once and outlives any particular form, so this has to follow the root across
69
+ * tab switches rather than bind to whichever form happened to be first.
70
+ */
71
+ get dirtyChange$() {
72
+ return this._formsChange$
73
+ .pipe(startWith(null), switchMap(() => (this.rootForm?.dirtyChange$ || EMPTY)
74
+ .pipe(startWith(null))), map(() => undefined));
75
+ }
76
+ // Resolved at subscribe time rather than switch-mapped: a submit in flight has
77
+ // to survive the set changing under it, which is routine when saving unmounts
78
+ // a tab.
79
+ get submitted$() {
80
+ return defer(() => this.rootForm?.submitted$ || EMPTY);
81
+ }
82
+ get status$() {
83
+ return defer(() => this.rootForm?.status$ || of(FormStatus.Valid));
84
+ }
85
+ /**
86
+ * Take a form into the container. Called by the form on init - consumers never
87
+ * call it directly.
88
+ */
89
+ registerForm(form) {
90
+ if (this._forms.indexOf(form) !== -1) {
91
+ return;
92
+ }
93
+ this._forms = [...this._forms, form];
94
+ if (this.rootForm !== form) {
95
+ form.linkTo(this.rootForm);
96
+ }
97
+ this._formsChange$.next();
98
+ }
99
+ /**
100
+ * Material attaches an incoming tab body before it detaches the outgoing one,
101
+ * so losing the root is a routine reshuffle rather than teardown. Re-elect and
102
+ * re-link the survivors instead of leaving them pointing at a dead root, and
103
+ * only let go of forms actually registered - clearing unconditionally would
104
+ * drop the form that just arrived.
105
+ */
106
+ deregisterForm(form) {
107
+ if (form && this._forms.indexOf(form) === -1) {
108
+ return;
109
+ }
110
+ const removing = form ? [form] : [...this._forms];
111
+ const rootRemoved = removing.indexOf(this.rootForm) !== -1;
112
+ removing.forEach((item) => item.unlinkFrom());
113
+ this._forms = this._forms
114
+ .filter((item) => removing.indexOf(item) === -1);
115
+ if (rootRemoved) {
116
+ const root = this.rootForm;
117
+ this._forms
118
+ .filter((item) => item !== root)
119
+ .forEach((item) => {
120
+ item.unlinkFrom();
121
+ item.linkTo(root);
122
+ });
123
+ }
124
+ this._formsChange$.next();
125
+ }
126
+ triggerSubmit() {
127
+ this.rootForm?.triggerSubmit();
128
+ }
129
+ triggerConfirm() {
130
+ return this.rootForm
131
+ ? this.rootForm.triggerConfirm()
132
+ : of(ConfirmResult.NoChanges);
133
+ }
134
+ submit$(event) {
135
+ return this.rootForm
136
+ ? this.rootForm.submit$(event)
137
+ : of(null);
138
+ }
139
+ reset() {
140
+ this.rootForm?.reset();
141
+ }
142
+ validate() {
143
+ this.rootForm?.validate();
144
+ }
145
+ // The container's own element is a poor proxy for what it covers: it is
146
+ // typically layout chrome wrapping far more than the forms, and on an
147
+ // `<ng-container>` it is a comment node containing nothing at all. Scope to the
148
+ // registered forms instead.
149
+ _containsElement(el) {
150
+ return this._forms
151
+ .some((form) => this._nodeContains(form.element, el));
152
+ }
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormContainerDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
154
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: FsFormContainerDirective, isStandalone: true, selector: "fs-form-container,[fsFormContainer]", exportAs: ["fsFormContainer"], usesInheritance: true, ngImport: i0 });
155
+ }
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFormContainerDirective, decorators: [{
157
+ type: Directive,
158
+ args: [{
159
+ selector: 'fs-form-container,[fsFormContainer]',
160
+ exportAs: 'fsFormContainer',
161
+ standalone: true,
162
+ }]
163
+ }] });
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250YWluZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2Zvcm0tY29udGFpbmVyL2Zvcm0tY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUtuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQU1ILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxtQkFBbUI7SUFFdkQsTUFBTSxHQUFzQixFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFNUMsdUVBQXVFO0lBQ3ZFLElBQVcsS0FBSztRQUNkLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJ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QUFJLENBQUMsTUFBTTthQUNmLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQzt1R0E5SlUsd0JBQXdCOzJGQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFDQUFxQztvQkFDL0MsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGRlZmVyLCBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbmZpcm1SZXN1bHQgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vLi4vZW51bXMvZm9ybS1zdGF0dXMnO1xuaW1wb3J0IHsgRnNGb3JtT3duZXIsIFN1Ym1pdEV2ZW50LCBTdWJtaXR0ZWRFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNGb3JtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tYmFzZSc7XG5cbmltcG9ydCB0eXBlIHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5cblxuLyoqXG4gKiBCb3VuZHMgYSBzZXQgb2YgZm9ybXMgd2l0aG91dCBiZWluZyBvbmUuXG4gKlxuICogQW4gYGZzRm9ybWAgY2FuIG9ubHkgcmVhY2ggdGhlIGZvcm1zIG5lc3RlZCBpbnNpZGUgaXQgdGhyb3VnaCBESSwgd2hpY2ggZm9yY2VzXG4gKiBhIHdyYXBwZXIgY2FycnlpbmcgYG5nRm9ybWAgYXJvdW5kIGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gc2VlIHRoZW0gLSBhbmQgdGhhdFxuICogd3JhcHBlciB0aGVuIG93bnMgYSByZWFsLCBlbXB0eSBgTmdGb3JtYCB3aG9zZSBjb250cm9sIG5hbWVzcGFjZSBldmVyeSBmaWVsZFxuICogYmVsb3cgaXQgZmFsbHMgaW50by4gQSBjb250YWluZXIgaGFzIG5vIGBuZ0Zvcm1gIGFuZCBubyBjb250cm9scy4gSXQgb25seVxuICogd2F0Y2hlczogZm9ybXMgcmVnaXN0ZXIgdGhlbXNlbHZlcyBhcyB0aGV5IG1vdW50LCBidXR0b25zIHJlc29sdmUgdG8gaXQsIGFuZFxuICogYGZzLWZvcm0tZGlhbG9nLWFjdGlvbnNgIHJlYWRzIFNhdmUtdnMtRG9uZSBvZmYgaXQuIFB1dCBpdCBvbiB3aGF0ZXZlciBlbGVtZW50XG4gKiBhbHJlYWR5IGZyYW1lcyB0aGUgbGF5b3V0IC0gb3Igb24gYW4gYDxuZy1jb250YWluZXI+YCBmb3Igbm8gZWxlbWVudCBhdCBhbGwuXG4gKlxuICogRm9ybXMgaW4gYSBjb250YWluZXIgYXJlIHNpYmxpbmdzIHJhdGhlciB0aGFuIG5lc3RlZCwgc28gb24gcmVnaXN0cmF0aW9uIGVhY2hcbiAqIG9uZSBpcyBsaW5rZWQgaW50byB0aGUgZmlyc3QuIFRoYXQgcmVwcm9kdWNlcyBleGFjdGx5IHRoZSBzdHJ1Y3R1cmUgREkgbmVzdGluZ1xuICogYnVpbGRzLCB3aGljaCBpcyB3aHkgdmFsaWRhdGlvbiwgZGlydHkgc3RhdGUsIHRoZSB1bnNhdmVkLWNoYW5nZXMgY29uZmlybSBhbmRcbiAqIHRoZSBzdWJtaXQgY2hhaW4gYWxsIHNwYW4gYSBjb250YWluZXIgd2l0aG91dCBhbnkgb2YgdGhhdCBtYWNoaW5lcnkga25vd2luZ1xuICogY29udGFpbmVycyBleGlzdC5cbiAqXG4gKiBBIGZvcm0gbWFya2VkIGBbbGlua109XCJmYWxzZVwiYCBuZXZlciByZWdpc3RlcnMsIHNvIGFuIGluc3RhbnQtc2F2ZSBwYW5lbCBzdGF5c1xuICogb3V0IG9mIHRoZSBzZXQgdGhlIHNhbWUgd2F5IGl0IGRvZXMgd2hlbiBuZXN0ZWQuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2ZzLWZvcm0tY29udGFpbmVyLFtmc0Zvcm1Db250YWluZXJdJyxcbiAgZXhwb3J0QXM6ICdmc0Zvcm1Db250YWluZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUgZXh0ZW5kcyBGc0Zvcm1CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgRnNGb3JtT3duZXIge1xuXG4gIHByaXZhdGUgX2Zvcm1zOiBGc0Zvcm1EaXJlY3RpdmVbXSA9IFtdO1xuICBwcml2YXRlIF9mb3Jtc0NoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBUaGUgZm9ybXMgcmVnaXN0ZXJlZCBpbnRvIHRoaXMgY29udGFpbmVyLCBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIHB1YmxpYyBnZXQgZm9ybXMoKTogRnNGb3JtRGlyZWN0aXZlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fZm9ybXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIHRoZSByZXN0IG9mIHRoZSBzZXQgaXMgbGlua2VkIGludG8sIG9yIG51bGwgd2hpbGUgdGhlIGNvbnRhaW5lclxuICAgKiBob2xkcyBub25lIC0gYW4gb3BlbiB0YWIgdGhhdCBoYXMgbm90aGluZyB0byBzYXZlLCBzYXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvb3RGb3JtKCk6IEZzRm9ybURpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zWzBdIHx8IG51bGw7XG4gIH1cblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgYSBmb3JtIHJlZ2lzdGVycyBvciBkZXJlZ2lzdGVycy4gKi9cbiAgcHVibGljIGdldCBmb3Jtc0NoYW5nZSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGlua2VkRm9ybXMoKTogRnNGb3JtRGlyZWN0aXZlW10ge1xuICAgIHJldHVybiB0aGlzLnJvb3RGb3JtPy5saW5rZWRGb3JtcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gYW55dGhpbmcgaW4gdGhlIGNvbnRhaW5lciBoYXMgYSBzdWJtaXQgaGFuZGxlciAtIGkuZS4gdGhlcmUgaXNcbiAgICogc29tZXRoaW5nIGZvciBhIFNhdmUgYnV0dG9uIHRvIGRvLiBgZnMtZm9ybS1kaWFsb2ctYWN0aW9uc2AgcmVhZHMgdGhpcyB0b1xuICAgKiBzd2FwIFNhdmUgZm9yIERvbmUgYXMgdGhlIG1vdW50ZWQgdGFiIGNoYW5nZXMsIHNvIGEgZGlhbG9nIG5ldmVyIGhhcyB0byBrZWVwXG4gICAqIGEgbGlzdCBvZiB3aGljaCB0YWJzIGhhcHBlbiB0byBiZSBzYXZhYmxlLlxuICAgKi9cbiAgcHVibGljIGdldCBzdWJtaXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpbmtlZEZvcm1zXG4gICAgICAuc29tZSgoZm9ybSkgPT4gZm9ybS5oYXNTdWJtaXQpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXJ0eUxpbmtlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb290Rm9ybT8uZGlydHlMaW5rZWQgfHwgZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1Ym1pdHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm9vdEZvcm0/LnN1Ym1pdHRpbmcgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHNldCdzIGRpcnR5IHN0YXRlIG1heSBoYXZlIG1vdmVkLCBpbmNsdWRpbmcgd2hlbiB0aGUgc2V0XG4gICAqIGl0c2VsZiBjaGFuZ2VzLiBBbnl0aGluZyByZW5kZXJpbmcgb2ZmIGl0IC0gdGhlIGRpYWxvZyBhY3Rpb25zIC0gc3Vic2NyaWJlc1xuICAgKiBvbmNlIGFuZCBvdXRsaXZlcyBhbnkgcGFydGljdWxhciBmb3JtLCBzbyB0aGlzIGhhcyB0byBmb2xsb3cgdGhlIHJvb3QgYWNyb3NzXG4gICAqIHRhYiBzd2l0Y2hlcyByYXRoZXIgdGhhbiBiaW5kIHRvIHdoaWNoZXZlciBmb3JtIGhhcHBlbmVkIHRvIGJlIGZpcnN0LlxuICAgKi9cbiAgcHVibGljIGdldCBkaXJ0eUNoYW5nZSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+ICh0aGlzLnJvb3RGb3JtPy5kaXJ0eUNoYW5nZSQgfHwgRU1QVFkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgKSksXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFJlc29sdmVkIGF0IHN1YnNjcmliZSB0aW1lIHJhdGhlciB0aGFuIHN3aXRjaC1tYXBwZWQ6IGEgc3VibWl0IGluIGZsaWdodCBoYXNcbiAgLy8gdG8gc3Vydml2ZSB0aGUgc2V0IGNoYW5naW5nIHVuZGVyIGl0LCB3aGljaCBpcyByb3V0aW5lIHdoZW4gc2F2aW5nIHVubW91bnRzXG4gIC8vIGEgdGFiLlxuICBwdWJsaWMgZ2V0IHN1Ym1pdHRlZCQoKTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLnJvb3RGb3JtPy5zdWJtaXR0ZWQkIHx8IEVNUFRZKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzJCgpOiBPYnNlcnZhYmxlPEZvcm1TdGF0dXM+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yb290Rm9ybT8uc3RhdHVzJCB8fCBvZihGb3JtU3RhdHVzLlZhbGlkKSk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZSBhIGZvcm0gaW50byB0aGUgY29udGFpbmVyLiBDYWxsZWQgYnkgdGhlIGZvcm0gb24gaW5pdCAtIGNvbnN1bWVycyBuZXZlclxuICAgKiBjYWxsIGl0IGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRm9ybShmb3JtOiBGc0Zvcm1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9ybXMuaW5kZXhPZihmb3JtKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3JtcyA9IFsuLi50aGlzLl9mb3JtcywgZm9ybV07XG5cbiAgICBpZiAodGhpcy5yb290Rm9ybSAhPT0gZm9ybSkge1xuICAgICAgZm9ybS5saW5rVG8odGhpcy5yb290Rm9ybSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybXNDaGFuZ2UkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXRlcmlhbCBhdHRhY2hlcyBhbiBpbmNvbWluZyB0YWIgYm9keSBiZWZvcmUgaXQgZGV0YWNoZXMgdGhlIG91dGdvaW5nIG9uZSxcbiAgICogc28gbG9zaW5nIHRoZSByb290IGlzIGEgcm91dGluZSByZXNodWZmbGUgcmF0aGVyIHRoYW4gdGVhcmRvd24uIFJlLWVsZWN0IGFuZFxuICAgKiByZS1saW5rIHRoZSBzdXJ2aXZvcnMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZW0gcG9pbnRpbmcgYXQgYSBkZWFkIHJvb3QsIGFuZFxuICAgKiBvbmx5IGxldCBnbyBvZiBmb3JtcyBhY3R1YWxseSByZWdpc3RlcmVkIC0gY2xlYXJpbmcgdW5jb25kaXRpb25hbGx5IHdvdWxkXG4gICAqIGRyb3AgdGhlIGZvcm0gdGhhdCBqdXN0IGFycml2ZWQuXG4gICAqL1xuICBwdWJsaWMgZGVyZWdpc3RlckZvcm0oZm9ybT86IEZzRm9ybURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGlmIChmb3JtICYmIHRoaXMuX2Zvcm1zLmluZGV4T2YoZm9ybSkgPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZpbmcgPSBmb3JtID8gW2Zvcm1dIDogWy4uLnRoaXMuX2Zvcm1zXTtcbiAgICBjb25zdCByb290UmVtb3ZlZCA9IHJlbW92aW5nLmluZGV4T2YodGhpcy5yb290Rm9ybSkgIT09IC0xO1xuXG4gICAgcmVtb3ZpbmcuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS51bmxpbmtGcm9tKCkpO1xuXG4gICAgdGhpcy5fZm9ybXMgPSB0aGlzLl9mb3Jtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gcmVtb3ZpbmcuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuXG4gICAgaWYgKHJvb3RSZW1vdmVkKSB7XG4gICAgICBjb25zdCByb290ID0gdGhpcy5yb290Rm9ybTtcblxuICAgICAgdGhpcy5fZm9ybXNcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gcm9vdClcbiAgICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpdGVtLnVubGlua0Zyb20oKTtcbiAgICAgICAgICBpdGVtLmxpbmtUbyhyb290KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybXNDaGFuZ2UkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMucm9vdEZvcm0/LnRyaWdnZXJTdWJtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQ29uZmlybSgpOiBPYnNlcnZhYmxlPENvbmZpcm1SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yb290Rm9ybVxuICAgICAgPyB0aGlzLnJvb3RGb3JtLnRyaWdnZXJDb25maXJtKClcbiAgICAgIDogb2YoQ29uZmlybVJlc3VsdC5Ob0NoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCQoZXZlbnQ/OiBTdWJtaXRFdmVudCk6IE9ic2VydmFibGU8U3VibWl0dGVkRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5yb290Rm9ybVxuICAgICAgPyB0aGlzLnJvb3RGb3JtLnN1Ym1pdCQoZXZlbnQpXG4gICAgICA6IG9mKG51bGwpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMucm9vdEZvcm0/LnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5yb290Rm9ybT8udmFsaWRhdGUoKTtcbiAgfVxuXG4gIC8vIFRoZSBjb250YWluZXIncyBvd24gZWxlbWVudCBpcyBhIHBvb3IgcHJveHkgZm9yIHdoYXQgaXQgY292ZXJzOiBpdCBpc1xuICAvLyB0eXBpY2FsbHkgbGF5b3V0IGNocm9tZSB3cmFwcGluZyBmYXIgbW9yZSB0aGFuIHRoZSBmb3JtcywgYW5kIG9uIGFuXG4gIC8vIGA8bmctY29udGFpbmVyPmAgaXQgaXMgYSBjb21tZW50IG5vZGUgY29udGFpbmluZyBub3RoaW5nIGF0IGFsbC4gU2NvcGUgdG8gdGhlXG4gIC8vIHJlZ2lzdGVyZWQgZm9ybXMgaW5zdGVhZC5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb250YWluc0VsZW1lbnQoZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybXNcbiAgICAgIC5zb21lKChmb3JtKSA9PiB0aGlzLl9ub2RlQ29udGFpbnMoZm9ybS5lbGVtZW50LCBlbCkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './form-container.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS1jb250YWluZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybS1jb250YWluZXIuZGlyZWN0aXZlJztcbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  export * from './form';
2
- export * from './form-group';
2
+ export * from './form-container';
3
3
  export * from './validators';
4
4
  export * from './button.directive';
5
5
  export * from './form-dialog-close.directive';
6
6
  export * from './form-template.directive';
7
7
  export * from './submit-button.directive';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vYnV0dG9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZGlhbG9nLWNsb3NlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUnO1xuIl19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1jb250YWluZXInO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vYnV0dG9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZGlhbG9nLWNsb3NlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUnO1xuIl19