@decaf-ts/for-angular 0.0.4 → 0.0.6

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 (85) hide show
  1. package/LICENSE.md +646 -144
  2. package/README.md +37 -242
  3. package/dist/lib/README.md +92 -0
  4. package/dist/lib/assets/i18n/en.json +131 -0
  5. package/dist/lib/assets/images/angular-logo.svg +45 -0
  6. package/dist/lib/assets/images/decaf-logo-black.svg +22 -0
  7. package/dist/lib/assets/images/decaf-logo-lw.svg +50 -0
  8. package/dist/lib/assets/images/decaf-logo-white.svg +22 -0
  9. package/dist/lib/assets/images/decaf-logo.svg +54 -0
  10. package/dist/lib/components/component-renderer/component-renderer.component.d.ts +267 -0
  11. package/dist/lib/components/crud-field/crud-field.component.d.ts +445 -0
  12. package/dist/{for-angular/components/decaf-crud-form → lib/components/crud-form}/constants.d.ts +0 -0
  13. package/dist/lib/components/crud-form/crud-form.component.d.ts +102 -0
  14. package/dist/{for-angular/components/decaf-crud-form → lib/components/crud-form}/types.d.ts +0 -0
  15. package/dist/lib/components/model-renderer/model-renderer.component.d.ts +96 -0
  16. package/dist/lib/engine/DynamicModule.d.ts +17 -0
  17. package/dist/{for-angular → lib}/engine/NgxCrudFormField.d.ts +21 -17
  18. package/dist/lib/engine/NgxFormService.d.ts +167 -0
  19. package/dist/lib/engine/NgxRenderingEngine.d.ts +127 -0
  20. package/dist/lib/engine/NgxRenderingEngine2.d.ts +250 -0
  21. package/dist/lib/engine/ValidatorFactory.d.ts +15 -0
  22. package/dist/lib/engine/constants.d.ts +151 -0
  23. package/dist/lib/engine/decorators.d.ts +25 -0
  24. package/dist/lib/engine/index.d.ts +15 -0
  25. package/dist/lib/engine/types.d.ts +294 -0
  26. package/dist/lib/esm2022/components/component-renderer/component-renderer.component.mjs +312 -0
  27. package/dist/lib/esm2022/components/crud-field/crud-field.component.mjs +297 -0
  28. package/dist/lib/esm2022/components/crud-form/constants.mjs +14 -0
  29. package/dist/lib/esm2022/components/crud-form/crud-form.component.mjs +139 -0
  30. package/dist/lib/esm2022/components/crud-form/types.mjs +2 -0
  31. package/dist/lib/esm2022/components/model-renderer/model-renderer.component.mjs +138 -0
  32. package/dist/{for-angular → lib}/esm2022/decaf-ts-for-angular.mjs +0 -0
  33. package/dist/lib/esm2022/engine/DynamicModule.mjs +18 -0
  34. package/dist/lib/esm2022/engine/NgxCrudFormField.mjs +123 -0
  35. package/dist/lib/esm2022/engine/NgxFormService.mjs +315 -0
  36. package/dist/lib/esm2022/engine/NgxRenderingEngine.mjs +192 -0
  37. package/dist/lib/esm2022/engine/NgxRenderingEngine2.mjs +332 -0
  38. package/dist/lib/esm2022/engine/ValidatorFactory.mjs +102 -0
  39. package/dist/lib/esm2022/engine/constants.mjs +160 -0
  40. package/dist/lib/esm2022/engine/decorators.mjs +38 -0
  41. package/dist/lib/esm2022/engine/index.mjs +16 -0
  42. package/dist/lib/esm2022/engine/types.mjs +2 -0
  43. package/dist/lib/esm2022/for-angular.module.mjs +118 -0
  44. package/dist/lib/esm2022/interfaces.mjs +2 -0
  45. package/dist/lib/esm2022/public-apis.mjs +13 -0
  46. package/dist/lib/fesm2022/decaf-ts-for-angular.mjs +2152 -0
  47. package/dist/lib/fesm2022/decaf-ts-for-angular.mjs.map +1 -0
  48. package/dist/lib/for-angular.module.d.ts +45 -0
  49. package/dist/{for-angular → lib}/index.d.ts +0 -0
  50. package/dist/lib/interfaces.d.ts +28 -0
  51. package/dist/lib/public-apis.d.ts +12 -0
  52. package/package.json +71 -26
  53. package/dist/for-angular/README.md +0 -297
  54. package/dist/for-angular/assets/i18n/en.json +0 -21
  55. package/dist/for-angular/components/decaf-crud-field/decaf-crud-field.component.d.ts +0 -49
  56. package/dist/for-angular/components/decaf-crud-form/decaf-crud-form.component.d.ts +0 -28
  57. package/dist/for-angular/components/decaf-model-renderer/decaf-model-renderer.component.d.ts +0 -20
  58. package/dist/for-angular/engine/DynamicModule.d.ts +0 -2
  59. package/dist/for-angular/engine/NgxFormService.d.ts +0 -119
  60. package/dist/for-angular/engine/NgxRenderingEngine.d.ts +0 -18
  61. package/dist/for-angular/engine/ValidatorFactory.d.ts +0 -4
  62. package/dist/for-angular/engine/constants.d.ts +0 -13
  63. package/dist/for-angular/engine/decorators.d.ts +0 -1
  64. package/dist/for-angular/engine/index.d.ts +0 -5
  65. package/dist/for-angular/engine/types.d.ts +0 -44
  66. package/dist/for-angular/esm2022/components/decaf-crud-field/decaf-crud-field.component.mjs +0 -129
  67. package/dist/for-angular/esm2022/components/decaf-crud-form/constants.mjs +0 -14
  68. package/dist/for-angular/esm2022/components/decaf-crud-form/decaf-crud-form.component.mjs +0 -80
  69. package/dist/for-angular/esm2022/components/decaf-crud-form/types.mjs +0 -2
  70. package/dist/for-angular/esm2022/components/decaf-model-renderer/decaf-model-renderer.component.mjs +0 -47
  71. package/dist/for-angular/esm2022/engine/DynamicModule.mjs +0 -3
  72. package/dist/for-angular/esm2022/engine/NgxCrudFormField.mjs +0 -115
  73. package/dist/for-angular/esm2022/engine/NgxFormService.mjs +0 -235
  74. package/dist/for-angular/esm2022/engine/NgxRenderingEngine.mjs +0 -84
  75. package/dist/for-angular/esm2022/engine/ValidatorFactory.mjs +0 -48
  76. package/dist/for-angular/esm2022/engine/constants.mjs +0 -15
  77. package/dist/for-angular/esm2022/engine/decorators.mjs +0 -14
  78. package/dist/for-angular/esm2022/engine/index.mjs +0 -6
  79. package/dist/for-angular/esm2022/engine/types.mjs +0 -2
  80. package/dist/for-angular/esm2022/interfaces.mjs +0 -2
  81. package/dist/for-angular/esm2022/public-apis.mjs +0 -6
  82. package/dist/for-angular/fesm2022/decaf-ts-for-angular.mjs +0 -759
  83. package/dist/for-angular/fesm2022/decaf-ts-for-angular.mjs.map +0 -1
  84. package/dist/for-angular/interfaces.d.ts +0 -8
  85. package/dist/for-angular/public-apis.d.ts +0 -5
@@ -1,119 +0,0 @@
1
- import { FieldProperties } from '@decaf-ts/ui-decorators';
2
- import { AngularFieldDefinition, FieldUpdateMode } from './types';
3
- import { FormGroup } from '@angular/forms';
4
- import { FormElement } from '../interfaces';
5
- /**
6
- * @summary Service for managing Angular forms and form controls.
7
- * @description
8
- * The NgxFormService provides utility methods for handling form initialization,
9
- * validation, data retrieval, and form control management in Angular applications.
10
- * It offers a centralized way to manage form controls, perform validations, and
11
- * handle form-related operations.
12
- */
13
- export declare class NgxFormService {
14
- /**
15
- * @summary Storage for form controls.
16
- * @description
17
- * A static object that stores form controls indexed by form ID and field name.
18
- * @type {Record<string, Record<string, { control: FormGroup; props: AngularFieldDefinition }>>}
19
- */
20
- private static controls;
21
- private constructor();
22
- /**
23
- * Initializes the form after the view has been initialized.
24
- * This method sets up the form controls and creates a FormGroup.
25
- *
26
- * @param el - The form element to initialize.
27
- * @param formId - The unique identifier for the form.
28
- * @param formUpdateMode - The update mode for the form. Defaults to 'blur'.
29
- */
30
- /**
31
- * @summary Initializes the form after view initialization.
32
- * @description
33
- * Sets up form controls and creates a FormGroup for the given form element.
34
- *
35
- * @param {FormElement} el - The form element to initialize.
36
- * @param {string} formId - The unique identifier for the form.
37
- * @param {FieldUpdateMode} [formUpdateMode='blur'] - The update mode for the form.
38
- */
39
- static formAfterViewInit(el: FormElement, formId: string, formUpdateMode?: FieldUpdateMode): void;
40
- /**
41
- * @summary Handles form component destruction.
42
- * @description
43
- * Unregisters the form from the service when the component is destroyed.
44
- *
45
- * @param {FormElement} el - The form element being destroyed.
46
- * @param {string} formId - The unique identifier of the form to unregister.
47
- */
48
- static forOnDestroy(el: FormElement, formId: string): void;
49
- /**
50
- * @summary Retrieves form data for a given form ID.
51
- * @description
52
- * Processes form controls and returns their values as an object.
53
- *
54
- * @param {string} formId - The unique identifier of the form to retrieve data from.
55
- * @returns {Record<string, unknown>} An object containing the form data.
56
- * @throws {Error} If the form with the given ID is not found.
57
- */
58
- static getFormData(formId: string): Record<string, unknown>;
59
- /**
60
- * @summary Validates form fields.
61
- * @description
62
- * Validates either a specific field or all fields in the form group.
63
- *
64
- * @param {FormGroup} formGroup - The FormGroup to validate.
65
- * @param {string} [fieldName] - Optional name of a specific field to validate.
66
- * @returns {boolean} Indicates whether the validation passed (true) or failed (false).
67
- */
68
- static validateFields(formGroup: FormGroup, fieldName?: string): boolean;
69
- /**
70
- * @summary Creates a FormGroup from field properties.
71
- * @description
72
- * Generates a new FormGroup instance based on the provided field definition and update mode.
73
- *
74
- * @param {AngularFieldDefinition} props - The Angular field definition properties.
75
- * @param {FieldUpdateMode} updateMode - The update mode for the form group.
76
- * @returns {FormGroup} A new FormGroup instance.
77
- */
78
- static fromProps(props: FieldProperties, updateMode: FieldUpdateMode): FormGroup;
79
- /**
80
- * Retrieves a form by its ID from the stored controls.
81
- *
82
- * @param id - The unique identifier of the form to retrieve.
83
- * @returns The form controls associated with the given ID.
84
- * @throws Error if the form with the given ID is not found.
85
- */
86
- private static getFormById;
87
- /**
88
- * Retrieves a specific field from a form by its name.
89
- *
90
- * @param formId - The unique identifier of the form.
91
- * @param name - The name of the field to retrieve.
92
- * @returns The field control and properties.
93
- * @throws Error if the field is not found in the form.
94
- */
95
- private static getFieldByName;
96
- /**
97
- * Generates an array of validator functions from the provided field properties.
98
- *
99
- * @param props - The field properties containing validation rules.
100
- * @returns An array of ValidatorFn instances.
101
- */
102
- private static validatorsFromProps;
103
- /**
104
- *
105
- * @param el
106
- * @param tag
107
- *
108
- * @throws {Error} when no parent exists with the provided tag
109
- */
110
- static getParentEl(el: HTMLElement, tag: string): HTMLElement;
111
- static register(formId: string, control: FormGroup, props: AngularFieldDefinition): void;
112
- /**
113
- * Unregisters a form or a specific field from the service.
114
- *
115
- * @param formId - The unique identifier of the form.
116
- * @param field - Optional. The specific field to unregister. If not provided, the entire form is unregistered.
117
- */
118
- static unregister(formId: string, field?: HTMLElement): void;
119
- }
@@ -1,18 +0,0 @@
1
- import { RenderingEngine } from '@decaf-ts/ui-decorators';
2
- import { AngularDynamicOutput, AngularFieldDefinition } from './types';
3
- import { Constructor, Model } from '@decaf-ts/decorator-validation';
4
- import { Injector, TemplateRef, ViewContainerRef } from '@angular/core';
5
- export declare class NgxRenderingEngine extends RenderingEngine<AngularFieldDefinition, AngularDynamicOutput> {
6
- private static _components;
7
- constructor();
8
- private fromFieldDefinition;
9
- render<M extends Model>(model: M, globalProps: Record<string, unknown>, vcr: ViewContainerRef, injector: Injector, tpl: TemplateRef<any>): AngularDynamicOutput;
10
- initialize(...args: any[]): Promise<void>;
11
- static registerComponent(name: string, constructor: Constructor<unknown>): void;
12
- static components(selector?: string): {
13
- constructor: Constructor<unknown>;
14
- } | {
15
- constructor: Constructor<unknown>;
16
- }[];
17
- static key(key: string): string;
18
- }
@@ -1,4 +0,0 @@
1
- import { ValidatorFn } from '@angular/forms';
2
- export declare class ValidatorFactory {
3
- static spawn(key: string, arg: unknown): ValidatorFn;
4
- }
@@ -1,13 +0,0 @@
1
- export declare const AngularEngineKeys: {
2
- REFLECT: string;
3
- DYNAMIC: string;
4
- ANNOTATIONS: string;
5
- ECMP: string;
6
- NG_REFLECT: string;
7
- RENDERED: string;
8
- RENDERED_ID: string;
9
- };
10
- export declare const FormConstants: {
11
- VALID: string;
12
- INVALID: string;
13
- };
@@ -1 +0,0 @@
1
- export declare function Dynamic(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -1,5 +0,0 @@
1
- export * from './constants';
2
- export * from './decorators';
3
- export * from './DynamicModule';
4
- export * from './NgxRenderingEngine';
5
- export * from './types';
@@ -1,44 +0,0 @@
1
- import { IonCheckbox, IonInput, IonSelect, IonTextarea } from '@ionic/angular';
2
- import { TextFieldTypes } from '@ionic/core';
3
- import { Injector, Type } from '@angular/core';
4
- export type FieldUpdateMode = 'change' | 'blur' | 'submit';
5
- export interface ComponentMetadata {
6
- changeDetection: number;
7
- selector: string;
8
- standalone: boolean;
9
- imports: (new (...args: unknown[]) => unknown)[];
10
- template: string;
11
- styles: string[];
12
- }
13
- export type AngularDynamicOutput = {
14
- component: Type<unknown>;
15
- rendererId?: string;
16
- inputs?: Record<string, unknown>;
17
- injector?: Injector;
18
- content?: Node[][];
19
- children?: AngularDynamicOutput[];
20
- };
21
- export interface RenderedModel {
22
- rendererId?: string;
23
- }
24
- export type PossibleInputTypes = 'checkbox' | 'radio' | 'select' | TextFieldTypes | 'textarea';
25
- export type AngularFieldDefinition = Omit<IonInput, 'ionInput' | 'ionFocus' | 'ionChange' | 'ionBlur' | 'getInputElement' | 'setFocus' | 'label' | 'el' | 'z' | 'type'> & Pick<IonSelect, 'cancelText' | 'interface' | 'selectedText' | 'interfaceOptions'> & Pick<IonTextarea, 'rows' | 'cols'> & Pick<IonCheckbox, 'alignment' | 'justify' | 'checked'> & {
26
- type: PossibleInputTypes;
27
- className: string | string[];
28
- } & Record<string, unknown>;
29
- export type StringOrBoolean = 'true' | 'false' | boolean;
30
- export type SelectOption = InputOption & {
31
- selected?: boolean;
32
- };
33
- export type CheckboxOption = RadioOption;
34
- export type RadioOption = InputOption & {
35
- checked?: boolean;
36
- };
37
- export interface InputOption {
38
- text: string;
39
- value: string | number;
40
- disabled?: StringOrBoolean;
41
- className?: string;
42
- icon?: string;
43
- }
44
- export type HTMLFormTarget = '_blank' | '_self' | '_parent' | '_top' | string;
@@ -1,129 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, Input, NO_ERRORS_SCHEMA, ViewChild, } from '@angular/core';
3
- import { FormGroup, ReactiveFormsModule } from '@angular/forms';
4
- import { IonCheckbox, IonInput, IonItem, IonRadio, IonRadioGroup, IonSelect, IonSelectOption, IonTextarea, } from '@ionic/angular/standalone';
5
- import { TranslatePipe } from '@ngx-translate/core';
6
- import { NgxCrudFormField } from '../../engine/NgxCrudFormField';
7
- import { Dynamic } from '../../engine/decorators';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- let DecafCrudFieldComponent = class DecafCrudFieldComponent extends NgxCrudFormField {
11
- constructor() {
12
- super(...arguments);
13
- this.value = '';
14
- this.spellcheck = false;
15
- this.inputmode = 'none';
16
- this.autocomplete = 'off';
17
- this.fill = 'outline';
18
- this.labelPlacement = 'stacked';
19
- // Component
20
- this.updateOn = 'change';
21
- this.translatable = true;
22
- }
23
- ngAfterViewInit() {
24
- super.afterViewInit();
25
- }
26
- ngOnDestroy() {
27
- this.onDestroy();
28
- }
29
- ngOnInit() {
30
- super.onInit(this.updateOn);
31
- }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
33
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFieldComponent, isStandalone: true, selector: "decaf-crud-field", inputs: { operation: "operation", name: "name", type: "type", value: "value", disabled: "disabled", label: "label", placeholder: "placeholder", format: "format", hidden: "hidden", max: "max", maxlength: "maxlength", min: "min", minlength: "minlength", pattern: "pattern", readonly: "readonly", required: "required", step: "step", cols: "cols", rows: "rows", alignment: "alignment", checked: "checked", justify: "justify", cancelText: "cancelText", interface: "interface", options: "options", mode: "mode", spellcheck: "spellcheck", inputmode: "inputmode", autocomplete: "autocomplete", fill: "fill", labelPlacement: "labelPlacement", updateOn: "updateOn", formGroup: "formGroup", translatable: "translatable" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(type === 'textarea') {\n <ion-item>\n <ion-textarea\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [required]=\"required !== undefined ? required : null\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [inputmode]=\"inputmode\"\n [spellcheck]=\"spellcheck\"\n [rows]=\"rows\"\n [labelPlacement]=\"labelPlacement\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"translatable ? (placeholder | translate) : placeholder\"\n [formControlName]=\"name\"\n [label]=\"translatable ? (label | translate) : label\">\n </ion-textarea>\n </ion-item>\n }\n @if(type === 'checkbox') {\n <ion-item [formControlName]=\"name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [justify]=\"justify\"\n [disabled]=\"disabled || readonly\"\n [value]=\"value\"\n [checked]=\"checked\"\n (ionChange)=\"checked = !checked\"\n [formControlName]=\"name\">\n <span [innerHTML]=\"label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(type === 'radio') {\n <ion-radio-group [formControlName]=\"name\" [name]=\"name\" [value]=\"value\">\n <label class=\"radio-group-label\">{{label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [disabled]=\"readonly || disabled\"\n [labelPlacement]=\"labelPlacement\"\n [alignment]=\"alignment\"\n [justify]=\"justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [cancelText]=\"cancelText | translate\"\n [label]=\"translatable ? (label | translate) : label\"\n [value]=\"value\"\n [fill]=\"fill\"\n [disabled]=\"readonly || disabled\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [interface]=\"interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else {\n <ion-item>\n <ion-input\n [type]=\"type\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [inputmode]=\"inputmode\"\n [autocomplete]=\"autocomplete\"\n [spellcheck]=\"spellcheck\"\n [labelPlacement]=\"labelPlacement\"\n [required]=\"required !== undefined ? required : false\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [max]=\"max !== undefined ? max : null\"\n [min]=\"min !== undefined ? min : null\"\n [pattern]=\"pattern !== undefined ? pattern : null\"\n [step]=\"step !== undefined ? step : null\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [label]=\"label | translate\">\n </ion-input>\n </ion-item>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, this[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "compareWith", "name", "value"] }, { kind: "component", type: IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
34
- };
35
- DecafCrudFieldComponent = __decorate([
36
- Dynamic()
37
- ], DecafCrudFieldComponent);
38
- export { DecafCrudFieldComponent };
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFieldComponent, decorators: [{
40
- type: Component,
41
- args: [{ standalone: true, imports: [
42
- ReactiveFormsModule,
43
- IonInput,
44
- IonItem,
45
- IonCheckbox,
46
- IonRadioGroup,
47
- IonRadio,
48
- IonSelect,
49
- TranslatePipe,
50
- IonSelectOption,
51
- IonTextarea,
52
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], selector: 'decaf-crud-field', template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(type === 'textarea') {\n <ion-item>\n <ion-textarea\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [required]=\"required !== undefined ? required : null\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [inputmode]=\"inputmode\"\n [spellcheck]=\"spellcheck\"\n [rows]=\"rows\"\n [labelPlacement]=\"labelPlacement\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"translatable ? (placeholder | translate) : placeholder\"\n [formControlName]=\"name\"\n [label]=\"translatable ? (label | translate) : label\">\n </ion-textarea>\n </ion-item>\n }\n @if(type === 'checkbox') {\n <ion-item [formControlName]=\"name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [justify]=\"justify\"\n [disabled]=\"disabled || readonly\"\n [value]=\"value\"\n [checked]=\"checked\"\n (ionChange)=\"checked = !checked\"\n [formControlName]=\"name\">\n <span [innerHTML]=\"label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(type === 'radio') {\n <ion-radio-group [formControlName]=\"name\" [name]=\"name\" [value]=\"value\">\n <label class=\"radio-group-label\">{{label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [disabled]=\"readonly || disabled\"\n [labelPlacement]=\"labelPlacement\"\n [alignment]=\"alignment\"\n [justify]=\"justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [cancelText]=\"cancelText | translate\"\n [label]=\"translatable ? (label | translate) : label\"\n [value]=\"value\"\n [fill]=\"fill\"\n [disabled]=\"readonly || disabled\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [interface]=\"interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else {\n <ion-item>\n <ion-input\n [type]=\"type\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [inputmode]=\"inputmode\"\n [autocomplete]=\"autocomplete\"\n [spellcheck]=\"spellcheck\"\n [labelPlacement]=\"labelPlacement\"\n [required]=\"required !== undefined ? required : false\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [max]=\"max !== undefined ? max : null\"\n [min]=\"min !== undefined ? min : null\"\n [pattern]=\"pattern !== undefined ? pattern : null\"\n [step]=\"step !== undefined ? step : null\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [label]=\"label | translate\">\n </ion-input>\n </ion-item>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, this[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"] }]
53
- }], propDecorators: { operation: [{
54
- type: Input,
55
- args: [{ required: true }]
56
- }], name: [{
57
- type: Input,
58
- args: [{ required: true }]
59
- }], type: [{
60
- type: Input,
61
- args: [{ required: true }]
62
- }], value: [{
63
- type: Input
64
- }], disabled: [{
65
- type: Input
66
- }], label: [{
67
- type: Input,
68
- args: [{ required: true }]
69
- }], placeholder: [{
70
- type: Input
71
- }], format: [{
72
- type: Input
73
- }], hidden: [{
74
- type: Input
75
- }], max: [{
76
- type: Input
77
- }], maxlength: [{
78
- type: Input
79
- }], min: [{
80
- type: Input
81
- }], minlength: [{
82
- type: Input
83
- }], pattern: [{
84
- type: Input
85
- }], readonly: [{
86
- type: Input
87
- }], required: [{
88
- type: Input
89
- }], step: [{
90
- type: Input
91
- }], cols: [{
92
- type: Input
93
- }], rows: [{
94
- type: Input
95
- }], alignment: [{
96
- type: Input
97
- }], checked: [{
98
- type: Input
99
- }], justify: [{
100
- type: Input
101
- }], cancelText: [{
102
- type: Input
103
- }], interface: [{
104
- type: Input
105
- }], options: [{
106
- type: Input
107
- }], mode: [{
108
- type: Input
109
- }], spellcheck: [{
110
- type: Input
111
- }], inputmode: [{
112
- type: Input
113
- }], autocomplete: [{
114
- type: Input
115
- }], fill: [{
116
- type: Input
117
- }], labelPlacement: [{
118
- type: Input
119
- }], updateOn: [{
120
- type: Input
121
- }], component: [{
122
- type: ViewChild,
123
- args: ['component', { read: ElementRef }]
124
- }], formGroup: [{
125
- type: Input
126
- }], translatable: [{
127
- type: Input
128
- }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVjYWYtY3J1ZC1maWVsZC9kZWNhZi1jcnVkLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZpZWxkL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixLQUFLLEVBQ0wsZ0JBQWdCLEVBR2hCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQVFuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUE0QjNDLElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQ1gsU0FBUSxnQkFBZ0I7SUFEbkI7O1FBY0ksVUFBSyxHQUEyQixFQUFFLENBQUM7UUFrRTVDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsY0FBUyxHQVFNLE1BQU0sQ0FBQztRQUd0QixpQkFBWSxHQUFzQixLQUFLLENBQUM7UUFHeEMsU0FBSSxHQUF3QixTQUFTLENBQUM7UUFHdEMsbUJBQWMsR0FDWixTQUFTLENBQUM7UUFFWixZQUFZO1FBR1osYUFBUSxHQUFvQixRQUFRLENBQUM7UUFTckMsaUJBQVksR0FBb0IsSUFBSSxDQUFDO0tBYXRDO0lBWEMsZUFBZTtRQUNiLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBL0hVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHUyQkE0R0YsVUFBVSxvREN4SzVDLHVzSUFzSEEsd2lDRDNFSSxtQkFBbUIsZ3hDQUNuQixRQUFRLDhlQUNSLE9BQU8sME5BQ1AsV0FBVywwS0FDWCxhQUFhLDZIQUNiLFFBQVEsd0pBQ1IsU0FBUyxrVEFDVCxhQUFhLGtEQUNiLGVBQWUsNkZBQ2YsV0FBVzs7QUFRRix1QkFBdUI7SUFyQm5DLE9BQU8sRUFBRTtHQXFCRyx1QkFBdUIsQ0FnSW5DOzs0RkFoSVksdUJBQXVCO2tCQXBCbkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1A7d0JBQ1AsbUJBQW1CO3dCQUNuQixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsV0FBVztxQkFDWixXQUNRLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsWUFFekMsa0JBQWtCOzhCQVNuQixTQUFTO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsSUFBSTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsSUFBSTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsS0FBSztzQkFEYixLQUFLO2dCQUlHLFFBQVE7c0JBRGhCLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsV0FBVztzQkFEVixLQUFLO2dCQU1HLE1BQU07c0JBRGQsS0FBSztnQkFHRyxNQUFNO3NCQURkLEtBQUs7Z0JBR0csR0FBRztzQkFEWCxLQUFLO2dCQUdHLFNBQVM7c0JBRGpCLEtBQUs7Z0JBR0csR0FBRztzQkFEWCxLQUFLO2dCQUdHLFNBQVM7c0JBRGpCLEtBQUs7Z0JBR0csT0FBTztzQkFEZixLQUFLO2dCQUdHLFFBQVE7c0JBRGhCLEtBQUs7Z0JBR0csUUFBUTtzQkFEaEIsS0FBSztnQkFHRyxJQUFJO3NCQURaLEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFNTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBSUcsU0FBUztzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUluQyxTQUFTO3NCQURqQixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5PX0VSUk9SU19TQ0hFTUEsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJb25DaGVja2JveCxcbiAgSW9uSW5wdXQsXG4gIElvbkl0ZW0sXG4gIElvblJhZGlvLFxuICBJb25SYWRpb0dyb3VwLFxuICBJb25TZWxlY3QsXG4gIElvblNlbGVjdE9wdGlvbixcbiAgSW9uVGV4dGFyZWEsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHtcbiAgRmllbGRVcGRhdGVNb2RlLFxuICBQb3NzaWJsZUlucHV0VHlwZXMsXG4gIFJhZGlvT3B0aW9uLFxuICBTZWxlY3RPcHRpb24sXG4gIFN0cmluZ09yQm9vbGVhbixcbn0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5neENydWRGb3JtRmllbGQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4Q3J1ZEZvcm1GaWVsZCc7XG5pbXBvcnQgeyBEeW5hbWljIH0gZnJvbSAnLi4vLi4vZW5naW5lL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlVHlwZXMsXG4gIFNlbGVjdEludGVyZmFjZSxcbiAgVGV4dEZpZWxkVHlwZXMsXG59IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIElvbklucHV0LFxuICAgIElvbkl0ZW0sXG4gICAgSW9uQ2hlY2tib3gsXG4gICAgSW9uUmFkaW9Hcm91cCxcbiAgICBJb25SYWRpbyxcbiAgICBJb25TZWxlY3QsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gICAgSW9uVGV4dGFyZWEsXG4gIF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOT19FUlJPUlNfU0NIRU1BXSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZWNhZi1jcnVkLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGVjYWYtY3J1ZC1maWVsZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIERlY2FmQ3J1ZEZpZWxkQ29tcG9uZW50XG4gIGV4dGVuZHMgTmd4Q3J1ZEZvcm1GaWVsZFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG92ZXJyaWRlIG9wZXJhdGlvbiE6IENydWRPcGVyYXRpb25zO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG92ZXJyaWRlIG5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3ZlcnJpZGUgdHlwZSE6IFBvc3NpYmxlSW5wdXRUeXBlcztcblxuICBASW5wdXQoKVxuICBvdmVycmlkZSB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBsYWJlbCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcblxuICAvLyBWYWxpZGF0aW9uXG5cbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgZm9ybWF0Pzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBoaWRkZW4/OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBtYXg/OiBudW1iZXIgfCBEYXRlO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBtYXhsZW5ndGg/OiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIG1pbj86IG51bWJlciB8IERhdGU7XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIG1pbmxlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgcGF0dGVybj86IHN0cmluZztcbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgcmVhZG9ubHk/OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSByZXF1aXJlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIHN0ZXA/OiBudW1iZXI7XG5cbiAgLy8gdHlwZSBzcGVjaWZpYyBvcHRpb25zXG5cbiAgQElucHV0KClcbiAgY29scz86IG51bWJlcjtcblxuICBASW5wdXQoKVxuICByb3dzPzogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGFsaWdubWVudD86ICdzdGFydCcgfCAnY2VudGVyJztcblxuICBASW5wdXQoKVxuICBjaGVja2VkPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBqdXN0aWZ5PzogJ3N0YXJ0JyB8ICdlbmQnIHwgJ3NwYWNlLWJldHdlZW4nO1xuXG4gIEBJbnB1dCgpXG4gIGNhbmNlbFRleHQ/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgaW50ZXJmYWNlPzogU2VsZWN0SW50ZXJmYWNlO1xuXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBTZWxlY3RPcHRpb25bXSB8IFJhZGlvT3B0aW9uW107XG5cbiAgLy8gZW5naW5lIHNwZWNpZmljIHByb3BlcnRpZXNcblxuICBASW5wdXQoKVxuICBtb2RlPzogJ2lvcycgfCAnbWQnO1xuXG4gIEBJbnB1dCgpXG4gIHNwZWxsY2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBpbnB1dG1vZGU6XG4gICAgfCAnbm9uZSdcbiAgICB8ICd0ZXh0J1xuICAgIHwgJ3RlbCdcbiAgICB8ICd1cmwnXG4gICAgfCAnZW1haWwnXG4gICAgfCAnbnVtZXJpYydcbiAgICB8ICdkZWNpbWFsJ1xuICAgIHwgJ3NlYXJjaCcgPSAnbm9uZSc7XG5cbiAgQElucHV0KClcbiAgYXV0b2NvbXBsZXRlOiBBdXRvY29tcGxldGVUeXBlcyA9ICdvZmYnO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGw6ICdvdXRsaW5lJyB8ICdzb2xpZCcgPSAnb3V0bGluZSc7XG5cbiAgQElucHV0KClcbiAgbGFiZWxQbGFjZW1lbnQ6ICdzdGFydCcgfCAnZW5kJyB8ICdmbG9hdGluZycgfCAnc3RhY2tlZCcgfCAnZml4ZWQnID1cbiAgICAnc3RhY2tlZCc7XG5cbiAgLy8gQ29tcG9uZW50XG5cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBvdmVycmlkZSBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcblxuICBASW5wdXQoKVxuICB0cmFuc2xhdGFibGU6IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbkluaXQodGhpcy51cGRhdGVPbik7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgI2NvbXBvbmVudCBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICBAaWYodHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIDxpb24taXRlbT5cbiAgICAgIDxpb24tdGV4dGFyZWFcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyByZXF1aXJlZCA6IG51bGxcIlxuICAgICAgICBbbWlubGVuZ3RoXT1cIm1pbmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbWlubGVuZ3RoIDogbnVsbFwiXG4gICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgPyBtYXhsZW5ndGggOiBudWxsXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5ICE9PSB1bmRlZmluZWQgPyByZWFkb25seSA6IG51bGxcIlxuICAgICAgICBbaW5wdXRtb2RlXT1cImlucHV0bW9kZVwiXG4gICAgICAgIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAgICAgICBbcm93c109XCJyb3dzXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwiZmlsbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGFibGUgPyAocGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUpIDogcGxhY2Vob2xkZXJcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRhYmxlID8gKGxhYmVsIHwgdHJhbnNsYXRlKSA6IGxhYmVsXCI+XG4gICAgICA8L2lvbi10ZXh0YXJlYT5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG4gIEBpZih0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgPGlvbi1pdGVtIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiPlxuICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAjY2hlY2tib3hFbGVtZW50XG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgICAgW2hpZGRlbl09XCJoaWRkZW5cIlxuICAgICAgICBbbGFiZWxQbGFjZW1lbnRdPVwibGFiZWxQbGFjZW1lbnRcIlxuICAgICAgICBbanVzdGlmeV09XCJqdXN0aWZ5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICAgIChpb25DaGFuZ2UpPVwiY2hlY2tlZCA9ICFjaGVja2VkXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJuYW1lXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWwgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICA8L2lvbi1jaGVja2JveD5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG4gIEBlbHNlIGlmKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICA8aW9uLXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvLWdyb3VwLWxhYmVsXCI+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1yYWRpb1xuICAgICAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImhpZGRlblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgICAgIFthbGlnbm1lbnRdPVwiYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtqdXN0aWZ5XT1cImp1c3RpZnlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgPnt7IG9wdGlvbi50ZXh0IHwgdHJhbnNsYXRlIH19PC9pb24tcmFkaW8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9pb24tcmFkaW8tZ3JvdXA+XG4gIH1cbiAgQGVsc2UgaWYodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLXNlbGVjdFxuICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW2NhbmNlbFRleHRdPVwiY2FuY2VsVGV4dCB8ICB0cmFuc2xhdGVcIlxuICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRhYmxlID8gKGxhYmVsIHwgdHJhbnNsYXRlKSA6IGxhYmVsXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwiZmlsbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCBkaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiXG4gICAgICAgIFtpbnRlcmZhY2VdPVwiaW50ZXJmYWNlXCI+XG4gICAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGFibGUgPyAob3B0aW9uLnRleHQgfCB0cmFuc2xhdGUpIDogb3B0aW9uLnRleHQgfX1cbiAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuICBAZWxzZSB7XG4gICAgPGlvbi1pdGVtPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW2lucHV0bW9kZV09XCJpbnB1dG1vZGVcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAgICAgICBbbGFiZWxQbGFjZW1lbnRdPVwibGFiZWxQbGFjZW1lbnRcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IHJlcXVpcmVkIDogZmFsc2VcIlxuICAgICAgICBbbWlubGVuZ3RoXT1cIm1pbmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbWlubGVuZ3RoIDogbnVsbFwiXG4gICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgPyBtYXhsZW5ndGggOiBudWxsXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5ICE9PSB1bmRlZmluZWQgPyByZWFkb25seSA6IG51bGxcIlxuICAgICAgICBbbWF4XT1cIm1heCAhPT0gdW5kZWZpbmVkID8gbWF4IDogbnVsbFwiXG4gICAgICAgIFttaW5dPVwibWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiBudWxsXCJcbiAgICAgICAgW3BhdHRlcm5dPVwicGF0dGVybiAhPT0gdW5kZWZpbmVkID8gcGF0dGVybiA6IG51bGxcIlxuICAgICAgICBbc3RlcF09XCJzdGVwICE9PSB1bmRlZmluZWQgPyBzdGVwIDogbnVsbFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtmaWxsXT1cImZpbGxcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbGFiZWxdPVwibGFiZWwgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDwvaW9uLWlucHV0PlxuICAgIDwvaW9uLWl0ZW0+XG4gIH1cbiAgQGlmKCghZm9ybUdyb3VwLnByaXN0aW5lIHx8IGZvcm1Hcm91cC50b3VjaGVkKSAmJiAhZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImVycm9yIHVrLWZsZXggdWstZmxleC10b3BcIj5cbiAgICAgIEBmb3IoaXRlbSBvZiBnZXRFcnJvcnMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHNwYW4gY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRpIHRpLWFsZXJ0LXRyaWFuZ2xlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7aXRlbS5rZXl9fSAtIHt7IHNmKChcImVycm9ycy5cIiArIGl0ZW0ubWVzc2FnZSkgfCB0cmFuc2xhdGUsIHRoaXNbaXRlbS5rZXldKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,14 +0,0 @@
1
- export const CssClasses = {
2
- BUTTONS_CONTAINER: 'buttons-container',
3
- };
4
- export const DefaultFormReactiveOptions = {
5
- buttons: {
6
- submit: {
7
- text: 'Submit',
8
- },
9
- clear: {
10
- text: 'Clear',
11
- },
12
- },
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlY2FmLWNydWQtZm9ybS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLGlCQUFpQixFQUFFLG1CQUFtQjtDQUN2QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQW9CO0lBQ3pELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsT0FBTztTQUNkO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3J1ZEZvcm1PcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDc3NDbGFzc2VzID0ge1xuICBCVVRUT05TX0NPTlRBSU5FUjogJ2J1dHRvbnMtY29udGFpbmVyJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9uczogQ3J1ZEZvcm1PcHRpb25zID0ge1xuICBidXR0b25zOiB7XG4gICAgc3VibWl0OiB7XG4gICAgICB0ZXh0OiAnU3VibWl0JyxcbiAgICB9LFxuICAgIGNsZWFyOiB7XG4gICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
@@ -1,80 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, ElementRef, ViewChild, Input, Output, EventEmitter, } from '@angular/core';
3
- import { FormGroup, ReactiveFormsModule } from '@angular/forms';
4
- import { NgxFormService } from '../../engine/NgxFormService';
5
- import { IonicModule } from '@ionic/angular';
6
- import { Dynamic, } from '../../engine';
7
- import { DefaultFormReactiveOptions } from './constants';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@ionic/angular";
10
- import * as i2 from "@angular/forms";
11
- let DecafCrudFormComponent = class DecafCrudFormComponent {
12
- constructor() {
13
- this.updateOn = 'change';
14
- this.target = '_self';
15
- this.method = 'event';
16
- this.formGroup = new FormGroup({});
17
- this.submitEvent = new EventEmitter();
18
- }
19
- ngAfterViewInit() {
20
- NgxFormService.formAfterViewInit(this, this.rendererId);
21
- }
22
- ngOnInit() {
23
- this.options = Object.assign({}, DefaultFormReactiveOptions, this.options || {});
24
- }
25
- ngOnDestroy() {
26
- NgxFormService.forOnDestroy(this, this.rendererId);
27
- }
28
- /**
29
- * @param {Event} event
30
- */
31
- submit(event) {
32
- event.preventDefault();
33
- event.stopImmediatePropagation();
34
- event.stopPropagation();
35
- if (!this.formGroup.valid)
36
- return NgxFormService.validateFields(this.formGroup);
37
- console.log('onSubmit');
38
- // fix para valores de campos radio e check
39
- const data = NgxFormService.getFormData(this.rendererId);
40
- const submitEvent = {
41
- data: data,
42
- };
43
- if (this.action)
44
- return this.component.nativeElement.dispatchEvent(new CustomEvent('submit', data));
45
- this.submitEvent.emit(submitEvent);
46
- }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFormComponent, isStandalone: true, selector: "decaf-crud-form", inputs: { updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", formGroup: "formGroup", rendererId: "rendererId" }, outputs: { submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "<form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
49
- };
50
- DecafCrudFormComponent = __decorate([
51
- Dynamic()
52
- ], DecafCrudFormComponent);
53
- export { DecafCrudFormComponent };
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFormComponent, decorators: [{
55
- type: Component,
56
- args: [{ standalone: true, selector: 'decaf-crud-form', imports: [IonicModule, ReactiveFormsModule], template: "<form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n" }]
57
- }], propDecorators: { updateOn: [{
58
- type: Input
59
- }], component: [{
60
- type: ViewChild,
61
- args: ['reactiveForm', { static: false, read: ElementRef }]
62
- }], target: [{
63
- type: Input
64
- }], method: [{
65
- type: Input
66
- }], options: [{
67
- type: Input
68
- }], action: [{
69
- type: Input
70
- }], operation: [{
71
- type: Input,
72
- args: [{ required: true }]
73
- }], formGroup: [{
74
- type: Input
75
- }], rendererId: [{
76
- type: Input
77
- }], submitEvent: [{
78
- type: Output
79
- }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLE9BQU8sR0FJUixNQUFNLGNBQWMsQ0FBQztBQUd0QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFXbEQsSUFBTSxzQkFBc0IsR0FBNUIsTUFBTSxzQkFBc0I7SUFBNUI7UUFJTCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQU1yQyxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUdqQyxXQUFNLEdBQTZCLE9BQU8sQ0FBQztRQVkzQyxjQUFTLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFNekMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztLQTRDM0Q7SUExQ0MsZUFBZTtRQUNiLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMxQixFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQWtCO1FBQ3ZCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztZQUN2QixPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIsMkNBQTJDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sV0FBVyxHQUE0QjtZQUMzQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQy9DLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FDaEMsQ0FBQztRQUVKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBMUVVLHNCQUFzQjttR0FBdEIsc0JBQXNCLGdZQU1pQixVQUFVLDZCQ3hDOUQsZ21EQW1DQSx5RERIWSxXQUFXLG1jQUFFLG1CQUFtQjs7QUFFL0Isc0JBQXNCO0lBVGxDLE9BQU8sRUFBRTtHQVNHLHNCQUFzQixDQTJFbEM7OzRGQTNFWSxzQkFBc0I7a0JBUmxDLFNBQVM7aUNBQ0ksSUFBSSxZQUVOLGlCQUFpQixXQUdsQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQzs4QkFNM0MsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTlELE1BQU07c0JBREwsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIER5bmFtaWMsXG4gIEZpZWxkVXBkYXRlTW9kZSxcbiAgSFRNTEZvcm1UYXJnZXQsXG4gIFJlbmRlcmVkTW9kZWwsXG59IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMsIEZvcm1SZWFjdGl2ZVN1Ym1pdEV2ZW50IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtJb25pY01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIERlY2FmQ3J1ZEZvcm1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWxcbntcbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ3JlYWN0aXZlRm9ybScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbj86IHN0cmluZztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBvcGVyYXRpb24hOiBDcnVkT3BlcmF0aW9ucztcblxuICBASW5wdXQoKVxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtUmVhY3RpdmVTdWJtaXRFdmVudD4oKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgTmd4Rm9ybVNlcnZpY2UuZm9ybUFmdGVyVmlld0luaXQodGhpcywgdGhpcy5yZW5kZXJlcklkKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBOZ3hGb3JtU2VydmljZS5mb3JPbkRlc3Ryb3kodGhpcywgdGhpcy5yZW5kZXJlcklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC52YWxpZClcbiAgICAgIHJldHVybiBOZ3hGb3JtU2VydmljZS52YWxpZGF0ZUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgY29uc29sZS5sb2coJ29uU3VibWl0Jyk7XG5cbiAgICAvLyBmaXggcGFyYSB2YWxvcmVzIGRlIGNhbXBvcyByYWRpbyBlIGNoZWNrXG4gICAgY29uc3QgZGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKHRoaXMucmVuZGVyZXJJZCk7XG5cbiAgICBjb25zdCBzdWJtaXRFdmVudDogRm9ybVJlYWN0aXZlU3VibWl0RXZlbnQgPSB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hY3Rpb24pXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3N1Ym1pdCcsIGRhdGEpLFxuICAgICAgKTtcblxuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdChzdWJtaXRFdmVudCk7XG4gIH1cbn1cbiIsIjxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBbdGFyZ2V0XT1cInRhcmdldFwiPlxuICA8bmctY29udGVudCAjZm9ybUNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICA8aW9uLWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuPCEtLSAgICAgIFtzaGFwZV09XCJidXR0b25zPy5zdWJtaXQ/LnNoYXBlIHx8ICdyb3VuZCdcIi0tPlxuPCEtLSAgICAgIFtjb2xvcl09XCJidXR0b25zPy5zdWJtaXQ/LmNvbG9yIHx8ICdwcmltYXJ5J1wiLS0+XG48IS0tICAgICAgW3NpemVdPVwiYnV0dG9ucz8uc3VibWl0Py5zaXplIHx8ICdkZWZhdWx0J1wiLS0+XG48IS0tICAgICAgW2ZpbGxdPVwiYnV0dG9ucz8uc3VibWl0Py5maWxsIHx8ICdzb2xpZCdcIi0tPlxuPCEtLSAgICAgIFtkaXNhYmxlZF09XCJidXR0b25zPy5zdWJtaXQ/LmRpc2FibGVkIHx8IGZhbHNlXCItLT5cbjwhLS0gICAgICBleHBhbmQ9XCJibG9ja1wiLS0+XG48IS0tICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTdWJtaXRCdXR0b25XaGVuSW52YWxpZCA/ICFmb3JtLnZhbGlkIDogZmFsc2VcIi0tPlxuICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICA8aW9uLWljb24gW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICB9XG4gICAgICB7e29wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgIDxpb24tYnV0dG9uPlxuPCEtLSAgICAgICAgdHlwZT1cImNsZWFyXCItLT5cbjwhLS0gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiLS0+XG48IS0tICAgICAgICAgICAgW3NoYXBlXT1cImJ1dHRvbnM/LmNsZWFyPy5zaGFwZSB8fCAncm91bmQnXCItLT5cbjwhLS0gICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9ucz8uY2xlYXI/LmNvbG9yIHx8ICdwcmltYXJ5J1wiLS0+XG48IS0tICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9ucz8uY2xlYXI/LnNpemUgfHwgJ2RlZmF1bHQnXCItLT5cbjwhLS0gICAgICAgICAgICBbZmlsbF09XCJidXR0b25zPy5jbGVhcj8uZmlsbCB8fCAnY2xlYXInXCItLT5cbjwhLS0gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9ucz8uY2xlYXI/LmRpc2FibGVkIHx8IGZhbHNlXCItLT5cbjwhLS0gICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiLS0+XG4gICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICA8aW9uLWljb24gW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cbiAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVjYWYtY3J1ZC1mb3JtL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEZvcm1SZWFjdGl2ZVN1Ym1pdEV2ZW50IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZEZvcm1PcHRpb25zIHtcbiAgYnV0dG9uczoge1xuICAgIHN1Ym1pdDoge1xuICAgICAgaWNvbj86IHN0cmluZztcbiAgICAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgdGV4dD86IHN0cmluZztcbiAgICB9O1xuICAgIGNsZWFyPzoge1xuICAgICAgaWNvbj86IHN0cmluZztcbiAgICAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgdGV4dD86IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuIl19
@@ -1,47 +0,0 @@
1
- import { Component, Injector, Input, TemplateRef, ViewChild, ViewContainerRef, } from '@angular/core';
2
- import { Model, sf } from '@decaf-ts/decorator-validation';
3
- import { NgComponentOutlet } from '@angular/common';
4
- import { AngularEngineKeys, } from '../../engine';
5
- import * as i0 from "@angular/core";
6
- export class DecafModelRendererComponent {
7
- constructor(vcr, injector) {
8
- this.vcr = vcr;
9
- this.injector = injector;
10
- this.JSON = JSON;
11
- }
12
- refresh(model) {
13
- model =
14
- typeof model === 'string'
15
- ? Model.build({}, JSON.parse(model))
16
- : model;
17
- this.output = model.render(this.globals || {}, this.vcr, this.injector, this.inner);
18
- this.rendererId = sf(AngularEngineKeys.RENDERED_ID, this.output.inputs['rendererId']);
19
- }
20
- ngOnChanges(changes) {
21
- if (changes['model']) {
22
- const { currentValue, previousValue, firstChange } = changes['model'];
23
- this.refresh(currentValue);
24
- }
25
- // this.refresh();
26
- }
27
- ngOnDestroy() {
28
- this.output = undefined;
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafModelRendererComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafModelRendererComponent, isStandalone: true, selector: "decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: (TemplateRef), static: true }], usesOnChanges: true, ngImport: i0, template: "<div #renderer>\n <ng-container #outer *ngComponentOutlet=\"output?.component;\n inputs: output?.inputs;\n content: output?.content;\">\n </ng-container>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child.inputs.name) {\n <ng-container *ngComponentOutlet=\"child.component;\n injector: child.injector;\n inputs: child.inputs\n content: child.content\">\n </ng-container>\n }\n </div>\n </ng-template>\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafModelRendererComponent, decorators: [{
34
- type: Component,
35
- args: [{ standalone: true, imports: [NgComponentOutlet], selector: 'decaf-model-renderer', template: "<div #renderer>\n <ng-container #outer *ngComponentOutlet=\"output?.component;\n inputs: output?.inputs;\n content: output?.content;\">\n </ng-container>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child.inputs.name) {\n <ng-container *ngComponentOutlet=\"child.component;\n injector: child.injector;\n inputs: child.inputs\n content: child.content\">\n </ng-container>\n }\n </div>\n </ng-template>\n</div>\n\n\n" }]
36
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.Injector }], propDecorators: { model: [{
37
- type: Input,
38
- args: [{ required: true }]
39
- }], globals: [{
40
- type: Input
41
- }], inner: [{
42
- type: ViewChild,
43
- args: ['inner', { read: (TemplateRef), static: true }]
44
- }], rendererId: [{
45
- type: Input
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlY2FmLW1vZGVsLXJlbmRlcmVyL2RlY2FmLW1vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1tb2RlbC1yZW5kZXJlci9kZWNhZi1tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsaUJBQWlCLEdBRWxCLE1BQU0sY0FBYyxDQUFDOztBQVV0QixNQUFNLE9BQU8sMkJBQTJCO0lBaUJ0QyxZQUNVLEdBQXFCLEVBQ3JCLFFBQWtCO1FBRGxCLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFrQ1QsU0FBSSxHQUFHLElBQUksQ0FBQztJQWpDNUIsQ0FBQztJQUVJLE9BQU8sQ0FBQyxLQUFpQjtRQUMvQixLQUFLO1lBQ0gsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDdkIsQ0FBQyxDQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQU87Z0JBQzNDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFWixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ3hCLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUNsQixJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQ2xCLGlCQUFpQixDQUFDLFdBQVcsRUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUE4QixDQUFDLFlBQVksQ0FBVyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxrQkFBa0I7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDOytHQW5EVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixxT0FTVixDQUFBLFdBQWdCLENBQUEsZ0VDbkM5QyxvcUJBbUJBLDBERENZLGlCQUFpQjs7NEZBTWhCLDJCQUEyQjtrQkFSdkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsQ0FBQyxZQUVsQixzQkFBc0I7NEdBUWhDLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLE9BQU87c0JBRE4sS0FBSztnQkFJTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUEsV0FBZ0IsQ0FBQSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTTVELFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kZWwsIHNmIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJEeW5hbWljT3V0cHV0LFxuICBBbmd1bGFyRW5naW5lS2V5cyxcbiAgUmVuZGVyZWRNb2RlbCxcbn0gZnJvbSAnLi4vLi4vZW5naW5lJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0NvbXBvbmVudE91dGxldF0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZGVjYWYtbW9kZWwtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEZWNhZk1vZGVsUmVuZGVyZXJDb21wb25lbnQ8TSBleHRlbmRzIE1vZGVsPlxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgUmVuZGVyZWRNb2RlbFxue1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBtb2RlbCE6IE0gfCBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZ2xvYmFscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZjxhbnk+LCBzdGF0aWM6IHRydWUgfSlcbiAgaW5uZXI/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIG91dHB1dD86IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge31cblxuICBwcml2YXRlIHJlZnJlc2gobW9kZWw6IHN0cmluZyB8IE0pIHtcbiAgICBtb2RlbCA9XG4gICAgICB0eXBlb2YgbW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKE1vZGVsLmJ1aWxkKHt9LCBKU09OLnBhcnNlKG1vZGVsKSkgYXMgTSlcbiAgICAgICAgOiBtb2RlbDtcblxuICAgIHRoaXMub3V0cHV0ID0gbW9kZWwucmVuZGVyPEFuZ3VsYXJEeW5hbWljT3V0cHV0PihcbiAgICAgIHRoaXMuZ2xvYmFscyB8fCB7fSxcbiAgICAgIHRoaXMudmNyLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgIHRoaXMuaW5uZXIsXG4gICAgKTtcbiAgICB0aGlzLnJlbmRlcmVySWQgPSBzZihcbiAgICAgIEFuZ3VsYXJFbmdpbmVLZXlzLlJFTkRFUkVEX0lELFxuICAgICAgKHRoaXMub3V0cHV0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVsncmVuZGVyZXJJZCddIGFzIHN0cmluZyxcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlbCddKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZmlyc3RDaGFuZ2UgfSA9IGNoYW5nZXNbJ21vZGVsJ107XG4gICAgICB0aGlzLnJlZnJlc2goY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEpTT04gPSBKU09OO1xufVxuIiwiPGRpdiAjcmVuZGVyZXI+XG4gIDxuZy1jb250YWluZXIgI291dGVyICpuZ0NvbXBvbmVudE91dGxldD1cIm91dHB1dD8uY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogb3V0cHV0Py5pbnB1dHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogb3V0cHV0Py5jb250ZW50O1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgICA8ZGl2IFtpZF09XCJyZW5kZXJlcklkIHx8IG51bGxcIj5cbiAgICAgIEBmb3IgKGNoaWxkIG9mIG91dHB1dD8uY2hpbGRyZW47IHRyYWNrIGNoaWxkLmlucHV0cy5uYW1lKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiY2hpbGQuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IGNoaWxkLmluamVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiBjaGlsZC5pbnB1dHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNoaWxkLmNvbnRlbnRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuXG4iXX0=
@@ -1,3 +0,0 @@
1
- export class DynamicModule {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY01vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL0R5bmFtaWNNb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQixhQUFhO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYWJzdHJhY3QgY2xhc3MgRHluYW1pY01vZHVsZSB7fVxuIl19