@dynamic-field-kit/angular 1.0.2 → 1.2.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 (31) hide show
  1. package/README.md +118 -60
  2. package/dist/README.md +118 -60
  3. package/dist/components/BaseInput.d.ts +22 -0
  4. package/dist/components/DynamicInput.d.ts +28 -0
  5. package/dist/components/FieldInput.d.ts +14 -0
  6. package/dist/components/MultiFieldInput.d.ts +23 -0
  7. package/dist/esm2020/components/BaseInput.mjs +46 -0
  8. package/dist/esm2020/components/DynamicInput.mjs +146 -0
  9. package/dist/esm2020/components/FieldInput.mjs +66 -0
  10. package/dist/esm2020/components/MultiFieldInput.mjs +79 -0
  11. package/dist/esm2020/dynamic-field-kit-angular.mjs +5 -0
  12. package/dist/esm2020/layout/defaultLayouts.mjs +43 -0
  13. package/dist/esm2020/layout/index.mjs +2 -0
  14. package/dist/esm2020/lib/dynamic-field-kit.module.mjs +20 -0
  15. package/dist/esm2020/public-api.mjs +14 -0
  16. package/dist/esm2020/types/layout.mjs +2 -0
  17. package/dist/fesm2015/dynamic-field-kit-angular.mjs +393 -0
  18. package/dist/fesm2015/dynamic-field-kit-angular.mjs.map +1 -0
  19. package/dist/fesm2020/dynamic-field-kit-angular.mjs +390 -0
  20. package/dist/fesm2020/dynamic-field-kit-angular.mjs.map +1 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/layout/defaultLayouts.d.ts +13 -0
  23. package/dist/layout/index.d.ts +1 -0
  24. package/dist/lib/dynamic-field-kit.module.d.ts +11 -0
  25. package/dist/package.json +50 -0
  26. package/dist/public-api.d.ts +9 -0
  27. package/dist/types/layout.d.ts +1 -0
  28. package/package.json +9 -9
  29. package/dist/fesm2022/dynamic-field-kit-angular.mjs +0 -266
  30. package/dist/fesm2022/dynamic-field-kit-angular.mjs.map +0 -1
  31. package/dist/types/dynamic-field-kit-angular.d.ts +0 -70
package/README.md CHANGED
@@ -1,65 +1,123 @@
1
- # @dynamic-field-kit/angular
2
-
3
- Lightweight Angular adapters for `@dynamic-field-kit/core`.
4
-
5
- This package mirrors the React package structure and exposes Angular components that integrate with the shared `fieldRegistry` from `@dynamic-field-kit/core`.
6
-
7
- Quick overview
8
- - Exports a minimal Angular integration: `DynamicInput`, `FieldInput`, `MultiFieldInput`, layout components and `DynamicFieldKitModule` (see `src/public-api.ts`).
9
- - Designed for local development (source import) and can be packaged with `ng-packagr` for distribution.
10
-
11
- Usage (consumer Angular app)
12
-
13
- 1. Install the package (recommended: use packaged artifact or local `file:` during development):
14
-
15
- ```bash
16
- # from your Angular app
17
- npm install @dynamic-field-kit/core @dynamic-field-kit/angular
18
- ```
19
-
20
- 2. Import the module in your `AppModule`:
21
-
22
- ```ts
23
- import { DynamicFieldKitModule } from '@dynamic-field-kit/angular'
1
+ # @dynamic-field-kit/angular
2
+
3
+ Lightweight Angular adapters for `@dynamic-field-kit/core`.
4
+
5
+ This package exposes Angular components and a convenience NgModule that integrate with the shared `fieldRegistry` from `@dynamic-field-kit/core`.
6
+
7
+ Quick overview
8
+ - Exports `DynamicInput`, `FieldInput`, `MultiFieldInput`, layout components, and `DynamicFieldKitModule`.
9
+ - Uses the shared `fieldRegistry` from `@dynamic-field-kit/core` to resolve Angular field renderers at runtime.
10
+ - Can be consumed as a packaged library, or linked locally from `packages/angular/dist` during development.
11
+ - `MultiFieldInput` currently supports `column`, `row`, and `grid` layout values.
12
+
13
+ Usage (consumer Angular app)
14
+
15
+ 1. Install the packages:
16
+
17
+ ```bash
18
+ npm install @dynamic-field-kit/core @dynamic-field-kit/angular
19
+ ```
20
+
21
+ 2. Import `DynamicFieldKitModule` in your Angular module:
22
+
23
+ ```ts
24
+ import { DynamicFieldKitModule } from '@dynamic-field-kit/angular'
24
25
 
25
26
  @NgModule({
26
27
  imports: [BrowserModule, DynamicFieldKitModule],
27
28
  })
28
- export class AppModule {}
29
- ```
30
-
31
- 3. Register Angular component classes into the shared registry at app startup (example):
32
-
33
- ```ts
34
- // src/main.ts
35
- import '@dynamic-field-kit/angular/src/examples' // registers example component into fieldRegistry
36
- ```
37
-
38
- Then use the Angular adapter components (`dfk-multi-field-input`, etc.) in templates.
39
-
40
- Local development
41
- - You can import the package source directly in your Angular app using `file:` references in `package.json` (see `example/angular-instructions.md` and `example/angular-app/` for a scaffold).
42
-
43
- Build & publish
44
- - This package supports `ng-packagr`. To build locally:
45
-
46
- ```bash
47
- cd packages/angular
48
- npm install --no-audit --no-fund --save-dev ng-packagr rimraf
49
- npm run build
29
+ export class AppModule {}
30
+ ```
31
+
32
+ 3. Register your Angular field components in the shared registry before bootstrap:
33
+
34
+ ```ts
35
+ // src/main.ts
36
+ import 'zone.js'
37
+ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
38
+ import { fieldRegistry } from '@dynamic-field-kit/angular'
39
+ import { AppModule } from './app/app.module'
40
+ import { TextFieldComponent } from './app/components/text-field.component'
41
+ import { NumberFieldComponent } from './app/components/number-field.component'
42
+
43
+ fieldRegistry.register('text', TextFieldComponent as any)
44
+ fieldRegistry.register('number', NumberFieldComponent as any)
45
+
46
+ platformBrowserDynamic()
47
+ .bootstrapModule(AppModule)
48
+ .catch((err) => console.error(err))
49
+ ```
50
+
51
+ 4. Render fields in a template:
52
+
53
+ ```html
54
+ <dfk-multi-field-input
55
+ [fieldDescriptions]="fields"
56
+ [properties]="data"
57
+ (onChange)="onChange($event)"
58
+ ></dfk-multi-field-input>
59
+ ```
60
+
61
+ 5. Example component state:
62
+
63
+ ```ts
64
+ import { Component } from '@angular/core'
65
+ import { FieldDescription } from '@dynamic-field-kit/core'
66
+
67
+ @Component({
68
+ selector: 'app-root',
69
+ templateUrl: './app.component.html',
70
+ })
71
+ export class AppComponent {
72
+ fields: FieldDescription[] = [
73
+ { name: 'name', type: 'text', label: 'Name' },
74
+ { name: 'age', type: 'number', label: 'Age' },
75
+ ]
76
+
77
+ data: any = {}
78
+
79
+ onChange(data: any) {
80
+ this.data = data
81
+ }
82
+ }
83
+ ```
84
+
85
+ Local development
86
+ - During local development, point your Angular app at the built package output instead of importing from `src/`:
87
+
88
+ ```json
89
+ {
90
+ "dependencies": {
91
+ "@dynamic-field-kit/core": "file:../../packages/core",
92
+ "@dynamic-field-kit/angular": "file:../../packages/angular/dist"
93
+ }
94
+ }
95
+ ```
96
+
97
+ - When using a local `file:` dependency on Windows or via symlinked installs, set `preserveSymlinks: true` in the Angular builder options to avoid runtime issues with linked packages.
98
+
99
+ Build & publish
100
+ - Build locally with `ng-packagr`:
101
+
102
+ ```bash
103
+ cd packages/angular
104
+ npm run build
105
+ ```
106
+
107
+ - Publish to npm:
108
+
109
+ ```bash
110
+ cd packages/angular
111
+ npm publish --access public
50
112
  ```
51
-
52
- - To publish to npm (scoped package), ensure `publishConfig.access` is `public` and run:
53
-
54
- ```bash
55
- cd packages/angular
56
- npm publish --access public
57
- ```
58
-
59
- Notes & caveats
60
- - The Angular adapter expects consumers to register Angular component classes (not React components) in `fieldRegistry` when using the Angular runtime.
61
- - The package exports a `DynamicFieldKitModule` to simplify consumer imports, and also provides standalone components for more advanced composition.
62
-
63
- Examples & docs
64
- - See `example/angular-instructions.md` for detailed wiring steps.
65
- - Try the local scaffold at `example/angular-app/` for a hands-on demo.
113
+
114
+ Notes & caveats
115
+ - Register Angular component classes in `fieldRegistry`. Do not register React or Vue renderers when using the Angular adapter.
116
+ - `DynamicFieldKitModule` is the recommended integration path for consumer apps.
117
+ - Standalone exports are still available for advanced composition, but most apps should start with the module.
118
+ - Text fields default to an empty string when no value is present, so empty controls render as blank instead of `undefined`.
119
+ - Supported `layout` values are `column`, `row`, and `grid`.
120
+
121
+ Examples & docs
122
+ - See `example/angular-instructions.md` for detailed wiring steps.
123
+ - Try the local scaffold at `example/angular-app/` for a hands-on demo.
package/dist/README.md CHANGED
@@ -1,65 +1,123 @@
1
- # @dynamic-field-kit/angular
2
-
3
- Lightweight Angular adapters for `@dynamic-field-kit/core`.
4
-
5
- This package mirrors the React package structure and exposes Angular components that integrate with the shared `fieldRegistry` from `@dynamic-field-kit/core`.
6
-
7
- Quick overview
8
- - Exports a minimal Angular integration: `DynamicInput`, `FieldInput`, `MultiFieldInput`, layout components and `DynamicFieldKitModule` (see `src/public-api.ts`).
9
- - Designed for local development (source import) and can be packaged with `ng-packagr` for distribution.
10
-
11
- Usage (consumer Angular app)
12
-
13
- 1. Install the package (recommended: use packaged artifact or local `file:` during development):
14
-
15
- ```bash
16
- # from your Angular app
17
- npm install @dynamic-field-kit/core @dynamic-field-kit/angular
18
- ```
19
-
20
- 2. Import the module in your `AppModule`:
21
-
22
- ```ts
23
- import { DynamicFieldKitModule } from '@dynamic-field-kit/angular'
1
+ # @dynamic-field-kit/angular
2
+
3
+ Lightweight Angular adapters for `@dynamic-field-kit/core`.
4
+
5
+ This package exposes Angular components and a convenience NgModule that integrate with the shared `fieldRegistry` from `@dynamic-field-kit/core`.
6
+
7
+ Quick overview
8
+ - Exports `DynamicInput`, `FieldInput`, `MultiFieldInput`, layout components, and `DynamicFieldKitModule`.
9
+ - Uses the shared `fieldRegistry` from `@dynamic-field-kit/core` to resolve Angular field renderers at runtime.
10
+ - Can be consumed as a packaged library, or linked locally from `packages/angular/dist` during development.
11
+ - `MultiFieldInput` currently supports `column`, `row`, and `grid` layout values.
12
+
13
+ Usage (consumer Angular app)
14
+
15
+ 1. Install the packages:
16
+
17
+ ```bash
18
+ npm install @dynamic-field-kit/core @dynamic-field-kit/angular
19
+ ```
20
+
21
+ 2. Import `DynamicFieldKitModule` in your Angular module:
22
+
23
+ ```ts
24
+ import { DynamicFieldKitModule } from '@dynamic-field-kit/angular'
24
25
 
25
26
  @NgModule({
26
27
  imports: [BrowserModule, DynamicFieldKitModule],
27
28
  })
28
- export class AppModule {}
29
- ```
30
-
31
- 3. Register Angular component classes into the shared registry at app startup (example):
32
-
33
- ```ts
34
- // src/main.ts
35
- import '@dynamic-field-kit/angular/src/examples' // registers example component into fieldRegistry
36
- ```
37
-
38
- Then use the Angular adapter components (`dfk-multi-field-input`, etc.) in templates.
39
-
40
- Local development
41
- - You can import the package source directly in your Angular app using `file:` references in `package.json` (see `example/angular-instructions.md` and `example/angular-app/` for a scaffold).
42
-
43
- Build & publish
44
- - This package supports `ng-packagr`. To build locally:
45
-
46
- ```bash
47
- cd packages/angular
48
- npm install --no-audit --no-fund --save-dev ng-packagr rimraf
49
- npm run build
29
+ export class AppModule {}
30
+ ```
31
+
32
+ 3. Register your Angular field components in the shared registry before bootstrap:
33
+
34
+ ```ts
35
+ // src/main.ts
36
+ import 'zone.js'
37
+ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
38
+ import { fieldRegistry } from '@dynamic-field-kit/angular'
39
+ import { AppModule } from './app/app.module'
40
+ import { TextFieldComponent } from './app/components/text-field.component'
41
+ import { NumberFieldComponent } from './app/components/number-field.component'
42
+
43
+ fieldRegistry.register('text', TextFieldComponent as any)
44
+ fieldRegistry.register('number', NumberFieldComponent as any)
45
+
46
+ platformBrowserDynamic()
47
+ .bootstrapModule(AppModule)
48
+ .catch((err) => console.error(err))
49
+ ```
50
+
51
+ 4. Render fields in a template:
52
+
53
+ ```html
54
+ <dfk-multi-field-input
55
+ [fieldDescriptions]="fields"
56
+ [properties]="data"
57
+ (onChange)="onChange($event)"
58
+ ></dfk-multi-field-input>
59
+ ```
60
+
61
+ 5. Example component state:
62
+
63
+ ```ts
64
+ import { Component } from '@angular/core'
65
+ import { FieldDescription } from '@dynamic-field-kit/core'
66
+
67
+ @Component({
68
+ selector: 'app-root',
69
+ templateUrl: './app.component.html',
70
+ })
71
+ export class AppComponent {
72
+ fields: FieldDescription[] = [
73
+ { name: 'name', type: 'text', label: 'Name' },
74
+ { name: 'age', type: 'number', label: 'Age' },
75
+ ]
76
+
77
+ data: any = {}
78
+
79
+ onChange(data: any) {
80
+ this.data = data
81
+ }
82
+ }
83
+ ```
84
+
85
+ Local development
86
+ - During local development, point your Angular app at the built package output instead of importing from `src/`:
87
+
88
+ ```json
89
+ {
90
+ "dependencies": {
91
+ "@dynamic-field-kit/core": "file:../../packages/core",
92
+ "@dynamic-field-kit/angular": "file:../../packages/angular/dist"
93
+ }
94
+ }
95
+ ```
96
+
97
+ - When using a local `file:` dependency on Windows or via symlinked installs, set `preserveSymlinks: true` in the Angular builder options to avoid runtime issues with linked packages.
98
+
99
+ Build & publish
100
+ - Build locally with `ng-packagr`:
101
+
102
+ ```bash
103
+ cd packages/angular
104
+ npm run build
105
+ ```
106
+
107
+ - Publish to npm:
108
+
109
+ ```bash
110
+ cd packages/angular
111
+ npm publish --access public
50
112
  ```
51
-
52
- - To publish to npm (scoped package), ensure `publishConfig.access` is `public` and run:
53
-
54
- ```bash
55
- cd packages/angular
56
- npm publish --access public
57
- ```
58
-
59
- Notes & caveats
60
- - The Angular adapter expects consumers to register Angular component classes (not React components) in `fieldRegistry` when using the Angular runtime.
61
- - The package exports a `DynamicFieldKitModule` to simplify consumer imports, and also provides standalone components for more advanced composition.
62
-
63
- Examples & docs
64
- - See `example/angular-instructions.md` for detailed wiring steps.
65
- - Try the local scaffold at `example/angular-app/` for a hands-on demo.
113
+
114
+ Notes & caveats
115
+ - Register Angular component classes in `fieldRegistry`. Do not register React or Vue renderers when using the Angular adapter.
116
+ - `DynamicFieldKitModule` is the recommended integration path for consumer apps.
117
+ - Standalone exports are still available for advanced composition, but most apps should start with the module.
118
+ - Text fields default to an empty string when no value is present, so empty controls render as blank instead of `undefined`.
119
+ - Supported `layout` values are `column`, `row`, and `grid`.
120
+
121
+ Examples & docs
122
+ - See `example/angular-instructions.md` for detailed wiring steps.
123
+ - Try the local scaffold at `example/angular-app/` for a hands-on demo.
@@ -0,0 +1,22 @@
1
+ import { EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare abstract class BaseInputComponent {
4
+ protected cdr: ChangeDetectorRef;
5
+ value?: any;
6
+ label?: string;
7
+ placeholder?: string;
8
+ required?: boolean;
9
+ disabled?: boolean;
10
+ options?: any[];
11
+ className?: string;
12
+ description?: string;
13
+ errorMessage?: string;
14
+ acceptFile?: string;
15
+ maxLength?: number;
16
+ minNumber?: number;
17
+ maxNumber?: number;
18
+ valueChange: EventEmitter<any>;
19
+ constructor(cdr: ChangeDetectorRef);
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseInputComponent, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseInputComponent, "ng-component", never, { "value": "value"; "label": "label"; "placeholder": "placeholder"; "required": "required"; "disabled": "disabled"; "options": "options"; "className": "className"; "description": "description"; "errorMessage": "errorMessage"; "acceptFile": "acceptFile"; "maxLength": "maxLength"; "minNumber": "minNumber"; "maxNumber": "maxNumber"; }, { "valueChange": "valueChange"; }, never, never, false, never>;
22
+ }
@@ -0,0 +1,28 @@
1
+ import { EventEmitter, ViewContainerRef, OnChanges, AfterViewInit, SimpleChanges } from "@angular/core";
2
+ import { FieldTypeKey } from "@dynamic-field-kit/core";
3
+ import { BaseInputComponent } from "./BaseInput";
4
+ import * as i0 from "@angular/core";
5
+ export declare class DynamicInput extends BaseInputComponent implements OnChanges, AfterViewInit {
6
+ type: FieldTypeKey;
7
+ value?: any;
8
+ label?: string;
9
+ placeholder?: string;
10
+ required?: boolean;
11
+ options?: any[];
12
+ className?: string;
13
+ description?: any;
14
+ valueChange: EventEmitter<any>;
15
+ onChange: EventEmitter<any>;
16
+ host: ViewContainerRef;
17
+ private compRef?;
18
+ private inputInstance?;
19
+ ngOnChanges(changes: SimpleChanges): void;
20
+ ngAfterViewInit(): void;
21
+ private render;
22
+ private applyKnownProps;
23
+ private bindOutput;
24
+ private emitValue;
25
+ private cleanupRenderedComponent;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicInput, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicInput, "dfk-dynamic-input", never, { "type": "type"; "value": "value"; "label": "label"; "placeholder": "placeholder"; "required": "required"; "options": "options"; "className": "className"; "description": "description"; }, { "valueChange": "valueChange"; "onChange": "onChange"; }, never, never, true, never>;
28
+ }
@@ -0,0 +1,14 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import { FieldDescription, Properties } from "@dynamic-field-kit/core";
3
+ import * as i0 from "@angular/core";
4
+ export declare class FieldInput {
5
+ fieldDescription?: FieldDescription;
6
+ renderInfos?: Properties;
7
+ onValueChangeField: EventEmitter<{
8
+ value: any;
9
+ key: string;
10
+ }>;
11
+ getFieldValue(): any;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldInput, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldInput, "dfk-field-input", never, { "fieldDescription": "fieldDescription"; "renderInfos": "renderInfos"; }, { "onValueChangeField": "onValueChangeField"; }, never, never, true, never>;
14
+ }
@@ -0,0 +1,23 @@
1
+ import { EventEmitter, OnChanges, OnInit, SimpleChanges } from "@angular/core";
2
+ import { FieldDescription, Properties } from "@dynamic-field-kit/core";
3
+ import { LayoutConfig } from "../types/layout";
4
+ import * as i0 from "@angular/core";
5
+ export declare class MultiFieldInput implements OnInit, OnChanges {
6
+ fieldDescriptions: FieldDescription[];
7
+ properties?: Properties;
8
+ onChange: EventEmitter<Properties>;
9
+ layout: LayoutConfig;
10
+ data: Properties;
11
+ visibleFields: FieldDescription[];
12
+ trackByFn(index: number, field: FieldDescription): string | number;
13
+ ngOnInit(): void;
14
+ ngOnChanges(_changes: SimpleChanges): void;
15
+ private init;
16
+ private updateVisibleFields;
17
+ onFieldChange(event: {
18
+ value: any;
19
+ key: string;
20
+ }): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiFieldInput, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiFieldInput, "dfk-multi-field-input", never, { "fieldDescriptions": "fieldDescriptions"; "properties": "properties"; "layout": "layout"; }, { "onChange": "onChange"; }, never, never, true, never>;
23
+ }
@@ -0,0 +1,46 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BaseInputComponent {
4
+ constructor(cdr) {
5
+ this.cdr = cdr;
6
+ // Add more from mplis as needed
7
+ this.valueChange = new EventEmitter();
8
+ }
9
+ }
10
+ BaseInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BaseInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11
+ BaseInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BaseInputComponent, selector: "ng-component", inputs: { value: "value", label: "label", placeholder: "placeholder", required: "required", disabled: "disabled", options: "options", className: "className", description: "description", errorMessage: "errorMessage", acceptFile: "acceptFile", maxLength: "maxLength", minNumber: "minNumber", maxNumber: "maxNumber" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: '', isInline: true });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BaseInputComponent, decorators: [{
13
+ type: Component,
14
+ args: [{
15
+ template: ''
16
+ }]
17
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { value: [{
18
+ type: Input
19
+ }], label: [{
20
+ type: Input
21
+ }], placeholder: [{
22
+ type: Input
23
+ }], required: [{
24
+ type: Input
25
+ }], disabled: [{
26
+ type: Input
27
+ }], options: [{
28
+ type: Input
29
+ }], className: [{
30
+ type: Input
31
+ }], description: [{
32
+ type: Input
33
+ }], errorMessage: [{
34
+ type: Input
35
+ }], acceptFile: [{
36
+ type: Input
37
+ }], maxLength: [{
38
+ type: Input
39
+ }], minNumber: [{
40
+ type: Input
41
+ }], maxNumber: [{
42
+ type: Input
43
+ }], valueChange: [{
44
+ type: Output
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvQmFzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDOztBQU0xRixNQUFNLE9BQWdCLGtCQUFrQjtJQWtCdEMsWUFBc0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFKNUMsZ0NBQWdDO1FBRXRCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUVELENBQUM7O2dIQWxCNUIsa0JBQWtCO29HQUFsQixrQkFBa0IseVpBRjVCLEVBQUU7NEZBRVEsa0JBQWtCO2tCQUh2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiO3dHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFJlbmRlcmVyUHJvcHMgfSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJydcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VJbnB1dENvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgdmFsdWU/OiBhbnk7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvcHRpb25zPzogYW55W107XHJcbiAgQElucHV0KCkgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBASW5wdXQoKSBhY2NlcHRGaWxlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcclxuICBASW5wdXQoKSBtaW5OdW1iZXI/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4TnVtYmVyPzogbnVtYmVyO1xyXG4gIC8vIEFkZCBtb3JlIGZyb20gbXBsaXMgYXMgbmVlZGVkXHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxufVxyXG5cclxuIl19