uni-app-fe 0.0.28 → 0.0.31
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/fesm2022/manager.mjs +81 -0
- package/fesm2022/manager.mjs.map +1 -0
- package/fesm2022/pipe.mjs +195 -0
- package/fesm2022/pipe.mjs.map +1 -0
- package/fesm2022/service.mjs +401 -0
- package/fesm2022/service.mjs.map +1 -0
- package/fesm2022/uni-app-fe-component.mjs +238 -0
- package/fesm2022/uni-app-fe-component.mjs.map +1 -0
- package/fesm2022/uni-app-fe.mjs +230 -228
- package/fesm2022/uni-app-fe.mjs.map +1 -1
- package/package.json +17 -1
- package/types/manager.d.ts +20 -0
- package/types/pipe.d.ts +73 -0
- package/types/service.d.ts +98 -0
- package/types/uni-app-fe-component.d.ts +130 -0
- package/types/uni-app-fe.d.ts +128 -150
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import LoadPanel from 'devextreme/ui/load_panel';
|
|
4
|
+
import { custom } from 'devextreme/ui/dialog';
|
|
5
|
+
import Popup from 'devextreme/ui/popup';
|
|
6
|
+
import { UniLocaleManager } from 'uni-manager';
|
|
7
|
+
import notify from 'devextreme/ui/notify';
|
|
8
|
+
|
|
9
|
+
class UniLoaderService {
|
|
10
|
+
constructor() {
|
|
11
|
+
const container = document.querySelector('body');
|
|
12
|
+
const content = document.createElement('div');
|
|
13
|
+
container.append(content);
|
|
14
|
+
this.loadPanel = new LoadPanel(content, {
|
|
15
|
+
showIndicator: true,
|
|
16
|
+
showPane: true,
|
|
17
|
+
shading: true,
|
|
18
|
+
shadingColor: 'rgba(0,0,0,0.4)',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/* ------------------------------------- Methods ------------------------------------- */
|
|
22
|
+
show() {
|
|
23
|
+
this.loadPanel.show();
|
|
24
|
+
}
|
|
25
|
+
hide() {
|
|
26
|
+
this.loadPanel.hide();
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
29
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniLoaderService, providedIn: 'root' }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniLoaderService, decorators: [{
|
|
32
|
+
type: Injectable,
|
|
33
|
+
args: [{
|
|
34
|
+
providedIn: 'root',
|
|
35
|
+
}]
|
|
36
|
+
}], ctorParameters: () => [] });
|
|
37
|
+
|
|
38
|
+
class UniPopupService {
|
|
39
|
+
constructor() {
|
|
40
|
+
/* Variables */
|
|
41
|
+
this.instances = new Map();
|
|
42
|
+
}
|
|
43
|
+
/* -------------------------------- Methods: popup -------------------------------- */
|
|
44
|
+
async createPopupConfirm(args) {
|
|
45
|
+
const { message, html, onConfirm, lblTitle, maxWidth } = args;
|
|
46
|
+
// Creazione del contenuto come stringa HTML
|
|
47
|
+
const messageHtml = html ??
|
|
48
|
+
`
|
|
49
|
+
<div style="
|
|
50
|
+
white-space: pre-line;
|
|
51
|
+
word-break: break-all;
|
|
52
|
+
padding: 0rem 1rem 1rem 1rem;
|
|
53
|
+
max-width: ${typeof maxWidth === 'number' ? maxWidth + 'px' : '800px'};
|
|
54
|
+
">
|
|
55
|
+
${message ?? ''}
|
|
56
|
+
</div>
|
|
57
|
+
`;
|
|
58
|
+
await custom({
|
|
59
|
+
title: lblTitle && UniLocaleManager.translate(lblTitle),
|
|
60
|
+
dragEnabled: false,
|
|
61
|
+
showTitle: !!lblTitle,
|
|
62
|
+
messageHtml,
|
|
63
|
+
buttons: [
|
|
64
|
+
{ text: UniLocaleManager.translate('Confirm', 'btn'), onClick: onConfirm },
|
|
65
|
+
{ text: UniLocaleManager.translate('Cancel', 'btn'), onClick: undefined },
|
|
66
|
+
],
|
|
67
|
+
}).show();
|
|
68
|
+
}
|
|
69
|
+
async createPopup(id, args) {
|
|
70
|
+
/* Recupera args */
|
|
71
|
+
const { type, message, html, title, detail, closable } = args;
|
|
72
|
+
/* Pulsanti: dettaglio (errore o altro) */
|
|
73
|
+
const toolbarItems = [];
|
|
74
|
+
if (detail) {
|
|
75
|
+
const detailsButtons = this.createDetailsButtons(id, message ?? html, html !== undefined, detail);
|
|
76
|
+
toolbarItems.push(...detailsButtons);
|
|
77
|
+
}
|
|
78
|
+
/* Aggiunge pulsante per la chiusura del popup (possibile poi solo da qui) */
|
|
79
|
+
if (closable !== false) {
|
|
80
|
+
const closeButton = this.createCloseButton(id);
|
|
81
|
+
toolbarItems.push(closeButton);
|
|
82
|
+
}
|
|
83
|
+
/* Crea popup passando esplicitamente l'informazione sul formato del contenuto */
|
|
84
|
+
const instance = await this.createPopupInstance(id, {
|
|
85
|
+
type,
|
|
86
|
+
title,
|
|
87
|
+
content: message ?? html,
|
|
88
|
+
isContentHtml: !!html,
|
|
89
|
+
toolbarItems,
|
|
90
|
+
});
|
|
91
|
+
return instance;
|
|
92
|
+
}
|
|
93
|
+
async createPopupError(id = undefined, args) {
|
|
94
|
+
/* Recupera args */
|
|
95
|
+
const { title, message, detail, closable } = args;
|
|
96
|
+
/* Crea popup */
|
|
97
|
+
const instance = await this.createPopup(id ?? `popup-${Date.now()}`, {
|
|
98
|
+
type: 'error',
|
|
99
|
+
title: title ?? UniLocaleManager.translate('ErrorFrontend'),
|
|
100
|
+
message,
|
|
101
|
+
detail,
|
|
102
|
+
closable,
|
|
103
|
+
});
|
|
104
|
+
return instance;
|
|
105
|
+
}
|
|
106
|
+
async createPopupErrorHttp(args) {
|
|
107
|
+
/* Recupera args */
|
|
108
|
+
const { ref, err } = args;
|
|
109
|
+
/* Creazione id */
|
|
110
|
+
const id = `popup-${ref ?? Date.now()}`;
|
|
111
|
+
/* Message detail */
|
|
112
|
+
const { status, statusText, message, error: errorResponse } = err;
|
|
113
|
+
let errorDetail = `[${status} - ${statusText}]: ${message}`;
|
|
114
|
+
if (errorResponse) {
|
|
115
|
+
try {
|
|
116
|
+
if (errorResponse instanceof Blob) {
|
|
117
|
+
errorDetail += `\n ${await errorResponse.text()}`;
|
|
118
|
+
}
|
|
119
|
+
else if (typeof errorResponse === 'string') {
|
|
120
|
+
errorDetail += `\n ${errorResponse}`;
|
|
121
|
+
}
|
|
122
|
+
else if (typeof errorResponse === 'object') {
|
|
123
|
+
errorDetail += `\n ${JSON.stringify(errorResponse, undefined, 2)}`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
errorDetail += `\n ${String(errorResponse)}`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
errorDetail += `\n Error processing the error message: ${error}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/* Crea popup */
|
|
134
|
+
const instance = this.createPopupError(id, {
|
|
135
|
+
title: UniLocaleManager.translate(`ErrorBackend`),
|
|
136
|
+
message: UniLocaleManager.translate(`error${err.status}`),
|
|
137
|
+
detail: {
|
|
138
|
+
message: errorDetail,
|
|
139
|
+
messageToCopy: JSON.stringify(err),
|
|
140
|
+
},
|
|
141
|
+
closable: true,
|
|
142
|
+
});
|
|
143
|
+
return instance;
|
|
144
|
+
}
|
|
145
|
+
async createPopupErrorCustom(args) {
|
|
146
|
+
/* Recupera args */
|
|
147
|
+
const { ref, label, interpolationParameters } = args;
|
|
148
|
+
/* Creazione id */
|
|
149
|
+
const id = `popup-${ref ?? Date.now()}`;
|
|
150
|
+
/* Crea popup */
|
|
151
|
+
const instance = this.createPopupError(id, {
|
|
152
|
+
title: UniLocaleManager.translate('ErrorBackendCustom'),
|
|
153
|
+
message: UniLocaleManager.translate(label, 'lbl', interpolationParameters),
|
|
154
|
+
closable: true,
|
|
155
|
+
});
|
|
156
|
+
return instance;
|
|
157
|
+
}
|
|
158
|
+
async updateContentPopup(id, content) {
|
|
159
|
+
/* Recupero popup */
|
|
160
|
+
const popup = this.instances.get(id);
|
|
161
|
+
if (!popup) {
|
|
162
|
+
throw new Error(`Popup not found (id: ${id}`);
|
|
163
|
+
}
|
|
164
|
+
/* Recupero elemento html del popup */
|
|
165
|
+
const element = popup.content().firstElementChild;
|
|
166
|
+
if (!element)
|
|
167
|
+
return;
|
|
168
|
+
/* Selezione del metodo di rendering e del layout in base alla proprietà definita */
|
|
169
|
+
if (content.html === undefined) {
|
|
170
|
+
this.setContentCenter(element, content.message);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.setContent(element, content.html, true);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async closePopup(id) {
|
|
177
|
+
/* Recupero popup */
|
|
178
|
+
const popup = this.instances.get(id);
|
|
179
|
+
if (!popup) {
|
|
180
|
+
throw new Error(`Popup not found (id: ${id}`);
|
|
181
|
+
}
|
|
182
|
+
/* Esecuzione del processo di chiusura asincrona del componente DevExtreme */
|
|
183
|
+
await popup.hide();
|
|
184
|
+
}
|
|
185
|
+
/* -------------------------------- Methods: instance -------------------------------- */
|
|
186
|
+
async createPopupInstance(id, args) {
|
|
187
|
+
/* Recupera argomenti */
|
|
188
|
+
const { type, title, content, isContentHtml, toolbarItems = [] } = args;
|
|
189
|
+
/* Evita doppia istanza con lo stesso id */
|
|
190
|
+
const popup = this.instances.get(id);
|
|
191
|
+
if (popup) {
|
|
192
|
+
popup.show();
|
|
193
|
+
return popup;
|
|
194
|
+
}
|
|
195
|
+
/* Crea container del popup */
|
|
196
|
+
const container = document.createElement('div');
|
|
197
|
+
document.body.append(container);
|
|
198
|
+
/* Crea popup */
|
|
199
|
+
const instance = new Popup(container, {
|
|
200
|
+
title: title ?? '',
|
|
201
|
+
showTitle: !!title,
|
|
202
|
+
deferRendering: false,
|
|
203
|
+
maxHeight: 500,
|
|
204
|
+
maxWidth: 1000,
|
|
205
|
+
dragEnabled: false,
|
|
206
|
+
showCloseButton: false,
|
|
207
|
+
hideOnOutsideClick: false,
|
|
208
|
+
shading: true,
|
|
209
|
+
wrapperAttr: {
|
|
210
|
+
id,
|
|
211
|
+
class: `uni-popup-${type ?? 'info'}`,
|
|
212
|
+
},
|
|
213
|
+
toolbarItems,
|
|
214
|
+
contentTemplate: () => {
|
|
215
|
+
const element = document.createElement('div');
|
|
216
|
+
element.style.whiteSpace = 'pre-line';
|
|
217
|
+
element.style.wordBreak = 'break-all';
|
|
218
|
+
element.style.height = '100%';
|
|
219
|
+
// Sceglie il metodo di iniezione e lo stile corretto in base al tipo di contenuto
|
|
220
|
+
if (isContentHtml) {
|
|
221
|
+
this.setContent(element, content, true);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.setContentCenter(element, content);
|
|
225
|
+
}
|
|
226
|
+
return element;
|
|
227
|
+
},
|
|
228
|
+
onHidden: async () => {
|
|
229
|
+
// Rimozione del riferimento dalla mappa per prevenire interazioni concorrenti
|
|
230
|
+
this.instances.delete(id);
|
|
231
|
+
// Rilascio delle risorse allocate dal widget al termine dell'animazione di uscita
|
|
232
|
+
instance.dispose();
|
|
233
|
+
// Rimozione definitiva dell'elemento HTML dal Document Object Model (DOM)
|
|
234
|
+
instance.element()?.remove();
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
/* Mostra popup */
|
|
238
|
+
this.instances.set(id, instance);
|
|
239
|
+
await instance.show();
|
|
240
|
+
return instance;
|
|
241
|
+
}
|
|
242
|
+
/* -------------------------------- Methods: utils -------------------------------- */
|
|
243
|
+
createCloseButton(id) {
|
|
244
|
+
return {
|
|
245
|
+
widget: 'dxButton',
|
|
246
|
+
toolbar: 'bottom',
|
|
247
|
+
location: 'after',
|
|
248
|
+
options: {
|
|
249
|
+
type: 'normal',
|
|
250
|
+
icon: 'close',
|
|
251
|
+
text: UniLocaleManager.translate('Close', 'btn'),
|
|
252
|
+
stylingMode: 'contained',
|
|
253
|
+
onClick: () => this.closePopup(id),
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
createDetailsButtons(id, content, isContentHtml, detail) {
|
|
258
|
+
// Variabile di stato per i dettagli
|
|
259
|
+
let inShow = false;
|
|
260
|
+
/* Pulsanti: 'dettagli' e 'indietro */
|
|
261
|
+
const items = [
|
|
262
|
+
{
|
|
263
|
+
widget: 'dxButton',
|
|
264
|
+
toolbar: 'bottom',
|
|
265
|
+
location: 'before',
|
|
266
|
+
options: {
|
|
267
|
+
type: 'normal',
|
|
268
|
+
icon: 'find',
|
|
269
|
+
text: UniLocaleManager.translate('Details', 'btn'),
|
|
270
|
+
stylingMode: 'contained',
|
|
271
|
+
onClick: async (e) => {
|
|
272
|
+
const popup = this.instances.get(id);
|
|
273
|
+
if (!popup) {
|
|
274
|
+
throw new Error(`Popup not found (id: ${id}`);
|
|
275
|
+
}
|
|
276
|
+
const element = popup.content().firstElementChild;
|
|
277
|
+
if (!element)
|
|
278
|
+
return;
|
|
279
|
+
inShow = !inShow;
|
|
280
|
+
if (inShow) {
|
|
281
|
+
this.setContent(element, detail.message, false);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Sceglie il metodo di iniezione e lo stile corretto in base al tipo di contenuto
|
|
285
|
+
if (isContentHtml) {
|
|
286
|
+
this.setContent(element, content, true);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
this.setContentCenter(element, content);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
e.component.option({
|
|
293
|
+
text: UniLocaleManager.translate(inShow ? 'Back' : 'Details', 'btn'),
|
|
294
|
+
icon: inShow ? 'back' : 'find',
|
|
295
|
+
});
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
widget: 'dxButton',
|
|
301
|
+
toolbar: 'bottom',
|
|
302
|
+
location: 'before',
|
|
303
|
+
options: {
|
|
304
|
+
type: 'normal',
|
|
305
|
+
icon: 'refresh',
|
|
306
|
+
text: UniLocaleManager.translate('Refresh', 'btn'),
|
|
307
|
+
stylingMode: 'contained',
|
|
308
|
+
onClick: () => location.reload(),
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
];
|
|
312
|
+
/* Pulsanti: 'copiare dettagli' */
|
|
313
|
+
if (detail.messageToCopy) {
|
|
314
|
+
items.push({
|
|
315
|
+
visible: globalThis.isSecureContext,
|
|
316
|
+
widget: 'dxButton',
|
|
317
|
+
toolbar: 'bottom',
|
|
318
|
+
location: 'after',
|
|
319
|
+
options: {
|
|
320
|
+
type: 'normal',
|
|
321
|
+
icon: 'copy',
|
|
322
|
+
text: UniLocaleManager.translate('Copy', 'btn'),
|
|
323
|
+
stylingMode: 'contained',
|
|
324
|
+
onClick: () => navigator?.clipboard?.writeText(detail.messageToCopy),
|
|
325
|
+
},
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return items;
|
|
329
|
+
}
|
|
330
|
+
setContent(element, content, isContentHtml) {
|
|
331
|
+
if (isContentHtml) {
|
|
332
|
+
element.innerHTML = content;
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
element.textContent = content;
|
|
336
|
+
}
|
|
337
|
+
element.style.display = 'block';
|
|
338
|
+
element.style.textAlign = 'left';
|
|
339
|
+
element.style.alignItems = ''; // Reset flexbox
|
|
340
|
+
element.style.justifyContent = ''; // Reset flexbox
|
|
341
|
+
}
|
|
342
|
+
setContentCenter(element, content) {
|
|
343
|
+
element.textContent = content;
|
|
344
|
+
element.style.display = 'flex';
|
|
345
|
+
element.style.alignItems = 'center';
|
|
346
|
+
element.style.justifyContent = 'center';
|
|
347
|
+
element.style.textAlign = 'center';
|
|
348
|
+
}
|
|
349
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniPopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
350
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniPopupService, providedIn: 'root' }); }
|
|
351
|
+
}
|
|
352
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniPopupService, decorators: [{
|
|
353
|
+
type: Injectable,
|
|
354
|
+
args: [{
|
|
355
|
+
providedIn: 'root',
|
|
356
|
+
}]
|
|
357
|
+
}] });
|
|
358
|
+
|
|
359
|
+
class UniToastService {
|
|
360
|
+
success(message, config) {
|
|
361
|
+
this.show(message, 'success', config);
|
|
362
|
+
}
|
|
363
|
+
info(message, config) {
|
|
364
|
+
this.show(message, 'info', config);
|
|
365
|
+
}
|
|
366
|
+
warning(message, config) {
|
|
367
|
+
this.show(message, 'warning', config);
|
|
368
|
+
}
|
|
369
|
+
error(message, config) {
|
|
370
|
+
this.show(message, 'error', config);
|
|
371
|
+
}
|
|
372
|
+
/* ----------------------- Metodi: utils ----------------------- */
|
|
373
|
+
show(message, type, config) {
|
|
374
|
+
notify({
|
|
375
|
+
message,
|
|
376
|
+
type,
|
|
377
|
+
height: 50,
|
|
378
|
+
width: 400,
|
|
379
|
+
displayTime: config?.duration ?? 4000,
|
|
380
|
+
animation: {
|
|
381
|
+
show: { type: 'fade', duration: 400, from: 0, to: 1 },
|
|
382
|
+
hide: { type: 'fade', duration: 300, from: 1, to: 0 },
|
|
383
|
+
},
|
|
384
|
+
}, { position: 'bottom center', direction: 'up-push' });
|
|
385
|
+
}
|
|
386
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
387
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniToastService, providedIn: 'root' }); }
|
|
388
|
+
}
|
|
389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniToastService, decorators: [{
|
|
390
|
+
type: Injectable,
|
|
391
|
+
args: [{
|
|
392
|
+
providedIn: 'root',
|
|
393
|
+
}]
|
|
394
|
+
}] });
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Generated bundle index. Do not edit.
|
|
398
|
+
*/
|
|
399
|
+
|
|
400
|
+
export { UniLoaderService, UniPopupService, UniToastService };
|
|
401
|
+
//# sourceMappingURL=service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.mjs","sources":["../../../projects/uni-app-fe/service/uni-loader.service.ts","../../../projects/uni-app-fe/service/uni-popup.service.ts","../../../projects/uni-app-fe/service/uni-toast.service.ts","../../../projects/uni-app-fe/service/service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport LoadPanel from 'devextreme/ui/load_panel';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UniLoaderService {\r\n /* Load Panel */\r\n private loadPanel: LoadPanel;\r\n\r\n constructor() {\r\n const container = document.querySelector('body');\r\n const content: HTMLDivElement = document.createElement('div');\r\n container!.append(content);\r\n\r\n this.loadPanel = new LoadPanel(content, {\r\n showIndicator: true,\r\n showPane: true,\r\n shading: true,\r\n shadingColor: 'rgba(0,0,0,0.4)',\r\n });\r\n }\r\n\r\n /* ------------------------------------- Methods ------------------------------------- */\r\n public show(): void {\r\n this.loadPanel.show();\r\n }\r\n\r\n public hide(): void {\r\n this.loadPanel.hide();\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ClickEvent } from 'devextreme/ui/button_types';\r\nimport { custom } from 'devextreme/ui/dialog';\r\nimport Popup, { ToolbarItem } from 'devextreme/ui/popup';\r\nimport { UniLocaleManager } from 'uni-manager';\r\n\r\nexport type PopupType = 'info' | 'warning' | 'error';\r\n\r\nexport type Instance = Popup<{\r\n title: string;\r\n showTitle: boolean;\r\n deferRendering: boolean;\r\n maxHeight: number;\r\n maxWidth: number;\r\n dragEnabled: boolean;\r\n showCloseButton: boolean;\r\n hideOnOutsideClick: boolean;\r\n shading: boolean;\r\n wrapperAttr: { id: string; class: string };\r\n toolbarItems: ToolbarItem[];\r\n contentTemplate: () => HTMLDivElement;\r\n onHidden: () => Promise<void>;\r\n}>;\r\n\r\nexport type PopupContent =\r\n | {\r\n message: string;\r\n html?: never;\r\n }\r\n | {\r\n message?: never;\r\n html: string;\r\n };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UniPopupService {\r\n /* Variables */\r\n private instances = new Map<string, Instance>();\r\n\r\n /* -------------------------------- Methods: popup -------------------------------- */\r\n public async createPopupConfirm(\r\n args: PopupContent & {\r\n onConfirm: (e: ClickEvent) => void;\r\n lblTitle?: string;\r\n maxWidth?: number;\r\n },\r\n ): Promise<void> {\r\n const { message, html, onConfirm, lblTitle, maxWidth } = args;\r\n\r\n // Creazione del contenuto come stringa HTML\r\n const messageHtml =\r\n html ??\r\n `\r\n <div style=\"\r\n white-space: pre-line;\r\n word-break: break-all;\r\n padding: 0rem 1rem 1rem 1rem;\r\n max-width: ${typeof maxWidth === 'number' ? maxWidth + 'px' : '800px'};\r\n \">\r\n ${message ?? ''}\r\n </div>\r\n `;\r\n\r\n await custom({\r\n title: lblTitle && UniLocaleManager.translate(lblTitle),\r\n dragEnabled: false,\r\n showTitle: !!lblTitle,\r\n messageHtml,\r\n buttons: [\r\n { text: UniLocaleManager.translate('Confirm', 'btn'), onClick: onConfirm },\r\n { text: UniLocaleManager.translate('Cancel', 'btn'), onClick: undefined },\r\n ],\r\n }).show();\r\n }\r\n\r\n public async createPopup(\r\n id: string,\r\n args: PopupContent & {\r\n type?: PopupType;\r\n title?: string;\r\n detail?: { message: string; messageToCopy?: string };\r\n closable?: boolean;\r\n },\r\n ): Promise<Instance> {\r\n /* Recupera args */\r\n const { type, message, html, title, detail, closable } = args;\r\n\r\n /* Pulsanti: dettaglio (errore o altro) */\r\n const toolbarItems: ToolbarItem[] = [];\r\n if (detail) {\r\n const detailsButtons = this.createDetailsButtons(\r\n id,\r\n message ?? html,\r\n html !== undefined,\r\n detail,\r\n );\r\n toolbarItems.push(...detailsButtons);\r\n }\r\n\r\n /* Aggiunge pulsante per la chiusura del popup (possibile poi solo da qui) */\r\n if (closable !== false) {\r\n const closeButton = this.createCloseButton(id);\r\n toolbarItems.push(closeButton);\r\n }\r\n\r\n /* Crea popup passando esplicitamente l'informazione sul formato del contenuto */\r\n const instance = await this.createPopupInstance(id, {\r\n type,\r\n title,\r\n content: message ?? html,\r\n isContentHtml: !!html,\r\n toolbarItems,\r\n });\r\n return instance;\r\n }\r\n\r\n public async createPopupError(\r\n id: string | undefined = undefined,\r\n args: {\r\n title?: string;\r\n message: string;\r\n detail?: { message: string; messageToCopy?: string };\r\n closable?: boolean;\r\n },\r\n ): Promise<Instance> {\r\n /* Recupera args */\r\n const { title, message, detail, closable } = args;\r\n\r\n /* Crea popup */\r\n const instance = await this.createPopup(id ?? `popup-${Date.now()}`, {\r\n type: 'error',\r\n title: title ?? UniLocaleManager.translate('ErrorFrontend'),\r\n message,\r\n detail,\r\n closable,\r\n });\r\n return instance;\r\n }\r\n\r\n public async createPopupErrorHttp(args: {\r\n ref?: string;\r\n err: HttpErrorResponse;\r\n }): Promise<Instance> {\r\n /* Recupera args */\r\n const { ref, err } = args;\r\n\r\n /* Creazione id */\r\n const id = `popup-${ref ?? Date.now()}`;\r\n\r\n /* Message detail */\r\n const { status, statusText, message, error: errorResponse } = err;\r\n let errorDetail = `[${status} - ${statusText}]: ${message}`;\r\n if (errorResponse) {\r\n try {\r\n if (errorResponse instanceof Blob) {\r\n errorDetail += `\\n ${await errorResponse.text()}`;\r\n } else if (typeof errorResponse === 'string') {\r\n errorDetail += `\\n ${errorResponse}`;\r\n } else if (typeof errorResponse === 'object') {\r\n errorDetail += `\\n ${JSON.stringify(errorResponse, undefined, 2)}`;\r\n } else {\r\n errorDetail += `\\n ${String(errorResponse)}`;\r\n }\r\n } catch (error) {\r\n errorDetail += `\\n Error processing the error message: ${error}`;\r\n }\r\n }\r\n\r\n /* Crea popup */\r\n const instance = this.createPopupError(id, {\r\n title: UniLocaleManager.translate(`ErrorBackend`),\r\n message: UniLocaleManager.translate(`error${err.status}`),\r\n detail: {\r\n message: errorDetail,\r\n messageToCopy: JSON.stringify(err),\r\n },\r\n closable: true,\r\n });\r\n return instance;\r\n }\r\n\r\n public async createPopupErrorCustom(args: {\r\n ref?: string;\r\n label: string;\r\n interpolationParameters?: Record<string, string | number | Date>;\r\n }): Promise<Instance> {\r\n /* Recupera args */\r\n const { ref, label, interpolationParameters } = args;\r\n\r\n /* Creazione id */\r\n const id = `popup-${ref ?? Date.now()}`;\r\n\r\n /* Crea popup */\r\n const instance = this.createPopupError(id, {\r\n title: UniLocaleManager.translate('ErrorBackendCustom'),\r\n message: UniLocaleManager.translate(label, 'lbl', interpolationParameters),\r\n closable: true,\r\n });\r\n return instance;\r\n }\r\n\r\n public async updateContentPopup(id: string, content: PopupContent): Promise<void> {\r\n /* Recupero popup */\r\n const popup = this.instances.get(id);\r\n if (!popup) {\r\n throw new Error(`Popup not found (id: ${id}`);\r\n }\r\n\r\n /* Recupero elemento html del popup */\r\n const element = popup.content().firstElementChild as HTMLElement;\r\n if (!element) return;\r\n\r\n /* Selezione del metodo di rendering e del layout in base alla proprietà definita */\r\n if (content.html === undefined) {\r\n this.setContentCenter(element, content.message);\r\n } else {\r\n this.setContent(element, content.html, true);\r\n }\r\n }\r\n\r\n public async closePopup(id: string): Promise<void> {\r\n /* Recupero popup */\r\n const popup = this.instances.get(id);\r\n if (!popup) {\r\n throw new Error(`Popup not found (id: ${id}`);\r\n }\r\n\r\n /* Esecuzione del processo di chiusura asincrona del componente DevExtreme */\r\n await popup.hide();\r\n }\r\n\r\n /* -------------------------------- Methods: instance -------------------------------- */\r\n private async createPopupInstance(\r\n id: string,\r\n args: {\r\n type?: PopupType;\r\n title?: string;\r\n content: string;\r\n isContentHtml: boolean;\r\n toolbarItems: ToolbarItem[];\r\n },\r\n ): Promise<Instance> {\r\n /* Recupera argomenti */\r\n const { type, title, content, isContentHtml, toolbarItems = [] } = args;\r\n\r\n /* Evita doppia istanza con lo stesso id */\r\n const popup = this.instances.get(id);\r\n if (popup) {\r\n popup.show();\r\n return popup;\r\n }\r\n\r\n /* Crea container del popup */\r\n const container = document.createElement('div');\r\n document.body.append(container);\r\n\r\n /* Crea popup */\r\n const instance = new Popup(container, {\r\n title: title ?? '',\r\n showTitle: !!title,\r\n deferRendering: false,\r\n maxHeight: 500,\r\n maxWidth: 1000,\r\n dragEnabled: false,\r\n showCloseButton: false,\r\n hideOnOutsideClick: false,\r\n shading: true,\r\n wrapperAttr: {\r\n id,\r\n class: `uni-popup-${type ?? 'info'}`,\r\n },\r\n toolbarItems,\r\n contentTemplate: (): HTMLDivElement => {\r\n const element = document.createElement('div');\r\n element.style.whiteSpace = 'pre-line';\r\n element.style.wordBreak = 'break-all';\r\n element.style.height = '100%';\r\n\r\n // Sceglie il metodo di iniezione e lo stile corretto in base al tipo di contenuto\r\n if (isContentHtml) {\r\n this.setContent(element, content, true);\r\n } else {\r\n this.setContentCenter(element, content);\r\n }\r\n\r\n return element;\r\n },\r\n onHidden: async (): Promise<void> => {\r\n // Rimozione del riferimento dalla mappa per prevenire interazioni concorrenti\r\n this.instances.delete(id);\r\n\r\n // Rilascio delle risorse allocate dal widget al termine dell'animazione di uscita\r\n instance.dispose();\r\n\r\n // Rimozione definitiva dell'elemento HTML dal Document Object Model (DOM)\r\n instance.element()?.remove();\r\n },\r\n });\r\n\r\n /* Mostra popup */\r\n this.instances.set(id, instance);\r\n await instance.show();\r\n\r\n return instance;\r\n }\r\n\r\n /* -------------------------------- Methods: utils -------------------------------- */\r\n private createCloseButton(id: string): ToolbarItem {\r\n return {\r\n widget: 'dxButton',\r\n toolbar: 'bottom',\r\n location: 'after',\r\n options: {\r\n type: 'normal',\r\n icon: 'close',\r\n text: UniLocaleManager.translate('Close', 'btn'),\r\n stylingMode: 'contained',\r\n onClick: (): Promise<void> => this.closePopup(id),\r\n },\r\n };\r\n }\r\n\r\n private createDetailsButtons(\r\n id: string,\r\n content: string,\r\n isContentHtml: boolean,\r\n detail: { message: string; messageToCopy?: string },\r\n ): ToolbarItem[] {\r\n // Variabile di stato per i dettagli\r\n let inShow = false;\r\n\r\n /* Pulsanti: 'dettagli' e 'indietro */\r\n const items: ToolbarItem[] = [\r\n {\r\n widget: 'dxButton',\r\n toolbar: 'bottom',\r\n location: 'before',\r\n options: {\r\n type: 'normal',\r\n icon: 'find',\r\n text: UniLocaleManager.translate('Details', 'btn'),\r\n stylingMode: 'contained',\r\n onClick: async (e: { component: any }): Promise<void> => {\r\n const popup = this.instances.get(id);\r\n if (!popup) {\r\n throw new Error(`Popup not found (id: ${id}`);\r\n }\r\n\r\n const element = popup.content().firstElementChild as HTMLElement;\r\n if (!element) return;\r\n\r\n inShow = !inShow;\r\n\r\n if (inShow) {\r\n this.setContent(element, detail.message, false);\r\n } else {\r\n // Sceglie il metodo di iniezione e lo stile corretto in base al tipo di contenuto\r\n if (isContentHtml) {\r\n this.setContent(element, content, true);\r\n } else {\r\n this.setContentCenter(element, content);\r\n }\r\n }\r\n\r\n e.component.option({\r\n text: UniLocaleManager.translate(inShow ? 'Back' : 'Details', 'btn'),\r\n icon: inShow ? 'back' : 'find',\r\n });\r\n },\r\n },\r\n },\r\n {\r\n widget: 'dxButton',\r\n toolbar: 'bottom',\r\n location: 'before',\r\n options: {\r\n type: 'normal',\r\n icon: 'refresh',\r\n text: UniLocaleManager.translate('Refresh', 'btn'),\r\n stylingMode: 'contained',\r\n onClick: (): void => location.reload(),\r\n },\r\n },\r\n ];\r\n\r\n /* Pulsanti: 'copiare dettagli' */\r\n if (detail.messageToCopy) {\r\n items.push({\r\n visible: globalThis.isSecureContext,\r\n widget: 'dxButton',\r\n toolbar: 'bottom',\r\n location: 'after',\r\n options: {\r\n type: 'normal',\r\n icon: 'copy',\r\n text: UniLocaleManager.translate('Copy', 'btn'),\r\n stylingMode: 'contained',\r\n onClick: (): Promise<void> => navigator?.clipboard?.writeText(detail.messageToCopy!),\r\n },\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n private setContent(element: HTMLElement, content: string, isContentHtml: boolean): void {\r\n if (isContentHtml) {\r\n element.innerHTML = content;\r\n } else {\r\n element.textContent = content;\r\n }\r\n element.style.display = 'block';\r\n element.style.textAlign = 'left';\r\n element.style.alignItems = ''; // Reset flexbox\r\n element.style.justifyContent = ''; // Reset flexbox\r\n }\r\n\r\n private setContentCenter(element: HTMLElement, content: string): void {\r\n element.textContent = content;\r\n element.style.display = 'flex';\r\n element.style.alignItems = 'center';\r\n element.style.justifyContent = 'center';\r\n element.style.textAlign = 'center';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport notify from 'devextreme/ui/notify';\r\nimport { ToastType } from 'devextreme/ui/toast_types';\r\nimport { IToastManager, ToastConfig } from 'uni-manager';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UniToastService implements IToastManager {\r\n public success(message: string, config?: ToastConfig): void {\r\n this.show(message, 'success', config);\r\n }\r\n\r\n public info(message: string, config?: ToastConfig): void {\r\n this.show(message, 'info', config);\r\n }\r\n\r\n public warning(message: string, config?: ToastConfig): void {\r\n this.show(message, 'warning', config);\r\n }\r\n\r\n public error(message: string, config?: ToastConfig): void {\r\n this.show(message, 'error', config);\r\n }\r\n\r\n /* ----------------------- Metodi: utils ----------------------- */\r\n private show(message: string, type: ToastType, config?: ToastConfig): void {\r\n notify(\r\n {\r\n message,\r\n type,\r\n height: 50,\r\n width: 400,\r\n displayTime: config?.duration ?? 4000,\r\n animation: {\r\n show: { type: 'fade', duration: 400, from: 0, to: 1 },\r\n hide: { type: 'fade', duration: 300, from: 1, to: 0 },\r\n },\r\n },\r\n { position: 'bottom center', direction: 'up-push' },\r\n );\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAMa,gBAAgB,CAAA;AAI3B,IAAA,WAAA,GAAA;QACE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAChD,MAAM,OAAO,GAAmB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7D,QAAA,SAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AAE1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE;AACtC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,YAAY,EAAE,iBAAiB;AAChC,SAAA,CAAC;IACJ;;IAGO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;+GAxBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCkCY,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;;AAKU,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAoB;AAmYhD,IAAA;;IAhYQ,MAAM,kBAAkB,CAC7B,IAIC,EAAA;AAED,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI;;QAG7D,MAAM,WAAW,GACf,IAAI;AACJ,YAAA,CAAA;;;;;AAKiB,qBAAA,EAAA,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAA;;AAEnE,UAAA,EAAA,OAAO,IAAI,EAAE,CAAA;;OAElB;AAEH,QAAA,MAAM,MAAM,CAAC;YACX,KAAK,EAAE,QAAQ,IAAI,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvD,YAAA,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,CAAC,CAAC,QAAQ;YACrB,WAAW;AACX,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;AAC1E,gBAAA,EAAE,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;AAC1E,aAAA;SACF,CAAC,CAAC,IAAI,EAAE;IACX;AAEO,IAAA,MAAM,WAAW,CACtB,EAAU,EACV,IAKC,EAAA;;AAGD,QAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;;QAG7D,MAAM,YAAY,GAAkB,EAAE;QACtC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,EAAE,EACF,OAAO,IAAI,IAAI,EACf,IAAI,KAAK,SAAS,EAClB,MAAM,CACP;AACD,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;QACtC;;AAGA,QAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;AAC9C,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QAChC;;QAGA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE;YAClD,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,OAAO,IAAI,IAAI;YACxB,aAAa,EAAE,CAAC,CAAC,IAAI;YACrB,YAAY;AACb,SAAA,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;AAEO,IAAA,MAAM,gBAAgB,CAC3B,EAAA,GAAyB,SAAS,EAClC,IAKC,EAAA;;QAGD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;;AAGjD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE;AACnE,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK,IAAI,gBAAgB,CAAC,SAAS,CAAC,eAAe,CAAC;YAC3D,OAAO;YACP,MAAM;YACN,QAAQ;AACT,SAAA,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;IAEO,MAAM,oBAAoB,CAAC,IAGjC,EAAA;;AAEC,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;;QAGzB,MAAM,EAAE,GAAG,CAAA,MAAA,EAAS,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;;AAGvC,QAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,GAAG;QACjE,IAAI,WAAW,GAAG,CAAA,CAAA,EAAI,MAAM,MAAM,UAAU,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE;QAC3D,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI;AACF,gBAAA,IAAI,aAAa,YAAY,IAAI,EAAE;oBACjC,WAAW,IAAI,MAAM,MAAM,aAAa,CAAC,IAAI,EAAE,EAAE;gBACnD;AAAO,qBAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AAC5C,oBAAA,WAAW,IAAI,CAAA,GAAA,EAAM,aAAa,CAAA,CAAE;gBACtC;AAAO,qBAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AAC5C,oBAAA,WAAW,IAAI,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;gBACpE;qBAAO;AACL,oBAAA,WAAW,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,aAAa,CAAC,EAAE;gBAC9C;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,WAAW,IAAI,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAE;YAClE;QACF;;AAGA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE;AACzC,YAAA,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC;YACjD,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;AACzD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACnC,aAAA;AACD,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;IAEO,MAAM,sBAAsB,CAAC,IAInC,EAAA;;QAEC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE,GAAG,IAAI;;QAGpD,MAAM,EAAE,GAAG,CAAA,MAAA,EAAS,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;;AAGvC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE;AACzC,YAAA,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,oBAAoB,CAAC;YACvD,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,CAAC;AAC1E,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;AAEO,IAAA,MAAM,kBAAkB,CAAC,EAAU,EAAE,OAAqB,EAAA;;QAE/D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC;QAC/C;;QAGA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,iBAAgC;AAChE,QAAA,IAAI,CAAC,OAAO;YAAE;;AAGd,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;QACjD;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC9C;IACF;IAEO,MAAM,UAAU,CAAC,EAAU,EAAA;;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC;QAC/C;;AAGA,QAAA,MAAM,KAAK,CAAC,IAAI,EAAE;IACpB;;AAGQ,IAAA,MAAM,mBAAmB,CAC/B,EAAU,EACV,IAMC,EAAA;;AAGD,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,IAAI;;QAGvE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,IAAI,EAAE;AACZ,YAAA,OAAO,KAAK;QACd;;QAGA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;AAG/B,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE;YACpC,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,SAAS,EAAE,CAAC,CAAC,KAAK;AAClB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE;gBACX,EAAE;AACF,gBAAA,KAAK,EAAE,CAAA,UAAA,EAAa,IAAI,IAAI,MAAM,CAAA,CAAE;AACrC,aAAA;YACD,YAAY;YACZ,eAAe,EAAE,MAAqB;gBACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,gBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU;AACrC,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW;AACrC,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;;gBAG7B,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;gBACzC;qBAAO;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;gBACzC;AAEA,gBAAA,OAAO,OAAO;YAChB,CAAC;YACD,QAAQ,EAAE,YAA0B;;AAElC,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;;gBAGzB,QAAQ,CAAC,OAAO,EAAE;;AAGlB,gBAAA,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;;QAGF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAChC,QAAA,MAAM,QAAQ,CAAC,IAAI,EAAE;AAErB,QAAA,OAAO,QAAQ;IACjB;;AAGQ,IAAA,iBAAiB,CAAC,EAAU,EAAA;QAClC,OAAO;AACL,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAChD,gBAAA,WAAW,EAAE,WAAW;gBACxB,OAAO,EAAE,MAAqB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,aAAA;SACF;IACH;AAEQ,IAAA,oBAAoB,CAC1B,EAAU,EACV,OAAe,EACf,aAAsB,EACtB,MAAmD,EAAA;;QAGnD,IAAI,MAAM,GAAG,KAAK;;AAGlB,QAAA,MAAM,KAAK,GAAkB;AAC3B,YAAA;AACE,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;AAClD,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,OAAO,EAAE,OAAO,CAAqB,KAAmB;wBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpC,IAAI,CAAC,KAAK,EAAE;AACV,4BAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC;wBAC/C;wBAEA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,iBAAgC;AAChE,wBAAA,IAAI,CAAC,OAAO;4BAAE;wBAEd,MAAM,GAAG,CAAC,MAAM;wBAEhB,IAAI,MAAM,EAAE;4BACV,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;wBACjD;6BAAO;;4BAEL,IAAI,aAAa,EAAE;gCACjB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;4BACzC;iCAAO;AACL,gCAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;4BACzC;wBACF;AAEA,wBAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACjB,4BAAA,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC;4BACpE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;AAC/B,yBAAA,CAAC;oBACJ,CAAC;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;AAClD,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,OAAO,EAAE,MAAY,QAAQ,CAAC,MAAM,EAAE;AACvC,iBAAA;AACF,aAAA;SACF;;AAGD,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC;gBACT,OAAO,EAAE,UAAU,CAAC,eAAe;AACnC,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/C,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,OAAO,EAAE,MAAqB,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,aAAc,CAAC;AACrF,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,UAAU,CAAC,OAAoB,EAAE,OAAe,EAAE,aAAsB,EAAA;QAC9E,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,CAAC,SAAS,GAAG,OAAO;QAC7B;aAAO;AACL,YAAA,OAAO,CAAC,WAAW,GAAG,OAAO;QAC/B;AACA,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAC/B,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;QAChC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;IACpC;IAEQ,gBAAgB,CAAC,OAAoB,EAAE,OAAe,EAAA;AAC5D,QAAA,OAAO,CAAC,WAAW,GAAG,OAAO;AAC7B,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ;AACvC,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ;IACpC;+GApYW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MC9BY,eAAe,CAAA;IACnB,OAAO,CAAC,OAAe,EAAE,MAAoB,EAAA;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;IACvC;IAEO,IAAI,CAAC,OAAe,EAAE,MAAoB,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;IACpC;IAEO,OAAO,CAAC,OAAe,EAAE,MAAoB,EAAA;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;IACvC;IAEO,KAAK,CAAC,OAAe,EAAE,MAAoB,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACrC;;AAGQ,IAAA,IAAI,CAAC,OAAe,EAAE,IAAe,EAAE,MAAoB,EAAA;AACjE,QAAA,MAAM,CACJ;YACE,OAAO;YACP,IAAI;AACJ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,WAAW,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI;AACrC,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AACrD,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AACtD,aAAA;SACF,EACD,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,CACpD;IACH;+GAjCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACPD;;AAEG;;;;"}
|