@arsedizioni/ars-utils 22.5.38 → 22.5.39
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/README.md +185 -179
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +44 -43
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +118 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +17 -448
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +368 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
- package/package.json +9 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +3 -2
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +3 -180
- package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +49 -0
- package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +136 -0
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +1 -1
package/README.md
CHANGED
|
@@ -1,179 +1,185 @@
|
|
|
1
|
-
# ARS Utils
|
|
2
|
-
|
|
3
|
-
Common tools and standalone components shared among ARS Edizioni Angular based web applications.
|
|
4
|
-
|
|
5
|
-
Rispetto alla versione monolitica precedente adotta la struttura a entry point
|
|
6
|
-
introdotta con `@fabio.buscaroli/scm-utils`: code splitting e tree shaking sono il criterio di
|
|
7
|
-
ripartizione dei simboli, non un effetto collaterale.
|
|
8
|
-
|
|
9
|
-
## Platform
|
|
10
|
-
|
|
11
|
-
Angular 22 + Material
|
|
12
|
-
|
|
13
|
-
## Entry points
|
|
14
|
-
|
|
15
|
-
La libreria non espone un barrel unico: l'entry point secondario e' l'unica unita' di
|
|
16
|
-
code splitting riconosciuta da ng-packagr, quindi ogni gruppo di simboli che ha un ciclo
|
|
17
|
-
di vita proprio vive nel suo entry point. Importare sempre dal path specifico.
|
|
18
|
-
|
|
19
|
-
### Nucleo condiviso
|
|
20
|
-
|
|
21
|
-
| Livello | Entry point | Contenuto | Note |
|
|
22
|
-
|---|---|---|---|
|
|
23
|
-
| L0 | `core` | `SystemUtils`, models, definitions, pipe, direttive validator, servizi (broadcast, screen, theme, splash, environment), `LoginOAuthType` | nessuna dipendenza da Angular Material |
|
|
24
|
-
| L0 | `core.date` | `provideArsDateFns`, `provideArsLocalDates`, `MAT_DATE_FNS_FORMATS`, `arsLocalDateInterceptor`, `ARS_TIME_ZONE` | isola `@angular/material/core` + `datepicker` |
|
|
25
|
-
| L0 | `core.markdown` | `MarkdownUtils`, `FormatMarkdownPipe` | parser markdown, fuori dal percorso comune |
|
|
26
|
-
| L0 | `core.validators` | direttive validator per i form template-driven (`ValidatorDirective`, `ValidIfDirective`, `EqualsValidatorDirective`, `PasswordValidatorDirective`, `EmailsValidatorDirective`, ...) | isola `@angular/forms` (53 KB): `core` sta sul percorso di boot e non deve trascinarselo |
|
|
27
|
-
| L0.5 | `ui.shell` | `ShellService` (`info`, `error`, `busy*`, `wait`, `BusyTimer`), `ShellMessageComponent`, `ShellBusyComponent` | zero Material e zero CDK: e' quello che shell, interceptor, guard e app initializer possono permettersi sul percorso di boot |
|
|
28
|
-
| L1 | `ui` | `FlexLayoutModule`, `MediaObserver`, `UIService`, tipi dei dialog | kernel: deve restare magro, e non importa nulla da Material |
|
|
29
|
-
| L1 | `ui.paginator` | `PaginatorIntl` | isola `@angular/material/paginator`, che si porta dietro `mat-select` e `mat-option` |
|
|
30
|
-
| L1.5 | `ui.dialogs` | `DialogService` (estende `ShellService`) + confirm, delete, toast, `open`, e le aperture pigre dei dialog pesanti | tutto cio' che chiede qualcosa all'utente, piu' il toast |
|
|
31
|
-
| L2 | `ui.dialogs.auth` | credentials, reset-password, recover-password, prompt-otp, `OtpInputComponent`, `PasswordStrengthComponent` | solo route di login/account |
|
|
32
|
-
| L2 | `ui.dialogs.prompt` | prompt, prompt-date, prompt-time | porta `@angular/material/datepicker` |
|
|
33
|
-
| L2 | `ui.dialogs.select` | select, select-tree, send-to | porta `mat-tree`, `mat-list`, `mat-chips` |
|
|
34
|
-
| L2 | `ui.files` | file-input, file-preview, select-file, select-picture | |
|
|
35
|
-
| L2 | `ui.controls` | button-selector, button-toggle, chips-selector,
|
|
36
|
-
| L2 | `ui.
|
|
37
|
-
| L2 | `ui.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
| L2 | `ui.
|
|
48
|
-
| L2 | `ui.
|
|
49
|
-
| L2 | `
|
|
50
|
-
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
|
63
|
-
ui
|
|
64
|
-
| |
|
|
65
|
-
|
|
66
|
-
| |
|
|
67
|
-
|
|
68
|
-
|
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
`
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
- `
|
|
159
|
-
- `ui.
|
|
160
|
-
`
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
|
|
164
|
-
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
- `
|
|
175
|
-
- `
|
|
176
|
-
`
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
1
|
+
# ARS Utils
|
|
2
|
+
|
|
3
|
+
Common tools and standalone components shared among ARS Edizioni Angular based web applications.
|
|
4
|
+
|
|
5
|
+
Rispetto alla versione monolitica precedente adotta la struttura a entry point
|
|
6
|
+
introdotta con `@fabio.buscaroli/scm-utils`: code splitting e tree shaking sono il criterio di
|
|
7
|
+
ripartizione dei simboli, non un effetto collaterale.
|
|
8
|
+
|
|
9
|
+
## Platform
|
|
10
|
+
|
|
11
|
+
Angular 22 + Material
|
|
12
|
+
|
|
13
|
+
## Entry points
|
|
14
|
+
|
|
15
|
+
La libreria non espone un barrel unico: l'entry point secondario e' l'unica unita' di
|
|
16
|
+
code splitting riconosciuta da ng-packagr, quindi ogni gruppo di simboli che ha un ciclo
|
|
17
|
+
di vita proprio vive nel suo entry point. Importare sempre dal path specifico.
|
|
18
|
+
|
|
19
|
+
### Nucleo condiviso
|
|
20
|
+
|
|
21
|
+
| Livello | Entry point | Contenuto | Note |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| L0 | `core` | `SystemUtils`, models, definitions, pipe, direttive validator, servizi (broadcast, screen, theme, splash, environment), `LoginOAuthType` | nessuna dipendenza da Angular Material |
|
|
24
|
+
| L0 | `core.date` | `provideArsDateFns`, `provideArsLocalDates`, `MAT_DATE_FNS_FORMATS`, `arsLocalDateInterceptor`, `ARS_TIME_ZONE` | isola `@angular/material/core` + `datepicker` |
|
|
25
|
+
| L0 | `core.markdown` | `MarkdownUtils`, `FormatMarkdownPipe` | parser markdown, fuori dal percorso comune |
|
|
26
|
+
| L0 | `core.validators` | direttive validator per i form template-driven (`ValidatorDirective`, `ValidIfDirective`, `EqualsValidatorDirective`, `PasswordValidatorDirective`, `EmailsValidatorDirective`, ...) | isola `@angular/forms` (53 KB): `core` sta sul percorso di boot e non deve trascinarselo |
|
|
27
|
+
| L0.5 | `ui.shell` | `ShellService` (`info`, `error`, `busy*`, `wait`, `BusyTimer`), `ShellMessageComponent`, `ShellBusyComponent` | zero Material e zero CDK: e' quello che shell, interceptor, guard e app initializer possono permettersi sul percorso di boot |
|
|
28
|
+
| L1 | `ui` | `FlexLayoutModule`, `MediaObserver`, `UIService`, tipi dei dialog | kernel: deve restare magro, e non importa nulla da Material |
|
|
29
|
+
| L1 | `ui.paginator` | `PaginatorIntl` | isola `@angular/material/paginator`, che si porta dietro `mat-select` e `mat-option` |
|
|
30
|
+
| L1.5 | `ui.dialogs` | `DialogService` (estende `ShellService`) + confirm, delete, toast, `open`, e le aperture pigre dei dialog pesanti | tutto cio' che chiede qualcosa all'utente, piu' il toast |
|
|
31
|
+
| L2 | `ui.dialogs.auth` | credentials, reset-password, recover-password, prompt-otp, `OtpInputComponent`, `PasswordStrengthComponent` | solo route di login/account |
|
|
32
|
+
| L2 | `ui.dialogs.prompt` | prompt, prompt-date, prompt-time | porta `@angular/material/datepicker` |
|
|
33
|
+
| L2 | `ui.dialogs.select` | select, select-tree, send-to | porta `mat-tree`, `mat-list`, `mat-chips` |
|
|
34
|
+
| L2 | `ui.files` | file-input, file-preview, select-file, select-picture | |
|
|
35
|
+
| L2 | `ui.controls` | button-selector, button-toggle, chips-selector | base Material comune: button, icon, form-field |
|
|
36
|
+
| L2 | `ui.controls.date` | `MatDatepickerParseErrorFixDirective`, `CalendarEmptyHeader` | isola `@angular/material/datepicker`: `ui.dialogs.prompt` aggancia solo questo |
|
|
37
|
+
| L2 | `ui.controls.tree` | `TreePickerComponent` | isola `mat-tree`, `mat-tabs`, `mat-input`, `mat-checkbox`, che nessun altro controllo usa |
|
|
38
|
+
| L2 | `ui.filters` | `FilterBarComponent` + modello `Filters` | |
|
|
39
|
+
| L2 | `ui.navigation` | `NavigationBarComponent` + definizioni | shell applicativa |
|
|
40
|
+
|
|
41
|
+
### Specifici ARS
|
|
42
|
+
|
|
43
|
+
| Livello | Entry point | Contenuto | Dipendenze pesanti |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| L0.5 | `support.common` | `SupportService`, notifiche, definitions, messages | - |
|
|
46
|
+
| L0.5 | `evolution.common` | `EvolutionService`, account, compliance, login, interceptor auth | - |
|
|
47
|
+
| L2 | `ui.oauth` | `LoginOAuthComponent`, `LoginOAuthOkMSComponent` | `@azure/msal-angular`, `@azure/msal-browser` |
|
|
48
|
+
| L2 | `ui.help` | `HelpService`, `HelpViewerComponent`, modello dei capitoli | - |
|
|
49
|
+
| L2 | `ui.tinymce` | `TinymceEditorDirective`, `TinymceLoaderService`, `TinymceUtils`, `TinyMceEditorComponent`, `langs/it.js` | `tinymce` (caricato a runtime) |
|
|
50
|
+
| L2 | `ui.notifications` | `NotificationsBrowserComponent` (ex `support.ui`) | - |
|
|
51
|
+
| L2 | `clipper.common` | `ClipperService`, documents, login, canali e contatori non letti, interceptor auth | solo il necessario a consultare i documenti |
|
|
52
|
+
| L4 | `clipper.ui` | browser, document, references, search-* e `ClipperDocumentUtilsService` | `clipper.scss` |
|
|
53
|
+
|
|
54
|
+
I peer dependency opzionali (`@azure/msal-*`, `tinymce`) servono
|
|
55
|
+
solo a chi importa rispettivamente `ui.oauth` e `ui.tinymce`: sono dichiarati in
|
|
56
|
+
`peerDependenciesMeta.optional` proprio perche' nessun altro entry point li aggancia.
|
|
57
|
+
|
|
58
|
+
### Grafo delle dipendenze statiche
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
core core.date core.markdown core.validators ui.paginator ui.controls.date
|
|
62
|
+
| \
|
|
63
|
+
| ui.shell
|
|
64
|
+
| |
|
|
65
|
+
ui ------|-----------------------------------------------------------
|
|
66
|
+
| | | | | | | |
|
|
67
|
+
| | ui.controls ui.controls.tree ui.filters ui.navigation ui.dialogs.select clipper.common
|
|
68
|
+
| |
|
|
69
|
+
ui.dialogs <-- DialogService extends ShellService: dipende da `ui` E da `ui.shell`
|
|
70
|
+
| | | | | |
|
|
71
|
+
| ui.dialogs.auth ui.dialogs.prompt ui.files ui.help ui.oauth
|
|
72
|
+
| ui.notifications (+ support.common)
|
|
73
|
+
clipper.ui (+ clipper.common, ui.controls, ui.controls.date, ui.files, ui.dialogs.select)
|
|
74
|
+
|
|
75
|
+
`ui.dialogs` --- import() ---> ui.dialogs.{auth,prompt,select}, ui.files
|
|
76
|
+
Gli archi dinamici puntano all'insu' e sono l'unica ragione per cui quei quattro entry point
|
|
77
|
+
restano fuori dal bundle iniziale. Regge finche' NESSUNO di loro importa `DialogService`: per
|
|
78
|
+
`error()` e `busy()` iniettano `ShellService`.
|
|
79
|
+
|
|
80
|
+
`ui.controls.date` non dipende da nulla della libreria (solo `@angular/core` e
|
|
81
|
+
`@angular/material/datepicker`): e' cio' che permette al chunk di `ui.dialogs.prompt` di
|
|
82
|
+
agganciare la direttiva senza linkare il file di `ui.controls`.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`evolution.common` e `support.common` dipendono solo da `core`.
|
|
86
|
+
|
|
87
|
+
### Regole da rispettare
|
|
88
|
+
|
|
89
|
+
1. Il grafo **statico** tra entry point deve restare un DAG: `ui.dialogs` raggiunge i dialog
|
|
90
|
+
pesanti solo con `import()`, e quei quattro entry point non devono importare `DialogService`
|
|
91
|
+
in nessun modo — ng-packagr rifiuta la build con `circular dependency` al primo che lo fa.
|
|
92
|
+
Per messaggi e attesa iniettano `ShellService`, che sta sotto di loro nel grafo.
|
|
93
|
+
2. I tipi condivisi fra il facade e i dialog pesanti stanno in `ui` (`dialog.definitions.ts`).
|
|
94
|
+
Se un tipo servisse a entrambi e vivesse nel dialog, l'`import()` del facade tornerebbe statico.
|
|
95
|
+
3. Il facade usa `import type` per i tipi dei componenti e `import()` per i valori: e' quello
|
|
96
|
+
che tiene i dialog fuori dal bundle iniziale.
|
|
97
|
+
4. Dopo una modifica, verificare che gli `import()` sopravvivano alla build:
|
|
98
|
+
`grep -o "import('@arsedizioni[^']*')" dist/ars-utils/fesm2022/*ui.dialogs.mjs` deve stampare i nove.
|
|
99
|
+
5. `ui.shell` non importa nulla da `@angular/material` ne' da `@angular/cdk`, e nemmeno da `ui`.
|
|
100
|
+
E' l'unica ragione per cui esiste: se ci finisce dentro un solo simbolo di Material, la shell
|
|
101
|
+
torna a pagare l'intero stack sul percorso di boot. Da verificare dopo ogni build:
|
|
102
|
+
`grep -oE "@angular/(material|cdk)[^'\"]*" dist/ars-utils/fesm2022/*ui.shell.mjs` non deve
|
|
103
|
+
stampare nulla.
|
|
104
|
+
7. Le sovrapposizioni di `ui.shell` stanno nel **top layer** del browser, non nello stack del CDK.
|
|
105
|
+
Da Angular CDK 22 ogni overlay viene aperto come `popover="manual"`, quindi un dialog Material
|
|
106
|
+
non sta piu' a z-index 1000: sta nel top layer, che viene disegnato sopra tutta la pagina
|
|
107
|
+
qualunque cosa dica lo z-index della pagina. Un numero, per quanto alto, non ci arriva sopra:
|
|
108
|
+
per questo `ShellService` promuove anche i suoi due overlay con `showPopover()`.
|
|
109
|
+
Nel top layer l'ordine e' quello di promozione, l'ultimo promosso sta sopra. Da qui le tre
|
|
110
|
+
regole esplicite: `setBusy()` ripromuove il messaggio dopo aver alzato il busy,
|
|
111
|
+
`DialogService.open()` chiama `raiseMessage()` dopo aver aperto un dialog, e chiama
|
|
112
|
+
`clearBusy(true)` senza periodo di grazia. La coppia `--ars-shell-dialog-z-index`/`--ars-shell-busy-z-index`
|
|
113
|
+
(1100/1090) resta valida e serve ancora: e' quello che ordina gli overlay sui browser senza
|
|
114
|
+
Popover API, dove nemmeno il CDK la usa. Se un'applicazione avesse bisogno del vecchio
|
|
115
|
+
comportamento puo' spegnere la Popover API del CDK con
|
|
116
|
+
`{ provide: OVERLAY_DEFAULT_CONFIG, useValue: { usePopover: false } }`.
|
|
117
|
+
6. `ui` non importa valori da Material. `PaginatorIntl` e' uscito da li' proprio per questo: era
|
|
118
|
+
l'unico simbolo che ne dipendeva, e faceva pagare `mat-paginator` + `mat-select` + `mat-option`
|
|
119
|
+
a chiunque toccasse `ui.dialogs`. Restano due eccezioni, entrambe volute:
|
|
120
|
+
`MatFormFieldAppearance` in `dialog.definitions.ts`, che e' un `import type` e quindi sparisce
|
|
121
|
+
in compilazione, e `@angular/cdk/layout` (1 KB) di cui `MediaObserver` ha bisogno.
|
|
122
|
+
|
|
123
|
+
### Da dove parte un'applicazione
|
|
124
|
+
|
|
125
|
+
`core` + `ui.shell`. Sono i due entry point che una applicazione ARS carica comunque prima di
|
|
126
|
+
avere una rotta, e gli unici due che non costano Material. `core` porta `SystemUtils`, i modelli,
|
|
127
|
+
`BroadcastService`, `SplashService`, `EnvironmentService`, `ThemeService`; `ui.shell` porta il modo
|
|
128
|
+
di dire all'utente che la sessione e' scaduta o che l'API non risponde.
|
|
129
|
+
|
|
130
|
+
Non sono un entry point solo, e non devono diventarlo: `core` e' L0 e ci dipendono anche
|
|
131
|
+
`clipper.common`, `evolution.common` e `support.common`, che di interfaccia non ne hanno. Fonderli
|
|
132
|
+
significherebbe far dipendere tre entry point headless da uno di UI, cioe' rompere la regola 1.
|
|
133
|
+
|
|
134
|
+
La conseguenza pratica per chi scrive l'applicazione:
|
|
135
|
+
|
|
136
|
+
- shell, interceptor, guard, `provideAppInitializer` -> `ShellService` di `ui.shell`
|
|
137
|
+
- componenti di rotta -> `DialogService` di `ui.dialogs`, che apre anche i dialog pesanti
|
|
138
|
+
|
|
139
|
+
I tre servizi sono una catena, non tre servizi diversi:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
ShellService info, error, busy*, wait, busyTimer ui.shell
|
|
143
|
+
└ DialogService + open, confirm, delete, toast, ui.dialogs
|
|
144
|
+
select, prompt, sendTo, ... (pigri)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Quindi chi inietta `DialogService` ha tutto quello che aveva prima: `info`, `error` e `busy` non
|
|
148
|
+
sono spariti, sono ereditati. E non esistono in due copie — c'e' una implementazione sola, quella
|
|
149
|
+
senza Material.
|
|
150
|
+
|
|
151
|
+
`ShellService.info()` e `ShellService.error()` hanno gli stessi parametri, nello stesso ordine,
|
|
152
|
+
delle omonime di `DialogService`: spostare una chiamata dall'una all'altra e' un cambio di servizio
|
|
153
|
+
iniettato e nient'altro.
|
|
154
|
+
|
|
155
|
+
## Differenze rispetto alla versione precedente (22.1.x monolitica)
|
|
156
|
+
|
|
157
|
+
- Nessun barrel radice: `@arsedizioni/ars-utils` esporta solo `ARS_UTILS_VERSION`.
|
|
158
|
+
- `ui` non contiene piu' i dialog: `DialogService` sta in `ui.dialogs`.
|
|
159
|
+
- `ui.application` non esiste piu': i nove metodi che apriva stanno in `DialogService`. I controlli sono in
|
|
160
|
+
`ui.controls`, i file in `ui.files`, i filtri in `ui.filters`, la navigazione in `ui.navigation`.
|
|
161
|
+
- `SystemUtils.markdownToHtml` non esiste piu': usare `MarkdownUtils.toHtml` da `core.markdown`.
|
|
162
|
+
- `SelectableModel` espone `first` e `selectedAny` al posto di `selectedFirst` e `selectedAll`.
|
|
163
|
+
- `support.ui` si chiama `ui.notifications`, `help` si chiama `ui.help`, `tinymce` si chiama `ui.tinymce`.
|
|
164
|
+
- `PaginatorIntl` non sta piu' in `ui`: sta in `ui.paginator`.
|
|
165
|
+
- `ui.tinymce` non dipende piu' da `@tinymce/tinymce-angular`: l'editor e' la direttiva
|
|
166
|
+
`[tinymceEditor]` su una `<textarea>`, e TinyMCE viene caricato a runtime da
|
|
167
|
+
`TinymceLoaderService`. Il componente `<editor>` non esiste piu'.
|
|
168
|
+
- Le direttive validator non stanno piu' in `core`: stanno in `core.validators`, che e' l'unico
|
|
169
|
+
entry point del nucleo a dipendere da `@angular/forms`.
|
|
170
|
+
- I token CSS della shell stanno tutti sotto `--ars-shell-dialog-*` e `--ars-shell-busy-*`: prima
|
|
171
|
+
erano `--ars-dialog-*`, `--ars-scrim-color`, `--ars-busy-*` e `--ars-progress-track-color`, che si
|
|
172
|
+
confondevano con `--ars-dialog-item-*`, cioe' i dialog Material veri. Un'applicazione che ne
|
|
173
|
+
sovrascriveva qualcuno deve rinominarlo.
|
|
174
|
+
- La shell non deve piu' iniettare `DialogService` per mostrare un errore: c'e' `ShellService` in `ui.shell`.
|
|
175
|
+
- `info`, `error`, `busy`, `busySpinner`, `busyHourglass`, `wait`, `busyTimer` e `clearBusy` sono
|
|
176
|
+
passati a `ShellService`. `DialogService` li eredita, quindi nessuna chiamata cambia.
|
|
177
|
+
- `info()` e `error()` restituiscono `ShellMessageRef` invece di `MatDialogRef<InfoDialogComponent>`.
|
|
178
|
+
In myARS nessun chiamante usava quel valore; controllare nelle altre applicazioni.
|
|
179
|
+
- `clearBusy()` accetta `immediate`: `clearBusy(true)` non aspetta i 500 ms di grazia.
|
|
180
|
+
- `BusyTimer` si importa da `ui.shell`, non piu' da `ui.dialogs`.
|
|
181
|
+
- `InfoDialogComponent` e `BusyDialogComponent` non esistono piu': li sostituiscono
|
|
182
|
+
`ShellMessageComponent` e `ShellBusyComponent`, senza Material.
|
|
183
|
+
|
|
184
|
+
## Authors
|
|
185
|
+
Fabio Buscaroli, Alberto Doria
|
|
@@ -2618,10 +2618,10 @@ class ClipperLoginService {
|
|
|
2618
2618
|
clear(clearOAuthToken = true) {
|
|
2619
2619
|
this.core.clear(clearOAuthToken);
|
|
2620
2620
|
}
|
|
2621
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
2622
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
2621
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperLoginService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
2622
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ClipperLoginService }); }
|
|
2623
2623
|
}
|
|
2624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
2624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperLoginService, decorators: [{
|
|
2625
2625
|
type: Service
|
|
2626
2626
|
}] });
|
|
2627
2627
|
|
|
@@ -2901,10 +2901,10 @@ class ClipperCoreService {
|
|
|
2901
2901
|
.pipe(catchError$1(() => { return EMPTY; }))
|
|
2902
2902
|
.subscribe();
|
|
2903
2903
|
}
|
|
2904
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
2905
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
2904
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperCoreService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
2905
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ClipperCoreService }); }
|
|
2906
2906
|
}
|
|
2907
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
2907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperCoreService, decorators: [{
|
|
2908
2908
|
type: Service
|
|
2909
2909
|
}] });
|
|
2910
2910
|
|
|
@@ -2950,10 +2950,10 @@ class ClipperAccountService {
|
|
|
2950
2950
|
}
|
|
2951
2951
|
this.broadcastService.sendMessage(ClipperMessages.COMMAND_DASHBOARD_UPDATED);
|
|
2952
2952
|
}
|
|
2953
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
2954
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
2953
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperAccountService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
2954
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ClipperAccountService }); }
|
|
2955
2955
|
}
|
|
2956
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
2956
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperAccountService, decorators: [{
|
|
2957
2957
|
type: Service
|
|
2958
2958
|
}] });
|
|
2959
2959
|
|
|
@@ -3295,10 +3295,10 @@ class ClipperDocumentsService {
|
|
|
3295
3295
|
return this.httpClient
|
|
3296
3296
|
.post(this.core.serviceUri + '/documents/searches/delete', { id: id });
|
|
3297
3297
|
}
|
|
3298
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
3299
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
3298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperDocumentsService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3299
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ClipperDocumentsService }); }
|
|
3300
3300
|
}
|
|
3301
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
3301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperDocumentsService, decorators: [{
|
|
3302
3302
|
type: Service
|
|
3303
3303
|
}] });
|
|
3304
3304
|
|
|
@@ -3384,10 +3384,10 @@ class ClipperService {
|
|
|
3384
3384
|
ping() {
|
|
3385
3385
|
this.core.ping();
|
|
3386
3386
|
}
|
|
3387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
3388
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
3387
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3388
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ClipperService }); }
|
|
3389
3389
|
}
|
|
3390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
3390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ClipperService, decorators: [{
|
|
3391
3391
|
type: Service
|
|
3392
3392
|
}] });
|
|
3393
3393
|
|