@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.
Files changed (141) hide show
  1. package/esm2022/gnggln-ng-ui-system.mjs +5 -0
  2. package/esm2022/lib/components/accordion/accordion.component.mjs +353 -0
  3. package/esm2022/lib/components/accordion/accordion.types.mjs +6 -0
  4. package/esm2022/lib/components/accordion/index.mjs +2 -0
  5. package/esm2022/lib/components/base-layout/base-layout.component.mjs +218 -0
  6. package/esm2022/lib/components/base-layout/base-layout.types.mjs +6 -0
  7. package/esm2022/lib/components/base-layout/index.mjs +14 -0
  8. package/esm2022/lib/components/button/button-area.component.mjs +196 -0
  9. package/esm2022/lib/components/button/button.component.mjs +164 -0
  10. package/esm2022/lib/components/button/button.types.mjs +6 -0
  11. package/esm2022/lib/components/button/index.mjs +16 -0
  12. package/esm2022/lib/components/crud-table/crud-table.component.mjs +789 -0
  13. package/esm2022/lib/components/crud-table/crud-table.types.mjs +6 -0
  14. package/esm2022/lib/components/crud-table/index.mjs +16 -0
  15. package/esm2022/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  16. package/esm2022/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  17. package/esm2022/lib/components/form-builder/form-builder.component.mjs +824 -0
  18. package/esm2022/lib/components/form-builder/form-wizard.component.mjs +510 -0
  19. package/esm2022/lib/components/form-builder/index.mjs +19 -0
  20. package/esm2022/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  21. package/esm2022/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  22. package/esm2022/lib/components/form-builder/services/location.service.mjs +140 -0
  23. package/esm2022/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
  24. package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +161 -0
  25. package/esm2022/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  26. package/esm2022/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  27. package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  28. package/esm2022/lib/components/form-builder/types/condition.types.mjs +6 -0
  29. package/esm2022/lib/components/form-builder/types/field.types.mjs +6 -0
  30. package/esm2022/lib/components/form-builder/types/index.mjs +2 -0
  31. package/esm2022/lib/components/form-builder/types/schema.types.mjs +6 -0
  32. package/esm2022/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  33. package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -0
  34. package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
  35. package/esm2022/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
  36. package/esm2022/lib/components/form-builder-editor/index.mjs +21 -0
  37. package/esm2022/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
  38. package/esm2022/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
  39. package/esm2022/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
  40. package/esm2022/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
  41. package/esm2022/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
  42. package/esm2022/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
  43. package/esm2022/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
  44. package/esm2022/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
  45. package/esm2022/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
  46. package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
  47. package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +472 -0
  48. package/esm2022/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
  49. package/esm2022/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
  50. package/esm2022/lib/components/layout-builder/index.mjs +18 -0
  51. package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +1730 -0
  52. package/esm2022/lib/components/layout-builder/layout-builder.types.mjs +9 -0
  53. package/esm2022/lib/components/layout-builder/layout.service.mjs +239 -0
  54. package/esm2022/lib/components/modal/confirm-dialog.component.mjs +151 -0
  55. package/esm2022/lib/components/modal/index.mjs +4 -0
  56. package/esm2022/lib/components/modal/modal.component.mjs +139 -0
  57. package/esm2022/lib/components/modal/modal.service.mjs +194 -0
  58. package/esm2022/lib/components/modal/modal.types.mjs +6 -0
  59. package/esm2022/lib/components/page-header/breadcrumb.service.mjs +242 -0
  60. package/esm2022/lib/components/page-header/index.mjs +20 -0
  61. package/esm2022/lib/components/page-header/page-header.component.mjs +243 -0
  62. package/esm2022/lib/components/page-header/page-header.types.mjs +21 -0
  63. package/esm2022/lib/components/table/index.mjs +2 -0
  64. package/esm2022/lib/components/table/paginated-table.component.mjs +407 -0
  65. package/esm2022/lib/components/table/table.types.mjs +6 -0
  66. package/esm2022/lib/core/types/index.mjs +6 -0
  67. package/esm2022/lib/core/utils/index.mjs +53 -0
  68. package/esm2022/lib/sources/location-data.opt.json +8942 -0
  69. package/esm2022/lib/sources/nazioni.opt.json +215 -0
  70. package/esm2022/public-api.mjs +34 -0
  71. package/fesm2022/gnggln-ng-ui-system.mjs +55752 -0
  72. package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -0
  73. package/index.d.ts +5 -0
  74. package/lib/components/accordion/accordion.component.d.ts +118 -0
  75. package/lib/components/accordion/accordion.types.d.ts +62 -0
  76. package/lib/components/accordion/index.d.ts +2 -0
  77. package/lib/components/base-layout/base-layout.component.d.ts +83 -0
  78. package/lib/components/base-layout/base-layout.types.d.ts +26 -0
  79. package/lib/components/base-layout/index.d.ts +13 -0
  80. package/lib/components/button/button-area.component.d.ts +88 -0
  81. package/lib/components/button/button.component.d.ts +55 -0
  82. package/lib/components/button/button.types.d.ts +70 -0
  83. package/lib/components/button/index.d.ts +15 -0
  84. package/lib/components/crud-table/crud-table.component.d.ts +143 -0
  85. package/lib/components/crud-table/crud-table.types.d.ts +207 -0
  86. package/lib/components/crud-table/index.d.ts +15 -0
  87. package/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  88. package/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  89. package/lib/components/form-builder/form-builder.component.d.ts +183 -0
  90. package/lib/components/form-builder/form-wizard.component.d.ts +87 -0
  91. package/lib/components/form-builder/index.d.ts +13 -0
  92. package/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  93. package/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  94. package/lib/components/form-builder/services/location.service.d.ts +83 -0
  95. package/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
  96. package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +28 -0
  97. package/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  98. package/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  99. package/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  100. package/lib/components/form-builder/types/condition.types.d.ts +51 -0
  101. package/lib/components/form-builder/types/field.types.d.ts +288 -0
  102. package/lib/components/form-builder/types/index.d.ts +5 -0
  103. package/lib/components/form-builder/types/schema.types.d.ts +227 -0
  104. package/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  105. package/lib/components/form-builder/types/validation.types.d.ts +174 -0
  106. package/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
  107. package/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
  108. package/lib/components/form-builder-editor/index.d.ts +15 -0
  109. package/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
  110. package/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
  111. package/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
  112. package/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
  113. package/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
  114. package/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
  115. package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
  116. package/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
  117. package/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
  118. package/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
  119. package/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
  120. package/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
  121. package/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
  122. package/lib/components/layout-builder/index.d.ts +16 -0
  123. package/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
  124. package/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
  125. package/lib/components/layout-builder/layout.service.d.ts +100 -0
  126. package/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  127. package/lib/components/modal/index.d.ts +4 -0
  128. package/lib/components/modal/modal.component.d.ts +44 -0
  129. package/lib/components/modal/modal.service.d.ts +93 -0
  130. package/lib/components/modal/modal.types.d.ts +110 -0
  131. package/lib/components/page-header/breadcrumb.service.d.ts +96 -0
  132. package/lib/components/page-header/index.d.ts +16 -0
  133. package/lib/components/page-header/page-header.component.d.ts +59 -0
  134. package/lib/components/page-header/page-header.types.d.ts +96 -0
  135. package/lib/components/table/index.d.ts +2 -0
  136. package/lib/components/table/paginated-table.component.d.ts +85 -0
  137. package/lib/components/table/table.types.d.ts +81 -0
  138. package/lib/core/types/index.d.ts +57 -0
  139. package/lib/core/utils/index.d.ts +29 -0
  140. package/package.json +44 -0
  141. package/public-api.d.ts +22 -0
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @module ng-ui-system/form-builder
3
+ * Tipi per i componenti di selezione territoriale (location e location-table).
4
+ */
5
+ /**
6
+ * Configurazione per un sotto-campo del componente location.
7
+ * Permette di controllare visibilita, obbligatorieta e layout.
8
+ */
9
+ export interface UiLocationFieldConfig {
10
+ /** Mostra il campo. @default true per nazione/provincia/comune, false per campi opzionali */
11
+ show?: boolean;
12
+ /** Rende il campo obbligatorio. */
13
+ required?: boolean;
14
+ /** Numero di colonne nella griglia (1-12). */
15
+ columns?: number;
16
+ }
17
+ /**
18
+ * Configurazione completa per il componente `UiSpecificaTerritorialeComponent`.
19
+ *
20
+ * Permette di personalizzare ogni aspetto della selezione geografica:
21
+ * campi visibili, obbligatorieta, layout e labels.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // Configurazione base: solo nazione, provincia, comune
26
+ * const config: UiLocationConfig = {
27
+ * nazione: { required: true },
28
+ * provincia: { required: true },
29
+ * comune: { required: true },
30
+ * };
31
+ *
32
+ * // Con campi aggiuntivi
33
+ * const configEsteso: UiLocationConfig = {
34
+ * italyByDefault: true,
35
+ * cap: { show: true, required: true, columns: 4 },
36
+ * indirizzo: { show: true, required: true, columns: 8 },
37
+ * mail: { show: true, columns: 6 },
38
+ * pec: { show: true, columns: 6 },
39
+ * telefono: { show: true, columns: 6 },
40
+ * };
41
+ * ```
42
+ */
43
+ export interface UiLocationConfig {
44
+ /** Configurazione campo nazione. Required default: true. */
45
+ nazione?: {
46
+ required?: boolean;
47
+ };
48
+ /** Configurazione campo provincia. Required default: true. */
49
+ provincia?: {
50
+ required?: boolean;
51
+ };
52
+ /** Configurazione campo comune. Required default: true. */
53
+ comune?: {
54
+ required?: boolean;
55
+ };
56
+ /** Configurazione campo comune estero. Required default: true. */
57
+ comuneEstero?: {
58
+ required?: boolean;
59
+ };
60
+ /** Configurazione campo CAP. Show default: false. */
61
+ cap?: UiLocationFieldConfig;
62
+ /** Configurazione campo indirizzo. Show default: false. */
63
+ indirizzo?: UiLocationFieldConfig;
64
+ /** Configurazione campo email. Show default: false. */
65
+ mail?: UiLocationFieldConfig;
66
+ /** Configurazione campo PEC. Show default: false. */
67
+ pec?: UiLocationFieldConfig;
68
+ /** Configurazione campo telefono. Show default: false. */
69
+ telefono?: UiLocationFieldConfig;
70
+ /** Pre-imposta l'Italia come nazione e nasconde la select. */
71
+ italyByDefault?: boolean;
72
+ /** Labels personalizzate per i campi. */
73
+ labels?: UiLocationLabels;
74
+ }
75
+ /**
76
+ * Labels personalizzabili per i campi del componente location.
77
+ */
78
+ export interface UiLocationLabels {
79
+ nazione?: string;
80
+ provincia?: string;
81
+ comune?: string;
82
+ cap?: string;
83
+ indirizzo?: string;
84
+ comuneEstero?: string;
85
+ mail?: string;
86
+ pec?: string;
87
+ telefono?: string;
88
+ }
89
+ /**
90
+ * Valore emesso dal componente location.
91
+ * Contiene gli ID dei dati geografici selezionati e i campi testuali.
92
+ */
93
+ export interface UiLocationValue {
94
+ /** Codice nazione (es. `'ITA'`). */
95
+ nazioneId?: string;
96
+ /** Codice provincia (es. `'015'`). */
97
+ provinciaId?: string;
98
+ /** Codice comune (es. `'015146'`). */
99
+ comuneId?: string;
100
+ /** Codice di avviamento postale. */
101
+ cap?: string;
102
+ /** Indirizzo completo (via, numero civico). */
103
+ indirizzo?: string;
104
+ /** Nome del comune per nazioni estere (testo libero). */
105
+ comuneEstero?: string;
106
+ /** Indirizzo email. */
107
+ mail?: string;
108
+ /** Indirizzo PEC. */
109
+ pec?: string;
110
+ /** Numero di telefono. */
111
+ telefono?: string;
112
+ }
113
+ /**
114
+ * Configurazione per il componente `UiTableTerritorialeComponent`.
115
+ *
116
+ * Gestisce una tabella di righe territoriali con CRUD inline.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const tableConfig: UiLocationTableConfig = {
121
+ * tableLabel: 'Sedi operative',
122
+ * emptyPrompt: 'Nessuna sede aggiunta',
123
+ * emptyCtaLabel: 'Aggiungi sede',
124
+ * requiredMessage: 'Inserire almeno una sede',
125
+ * subFieldConfig: {
126
+ * italyByDefault: true,
127
+ * cap: { show: true, required: true },
128
+ * indirizzo: { show: true, required: true },
129
+ * },
130
+ * };
131
+ * ```
132
+ */
133
+ export interface UiLocationTableConfig {
134
+ /** Label della tabella. @default 'Tabella territoriale' */
135
+ tableLabel?: string;
136
+ /** Label del pulsante di aggiunta. @default 'Aggiungi un luogo' */
137
+ emptyCtaLabel?: string;
138
+ /** Testo mostrato quando la tabella e vuota. */
139
+ emptyPrompt?: string;
140
+ /** Messaggio di errore quando la tabella e richiesta ma vuota. */
141
+ requiredMessage?: string;
142
+ /** Configurazione per il sotto-form (specifica territoriale). */
143
+ subFieldConfig?: UiLocationConfig;
144
+ }
145
+ /**
146
+ * Riga della tabella territoriale.
147
+ * Contiene dati completi della location (oggetti risolti dal servizio).
148
+ */
149
+ export interface UiLocationRow {
150
+ /** Nazione (oggetto completo). */
151
+ stato: any;
152
+ /** Provincia (solo per Italia). */
153
+ provincia?: any;
154
+ /** Comune italiano (oggetto completo). */
155
+ comuni?: any;
156
+ /** Comuni esteri (array di nomi). */
157
+ comuniEsteri?: string[];
158
+ /** Codice di avviamento postale. */
159
+ cap?: string;
160
+ /** Indirizzo completo. */
161
+ indirizzo?: string;
162
+ /** Indirizzo email. */
163
+ mail?: string;
164
+ /** PEC. */
165
+ pec?: string;
166
+ /** Numero di telefono. */
167
+ telefono?: string;
168
+ /** ID univoco per il tracciamento della riga. */
169
+ refId?: string;
170
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @module ng-ui-system/form-builder
3
+ * Tipi relativi alla validazione dei campi.
4
+ */
5
+ import { ValidatorFn } from '@angular/forms';
6
+ import { UiFieldCondition } from './condition.types';
7
+ /**
8
+ * Operatori di confronto per validazioni cross-field.
9
+ */
10
+ export type UiCrossFieldOperator = 'greater_than' | 'greater_equal' | 'less_than' | 'less_equal' | 'not_equal';
11
+ /**
12
+ * Configurazione per validazione cross-field.
13
+ * Confronta il valore del campo corrente con quello di un altro campo.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // La data di fine deve essere successiva alla data di inizio
18
+ * crossField: {
19
+ * targetField: 'data-inizio',
20
+ * operator: 'greater_than',
21
+ * dataType: 'date',
22
+ * }
23
+ * ```
24
+ */
25
+ export interface UiCrossFieldConfig {
26
+ /** Chiave del campo di confronto. */
27
+ targetField: string;
28
+ /** Operatore di confronto. */
29
+ operator: UiCrossFieldOperator;
30
+ /** Tipo di dato per il confronto. */
31
+ dataType: 'date' | 'number';
32
+ /** Per le date, specifica se il formato e MM/YYYY. */
33
+ isMonthYear?: boolean;
34
+ }
35
+ /**
36
+ * Keyword predefinite per date di riferimento.
37
+ */
38
+ export type UiDateKeyword = 'today' | 'tomorrow' | 'yesterday';
39
+ /**
40
+ * Configurazione per validazione date-min / date-max.
41
+ * Permette di validare che una data sia precedente o successiva
42
+ * a un valore di riferimento, con supporto per offset temporali.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // Data deve essere >= oggi
47
+ * { type: 'date-min', value: 'today', message: 'La data deve essere futura' }
48
+ *
49
+ * // Data deve essere <= oggi + 1 anno
50
+ * { type: 'date-max', value: 'today', offset: '1y', message: 'Max 1 anno da oggi' }
51
+ *
52
+ * // Data deve essere >= una data specifica
53
+ * { type: 'date-min', value: '01/01/2024', message: 'Almeno dal 2024' }
54
+ * ```
55
+ */
56
+ export interface UiDateValidationConfig {
57
+ /**
58
+ * Data di riferimento.
59
+ * Puo essere una keyword (`'today'`, `'tomorrow'`, `'yesterday'`)
60
+ * o una data nel formato `DD/MM/YYYY`.
61
+ */
62
+ value: string | UiDateKeyword;
63
+ /**
64
+ * Offset da applicare alla data di riferimento.
65
+ *
66
+ * Formato: `numero + unita`
67
+ * - `'y'` o `'a'` per anni (es. `'1y'`, `'2a'`)
68
+ * - `'m'` per mesi (es. `'6m'`, `'12m'`)
69
+ * - `'g'` o `'d'` per giorni (es. `'30g'`, `'7d'`)
70
+ * - `'w'` per settimane (es. `'2w'`)
71
+ */
72
+ offset?: string;
73
+ }
74
+ /**
75
+ * Tipi di validazione supportati dal form builder.
76
+ *
77
+ * | Tipo | Valore atteso | Descrizione |
78
+ * |-------------|--------------------|-----------------------------------------|
79
+ * | `required` | — | Campo obbligatorio |
80
+ * | `email` | — | Formato email valido |
81
+ * | `min` | `number` | Valore numerico minimo |
82
+ * | `max` | `number` | Valore numerico massimo |
83
+ * | `minLength` | `number` | Lunghezza minima stringa |
84
+ * | `maxLength` | `number` | Lunghezza massima stringa |
85
+ * | `pattern` | `string` (regex) | Pattern regex da rispettare |
86
+ * | `custom` | `ValidatorFn` | Validatore Angular custom |
87
+ * | `crossField`| `CrossFieldConfig` | Confronto con un altro campo |
88
+ * | `date-min` | `string` | Data minima (keyword o DD/MM/YYYY) |
89
+ * | `date-max` | `string` | Data massima (keyword o DD/MM/YYYY) |
90
+ * | `fileSize` | `number` (bytes) | Dimensione massima file |
91
+ * | `fileType` | `string[]` (MIME) | Tipi file accettati |
92
+ * | `fileCount` | `number` | Numero massimo file |
93
+ */
94
+ export type UiValidationType = 'required' | 'email' | 'min' | 'max' | 'minLength' | 'maxLength' | 'pattern' | 'custom' | 'crossField' | 'date-min' | 'date-max' | 'fileSize' | 'fileType' | 'fileCount';
95
+ /**
96
+ * Regola di validazione per un campo del form.
97
+ *
98
+ * Supporta validazioni standard, cross-field, date con offset,
99
+ * file e validatori custom Angular. Ogni regola puo avere
100
+ * condizioni che ne controllano l'applicazione.
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * // Validazione required condizionale
105
+ * {
106
+ * type: 'required',
107
+ * message: 'Campo obbligatorio se attivo',
108
+ * conditions: [{ field: 'is-active', operator: 'equals', value: true }],
109
+ * }
110
+ *
111
+ * // Validazione cross-field
112
+ * {
113
+ * type: 'crossField',
114
+ * crossField: {
115
+ * targetField: 'eta-minima',
116
+ * operator: 'greater_than',
117
+ * dataType: 'number',
118
+ * },
119
+ * message: "L'eta massima deve essere maggiore dell'eta minima",
120
+ * }
121
+ * ```
122
+ */
123
+ export interface UiValidationRule {
124
+ /** Tipo di validazione. */
125
+ type: UiValidationType;
126
+ /**
127
+ * Valore per la validazione.
128
+ * - Per `min`/`max`: valore numerico
129
+ * - Per `minLength`/`maxLength`: lunghezza
130
+ * - Per `pattern`: stringa regex
131
+ * - Per `date-min`/`date-max`: keyword o data `DD/MM/YYYY`
132
+ * - Per `fileSize`: dimensione in bytes
133
+ * - Per `fileType`: array di MIME types
134
+ * - Per `fileCount`: numero massimo file
135
+ */
136
+ value?: any;
137
+ /**
138
+ * Offset temporale per `date-min`/`date-max`.
139
+ * @see UiDateValidationConfig.offset
140
+ */
141
+ offset?: string;
142
+ /** Configurazione per validazione cross-field. */
143
+ crossField?: UiCrossFieldConfig;
144
+ /** Messaggio di errore personalizzato. */
145
+ message?: string;
146
+ /** Funzione validatore Angular custom (per `type: 'custom'`). */
147
+ validator?: ValidatorFn;
148
+ /** Condizioni per applicare questa regola (validazione condizionale). */
149
+ conditions?: UiFieldCondition[];
150
+ }
151
+ /**
152
+ * Stato di validazione complessivo del form.
153
+ */
154
+ export interface UiFormValidationState {
155
+ /** Se il form e valido. */
156
+ valid: boolean;
157
+ /** Mappa errori per chiave campo. */
158
+ errors: Record<string, string[]>;
159
+ /** Chiavi dei campi modificati. */
160
+ dirty: string[];
161
+ /** Chiavi dei campi toccati. */
162
+ touched: string[];
163
+ }
164
+ /**
165
+ * Dettaglio di un errore per l'error summary.
166
+ */
167
+ export interface UiFormErrorDetail {
168
+ /** Chiave del campo in errore. */
169
+ fieldKey: string;
170
+ /** Label del campo per visualizzazione. */
171
+ fieldLabel: string;
172
+ /** Lista messaggi di errore. */
173
+ errors: string[];
174
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @module ng-ui-system/form-builder-editor
3
+ * Componente principale dell'editor visuale del form builder.
4
+ *
5
+ * Layout a tre pannelli:
6
+ * - Sinistra: palette dei tipi di campo (drag source)
7
+ * - Centro: sezioni con campi (drop target + editor inline)
8
+ * - Destra: pannello di configurazione del campo selezionato
9
+ *
10
+ * Funzionalita principali:
11
+ * - Drag & drop dei campi dalla palette alle sezioni
12
+ * - Riordino campi all'interno e tra sezioni
13
+ * - Configurazione campi in tempo reale
14
+ * - Preview live del form
15
+ * - Import/export JSON
16
+ * - Auto-save su localStorage
17
+ */
18
+ import { OnInit, OnDestroy } from '@angular/core';
19
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
20
+ import { MatDialogRef } from '@angular/material/dialog';
21
+ import { UiFormFieldDescriptor } from '../form-builder/types/index';
22
+ import { UiEditorState, UiEditorBreadcrumbItem, UiEditorAvailableField, UiEditorDialogData } from './types/editor.types';
23
+ import { UiEditorStateService } from './services/editor-state.service';
24
+ import * as i0 from "@angular/core";
25
+ export declare class UiFormBuilderEditorComponent implements OnInit, OnDestroy {
26
+ dialogRef: MatDialogRef<UiFormBuilderEditorComponent>;
27
+ dialogData: UiEditorDialogData;
28
+ /** @internal Servizio per lo stato dell'editor. */
29
+ readonly stateService: UiEditorStateService;
30
+ /** @internal Servizio per la persistenza. */
31
+ private readonly persistenceService;
32
+ /** @internal Factory per i campi. */
33
+ private readonly fieldFactory;
34
+ /** @internal Snack bar per i messaggi. */
35
+ private readonly snackBar;
36
+ /** @internal Change detector. */
37
+ private readonly cdr;
38
+ /** @internal Subject per la distruzione. */
39
+ private readonly destroy$;
40
+ /** Stato corrente dell'editor. */
41
+ state: UiEditorState;
42
+ /** Indice del tab selezionato (0=Editor, 1=Preview). */
43
+ selectedTabIndex: number;
44
+ /** Breadcrumb di navigazione. */
45
+ breadcrumb: UiEditorBreadcrumbItem[];
46
+ /** Se il componente e aperto in modalita dialog. */
47
+ isDialogMode: boolean;
48
+ /** Chiave per forzare il re-render del preview. */
49
+ previewKey: number;
50
+ /** Campi disponibili per le condizioni (cache). */
51
+ availableFields: UiEditorAvailableField[];
52
+ /** Larghezza della sidebar sinistra (px). */
53
+ leftSidebarWidth: number;
54
+ /** Larghezza della sidebar destra (px). */
55
+ rightSidebarWidth: number;
56
+ /** Se e in corso il resize della sidebar destra. */
57
+ isResizing: boolean;
58
+ /** Se e in corso il resize della sidebar sinistra. */
59
+ isResizingLeft: boolean;
60
+ /** @internal Limiti di resize sidebar destra. */
61
+ private readonly MIN_SIDEBAR_WIDTH;
62
+ private readonly MAX_SIDEBAR_WIDTH;
63
+ /** @internal Limiti di resize sidebar sinistra. */
64
+ private readonly MIN_LEFT_SIDEBAR_WIDTH;
65
+ private readonly MAX_LEFT_SIDEBAR_WIDTH;
66
+ private resizeStartX;
67
+ private resizeStartWidth;
68
+ private readonly SIDEBAR_WIDTH_KEY;
69
+ private readonly LEFT_SIDEBAR_WIDTH_KEY;
70
+ constructor(dialogRef: MatDialogRef<UiFormBuilderEditorComponent>, dialogData: UiEditorDialogData);
71
+ ngOnInit(): void;
72
+ ngOnDestroy(): void;
73
+ /** Aggiunge una nuova sezione. */
74
+ onAddSection(): void;
75
+ /** Salva nel localStorage. */
76
+ onSave(): void;
77
+ /** Crea un nuovo form. */
78
+ onNewForm(): void;
79
+ /** Importa da file JSON. */
80
+ onImportJson(): void;
81
+ /** Esporta come file JSON. */
82
+ onExportJson(): void;
83
+ /** Pulisce tutto lo schema. */
84
+ onClear(): void;
85
+ onSectionDuplicate(sectionId: string): void;
86
+ onSectionDelete(sectionId: string): void;
87
+ onFieldSelect(sectionId: string, fieldKey: string): void;
88
+ onFieldDuplicate(sectionId: string, fieldKey: string): void;
89
+ onFieldDelete(sectionId: string, fieldKey: string): void;
90
+ onFieldUpdate(sectionId: string, fieldKey: string, updates: Partial<UiFormFieldDescriptor>): void;
91
+ /** Gestisce il drop di un campo (dalla palette o tra sezioni). */
92
+ onFieldDrop(event: CdkDragDrop<any>): void;
93
+ /** Campo attualmente selezionato. */
94
+ get selectedField(): UiFormFieldDescriptor | null;
95
+ /** ID della sezione del campo selezionato. */
96
+ get selectedFieldSectionId(): string | null;
97
+ onTabChange(index: number): void;
98
+ refreshPreview(): void;
99
+ /** Chiude la modale restituendo lo schema corrente. */
100
+ closeDialog(): void;
101
+ onResizeStart(event: MouseEvent): void;
102
+ private onResizeMove;
103
+ private onResizeEnd;
104
+ onLeftResizeStart(event: MouseEvent): void;
105
+ private onLeftResizeMove;
106
+ private onLeftResizeEnd;
107
+ private checkForRecovery;
108
+ private autoSave;
109
+ private updateBreadcrumb;
110
+ private updateAvailableFields;
111
+ private showMessage;
112
+ private loadSidebarWidth;
113
+ private saveSidebarWidth;
114
+ private saveLeftSidebarWidth;
115
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFormBuilderEditorComponent, [{ optional: true; }, { optional: true; }]>;
116
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiFormBuilderEditorComponent, "ui-form-builder-editor", never, {}, {}, never, never, true, never>;
117
+ }
@@ -0,0 +1,38 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { UiFormSchema } from '../form-builder/types/index';
3
+ import { UiFormBuilderEditorComponent } from './form-builder-editor.component';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Servizio per aprire l'editor visuale del form builder
7
+ * in una modale fullscreen tramite il UiModalService.
8
+ *
9
+ * @usageNotes
10
+ *
11
+ * ### Apertura base
12
+ * ```typescript
13
+ * const ref = this.editorService.open();
14
+ * ref.afterClosed().subscribe(schema => {
15
+ * if (schema) console.log('Schema risultante:', schema);
16
+ * });
17
+ * ```
18
+ *
19
+ * ### Apertura con schema iniziale
20
+ * ```typescript
21
+ * this.editorService.open(myExistingSchema)
22
+ * .afterClosed()
23
+ * .subscribe(schema => { ... });
24
+ * ```
25
+ */
26
+ export declare class UiFormBuilderEditorService {
27
+ /** @internal Servizio modale per l'apertura. */
28
+ private readonly modalService;
29
+ /**
30
+ * Apre l'editor in una modale fullscreen.
31
+ *
32
+ * @param initialSchema - Schema iniziale da caricare nell'editor
33
+ * @returns Riferimento alla dialog per gestire chiusura e risultato
34
+ */
35
+ open(initialSchema?: UiFormSchema): MatDialogRef<UiFormBuilderEditorComponent, UiFormSchema | null>;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFormBuilderEditorService, never>;
37
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiFormBuilderEditorService>;
38
+ }
@@ -0,0 +1,15 @@
1
+ export { UiFormBuilderEditorComponent } from './form-builder-editor.component';
2
+ export { UiFormBuilderEditorService } from './form-builder-editor.service';
3
+ export { UiEditorStateService } from './services/editor-state.service';
4
+ export { UiEditorPersistenceService } from './services/editor-persistence.service';
5
+ export { UiEditorFieldFactoryService } from './services/field-factory.service';
6
+ export { UiEditorToolbarComponent } from './sub-components/editor-toolbar/editor-toolbar.component';
7
+ export { UiFieldPaletteComponent } from './sub-components/field-palette/field-palette.component';
8
+ export { UiSectionEditorComponent } from './sub-components/section-editor/section-editor.component';
9
+ export { UiEditorFieldConfigPanelComponent } from './sub-components/field-config-panel/field-config-panel.component';
10
+ export { UiEditorPreviewContainerComponent } from './sub-components/preview-container/preview-container.component';
11
+ export { UiValidationEditorComponent } from './sub-components/validation-editor/validation-editor.component';
12
+ export { UiConditionEditorComponent } from './sub-components/condition-editor/condition-editor.component';
13
+ export { UiOptionsEditorComponent } from './sub-components/options-editor/options-editor.component';
14
+ export { UiEditorFormValuesPanelComponent } from './sub-components/form-values-panel/form-values-panel.component';
15
+ export * from './types/editor.types';
@@ -0,0 +1,42 @@
1
+ import { UiFormSchema } from '../../form-builder/types/index';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Gestisce il salvataggio e il recupero degli schemi dell'editor.
5
+ *
6
+ * Supporta:
7
+ * - Auto-save e recupero da localStorage
8
+ * - Import/export da/verso file JSON
9
+ * - Backup automatici con rotazione (max 5)
10
+ */
11
+ export declare class UiEditorPersistenceService {
12
+ /** @internal Chiave localStorage per l'auto-save. */
13
+ private readonly STORAGE_KEY;
14
+ /** @internal Versione dello storage per migrazioni future. */
15
+ private readonly STORAGE_VERSION;
16
+ /** @internal Durata massima di un salvataggio (24 ore). */
17
+ private readonly MAX_AGE_MS;
18
+ /** Salva lo schema nel localStorage. */
19
+ saveToLocalStorage(schema: UiFormSchema): void;
20
+ /** Carica lo schema dal localStorage (null se scaduto o assente). */
21
+ loadFromLocalStorage(): UiFormSchema | null;
22
+ /** Verifica se esiste un salvataggio valido. */
23
+ hasLocalStorageData(): boolean;
24
+ /** Restituisce la data dell'ultimo salvataggio. */
25
+ getLocalStorageAge(): Date | null;
26
+ /** Rimuove il salvataggio dal localStorage. */
27
+ clearLocalStorage(): void;
28
+ /** Esporta lo schema come file JSON scaricabile. */
29
+ exportToJSON(schema: UiFormSchema, filename?: string): void;
30
+ /** Importa lo schema da un file JSON. */
31
+ importFromJSON(file: File): Promise<UiFormSchema>;
32
+ /** Crea un backup dello schema prima di operazioni distruttive. */
33
+ createBackup(schema: UiFormSchema): void;
34
+ /** @internal Validazione strutturale minima dello schema. */
35
+ private isValidSchema;
36
+ /** @internal Scarica un blob come file. */
37
+ private downloadBlob;
38
+ /** @internal Mantiene solo gli ultimi 5 backup. */
39
+ private cleanOldBackups;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorPersistenceService, never>;
41
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiEditorPersistenceService>;
42
+ }
@@ -0,0 +1,66 @@
1
+ import { Observable } from 'rxjs';
2
+ import { UiFormSchema, UiFormSection, UiFormFieldDescriptor } from '../../form-builder/types/index';
3
+ import { UiEditorState, UiEditorSchemaValidationResult } from '../types/editor.types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Servizio per la gestione reattiva dello stato dell'editor visuale.
7
+ *
8
+ * Espone lo stato come Observable e fornisce metodi immutabili
9
+ * per tutte le operazioni CRUD su sezioni e campi.
10
+ */
11
+ export declare class UiEditorStateService {
12
+ /** @internal Factory per la creazione dei campi. */
13
+ private readonly fieldFactory;
14
+ /** @internal Stato iniziale dell'editor. */
15
+ private readonly initialState;
16
+ /** @internal Subject per lo stato dell'editor. */
17
+ private readonly _state$;
18
+ /** Stream reattivo dello stato dell'editor. */
19
+ readonly state$: Observable<UiEditorState>;
20
+ /** Restituisce un snapshot dello stato corrente. */
21
+ getCurrentState(): UiEditorState;
22
+ /** Restituisce lo schema corrente. */
23
+ getSchema(): UiFormSchema;
24
+ /** @internal Aggiorna lo stato e marca come dirty. */
25
+ private updateState;
26
+ /** Imposta uno schema completo (es. da import). */
27
+ setSchema(schema: UiFormSchema): void;
28
+ /** Marca lo stato come salvato. */
29
+ markAsSaved(): void;
30
+ /** Reset allo stato iniziale. */
31
+ reset(): void;
32
+ /** Pulisce lo schema mantenendo l'ID. */
33
+ clearSchema(): void;
34
+ /** Aggiunge una nuova sezione e la seleziona. */
35
+ addSection(section?: Partial<UiFormSection>): string;
36
+ /** Rimuove una sezione per ID. */
37
+ removeSection(sectionId: string): void;
38
+ /** Aggiorna proprieta di una sezione. */
39
+ updateSection(sectionId: string, updates: Partial<UiFormSection>): void;
40
+ /** Duplica una sezione con nuovi ID per sezione e campi. */
41
+ duplicateSection(sectionId: string): string | null;
42
+ /** Aggiunge un campo a una sezione in una posizione specifica. */
43
+ addFieldAtIndex(sectionId: string, field: UiFormFieldDescriptor, index: number): void;
44
+ /** Rimuove un campo da una sezione. */
45
+ removeField(sectionId: string, fieldKey: string): void;
46
+ /** Aggiorna proprieta di un campo. */
47
+ updateField(sectionId: string, fieldKey: string, fieldUpdates: Partial<UiFormFieldDescriptor>): void;
48
+ /** Duplica un campo nella stessa sezione. */
49
+ duplicateField(sectionId: string, fieldKey: string): void;
50
+ /** Riordina un campo all'interno della stessa sezione. */
51
+ moveFieldInSection(sectionId: string, fromIndex: number, toIndex: number): void;
52
+ /** Sposta un campo tra due sezioni diverse. */
53
+ moveFieldBetweenSections(fromSectionId: string, toSectionId: string, fieldKey: string, toIndex: number): void;
54
+ /** Seleziona una sezione (deseleziona il campo). */
55
+ selectSection(sectionId: string | null): void;
56
+ /** Seleziona un campo (e la sua sezione). */
57
+ selectField(sectionId: string, fieldKey: string | null): void;
58
+ /** Trova la sezione che contiene un campo. */
59
+ findSectionByFieldKey(fieldKey: string): UiFormSection | null;
60
+ /** Trova un campo per chiave attraverso tutte le sezioni. */
61
+ findFieldByKey(fieldKey: string): UiFormFieldDescriptor | null;
62
+ /** Valida lo schema corrente cercando errori e warning strutturali. */
63
+ validateSchema(): UiEditorSchemaValidationResult;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorStateService, never>;
65
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiEditorStateService>;
66
+ }
@@ -0,0 +1,28 @@
1
+ import { UiFormFieldDescriptor, UiFieldType } from '../../form-builder/types/index';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Servizio factory per creare field descriptor con configurazioni
5
+ * di default appropriate per ogni tipo di campo.
6
+ */
7
+ export declare class UiEditorFieldFactoryService {
8
+ /** @internal Contatore per generare chiavi univoche. */
9
+ private fieldCounter;
10
+ /**
11
+ * Crea un field descriptor di default per il tipo specificato.
12
+ *
13
+ * @param type - Tipo di campo da creare
14
+ * @param key - Chiave opzionale (se omessa viene generata automaticamente)
15
+ * @returns Field descriptor con valori di default
16
+ */
17
+ createDefaultField(type: UiFieldType, key?: string): UiFormFieldDescriptor;
18
+ /** Duplica un campo generando una nuova chiave univoca. */
19
+ duplicateField(field: UiFormFieldDescriptor): UiFormFieldDescriptor;
20
+ /** @internal Genera una chiave univoca per un campo. */
21
+ private generateUniqueKey;
22
+ /** @internal Mappa tipo -> label di default. */
23
+ private getDefaultLabel;
24
+ /** @internal Mappa tipo -> placeholder di default. */
25
+ private getDefaultPlaceholder;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiEditorFieldFactoryService, never>;
27
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiEditorFieldFactoryService>;
28
+ }