@gnggln/ng-ui-system 1.0.0-alpha.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.
- package/esm2022/gnggln-ng-ui-system.mjs +5 -0
- package/esm2022/lib/components/accordion/accordion.component.mjs +353 -0
- package/esm2022/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/lib/components/accordion/index.mjs +2 -0
- package/esm2022/lib/components/base-layout/base-layout.component.mjs +218 -0
- package/esm2022/lib/components/base-layout/base-layout.types.mjs +6 -0
- package/esm2022/lib/components/base-layout/index.mjs +14 -0
- package/esm2022/lib/components/button/button-area.component.mjs +196 -0
- package/esm2022/lib/components/button/button.component.mjs +164 -0
- package/esm2022/lib/components/button/button.types.mjs +6 -0
- package/esm2022/lib/components/button/index.mjs +16 -0
- package/esm2022/lib/components/crud-table/crud-table.component.mjs +789 -0
- package/esm2022/lib/components/crud-table/crud-table.types.mjs +6 -0
- package/esm2022/lib/components/crud-table/index.mjs +16 -0
- package/esm2022/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
- package/esm2022/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
- package/esm2022/lib/components/form-builder/form-builder.component.mjs +824 -0
- package/esm2022/lib/components/form-builder/form-wizard.component.mjs +510 -0
- package/esm2022/lib/components/form-builder/index.mjs +19 -0
- package/esm2022/lib/components/form-builder/services/form-condition.service.mjs +132 -0
- package/esm2022/lib/components/form-builder/services/form-validation.service.mjs +381 -0
- package/esm2022/lib/components/form-builder/services/location.service.mjs +140 -0
- package/esm2022/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
- package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +161 -0
- package/esm2022/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
- package/esm2022/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
- package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
- package/esm2022/lib/components/form-builder/types/condition.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/field.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/index.mjs +2 -0
- package/esm2022/lib/components/form-builder/types/schema.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/territoriale.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -0
- package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
- package/esm2022/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
- package/esm2022/lib/components/form-builder-editor/index.mjs +21 -0
- package/esm2022/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
- package/esm2022/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
- package/esm2022/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +472 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
- package/esm2022/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
- package/esm2022/lib/components/layout-builder/index.mjs +18 -0
- package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +1730 -0
- package/esm2022/lib/components/layout-builder/layout-builder.types.mjs +9 -0
- package/esm2022/lib/components/layout-builder/layout.service.mjs +239 -0
- package/esm2022/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/lib/components/modal/index.mjs +4 -0
- package/esm2022/lib/components/modal/modal.component.mjs +139 -0
- package/esm2022/lib/components/modal/modal.service.mjs +194 -0
- package/esm2022/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/lib/components/page-header/breadcrumb.service.mjs +242 -0
- package/esm2022/lib/components/page-header/index.mjs +20 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +243 -0
- package/esm2022/lib/components/page-header/page-header.types.mjs +21 -0
- package/esm2022/lib/components/table/index.mjs +2 -0
- package/esm2022/lib/components/table/paginated-table.component.mjs +407 -0
- package/esm2022/lib/components/table/table.types.mjs +6 -0
- package/esm2022/lib/core/types/index.mjs +6 -0
- package/esm2022/lib/core/utils/index.mjs +53 -0
- package/esm2022/lib/sources/location-data.opt.json +8942 -0
- package/esm2022/lib/sources/nazioni.opt.json +215 -0
- package/esm2022/public-api.mjs +34 -0
- package/fesm2022/gnggln-ng-ui-system.mjs +55752 -0
- package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/accordion/accordion.component.d.ts +118 -0
- package/lib/components/accordion/accordion.types.d.ts +62 -0
- package/lib/components/accordion/index.d.ts +2 -0
- package/lib/components/base-layout/base-layout.component.d.ts +83 -0
- package/lib/components/base-layout/base-layout.types.d.ts +26 -0
- package/lib/components/base-layout/index.d.ts +13 -0
- package/lib/components/button/button-area.component.d.ts +88 -0
- package/lib/components/button/button.component.d.ts +55 -0
- package/lib/components/button/button.types.d.ts +70 -0
- package/lib/components/button/index.d.ts +15 -0
- package/lib/components/crud-table/crud-table.component.d.ts +143 -0
- package/lib/components/crud-table/crud-table.types.d.ts +207 -0
- package/lib/components/crud-table/index.d.ts +15 -0
- package/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
- package/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
- package/lib/components/form-builder/form-builder.component.d.ts +183 -0
- package/lib/components/form-builder/form-wizard.component.d.ts +87 -0
- package/lib/components/form-builder/index.d.ts +13 -0
- package/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
- package/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
- package/lib/components/form-builder/services/location.service.d.ts +83 -0
- package/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
- package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +28 -0
- package/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
- package/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
- package/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
- package/lib/components/form-builder/types/condition.types.d.ts +51 -0
- package/lib/components/form-builder/types/field.types.d.ts +288 -0
- package/lib/components/form-builder/types/index.d.ts +5 -0
- package/lib/components/form-builder/types/schema.types.d.ts +227 -0
- package/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
- package/lib/components/form-builder/types/validation.types.d.ts +174 -0
- package/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
- package/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
- package/lib/components/form-builder-editor/index.d.ts +15 -0
- package/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
- package/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
- package/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
- package/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
- package/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
- package/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
- package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
- package/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
- package/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
- package/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
- package/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
- package/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
- package/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
- package/lib/components/layout-builder/index.d.ts +16 -0
- package/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
- package/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
- package/lib/components/layout-builder/layout.service.d.ts +100 -0
- package/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/lib/components/modal/index.d.ts +4 -0
- package/lib/components/modal/modal.component.d.ts +44 -0
- package/lib/components/modal/modal.service.d.ts +93 -0
- package/lib/components/modal/modal.types.d.ts +110 -0
- package/lib/components/page-header/breadcrumb.service.d.ts +96 -0
- package/lib/components/page-header/index.d.ts +16 -0
- package/lib/components/page-header/page-header.component.d.ts +59 -0
- package/lib/components/page-header/page-header.types.d.ts +96 -0
- package/lib/components/table/index.d.ts +2 -0
- package/lib/components/table/paginated-table.component.d.ts +85 -0
- package/lib/components/table/table.types.d.ts +81 -0
- package/lib/core/types/index.d.ts +57 -0
- package/lib/core/utils/index.d.ts +29 -0
- package/package.json +44 -0
- package/public-api.d.ts +22 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { UiFieldCondition, UiConditionalOperator } from '../../../form-builder/types/index';
|
|
3
|
+
import { UiEditorAvailableField } from '../../types/editor.types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Interfaccia per le opzioni degli operatori condizionali nella select.
|
|
7
|
+
*/
|
|
8
|
+
interface OperatorOption {
|
|
9
|
+
/** Valore dell'operatore. */
|
|
10
|
+
value: UiConditionalOperator;
|
|
11
|
+
/** Etichetta visualizzata nella select. */
|
|
12
|
+
label: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Editor per le condizioni di visibilita/disabilitazione dei campi.
|
|
16
|
+
*
|
|
17
|
+
* Permette di configurare condizioni con editor visuale o JSON.
|
|
18
|
+
* Supporta operatori di confronto multipli, logica AND/OR
|
|
19
|
+
* e selezione dei valori dalle opzioni dei campi disponibili.
|
|
20
|
+
*
|
|
21
|
+
* @selector ui-condition-editor
|
|
22
|
+
*/
|
|
23
|
+
export declare class UiConditionEditorComponent {
|
|
24
|
+
/** Lista delle condizioni da editare. */
|
|
25
|
+
conditions: UiFieldCondition[];
|
|
26
|
+
/** Titolo visualizzato nell'intestazione. */
|
|
27
|
+
title: string;
|
|
28
|
+
/** Campi disponibili per la selezione nelle condizioni. */
|
|
29
|
+
availableFields: UiEditorAvailableField[];
|
|
30
|
+
/** Emesso quando la lista di condizioni viene modificata. */
|
|
31
|
+
conditionsChange: EventEmitter<UiFieldCondition[]>;
|
|
32
|
+
/** Indica se l'editor e in modalita JSON. */
|
|
33
|
+
jsonMode: boolean;
|
|
34
|
+
/** Testo JSON corrente nell'editor. */
|
|
35
|
+
jsonText: string;
|
|
36
|
+
/** Errore di parsing del JSON. */
|
|
37
|
+
jsonError: string;
|
|
38
|
+
/** Opzioni disponibili per gli operatori condizionali. */
|
|
39
|
+
readonly operators: OperatorOption[];
|
|
40
|
+
/**
|
|
41
|
+
* Verifica se l'operatore non richiede un campo valore.
|
|
42
|
+
* @param operator - Operatore da verificare
|
|
43
|
+
* @returns true se l'operatore non necessita di valore
|
|
44
|
+
*/
|
|
45
|
+
isNoValueOperator(operator: UiConditionalOperator): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Verifica se l'operatore opera su array di valori.
|
|
48
|
+
* @param operator - Operatore da verificare
|
|
49
|
+
* @returns true se l'operatore richiede un array di valori
|
|
50
|
+
*/
|
|
51
|
+
isArrayOperator(operator: UiConditionalOperator): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Restituisce le opzioni disponibili per un campo specifico.
|
|
54
|
+
* @param fieldKey - Chiave del campo
|
|
55
|
+
* @returns Array di opzioni del campo, vuoto se non disponibili
|
|
56
|
+
*/
|
|
57
|
+
getFieldOptions(fieldKey: string): {
|
|
58
|
+
value: any;
|
|
59
|
+
label: string;
|
|
60
|
+
}[];
|
|
61
|
+
/**
|
|
62
|
+
* Garantisce che il valore sia un array (per select multiple).
|
|
63
|
+
* @param value - Valore da normalizzare
|
|
64
|
+
* @returns Il valore come array
|
|
65
|
+
*/
|
|
66
|
+
ensureArray(value: any): any[];
|
|
67
|
+
/**
|
|
68
|
+
* Attiva/disattiva la modalita editor JSON.
|
|
69
|
+
* In apertura serializza le condizioni, in chiusura le deserializza.
|
|
70
|
+
*/
|
|
71
|
+
toggleJsonMode(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Formatta il JSON nell'editor con indentazione.
|
|
74
|
+
*/
|
|
75
|
+
formatJson(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Gestisce il cambio del testo JSON nell'editor.
|
|
78
|
+
* Tenta il parsing e aggiorna le condizioni se valido.
|
|
79
|
+
* @param text - Testo JSON inserito dall'utente
|
|
80
|
+
*/
|
|
81
|
+
onJsonChange(text: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Aggiunge una nuova condizione con valori predefiniti.
|
|
84
|
+
*/
|
|
85
|
+
addCondition(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Rimuove la condizione all'indice specificato.
|
|
88
|
+
* @param index - Indice della condizione da rimuovere
|
|
89
|
+
*/
|
|
90
|
+
removeCondition(index: number): void;
|
|
91
|
+
/**
|
|
92
|
+
* Rimuove tutte le condizioni.
|
|
93
|
+
*/
|
|
94
|
+
clearAll(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Gestisce il cambio della logica di combinazione (AND/OR).
|
|
97
|
+
* @param index - Indice della condizione
|
|
98
|
+
* @param logic - Nuova logica ('AND' | 'OR')
|
|
99
|
+
*/
|
|
100
|
+
onLogicChange(index: number, logic: 'AND' | 'OR'): void;
|
|
101
|
+
/**
|
|
102
|
+
* Gestisce il cambio del campo selezionato in una condizione.
|
|
103
|
+
* Resetta il valore quando il campo cambia.
|
|
104
|
+
* @param index - Indice della condizione
|
|
105
|
+
* @param field - Nuova chiave campo
|
|
106
|
+
*/
|
|
107
|
+
onFieldChange(index: number, field: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Gestisce il cambio dell'operatore in una condizione.
|
|
110
|
+
* Resetta il valore per operatori senza valore.
|
|
111
|
+
* @param index - Indice della condizione
|
|
112
|
+
* @param operator - Nuovo operatore
|
|
113
|
+
*/
|
|
114
|
+
onOperatorChange(index: number, operator: UiConditionalOperator): void;
|
|
115
|
+
/**
|
|
116
|
+
* Gestisce il cambio del valore in una condizione.
|
|
117
|
+
* @param index - Indice della condizione
|
|
118
|
+
* @param value - Nuovo valore
|
|
119
|
+
*/
|
|
120
|
+
onValueChange(index: number, value: any): void;
|
|
121
|
+
/**
|
|
122
|
+
* Tenta di applicare il JSON corrente come array di condizioni.
|
|
123
|
+
* Aggiorna l'errore in caso di JSON non valido.
|
|
124
|
+
*/
|
|
125
|
+
private applyJson;
|
|
126
|
+
/**
|
|
127
|
+
* Clona l'array delle condizioni per garantire immutabilita.
|
|
128
|
+
* @returns Copia superficiale dell'array di condizioni
|
|
129
|
+
*/
|
|
130
|
+
private cloneConditions;
|
|
131
|
+
/**
|
|
132
|
+
* Emette l'evento di cambio condizioni.
|
|
133
|
+
* @param conditions - Nuova lista di condizioni
|
|
134
|
+
*/
|
|
135
|
+
private emitChange;
|
|
136
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiConditionEditorComponent, never>;
|
|
137
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiConditionEditorComponent, "ui-condition-editor", never, { "conditions": { "alias": "conditions"; "required": false; }; "title": { "alias": "title"; "required": false; }; "availableFields": { "alias": "availableFields"; "required": false; }; }, { "conditionsChange": "conditionsChange"; }, never, never, true, never>;
|
|
138
|
+
}
|
|
139
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { UiEditorBreadcrumbItem } from '../../types/editor.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Toolbar principale dell'editor di form.
|
|
6
|
+
*
|
|
7
|
+
* Contiene:
|
|
8
|
+
* - Sezione sinistra: icona, titolo e breadcrumb di navigazione
|
|
9
|
+
* - Centro: indicatore dello stato di salvataggio
|
|
10
|
+
* - Destra: pulsanti azione (aggiungi sezione, salva, file, altro)
|
|
11
|
+
*
|
|
12
|
+
* @selector ui-editor-toolbar
|
|
13
|
+
*/
|
|
14
|
+
export declare class UiEditorToolbarComponent {
|
|
15
|
+
/** Elementi del breadcrumb di navigazione. */
|
|
16
|
+
breadcrumb: UiEditorBreadcrumbItem[];
|
|
17
|
+
/** Indica se ci sono modifiche non salvate. */
|
|
18
|
+
isDirty: boolean;
|
|
19
|
+
/** Data dell'ultimo salvataggio riuscito. */
|
|
20
|
+
lastSaved: Date | null;
|
|
21
|
+
/** Emesso alla richiesta di creare un nuovo form. */
|
|
22
|
+
newForm: EventEmitter<void>;
|
|
23
|
+
/** Emesso alla richiesta di importare un JSON. */
|
|
24
|
+
importJson: EventEmitter<void>;
|
|
25
|
+
/** Emesso alla richiesta di esportare il JSON. */
|
|
26
|
+
exportJson: EventEmitter<void>;
|
|
27
|
+
/** Emesso alla richiesta di salvataggio. */
|
|
28
|
+
save: EventEmitter<void>;
|
|
29
|
+
/** Emesso alla richiesta di pulizia completa. */
|
|
30
|
+
clear: EventEmitter<void>;
|
|
31
|
+
/** Emesso alla richiesta di aggiungere una nuova sezione. */
|
|
32
|
+
addSection: EventEmitter<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Formatta la data dell'ultimo salvataggio in testo leggibile.
|
|
35
|
+
* Restituisce descrizioni relative come "pochi secondi fa", "5 minuti fa", ecc.
|
|
36
|
+
*
|
|
37
|
+
* @param date - Data dell'ultimo salvataggio oppure null
|
|
38
|
+
* @returns Stringa descrittiva dello stato di salvataggio
|
|
39
|
+
*/
|
|
40
|
+
formatLastSaved(date: Date | null): string;
|
|
41
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorToolbarComponent, never>;
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiEditorToolbarComponent, "ui-editor-toolbar", never, { "breadcrumb": { "alias": "breadcrumb"; "required": false; }; "isDirty": { "alias": "isDirty"; "required": false; }; "lastSaved": { "alias": "lastSaved"; "required": false; }; }, { "newForm": "newForm"; "importJson": "importJson"; "exportJson": "exportJson"; "save": "save"; "clear": "clear"; "addSection": "addSection"; }, never, never, true, never>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { UiFormFieldDescriptor, UiFieldType } from '../../../form-builder/types/index';
|
|
4
|
+
import { UiEditorAvailableField } from '../../types/editor.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Pannello laterale destro per la configurazione di un campo selezionato.
|
|
8
|
+
*
|
|
9
|
+
* Mostra un form reattivo suddiviso in pannelli espandibili per gestire
|
|
10
|
+
* proprieta base, stato, layout, validazioni, opzioni e condizioni.
|
|
11
|
+
* Emette aggiornamenti parziali con debounce di 300ms.
|
|
12
|
+
*
|
|
13
|
+
* @selector ui-editor-field-config-panel
|
|
14
|
+
*/
|
|
15
|
+
export declare class UiEditorFieldConfigPanelComponent implements OnChanges, OnDestroy {
|
|
16
|
+
/** @internal Servizio per la costruzione del FormGroup. */
|
|
17
|
+
private readonly fb;
|
|
18
|
+
/** @internal Subject per la distruzione e pulizia delle sottoscrizioni. */
|
|
19
|
+
private readonly destroy$;
|
|
20
|
+
/** Campo attualmente selezionato per la configurazione. */
|
|
21
|
+
field: UiFormFieldDescriptor | null;
|
|
22
|
+
/** Lista dei campi disponibili per le condizioni. */
|
|
23
|
+
availableFields: UiEditorAvailableField[];
|
|
24
|
+
/** Emesso quando il campo viene aggiornato dall'utente. */
|
|
25
|
+
fieldUpdate: EventEmitter<Partial<UiFormFieldDescriptor>>;
|
|
26
|
+
/** Form reattivo per la configurazione del campo. */
|
|
27
|
+
configForm: FormGroup | null;
|
|
28
|
+
/** Lista dei tipi di campo per la select. */
|
|
29
|
+
readonly fieldTypes: {
|
|
30
|
+
value: UiFieldType;
|
|
31
|
+
label: string;
|
|
32
|
+
}[];
|
|
33
|
+
/**
|
|
34
|
+
* Indica se il campo selezionato supporta le opzioni.
|
|
35
|
+
* Viene utilizzato per mostrare/nascondere il pannello opzioni.
|
|
36
|
+
*/
|
|
37
|
+
get isOptionsField(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Rileva cambiamenti sugli input e ricostruisce il form
|
|
40
|
+
* quando cambia il campo selezionato.
|
|
41
|
+
*/
|
|
42
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
43
|
+
ngOnDestroy(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Restituisce le opzioni del campo come array statico.
|
|
46
|
+
* Ignora opzioni osservabili poiche non gestibili nell'editor.
|
|
47
|
+
*/
|
|
48
|
+
getFieldOptions(): {
|
|
49
|
+
value: any;
|
|
50
|
+
label: string;
|
|
51
|
+
}[];
|
|
52
|
+
/**
|
|
53
|
+
* Gestisce l'aggiornamento delle validazioni dal sotto-componente.
|
|
54
|
+
* @param validations - Nuova lista di regole di validazione
|
|
55
|
+
*/
|
|
56
|
+
onValidationsChange(validations: any[]): void;
|
|
57
|
+
/**
|
|
58
|
+
* Gestisce l'aggiornamento delle opzioni dal sotto-componente.
|
|
59
|
+
* @param options - Nuova lista di opzioni
|
|
60
|
+
*/
|
|
61
|
+
onOptionsChange(options: {
|
|
62
|
+
value: any;
|
|
63
|
+
label: string;
|
|
64
|
+
}[]): void;
|
|
65
|
+
/**
|
|
66
|
+
* Gestisce l'aggiornamento delle condizioni di visibilita.
|
|
67
|
+
* @param conditions - Nuova lista di condizioni
|
|
68
|
+
*/
|
|
69
|
+
onVisibilityConditionsChange(conditions: any[]): void;
|
|
70
|
+
/**
|
|
71
|
+
* Gestisce l'aggiornamento delle condizioni di disabilitazione.
|
|
72
|
+
* @param conditions - Nuova lista di condizioni
|
|
73
|
+
*/
|
|
74
|
+
onDisableConditionsChange(conditions: any[]): void;
|
|
75
|
+
/**
|
|
76
|
+
* @internal
|
|
77
|
+
* Costruisce il FormGroup a partire dal campo selezionato.
|
|
78
|
+
* Si sottoscrive ai valueChanges con debounce per emettere aggiornamenti.
|
|
79
|
+
*/
|
|
80
|
+
private buildForm;
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorFieldConfigPanelComponent, never>;
|
|
82
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiEditorFieldConfigPanelComponent, "ui-editor-field-config-panel", never, { "field": { "alias": "field"; "required": false; }; "availableFields": { "alias": "availableFields"; "required": false; }; }, { "fieldUpdate": "fieldUpdate"; }, never, never, true, never>;
|
|
83
|
+
}
|
package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { UiEditorFieldPaletteItem, UiEditorFieldCategory } from '../../types/editor.types';
|
|
2
|
+
import { UiIconName } from '../../../../core/types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Interfaccia interna per una categoria della palette.
|
|
6
|
+
* Raggruppa un insieme di elementi sotto un'etichetta comune.
|
|
7
|
+
*/
|
|
8
|
+
interface PaletteCategory {
|
|
9
|
+
/** Identificativo della categoria. */
|
|
10
|
+
key: UiEditorFieldCategory;
|
|
11
|
+
/** Etichetta visualizzata nell'intestazione dell'accordion. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Icona Lucide della categoria. */
|
|
14
|
+
icon: UiIconName;
|
|
15
|
+
/** Elementi trascinabili appartenenti alla categoria. */
|
|
16
|
+
items: UiEditorFieldPaletteItem[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Palette laterale dei tipi di campo disponibili.
|
|
20
|
+
*
|
|
21
|
+
* Mostra i campi raggruppati per categoria tramite pannelli espandibili.
|
|
22
|
+
* Ogni elemento e trascinabile (CDK drag-drop) verso le sezioni del form.
|
|
23
|
+
*
|
|
24
|
+
* @selector ui-field-palette
|
|
25
|
+
*/
|
|
26
|
+
export declare class UiFieldPaletteComponent {
|
|
27
|
+
/**
|
|
28
|
+
* Predicato che impedisce il drop di elementi dentro la palette.
|
|
29
|
+
* La palette e solo una sorgente di drag, non una destinazione.
|
|
30
|
+
*/
|
|
31
|
+
noDrop: () => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Catalogo completo degli elementi della palette,
|
|
34
|
+
* organizzato per categorie con i rispettivi metadati.
|
|
35
|
+
*/
|
|
36
|
+
readonly categories: PaletteCategory[];
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiFieldPaletteComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiFieldPaletteComponent, "ui-field-palette", never, {}, {}, never, never, true, never>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Pannello overlay in basso nell'anteprima che mostra i valori correnti
|
|
5
|
+
* del form in formato JSON modificabile.
|
|
6
|
+
*
|
|
7
|
+
* Permette di visualizzare, modificare, formattare e resettare i valori
|
|
8
|
+
* del form durante la fase di anteprima nell'editor.
|
|
9
|
+
*
|
|
10
|
+
* @selector ui-editor-form-values-panel
|
|
11
|
+
*/
|
|
12
|
+
export declare class UiEditorFormValuesPanelComponent {
|
|
13
|
+
/** Valori correnti del form da visualizzare. */
|
|
14
|
+
set formValues(value: any);
|
|
15
|
+
get formValues(): any;
|
|
16
|
+
/** Stato di apertura/chiusura del pannello. */
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
/** Emesso quando i valori vengono modificati dall'utente via JSON. */
|
|
19
|
+
valuesChange: EventEmitter<any>;
|
|
20
|
+
/** Emesso alla richiesta di aggiornamento dei valori. */
|
|
21
|
+
refreshValues: EventEmitter<void>;
|
|
22
|
+
/** Emesso alla richiesta di apertura/chiusura del pannello. */
|
|
23
|
+
toggle: EventEmitter<void>;
|
|
24
|
+
/** Testo JSON visualizzato nella textarea. */
|
|
25
|
+
jsonText: string;
|
|
26
|
+
/** Messaggio di errore per JSON non valido. */
|
|
27
|
+
jsonError: string | null;
|
|
28
|
+
/** @internal Valori interni del form. */
|
|
29
|
+
private _formValues;
|
|
30
|
+
/**
|
|
31
|
+
* Gestisce l'input dell'utente nella textarea JSON.
|
|
32
|
+
* Prova a parsare il JSON e aggiorna i valori se valido.
|
|
33
|
+
* @param text - Testo JSON inserito dall'utente
|
|
34
|
+
*/
|
|
35
|
+
onJsonInput(text: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Pulisce i valori del form resettando a oggetto vuoto.
|
|
38
|
+
*/
|
|
39
|
+
clearValues(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Formatta il JSON con indentazione per una migliore leggibilita.
|
|
42
|
+
*/
|
|
43
|
+
formatJson(): void;
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
* Aggiorna il testo JSON dalla rappresentazione interna dei valori.
|
|
47
|
+
*/
|
|
48
|
+
private updateJsonText;
|
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorFormValuesPanelComponent, never>;
|
|
50
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiEditorFormValuesPanelComponent, "ui-editor-form-values-panel", never, { "formValues": { "alias": "formValues"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; }, { "valuesChange": "valuesChange"; "refreshValues": "refreshValues"; "toggle": "toggle"; }, never, never, true, never>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/form-builder-editor
|
|
3
|
+
* Componente editor delle opzioni per campi di tipo select, radio e multiselect.
|
|
4
|
+
*
|
|
5
|
+
* Permette di aggiungere, modificare, riordinare e rimuovere le opzioni
|
|
6
|
+
* di un campo di scelta, con supporto per valore, etichetta e stato disabilitato.
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from '@angular/core';
|
|
9
|
+
import { UiFieldOption } from '../../../form-builder/types/index';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
/**
|
|
12
|
+
* Editor per le opzioni di un campo di scelta (select, radio, multiselect).
|
|
13
|
+
*
|
|
14
|
+
* Mostra una lista di opzioni con:
|
|
15
|
+
* - Header con titolo e pulsante per aggiungere nuove opzioni
|
|
16
|
+
* - Per ogni opzione: input valore, input etichetta, checkbox disabilitato,
|
|
17
|
+
* frecce per spostamento su/giu, pulsante elimina
|
|
18
|
+
* - Stato vuoto quando non ci sono opzioni configurate
|
|
19
|
+
*/
|
|
20
|
+
export declare class UiOptionsEditorComponent {
|
|
21
|
+
/**
|
|
22
|
+
* Opzioni del campo da modificare.
|
|
23
|
+
* Accetta sia un array di UiFieldOption che un valore generico
|
|
24
|
+
* (per gestire campi non ancora configurati).
|
|
25
|
+
*/
|
|
26
|
+
options: UiFieldOption[] | any;
|
|
27
|
+
/** Emette l'array aggiornato delle opzioni ad ogni modifica. */
|
|
28
|
+
optionsChange: EventEmitter<UiFieldOption[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Normalizza l'input per garantire che sia sempre un array valido.
|
|
31
|
+
* Gestisce il caso in cui le opzioni siano null, undefined o di tipo inatteso.
|
|
32
|
+
*/
|
|
33
|
+
get normalizedOptions(): UiFieldOption[];
|
|
34
|
+
/**
|
|
35
|
+
* Aggiunge una nuova opzione vuota alla lista e notifica il parent.
|
|
36
|
+
*/
|
|
37
|
+
addOption(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Aggiorna una proprieta specifica di un'opzione.
|
|
40
|
+
* @param index - Indice dell'opzione da aggiornare.
|
|
41
|
+
* @param field - Nome della proprieta da modificare.
|
|
42
|
+
* @param value - Nuovo valore della proprieta.
|
|
43
|
+
*/
|
|
44
|
+
updateOption(index: number, field: keyof UiFieldOption, value: any): void;
|
|
45
|
+
/**
|
|
46
|
+
* Rimuove un'opzione dalla lista.
|
|
47
|
+
* @param index - Indice dell'opzione da rimuovere.
|
|
48
|
+
*/
|
|
49
|
+
removeOption(index: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Sposta un'opzione in alto o in basso nella lista.
|
|
52
|
+
* @param index - Indice corrente dell'opzione.
|
|
53
|
+
* @param direction - Direzione dello spostamento: -1 (su) o +1 (giu).
|
|
54
|
+
*/
|
|
55
|
+
moveOption(index: number, direction: -1 | 1): void;
|
|
56
|
+
/**
|
|
57
|
+
* Emette l'array aggiornato delle opzioni.
|
|
58
|
+
* @param options - Nuovo array di opzioni.
|
|
59
|
+
*/
|
|
60
|
+
private emitChange;
|
|
61
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiOptionsEditorComponent, never>;
|
|
62
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiOptionsEditorComponent, "ui-options-editor", never, { "options": { "alias": "options"; "required": false; }; }, { "optionsChange": "optionsChange"; }, never, never, true, never>;
|
|
63
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { UiFormSchema } from '../../../form-builder/types/index';
|
|
3
|
+
import { UiFormBuilderComponent } from '../../../form-builder/form-builder.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Contenitore per l'anteprima live del form in fase di editing.
|
|
7
|
+
*
|
|
8
|
+
* Mostra una preview del form builder generato dallo schema corrente,
|
|
9
|
+
* con possibilita di aggiornamento forzato e pannello dei valori.
|
|
10
|
+
*
|
|
11
|
+
* @selector ui-editor-preview-container
|
|
12
|
+
*/
|
|
13
|
+
export declare class UiEditorPreviewContainerComponent implements OnChanges {
|
|
14
|
+
/** @internal Change detector per OnPush. */
|
|
15
|
+
private readonly cdr;
|
|
16
|
+
/** Riferimento all'istanza del form builder per leggere i valori. */
|
|
17
|
+
formBuilderRef?: UiFormBuilderComponent;
|
|
18
|
+
/** Schema del form ricevuto dal parent (cambia ad ogni modifica nell'editor). */
|
|
19
|
+
schema: UiFormSchema | null;
|
|
20
|
+
/**
|
|
21
|
+
* Chiave per forzare la ri-creazione del form builder.
|
|
22
|
+
* Viene incrementata dal componente padre per invalidare l'anteprima.
|
|
23
|
+
*/
|
|
24
|
+
key: number;
|
|
25
|
+
/** Emesso alla richiesta di aggiornamento forzato dell'anteprima. */
|
|
26
|
+
refresh: EventEmitter<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Snapshot immutabile dello schema usato per il rendering.
|
|
29
|
+
* Viene aggiornato SOLO al primo caricamento, al cambio tab
|
|
30
|
+
* (quando `key` cambia) o al refresh esplicito.
|
|
31
|
+
* Questo evita che le modifiche nell'editor ricostruiscano
|
|
32
|
+
* continuamente il form, perdendo lo stato dell'utente.
|
|
33
|
+
*/
|
|
34
|
+
previewSchema: UiFormSchema | null;
|
|
35
|
+
/** Stato di apertura del pannello valori in basso. */
|
|
36
|
+
isValuesPanelOpen: boolean;
|
|
37
|
+
/** Valori correnti del form nell'anteprima. */
|
|
38
|
+
currentFormValues: any;
|
|
39
|
+
/** @internal Ultimo valore di `key` applicato allo snapshot. */
|
|
40
|
+
private lastAppliedKey;
|
|
41
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
42
|
+
/**
|
|
43
|
+
* Riceve i valori aggiornati dal form builder ad ogni interazione.
|
|
44
|
+
* @param values - Valori correnti del form (inclusi campi disabilitati)
|
|
45
|
+
*/
|
|
46
|
+
onFormBuilderValueChange(values: any): void;
|
|
47
|
+
/** Alterna la visibilita del pannello dei valori del form. */
|
|
48
|
+
toggleValuesPanel(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Gestisce il cambiamento dei valori dal pannello JSON.
|
|
51
|
+
* @param values - Nuovi valori parsati dal JSON
|
|
52
|
+
*/
|
|
53
|
+
onFormValuesChange(values: any): void;
|
|
54
|
+
/**
|
|
55
|
+
* Aggiorna i valori leggendo lo stato corrente dal form builder.
|
|
56
|
+
*/
|
|
57
|
+
onRefreshValues(): void;
|
|
58
|
+
/**
|
|
59
|
+
* @internal
|
|
60
|
+
* Crea una copia profonda dello schema corrente come snapshot
|
|
61
|
+
* per il rendering dell'anteprima. L'id viene reso univoco
|
|
62
|
+
* per forzare il rebuild del form builder (che ricostruisce
|
|
63
|
+
* solo quando `schema.id` cambia).
|
|
64
|
+
*/
|
|
65
|
+
private applySchemaSnapshot;
|
|
66
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorPreviewContainerComponent, never>;
|
|
67
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiEditorPreviewContainerComponent, "ui-editor-preview-container", never, { "schema": { "alias": "schema"; "required": false; }; "key": { "alias": "key"; "required": false; }; }, { "refresh": "refresh"; }, never, never, true, never>;
|
|
68
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/form-builder-editor
|
|
3
|
+
* Componente editor di sezione per il form builder.
|
|
4
|
+
*
|
|
5
|
+
* Renderizza una singola sezione del form come card, con supporto
|
|
6
|
+
* per espansione/collasso, editing inline del titolo, drag & drop
|
|
7
|
+
* dei campi e azioni CRUD su sezione e campi.
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from '@angular/core';
|
|
10
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
11
|
+
import { UiFormSection } from '../../../form-builder/types/index';
|
|
12
|
+
import { UiFieldType } from '../../../form-builder/types/index';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
/**
|
|
15
|
+
* Editor visuale di una singola sezione del form.
|
|
16
|
+
*
|
|
17
|
+
* Supporta:
|
|
18
|
+
* - Header espandibile/collassabile con editing inline del titolo
|
|
19
|
+
* - Pulsanti azione: modifica titolo, duplica, elimina
|
|
20
|
+
* - Drop list CDK per ricevere campi dalla palette o da altre sezioni
|
|
21
|
+
* - Ogni campo mostra: handle di trascinamento, icona tipo, label, chiave, badge tipo, asterisco required
|
|
22
|
+
* - Azioni campo (al passaggio mouse): duplica, elimina
|
|
23
|
+
* - Stato vuoto quando non ci sono campi
|
|
24
|
+
*/
|
|
25
|
+
export declare class UiSectionEditorComponent {
|
|
26
|
+
/** Sezione del form da renderizzare. */
|
|
27
|
+
section: UiFormSection;
|
|
28
|
+
/** Indica se la sezione e attualmente selezionata. */
|
|
29
|
+
isSelected: boolean;
|
|
30
|
+
/** Chiave del campo attualmente selezionato (o null). */
|
|
31
|
+
selectedFieldKey: string | null;
|
|
32
|
+
/** Emette aggiornamenti parziali alla sezione. */
|
|
33
|
+
sectionUpdate: EventEmitter<Partial<UiFormSection>>;
|
|
34
|
+
/** Emette richiesta di eliminazione della sezione. */
|
|
35
|
+
sectionDelete: EventEmitter<void>;
|
|
36
|
+
/** Emette richiesta di duplicazione della sezione. */
|
|
37
|
+
sectionDuplicate: EventEmitter<void>;
|
|
38
|
+
/** Emette la chiave del campo selezionato. */
|
|
39
|
+
fieldSelect: EventEmitter<string>;
|
|
40
|
+
/** Emette la chiave del campo da duplicare. */
|
|
41
|
+
fieldDuplicate: EventEmitter<string>;
|
|
42
|
+
/** Emette la chiave del campo da eliminare. */
|
|
43
|
+
fieldDelete: EventEmitter<string>;
|
|
44
|
+
/** Emette l'evento di drop del CDK drag & drop. */
|
|
45
|
+
fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
|
|
46
|
+
/** Stato di espansione della sezione. */
|
|
47
|
+
isExpanded: boolean;
|
|
48
|
+
/** Indica se il titolo e in fase di modifica inline. */
|
|
49
|
+
isEditingTitle: boolean;
|
|
50
|
+
/** Titolo temporaneo durante la modifica inline. */
|
|
51
|
+
tempTitle: string;
|
|
52
|
+
/**
|
|
53
|
+
* Alterna lo stato di espansione/collasso della sezione.
|
|
54
|
+
*/
|
|
55
|
+
toggleExpand(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Avvia la modifica inline del titolo della sezione.
|
|
58
|
+
* @param event - Evento del mouse per prevenire la propagazione.
|
|
59
|
+
*/
|
|
60
|
+
startTitleEdit(event: Event): void;
|
|
61
|
+
/**
|
|
62
|
+
* Conferma la modifica del titolo ed emette l'aggiornamento.
|
|
63
|
+
*/
|
|
64
|
+
confirmTitleEdit(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Annulla la modifica del titolo, ripristinando il valore originale.
|
|
67
|
+
*/
|
|
68
|
+
cancelTitleEdit(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Restituisce il nome dell'icona Lucide associata al tipo di campo.
|
|
71
|
+
* @param type - Tipo di campo del form.
|
|
72
|
+
* @returns Nome dell'icona Lucide.
|
|
73
|
+
*/
|
|
74
|
+
getFieldIcon(type: UiFieldType): string;
|
|
75
|
+
/**
|
|
76
|
+
* Gestisce l'evento di drop del CDK drag & drop e lo propaga al parent.
|
|
77
|
+
* @param event - Evento CdkDragDrop.
|
|
78
|
+
*/
|
|
79
|
+
onFieldDrop(event: CdkDragDrop<any>): void;
|
|
80
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UiSectionEditorComponent, never>;
|
|
81
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UiSectionEditorComponent, "ui-section-editor", never, { "section": { "alias": "section"; "required": true; }; "isSelected": { "alias": "isSelected"; "required": false; }; "selectedFieldKey": { "alias": "selectedFieldKey"; "required": false; }; }, { "sectionUpdate": "sectionUpdate"; "sectionDelete": "sectionDelete"; "sectionDuplicate": "sectionDuplicate"; "fieldSelect": "fieldSelect"; "fieldDuplicate": "fieldDuplicate"; "fieldDelete": "fieldDelete"; "fieldDrop": "fieldDrop"; }, never, never, true, never>;
|
|
82
|
+
}
|