@dereekb/dbx-form 1.0.0 → 2.0.0

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 (78) hide show
  1. package/README.md +1 -1
  2. package/esm2020/lib/form/action/form.action.directive.mjs +34 -19
  3. package/esm2020/lib/form/action/form.action.module.mjs +4 -4
  4. package/esm2020/lib/form/action/transition/form.action.transition.module.mjs +4 -4
  5. package/esm2020/lib/form/action/transition/form.action.transition.safety.directive.mjs +9 -9
  6. package/esm2020/lib/form/form.mjs +2 -1
  7. package/esm2020/lib/form/form.module.mjs +4 -4
  8. package/esm2020/lib/form/io/form.changes.directive.mjs +3 -3
  9. package/esm2020/lib/form/io/form.input.directive.mjs +4 -4
  10. package/esm2020/lib/form/io/form.io.module.mjs +4 -4
  11. package/esm2020/lib/form/io/form.loading.directive.mjs +3 -3
  12. package/esm2020/lib/form.module.mjs +4 -4
  13. package/esm2020/lib/formly/field/checklist/checklist.item.field.component.mjs +6 -6
  14. package/esm2020/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +3 -3
  15. package/esm2020/lib/formly/field/checklist/checklist.item.field.module.mjs +4 -4
  16. package/esm2020/lib/formly/field/component/component.field.component.mjs +7 -20
  17. package/esm2020/lib/formly/field/component/component.field.mjs +3 -5
  18. package/esm2020/lib/formly/field/component/component.field.module.mjs +11 -11
  19. package/esm2020/lib/formly/field/form.field.module.mjs +4 -4
  20. package/esm2020/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +3 -3
  21. package/esm2020/lib/formly/field/selection/pickable/pickable.field.directive.mjs +3 -3
  22. package/esm2020/lib/formly/field/selection/pickable/pickable.field.module.mjs +4 -4
  23. package/esm2020/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +12 -12
  24. package/esm2020/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +3 -3
  25. package/esm2020/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +13 -13
  26. package/esm2020/lib/formly/field/selection/searchable/searchable.field.directive.mjs +3 -3
  27. package/esm2020/lib/formly/field/selection/searchable/searchable.field.module.mjs +4 -4
  28. package/esm2020/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +3 -3
  29. package/esm2020/lib/formly/field/selection/selection.module.mjs +4 -4
  30. package/esm2020/lib/formly/field/texteditor/texteditor.field.component.mjs +3 -3
  31. package/esm2020/lib/formly/field/texteditor/texteditor.field.module.mjs +4 -4
  32. package/esm2020/lib/formly/field/value/array/array.field.component.mjs +4 -4
  33. package/esm2020/lib/formly/field/value/array/array.field.module.mjs +4 -4
  34. package/esm2020/lib/formly/field/value/boolean/boolean.field.module.mjs +4 -4
  35. package/esm2020/lib/formly/field/value/date/date.field.module.mjs +4 -4
  36. package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +35 -25
  37. package/esm2020/lib/formly/field/value/date/datetime.field.mjs +3 -3
  38. package/esm2020/lib/formly/field/value/enum/enum.field.module.mjs +4 -4
  39. package/esm2020/lib/formly/field/value/phone/phone.field.component.mjs +3 -3
  40. package/esm2020/lib/formly/field/value/phone/phone.field.module.mjs +4 -4
  41. package/esm2020/lib/formly/field/value/text/text.field.module.mjs +4 -4
  42. package/esm2020/lib/formly/field/value/value.module.mjs +4 -4
  43. package/esm2020/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +3 -3
  44. package/esm2020/lib/formly/field/wrapper/expandable.wrapper.component.mjs +3 -3
  45. package/esm2020/lib/formly/field/wrapper/expandable.wrapper.delegate.mjs +3 -3
  46. package/esm2020/lib/formly/field/wrapper/flex.wrapper.component.mjs +3 -3
  47. package/esm2020/lib/formly/field/wrapper/form.wrapper.module.mjs +4 -4
  48. package/esm2020/lib/formly/field/wrapper/info.wrapper.component.mjs +3 -3
  49. package/esm2020/lib/formly/field/wrapper/section.wrapper.component.mjs +3 -3
  50. package/esm2020/lib/formly/field/wrapper/style.wrapper.component.mjs +3 -3
  51. package/esm2020/lib/formly/field/wrapper/subsection.wrapper.component.mjs +3 -3
  52. package/esm2020/lib/formly/field/wrapper/toggle.wrapper.component.mjs +3 -3
  53. package/esm2020/lib/formly/formly.context.directive.mjs +3 -3
  54. package/esm2020/lib/formly/formly.context.mjs +18 -7
  55. package/esm2020/lib/formly/formly.directive.mjs +17 -14
  56. package/esm2020/lib/formly/formly.form.component.mjs +54 -20
  57. package/esm2020/lib/formly/formly.module.mjs +4 -4
  58. package/esm2020/lib/layout/form.layout.module.mjs +4 -4
  59. package/esm2020/lib/layout/form.spacer.component.mjs +3 -3
  60. package/fesm2015/dereekb-dbx-form.mjs +426 -368
  61. package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
  62. package/fesm2020/dereekb-dbx-form.mjs +425 -367
  63. package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
  64. package/lib/form/action/form.action.directive.d.ts +12 -10
  65. package/lib/form/action/transition/form.action.transition.safety.directive.d.ts +3 -3
  66. package/lib/form/form.d.ts +19 -3
  67. package/lib/form/io/form.input.directive.d.ts +2 -1
  68. package/lib/formly/field/component/component.field.component.d.ts +7 -20
  69. package/lib/formly/field/component/component.field.d.ts +3 -5
  70. package/lib/formly/field/component/component.field.module.d.ts +1 -1
  71. package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +1 -1
  72. package/lib/formly/field/texteditor/_texteditor.scss +0 -2
  73. package/lib/formly/field/value/date/datetime.field.component.d.ts +4 -6
  74. package/lib/formly/field/value/date/datetime.field.d.ts +2 -2
  75. package/lib/formly/formly.context.d.ts +8 -5
  76. package/lib/formly/formly.directive.d.ts +2 -0
  77. package/lib/formly/formly.form.component.d.ts +13 -3
  78. package/package.json +22 -21
@@ -1,11 +1,12 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
- import { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Subject, switchMap, shareReplay, of } from 'rxjs';
3
+ import { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Subject, switchMap, shareReplay, of, scan } from 'rxjs';
4
4
  import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
5
- import { DbxFormState, ProvideDbxMutableForm } from '../form/form';
5
+ import { DbxFormState, DEFAULT_FORM_DISABLED_KEY, ProvideDbxMutableForm } from '../form/form';
6
6
  import { DbxFormlyContext } from './formly.context';
7
7
  import { cloneDeep } from 'lodash';
8
- import { scanCount, switchMapMaybeObs } from '@dereekb/rxjs';
8
+ import { scanCount, switchMapMaybeObs, SubscriptionObject } from '@dereekb/rxjs';
9
+ import { BooleanStringKeyArrayUtilityInstance } from '@dereekb/util';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "./formly.context";
11
12
  import * as i2 from "@ngx-formly/core";
@@ -20,15 +21,34 @@ export class DbxFormlyFormComponent extends AbstractSubscriptionDirective {
20
21
  this.context = context;
21
22
  this._fields = new BehaviorSubject(undefined);
22
23
  this._events = new BehaviorSubject({ isComplete: false, state: DbxFormState.INITIALIZING });
24
+ this._disabled = new BehaviorSubject(undefined);
23
25
  this._reset = new BehaviorSubject(new Date());
24
26
  this._forceUpdate = new Subject();
27
+ this._disabledSub = new SubscriptionObject();
25
28
  this.form = new FormGroup({});
26
29
  this.model = {};
27
30
  this.options = {};
28
31
  this.fields$ = this._fields.pipe(switchMapMaybeObs(), distinctUntilChanged(), shareReplay(1));
29
- this.stream$ = this._reset.pipe(switchMap((lastResetAt) => this.form.valueChanges.pipe(startWith(0), distinctUntilChanged(), throttleTime(50, undefined, { leading: true, trailing: true }), scanCount(), map((changesSinceLastResetCount) => {
32
+ this.stream$ = this._reset.pipe(switchMap((lastResetAt) => this.form.valueChanges.pipe(startWith(0), distinctUntilChanged(), throttleTime(50, undefined, { leading: true, trailing: true }), scanCount(), map((changesSinceLastResetCount) => ({
33
+ changesSinceLastResetCount,
34
+ isFormValid: this.form.valid,
35
+ isFormDisabled: this.form.disabled
36
+ })), scan((acc, next) => {
37
+ // Pass forward valid if next was a disabled change/check, which changes angular form's isValid value.
38
+ // If it was valid prior, then it should be valid now, unless we just reset, in which case it might not be valid.
39
+ const valid = next.isFormValid || (next.isFormDisabled && acc.isFormValid && acc.changesSinceLastResetCount > 0);
40
+ return {
41
+ changesSinceLastResetCount: next.changesSinceLastResetCount,
42
+ isFormValid: valid,
43
+ isFormDisabled: next.isFormDisabled
44
+ };
45
+ }, {
46
+ changesSinceLastResetCount: 0,
47
+ isFormValid: false,
48
+ isFormDisabled: false
49
+ }), map(({ changesSinceLastResetCount, isFormValid, isFormDisabled }) => {
30
50
  const isReset = changesSinceLastResetCount === 1;
31
- const complete = this.form.valid;
51
+ const complete = isFormValid;
32
52
  const nextState = {
33
53
  isComplete: complete,
34
54
  state: (isReset) ? DbxFormState.RESET : DbxFormState.USED,
@@ -36,13 +56,25 @@ export class DbxFormlyFormComponent extends AbstractSubscriptionDirective {
36
56
  pristine: this.form.pristine,
37
57
  changesCount: changesSinceLastResetCount,
38
58
  lastResetAt,
39
- isDisabled: this.disabled
59
+ disabled: this.disabled,
60
+ isDisabled: isFormDisabled
40
61
  };
41
62
  return nextState;
42
63
  }))), shareReplay(1));
43
64
  }
44
65
  ngOnInit() {
45
66
  this.context.setDelegate(this);
67
+ this._disabledSub.subscription = this._disabled.pipe(distinctUntilChanged()).subscribe((disabled) => {
68
+ const isDisabled = BooleanStringKeyArrayUtilityInstance.isTrue(disabled);
69
+ if (this.form.disabled !== isDisabled) {
70
+ if (isDisabled) {
71
+ this.form.disable({ emitEvent: true });
72
+ }
73
+ else {
74
+ this.form.enable({ emitEvent: true });
75
+ }
76
+ }
77
+ });
46
78
  }
47
79
  ngOnDestroy() {
48
80
  this.context.lockSet.onNextUnlock(() => {
@@ -52,11 +84,14 @@ export class DbxFormlyFormComponent extends AbstractSubscriptionDirective {
52
84
  this._fields.complete();
53
85
  this._reset.complete();
54
86
  this._forceUpdate.complete();
87
+ this._disabled.complete();
88
+ this._disabledSub.destroy();
55
89
  });
56
90
  }
57
91
  // MARK: Delegate
58
92
  init(initialize) {
59
93
  this._fields.next(initialize.fields);
94
+ this._disabled.next(initialize.initialDisabled);
60
95
  }
61
96
  getValue() {
62
97
  return of(this.form.value);
@@ -84,31 +119,30 @@ export class DbxFormlyFormComponent extends AbstractSubscriptionDirective {
84
119
  this.options.resetModel();
85
120
  }
86
121
  }
122
+ get isDisabled() {
123
+ return BooleanStringKeyArrayUtilityInstance.isTrue(this.disabled);
124
+ }
87
125
  get disabled() {
88
- return this.form.disabled;
126
+ return this._disabled.value;
89
127
  }
90
- setDisabled(disabled = true) {
91
- if (disabled !== this.disabled) {
92
- if (disabled) {
93
- this.form.disable({ emitEvent: true });
94
- }
95
- else {
96
- this.form.enable({ emitEvent: true });
97
- }
98
- }
128
+ getDisabled() {
129
+ return this._disabled.asObservable();
130
+ }
131
+ setDisabled(key, disabled = true) {
132
+ this._disabled.next(BooleanStringKeyArrayUtilityInstance.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled));
99
133
  }
100
134
  // MARK: Update
101
135
  forceFormUpdate() {
102
136
  this._forceUpdate.next();
103
137
  }
104
138
  }
105
- DbxFormlyFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyFormComponent, deps: [{ token: i1.DbxFormlyContext }], target: i0.ɵɵFactoryTarget.Component });
106
- DbxFormlyFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: DbxFormlyFormComponent, selector: "dbx-formly", host: { classAttribute: "dbx-formly" }, providers: ProvideDbxMutableForm(DbxFormlyFormComponent), exportAs: ["formly"], usesInheritance: true, ngImport: i0, template: `
139
+ DbxFormlyFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyFormComponent, deps: [{ token: i1.DbxFormlyContext }], target: i0.ɵɵFactoryTarget.Component });
140
+ DbxFormlyFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: DbxFormlyFormComponent, selector: "dbx-formly", host: { classAttribute: "dbx-formly" }, providers: ProvideDbxMutableForm(DbxFormlyFormComponent), exportAs: ["formly"], usesInheritance: true, ngImport: i0, template: `
107
141
  <form [formGroup]="form" class="dbx-formly">
108
142
  <formly-form [form]="form" [fields]="(fields$ | async) ?? []" [model]="model"></formly-form>
109
143
  </form>
110
144
  `, isInline: true, components: [{ type: i2.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "async": i4.AsyncPipe } });
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyFormComponent, decorators: [{
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyFormComponent, decorators: [{
112
146
  type: Component,
113
147
  args: [{
114
148
  selector: 'dbx-formly',
@@ -124,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
124
158
  }
125
159
  }]
126
160
  }], ctorParameters: function () { return [{ type: i1.DbxFormlyContext }]; } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LmZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1SSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQXlCLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQWlELE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFHN0Q7O0dBRUc7QUFjSCxNQUFNLE9BQU8sc0JBQXlDLFNBQVEsNkJBQTZCO0lBd0N6RixZQUE2QixPQUE0QjtRQUN2RCxLQUFLLEVBQUUsQ0FBQztRQURtQixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQXRDakQsWUFBTyxHQUFHLElBQUksZUFBZSxDQUF5QyxTQUFTLENBQUMsQ0FBQztRQUNqRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVyRyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUzQyxTQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUNoQixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUV2QixZQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpGLFlBQU8sR0FBNkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ1osb0JBQW9CLEVBQUUsRUFDdEIsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUM5RCxTQUFTLEVBQUUsRUFDWCxHQUFHLENBQUMsQ0FBQywwQkFBa0MsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLDBCQUEwQixLQUFLLENBQUMsQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUVqQyxNQUFNLFNBQVMsR0FBaUI7Z0JBQzlCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUk7Z0JBQ3pELFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQzVCLFlBQVksRUFBRSwwQkFBMEI7Z0JBQ3hDLFdBQVc7Z0JBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQzFCLENBQUM7WUFFRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFJRixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFUSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDckMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxVQUFrQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBUTtRQUNmLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQU0sQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztTQUM3QjtRQUVELHFDQUFxQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFM0Isc0ZBQXNGO1FBQ3RGLG9HQUFvRztRQUNwRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUM1QjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSTtRQUN6QixJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDeEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN2QztTQUNGO0lBQ0gsQ0FBQztJQUVELGVBQWU7SUFDZixlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzttSEFqSFUsc0JBQXNCO3VHQUF0QixzQkFBc0IsNkVBTHRCLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLHVFQUw5Qzs7OztHQUlUOzJGQU1VLHNCQUFzQjtrQkFibEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFFBQVEsRUFBRTs7OztHQUlUO29CQUNELFNBQVMsRUFBRSxxQkFBcUIsd0JBQXdCO29CQUN4RCxJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLFlBQVk7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0aHJvdHRsZVRpbWUsIHN0YXJ0V2l0aCwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEYnhGb3JtLCBEYnhGb3JtRXZlbnQsIERieEZvcm1TdGF0ZSwgUHJvdmlkZURieE11dGFibGVGb3JtIH0gZnJvbSAnLi4vZm9ybS9mb3JtJztcbmltcG9ydCB7IERieEZvcm1seUNvbnRleHQsIERieEZvcm1seUNvbnRleHREZWxlZ2F0ZSwgRGJ4Rm9ybWx5SW5pdGlhbGl6ZSB9IGZyb20gJy4vZm9ybWx5LmNvbnRleHQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNjYW5Db3VudCwgc3dpdGNoTWFwTWF5YmVPYnMgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogVXNlZCBmb3IgcmVuZGluZyBhIGZvcm0gZnJvbSBhIERieEZvcm1seUNvbnRleHQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1mb3JtbHknLFxuICBleHBvcnRBczogJ2Zvcm1seScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJkYngtZm9ybWx5XCI+XG4gICAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiKGZpZWxkcyQgfCBhc3luYykgPz8gW11cIiBbbW9kZWxdPVwibW9kZWxcIj48L2Zvcm1seS1mb3JtPlxuICAgIDwvZm9ybT5cbiAgYCxcbiAgcHJvdmlkZXJzOiBQcm92aWRlRGJ4TXV0YWJsZUZvcm0oRGJ4Rm9ybWx5Rm9ybUNvbXBvbmVudCksXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZGJ4LWZvcm1seSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGb3JtbHlGb3JtQ29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBEYnhGb3JtLCBEYnhGb3JtbHlDb250ZXh0RGVsZWdhdGU8VD4sIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9maWVsZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8Rm9ybWx5RmllbGRDb25maWdbXT4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9ldmVudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERieEZvcm1FdmVudD4oeyBpc0NvbXBsZXRlOiBmYWxzZSwgc3RhdGU6IERieEZvcm1TdGF0ZS5JTklUSUFMSVpJTkcgfSk7XG5cbiAgcHJpdmF0ZSBfcmVzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwcml2YXRlIF9mb3JjZVVwZGF0ZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBtb2RlbDogYW55ID0ge307XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge307XG5cbiAgcmVhZG9ubHkgZmllbGRzJCA9IHRoaXMuX2ZpZWxkcy5waXBlKHN3aXRjaE1hcE1heWJlT2JzKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzdHJlYW0kOiBPYnNlcnZhYmxlPERieEZvcm1FdmVudD4gPSB0aGlzLl9yZXNldC5waXBlKFxuICAgIHN3aXRjaE1hcCgobGFzdFJlc2V0QXQpID0+IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0aHJvdHRsZVRpbWUoNTAsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgIHNjYW5Db3VudCgpLFxuICAgICAgbWFwKChjaGFuZ2VzU2luY2VMYXN0UmVzZXRDb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVzZXQgPSBjaGFuZ2VzU2luY2VMYXN0UmVzZXRDb3VudCA9PT0gMTtcbiAgICAgICAgY29uc3QgY29tcGxldGUgPSB0aGlzLmZvcm0udmFsaWQ7XG5cbiAgICAgICAgY29uc3QgbmV4dFN0YXRlOiBEYnhGb3JtRXZlbnQgPSB7XG4gICAgICAgICAgaXNDb21wbGV0ZTogY29tcGxldGUsXG4gICAgICAgICAgc3RhdGU6IChpc1Jlc2V0KSA/IERieEZvcm1TdGF0ZS5SRVNFVCA6IERieEZvcm1TdGF0ZS5VU0VELFxuICAgICAgICAgIHVudG91Y2hlZDogdGhpcy5mb3JtLnVudG91Y2hlZCxcbiAgICAgICAgICBwcmlzdGluZTogdGhpcy5mb3JtLnByaXN0aW5lLFxuICAgICAgICAgIGNoYW5nZXNDb3VudDogY2hhbmdlc1NpbmNlTGFzdFJlc2V0Q291bnQsXG4gICAgICAgICAgbGFzdFJlc2V0QXQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9KVxuICAgICkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBEYnhGb3JtbHlDb250ZXh0PFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dC5zZXREZWxlZ2F0ZSh0aGlzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dC5sb2NrU2V0Lm9uTmV4dFVubG9jaygoKSA9PiB7XG4gICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmNsZWFyRGVsZWdhdGUodGhpcyk7XG4gICAgICB0aGlzLl9ldmVudHMuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuX2ZpZWxkcy5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fcmVzZXQuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuX2ZvcmNlVXBkYXRlLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBEZWxlZ2F0ZVxuICBpbml0KGluaXRpYWxpemU6IERieEZvcm1seUluaXRpYWxpemU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9maWVsZHMubmV4dChpbml0aWFsaXplLmZpZWxkcyk7XG4gIH1cblxuICBnZXRWYWx1ZSgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldCB2YWx1ZTogJywgdmFsdWUpO1xuICAgIHRoaXMubW9kZWwgPSBjbG9uZURlZXAodmFsdWUpIGFzIFQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnVwZGF0ZUluaXRpYWxWYWx1ZSgpO1xuICAgICAgdGhpcy5vcHRpb25zLnJlc2V0TW9kZWw/LigpO1xuICAgIH1cblxuICAgIC8vIFJlLW1hcmsgYXMgdW50b3VjaGVkIGFuZCBwcmlzdGluZS5cbiAgICB0aGlzLmZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAvLyBBZnRlciB1cGRhdGluZyB0aGUgdmFsdWUsIGlmIHRoZSBmb3JtIGlzIHN0aWxsIHVudG91Y2hlZCBtYXJrIGl0IGFzIHByaXN0aW5lIGFnYWluLlxuICAgIC8vIFNvbWV0aW1lcyB0aGUgdmFsdWVzIGdldCBtYXJrZWQgYXMgY2hhbmdlZCBhbmQgYnJlYWsgcHJpc3RpbmUgYmVmb3JlIGEgdXNlciBoYXMgdGltZSB0byBpbnRlcmFjdC5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm0udW50b3VjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXNldE1vZGVsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMucmVzZXRNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmRpc2FibGVkO1xuICB9XG5cbiAgc2V0RGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKGRpc2FibGVkICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1BUks6IFVwZGF0ZVxuICBmb3JjZUZvcm1VcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VVcGRhdGUubmV4dCgpO1xuICB9XG5cbn1cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LmZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEosT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUE2QyxZQUFZLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekksT0FBTyxFQUFFLGdCQUFnQixFQUFpRCxNQUFNLGtCQUFrQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQXlCLG9DQUFvQyxFQUFTLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFTbkc7O0dBRUc7QUFjSCxNQUFNLE9BQU8sc0JBQXlDLFNBQVEsNkJBQTZCO0lBZ0V6RixZQUE2QixPQUE0QjtRQUN2RCxLQUFLLEVBQUUsQ0FBQztRQURtQixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQTlEakQsWUFBTyxHQUFHLElBQUksZUFBZSxDQUF5QyxTQUFTLENBQUMsQ0FBQztRQUNqRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFB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LElBQUksVUFBVTtRQUNaLE9BQU8sb0NBQW9DLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXdCLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDMUgsQ0FBQztJQUVELGVBQWU7SUFDZixlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzttSEExSlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsNkVBTHRCLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLHVFQUw5Qzs7OztHQUlUOzJGQU1VLHNCQUFzQjtrQkFibEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFFBQVEsRUFBRTs7OztHQUlUO29CQUNELFNBQVMsRUFBRSxxQkFBcUIsd0JBQXdCO29CQUN4RCxJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLFlBQVk7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0aHJvdHRsZVRpbWUsIHN0YXJ0V2l0aCwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBvZiwgc2NhbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEYnhGb3JtLCBEYnhGb3JtRGlzYWJsZWRLZXksIERieEZvcm1FdmVudCwgRGJ4Rm9ybVN0YXRlLCBERUZBVUxUX0ZPUk1fRElTQUJMRURfS0VZLCBQcm92aWRlRGJ4TXV0YWJsZUZvcm0gfSBmcm9tICcuLi9mb3JtL2Zvcm0nO1xuaW1wb3J0IHsgRGJ4Rm9ybWx5Q29udGV4dCwgRGJ4Rm9ybWx5Q29udGV4dERlbGVnYXRlLCBEYnhGb3JtbHlJbml0aWFsaXplIH0gZnJvbSAnLi9mb3JtbHkuY29udGV4dCc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc2NhbkNvdW50LCBzd2l0Y2hNYXBNYXliZU9icywgU3Vic2NyaXB0aW9uT2JqZWN0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBCb29sZWFuU3RyaW5nS2V5QXJyYXksIEJvb2xlYW5TdHJpbmdLZXlBcnJheVV0aWxpdHlJbnN0YW5jZSwgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIERieEZvcm1seUZvcm1TdGF0ZSB7XG4gIGNoYW5nZXNTaW5jZUxhc3RSZXNldENvdW50OiBudW1iZXI7XG4gIGlzRm9ybVZhbGlkOiBib29sZWFuO1xuICBpc0Zvcm1EaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2VkIGZvciByZW5kaW5nIGEgZm9ybSBmcm9tIGEgRGJ4Rm9ybWx5Q29udGV4dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LWZvcm1seScsXG4gIGV4cG9ydEFzOiAnZm9ybWx5JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImRieC1mb3JtbHlcIj5cbiAgICAgIDxmb3JtbHktZm9ybSBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCIoZmllbGRzJCB8IGFzeW5jKSA/PyBbXVwiIFttb2RlbF09XCJtb2RlbFwiPjwvZm9ybWx5LWZvcm0+XG4gICAgPC9mb3JtPlxuICBgLFxuICBwcm92aWRlcnM6IFByb3ZpZGVEYnhNdXRhYmxlRm9ybShEYnhGb3JtbHlGb3JtQ29tcG9uZW50KSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdkYngtZm9ybWx5J1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERieEZvcm1seUZvcm1Db21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBBYnN0cmFjdFN1YnNjcmlwdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIERieEZvcm0sIERieEZvcm1seUNvbnRleHREZWxlZ2F0ZTxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2ZpZWxkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxGb3JtbHlGaWVsZENvbmZpZ1tdPj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2V2ZW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGJ4Rm9ybUV2ZW50Pih7IGlzQ29tcGxldGU6IGZhbHNlLCBzdGF0ZTogRGJ4Rm9ybVN0YXRlLklOSVRJQUxJWklORyB9KTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW5TdHJpbmdLZXlBcnJheT4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9yZXNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4obmV3IERhdGUoKSk7XG4gIHByaXZhdGUgX2ZvcmNlVXBkYXRlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9kaXNhYmxlZFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIG1vZGVsOiBhbnkgPSB7fTtcbiAgb3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcblxuICByZWFkb25seSBmaWVsZHMkID0gdGhpcy5fZmllbGRzLnBpcGUoc3dpdGNoTWFwTWF5YmVPYnMoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHN0cmVhbSQ6IE9ic2VydmFibGU8RGJ4Rm9ybUV2ZW50PiA9IHRoaXMuX3Jlc2V0LnBpcGUoXG4gICAgc3dpdGNoTWFwKChsYXN0UmVzZXRBdCkgPT4gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgc2NhbkNvdW50KCksXG4gICAgICBtYXAoKGNoYW5nZXNTaW5jZUxhc3RSZXNldENvdW50OiBudW1iZXIpID0+ICh7XG4gICAgICAgIGNoYW5nZXNTaW5jZUxhc3RSZXNldENvdW50LFxuICAgICAgICBpc0Zvcm1WYWxpZDogdGhpcy5mb3JtLnZhbGlkLFxuICAgICAgICBpc0Zvcm1EaXNhYmxlZDogdGhpcy5mb3JtLmRpc2FibGVkXG4gICAgICB9KSksXG4gICAgICBzY2FuKChhY2M6IERieEZvcm1seUZvcm1TdGF0ZSwgbmV4dDogRGJ4Rm9ybWx5Rm9ybVN0YXRlKSA9PiB7XG4gICAgICAgIC8vIFBhc3MgZm9yd2FyZCB2YWxpZCBpZiBuZXh0IHdhcyBhIGRpc2FibGVkIGNoYW5nZS9jaGVjaywgd2hpY2ggY2hhbmdlcyBhbmd1bGFyIGZvcm0ncyBpc1ZhbGlkIHZhbHVlLlxuICAgICAgICAvLyBJZiBpdCB3YXMgdmFsaWQgcHJpb3IsIHRoZW4gaXQgc2hvdWxkIGJlIHZhbGlkIG5vdywgdW5sZXNzIHdlIGp1c3QgcmVzZXQsIGluIHdoaWNoIGNhc2UgaXQgbWlnaHQgbm90IGJlIHZhbGlkLlxuICAgICAgICBjb25zdCB2YWxpZCA9IG5leHQuaXNGb3JtVmFsaWQgfHwgKG5leHQuaXNGb3JtRGlzYWJsZWQgJiYgYWNjLmlzRm9ybVZhbGlkICYmIGFjYy5jaGFuZ2VzU2luY2VMYXN0UmVzZXRDb3VudCA+IDApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hhbmdlc1NpbmNlTGFzdFJlc2V0Q291bnQ6IG5leHQuY2hhbmdlc1NpbmNlTGFzdFJlc2V0Q291bnQsXG4gICAgICAgICAgaXNGb3JtVmFsaWQ6IHZhbGlkLFxuICAgICAgICAgIGlzRm9ybURpc2FibGVkOiBuZXh0LmlzRm9ybURpc2FibGVkXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGNoYW5nZXNTaW5jZUxhc3RSZXNldENvdW50OiAwLFxuICAgICAgICBpc0Zvcm1WYWxpZDogZmFsc2UsXG4gICAgICAgIGlzRm9ybURpc2FibGVkOiBmYWxzZVxuICAgICAgfSksXG4gICAgICBtYXAoKHsgY2hhbmdlc1NpbmNlTGFzdFJlc2V0Q291bnQsIGlzRm9ybVZhbGlkLCBpc0Zvcm1EaXNhYmxlZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVzZXQgPSBjaGFuZ2VzU2luY2VMYXN0UmVzZXRDb3VudCA9PT0gMTtcbiAgICAgICAgY29uc3QgY29tcGxldGUgPSBpc0Zvcm1WYWxpZDtcblxuICAgICAgICBjb25zdCBuZXh0U3RhdGU6IERieEZvcm1FdmVudCA9IHtcbiAgICAgICAgICBpc0NvbXBsZXRlOiBjb21wbGV0ZSxcbiAgICAgICAgICBzdGF0ZTogKGlzUmVzZXQpID8gRGJ4Rm9ybVN0YXRlLlJFU0VUIDogRGJ4Rm9ybVN0YXRlLlVTRUQsXG4gICAgICAgICAgdW50b3VjaGVkOiB0aGlzLmZvcm0udW50b3VjaGVkLFxuICAgICAgICAgIHByaXN0aW5lOiB0aGlzLmZvcm0ucHJpc3RpbmUsXG4gICAgICAgICAgY2hhbmdlc0NvdW50OiBjaGFuZ2VzU2luY2VMYXN0UmVzZXRDb3VudCxcbiAgICAgICAgICBsYXN0UmVzZXRBdCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Zvcm1EaXNhYmxlZFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9KVxuICAgICkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBEYnhGb3JtbHlDb250ZXh0PFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dC5zZXREZWxlZ2F0ZSh0aGlzKTtcblxuICAgIHRoaXMuX2Rpc2FibGVkU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuX2Rpc2FibGVkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IEJvb2xlYW5TdHJpbmdLZXlBcnJheVV0aWxpdHlJbnN0YW5jZS5pc1RydWUoZGlzYWJsZWQpO1xuXG4gICAgICBpZiAodGhpcy5mb3JtLmRpc2FibGVkICE9PSBpc0Rpc2FibGVkKSB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0LmxvY2tTZXQub25OZXh0VW5sb2NrKCgpID0+IHtcbiAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbnRleHQuY2xlYXJEZWxlZ2F0ZSh0aGlzKTtcbiAgICAgIHRoaXMuX2V2ZW50cy5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fZmllbGRzLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9yZXNldC5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fZm9yY2VVcGRhdGUuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuX2Rpc2FibGVkLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9kaXNhYmxlZFN1Yi5kZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBEZWxlZ2F0ZVxuICBpbml0KGluaXRpYWxpemU6IERieEZvcm1seUluaXRpYWxpemU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9maWVsZHMubmV4dChpbml0aWFsaXplLmZpZWxkcyk7XG4gICAgdGhpcy5fZGlzYWJsZWQubmV4dChpbml0aWFsaXplLmluaXRpYWxEaXNhYmxlZCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldCB2YWx1ZTogJywgdmFsdWUpO1xuICAgIHRoaXMubW9kZWwgPSBjbG9uZURlZXAodmFsdWUpIGFzIFQ7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnVwZGF0ZUluaXRpYWxWYWx1ZSgpO1xuICAgICAgdGhpcy5vcHRpb25zLnJlc2V0TW9kZWw/LigpO1xuICAgIH1cblxuICAgIC8vIFJlLW1hcmsgYXMgdW50b3VjaGVkIGFuZCBwcmlzdGluZS5cbiAgICB0aGlzLmZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAvLyBBZnRlciB1cGRhdGluZyB0aGUgdmFsdWUsIGlmIHRoZSBmb3JtIGlzIHN0aWxsIHVudG91Y2hlZCBtYXJrIGl0IGFzIHByaXN0aW5lIGFnYWluLlxuICAgIC8vIFNvbWV0aW1lcyB0aGUgdmFsdWVzIGdldCBtYXJrZWQgYXMgY2hhbmdlZCBhbmQgYnJlYWsgcHJpc3RpbmUgYmVmb3JlIGEgdXNlciBoYXMgdGltZSB0byBpbnRlcmFjdC5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm0udW50b3VjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXNldE1vZGVsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMucmVzZXRNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuU3RyaW5nS2V5QXJyYXlVdGlsaXR5SW5zdGFuY2UuaXNUcnVlKHRoaXMuZGlzYWJsZWQpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IEJvb2xlYW5TdHJpbmdLZXlBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkLnZhbHVlO1xuICB9XG5cbiAgZ2V0RGlzYWJsZWQoKTogT2JzZXJ2YWJsZTxCb29sZWFuU3RyaW5nS2V5QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXREaXNhYmxlZChrZXk/OiBEYnhGb3JtRGlzYWJsZWRLZXksIGRpc2FibGVkID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkLm5leHQoQm9vbGVhblN0cmluZ0tleUFycmF5VXRpbGl0eUluc3RhbmNlLnNldCh0aGlzLmRpc2FibGVkLCBrZXkgPz8gREVGQVVMVF9GT1JNX0RJU0FCTEVEX0tFWSwgZGlzYWJsZWQpKVxuICB9XG5cbiAgLy8gTUFSSzogVXBkYXRlXG4gIGZvcmNlRm9ybVVwZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZVVwZGF0ZS5uZXh0KCk7XG4gIH1cblxufVxuIl19
@@ -8,8 +8,8 @@ import { DbxFormlyFieldsContextDirective } from './formly.context.directive';
8
8
  import * as i0 from "@angular/core";
9
9
  export class DbxFormlyModule {
10
10
  }
11
- DbxFormlyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- DbxFormlyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyModule, declarations: [DbxFormlyFormComponent,
11
+ DbxFormlyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ DbxFormlyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyModule, declarations: [DbxFormlyFormComponent,
13
13
  DbxFormlyFieldsContextDirective], imports: [CommonModule,
14
14
  FormsModule,
15
15
  ReactiveFormsModule,
@@ -21,7 +21,7 @@ DbxFormlyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version
21
21
  // Directives
22
22
  DbxFormlyFormComponent,
23
23
  DbxFormlyFieldsContextDirective] });
24
- DbxFormlyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyModule, imports: [[
24
+ DbxFormlyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyModule, imports: [[
25
25
  CommonModule,
26
26
  FormsModule,
27
27
  ReactiveFormsModule,
@@ -31,7 +31,7 @@ DbxFormlyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
31
31
  // Modules (?)
32
32
  FormsModule,
33
33
  ReactiveFormsModule] });
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormlyModule, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormlyModule, decorators: [{
35
35
  type: NgModule,
36
36
  args: [{
37
37
  imports: [
@@ -4,12 +4,12 @@ import { DbxFormSpacerComponent } from './form.spacer.component';
4
4
  import * as i0 from "@angular/core";
5
5
  export class DbxFormLayoutModule {
6
6
  }
7
- DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormLayoutModule, declarations: [DbxFormSpacerComponent], imports: [CommonModule], exports: [DbxFormSpacerComponent] });
9
- DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormLayoutModule, imports: [[
7
+ DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, declarations: [DbxFormSpacerComponent], imports: [CommonModule], exports: [DbxFormSpacerComponent] });
9
+ DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, imports: [[
10
10
  CommonModule
11
11
  ]] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormLayoutModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [
@@ -5,9 +5,9 @@ import * as i0 from "@angular/core";
5
5
  */
6
6
  export class DbxFormSpacerComponent {
7
7
  }
8
- DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
- DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: DbxFormSpacerComponent, selector: "dbx-form-spacer", ngImport: i0, template: `<div class="dbx-form-spacer"></div>`, isInline: true });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbxFormSpacerComponent, decorators: [{
8
+ DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: DbxFormSpacerComponent, selector: "dbx-form-spacer", ngImport: i0, template: `<div class="dbx-form-spacer"></div>`, isInline: true });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormSpacerComponent, decorators: [{
11
11
  type: Component,
12
12
  args: [{
13
13
  selector: 'dbx-form-spacer',