@eqproject/eqp-dynamic-module 2.11.2 → 2.11.5

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 (32) hide show
  1. package/USERGUIDE.md +437 -437
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +143 -13
  3. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +76 -3
  4. package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +74 -13
  5. package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +14 -2
  6. package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +735 -0
  7. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +16 -15
  8. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
  9. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
  10. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
  11. package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
  12. package/esm2020/lib/eqp-dynamic-module.module.mjs +4 -1
  13. package/esm2020/lib/utils/css-color.mjs +101 -0
  14. package/esm2020/lib/utils/css-declarations.mjs +119 -0
  15. package/esm2020/lib/utils/css-property-catalog.mjs +134 -0
  16. package/esm2020/lib/utils/field-style-catalog.mjs +491 -0
  17. package/esm2020/public-api.mjs +6 -1
  18. package/fesm2015/eqproject-eqp-dynamic-module.mjs +1941 -73
  19. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  20. package/fesm2020/eqproject-eqp-dynamic-module.mjs +1906 -80
  21. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  22. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +39 -0
  23. package/lib/components/private/add-form-field/add-form-field.component.d.ts +19 -0
  24. package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +5 -1
  25. package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +192 -0
  26. package/lib/eqp-dynamic-module.module.d.ts +66 -65
  27. package/lib/utils/css-color.d.ts +15 -0
  28. package/lib/utils/css-declarations.d.ts +23 -0
  29. package/lib/utils/css-property-catalog.d.ts +36 -0
  30. package/lib/utils/field-style-catalog.d.ts +130 -0
  31. package/package.json +1 -1
  32. package/public-api.d.ts +5 -0
@@ -16,6 +16,7 @@ import { Contestualization } from "../../../models/getter.model";
16
16
  import { FieldExtraConfig } from "../../../models/fieldExtraConfig.model";
17
17
  import { AttachmentType, TmwAttachmentDTO } from "tmw-attachments";
18
18
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
19
+ import { getFieldDisplayName } from '../../../utils/field-style-catalog';
19
20
  import * as i0 from "@angular/core";
20
21
  export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {
21
22
  private formBuilder;
@@ -99,6 +100,15 @@ export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, Af
99
100
  actionOnRecordFormGroup: UntypedFormGroup;
100
101
  dialogFieldRef: MatDialogRef<TemplateRef<any>>;
101
102
  dialogField: TemplateRef<any>;
103
+ dialogFieldGraphicsRef: MatDialogRef<TemplateRef<any>>;
104
+ dialogFieldGraphics: TemplateRef<any>;
105
+ /** Campi passati all'editor grafico multiplo (copia della selezione al momento dell'apertura) */
106
+ fieldsForGraphicsEditor: Array<BaseField>;
107
+ /**
108
+ * Modalità "scelta dei campi" attivata dal bottone Grafica: accende le caselle di spunta
109
+ * nella tabella dei campi (la tmw-table le mostra solo con l'input "selection" a true).
110
+ */
111
+ graphicsSelectionMode: boolean;
102
112
  fieldSectionColumnTemplate: TemplateRef<any>;
103
113
  selectedInnerForm: Form;
104
114
  indexSelectedInnerForm: number;
@@ -153,6 +163,10 @@ export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, Af
153
163
  dialogVeTooltipRef: MatDialogRef<TemplateRef<any>>;
154
164
  dialogVeReorderRef: MatDialogRef<TemplateRef<any>>;
155
165
  veShowGraphicInput: boolean;
166
+ /** Pannello "Copia Grafica" del Visual Editor: da quale campo copiare la grafica */
167
+ veShowCopyGraphic: boolean;
168
+ veCopySourceLabel: string | null;
169
+ fieldDisplayName: typeof getFieldDisplayName;
156
170
  veGraphicHint: string;
157
171
  veApplyToAllOfType: boolean;
158
172
  veReorderFields: BaseField[];
@@ -479,6 +493,22 @@ export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, Af
479
493
  openContestualizationDialog(): void;
480
494
  closeContestualizationDialog(): void;
481
495
  onFireTrigger(ev: FireTrigger): void;
496
+ /**
497
+ * Accende (o spegne) la modalità di scelta dei campi: compaiono le caselle di spunta
498
+ * nella tabella e la barra da cui aprire l'editor grafico.
499
+ */
500
+ toggleFieldGraphicsSelection(): void;
501
+ /** Esce dalla modalità di scelta, azzerando la selezione */
502
+ cancelFieldGraphicsSelection(): void;
503
+ /**
504
+ * Apre l'editor grafico sui campi spuntati nella tabella dei campi.
505
+ * Le modifiche vengono applicate a tutti i campi selezionati della stessa tipologia.
506
+ */
507
+ openFieldGraphicsDialog(): void;
508
+ /** Chiude la dialog e torna alla tabella lasciando attiva la scelta dei campi */
509
+ closeFieldGraphicsDialog(): void;
510
+ /** L'editor ha già scritto gli stili sui campi: resta da aggiornare tabella e anteprima */
511
+ onFieldGraphicsApplied(): void;
482
512
  toggleDeleteButton(event: Array<BaseField>): void;
483
513
  deleteSelectedFields(propertyName: string): void;
484
514
  toggleVisualEditor(): void;
@@ -486,6 +516,15 @@ export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, Af
486
516
  field: BaseField;
487
517
  event: MouseEvent;
488
518
  }): void;
519
+ /**
520
+ * Campi da cui è possibile copiare la grafica: stessa tipologia del campo selezionato
521
+ * (le chiavi degli stili sono specifiche del tipo) e con una grafica già impostata.
522
+ */
523
+ get veCopyGraphicCandidates(): Array<BaseField>;
524
+ openVeCopyGraphic(): void;
525
+ closeVeCopyGraphic(): void;
526
+ /** Copia sul campo selezionato l'intera grafica del campo scelto come sorgente */
527
+ veApplyCopyGraphic(): void;
489
528
  veEditField(): void;
490
529
  veAiEdit(): void;
491
530
  veSendGraphic(): void;
@@ -54,6 +54,16 @@ export declare class AddFormFieldComponent implements OnInit {
54
54
  hint: string;
55
55
  }>;
56
56
  aiFieldSuggestLoading: boolean;
57
+ /**
58
+ * Codice del campo da cui è stata ereditata la grafica di default della tipologia,
59
+ * null se non c'è stata nessuna eredità. Serve solo per l'avviso a video.
60
+ */
61
+ inheritedStyleFromLabel: string | null;
62
+ /**
63
+ * Da dove arriva la grafica ereditata: da un campo della stessa tipologia ('campo'),
64
+ * oppure ricostruita dagli elementi comuni di campi di tipologia diversa ('globale').
65
+ */
66
+ inheritedStyleSource: 'campo' | 'globale' | null;
57
67
  showGraphicSuggestInput: boolean;
58
68
  graphicSuggestHint: string;
59
69
  private static readonly HINT_PALETTES;
@@ -458,6 +468,15 @@ export declare class AddFormFieldComponent implements OnInit {
458
468
  saveAndExitAddField(save: boolean, nextRelativeIndex?: number): void;
459
469
  isAnActionKey(key: any, field: ActionButtonField, formulas: Array<any>): boolean;
460
470
  setCodeToExtraFields(): void;
471
+ /**
472
+ * Grafica di default di una tipologia: quando si sceglie il tipo di un campo, il campo
473
+ * eredita gli stili del primo campo dello stesso tipo già presente nella form.
474
+ * La copia è profonda, quindi le modifiche fatte poi su questo campo restano locali
475
+ * e non intaccano la grafica di default della tipologia.
476
+ */
477
+ private applyInheritedFieldStyle;
478
+ /** Azzera la grafica ereditata su questo campo, senza toccare il campo di origine */
479
+ clearInheritedFieldStyle(): void;
461
480
  /**
462
481
  * Metodo per ripristinare l'oggetto field al cambio del tipo selezionato.
463
482
  * Lascia valorizzate solo le proprietà dell'oggetto BaseField comune a tutti i tipi di campo.
@@ -1,4 +1,5 @@
1
1
  import { OnInit, OnChanges, SimpleChanges, ElementRef } from '@angular/core';
2
+ import { KeyValue } from '@angular/common';
2
3
  import { MatDialog } from '@angular/material/dialog';
3
4
  import { Formula } from '../../../modules/formula.model';
4
5
  import { MatDialogRef } from '@angular/material/dialog';
@@ -19,7 +20,7 @@ export declare class AddFormulaComponent implements OnInit, OnChanges {
19
20
  fieldBeingDragged: any;
20
21
  formulaObject: any;
21
22
  fullFieldMap: Record<string, string[] | any>;
22
- filteredFieldMap: Record<string, string[]>;
23
+ filteredFieldMap: Record<string, string[] | any>;
23
24
  recObj: Array<any>;
24
25
  error: string;
25
26
  constructor(data: any, dialogRef: MatDialogRef<AddFormulaComponent>, dialog: MatDialog);
@@ -43,6 +44,9 @@ export declare class AddFormulaComponent implements OnInit, OnChanges {
43
44
  save(): void;
44
45
  getNestedPropertiesMap(obj: any): Record<string, string[]>;
45
46
  getPropertyPaths(obj: any, prefix: string): string[];
47
+ comparePaths(a: string, b: string): number;
48
+ sortFieldEntries(map: Record<string, string | string[]>): Record<string, string | string[]>;
49
+ fieldMapComparator: (a: KeyValue<string, any>, b: KeyValue<string, any>) => number;
46
50
  isKeyValueList(list: any[]): boolean;
47
51
  static ɵfac: i0.ɵɵFactoryDeclaration<AddFormulaComponent, never>;
48
52
  static ɵcmp: i0.ɵɵComponentDeclaration<AddFormulaComponent, "eqp-dynamic-module-add-formula-component", never, {}, {}, never, never, false, never>;
@@ -0,0 +1,192 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import { UntypedFormBuilder } from '@angular/forms';
3
+ import { BaseField, FieldTypeEnum } from '../../../models/baseField.model';
4
+ import { EndPointConfiguration } from '../../../models/endPointConfiguration.model';
5
+ import { CssPropertyDef } from '../../../utils/css-property-catalog';
6
+ import { FieldStyleEntryDef, FieldStyleTypeDef, getFieldDisplayName, GlobalStyleElementDef } from '../../../utils/field-style-catalog';
7
+ import * as i0 from "@angular/core";
8
+ /** Un gruppo raccoglie tutti i campi selezionati che condividono la stessa tipologia */
9
+ export interface FieldStyleGroup {
10
+ def: FieldStyleTypeDef;
11
+ fields: Array<BaseField>;
12
+ elements: Array<FieldStyleEntryDef>;
13
+ /**
14
+ * Mappa mostrata a video: parte sempre dagli stili reali del campo scelto come campione,
15
+ * con sopra le modifiche ancora non applicate. Va ricostruita quando cambia il campione.
16
+ */
17
+ styleMap: {
18
+ [key: string]: string;
19
+ };
20
+ /** Modifiche in sospeso, indicizzate per "ElementoStato|proprietà" */
21
+ overrides: {
22
+ [entry: string]: string;
23
+ };
24
+ /** True se i campi del gruppo partono da grafiche diverse fra loro */
25
+ hasDifferences: boolean;
26
+ sampleIndex: number;
27
+ selectedState: string;
28
+ openElement: string;
29
+ showAllProperties: boolean;
30
+ previewField: any;
31
+ previewRecord: any;
32
+ }
33
+ export declare class FieldGraphicsEditorComponent implements OnInit {
34
+ private formBuilder;
35
+ /** Campi selezionati nella tabella del configuratore */
36
+ fields: Array<BaseField>;
37
+ endPointConfiguration: EndPointConfiguration;
38
+ formulaObject: any;
39
+ /** Emesso dopo aver scritto le modifiche sui campi */
40
+ applyEvent: EventEmitter<void>;
41
+ cancelEvent: EventEmitter<void>;
42
+ FieldTypeEnum: typeof FieldTypeEnum;
43
+ displayName: typeof getFieldDisplayName;
44
+ /** Scheda attiva: grafica valida per tutti i campi, oppure divisa per tipologia */
45
+ activeTab: 'globale' | 'personalizzata';
46
+ groups: Array<FieldStyleGroup>;
47
+ /** Campi selezionati con una grafica configurabile (esclusi Lookup e Form di dettaglio) */
48
+ styleableFields: Array<BaseField>;
49
+ unsupportedFields: Array<BaseField>;
50
+ activeGroupIndex: number;
51
+ globalElements: Array<GlobalStyleElementDef>;
52
+ globalStates: Array<FieldStyleEntryDef>;
53
+ globalSelectedState: string;
54
+ globalOpenElement: string;
55
+ globalShowAllProperties: boolean;
56
+ globalSampleIndex: number;
57
+ /** Modifiche globali in sospeso, indicizzate per "ElementoLogico|Stato|proprietà" */
58
+ globalOverrides: {
59
+ [entry: string]: string;
60
+ };
61
+ globalPreviewField: any;
62
+ globalPreviewRecord: any;
63
+ /** Incrementato ad ogni modifica per forzare il ricalcolo degli stili nelle anteprime */
64
+ styleVersion: number;
65
+ /**
66
+ * Definizioni create al volo per le proprietà scritte a mano e fuori catalogo.
67
+ * Vanno memorizzate: propertiesFor() viene richiamata ad ogni ciclo di change detection
68
+ * e ricreare gli oggetti farebbe ricostruire le righe, facendo perdere il fuoco mentre si scrive.
69
+ */
70
+ private customPropertyDefs;
71
+ constructor(formBuilder: UntypedFormBuilder);
72
+ ngOnInit(): void;
73
+ private buildGroups;
74
+ private buildGlobalTab;
75
+ /**
76
+ * Ricostruisce la mappa mostrata per un gruppo: parte dagli stili reali del campo campione
77
+ * — così una grafica impostata fuori da questo editor viene sempre riportata —, poi applica
78
+ * le modifiche globali e infine quelle specifiche della tipologia.
79
+ */
80
+ private rebuildGroup;
81
+ /** Ricrea il campo fittizio usato dall'anteprima, agganciandogli la mappa mostrata */
82
+ private buildPreview;
83
+ get activeGroup(): FieldStyleGroup | null;
84
+ selectGroup(index: number): void;
85
+ selectState(group: FieldStyleGroup, stateKey: string): void;
86
+ toggleElement(group: FieldStyleGroup, elementKey: string): void;
87
+ /** Cambiando campione si rileggono i suoi stili reali, mantenendo le modifiche in sospeso */
88
+ changeSample(group: FieldStyleGroup, index: number): void;
89
+ groupFieldNames(group: FieldStyleGroup): string;
90
+ get sampleFieldLabel(): string;
91
+ selectTab(tab: 'globale' | 'personalizzata'): void;
92
+ selectGlobalState(stateKey: string): void;
93
+ toggleGlobalElement(elementKey: string): void;
94
+ changeGlobalSample(index: number): void;
95
+ get globalSampleField(): BaseField | null;
96
+ /** True se l'elemento logico non esiste sul campo attualmente in anteprima */
97
+ isGlobalElementMissingOnSample(elementKey: string): boolean;
98
+ private rebuildGlobalPreview;
99
+ /** Riversa le modifiche globali in sospeso su una mappa stili, risolte per quel campo */
100
+ private applyGlobalOverridesToMap;
101
+ globalStyleKeysForSample(elementKey: string): Array<string>;
102
+ /** Valore mostrato per una proprietà globale: quello reale del campione più le modifiche */
103
+ getGlobalPropertyValue(elementKey: string, prop: string): string;
104
+ setGlobalPropertyValue(elementKey: string, prop: string, value: string): void;
105
+ resetGlobalProperty(elementKey: string, prop: string): void;
106
+ isGlobalPropertySet(elementKey: string, prop: string): boolean;
107
+ /** Proprietà mostrate nella scheda globale per un elemento logico */
108
+ globalPropertiesFor(elementKey: string): Array<CssPropertyDef>;
109
+ globalSetPropertiesCount(elementKey: string): number;
110
+ /** Chiave della mappa stili: "Elemento" + "Stato" (es. InputFocused) */
111
+ styleKey(group: FieldStyleGroup, elementKey: string): string;
112
+ /**
113
+ * Proprietà mostrate per un elemento: quelle di base, più quelle già valorizzate
114
+ * (anche se scritte a mano e fuori catalogo), più tutte le altre se richiesto.
115
+ */
116
+ propertiesFor(group: FieldStyleGroup, elementKey: string): Array<CssPropertyDef>;
117
+ private pushValorized;
118
+ setPropertiesCount(group: FieldStyleGroup, elementKey: string): number;
119
+ getPropertyValue(group: FieldStyleGroup, elementKey: string, prop: string): string;
120
+ setPropertyValue(group: FieldStyleGroup, elementKey: string, prop: string, value: string): void;
121
+ resetProperty(group: FieldStyleGroup, elementKey: string, prop: string): void;
122
+ isPropertySet(group: FieldStyleGroup, elementKey: string, prop: string): boolean;
123
+ colorHex(value: string): string;
124
+ colorAlpha(value: string): number;
125
+ buildColor(hex: string, alpha: number): string;
126
+ /** Parte numerica di una misura ("14px" -> 14); il minimo del catalogo se non impostata */
127
+ sizeNumber(value: string, definition: CssPropertyDef): number;
128
+ buildSize(definition: CssPropertyDef, value: any): string;
129
+ /**
130
+ * Riversa sui campi selezionati soltanto le proprietà effettivamente toccate: prima quelle
131
+ * globali, poi quelle della singola tipologia, che quindi hanno la precedenza. Tutte le altre
132
+ * regole già presenti sui singoli campi restano intatte.
133
+ */
134
+ apply(): void;
135
+ /**
136
+ * Espande le modifiche in sospeso in scritture concrete per campo: prima quelle globali,
137
+ * poi quelle della singola tipologia, che quindi hanno la precedenza.
138
+ */
139
+ private collectWriteTargets;
140
+ /**
141
+ * Il CSS legacy viene applicato dai template come stile inline e batterebbe le regole
142
+ * iniettate: dove l'editor sta per scrivere, lo si assorbe nella mappa per elemento e
143
+ * si azzera la proprietà legacy. Restano intatte le proprietà legacy su elementi non toccati.
144
+ */
145
+ private absorbLegacyWhereNeeded;
146
+ cancel(): void;
147
+ get hasChanges(): boolean;
148
+ get changesCount(): number;
149
+ get currentElements(): Array<{
150
+ key: string;
151
+ label: string;
152
+ }>;
153
+ get currentStates(): Array<FieldStyleEntryDef>;
154
+ get currentSelectedState(): string;
155
+ setCurrentState(stateKey: string): void;
156
+ get currentOpenElement(): string;
157
+ toggleCurrentElement(elementKey: string): void;
158
+ get currentShowAllProperties(): boolean;
159
+ toggleCurrentShowAll(): void;
160
+ rowProperties(elementKey: string): Array<CssPropertyDef>;
161
+ rowCount(elementKey: string): number;
162
+ rowGet(elementKey: string, prop: string): string;
163
+ rowSet(elementKey: string, prop: string, value: string): void;
164
+ rowIsSet(elementKey: string, prop: string): boolean;
165
+ rowReset(elementKey: string, prop: string): void;
166
+ /** Colore: la pastiglia e lo slider lavorano insieme sullo stesso valore */
167
+ rowSetColorHex(elementKey: string, prop: string, hex: string): void;
168
+ rowSetColorAlpha(elementKey: string, prop: string, alpha: any): void;
169
+ rowSetSize(elementKey: string, definition: CssPropertyDef, value: any): void;
170
+ get currentSampleFields(): Array<BaseField>;
171
+ get currentSampleIndex(): number;
172
+ changeCurrentSample(index: number): void;
173
+ get currentPreviewField(): any;
174
+ get currentPreviewRecord(): any;
175
+ /** Tipologia del campo mostrato in anteprima, per scegliere il template giusto */
176
+ get currentPreviewType(): number;
177
+ /** Scrive (o rimuove, se il valore è vuoto) una proprietà dentro una mappa stili */
178
+ private writeIntoMap;
179
+ private splitEntry;
180
+ trackByProp(_index: number, definition: CssPropertyDef): string;
181
+ trackByKey(_index: number, entry: {
182
+ key: string;
183
+ }): string;
184
+ /** Crea il campo fittizio dell'anteprima agganciandogli la mappa stili passata */
185
+ private buildPreviewField;
186
+ private getPreviewInitialValue;
187
+ /** Completa il campo di anteprima con i valori minimi richiesti dai singoli template */
188
+ private prepareTypeSpecificPreview;
189
+ private safeClone;
190
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldGraphicsEditorComponent, never>;
191
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldGraphicsEditorComponent, "field-graphics-editor", never, { "fields": "fields"; "endPointConfiguration": "endPointConfiguration"; "formulaObject": "formulaObject"; }, { "applyEvent": "applyEvent"; "cancelEvent": "cancelEvent"; }, never, never, false, never>;
192
+ }
@@ -2,72 +2,73 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "./components/exported/eqp-dynamic-module/eqp-dynamic-module.component";
3
3
  import * as i2 from "./components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component";
4
4
  import * as i3 from "./components/private/add-form-field/add-form-field.component";
5
- import * as i4 from "./components/private/field-templates/text-field-template/text-field-template.component";
6
- import * as i5 from "./components/private/field-templates/boolean-field-template/boolean-field-template.component";
7
- import * as i6 from "./components/private/field-templates/date-field-template/date-field-template.component";
8
- import * as i7 from "./components/private/field-templates/textarea-field-template/textarea-field-template.component";
9
- import * as i8 from "./components/private/field-templates/numeric-field-template/numeric-field-template.component";
10
- import * as i9 from "./components/private/field-templates/list-value-field-template/list-value-field-template.component";
11
- import * as i10 from "./components/private/field-templates/attachment-field-template/attachment-field-template.component";
12
- import * as i11 from "./components/private/field-templates/image-field-template/image-field-template.component";
13
- import * as i12 from "./components/private/form-records/list-form-record/list-form-record.component";
14
- import * as i13 from "./components/private/form-records/hlist-form-record/hlist-form-record.component";
15
- import * as i14 from "./components/private/form-records/list-view-form-record/list-view-form-record.component";
16
- import * as i15 from "./components/private/form-records/add-form-record/add-form-record.component";
17
- import * as i16 from "./components/private/form-records/view-form-record/view-form-record.component";
18
- import * as i17 from "./components/private/dynamic-module-field-fix/dynamic-module-field.component";
19
- import * as i18 from "./components/private/spinner/spinner.component";
20
- import * as i19 from "./components/private/add-formula-field/add-formula-field.component";
21
- import * as i20 from "./components/private/form-records/repair-form-fields/repair-form-fields.component";
22
- import * as i21 from "./components/private/form-records/list-view-form-record/single-record/single-record.component";
23
- import * as i22 from "./components/private/form-statistics/filter-form-statistic/filter-form-statistic.component";
24
- import * as i23 from "./components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component";
25
- import * as i24 from "./components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component";
26
- import * as i25 from "./components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component";
27
- import * as i26 from "./components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component";
28
- import * as i27 from "./components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component";
29
- import * as i28 from "./components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component";
30
- import * as i29 from "./components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component";
31
- import * as i30 from "./components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component";
32
- import * as i31 from "./components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component";
33
- import * as i32 from "./components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component";
34
- import * as i33 from "./components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component";
35
- import * as i34 from "./components/private/graphs/graphs.component";
36
- import * as i35 from "./components/private/graphs/graph/graph.component";
37
- import * as i36 from "./components/private/field-templates/image-field-selector-template/image-field-selector-template.component";
38
- import * as i37 from "./components/private/field-templates/label-field-template/label-field-template.component";
39
- import * as i38 from "./components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component";
40
- import * as i39 from "./components/private/tmw-image-drawer/tmw-image-drawer.component";
41
- import * as i40 from "./components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component";
42
- import * as i41 from "./components/private/tmw-image-marker/tmw-image-marker.component";
43
- import * as i42 from "./directives/dynamic-loader/dynamic-loader.directive";
44
- import * as i43 from "./components/private/dbgetter/dbgetter.component";
45
- import * as i44 from "./components/private/trigger-creator/trigger-creator.component";
46
- import * as i45 from "./components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component";
47
- import * as i46 from "./components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component";
48
- import * as i47 from "./components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component";
49
- import * as i48 from "./components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component";
50
- import * as i49 from "./components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component";
51
- import * as i50 from "./components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component";
52
- import * as i51 from "./components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component";
53
- import * as i52 from "./directives/speech-to-text/speech-to-text.directive";
54
- import * as i53 from "./components/private/action-button-creator/action-button-creator.component";
55
- import * as i54 from "./components/private/field-templates/action-button-field-template/action-button-field-template.component";
56
- import * as i55 from "./components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component";
57
- import * as i56 from "./components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component";
58
- import * as i57 from "./modules/material.module";
59
- import * as i58 from "@angular/forms";
60
- import * as i59 from "@angular/common";
61
- import * as i60 from "tmw-table";
62
- import * as i61 from "tmw-attachments";
63
- import * as i62 from "tmw-select";
64
- import * as i63 from "tmw-numeric";
65
- import * as i64 from "tmw-icons";
66
- import * as i65 from "@angular/cdk/drag-drop";
67
- import * as i66 from "@canvasjs/angular-stockcharts";
68
- import * as i67 from "tmw-picker";
5
+ import * as i4 from "./components/private/field-graphics-editor/field-graphics-editor.component";
6
+ import * as i5 from "./components/private/field-templates/text-field-template/text-field-template.component";
7
+ import * as i6 from "./components/private/field-templates/boolean-field-template/boolean-field-template.component";
8
+ import * as i7 from "./components/private/field-templates/date-field-template/date-field-template.component";
9
+ import * as i8 from "./components/private/field-templates/textarea-field-template/textarea-field-template.component";
10
+ import * as i9 from "./components/private/field-templates/numeric-field-template/numeric-field-template.component";
11
+ import * as i10 from "./components/private/field-templates/list-value-field-template/list-value-field-template.component";
12
+ import * as i11 from "./components/private/field-templates/attachment-field-template/attachment-field-template.component";
13
+ import * as i12 from "./components/private/field-templates/image-field-template/image-field-template.component";
14
+ import * as i13 from "./components/private/form-records/list-form-record/list-form-record.component";
15
+ import * as i14 from "./components/private/form-records/hlist-form-record/hlist-form-record.component";
16
+ import * as i15 from "./components/private/form-records/list-view-form-record/list-view-form-record.component";
17
+ import * as i16 from "./components/private/form-records/add-form-record/add-form-record.component";
18
+ import * as i17 from "./components/private/form-records/view-form-record/view-form-record.component";
19
+ import * as i18 from "./components/private/dynamic-module-field-fix/dynamic-module-field.component";
20
+ import * as i19 from "./components/private/spinner/spinner.component";
21
+ import * as i20 from "./components/private/add-formula-field/add-formula-field.component";
22
+ import * as i21 from "./components/private/form-records/repair-form-fields/repair-form-fields.component";
23
+ import * as i22 from "./components/private/form-records/list-view-form-record/single-record/single-record.component";
24
+ import * as i23 from "./components/private/form-statistics/filter-form-statistic/filter-form-statistic.component";
25
+ import * as i24 from "./components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component";
26
+ import * as i25 from "./components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component";
27
+ import * as i26 from "./components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component";
28
+ import * as i27 from "./components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component";
29
+ import * as i28 from "./components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component";
30
+ import * as i29 from "./components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component";
31
+ import * as i30 from "./components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component";
32
+ import * as i31 from "./components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component";
33
+ import * as i32 from "./components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component";
34
+ import * as i33 from "./components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component";
35
+ import * as i34 from "./components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component";
36
+ import * as i35 from "./components/private/graphs/graphs.component";
37
+ import * as i36 from "./components/private/graphs/graph/graph.component";
38
+ import * as i37 from "./components/private/field-templates/image-field-selector-template/image-field-selector-template.component";
39
+ import * as i38 from "./components/private/field-templates/label-field-template/label-field-template.component";
40
+ import * as i39 from "./components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component";
41
+ import * as i40 from "./components/private/tmw-image-drawer/tmw-image-drawer.component";
42
+ import * as i41 from "./components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component";
43
+ import * as i42 from "./components/private/tmw-image-marker/tmw-image-marker.component";
44
+ import * as i43 from "./directives/dynamic-loader/dynamic-loader.directive";
45
+ import * as i44 from "./components/private/dbgetter/dbgetter.component";
46
+ import * as i45 from "./components/private/trigger-creator/trigger-creator.component";
47
+ import * as i46 from "./components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component";
48
+ import * as i47 from "./components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component";
49
+ import * as i48 from "./components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component";
50
+ import * as i49 from "./components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component";
51
+ import * as i50 from "./components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component";
52
+ import * as i51 from "./components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component";
53
+ import * as i52 from "./components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component";
54
+ import * as i53 from "./directives/speech-to-text/speech-to-text.directive";
55
+ import * as i54 from "./components/private/action-button-creator/action-button-creator.component";
56
+ import * as i55 from "./components/private/field-templates/action-button-field-template/action-button-field-template.component";
57
+ import * as i56 from "./components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component";
58
+ import * as i57 from "./components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component";
59
+ import * as i58 from "./modules/material.module";
60
+ import * as i59 from "@angular/forms";
61
+ import * as i60 from "@angular/common";
62
+ import * as i61 from "tmw-table";
63
+ import * as i62 from "tmw-attachments";
64
+ import * as i63 from "tmw-select";
65
+ import * as i64 from "tmw-numeric";
66
+ import * as i65 from "tmw-icons";
67
+ import * as i66 from "@angular/cdk/drag-drop";
68
+ import * as i67 from "@canvasjs/angular-stockcharts";
69
+ import * as i68 from "tmw-picker";
69
70
  export declare class EqpDynamicModuleModule {
70
71
  static ɵfac: i0.ɵɵFactoryDeclaration<EqpDynamicModuleModule, never>;
71
- static ɵmod: i0.ɵɵNgModuleDeclaration<EqpDynamicModuleModule, [typeof i1.EqpDynamicModuleComponent, typeof i2.EqpDynamicModuleConfiguratorComponent, typeof i3.AddFormFieldComponent, typeof i4.TextFieldTemplateComponent, typeof i5.BooleanFieldTemplateComponent, typeof i6.DateFieldTemplateComponent, typeof i7.TextareaFieldTemplateComponent, typeof i8.NumericFieldTemplateComponent, typeof i9.ListValueFieldTemplateComponent, typeof i10.AttachmentFieldTemplateComponent, typeof i11.ImageFieldTemplateComponent, typeof i12.ListFormRecordComponent, typeof i13.HListFormRecordComponent, typeof i14.ListViewFormRecordComponent, typeof i15.AddFormRecordComponent, typeof i16.ViewFormRecordComponent, typeof i17.DynamicModuleFieldFixComponent, typeof i18.SpinnerComponent, typeof i19.AddFormulaComponent, typeof i19.DialogDataExampleDialog, typeof i20.RepairFormFieldsComponent, typeof i21.SingleRecordComponent, typeof i22.FilterFormStatisticComponent, typeof i23.DynamicModuleFilterFixComponent, typeof i24.DynamicModuleTriggerFixComponent, typeof i25.TextFilterTemplateComponent, typeof i26.NumericFilterTemplateComponent, typeof i27.BooleanFilterTemplateComponent, typeof i28.DateFilterTemplateComponent, typeof i29.ListValueFilterTemplateComponent, typeof i30.TextareaFilterTemplateComponent, typeof i31.AttachmentFilterTemplateComponent, typeof i32.ImageFilterTemplateComponent, typeof i33.ListFormRecordFilterTemplateComponent, typeof i34.GraphsComponent, typeof i35.GraphComponent, typeof i36.ImageFieldSelectorTemplateComponent, typeof i37.LabelFieldTemplateComponent, typeof i38.ImageSelectorFilterTemplateComponent, typeof i39.TmwImageDrawerComponent, typeof i40.ImageWithMarkersFieldTemplateComponent, typeof i41.TmwImageMarkerComponent, typeof i42.DynamicLoaderDirective, typeof i43.DbgetterComponent, typeof i44.TriggerCreatorComponent, typeof i45.TextTriggerTemplateComponent, typeof i46.NumericTriggerTemplateComponent, typeof i47.BooleanTriggerTemplateComponent, typeof i48.DateTriggerTemplateComponent, typeof i49.ListValueTriggerTemplateComponent, typeof i50.TextareaTriggerTemplateComponent, typeof i51.ListFormRecordTriggerTemplateComponent, typeof i52.SpeechToTextDirective, typeof i53.ActionButtonCreatorComponent, typeof i54.ActionButtonFieldTemplateComponent, typeof i55.DynamicModuleFieldExtraFixComponent, typeof i56.ListValueDbgTemplateComponent], [typeof i57.MaterialModule, typeof i58.FormsModule, typeof i59.CommonModule, typeof i58.ReactiveFormsModule, typeof i60.TmwTableComponent, typeof i61.TmwAttachmentsComponent, typeof i62.TmwSelectComponent, typeof i63.TmwNumericMaskDirective, typeof i64.TmwIconComponent, typeof i65.DragDropModule, typeof i66.CanvasJSAngularStockChartsModule, typeof i67.TmwDateTimePickerComponent, typeof i67.TmwPickerComponent, typeof i67.TmwDateRangePickerComponent], [typeof i1.EqpDynamicModuleComponent, typeof i2.EqpDynamicModuleConfiguratorComponent, typeof i65.DragDropModule, typeof i66.CanvasJSChart, typeof i66.CanvasJSStockChart, typeof i42.DynamicLoaderDirective, typeof i67.TmwDateTimePickerComponent, typeof i67.TmwPickerComponent, typeof i67.TmwDateRangePickerComponent]>;
72
+ static ɵmod: i0.ɵɵNgModuleDeclaration<EqpDynamicModuleModule, [typeof i1.EqpDynamicModuleComponent, typeof i2.EqpDynamicModuleConfiguratorComponent, typeof i3.AddFormFieldComponent, typeof i4.FieldGraphicsEditorComponent, typeof i5.TextFieldTemplateComponent, typeof i6.BooleanFieldTemplateComponent, typeof i7.DateFieldTemplateComponent, typeof i8.TextareaFieldTemplateComponent, typeof i9.NumericFieldTemplateComponent, typeof i10.ListValueFieldTemplateComponent, typeof i11.AttachmentFieldTemplateComponent, typeof i12.ImageFieldTemplateComponent, typeof i13.ListFormRecordComponent, typeof i14.HListFormRecordComponent, typeof i15.ListViewFormRecordComponent, typeof i16.AddFormRecordComponent, typeof i17.ViewFormRecordComponent, typeof i18.DynamicModuleFieldFixComponent, typeof i19.SpinnerComponent, typeof i20.AddFormulaComponent, typeof i20.DialogDataExampleDialog, typeof i21.RepairFormFieldsComponent, typeof i22.SingleRecordComponent, typeof i23.FilterFormStatisticComponent, typeof i24.DynamicModuleFilterFixComponent, typeof i25.DynamicModuleTriggerFixComponent, typeof i26.TextFilterTemplateComponent, typeof i27.NumericFilterTemplateComponent, typeof i28.BooleanFilterTemplateComponent, typeof i29.DateFilterTemplateComponent, typeof i30.ListValueFilterTemplateComponent, typeof i31.TextareaFilterTemplateComponent, typeof i32.AttachmentFilterTemplateComponent, typeof i33.ImageFilterTemplateComponent, typeof i34.ListFormRecordFilterTemplateComponent, typeof i35.GraphsComponent, typeof i36.GraphComponent, typeof i37.ImageFieldSelectorTemplateComponent, typeof i38.LabelFieldTemplateComponent, typeof i39.ImageSelectorFilterTemplateComponent, typeof i40.TmwImageDrawerComponent, typeof i41.ImageWithMarkersFieldTemplateComponent, typeof i42.TmwImageMarkerComponent, typeof i43.DynamicLoaderDirective, typeof i44.DbgetterComponent, typeof i45.TriggerCreatorComponent, typeof i46.TextTriggerTemplateComponent, typeof i47.NumericTriggerTemplateComponent, typeof i48.BooleanTriggerTemplateComponent, typeof i49.DateTriggerTemplateComponent, typeof i50.ListValueTriggerTemplateComponent, typeof i51.TextareaTriggerTemplateComponent, typeof i52.ListFormRecordTriggerTemplateComponent, typeof i53.SpeechToTextDirective, typeof i54.ActionButtonCreatorComponent, typeof i55.ActionButtonFieldTemplateComponent, typeof i56.DynamicModuleFieldExtraFixComponent, typeof i57.ListValueDbgTemplateComponent], [typeof i58.MaterialModule, typeof i59.FormsModule, typeof i60.CommonModule, typeof i59.ReactiveFormsModule, typeof i61.TmwTableComponent, typeof i62.TmwAttachmentsComponent, typeof i63.TmwSelectComponent, typeof i64.TmwNumericMaskDirective, typeof i65.TmwIconComponent, typeof i66.DragDropModule, typeof i67.CanvasJSAngularStockChartsModule, typeof i68.TmwDateTimePickerComponent, typeof i68.TmwPickerComponent, typeof i68.TmwDateRangePickerComponent], [typeof i1.EqpDynamicModuleComponent, typeof i2.EqpDynamicModuleConfiguratorComponent, typeof i66.DragDropModule, typeof i67.CanvasJSChart, typeof i67.CanvasJSStockChart, typeof i43.DynamicLoaderDirective, typeof i68.TmwDateTimePickerComponent, typeof i68.TmwPickerComponent, typeof i68.TmwDateRangePickerComponent]>;
72
73
  static ɵinj: i0.ɵɵInjectorDeclaration<EqpDynamicModuleModule>;
73
74
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Conversioni fra i valori colore CSS (nomi, #hex, rgb(), rgba(), hsl()) e la coppia
3
+ * "hex + opacità" richiesta dai controlli <input type="color"> + slider dell'editor grafico.
4
+ *
5
+ * La normalizzazione sfrutta il parser colori del browser attraverso un canvas: assegnando
6
+ * un valore a fillStyle si ottiene indietro "#rrggbb" oppure "rgba(r, g, b, a)".
7
+ */
8
+ /** Componente hex del colore, da usare come valore di <input type="color"> */
9
+ export declare function cssColorToHex(value: string, fallback?: string): string;
10
+ /** Opacità del colore in percentuale (0-100); 100 se il colore è opaco o non interpretabile */
11
+ export declare function cssColorToAlphaPercent(value: string): number;
12
+ /** Ricompone un valore CSS da hex + opacità: "#rrggbb" se opaco, altrimenti "rgba(...)" */
13
+ export declare function buildCssColor(hex: string, alphaPercent: number): string;
14
+ /** True se il valore è interpretabile come colore (serve a decidere se abilitare la pastiglia) */
15
+ export declare function isCssColor(value: string): boolean;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Utility per leggere/scrivere singole proprietà dentro una stringa di dichiarazioni CSS
3
+ * (il formato usato dalle mappe *FieldStyleCSS: "color:red;font-size:14px").
4
+ *
5
+ * Tutte le funzioni preservano le proprietà che non vengono toccate, così i CSS scritti
6
+ * a mano o generati dall'AI non vengono persi quando si modifica una singola proprietà
7
+ * dall'editor grafico.
8
+ */
9
+ export interface CssDeclaration {
10
+ prop: string;
11
+ value: string;
12
+ }
13
+ /** Trasforma "color:red;font-size:14px" in [{prop:'color',value:'red'},...] mantenendo l'ordine */
14
+ export declare function parseCssDeclarations(css: string): Array<CssDeclaration>;
15
+ /** Trasforma [{prop,value}] in "color: red; font-size: 14px;" */
16
+ export declare function serializeCssDeclarations(declarations: Array<CssDeclaration>): string;
17
+ /** Legge il valore di una singola proprietà; stringa vuota se non presente */
18
+ export declare function getCssDeclaration(css: string, prop: string): string;
19
+ /**
20
+ * Imposta (o rimuove, se il valore è vuoto) una singola proprietà, lasciando
21
+ * intatte tutte le altre. Le proprietà nuove vengono accodate in fondo.
22
+ */
23
+ export declare function setCssDeclaration(css: string, prop: string, value: string): string;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Catalogo delle proprietà CSS modificabili dall'editor grafico dei campi.
3
+ *
4
+ * Ogni proprietà dichiara che tipo di controllo mostrare (colore, misura con slider,
5
+ * elenco di valori, testo libero). Le proprietà non presenti in questo catalogo restano
6
+ * comunque modificabili a mano dalle caselle CSS del dialog di modifica campo e non
7
+ * vengono mai perse dall'editor.
8
+ */
9
+ export type CssControlType = 'color' | 'size' | 'select' | 'text';
10
+ export interface CssPropertyDef {
11
+ /** Nome della proprietà CSS, minuscolo (es. "background-color") */
12
+ prop: string;
13
+ label: string;
14
+ type: CssControlType;
15
+ /** Gruppo di appartenenza, usato per raggruppare le righe a video */
16
+ group: string;
17
+ /** Solo per type 'size' */
18
+ min?: number;
19
+ max?: number;
20
+ step?: number;
21
+ unit?: string;
22
+ /** Solo per type 'select' */
23
+ options?: Array<{
24
+ value: string;
25
+ label: string;
26
+ }>;
27
+ placeholder?: string;
28
+ }
29
+ /** Proprietà mostrate sempre: coprono il 90% delle personalizzazioni */
30
+ export declare const CSS_CORE_PROPERTIES: Array<CssPropertyDef>;
31
+ /** Proprietà aggiuntive, mostrate solo aprendo "Altre proprietà" */
32
+ export declare const CSS_EXTRA_PROPERTIES: Array<CssPropertyDef>;
33
+ export declare const CSS_ALL_PROPERTIES: Array<CssPropertyDef>;
34
+ export declare function getCssPropertyDef(prop: string): CssPropertyDef | null;
35
+ /** Definizione di ripiego per una proprietà scritta a mano e non catalogata */
36
+ export declare function buildCustomCssPropertyDef(prop: string): CssPropertyDef;