@arsedizioni/ars-utils 22.0.81 → 22.0.83
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/arsedizioni-ars-utils-clipper.common.mjs +24 -24
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.mjs +226 -133
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +57 -57
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +97 -97
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1 -1
- package/types/arsedizioni-ars-utils-core.d.ts +61 -8
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { inject, Injectable, makeEnvironmentProviders, ElementRef, afterNextRender, Directive, input, DestroyRef, HostListener, output, forwardRef, effect, Pipe, EventEmitter, signal, computed, Service, PLATFORM_ID, RendererFactory2 } from '@angular/core';
|
|
3
3
|
import { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
4
4
|
import { TZDate } from '@date-fns/tz';
|
|
5
|
-
import { getYear, getMonth, getDate, getDay, getDaysInMonth, parseISO, parse,
|
|
5
|
+
import { format, getYear, getMonth, getDate, getDay, getDaysInMonth, parseISO, parse, addYears, addMonths, addDays, isDate, isValid, addSeconds, endOfDay } from 'date-fns';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { Subject, filter as filter$1, map as map$1, BehaviorSubject } from 'rxjs';
|
|
8
8
|
import { debounceTime, filter, map } from 'rxjs/operators';
|
|
@@ -40,12 +40,15 @@ const DAY_OF_WEEK_FORMATS = {
|
|
|
40
40
|
const MAT_DATE_FNS_FORMATS = {
|
|
41
41
|
parse: {
|
|
42
42
|
dateInput: 'P',
|
|
43
|
+
timeInput: ['p', 'HH:mm', 'H:mm'],
|
|
43
44
|
},
|
|
44
45
|
display: {
|
|
45
46
|
dateInput: 'P',
|
|
46
47
|
monthYearLabel: 'LLL uuuu',
|
|
47
48
|
dateA11yLabel: 'PP',
|
|
48
49
|
monthYearA11yLabel: 'LLLL uuuu',
|
|
50
|
+
timeInput: 'p',
|
|
51
|
+
timeOptionLabel: 'p',
|
|
49
52
|
},
|
|
50
53
|
};
|
|
51
54
|
/**
|
|
@@ -60,6 +63,24 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
60
63
|
this.setLocale(matDateLocale);
|
|
61
64
|
}
|
|
62
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Wraps a date/instant into a Europe/Rome TZDate whose JSON serialisation emits a
|
|
68
|
+
* naive local datetime string ("yyyy-MM-dd'T'HH:mm:ss") instead of a UTC instant,
|
|
69
|
+
* so the wall-clock value the user entered is preserved end-to-end (no timezone shift).
|
|
70
|
+
* @param value - The source Date or Unix timestamp in milliseconds.
|
|
71
|
+
* @returns a Europe/Rome TZDate whose toJSON yields a naive local datetime string.
|
|
72
|
+
*/
|
|
73
|
+
static toLocal(value) {
|
|
74
|
+
const ms = typeof value === 'number' ? value : value.getTime();
|
|
75
|
+
const t = new TZDate(ms, 'Europe/Rome');
|
|
76
|
+
Object.defineProperty(t, 'toJSON', {
|
|
77
|
+
value: () => format(t, "yyyy-MM-dd'T'HH:mm:ss"),
|
|
78
|
+
enumerable: false,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true,
|
|
81
|
+
});
|
|
82
|
+
return t;
|
|
83
|
+
}
|
|
63
84
|
/**
|
|
64
85
|
* Returns the year component of the given date.
|
|
65
86
|
* @param date - The source date.
|
|
@@ -152,7 +173,7 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
152
173
|
* @param date - The date to clone.
|
|
153
174
|
*/
|
|
154
175
|
clone(date) {
|
|
155
|
-
return
|
|
176
|
+
return DateFnsAdapter.toLocal(date.getTime());
|
|
156
177
|
}
|
|
157
178
|
/**
|
|
158
179
|
* Creates a `Date` in the `Europe/Rome` timezone for the given year, month, and day.
|
|
@@ -171,19 +192,17 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
171
192
|
if (month < 0 || month > 11) {
|
|
172
193
|
throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
|
|
173
194
|
}
|
|
174
|
-
const result = new TZDate(year, month, date,
|
|
195
|
+
const result = new TZDate(year, month, date, 0, 0, 0, 0, 'Europe/Rome');
|
|
175
196
|
if (result.getMonth() !== month) {
|
|
176
197
|
throw Error(`Invalid date "${date}" for month with index "${month}".`);
|
|
177
198
|
}
|
|
178
|
-
return result;
|
|
199
|
+
return DateFnsAdapter.toLocal(result);
|
|
179
200
|
}
|
|
180
201
|
/**
|
|
181
|
-
* Returns
|
|
202
|
+
* Returns the current date and time in the Europe/Rome timezone, preserving the wall-clock value.
|
|
182
203
|
*/
|
|
183
204
|
today() {
|
|
184
|
-
|
|
185
|
-
t.setHours(12, 0, 0, 0);
|
|
186
|
-
return t;
|
|
205
|
+
return DateFnsAdapter.toLocal(new Date());
|
|
187
206
|
}
|
|
188
207
|
/**
|
|
189
208
|
* Parses a value into a `Date`.
|
|
@@ -198,9 +217,7 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
198
217
|
if (typeof value === 'string' && value.length > 0) {
|
|
199
218
|
const iso8601Date = parseISO(value);
|
|
200
219
|
if (this.isValid(iso8601Date)) {
|
|
201
|
-
|
|
202
|
-
t.setHours(12, 0, 0, 0);
|
|
203
|
-
return t;
|
|
220
|
+
return DateFnsAdapter.toLocal(iso8601Date);
|
|
204
221
|
}
|
|
205
222
|
const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];
|
|
206
223
|
if (!formats.length) {
|
|
@@ -211,17 +228,13 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
211
228
|
locale: this.locale
|
|
212
229
|
});
|
|
213
230
|
if (this.isValid(fromFormat)) {
|
|
214
|
-
|
|
215
|
-
t.setHours(12, 0, 0, 0);
|
|
216
|
-
return t;
|
|
231
|
+
return DateFnsAdapter.toLocal(fromFormat);
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
234
|
return this.invalid();
|
|
220
235
|
}
|
|
221
236
|
else if (typeof value === 'number') {
|
|
222
|
-
|
|
223
|
-
t.setHours(12, 0, 0, 0);
|
|
224
|
-
return t;
|
|
237
|
+
return DateFnsAdapter.toLocal(value);
|
|
225
238
|
}
|
|
226
239
|
else if (value instanceof Date) {
|
|
227
240
|
return this.clone(value);
|
|
@@ -246,7 +259,7 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
246
259
|
* @param years - Number of years to add (can be negative).
|
|
247
260
|
*/
|
|
248
261
|
addCalendarYears(date, years) {
|
|
249
|
-
return addYears(date, years);
|
|
262
|
+
return DateFnsAdapter.toLocal(addYears(date, years));
|
|
250
263
|
}
|
|
251
264
|
/**
|
|
252
265
|
* Adds the given number of whole months to a date.
|
|
@@ -254,7 +267,7 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
254
267
|
* @param months - Number of months to add (can be negative).
|
|
255
268
|
*/
|
|
256
269
|
addCalendarMonths(date, months) {
|
|
257
|
-
return addMonths(date, months);
|
|
270
|
+
return DateFnsAdapter.toLocal(addMonths(date, months));
|
|
258
271
|
}
|
|
259
272
|
/**
|
|
260
273
|
* Adds the given number of whole days to a date.
|
|
@@ -262,14 +275,16 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
262
275
|
* @param days - Number of days to add (can be negative).
|
|
263
276
|
*/
|
|
264
277
|
addCalendarDays(date, days) {
|
|
265
|
-
return addDays(date, days);
|
|
278
|
+
return DateFnsAdapter.toLocal(addDays(date, days));
|
|
266
279
|
}
|
|
267
280
|
/**
|
|
268
|
-
* Serialises a date to an ISO 8601 date string (`yyyy-MM-dd`)
|
|
281
|
+
* Serialises a date to an ISO 8601 date-only string (`yyyy-MM-dd`) using its Europe/Rome calendar day,
|
|
282
|
+
* independent of the browser timezone.
|
|
269
283
|
* @param date - The date to serialise.
|
|
284
|
+
* @returns the yyyy-MM-dd string for the date in Europe/Rome.
|
|
270
285
|
*/
|
|
271
286
|
toIso8601(date) {
|
|
272
|
-
return
|
|
287
|
+
return format(new TZDate(date, 'Europe/Rome'), 'yyyy-MM-dd');
|
|
273
288
|
}
|
|
274
289
|
/**
|
|
275
290
|
* Returns the given value when it is a valid `Date`, or `null` for an empty string.
|
|
@@ -284,7 +299,7 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
284
299
|
}
|
|
285
300
|
const date = parseISO(value);
|
|
286
301
|
if (this.isValid(date)) {
|
|
287
|
-
return date;
|
|
302
|
+
return DateFnsAdapter.toLocal(date);
|
|
288
303
|
}
|
|
289
304
|
}
|
|
290
305
|
return super.deserialize(value);
|
|
@@ -309,17 +324,87 @@ class DateFnsAdapter extends DateAdapter {
|
|
|
309
324
|
invalid() {
|
|
310
325
|
return new Date(NaN);
|
|
311
326
|
}
|
|
312
|
-
|
|
313
|
-
|
|
327
|
+
/**
|
|
328
|
+
* Returns the hours component (0-23) of the given date.
|
|
329
|
+
* @param date - The source date.
|
|
330
|
+
*/
|
|
331
|
+
getHours(date) {
|
|
332
|
+
return date.getHours();
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Returns the minutes component (0-59) of the given date.
|
|
336
|
+
* @param date - The source date.
|
|
337
|
+
*/
|
|
338
|
+
getMinutes(date) {
|
|
339
|
+
return date.getMinutes();
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Returns the seconds component (0-59) of the given date.
|
|
343
|
+
* @param date - The source date.
|
|
344
|
+
*/
|
|
345
|
+
getSeconds(date) {
|
|
346
|
+
return date.getSeconds();
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Returns a clone of `target` with its time-of-day set to the given hours/minutes/seconds,
|
|
350
|
+
* keeping the date part unchanged.
|
|
351
|
+
* @param target - The date whose time should be set.
|
|
352
|
+
* @param hours - New hours (0-23).
|
|
353
|
+
* @param minutes - New minutes (0-59).
|
|
354
|
+
* @param seconds - New seconds (0-59).
|
|
355
|
+
*/
|
|
356
|
+
setTime(target, hours, minutes, seconds) {
|
|
357
|
+
const clone = this.clone(target);
|
|
358
|
+
clone.setHours(hours, minutes, seconds, 0);
|
|
359
|
+
return clone;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Adds the given number of seconds to a date.
|
|
363
|
+
* @param date - The base date.
|
|
364
|
+
* @param amount - Number of seconds to add (can be negative).
|
|
365
|
+
*/
|
|
366
|
+
addSeconds(date, amount) {
|
|
367
|
+
return DateFnsAdapter.toLocal(addSeconds(date, amount));
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Parses a time-only value into a `Date` (today's date, in `Europe/Rome`, with the parsed
|
|
371
|
+
* time-of-day set). The wall-clock time is preserved exactly as entered.
|
|
372
|
+
* @param value - The value to parse (a string, or an existing `Date`).
|
|
373
|
+
* @param parseFormat - A format string or an array of format strings (date-fns tokens).
|
|
374
|
+
* @returns the parsed Date, an invalid sentinel, or null for unrecognised input.
|
|
375
|
+
*/
|
|
376
|
+
parseTime(value, parseFormat) {
|
|
377
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
378
|
+
const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];
|
|
379
|
+
if (!formats.length) {
|
|
380
|
+
throw Error('Formats array must not be empty.');
|
|
381
|
+
}
|
|
382
|
+
const referenceDate = new TZDate(new Date(), 'Europe/Rome');
|
|
383
|
+
for (const currentFormat of formats) {
|
|
384
|
+
const fromFormat = parse(value, currentFormat, referenceDate, { locale: this.locale });
|
|
385
|
+
if (this.isValid(fromFormat)) {
|
|
386
|
+
return DateFnsAdapter.toLocal(fromFormat);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return this.invalid();
|
|
390
|
+
}
|
|
391
|
+
else if (value instanceof Date) {
|
|
392
|
+
return this.clone(value);
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: DateFnsAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
397
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: DateFnsAdapter }); }
|
|
314
398
|
}
|
|
315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: DateFnsAdapter, decorators: [{
|
|
316
400
|
type: Injectable
|
|
317
401
|
}], ctorParameters: () => [] });
|
|
318
402
|
/**
|
|
319
|
-
* Standalone providers for the
|
|
403
|
+
* Standalone providers for the ARS date-fns adapter.
|
|
320
404
|
*
|
|
321
405
|
* Configures Angular Material to use {@link DateFnsAdapter} (Europe/Rome timezone)
|
|
322
|
-
* and the matching {@link MAT_DATE_FNS_FORMATS}.
|
|
406
|
+
* and the matching {@link MAT_DATE_FNS_FORMATS}. Also supports `mat-timepicker` since
|
|
407
|
+
* {@link DateFnsAdapter} implements the time-related `DateAdapter` methods.
|
|
323
408
|
*
|
|
324
409
|
* @example
|
|
325
410
|
* bootstrapApplication(AppComponent, {
|
|
@@ -347,10 +432,10 @@ class AutoFocusDirective {
|
|
|
347
432
|
this.elementRef.nativeElement?.focus();
|
|
348
433
|
});
|
|
349
434
|
}
|
|
350
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
351
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
435
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AutoFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
436
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AutoFocusDirective, isStandalone: true, selector: "[autoFocus]", ngImport: i0 }); }
|
|
352
437
|
}
|
|
353
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
438
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AutoFocusDirective, decorators: [{
|
|
354
439
|
type: Directive,
|
|
355
440
|
args: [{
|
|
356
441
|
selector: '[autoFocus]',
|
|
@@ -1663,22 +1748,30 @@ class SystemUtils {
|
|
|
1663
1748
|
}
|
|
1664
1749
|
}
|
|
1665
1750
|
/**
|
|
1666
|
-
*
|
|
1667
|
-
*
|
|
1668
|
-
*
|
|
1751
|
+
* Converts a Date, timestamp or ISO string into a Europe/Rome Date whose JSON serialisation
|
|
1752
|
+
* emits a naive local datetime string ("yyyy-MM-dd'T'HH:mm:ss"), with no timezone designator,
|
|
1753
|
+
* so the wall-clock value round-trips to the server unchanged. Use this instead of `new Date(...)`
|
|
1754
|
+
* when reviving dates received from the API, to stay consistent with the DateFnsAdapter (values
|
|
1755
|
+
* entered through the datepicker already behave this way).
|
|
1756
|
+
* @param value : the source Date, Unix timestamp (ms) or ISO string
|
|
1757
|
+
* @returns : a Europe/Rome Date serialising as naive local time, or undefined for empty/invalid input
|
|
1669
1758
|
*/
|
|
1670
1759
|
static toLocalDate(value) {
|
|
1671
|
-
|
|
1672
|
-
if (!value)
|
|
1760
|
+
if (value == null || value === '')
|
|
1673
1761
|
return undefined;
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
if (!this.isValidDate(value))
|
|
1762
|
+
const ms = value instanceof Date ? value.getTime()
|
|
1763
|
+
: typeof value === 'number' ? value
|
|
1764
|
+
: new Date(value).getTime();
|
|
1765
|
+
if (isNaN(ms))
|
|
1679
1766
|
return undefined;
|
|
1680
|
-
|
|
1681
|
-
|
|
1767
|
+
const t = new TZDate(ms, 'Europe/Rome');
|
|
1768
|
+
Object.defineProperty(t, 'toJSON', {
|
|
1769
|
+
value: () => format(t, "yyyy-MM-dd'T'HH:mm:ss"),
|
|
1770
|
+
enumerable: false,
|
|
1771
|
+
configurable: true,
|
|
1772
|
+
writable: true,
|
|
1773
|
+
});
|
|
1774
|
+
return t;
|
|
1682
1775
|
}
|
|
1683
1776
|
/**
|
|
1684
1777
|
* Update a DateInterval object according to a string
|
|
@@ -2055,10 +2148,10 @@ class DateIntervalChangeDirective {
|
|
|
2055
2148
|
onKeyup(e) {
|
|
2056
2149
|
this.subject.next(e);
|
|
2057
2150
|
}
|
|
2058
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2059
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: DateIntervalChangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2152
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: DateIntervalChangeDirective, isStandalone: true, selector: "[dateIntervalChange]", inputs: { dateIntervalChange: { classPropertyName: "dateIntervalChange", publicName: "dateIntervalChange", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)", "keyup": "onKeyup($event)" } }, ngImport: i0 }); }
|
|
2060
2153
|
}
|
|
2061
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: DateIntervalChangeDirective, decorators: [{
|
|
2062
2155
|
type: Directive,
|
|
2063
2156
|
args: [{
|
|
2064
2157
|
selector: '[dateIntervalChange]',
|
|
@@ -2105,10 +2198,10 @@ class CopyClipboardDirective {
|
|
|
2105
2198
|
document.removeEventListener('copy', listener, false);
|
|
2106
2199
|
}
|
|
2107
2200
|
}
|
|
2108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2109
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2201
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CopyClipboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2202
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: CopyClipboardDirective, isStandalone: true, selector: "[copyClipboard]", inputs: { payload: { classPropertyName: "payload", publicName: "copyClipboard", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { copied: "copied" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 }); }
|
|
2110
2203
|
}
|
|
2111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CopyClipboardDirective, decorators: [{
|
|
2112
2205
|
type: Directive,
|
|
2113
2206
|
args: [{
|
|
2114
2207
|
selector: '[copyClipboard]',
|
|
@@ -2137,8 +2230,8 @@ class EmailsValidatorDirective {
|
|
|
2137
2230
|
const isValid = parts.every(part => part.length === 0 || !!SystemUtils.parseEmail(part));
|
|
2138
2231
|
return isValid ? null : { emails: "Elenco non valido." };
|
|
2139
2232
|
}
|
|
2140
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2141
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2233
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EmailsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2234
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: EmailsValidatorDirective, isStandalone: true, selector: "[emails]", providers: [
|
|
2142
2235
|
{
|
|
2143
2236
|
provide: NG_VALIDATORS,
|
|
2144
2237
|
useExisting: forwardRef(() => EmailsValidatorDirective),
|
|
@@ -2146,7 +2239,7 @@ class EmailsValidatorDirective {
|
|
|
2146
2239
|
},
|
|
2147
2240
|
], ngImport: i0 }); }
|
|
2148
2241
|
}
|
|
2149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EmailsValidatorDirective, decorators: [{
|
|
2150
2243
|
type: Directive,
|
|
2151
2244
|
args: [{
|
|
2152
2245
|
selector: "[emails]",
|
|
@@ -2205,8 +2298,8 @@ class EqualsValidatorDirective {
|
|
|
2205
2298
|
return null;
|
|
2206
2299
|
return eq.value === control.value ? null : { equals: "Non valido." };
|
|
2207
2300
|
}
|
|
2208
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2209
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2301
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EqualsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2302
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: EqualsValidatorDirective, isStandalone: true, selector: "[equals]", inputs: { equals: { classPropertyName: "equals", publicName: "equals", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2210
2303
|
{
|
|
2211
2304
|
provide: NG_VALIDATORS,
|
|
2212
2305
|
useExisting: forwardRef(() => EqualsValidatorDirective),
|
|
@@ -2214,7 +2307,7 @@ class EqualsValidatorDirective {
|
|
|
2214
2307
|
},
|
|
2215
2308
|
], ngImport: i0 }); }
|
|
2216
2309
|
}
|
|
2217
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2310
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EqualsValidatorDirective, decorators: [{
|
|
2218
2311
|
type: Directive,
|
|
2219
2312
|
args: [{
|
|
2220
2313
|
selector: "[equals]",
|
|
@@ -2258,8 +2351,8 @@ class FileSizeValidatorDirective {
|
|
|
2258
2351
|
const isValid = s <= this.maxSizeMb() && s >= this.minSizeMb();
|
|
2259
2352
|
return isValid ? null : { fileSize: "Non valido." };
|
|
2260
2353
|
}
|
|
2261
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2262
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2354
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FileSizeValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2355
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: FileSizeValidatorDirective, isStandalone: true, selector: "[fileSize]", inputs: { maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, minSizeMb: { classPropertyName: "minSizeMb", publicName: "minSizeMb", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2263
2356
|
{
|
|
2264
2357
|
provide: NG_VALIDATORS,
|
|
2265
2358
|
useExisting: forwardRef(() => FileSizeValidatorDirective),
|
|
@@ -2267,7 +2360,7 @@ class FileSizeValidatorDirective {
|
|
|
2267
2360
|
},
|
|
2268
2361
|
], ngImport: i0 }); }
|
|
2269
2362
|
}
|
|
2270
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FileSizeValidatorDirective, decorators: [{
|
|
2271
2364
|
type: Directive,
|
|
2272
2365
|
args: [{
|
|
2273
2366
|
selector: "[fileSize]",
|
|
@@ -2298,8 +2391,8 @@ class GuidValidatorDirective {
|
|
|
2298
2391
|
return null;
|
|
2299
2392
|
return SystemUtils.parseUUID(input) ? null : { guid: "Non valido." };
|
|
2300
2393
|
}
|
|
2301
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2302
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2394
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GuidValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2395
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: GuidValidatorDirective, isStandalone: true, selector: "[guid]", providers: [
|
|
2303
2396
|
{
|
|
2304
2397
|
provide: NG_VALIDATORS,
|
|
2305
2398
|
useExisting: forwardRef(() => GuidValidatorDirective),
|
|
@@ -2307,7 +2400,7 @@ class GuidValidatorDirective {
|
|
|
2307
2400
|
},
|
|
2308
2401
|
], ngImport: i0 }); }
|
|
2309
2402
|
}
|
|
2310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2403
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GuidValidatorDirective, decorators: [{
|
|
2311
2404
|
type: Directive,
|
|
2312
2405
|
args: [{
|
|
2313
2406
|
selector: "[guid]",
|
|
@@ -2344,8 +2437,8 @@ class MaxTermsValidatorDirective {
|
|
|
2344
2437
|
const terms = input.match(/\S+/g)?.length ?? 0;
|
|
2345
2438
|
return terms <= this.maxTerms() ? null : { maxTerms: "Non valido." };
|
|
2346
2439
|
}
|
|
2347
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2348
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2440
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MaxTermsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2441
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: MaxTermsValidatorDirective, isStandalone: true, selector: "[maxTerms]", inputs: { maxTerms: { classPropertyName: "maxTerms", publicName: "maxTerms", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2349
2442
|
{
|
|
2350
2443
|
provide: NG_VALIDATORS,
|
|
2351
2444
|
useExisting: forwardRef(() => MaxTermsValidatorDirective),
|
|
@@ -2353,7 +2446,7 @@ class MaxTermsValidatorDirective {
|
|
|
2353
2446
|
},
|
|
2354
2447
|
], ngImport: i0 }); }
|
|
2355
2448
|
}
|
|
2356
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MaxTermsValidatorDirective, decorators: [{
|
|
2357
2450
|
type: Directive,
|
|
2358
2451
|
args: [{
|
|
2359
2452
|
selector: "[maxTerms]",
|
|
@@ -2384,8 +2477,8 @@ class NotEmptyValidatorDirective {
|
|
|
2384
2477
|
return null;
|
|
2385
2478
|
return input.trim().length > 0 ? null : { notEmpty: true };
|
|
2386
2479
|
}
|
|
2387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2388
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2480
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotEmptyValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2481
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: NotEmptyValidatorDirective, isStandalone: true, selector: "[notEmpty]", providers: [
|
|
2389
2482
|
{
|
|
2390
2483
|
provide: NG_VALIDATORS,
|
|
2391
2484
|
useExisting: forwardRef(() => NotEmptyValidatorDirective),
|
|
@@ -2393,7 +2486,7 @@ class NotEmptyValidatorDirective {
|
|
|
2393
2486
|
},
|
|
2394
2487
|
], ngImport: i0 }); }
|
|
2395
2488
|
}
|
|
2396
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotEmptyValidatorDirective, decorators: [{
|
|
2397
2490
|
type: Directive,
|
|
2398
2491
|
args: [{
|
|
2399
2492
|
selector: "[notEmpty]",
|
|
@@ -2466,8 +2559,8 @@ class NotEqualValidatorDirective {
|
|
|
2466
2559
|
}
|
|
2467
2560
|
return errors;
|
|
2468
2561
|
}
|
|
2469
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2470
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2562
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotEqualValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2563
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: NotEqualValidatorDirective, isStandalone: true, selector: "[notEqual]", inputs: { notEqual: { classPropertyName: "notEqual", publicName: "notEqual", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2471
2564
|
{
|
|
2472
2565
|
provide: NG_VALIDATORS,
|
|
2473
2566
|
useExisting: forwardRef(() => NotEqualValidatorDirective),
|
|
@@ -2475,7 +2568,7 @@ class NotEqualValidatorDirective {
|
|
|
2475
2568
|
},
|
|
2476
2569
|
], ngImport: i0 }); }
|
|
2477
2570
|
}
|
|
2478
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2571
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotEqualValidatorDirective, decorators: [{
|
|
2479
2572
|
type: Directive,
|
|
2480
2573
|
args: [{
|
|
2481
2574
|
selector: "[notEqual]",
|
|
@@ -2511,8 +2604,8 @@ class NotFutureValidatorDirective {
|
|
|
2511
2604
|
const d = endOfDay(parsed);
|
|
2512
2605
|
return d <= today ? null : { notFuture: "Non valido." };
|
|
2513
2606
|
}
|
|
2514
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2515
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotFutureValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2608
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: NotFutureValidatorDirective, isStandalone: true, selector: "[notFuture]", providers: [
|
|
2516
2609
|
{
|
|
2517
2610
|
provide: NG_VALIDATORS,
|
|
2518
2611
|
useExisting: forwardRef(() => NotFutureValidatorDirective),
|
|
@@ -2520,7 +2613,7 @@ class NotFutureValidatorDirective {
|
|
|
2520
2613
|
},
|
|
2521
2614
|
], ngImport: i0 }); }
|
|
2522
2615
|
}
|
|
2523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2616
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: NotFutureValidatorDirective, decorators: [{
|
|
2524
2617
|
type: Directive,
|
|
2525
2618
|
args: [{
|
|
2526
2619
|
selector: "[notFuture]",
|
|
@@ -2549,8 +2642,8 @@ class PasswordValidatorDirective {
|
|
|
2549
2642
|
const strength = SystemUtils.calculatePasswordStrength(input);
|
|
2550
2643
|
return strength.isValid ? null : { password: "Non valido." };
|
|
2551
2644
|
}
|
|
2552
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2553
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2645
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PasswordValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2646
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: PasswordValidatorDirective, isStandalone: true, selector: "[password]", providers: [
|
|
2554
2647
|
{
|
|
2555
2648
|
provide: NG_VALIDATORS,
|
|
2556
2649
|
useExisting: forwardRef(() => PasswordValidatorDirective),
|
|
@@ -2558,7 +2651,7 @@ class PasswordValidatorDirective {
|
|
|
2558
2651
|
},
|
|
2559
2652
|
], ngImport: i0 }); }
|
|
2560
2653
|
}
|
|
2561
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PasswordValidatorDirective, decorators: [{
|
|
2562
2655
|
type: Directive,
|
|
2563
2656
|
args: [{
|
|
2564
2657
|
selector: "[password]",
|
|
@@ -2592,10 +2685,10 @@ class RemoveFocusDirective {
|
|
|
2592
2685
|
setTimeout(() => el.blur(), 0);
|
|
2593
2686
|
}
|
|
2594
2687
|
}
|
|
2595
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2596
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2688
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RemoveFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2689
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: RemoveFocusDirective, isStandalone: true, selector: "[removeFocus]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
|
|
2597
2690
|
}
|
|
2598
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2691
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RemoveFocusDirective, decorators: [{
|
|
2599
2692
|
type: Directive,
|
|
2600
2693
|
args: [{
|
|
2601
2694
|
selector: '[removeFocus]',
|
|
@@ -2626,8 +2719,8 @@ class SqlDateValidatorDirective {
|
|
|
2626
2719
|
const d = endOfDay(parsed);
|
|
2627
2720
|
return d.getFullYear() > 1750 ? null : { sqlDate: "Non valido." };
|
|
2628
2721
|
}
|
|
2629
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2630
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2722
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SqlDateValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2723
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SqlDateValidatorDirective, isStandalone: true, selector: "[sqlDate]", providers: [
|
|
2631
2724
|
{
|
|
2632
2725
|
provide: NG_VALIDATORS,
|
|
2633
2726
|
useExisting: forwardRef(() => SqlDateValidatorDirective),
|
|
@@ -2635,7 +2728,7 @@ class SqlDateValidatorDirective {
|
|
|
2635
2728
|
},
|
|
2636
2729
|
], ngImport: i0 }); }
|
|
2637
2730
|
}
|
|
2638
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2731
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SqlDateValidatorDirective, decorators: [{
|
|
2639
2732
|
type: Directive,
|
|
2640
2733
|
args: [{
|
|
2641
2734
|
selector: "[sqlDate]",
|
|
@@ -2701,8 +2794,8 @@ class TimeValidatorDirective {
|
|
|
2701
2794
|
}
|
|
2702
2795
|
return null;
|
|
2703
2796
|
}
|
|
2704
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2705
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2797
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TimeValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2798
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: TimeValidatorDirective, isStandalone: true, selector: "[time]", inputs: { slots: { classPropertyName: "slots", publicName: "slots", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2706
2799
|
{
|
|
2707
2800
|
provide: NG_VALIDATORS,
|
|
2708
2801
|
useExisting: forwardRef(() => TimeValidatorDirective),
|
|
@@ -2710,7 +2803,7 @@ class TimeValidatorDirective {
|
|
|
2710
2803
|
},
|
|
2711
2804
|
], ngImport: i0 }); }
|
|
2712
2805
|
}
|
|
2713
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2806
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TimeValidatorDirective, decorators: [{
|
|
2714
2807
|
type: Directive,
|
|
2715
2808
|
args: [{
|
|
2716
2809
|
selector: "[time]",
|
|
@@ -2741,8 +2834,8 @@ class UrlValidatorDirective {
|
|
|
2741
2834
|
return null;
|
|
2742
2835
|
return SystemUtils.parseUrl(input) ? null : { url: "Non valido." };
|
|
2743
2836
|
}
|
|
2744
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2745
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
2837
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UrlValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2838
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: UrlValidatorDirective, isStandalone: true, selector: "[url]", providers: [
|
|
2746
2839
|
{
|
|
2747
2840
|
provide: NG_VALIDATORS,
|
|
2748
2841
|
useExisting: forwardRef(() => UrlValidatorDirective),
|
|
@@ -2750,7 +2843,7 @@ class UrlValidatorDirective {
|
|
|
2750
2843
|
},
|
|
2751
2844
|
], ngImport: i0 }); }
|
|
2752
2845
|
}
|
|
2753
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2846
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UrlValidatorDirective, decorators: [{
|
|
2754
2847
|
type: Directive,
|
|
2755
2848
|
args: [{
|
|
2756
2849
|
selector: "[url]",
|
|
@@ -2793,8 +2886,8 @@ class ValidIfDirective {
|
|
|
2793
2886
|
}
|
|
2794
2887
|
return isValid ? null : { validIf: "Non valido." };
|
|
2795
2888
|
}
|
|
2796
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2797
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2889
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValidIfDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2890
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: ValidIfDirective, isStandalone: true, selector: "[validIf]", inputs: { validIf: { classPropertyName: "validIf", publicName: "validIf", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
2798
2891
|
{
|
|
2799
2892
|
provide: NG_VALIDATORS,
|
|
2800
2893
|
useExisting: forwardRef(() => ValidIfDirective),
|
|
@@ -2802,7 +2895,7 @@ class ValidIfDirective {
|
|
|
2802
2895
|
},
|
|
2803
2896
|
], ngImport: i0 }); }
|
|
2804
2897
|
}
|
|
2805
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2898
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValidIfDirective, decorators: [{
|
|
2806
2899
|
type: Directive,
|
|
2807
2900
|
args: [{
|
|
2808
2901
|
selector: "[validIf]",
|
|
@@ -2836,10 +2929,10 @@ class ValidatorDirective {
|
|
|
2836
2929
|
const fn = this.validator();
|
|
2837
2930
|
return fn ? fn(control) : null;
|
|
2838
2931
|
}
|
|
2839
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2840
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
2932
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2933
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: ValidatorDirective, isStandalone: true, selector: "[validator]", inputs: { validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }], ngImport: i0 }); }
|
|
2841
2934
|
}
|
|
2842
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2935
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValidatorDirective, decorators: [{
|
|
2843
2936
|
type: Directive,
|
|
2844
2937
|
args: [{
|
|
2845
2938
|
selector: '[validator]',
|
|
@@ -2872,10 +2965,10 @@ class FormatHtmlPipe {
|
|
|
2872
2965
|
.replaceAll('"', '"');
|
|
2873
2966
|
return this.sanitizer.bypassSecurityTrustHtml(escaped.replaceAll(/(?:\r\n|\r|\n)/g, '<br>'));
|
|
2874
2967
|
}
|
|
2875
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2876
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
2968
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2969
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: FormatHtmlPipe, isStandalone: true, name: "formatHtml" }); }
|
|
2877
2970
|
}
|
|
2878
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2971
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatHtmlPipe, decorators: [{
|
|
2879
2972
|
type: Pipe,
|
|
2880
2973
|
args: [{
|
|
2881
2974
|
name: 'formatHtml',
|
|
@@ -2900,10 +2993,10 @@ class FormatMarkdownPipe {
|
|
|
2900
2993
|
transform(value) {
|
|
2901
2994
|
return this.sanitizer.bypassSecurityTrustHtml(SystemUtils.markdownToHtml(value ?? ''));
|
|
2902
2995
|
}
|
|
2903
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2904
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
2996
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatMarkdownPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2997
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: FormatMarkdownPipe, isStandalone: true, name: "formatMarkdown" }); }
|
|
2905
2998
|
}
|
|
2906
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2999
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatMarkdownPipe, decorators: [{
|
|
2907
3000
|
type: Pipe,
|
|
2908
3001
|
args: [{
|
|
2909
3002
|
name: 'formatMarkdown',
|
|
@@ -2960,10 +3053,10 @@ class FormatPipe {
|
|
|
2960
3053
|
}
|
|
2961
3054
|
return undefined;
|
|
2962
3055
|
}
|
|
2963
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2964
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3056
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3057
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: FormatPipe, isStandalone: true, name: "format" }); }
|
|
2965
3058
|
}
|
|
2966
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3059
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: FormatPipe, decorators: [{
|
|
2967
3060
|
type: Pipe,
|
|
2968
3061
|
args: [{
|
|
2969
3062
|
name: 'format',
|
|
@@ -2996,10 +3089,10 @@ class ReplacePipe {
|
|
|
2996
3089
|
const replacement = (regexValue === '\n' && !replaceValue) ? '<br>' : (replaceValue ?? '');
|
|
2997
3090
|
return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replacement));
|
|
2998
3091
|
}
|
|
2999
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3000
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3092
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReplacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3093
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: ReplacePipe, isStandalone: true, name: "replace" }); }
|
|
3001
3094
|
}
|
|
3002
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3095
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReplacePipe, decorators: [{
|
|
3003
3096
|
type: Pipe,
|
|
3004
3097
|
args: [{
|
|
3005
3098
|
name: 'replace',
|
|
@@ -3025,10 +3118,10 @@ class SafeHtmlPipe {
|
|
|
3025
3118
|
transform(value) {
|
|
3026
3119
|
return this.sanitizer.bypassSecurityTrustHtml(value ?? '');
|
|
3027
3120
|
}
|
|
3028
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3029
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3121
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3122
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" }); }
|
|
3030
3123
|
}
|
|
3031
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeHtmlPipe, decorators: [{
|
|
3032
3125
|
type: Pipe,
|
|
3033
3126
|
args: [{
|
|
3034
3127
|
name: 'safeHtml',
|
|
@@ -3054,10 +3147,10 @@ class SafeUrlPipe {
|
|
|
3054
3147
|
transform(value) {
|
|
3055
3148
|
return this.sanitizer.bypassSecurityTrustResourceUrl(value ?? '');
|
|
3056
3149
|
}
|
|
3057
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3058
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3151
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: SafeUrlPipe, isStandalone: true, name: "safeUrl" }); }
|
|
3059
3152
|
}
|
|
3060
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeUrlPipe, decorators: [{
|
|
3061
3154
|
type: Pipe,
|
|
3062
3155
|
args: [{
|
|
3063
3156
|
name: 'safeUrl',
|
|
@@ -3086,10 +3179,10 @@ class SearchCallbackPipe {
|
|
|
3086
3179
|
return items;
|
|
3087
3180
|
return items.filter(item => callback(item));
|
|
3088
3181
|
}
|
|
3089
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3090
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3182
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SearchCallbackPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3183
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: SearchCallbackPipe, isStandalone: true, name: "callback", pure: false }); }
|
|
3091
3184
|
}
|
|
3092
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SearchCallbackPipe, decorators: [{
|
|
3093
3186
|
type: Pipe,
|
|
3094
3187
|
args: [{
|
|
3095
3188
|
name: 'callback',
|
|
@@ -3142,10 +3235,10 @@ class SearchFilterPipe {
|
|
|
3142
3235
|
metadata.count = result.length;
|
|
3143
3236
|
return result;
|
|
3144
3237
|
}
|
|
3145
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3146
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
3238
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SearchFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3239
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: SearchFilterPipe, isStandalone: true, name: "search" }); }
|
|
3147
3240
|
}
|
|
3148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SearchFilterPipe, decorators: [{
|
|
3149
3242
|
type: Pipe,
|
|
3150
3243
|
args: [{
|
|
3151
3244
|
name: 'search',
|
|
@@ -3553,10 +3646,10 @@ class BroadcastService {
|
|
|
3553
3646
|
observeMessage(id) {
|
|
3554
3647
|
return this.subject.pipe(filter$1(info => info.id === id), map$1(info => info.data));
|
|
3555
3648
|
}
|
|
3556
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3557
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
3649
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BroadcastService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3650
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.8", ngImport: i0, type: BroadcastService }); }
|
|
3558
3651
|
}
|
|
3559
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BroadcastService, decorators: [{
|
|
3560
3653
|
type: Service
|
|
3561
3654
|
}] });
|
|
3562
3655
|
|
|
@@ -3614,10 +3707,10 @@ class EnvironmentService {
|
|
|
3614
3707
|
get appServiceLoginUri() { return this._effectiveServiceLoginUri(); }
|
|
3615
3708
|
/** @param value - The login endpoint URI of the backend service. */
|
|
3616
3709
|
set appServiceLoginUri(value) { this.appServiceLoginUriSignal.set(value); }
|
|
3617
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3618
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
3710
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3711
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.8", ngImport: i0, type: EnvironmentService }); }
|
|
3619
3712
|
}
|
|
3620
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3713
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EnvironmentService, decorators: [{
|
|
3621
3714
|
type: Service
|
|
3622
3715
|
}] });
|
|
3623
3716
|
|
|
@@ -3648,10 +3741,10 @@ class ScreenService {
|
|
|
3648
3741
|
get isIEOrEdge() {
|
|
3649
3742
|
return SystemUtils.isBrowser() && /msie\s|trident\/|edge\//i.test(window.navigator.userAgent);
|
|
3650
3743
|
}
|
|
3651
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3652
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
3744
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScreenService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3745
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.8", ngImport: i0, type: ScreenService }); }
|
|
3653
3746
|
}
|
|
3654
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3747
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScreenService, decorators: [{
|
|
3655
3748
|
type: Service
|
|
3656
3749
|
}] });
|
|
3657
3750
|
|
|
@@ -3680,10 +3773,10 @@ class SplashService {
|
|
|
3680
3773
|
bootstrapped() { this.api?.disarm(); }
|
|
3681
3774
|
/** Fade out and remove the splash overlay from the DOM. */
|
|
3682
3775
|
hide() { this.api?.hide(); }
|
|
3683
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3684
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
3776
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SplashService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3777
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.8", ngImport: i0, type: SplashService }); }
|
|
3685
3778
|
}
|
|
3686
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SplashService, decorators: [{
|
|
3687
3780
|
type: Service
|
|
3688
3781
|
}] });
|
|
3689
3782
|
|
|
@@ -3811,10 +3904,10 @@ class ThemeService {
|
|
|
3811
3904
|
this.themeChanged.next(this.getTheme());
|
|
3812
3905
|
this.broadcastChannel.sendMessage(this.broadcastMessage, theme);
|
|
3813
3906
|
}
|
|
3814
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3815
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
3907
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
3908
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.8", ngImport: i0, type: ThemeService }); }
|
|
3816
3909
|
}
|
|
3817
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3910
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ThemeService, decorators: [{
|
|
3818
3911
|
type: Service
|
|
3819
3912
|
}], ctorParameters: () => [] });
|
|
3820
3913
|
|