@dynamic-field-kit/angular 1.2.4 → 1.3.3

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 (67) hide show
  1. package/README.md +116 -46
  2. package/angular.json +27 -0
  3. package/dist/README.md +188 -0
  4. package/dist/components/BaseInput.d.ts +40 -0
  5. package/dist/components/DynamicInput.d.ts +31 -0
  6. package/dist/components/FieldInput.d.ts +18 -0
  7. package/dist/components/MultiFieldInput.d.ts +40 -0
  8. package/dist/esm2022/components/BaseInput.mjs +68 -0
  9. package/dist/esm2022/components/DynamicInput.mjs +191 -0
  10. package/dist/esm2022/components/FieldInput.mjs +80 -0
  11. package/dist/esm2022/components/MultiFieldInput.mjs +264 -0
  12. package/{esm2020 → dist/esm2022}/dynamic-field-kit-angular.mjs +4 -4
  13. package/dist/esm2022/layout/defaultLayouts.mjs +114 -0
  14. package/dist/esm2022/layout/index.mjs +3 -0
  15. package/dist/esm2022/layout/layoutRegistry.mjs +14 -0
  16. package/dist/esm2022/lib/dynamic-field-kit.module.mjs +52 -0
  17. package/{esm2020 → dist/esm2022}/public-api.mjs +14 -14
  18. package/dist/esm2022/types/layout.mjs +2 -0
  19. package/dist/fesm2022/dynamic-field-kit-angular.mjs +771 -0
  20. package/dist/fesm2022/dynamic-field-kit-angular.mjs.map +1 -0
  21. package/{index.d.ts → dist/index.d.ts} +5 -5
  22. package/dist/layout/defaultLayouts.d.ts +31 -0
  23. package/dist/layout/index.d.ts +2 -0
  24. package/dist/layout/layoutRegistry.d.ts +12 -0
  25. package/{lib → dist/lib}/dynamic-field-kit.module.d.ts +11 -11
  26. package/{public-api.d.ts → dist/public-api.d.ts} +9 -9
  27. package/dist/types/layout.d.ts +25 -0
  28. package/karma.conf.js +37 -0
  29. package/ng-package.json +7 -0
  30. package/package.json +44 -28
  31. package/src/components/BaseInput.ts +60 -0
  32. package/src/components/DynamicInput.ts +224 -0
  33. package/src/components/FieldInput.ts +67 -0
  34. package/src/components/MultiFieldInput.ts +238 -0
  35. package/src/layout/defaultLayouts.ts +70 -0
  36. package/src/layout/index.ts +2 -0
  37. package/src/layout/layoutRegistry.ts +25 -0
  38. package/src/lib/dynamic-field-kit.module.ts +29 -0
  39. package/src/public-api.ts +24 -0
  40. package/src/types/layout.ts +36 -0
  41. package/test/DynamicInput.spec.ts +30 -0
  42. package/test/FieldInput.spec.ts +44 -0
  43. package/test/angular.spec.ts +102 -0
  44. package/test/integration.spec.ts +57 -0
  45. package/test/layouts.spec.ts +26 -0
  46. package/test.ts +12 -0
  47. package/tsconfig.json +13 -0
  48. package/tsconfig.spec.json +21 -0
  49. package/components/BaseInput.d.ts +0 -22
  50. package/components/DynamicInput.d.ts +0 -28
  51. package/components/FieldInput.d.ts +0 -14
  52. package/components/MultiFieldInput.d.ts +0 -23
  53. package/esm2020/components/BaseInput.mjs +0 -46
  54. package/esm2020/components/DynamicInput.mjs +0 -146
  55. package/esm2020/components/FieldInput.mjs +0 -66
  56. package/esm2020/components/MultiFieldInput.mjs +0 -79
  57. package/esm2020/layout/defaultLayouts.mjs +0 -43
  58. package/esm2020/layout/index.mjs +0 -2
  59. package/esm2020/lib/dynamic-field-kit.module.mjs +0 -20
  60. package/esm2020/types/layout.mjs +0 -2
  61. package/fesm2015/dynamic-field-kit-angular.mjs +0 -393
  62. package/fesm2015/dynamic-field-kit-angular.mjs.map +0 -1
  63. package/fesm2020/dynamic-field-kit-angular.mjs +0 -390
  64. package/fesm2020/dynamic-field-kit-angular.mjs.map +0 -1
  65. package/layout/defaultLayouts.d.ts +0 -13
  66. package/layout/index.d.ts +0 -1
  67. package/types/layout.d.ts +0 -1
@@ -0,0 +1,57 @@
1
+ describe('Integration: Form with multiple fields', () => {
2
+ it('should create field descriptions', () => {
3
+ const fields = [
4
+ { name: 'name', type: 'text', label: 'Full Name' },
5
+ { name: 'email', type: 'text', label: 'Email' },
6
+ ];
7
+ expect(fields.length).toBe(2);
8
+ expect(fields[0].label).toBe('Full Name');
9
+ });
10
+
11
+ it('should handle form data', () => {
12
+ const formData = { name: 'John', email: 'john@example.com' };
13
+ expect(formData.name).toBe('John');
14
+ expect(formData.email).toBe('john@example.com');
15
+ });
16
+
17
+ it('should evaluate appearCondition', () => {
18
+ const condition = (data: any) => data.accountType === 'business';
19
+ expect(condition({ accountType: 'personal' })).toBe(false);
20
+ expect(condition({ accountType: 'business' })).toBe(true);
21
+ });
22
+ });
23
+
24
+ describe('FieldDescription', () => {
25
+ it('should have name and type', () => {
26
+ const field = { name: 'username', type: 'text' };
27
+ expect(field.name).toBe('username');
28
+ expect(field.type).toBe('text');
29
+ });
30
+
31
+ it('should support optional properties', () => {
32
+ const field = {
33
+ name: 'username',
34
+ type: 'text',
35
+ label: 'Username',
36
+ placeholder: 'Enter name',
37
+ required: true,
38
+ options: [{ label: 'Option 1' }],
39
+ };
40
+ expect(field.label).toBe('Username');
41
+ expect(field.required).toBe(true);
42
+ expect(field.options?.length).toBe(1);
43
+ });
44
+ });
45
+
46
+ describe('Properties', () => {
47
+ it('should be a record of key-value pairs', () => {
48
+ const props: Record<string, any> = {
49
+ username: 'john',
50
+ age: 25,
51
+ active: true,
52
+ };
53
+ expect(props.username).toBe('john');
54
+ expect(props.age).toBe(25);
55
+ expect(props.active).toBe(true);
56
+ });
57
+ });
@@ -0,0 +1,26 @@
1
+ describe('Layout: Row', () => {
2
+ it('should render fields in row layout', () => {
3
+ const layout = 'row';
4
+ expect(layout).toBe('row');
5
+ });
6
+ });
7
+
8
+ describe('Layout: Grid', () => {
9
+ it('should render fields in default grid layout', () => {
10
+ const layout = 'grid';
11
+ expect(layout).toBe('grid');
12
+ });
13
+
14
+ it('should support grid with columns option', () => {
15
+ const layout = { type: 'grid', columns: 3 };
16
+ expect(layout.type).toBe('grid');
17
+ expect(layout.columns).toBe(3);
18
+ });
19
+ });
20
+
21
+ describe('Layout: Column', () => {
22
+ it('should render fields in column layout', () => {
23
+ const layout = 'column';
24
+ expect(layout).toBe('column');
25
+ });
26
+ });
package/test.ts ADDED
@@ -0,0 +1,12 @@
1
+ import 'zone.js';
2
+ import 'zone.js/testing';
3
+ import { getTestBed } from '@angular/core/testing';
4
+ import {
5
+ BrowserDynamicTestingModule,
6
+ platformBrowserDynamicTesting,
7
+ } from '@angular/platform-browser-dynamic/testing';
8
+
9
+ getTestBed().initTestEnvironment(
10
+ BrowserDynamicTestingModule,
11
+ platformBrowserDynamicTesting()
12
+ );
package/tsconfig.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "composite": false,
5
+ "declaration": true,
6
+ "outDir": "dist",
7
+ "target": "ES2019",
8
+ "module": "ES2020",
9
+ "experimentalDecorators": true,
10
+ "emitDecoratorMetadata": true
11
+ },
12
+ "include": ["src/**/*"]
13
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist-spec",
5
+ "module": "commonjs",
6
+ "moduleResolution": "node",
7
+ "target": "ES2020",
8
+ "emitDecoratorMetadata": true,
9
+ "experimentalDecorators": true,
10
+ "allowSyntheticDefaultImports": true,
11
+ "esModuleInterop": true,
12
+ "declaration": false,
13
+ "sourceMap": true,
14
+ "baseUrl": ".",
15
+ "skipLibCheck": true,
16
+ "noImplicitAny": false,
17
+ "strict": false
18
+ },
19
+ "include": ["test/**/*.ts"],
20
+ "exclude": ["node_modules", "dist", "dist-spec", "examples", "src"]
21
+ }
@@ -1,22 +0,0 @@
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
- }
@@ -1,28 +0,0 @@
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
- }
@@ -1,14 +0,0 @@
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
- }
@@ -1,23 +0,0 @@
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
- }
@@ -1,46 +0,0 @@
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
@@ -1,146 +0,0 @@
1
- import { CommonModule } from "@angular/common";
2
- import { Component, Input, Output, EventEmitter, ViewChild, ViewContainerRef, SimpleChange } from "@angular/core";
3
- import { fieldRegistry } from "@dynamic-field-kit/core";
4
- import { BaseInputComponent } from "./BaseInput";
5
- import * as i0 from "@angular/core";
6
- export class DynamicInput extends BaseInputComponent {
7
- constructor() {
8
- super(...arguments);
9
- this.valueChange = new EventEmitter();
10
- this.onChange = new EventEmitter(); // backward compat
11
- }
12
- ngOnChanges(changes) {
13
- if (changes["type"] && !changes["type"].firstChange && this.host) {
14
- this.render();
15
- return;
16
- }
17
- if (this.inputInstance) {
18
- this.applyKnownProps(this.inputInstance);
19
- const childChanges = {};
20
- for (const prop in changes) {
21
- childChanges[prop] = new SimpleChange(changes[prop].previousValue, changes[prop].currentValue, changes[prop].firstChange);
22
- }
23
- this.inputInstance.ngOnChanges?.(childChanges);
24
- this.compRef?.changeDetectorRef.detectChanges();
25
- }
26
- else if (this.host) {
27
- this.render();
28
- }
29
- }
30
- ngAfterViewInit() {
31
- this.render();
32
- }
33
- render() {
34
- const Renderer = fieldRegistry.get(this.type);
35
- this.cleanupRenderedComponent();
36
- this.host.clear();
37
- if (!Renderer) {
38
- const el = document.createElement("div");
39
- el.textContent = `Unknown field type: ${this.type}`;
40
- this.host.element.nativeElement.appendChild(el);
41
- return;
42
- }
43
- try {
44
- const compType = Renderer;
45
- const compRef = this.host.createComponent(compType);
46
- const instance = compRef.instance;
47
- if (!instance)
48
- throw new Error(`Failed to create instance for ${this.type}`);
49
- this.applyKnownProps(instance);
50
- this.bindOutput(instance, "valueChange");
51
- this.bindOutput(instance, "onValueChange");
52
- instance.changeDetectorRef?.detectChanges();
53
- this.compRef = compRef;
54
- this.inputInstance = instance;
55
- compRef.changeDetectorRef.detectChanges();
56
- }
57
- catch (err) {
58
- // Fallback to function renderer
59
- try {
60
- const props = {
61
- value: this.value,
62
- onValueChange: (v) => this.emitValue(v),
63
- label: this.label,
64
- placeholder: this.placeholder,
65
- required: this.required,
66
- options: this.options,
67
- className: this.className,
68
- description: this.description,
69
- disabled: this.disabled,
70
- errorMessage: this.errorMessage,
71
- };
72
- const out = Renderer(props);
73
- if (typeof out === 'string') {
74
- const el = document.createElement('div');
75
- el.innerHTML = out;
76
- this.host.element.nativeElement.appendChild(el);
77
- }
78
- }
79
- catch (e) {
80
- const el = document.createElement('div');
81
- el.textContent = `Failed to render field: ${this.type}`;
82
- this.host.element.nativeElement.appendChild(el);
83
- }
84
- }
85
- }
86
- applyKnownProps(instance) {
87
- const knownProps = ["value", "label", "placeholder", "required", "disabled", "options", "className", "description", "errorMessage"];
88
- for (const prop of knownProps) {
89
- if (prop in this && prop in instance) {
90
- instance[prop] = this[prop];
91
- }
92
- }
93
- }
94
- bindOutput(instance, outputName) {
95
- const output = instance?.[outputName];
96
- if (!output || typeof output.subscribe !== "function")
97
- return;
98
- output.subscribe((value) => {
99
- this.emitValue(value);
100
- });
101
- }
102
- emitValue(value) {
103
- this.valueChange.emit(value);
104
- this.onChange.emit(value);
105
- }
106
- cleanupRenderedComponent() {
107
- this.compRef?.destroy();
108
- this.compRef = undefined;
109
- this.inputInstance = undefined;
110
- }
111
- }
112
- DynamicInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
113
- DynamicInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicInput, isStandalone: true, selector: "dfk-dynamic-input", inputs: { type: "type", value: "value", label: "label", placeholder: "placeholder", required: "required", options: "options", className: "className", description: "description" }, outputs: { valueChange: "valueChange", onChange: "onChange" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, read: ViewContainerRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `<div #host style="display: contents;"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicInput, decorators: [{
115
- type: Component,
116
- args: [{
117
- selector: "dfk-dynamic-input",
118
- standalone: true,
119
- imports: [CommonModule],
120
- template: `<div #host style="display: contents;"></div>`,
121
- }]
122
- }], propDecorators: { type: [{
123
- type: Input
124
- }], value: [{
125
- type: Input
126
- }], label: [{
127
- type: Input
128
- }], placeholder: [{
129
- type: Input
130
- }], required: [{
131
- type: Input
132
- }], options: [{
133
- type: Input
134
- }], className: [{
135
- type: Input
136
- }], description: [{
137
- type: Input
138
- }], valueChange: [{
139
- type: Output
140
- }], onChange: [{
141
- type: Output
142
- }], host: [{
143
- type: ViewChild,
144
- args: ["host", { read: ViewContainerRef, static: false }]
145
- }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlELFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5SyxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLHlCQUF5QixDQUFBO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTs7QUFRaEQsTUFBTSxPQUFPLFlBQWEsU0FBUSxrQkFBa0I7SUFOcEQ7O1FBZXFCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUM5QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQSxDQUFDLGtCQUFrQjtLQXNIaEU7SUFoSEMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUNiLE9BQU07U0FDUDtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUV4QyxNQUFNLFlBQVksR0FBa0IsRUFBRSxDQUFBO1lBQ3RDLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxFQUFFO2dCQUMxQixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQzNCLE9BQU8s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O1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQTtJQUNoQyxDQUFDOzswR0EvSFUsWUFBWTs4RkFBWixZQUFZLHlZQVlJLGdCQUFnQix5RUFkakMsOENBQThDLDJEQUQ5QyxZQUFZOzRGQUdYLFlBQVk7a0JBTnhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFLDhDQUE4QztpQkFDekQ7OEJBRVUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ2EsV0FBVztzQkFBN0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUV1RCxJQUFJO3NCQUFqRSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlcywgVHlwZSwgU2ltcGxlQ2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgZmllbGRSZWdpc3RyeSwgRmllbGRUeXBlS2V5IH0gZnJvbSBcIkBkeW5hbWljLWZpZWxkLWtpdC9jb3JlXCJcbmltcG9ydCB7IEJhc2VJbnB1dENvbXBvbmVudCB9IGZyb20gXCIuL0Jhc2VJbnB1dFwiXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkZmstZHluYW1pYy1pbnB1dFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8ZGl2ICNob3N0IHN0eWxlPVwiZGlzcGxheTogY29udGVudHM7XCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0lucHV0IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdHlwZSE6IEZpZWxkVHlwZUtleVxuICBASW5wdXQoKSB2YWx1ZT86IGFueVxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ/OiBib29sZWFuXHJcbiAgQElucHV0KCkgb3B0aW9ucz86IGFueVtdXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZ1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IGFueVxuICBAT3V0cHV0KCkgb3ZlcnJpZGUgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKSAvLyBiYWNrd2FyZCBjb21wYXRcblxuICBAVmlld0NoaWxkKFwiaG9zdFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgaG9zdCE6IFZpZXdDb250YWluZXJSZWZcbiAgcHJpdmF0ZSBjb21wUmVmPzogQ29tcG9uZW50UmVmPGFueT5cbiAgcHJpdmF0ZSBpbnB1dEluc3RhbmNlPzogYW55XG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbXCJ0eXBlXCJdICYmICFjaGFuZ2VzW1widHlwZVwiXS5maXJzdENoYW5nZSAmJiB0aGlzLmhvc3QpIHtcbiAgICAgIHRoaXMucmVuZGVyKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLmlucHV0SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuYXBwbHlLbm93blByb3BzKHRoaXMuaW5wdXRJbnN0YW5jZSlcblxuICAgICAgY29uc3QgY2hpbGRDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzID0ge31cbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjaGFuZ2VzKSB7XG4gICAgICAgIGNoaWxkQ2hhbmdlc1twcm9wXSA9IG5ldyBTaW1wbGVDaGFuZ2UoXG4gICAgICAgICAgY2hhbmdlc1twcm9wXS5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgIGNoYW5nZXNbcHJvcF0uY3VycmVudFZhbHVlLFxuICAgICAgICAgIGNoYW5nZXNbcHJvcF0uZmlyc3RDaGFuZ2VcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmlucHV0SW5zdGFuY2UubmdPbkNoYW5nZXM/LihjaGlsZENoYW5nZXMpXG4gICAgICB0aGlzLmNvbXBSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0KSB7XG4gICAgICB0aGlzLnJlbmRlcigpXG4gICAgfVxuICB9XG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgY29uc3QgUmVuZGVyZXIgPSBmaWVsZFJlZ2lzdHJ5LmdldCh0aGlzLnR5cGUgYXMgRmllbGRUeXBlS2V5KVxuICAgIHRoaXMuY2xlYW51cFJlbmRlcmVkQ29tcG9uZW50KClcbiAgICB0aGlzLmhvc3QuY2xlYXIoKVxuICAgIGlmICghUmVuZGVyZXIpIHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgZWwudGV4dENvbnRlbnQgPSBgVW5rbm93biBmaWVsZCB0eXBlOiAke3RoaXMudHlwZX1gXG4gICAgICB0aGlzLmhvc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBUeXBlID0gUmVuZGVyZXIgYXMgdW5rbm93biBhcyBUeXBlPGFueT5cbiAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBUeXBlKVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wUmVmLmluc3RhbmNlXG4gICAgICBpZiAoIWluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2UgZm9yICR7dGhpcy50eXBlfWApXG5cbiAgICAgIHRoaXMuYXBwbHlLbm93blByb3BzKGluc3RhbmNlKVxuXG4gICAgICB0aGlzLmJpbmRPdXRwdXQoaW5zdGFuY2UsIFwidmFsdWVDaGFuZ2VcIilcbiAgICAgIHRoaXMuYmluZE91dHB1dChpbnN0YW5jZSwgXCJvblZhbHVlQ2hhbmdlXCIpXG5cbiAgICAgIGluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmPy5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIHRoaXMuY29tcFJlZiA9IGNvbXBSZWZcbiAgICAgIHRoaXMuaW5wdXRJbnN0YW5jZSA9IGluc3RhbmNlXG4gICAgICBjb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gZnVuY3Rpb24gcmVuZGVyZXJcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBhbnkgPSB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgb25WYWx1ZUNoYW5nZTogKHY6IGFueSkgPT4gdGhpcy5lbWl0VmFsdWUodiksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWQsXG4gICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxyXG4gICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6IHRoaXMuZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0ID0gKFJlbmRlcmVyIGFzIEZ1bmN0aW9uKShwcm9wcylcbiAgICAgICAgaWYgKHR5cGVvZiBvdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgICAgIGVsLmlubmVySFRNTCA9IG91dFxuICAgICAgICAgIHRoaXMuaG9zdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgICBlbC50ZXh0Q29udGVudCA9IGBGYWlsZWQgdG8gcmVuZGVyIGZpZWxkOiAke3RoaXMudHlwZX1gXG4gICAgICAgIHRoaXMuaG9zdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUtub3duUHJvcHMoaW5zdGFuY2U6IGFueSkge1xuICAgIGNvbnN0IGtub3duUHJvcHMgPSBbXCJ2YWx1ZVwiLCBcImxhYmVsXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZXF1aXJlZFwiLCBcImRpc2FibGVkXCIsIFwib3B0aW9uc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwiZXJyb3JNZXNzYWdlXCJdXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGtub3duUHJvcHMpIHtcbiAgICAgIGlmIChwcm9wIGluIHRoaXMgJiYgcHJvcCBpbiBpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZVtwcm9wXSA9ICh0aGlzIGFzIGFueSlbcHJvcF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJpbmRPdXRwdXQoaW5zdGFuY2U6IGFueSwgb3V0cHV0TmFtZTogXCJ2YWx1ZUNoYW5nZVwiIHwgXCJvblZhbHVlQ2hhbmdlXCIpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnN0YW5jZT8uW291dHB1dE5hbWVdXG4gICAgaWYgKCFvdXRwdXQgfHwgdHlwZW9mIG91dHB1dC5zdWJzY3JpYmUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXG4gICAgKG91dHB1dCBhcyBFdmVudEVtaXR0ZXI8YW55Pikuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5lbWl0VmFsdWUodmFsdWUpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwUmVuZGVyZWRDb21wb25lbnQoKSB7XG4gICAgdGhpcy5jb21wUmVmPy5kZXN0cm95KClcbiAgICB0aGlzLmNvbXBSZWYgPSB1bmRlZmluZWRcbiAgICB0aGlzLmlucHV0SW5zdGFuY2UgPSB1bmRlZmluZWRcbiAgfVxufVxuIl19
@@ -1,66 +0,0 @@
1
- import { NgIf } from "@angular/common";
2
- import { Component, Input, Output, EventEmitter } from "@angular/core";
3
- import { DynamicInput } from './DynamicInput';
4
- import * as i0 from "@angular/core";
5
- export class FieldInput {
6
- constructor() {
7
- this.onValueChangeField = new EventEmitter();
8
- }
9
- getFieldValue() {
10
- if (!this.fieldDescription || !this.renderInfos)
11
- return undefined;
12
- const value = this.renderInfos[this.fieldDescription.name];
13
- if (value === undefined && this.fieldDescription.type === "text") {
14
- return "";
15
- }
16
- return value;
17
- }
18
- }
19
- FieldInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- FieldInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FieldInput, isStandalone: true, selector: "dfk-field-input", inputs: { fieldDescription: "fieldDescription", renderInfos: "renderInfos" }, outputs: { onValueChangeField: "onValueChangeField" }, ngImport: i0, template: `
21
- <dfk-dynamic-input
22
- *ngIf="fieldDescription && renderInfos"
23
- [type]="fieldDescription!.type"
24
- [value]="getFieldValue()"
25
- [label]="fieldDescription!.label"
26
- [placeholder]="fieldDescription!.placeholder"
27
- [required]="fieldDescription!.required"
28
- [description]="fieldDescription!.description"
29
- [options]="fieldDescription!.options"
30
- [className]="fieldDescription!.className"
31
- (valueChange)="onValueChangeField.emit({ value: $event, key: fieldDescription!.name })"
32
- [disabled]="false"
33
- [errorMessage]="''"
34
- ></dfk-dynamic-input>
35
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DynamicInput, selector: "dfk-dynamic-input", inputs: ["type", "value", "label", "placeholder", "required", "options", "className", "description"], outputs: ["valueChange", "onChange"] }] });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FieldInput, decorators: [{
37
- type: Component,
38
- args: [{
39
- selector: "dfk-field-input",
40
- standalone: true,
41
- imports: [NgIf, DynamicInput],
42
- template: `
43
- <dfk-dynamic-input
44
- *ngIf="fieldDescription && renderInfos"
45
- [type]="fieldDescription!.type"
46
- [value]="getFieldValue()"
47
- [label]="fieldDescription!.label"
48
- [placeholder]="fieldDescription!.placeholder"
49
- [required]="fieldDescription!.required"
50
- [description]="fieldDescription!.description"
51
- [options]="fieldDescription!.options"
52
- [className]="fieldDescription!.className"
53
- (valueChange)="onValueChangeField.emit({ value: $event, key: fieldDescription!.name })"
54
- [disabled]="false"
55
- [errorMessage]="''"
56
- ></dfk-dynamic-input>
57
- `,
58
- }]
59
- }], propDecorators: { fieldDescription: [{
60
- type: Input
61
- }], renderInfos: [{
62
- type: Input
63
- }], onValueChangeField: [{
64
- type: Output
65
- }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0ZpZWxkSW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFBOztBQXdCN0MsTUFBTSxPQUFPLFVBQVU7SUFyQnZCO1FBd0JZLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUE2QixDQUFBO0tBWTdFO0lBVkMsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRWpFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNoRSxPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDOzt3R0FkVSxVQUFVOzRGQUFWLFVBQVUsZ05BakJYOzs7Ozs7Ozs7Ozs7Ozs7R0FlVCw0REFoQlMsSUFBSSw2RkFBRSxZQUFZOzRGQWtCakIsVUFBVTtrQkFyQnRCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7b0JBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O0dBZVQ7aUJBQ0Y7OEJBRVUsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBEeW5hbWljSW5wdXQgfSBmcm9tICcuL0R5bmFtaWNJbnB1dCdcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRpb24sIFByb3BlcnRpZXMgfSBmcm9tIFwiQGR5bmFtaWMtZmllbGQta2l0L2NvcmVcIlxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZGZrLWZpZWxkLWlucHV0XCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBEeW5hbWljSW5wdXRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkZmstZHluYW1pYy1pbnB1dFxuICAgICAgKm5nSWY9XCJmaWVsZERlc2NyaXB0aW9uICYmIHJlbmRlckluZm9zXCJcbiAgICAgIFt0eXBlXT1cImZpZWxkRGVzY3JpcHRpb24hLnR5cGVcIlxuICAgICAgW3ZhbHVlXT1cImdldEZpZWxkVmFsdWUoKVwiXG4gICAgICBbbGFiZWxdPVwiZmllbGREZXNjcmlwdGlvbiEubGFiZWxcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkRGVzY3JpcHRpb24hLnBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJmaWVsZERlc2NyaXB0aW9uIS5yZXF1aXJlZFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiZmllbGREZXNjcmlwdGlvbiEuZGVzY3JpcHRpb25cIlxyXG4gICAgICBbb3B0aW9uc109XCJmaWVsZERlc2NyaXB0aW9uIS5vcHRpb25zXCJcclxuICAgICAgW2NsYXNzTmFtZV09XCJmaWVsZERlc2NyaXB0aW9uIS5jbGFzc05hbWVcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZUZpZWxkLmVtaXQoeyB2YWx1ZTogJGV2ZW50LCBrZXk6IGZpZWxkRGVzY3JpcHRpb24hLm5hbWUgfSlcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cIicnXCJcclxuICAgID48L2Rmay1keW5hbWljLWlucHV0PlxyXG4gIGAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWVsZElucHV0IHtcbiAgQElucHV0KCkgZmllbGREZXNjcmlwdGlvbj86IEZpZWxkRGVzY3JpcHRpb25cbiAgQElucHV0KCkgcmVuZGVySW5mb3M/OiBQcm9wZXJ0aWVzXG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRmllbGQgPSBuZXcgRXZlbnRFbWl0dGVyPHt2YWx1ZTogYW55LCBrZXk6IHN0cmluZ30+KClcblxuICBnZXRGaWVsZFZhbHVlKCkge1xuICAgIGlmICghdGhpcy5maWVsZERlc2NyaXB0aW9uIHx8ICF0aGlzLnJlbmRlckluZm9zKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVuZGVySW5mb3NbdGhpcy5maWVsZERlc2NyaXB0aW9uLm5hbWVdXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgdGhpcy5maWVsZERlc2NyaXB0aW9uLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gXCJcIlxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iXX0=
@@ -1,79 +0,0 @@
1
- import { NgClass, NgFor } from "@angular/common";
2
- import { Component, Input, Output, EventEmitter } from "@angular/core";
3
- import { FieldInput } from "./FieldInput";
4
- import * as i0 from "@angular/core";
5
- export class MultiFieldInput {
6
- constructor() {
7
- this.fieldDescriptions = [];
8
- this.onChange = new EventEmitter();
9
- this.layout = "column";
10
- this.data = {};
11
- this.visibleFields = [];
12
- }
13
- trackByFn(index, field) {
14
- return field.name || index;
15
- }
16
- ngOnInit() {
17
- this.init();
18
- }
19
- ngOnChanges(_changes) {
20
- this.init();
21
- }
22
- init() {
23
- if (this.properties)
24
- this.data = { ...this.properties };
25
- this.updateVisibleFields();
26
- }
27
- updateVisibleFields() {
28
- this.visibleFields = this.fieldDescriptions.filter((f) => !f.appearCondition || f.appearCondition(this.data));
29
- }
30
- onFieldChange(event) {
31
- this.data = { ...this.data, [event.key]: event.value };
32
- this.updateVisibleFields();
33
- this.onChange.emit(this.data);
34
- }
35
- }
36
- MultiFieldInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
- MultiFieldInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MultiFieldInput, isStandalone: true, selector: "dfk-multi-field-input", inputs: { fieldDescriptions: "fieldDescriptions", properties: "properties", layout: "layout" }, outputs: { onChange: "onChange" }, usesOnChanges: true, ngImport: i0, template: `
38
- <div class="flex flex-col gap-3 p-4 border rounded-lg bg-gray-50" [ngClass]="{
39
- 'flex-row gap-3': layout === 'row',
40
- 'grid grid-cols-2 gap-3': layout === 'grid'
41
- }">
42
- <dfk-field-input
43
- *ngFor="let field of visibleFields; trackBy: trackByFn"
44
- [fieldDescription]="field"
45
- [renderInfos]="data"
46
- (onValueChangeField)="onFieldChange($event)"
47
- ></dfk-field-input>
48
- </div>
49
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FieldInput, selector: "dfk-field-input", inputs: ["fieldDescription", "renderInfos"], outputs: ["onValueChangeField"] }] });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiFieldInput, decorators: [{
51
- type: Component,
52
- args: [{
53
- selector: "dfk-multi-field-input",
54
- standalone: true,
55
- imports: [NgClass, NgFor, FieldInput],
56
- template: `
57
- <div class="flex flex-col gap-3 p-4 border rounded-lg bg-gray-50" [ngClass]="{
58
- 'flex-row gap-3': layout === 'row',
59
- 'grid grid-cols-2 gap-3': layout === 'grid'
60
- }">
61
- <dfk-field-input
62
- *ngFor="let field of visibleFields; trackBy: trackByFn"
63
- [fieldDescription]="field"
64
- [renderInfos]="data"
65
- (onValueChangeField)="onFieldChange($event)"
66
- ></dfk-field-input>
67
- </div>
68
- `,
69
- }]
70
- }], propDecorators: { fieldDescriptions: [{
71
- type: Input
72
- }], properties: [{
73
- type: Input
74
- }], onChange: [{
75
- type: Output
76
- }], layout: [{
77
- type: Input
78
- }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlGaWVsZElucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvTXVsdGlGaWVsZElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBb0MsTUFBTSxlQUFlLENBQUE7QUFFeEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTs7QUFxQnpDLE1BQU0sT0FBTyxlQUFlO0lBbEI1QjtRQW1CVyxzQkFBaUIsR0FBdUIsRUFBRSxDQUFBO1FBRXpDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFBO1FBQzFDLFdBQU0sR0FBaUIsUUFBUSxDQUFBO1FBRXhDLFNBQUksR0FBZSxFQUFFLENBQUE7UUFDckIsa0JBQWEsR0FBdUIsRUFBRSxDQUFBO0tBOEJ2QztJQTVCQyxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQXVCO1FBQzlDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN2RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDMUQsQ0FBQTtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBa0M7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUM7OzZHQXBDVSxlQUFlO2lHQUFmLGVBQWUseU9BZGhCOzs7Ozs7Ozs7Ozs7R0FZVCw0REFiUyxPQUFPLG9GQUFFLEtBQUssbUhBQUUsVUFBVTs0RkFlekIsZUFBZTtrQkFsQjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7OztHQVlUO2lCQUNGOzhCQUVVLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRpb24sIFByb3BlcnRpZXMgfSBmcm9tIFwiQGR5bmFtaWMtZmllbGQta2l0L2NvcmVcIlxuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gXCIuL0ZpZWxkSW5wdXRcIlxuaW1wb3J0IHsgTGF5b3V0Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL2xheW91dFwiXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkZmstbXVsdGktZmllbGQtaW5wdXRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIE5nRm9yLCBGaWVsZElucHV0XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMyBwLTQgYm9yZGVyIHJvdW5kZWQtbGcgYmctZ3JheS01MFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICdmbGV4LXJvdyBnYXAtMyc6IGxheW91dCA9PT0gJ3JvdycsXG4gICAgICAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMyc6IGxheW91dCA9PT0gJ2dyaWQnXG4gICAgfVwiPlxuICAgICAgPGRmay1maWVsZC1pbnB1dFxuICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdmlzaWJsZUZpZWxkczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgW2ZpZWxkRGVzY3JpcHRpb25dPVwiZmllbGRcIlxuICAgICAgICBbcmVuZGVySW5mb3NdPVwiZGF0YVwiXG4gICAgICAgIChvblZhbHVlQ2hhbmdlRmllbGQpPVwib25GaWVsZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2Rmay1maWVsZC1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlGaWVsZElucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBmaWVsZERlc2NyaXB0aW9uczogRmllbGREZXNjcmlwdGlvbltdID0gW11cbiAgQElucHV0KCkgcHJvcGVydGllcz86IFByb3BlcnRpZXNcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9wZXJ0aWVzPigpXG4gIEBJbnB1dCgpIGxheW91dDogTGF5b3V0Q29uZmlnID0gXCJjb2x1bW5cIlxuXG4gIGRhdGE6IFByb3BlcnRpZXMgPSB7fVxuICB2aXNpYmxlRmllbGRzOiBGaWVsZERlc2NyaXB0aW9uW10gPSBbXVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBmaWVsZDogRmllbGREZXNjcmlwdGlvbik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIGZpZWxkLm5hbWUgfHwgaW5kZXg7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXMpIHRoaXMuZGF0YSA9IHsgLi4udGhpcy5wcm9wZXJ0aWVzIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVGaWVsZHMoKVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlRmllbGRzKCkge1xuICAgIHRoaXMudmlzaWJsZUZpZWxkcyA9IHRoaXMuZmllbGREZXNjcmlwdGlvbnMuZmlsdGVyKFxuICAgICAgKGYpID0+ICFmLmFwcGVhckNvbmRpdGlvbiB8fCBmLmFwcGVhckNvbmRpdGlvbih0aGlzLmRhdGEpXG4gICAgKVxuICB9XG5cbiAgb25GaWVsZENoYW5nZShldmVudDogeyB2YWx1ZTogYW55OyBrZXk6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5kYXRhID0geyAuLi50aGlzLmRhdGEsIFtldmVudC5rZXldOiBldmVudC52YWx1ZSB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlRmllbGRzKClcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5kYXRhKVxuICB9XG59XG4iXX0=