ui-core-abv 0.6.76 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { NgZone, OnDestroy } from '@angular/core';
2
- import { AbstractControl, FormGroup } from '@angular/forms';
2
+ import { AbstractControl, FormArray, FormGroup } from '@angular/forms';
3
3
  import { Observable } from 'rxjs';
4
4
  import { ButtonColor } from '../../button/button.component';
5
5
  import { FormField, SelectOptionsResolver } from '../form.models';
@@ -26,6 +26,7 @@ export declare class UicDynamicFormComponent implements OnDestroy {
26
26
  private voiceStopTimer;
27
27
  set fields(value: FormField[]);
28
28
  get fields(): FormField[];
29
+ isSubForm: boolean;
29
30
  set form(value: FormGroup);
30
31
  get form(): FormGroup;
31
32
  set disabled(value: boolean);
@@ -37,6 +38,7 @@ export declare class UicDynamicFormComponent implements OnDestroy {
37
38
  listeningField: string | null;
38
39
  readonly fieldStates: import("@angular/core").Signal<DynamicFieldState[]>;
39
40
  readonly visibleFieldStates: import("@angular/core").Signal<DynamicFieldState[]>;
41
+ private readonly formSyncEffect;
40
42
  private readonly fieldStateSyncEffect;
41
43
  readonly colorToIcon: Record<string, string>;
42
44
  constructor(ngZone: NgZone);
@@ -46,8 +48,15 @@ export declare class UicDynamicFormComponent implements OnDestroy {
46
48
  private syncFieldEnabledState;
47
49
  private getClearValue;
48
50
  private matchesVisibilityRule;
51
+ private findFieldByName;
52
+ private isEmptyValue;
53
+ private compareVisibilityValues;
54
+ private toComparableVisibilityValue;
55
+ private getPhoneComparableValue;
56
+ private arrayIncludesVisibilityValue;
49
57
  private parseBooleanLike;
50
58
  getControlErrorMessages(control: AbstractControl | null, field: FormField): string[];
59
+ asFormArray(control: AbstractControl | null): FormArray;
51
60
  isListening(fieldName: string): boolean;
52
61
  private readonly errorMessages;
53
62
  getInputColor(field: FormField, value: string | number): ButtonColor;
@@ -65,6 +74,6 @@ export declare class UicDynamicFormComponent implements OnDestroy {
65
74
  private scheduleVoiceStop;
66
75
  voiceToText(target: HTMLTextAreaElement, fieldName: string): void;
67
76
  static ɵfac: i0.ɵɵFactoryDeclaration<UicDynamicFormComponent, never>;
68
- static ɵcmp: i0.ɵɵComponentDeclaration<UicDynamicFormComponent, "ui-dynamic-form", never, { "fields": { "alias": "fields"; "required": false; }; "form": { "alias": "form"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "voiceToTextSilenceMs": { "alias": "voiceToTextSilenceMs"; "required": false; }; "cols": { "alias": "cols"; "required": false; }; "fileUidResolverFn": { "alias": "fileUidResolverFn"; "required": false; }; "selectOptionsResolver": { "alias": "selectOptionsResolver"; "required": false; }; }, {}, never, never, true, never>;
77
+ static ɵcmp: i0.ɵɵComponentDeclaration<UicDynamicFormComponent, "ui-dynamic-form", never, { "fields": { "alias": "fields"; "required": false; }; "isSubForm": { "alias": "isSubForm"; "required": false; }; "form": { "alias": "form"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "voiceToTextSilenceMs": { "alias": "voiceToTextSilenceMs"; "required": false; }; "cols": { "alias": "cols"; "required": false; }; "fileUidResolverFn": { "alias": "fileUidResolverFn"; "required": false; }; "selectOptionsResolver": { "alias": "selectOptionsResolver"; "required": false; }; }, {}, never, never, true, never>;
69
78
  }
70
79
  export {};
@@ -36,6 +36,8 @@ export declare class UicFormWrapperComponent implements OnInit, OnChanges, OnDes
36
36
  ngOnChanges(changes: SimpleChanges): void;
37
37
  ngOnDestroy(): void;
38
38
  private buildForm;
39
+ private buildRepeaterGroup;
40
+ private repeaterArrayValidator;
39
41
  private focusConfiguredField;
40
42
  private findFocusableFieldElement;
41
43
  private updateDisabledState;
@@ -45,6 +47,9 @@ export declare class UicFormWrapperComponent implements OnInit, OnChanges, OnDes
45
47
  private handleFormChange;
46
48
  private updateFieldOptions;
47
49
  private updateOptionsSources;
50
+ private updateRepeaterSubFieldOptionsSources;
51
+ private resolveRepeaterSubFieldOptionsSource;
52
+ private updateRepeaterSubFieldOptionsState;
48
53
  private updateDependentOptionsSources;
49
54
  private resolveOptionsSourceField;
50
55
  private handleOptionsSourceError;
@@ -85,6 +85,12 @@ export interface FormField {
85
85
  visibilityRules?: FieldVisibilityRule[] | null;
86
86
  iaValidation?: boolean;
87
87
  iaValidationPrompt?: string;
88
+ repeaterFields?: FormField[];
89
+ repeaterMinItems?: number;
90
+ repeaterMaxItems?: number;
91
+ repeaterAddLabel?: string;
92
+ repeaterRemoveLabel?: string;
93
+ repeaterItemTitle?: string;
88
94
  }
89
95
  export interface FieldVisibilityRule {
90
96
  fieldName: string;
@@ -92,16 +98,25 @@ export interface FieldVisibilityRule {
92
98
  operator: VisibilityOperators;
93
99
  value: any;
94
100
  }
95
- export type VisibilityOperators = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'includes' | 'notIncludes';
101
+ export type VisibilityOperators = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'includes' | 'notIncludes' | 'isEmpty' | 'isNotEmpty';
102
+ export interface FieldVisibilityConfig {
103
+ outputType: string;
104
+ operators: VisibilityOperators[];
105
+ }
96
106
  export interface FieldConfig {
97
107
  value: FieldType;
98
108
  icon: string;
99
109
  detail: string;
100
110
  label: string;
101
111
  properties: string[];
112
+ visibility: FieldVisibilityConfig;
102
113
  }
114
+ export declare const VISIBILITY_OPERATOR_OPTIONS: {
115
+ id: VisibilityOperators;
116
+ text: string;
117
+ }[];
103
118
  export declare const FIELDS_CONFIG: FieldConfig[];
104
- export type FieldType = 'text' | 'number' | 'phone' | 'date' | 'time' | 'select' | 'radio' | 'checkbox' | 'switch' | 'textarea' | 'pool' | 'file' | 'multyselect' | 'searcher' | 'slider';
119
+ export type FieldType = 'text' | 'number' | 'phone' | 'date' | 'time' | 'select' | 'radio' | 'checkbox' | 'switch' | 'textarea' | 'pool' | 'file' | 'multyselect' | 'searcher' | 'slider' | 'repeater';
105
120
  export interface FormResult {
106
121
  result: boolean;
107
122
  form: uicFormValuesRecord | null;
@@ -0,0 +1,21 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FormArray, FormGroup } from '@angular/forms';
3
+ import { FormField } from '../form.models';
4
+ import * as i0 from "@angular/core";
5
+ export declare class UicRepeaterComponent implements OnInit {
6
+ private readonly fb;
7
+ formArray: FormArray;
8
+ field: FormField;
9
+ cols: number;
10
+ error?: string;
11
+ ngOnInit(): void;
12
+ getGroup(index: number): FormGroup;
13
+ addGroup(): void;
14
+ removeGroup(index: number): void;
15
+ get canAdd(): boolean;
16
+ get canRemove(): boolean;
17
+ private mapValidatorsFromField;
18
+ private getBlankValue;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<UicRepeaterComponent, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<UicRepeaterComponent, "ui-repeater", never, { "formArray": { "alias": "formArray"; "required": true; }; "field": { "alias": "field"; "required": true; }; "cols": { "alias": "cols"; "required": false; }; "error": { "alias": "error"; "required": false; }; }, {}, never, never, true, never>;
21
+ }
@@ -1,6 +1,6 @@
1
1
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
2
2
  import { EditableBlock, EditableField } from '../user-formbuilder.component';
3
- import { FieldConfig } from '../../dynamic-form/form.models';
3
+ import { FieldConfig, FieldType } from '../../dynamic-form/form.models';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class BlockEditorComponent {
6
6
  block: import("@angular/core").InputSignal<EditableBlock>;
@@ -8,13 +8,33 @@ export declare class BlockEditorComponent {
8
8
  addFieldRequest: import("@angular/core").OutputEmitterRef<FieldConfig>;
9
9
  deleteBlock: import("@angular/core").OutputEmitterRef<string>;
10
10
  notifySelectedField: import("@angular/core").OutputEmitterRef<EditableField | null>;
11
+ notifySelectedSubField: import("@angular/core").OutputEmitterRef<{
12
+ parentCode: string;
13
+ subField: EditableField;
14
+ } | null>;
11
15
  selectedFieldId: string | null;
16
+ selectedSubFieldCode: string | null;
17
+ visibilityParentFieldCodes: Set<string>;
18
+ excludeSubFieldTypes: FieldType[];
19
+ private expandedRepeaters;
20
+ isRepeaterExpanded(code: string): boolean;
21
+ toggleRepeater(code: string, event: Event): void;
22
+ isRepeaterParentSelected(field: EditableField): boolean;
12
23
  selectField(field: EditableField): void;
24
+ onSelectSubField(parentCode: string, subField: EditableField, event: Event): void;
25
+ addSubField(parentCode: string, type: FieldConfig): void;
26
+ deleteSubField(parentCode: string, sfCode: string, event: Event): void;
27
+ reorderSubFields(parentCode: string, event: CdkDragDrop<EditableField[]>): void;
28
+ private updateSubFields;
29
+ private generateSubFieldCode;
13
30
  changeTitle(newTitle: string): void;
14
31
  changeSubtitle(newSubtitle: string): void;
15
32
  addField(newFieldType: FieldConfig): void;
33
+ requestDeleteBlock(e: Event): void;
16
34
  deleteField(fieldCode: string, e: Event): void;
35
+ isVisibilityParent(fieldCode: string): boolean;
36
+ isBlockVisibilityParent(): boolean;
17
37
  reorderFields(event: CdkDragDrop<EditableField[]>): void;
18
38
  static ɵfac: i0.ɵɵFactoryDeclaration<BlockEditorComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<BlockEditorComponent, "lib-block-editor", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "selectedFieldId": { "alias": "selectedFieldId"; "required": false; }; }, { "blockChange": "blockChange"; "addFieldRequest": "addFieldRequest"; "deleteBlock": "deleteBlock"; "notifySelectedField": "notifySelectedField"; }, never, never, true, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<BlockEditorComponent, "lib-block-editor", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "selectedFieldId": { "alias": "selectedFieldId"; "required": false; }; "selectedSubFieldCode": { "alias": "selectedSubFieldCode"; "required": false; }; "visibilityParentFieldCodes": { "alias": "visibilityParentFieldCodes"; "required": false; }; }, { "blockChange": "blockChange"; "addFieldRequest": "addFieldRequest"; "deleteBlock": "deleteBlock"; "notifySelectedField": "notifySelectedField"; "notifySelectedSubField": "notifySelectedSubField"; }, never, never, true, never>;
20
40
  }
@@ -9,8 +9,10 @@ export declare class FieldEditorComponent {
9
9
  hasOptions: import("@angular/core").Signal<boolean>;
10
10
  hasOptionsSourceConfig: import("@angular/core").Signal<boolean>;
11
11
  hasExternalOptionsSource: import("@angular/core").Signal<boolean>;
12
+ isRepeater: import("@angular/core").Signal<boolean>;
12
13
  config: import("@angular/core").InputSignal<EditableField>;
13
14
  focusRequiredField: import("@angular/core").InputSignal<boolean>;
15
+ isSubField: import("@angular/core").InputSignal<boolean>;
14
16
  options: import("@angular/core").InputSignal<Record<string, AppSelectOption[]>>;
15
17
  hiddenSections: import("@angular/core").WritableSignal<string[]>;
16
18
  fieldChange: import("@angular/core").OutputEmitterRef<FormField>;
@@ -19,7 +21,8 @@ export declare class FieldEditorComponent {
19
21
  optionsSourceFields: import("@angular/core").Signal<FormField[]>;
20
22
  advancedFields: import("@angular/core").Signal<FormField[]>;
21
23
  styleFields: import("@angular/core").Signal<FormField[]>;
22
- branchFields: FormField[];
24
+ branchDraftValues: import("@angular/core").WritableSignal<uicFormValuesRecord>;
25
+ branchFields: import("@angular/core").Signal<FormField[]>;
23
26
  initialValues: import("@angular/core").Signal<FormField>;
24
27
  branchInitialValues: import("@angular/core").Signal<uicFormValuesRecord>;
25
28
  fieldType: import("@angular/core").Signal<import("ui-core-abv").FieldConfig | undefined>;
@@ -38,6 +41,13 @@ export declare class FieldEditorComponent {
38
41
  private buildOptionsSourceFields;
39
42
  private prepareOptionsSourceField;
40
43
  private buildBranchFields;
44
+ private prepareBranchField;
45
+ private getAllowedVisibilityOperators;
46
+ private getDependencyFieldType;
47
+ private getBranchValueFieldType;
48
+ private ruleToBranchValues;
49
+ private clearCurrentVisibilityRule;
50
+ private isValueLessVisibilityOperator;
41
51
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldEditorComponent, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldEditorComponent, "lib-field-editor", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "focusRequiredField": { "alias": "focusRequiredField"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "fieldChange": "fieldChange"; }, never, never, true, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldEditorComponent, "lib-field-editor", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "focusRequiredField": { "alias": "focusRequiredField"; "required": false; "isSignal": true; }; "isSubField": { "alias": "isSubField"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "fieldChange": "fieldChange"; }, never, never, true, never>;
43
53
  }
@@ -1,9 +1,10 @@
1
- import { FieldConfig } from '../../../dynamic-form/form.models';
1
+ import { FieldConfig, FieldType } from '../../../dynamic-form/form.models';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class FieldTypeSelectorComponent {
4
- types: FieldConfig[];
4
+ excludeTypes: import("@angular/core").InputSignal<FieldType[]>;
5
+ types: import("@angular/core").Signal<FieldConfig[]>;
5
6
  selectType: import("@angular/core").OutputEmitterRef<FieldConfig>;
6
7
  addField(type: FieldConfig): void;
7
8
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldTypeSelectorComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldTypeSelectorComponent, "lib-field-type-selector", never, {}, { "selectType": "selectType"; }, never, never, true, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldTypeSelectorComponent, "lib-field-type-selector", never, { "excludeTypes": { "alias": "excludeTypes"; "required": false; "isSignal": true; }; }, { "selectType": "selectType"; }, never, never, true, never>;
9
10
  }
@@ -8,6 +8,7 @@ export type EditableField = {
8
8
  type?: string;
9
9
  field?: FieldConfig;
10
10
  fieldData: FormField;
11
+ repeaterSubFields?: EditableField[];
11
12
  };
12
13
  export type EditableBlock = {
13
14
  id?: number | null;
@@ -39,9 +40,14 @@ export declare class UicUserFormbuilderComponent {
39
40
  editingSnapshot: import("@angular/core").WritableSignal<EditableForm | null>;
40
41
  isReadOnly: import("@angular/core").WritableSignal<boolean>;
41
42
  selectedField: import("@angular/core").WritableSignal<EditableField | null>;
43
+ editingSubField: import("@angular/core").WritableSignal<{
44
+ parentCode: string;
45
+ subField: EditableField;
46
+ } | null>;
42
47
  focusNewFieldCode: import("@angular/core").WritableSignal<string | null>;
43
48
  propertiesWidth: import("@angular/core").WritableSignal<number>;
44
49
  previewSchema: import("@angular/core").Signal<FormSchema>;
50
+ visibilityParentFieldCodes: import("@angular/core").Signal<Set<string>>;
45
51
  private isResizingProperties;
46
52
  private resizeStartX;
47
53
  private resizeStartWidth;
@@ -51,6 +57,11 @@ export declare class UicUserFormbuilderComponent {
51
57
  deleteBlock(code: string): void;
52
58
  addField(blockCode: string, newFieldType: FieldConfig): void;
53
59
  selectField(field: EditableField | null): void;
60
+ onSelectSubField(event: {
61
+ parentCode: string;
62
+ subField: EditableField;
63
+ } | null): void;
64
+ onSubFieldChange(updatedFieldData: FormField): void;
54
65
  startPropertiesResize(event: MouseEvent): void;
55
66
  onPropertiesResize(event: MouseEvent): void;
56
67
  stopPropertiesResize(): void;
@@ -158,6 +158,8 @@ export declare const DICTIONARY_EN: {
158
158
  readonly block_subtitle: "Subtitle";
159
159
  readonly add_block: "Add block";
160
160
  readonly delete_block: "Delete block";
161
+ readonly delete_block_dependency_blocked: "This block cannot be deleted because it contains fields that other fields depend on";
162
+ readonly delete_field_dependency_blocked: "This field cannot be deleted because another field depends on its value";
161
163
  readonly preview_form: "Preview";
162
164
  readonly submit_form: "Submit";
163
165
  readonly select_field_to_edit: "Select a field to edit its properties";
@@ -256,6 +258,13 @@ export declare const DICTIONARY_EN: {
256
258
  readonly selectSearchEnabled_tip: "Enables search among options";
257
259
  readonly selectNullable: "Allow empty option";
258
260
  readonly selectSearchEnabled: "Enable search";
261
+ readonly repeaterMinItems: "Minimum items";
262
+ readonly repeaterMinItems_tip: "Minimum number of required items";
263
+ readonly repeaterMaxItems: "Maximum items";
264
+ readonly repeaterMaxItems_tip: "Maximum number of allowed items";
265
+ readonly repeaterAddLabel: "Add button label";
266
+ readonly repeaterRemoveLabel: "Remove button label";
267
+ readonly repeaterItemTitle: "Item title";
259
268
  };
260
269
  readonly options_editor: {
261
270
  readonly title: "Options";
@@ -281,11 +290,26 @@ export declare const DICTIONARY_EN: {
281
290
  readonly delete: "Delete";
282
291
  readonly show_advanced: "Show advanced";
283
292
  readonly hide_advanced: "Hide advanced";
293
+ readonly subfields: "Sub-fields";
294
+ };
295
+ readonly visibility_operators: {
296
+ readonly equals: "Equals";
297
+ readonly notEquals: "Does not equal";
298
+ readonly greaterThan: "Is greater than";
299
+ readonly lessThan: "Is less than";
300
+ readonly includes: "Includes";
301
+ readonly notIncludes: "Does not include";
302
+ readonly isEmpty: "Is empty";
303
+ readonly isNotEmpty: "Is not empty";
284
304
  };
285
305
  readonly validation: {
286
306
  readonly duplicate_identifier: "The identifier \"{{identifier}}\" is used more than once.";
287
307
  readonly duplicate_identifier_title: "Validation error";
288
308
  };
309
+ readonly repeater: {
310
+ readonly no_subfields: "No sub-fields yet. Add one below.";
311
+ readonly add_subfield: "Add sub-field";
312
+ };
289
313
  };
290
314
  readonly validation: {
291
315
  readonly invalid: "{{field}} is invalid.";
@@ -158,6 +158,8 @@ export declare const DICTIONARY_ES: {
158
158
  readonly block_subtitle: "Subtítulo";
159
159
  readonly add_block: "Agregar bloque";
160
160
  readonly delete_block: "Eliminar bloque";
161
+ readonly delete_block_dependency_blocked: "Este bloque no se puede eliminar porque contiene campos de los que dependen otros campos";
162
+ readonly delete_field_dependency_blocked: "Este campo no se puede eliminar porque otro campo depende de su valor";
161
163
  readonly preview_form: "Vista previa";
162
164
  readonly submit_form: "Guardar";
163
165
  readonly select_field_to_edit: "Selecciona un campo para editar sus propiedades";
@@ -240,22 +242,29 @@ export declare const DICTIONARY_ES: {
240
242
  readonly iaValidation: "Validación IA";
241
243
  readonly iaValidationPrompt: "Prompt de validación IA";
242
244
  readonly searchApi_tip: "URL para obtener opciones de búsqueda";
243
- readonly optionsSourceKey: "Fuente de opciones";
244
- readonly optionsSourceKey_tip: "Clave lógica registrada por la aplicación consumidora";
245
- readonly optionsSourceIdField: "Campo ID de opción";
246
- readonly optionsSourceIdField_tip: "Ruta del valor usado como id. Ejemplo: id";
247
- readonly optionsSourceTextField: "Campo texto de opción";
248
- readonly optionsSourceTextField_tip: "Ruta del valor usado como texto. Ejemplo: name";
245
+ readonly optionsSourceKey: "Origen de opciones";
246
+ readonly optionsSourceKey_tip: "Opciones manuales o API externa";
247
+ readonly optionsSourceIdField: "Nombre de campo ID";
248
+ readonly optionsSourceIdField_tip: "Propiedad del objeto para usar como ID";
249
+ readonly optionsSourceTextField: "Nombre de campo de texto";
250
+ readonly optionsSourceTextField_tip: "Propiedad del objeto para mostrar";
249
251
  readonly optionsSourceTextTemplate: "Plantilla de texto";
250
252
  readonly optionsSourceTextTemplate_tip: "Ejemplo: {{name}} ({{id}})";
251
253
  readonly optionsSourceDependsOn: "Depende de";
252
- readonly optionsSourceDependsOn_tip: "Identificador del campo padre que dispara la recarga";
254
+ readonly optionsSourceDependsOn_tip: "Campo para filtrar opciones según valor";
253
255
  readonly optionsSourceParamName: "Nombre del parámetro";
254
256
  readonly optionsSourceParamName_tip: "Nombre con el que se envía el valor dependiente";
255
257
  readonly selectNullable_tip: "Permite seleccionar una opción vacía";
256
258
  readonly selectSearchEnabled_tip: "Habilita búsqueda entre opciones";
257
259
  readonly selectNullable: "Permitir opción vacía";
258
260
  readonly selectSearchEnabled: "Habilitar búsqueda";
261
+ readonly repeaterMinItems: "Mínimo de ítems";
262
+ readonly repeaterMinItems_tip: "Cantidad mínima de ítems requerida";
263
+ readonly repeaterMaxItems: "Máximo de ítems";
264
+ readonly repeaterMaxItems_tip: "Cantidad máxima de ítems permitida";
265
+ readonly repeaterAddLabel: "Etiqueta del botón agregar";
266
+ readonly repeaterRemoveLabel: "Etiqueta del botón eliminar";
267
+ readonly repeaterItemTitle: "Título de ítem";
259
268
  };
260
269
  readonly options_editor: {
261
270
  readonly title: "Opciones";
@@ -281,11 +290,26 @@ export declare const DICTIONARY_ES: {
281
290
  readonly delete: "Eliminar";
282
291
  readonly show_advanced: "Mostrar avanzado";
283
292
  readonly hide_advanced: "Ocultar avanzado";
293
+ readonly subfields: "Sub-campos";
294
+ };
295
+ readonly visibility_operators: {
296
+ readonly equals: "Es igual a";
297
+ readonly notEquals: "No es igual a";
298
+ readonly greaterThan: "Es mayor que";
299
+ readonly lessThan: "Es menor que";
300
+ readonly includes: "Incluye";
301
+ readonly notIncludes: "No incluye";
302
+ readonly isEmpty: "Está vacío";
303
+ readonly isNotEmpty: "No está vacío";
284
304
  };
285
305
  readonly validation: {
286
306
  readonly duplicate_identifier: "El identificador \"{{identifier}}\" se está usando más de una vez.";
287
307
  readonly duplicate_identifier_title: "Error de validación";
288
308
  };
309
+ readonly repeater: {
310
+ readonly no_subfields: "Sin sub-campos. Añade uno abajo.";
311
+ readonly add_subfield: "Agregar sub-campo";
312
+ };
289
313
  };
290
314
  readonly validation: {
291
315
  readonly invalid: "{{field}} es invalido.";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-core-abv",
3
- "version": "0.6.76",
3
+ "version": "0.7.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=19.2.0 <21.0.0",
6
6
  "@angular/core": ">=19.2.0 <21.0.0",
package/public-api.d.ts CHANGED
@@ -40,6 +40,7 @@ export * from './lib/components/tag-selector/tag-selector.component';
40
40
  export * from './lib/components/progress-bar/progress-bar.component';
41
41
  export * from './lib/animations/animatios.index';
42
42
  export * from './lib/components/dynamic-form/form.models';
43
+ export * from './lib/components/dynamic-form/repeater/repeater.component';
43
44
  export * from './lib/components/user-formbuilder/user-formbuilder.component';
44
45
  export * from './lib/components/rule-builder/rule-builder.component';
45
46
  export * from './lib/services/modal.service';