@geosdi/ngx-ui 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2063 @@
1
+ import * as i0 from "@angular/core";
2
+ import { AfterContentInit, ElementRef, InputSignal, InputSignalWithTransform, ModelSignal, OnInit, OutputEmitterRef, Signal, TemplateRef, Type, WritableSignal } from "@angular/core";
3
+ import { ControlValueAccessor } from "@angular/forms";
4
+ import { DialogRef as DialogRef$1 } from "@angular/cdk/dialog";
5
+ import { Observable } from "rxjs";
6
+ import { ConnectedPosition, FlexibleConnectedPositionStrategyOrigin } from "@angular/cdk/overlay";
7
+ /** I colori disponibili per un pulsante. */
8
+ export type ButtonSeverity = "primary" | "secondary" | "success" | "info" | "warn" | "danger";
9
+ /**
10
+ * @author Vito Salvia - CNR IMAA geoSDI Group
11
+ * @email vito.salvia@gmail.com
12
+ */
13
+ export declare class ButtonDirective {
14
+ readonly severity: InputSignal<ButtonSeverity>;
15
+ /** Solo il bordo, sul fondo della pagina. */
16
+ readonly outlined: InputSignalWithTransform<boolean, unknown>;
17
+ /** Né fondo né bordo : un comando discreto. */
18
+ readonly text: InputSignalWithTransform<boolean, unknown>;
19
+ readonly rounded: InputSignalWithTransform<boolean, unknown>;
20
+ /** La sola icona : quadrato, e il nome va nell'`aria-label`. */
21
+ readonly iconOnly: InputSignalWithTransform<boolean, unknown>;
22
+ readonly size: InputSignal<"small" | "normal">;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDirective, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ButtonDirective, "button[mlButton], a[mlButton]", never, {
25
+ "severity": {
26
+ "alias": "severity";
27
+ "required": false;
28
+ "isSignal": true;
29
+ };
30
+ "outlined": {
31
+ "alias": "outlined";
32
+ "required": false;
33
+ "isSignal": true;
34
+ };
35
+ "text": {
36
+ "alias": "text";
37
+ "required": false;
38
+ "isSignal": true;
39
+ };
40
+ "rounded": {
41
+ "alias": "rounded";
42
+ "required": false;
43
+ "isSignal": true;
44
+ };
45
+ "iconOnly": {
46
+ "alias": "iconOnly";
47
+ "required": false;
48
+ "isSignal": true;
49
+ };
50
+ "size": {
51
+ "alias": "size";
52
+ "required": false;
53
+ "isSignal": true;
54
+ };
55
+ }, {}, never, never, true, never>;
56
+ }
57
+ /**
58
+ * Con un valore porta anche `ml-input--filled`, che `ml-floatlabel`
59
+ * guarda per alzare l'etichetta : senza, resterebbe sopra il valore.
60
+ *
61
+ * @author Vito Salvia - CNR IMAA geoSDI Group
62
+ * @email vito.salvia@gmail.com
63
+ */
64
+ export declare class InputTextDirective implements AfterContentInit {
65
+ protected readonly filled: WritableSignal<boolean>;
66
+ private readonly host;
67
+ private readonly control;
68
+ private readonly destroyRef;
69
+ ngAfterContentInit(): void;
70
+ protected sync(): void;
71
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputTextDirective, never>;
72
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InputTextDirective, "input[mlInputText], textarea[mlInputText]", never, {}, {}, never, never, true, never>;
73
+ }
74
+ /**
75
+ * @author Vito Salvia - CNR IMAA geoSDI Group
76
+ * @email vito.salvia@gmail.com
77
+ */
78
+ export declare class CheckboxComponent implements ControlValueAccessor {
79
+ /** L'`id` della casella vera, per il `label for`. */
80
+ readonly inputId: InputSignal<string | undefined>;
81
+ readonly ariaLabel: InputSignal<string | undefined>;
82
+ /** Spenta da fuori, senza una form ; con una form vale la sua. */
83
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
84
+ /** Il valore nuovo, a ogni clic. */
85
+ readonly changed: OutputEmitterRef<boolean>;
86
+ protected readonly checked: WritableSignal<boolean>;
87
+ private readonly formDisabled;
88
+ protected readonly isDisabled: Signal<boolean>;
89
+ private readonly fallbackId;
90
+ protected readonly id: Signal<string>;
91
+ private onChange;
92
+ protected onTouched: () => void;
93
+ protected toggle(event: Event): void;
94
+ writeValue(value: unknown): void;
95
+ registerOnChange(fn: (value: boolean) => void): void;
96
+ registerOnTouched(fn: () => void): void;
97
+ setDisabledState(disabled: boolean): void;
98
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
99
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "ml-checkbox", never, {
100
+ "inputId": {
101
+ "alias": "inputId";
102
+ "required": false;
103
+ "isSignal": true;
104
+ };
105
+ "ariaLabel": {
106
+ "alias": "ariaLabel";
107
+ "required": false;
108
+ "isSignal": true;
109
+ };
110
+ "disabled": {
111
+ "alias": "disabled";
112
+ "required": false;
113
+ "isSignal": true;
114
+ };
115
+ }, {
116
+ "changed": "changed";
117
+ }, never, never, true, never>;
118
+ }
119
+ /** Da che parte del comando esce il suggerimento. */
120
+ export type TooltipPosition = "top" | "bottom" | "left" | "right";
121
+ export declare class TooltipBubbleComponent {
122
+ text: string;
123
+ id: string;
124
+ static ɵfac: i0.ɵɵFactoryDeclaration<TooltipBubbleComponent, never>;
125
+ static ɵcmp: i0.ɵɵComponentDeclaration<TooltipBubbleComponent, "ml-tooltip-bubble", never, {}, {}, never, never, true, never>;
126
+ }
127
+ /**
128
+ * @author Vito Salvia - CNR IMAA geoSDI Group
129
+ * @email vito.salvia@gmail.com
130
+ */
131
+ export declare class TooltipDirective {
132
+ /** Il testo ; vuoto, niente suggerimento. */
133
+ readonly text: InputSignal<string | null | undefined>;
134
+ readonly tooltipPosition: InputSignal<TooltipPosition>;
135
+ readonly tooltipDisabled: InputSignalWithTransform<boolean, unknown>;
136
+ /** Al tocco : vero si chiude da sé, falso resta finché non si tocca altrove. */
137
+ readonly autoHide: InputSignalWithTransform<boolean, unknown>;
138
+ /** Solo se il testo dell'elemento è troncato (con i puntini) : altrimenti si legge già. */
139
+ readonly showOnEllipsis: InputSignalWithTransform<boolean, unknown>;
140
+ private readonly overlay;
141
+ private readonly host;
142
+ private readonly bubbleId;
143
+ private ref?;
144
+ private timer?;
145
+ private readonly outside;
146
+ constructor();
147
+ /** Col mouse si aspetta un attimo : non si accende su ogni pulsante attraversato. */
148
+ protected schedule(): void;
149
+ /**
150
+ * Al fuoco solo se si vede, cioè da tastiera : quando lo rimette il codice
151
+ * — una finestra che si chiude lo restituisce al pulsante che l'ha aperta
152
+ * — la bolla resterebbe accesa senza che nessuno l'abbia chiesta.
153
+ */
154
+ protected focused(): void;
155
+ protected touched(): void;
156
+ show(): void;
157
+ hide(): void;
158
+ static ɵfac: i0.ɵɵFactoryDeclaration<TooltipDirective, never>;
159
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TooltipDirective, "[mlTooltip]", never, {
160
+ "text": {
161
+ "alias": "mlTooltip";
162
+ "required": false;
163
+ "isSignal": true;
164
+ };
165
+ "tooltipPosition": {
166
+ "alias": "tooltipPosition";
167
+ "required": false;
168
+ "isSignal": true;
169
+ };
170
+ "tooltipDisabled": {
171
+ "alias": "tooltipDisabled";
172
+ "required": false;
173
+ "isSignal": true;
174
+ };
175
+ "autoHide": {
176
+ "alias": "autoHide";
177
+ "required": false;
178
+ "isSignal": true;
179
+ };
180
+ "showOnEllipsis": {
181
+ "alias": "showOnEllipsis";
182
+ "required": false;
183
+ "isSignal": true;
184
+ };
185
+ }, {}, never, never, true, never>;
186
+ }
187
+ export interface DialogOptions<D = unknown> {
188
+ header?: string;
189
+ /** Di serie vero. */
190
+ showHeader?: boolean;
191
+ /** La X in alto a destra. */
192
+ closable?: boolean;
193
+ /** Di serie vero. */
194
+ closeOnEscape?: boolean;
195
+ /** Il clic sulla maschera chiude ; di serie no. */
196
+ dismissableMask?: boolean;
197
+ width?: string;
198
+ height?: string;
199
+ /** Stile del riquadro della finestra. */
200
+ style?: Record<string, string>;
201
+ /**
202
+ * Larghezze per misura dello schermo, `{ "1279px": "95vw" }` : vale la
203
+ * prima soglia che la finestra non supera.
204
+ */
205
+ breakpoints?: Record<string, string>;
206
+ /** Classe del riquadro. */
207
+ styleClass?: string;
208
+ /** Quello che la finestra riceve in {@link DialogConfig}. */
209
+ data?: D;
210
+ }
211
+ export declare class DialogConfig<D = any> {
212
+ data?: D;
213
+ header?: string;
214
+ }
215
+ export declare class DialogRef<R = any> {
216
+ private readonly cdkRef;
217
+ /**
218
+ * Emette una volta, alla chiusura : col valore passato a {@link close}, o
219
+ * `undefined` se la si è chiusa con la X, con ESC o dalla maschera.
220
+ */
221
+ readonly onClose: Observable<R | undefined>;
222
+ constructor(cdkRef: DialogRef$1<R, any>);
223
+ close(result?: R): void;
224
+ /** Chiude la finestra senza restituire un valore. */
225
+ destroy(): void;
226
+ }
227
+ /**
228
+ * La larghezza che i `breakpoints` danno alla misura attuale dello schermo, o
229
+ * `undefined` se nessuna soglia vale.
230
+ */
231
+ export declare function breakpointWidth(breakpoints: Record<string, string> | undefined, viewportWidth: number): string | undefined;
232
+ /**
233
+ * @author Vito Salvia - CNR IMAA geoSDI Group
234
+ * @email vito.salvia@gmail.com
235
+ */
236
+ export declare class DialogService {
237
+ private readonly dialog;
238
+ /**
239
+ * @param component il componente da mostrare : trova nell'iniettore
240
+ * {@link DialogConfig} (i dati) e {@link DialogRef} (per chiudersi)
241
+ * @param options vedi {@link DialogOptions}
242
+ */
243
+ open<C, R = any>(component: Type<C>, options?: DialogOptions): DialogRef<R>;
244
+ /** Chiude tutte le finestre aperte da questo servizio. */
245
+ closeAll(): void;
246
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, never>;
247
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
248
+ }
249
+ /**
250
+ * L'intestazione è il titolo `header`, oppure un `<ng-template #header>` ;
251
+ * il piede un `<ng-template #footer>`. Il contenuto è quello fra i tag.
252
+ *
253
+ * @author Vito Salvia - CNR IMAA geoSDI Group
254
+ * @email vito.salvia@gmail.com
255
+ */
256
+ export declare class DialogComponent {
257
+ readonly visible: ModelSignal<boolean>;
258
+ readonly header: InputSignal<string | undefined>;
259
+ readonly showHeader: InputSignalWithTransform<boolean, unknown>;
260
+ readonly closable: InputSignalWithTransform<boolean, unknown>;
261
+ readonly closeOnEscape: InputSignalWithTransform<boolean, unknown>;
262
+ readonly dismissableMask: InputSignalWithTransform<boolean, unknown>;
263
+ readonly modal: InputSignalWithTransform<boolean, unknown>;
264
+ /** Il fuoco al primo elemento all'apertura ; falso, resta alla finestra. */
265
+ readonly focusOnShow: InputSignalWithTransform<boolean, unknown>;
266
+ readonly style: InputSignal<Record<string, string> | undefined>;
267
+ readonly breakpoints: InputSignal<Record<string, string> | undefined>;
268
+ /** Alla chiusura, da qualunque parte arrivi. */
269
+ readonly closed: OutputEmitterRef<void>;
270
+ protected readonly headerTemplate: Signal<TemplateRef<unknown> | undefined>;
271
+ protected readonly footerTemplate: Signal<TemplateRef<unknown> | undefined>;
272
+ protected readonly titleId: string;
273
+ protected readonly viewport: WritableSignal<number>;
274
+ protected readonly panelStyle: Signal<Record<string, string>>;
275
+ private wasVisible;
276
+ constructor();
277
+ protected resized(): void;
278
+ close(): void;
279
+ protected escape(event: Event): void;
280
+ protected maskClicked(event: MouseEvent): void;
281
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogComponent, never>;
282
+ static ɵcmp: i0.ɵɵComponentDeclaration<DialogComponent, "ml-dialog", never, {
283
+ "visible": {
284
+ "alias": "visible";
285
+ "required": false;
286
+ "isSignal": true;
287
+ };
288
+ "header": {
289
+ "alias": "header";
290
+ "required": false;
291
+ "isSignal": true;
292
+ };
293
+ "showHeader": {
294
+ "alias": "showHeader";
295
+ "required": false;
296
+ "isSignal": true;
297
+ };
298
+ "closable": {
299
+ "alias": "closable";
300
+ "required": false;
301
+ "isSignal": true;
302
+ };
303
+ "closeOnEscape": {
304
+ "alias": "closeOnEscape";
305
+ "required": false;
306
+ "isSignal": true;
307
+ };
308
+ "dismissableMask": {
309
+ "alias": "dismissableMask";
310
+ "required": false;
311
+ "isSignal": true;
312
+ };
313
+ "modal": {
314
+ "alias": "modal";
315
+ "required": false;
316
+ "isSignal": true;
317
+ };
318
+ "focusOnShow": {
319
+ "alias": "focusOnShow";
320
+ "required": false;
321
+ "isSignal": true;
322
+ };
323
+ "style": {
324
+ "alias": "style";
325
+ "required": false;
326
+ "isSignal": true;
327
+ };
328
+ "breakpoints": {
329
+ "alias": "breakpoints";
330
+ "required": false;
331
+ "isSignal": true;
332
+ };
333
+ }, {
334
+ "visible": "visibleChange";
335
+ "closed": "closed";
336
+ }, ["headerTemplate", "footerTemplate"], ["*"], true, never>;
337
+ }
338
+ export type ToastSeverity = "success" | "info" | "warn" | "error";
339
+ /** Un avviso : il testo è già tradotto. */
340
+ export interface ToastMessage {
341
+ id: number;
342
+ severity: ToastSeverity;
343
+ detail: string;
344
+ }
345
+ /**
346
+ * @author Vito Salvia - CNR IMAA geoSDI Group
347
+ * @email vito.salvia@gmail.com
348
+ */
349
+ export declare class ToastStore {
350
+ /** Durata di visualizzazione di un avviso. */
351
+ static readonly LIFE_MS: number;
352
+ private nextId;
353
+ private readonly list;
354
+ readonly messages: Signal<ToastMessage[]>;
355
+ add(severity: ToastSeverity, detail: string, life?: number): void;
356
+ remove(id: number): void;
357
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastStore, never>;
358
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
359
+ }
360
+ /**
361
+ * @author Vito Salvia - CNR IMAA geoSDI Group
362
+ * @email vito.salvia@gmail.com
363
+ */
364
+ export declare class ToastComponent {
365
+ protected readonly store: ToastStore;
366
+ protected readonly icons: Record<ToastSeverity, string>;
367
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastComponent, never>;
368
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToastComponent, "ml-toast", never, {}, {}, never, never, true, never>;
369
+ }
370
+ /** Che cosa chiedere, e che cosa fare alla risposta. */
371
+ export interface ConfirmOptions {
372
+ message: string;
373
+ header?: string;
374
+ /** Al «Sì». */
375
+ accept?: () => void;
376
+ /** Al «No», e anche alla X e a ESC : non si è confermato niente. */
377
+ reject?: () => void;
378
+ acceptLabel?: string;
379
+ rejectLabel?: string;
380
+ }
381
+ /**
382
+ * Il corpo della finestra di conferma : il messaggio e i due pulsanti.
383
+ */
384
+ export declare class ConfirmComponent {
385
+ protected readonly options: ConfirmOptions;
386
+ protected readonly ref: DialogRef<boolean>;
387
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmComponent, never>;
388
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmComponent, "ml-confirm", never, {}, {}, never, never, true, never>;
389
+ }
390
+ /**
391
+ * @author Vito Salvia - CNR IMAA geoSDI Group
392
+ * @email vito.salvia@gmail.com
393
+ */
394
+ export declare class ConfirmService {
395
+ private readonly dialog;
396
+ confirm(options: ConfirmOptions): void;
397
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmService, never>;
398
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
399
+ }
400
+ /**
401
+ * Le regole delle voci di una tendina, senza Angular : si provano da sole.
402
+ *
403
+ * Una voce può essere un valore semplice (una stringa, un numero : etichetta
404
+ * e valore sono lei) o un oggetto, di cui `optionLabel` e `optionValue`
405
+ * dicono quali campi leggere. Senza `optionValue` il valore è l'oggetto.
406
+ */
407
+ /** Il valore di un campo dell'oggetto, anche annidato (`a.b`). */
408
+ export declare function fieldOf(option: unknown, field: string | undefined): unknown;
409
+ export declare function labelOf(option: unknown, optionLabel?: string): string;
410
+ export declare function valueOf(option: unknown, optionValue?: string): unknown;
411
+ /**
412
+ * Due valori sono lo stesso valore : uguali, o oggetti con lo stesso
413
+ * contenuto. Le form a volte rileggono un oggetto uguale e non lo stesso.
414
+ */
415
+ export declare function sameValue(a: unknown, b: unknown): boolean;
416
+ /** Una riga del pannello : l'intestazione di un gruppo o una voce. */
417
+ export type SelectRow = {
418
+ kind: "group";
419
+ group: unknown;
420
+ label: string;
421
+ } | {
422
+ kind: "option";
423
+ option: unknown;
424
+ label: string;
425
+ value: unknown;
426
+ index: number;
427
+ };
428
+ export interface RowsSpec {
429
+ options: readonly unknown[];
430
+ optionLabel?: string;
431
+ optionValue?: string;
432
+ group?: boolean;
433
+ optionGroupLabel?: string;
434
+ optionGroupChildren?: string;
435
+ /** Il testo cercato ; vuoto, tutte. */
436
+ query?: string;
437
+ /** I campi su cui cercare, separati da virgole ; di serie l'etichetta. */
438
+ filterBy?: string;
439
+ }
440
+ /**
441
+ * Le righe del pannello, con i gruppi e la ricerca applicati. `index` numera
442
+ * le sole voci, ed è quello che la tastiera percorre. Un gruppo senza voci
443
+ * rimaste dopo la ricerca non si mostra.
444
+ */
445
+ export declare function rowsOf(spec: RowsSpec): SelectRow[];
446
+ type OptionRow = Extract<SelectRow, {
447
+ kind: "option";
448
+ }>;
449
+ /**
450
+ * Segue il modello combobox + listbox delle WAI-ARIA : il fuoco resta sul
451
+ * campo (o sulla ricerca, a pannello aperto) e la voce attiva la indica
452
+ * `aria-activedescendant`. Frecce, Home, Fine, Invio, Esc e Tab fanno quello
453
+ * che ci si aspetta.
454
+ *
455
+ * @author Vito Salvia - CNR IMAA geoSDI Group
456
+ * @email vito.salvia@gmail.com
457
+ */
458
+ export declare class SelectComponent implements ControlValueAccessor {
459
+ readonly options: InputSignal<readonly unknown[] | null | undefined>;
460
+ readonly optionLabel: InputSignal<string | undefined>;
461
+ readonly optionValue: InputSignal<string | undefined>;
462
+ readonly group: InputSignalWithTransform<boolean, unknown>;
463
+ readonly optionGroupLabel: InputSignal<string | undefined>;
464
+ readonly optionGroupChildren: InputSignal<string | undefined>;
465
+ readonly placeholder: InputSignal<string | null | undefined>;
466
+ readonly showClear: InputSignalWithTransform<boolean, unknown>;
467
+ /** La casella di ricerca in cima al pannello. */
468
+ readonly filter: InputSignalWithTransform<boolean, unknown>;
469
+ /** I campi su cui cercare, separati da virgole ; di serie l'etichetta. */
470
+ readonly filterBy: InputSignal<string | undefined>;
471
+ /** Si può scrivere un valore che fra le voci non c'è. */
472
+ readonly editable: InputSignalWithTransform<boolean, unknown>;
473
+ /** Più voci insieme : il valore è un elenco. */
474
+ readonly multiple: InputSignalWithTransform<boolean, unknown>;
475
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
476
+ /** L'`id` del campo, per il `label for`. */
477
+ readonly inputId: InputSignal<string | undefined>;
478
+ readonly ariaLabel: InputSignal<string | null | undefined>;
479
+ /** Classe del campo (il riquadro con il bordo). */
480
+ readonly styleClass: InputSignal<string | undefined>;
481
+ readonly panelStyleClass: InputSignal<string | undefined>;
482
+ readonly size: InputSignal<"small" | undefined>;
483
+ /** Larga quanto il suo contenitore. */
484
+ readonly fluid: InputSignalWithTransform<boolean, unknown>;
485
+ readonly emptyMessage: InputSignal<string>;
486
+ readonly changed: OutputEmitterRef<any>;
487
+ /** La X ha svuotato la scelta. */
488
+ readonly cleared: OutputEmitterRef<void>;
489
+ protected readonly itemTemplate: Signal<TemplateRef<unknown> | undefined>;
490
+ protected readonly selectedItemTemplate: Signal<TemplateRef<unknown> | undefined>;
491
+ protected readonly groupTemplate: Signal<TemplateRef<unknown> | undefined>;
492
+ private readonly triggerRef;
493
+ private readonly fieldRef;
494
+ private readonly searchRef;
495
+ private readonly connected;
496
+ private readonly follow;
497
+ protected readonly positions: ConnectedPosition[];
498
+ protected readonly listId: string;
499
+ private readonly ownId;
500
+ protected readonly fieldId: Signal<string>;
501
+ protected readonly open: WritableSignal<boolean>;
502
+ protected readonly focused: WritableSignal<boolean>;
503
+ protected readonly query: WritableSignal<string>;
504
+ protected readonly active: WritableSignal<number>;
505
+ protected readonly triggerWidth: WritableSignal<number>;
506
+ private readonly selection;
507
+ private readonly formDisabled;
508
+ protected readonly isDisabled: Signal<boolean>;
509
+ protected readonly rows: Signal<SelectRow[]>;
510
+ private readonly allOptions;
511
+ private readonly visibleOptions;
512
+ protected readonly selectedOptions: Signal<unknown[]>;
513
+ private readonly selectedValues;
514
+ protected readonly filled: Signal<boolean>;
515
+ /** Il testo a video : le etichette scelte, o il valore scritto a mano. */
516
+ protected readonly displayText: Signal<string>;
517
+ protected readonly activeId: Signal<string | null>;
518
+ /** L'`id` del `<label for>` che nomina la tendina, se c'è. */
519
+ protected readonly labelledBy: WritableSignal<string | null>;
520
+ constructor();
521
+ private onChange;
522
+ private onTouched;
523
+ get value(): any;
524
+ writeValue(value: unknown): void;
525
+ registerOnChange(fn: (value: unknown) => void): void;
526
+ registerOnTouched(fn: () => void): void;
527
+ setDisabledState(disabled: boolean): void;
528
+ protected optionId(index: number): string;
529
+ protected isSelected(row: OptionRow): boolean;
530
+ protected toggle(): void;
531
+ private show;
532
+ protected attached(): void;
533
+ close(): void;
534
+ protected outsideClick(event: MouseEvent): void;
535
+ protected blurred(): void;
536
+ protected pick(row: OptionRow): void;
537
+ protected typed(text: string): void;
538
+ protected clear(event: Event): void;
539
+ private commit;
540
+ protected keydown(event: KeyboardEvent): void;
541
+ private scrollToActive;
542
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
543
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "ml-select", never, {
544
+ "options": {
545
+ "alias": "options";
546
+ "required": false;
547
+ "isSignal": true;
548
+ };
549
+ "optionLabel": {
550
+ "alias": "optionLabel";
551
+ "required": false;
552
+ "isSignal": true;
553
+ };
554
+ "optionValue": {
555
+ "alias": "optionValue";
556
+ "required": false;
557
+ "isSignal": true;
558
+ };
559
+ "group": {
560
+ "alias": "group";
561
+ "required": false;
562
+ "isSignal": true;
563
+ };
564
+ "optionGroupLabel": {
565
+ "alias": "optionGroupLabel";
566
+ "required": false;
567
+ "isSignal": true;
568
+ };
569
+ "optionGroupChildren": {
570
+ "alias": "optionGroupChildren";
571
+ "required": false;
572
+ "isSignal": true;
573
+ };
574
+ "placeholder": {
575
+ "alias": "placeholder";
576
+ "required": false;
577
+ "isSignal": true;
578
+ };
579
+ "showClear": {
580
+ "alias": "showClear";
581
+ "required": false;
582
+ "isSignal": true;
583
+ };
584
+ "filter": {
585
+ "alias": "filter";
586
+ "required": false;
587
+ "isSignal": true;
588
+ };
589
+ "filterBy": {
590
+ "alias": "filterBy";
591
+ "required": false;
592
+ "isSignal": true;
593
+ };
594
+ "editable": {
595
+ "alias": "editable";
596
+ "required": false;
597
+ "isSignal": true;
598
+ };
599
+ "multiple": {
600
+ "alias": "multiple";
601
+ "required": false;
602
+ "isSignal": true;
603
+ };
604
+ "disabled": {
605
+ "alias": "disabled";
606
+ "required": false;
607
+ "isSignal": true;
608
+ };
609
+ "inputId": {
610
+ "alias": "inputId";
611
+ "required": false;
612
+ "isSignal": true;
613
+ };
614
+ "ariaLabel": {
615
+ "alias": "ariaLabel";
616
+ "required": false;
617
+ "isSignal": true;
618
+ };
619
+ "styleClass": {
620
+ "alias": "styleClass";
621
+ "required": false;
622
+ "isSignal": true;
623
+ };
624
+ "panelStyleClass": {
625
+ "alias": "panelStyleClass";
626
+ "required": false;
627
+ "isSignal": true;
628
+ };
629
+ "size": {
630
+ "alias": "size";
631
+ "required": false;
632
+ "isSignal": true;
633
+ };
634
+ "fluid": {
635
+ "alias": "fluid";
636
+ "required": false;
637
+ "isSignal": true;
638
+ };
639
+ "emptyMessage": {
640
+ "alias": "emptyMessage";
641
+ "required": false;
642
+ "isSignal": true;
643
+ };
644
+ }, {
645
+ "changed": "changed";
646
+ "cleared": "cleared";
647
+ }, ["itemTemplate", "selectedItemTemplate", "groupTemplate"], never, true, never>;
648
+ }
649
+ /**
650
+ * `variant="on"` mette l'etichetta salita **sul bordo** del campo ; di serie
651
+ * («over») sta sopra.
652
+ *
653
+ * @author Vito Salvia - CNR IMAA geoSDI Group
654
+ * @email vito.salvia@gmail.com
655
+ */
656
+ export declare class FloatLabelComponent {
657
+ readonly variant: InputSignal<"on" | "over">;
658
+ static ɵfac: i0.ɵɵFactoryDeclaration<FloatLabelComponent, never>;
659
+ static ɵcmp: i0.ɵɵComponentDeclaration<FloatLabelComponent, "ml-floatlabel", never, {
660
+ "variant": {
661
+ "alias": "variant";
662
+ "required": false;
663
+ "isSignal": true;
664
+ };
665
+ }, {}, never, ["*"], true, never>;
666
+ }
667
+ /**
668
+ * Le regole del campo numerico, senza Angular : si provano da sole.
669
+ */
670
+ export interface NumberFormatOptions {
671
+ locale?: string;
672
+ minFractionDigits?: number;
673
+ maxFractionDigits?: number;
674
+ useGrouping?: boolean;
675
+ }
676
+ /** Il separatore dei decimali e quello delle migliaia della lingua. */
677
+ export declare function separators(locale?: string): {
678
+ decimal: string;
679
+ group: string;
680
+ };
681
+ /** Il numero scritto, come lo mostra il campo ; vuoto per `null`. */
682
+ export declare function formatNumber(value: number | null | undefined, options?: NumberFormatOptions): string;
683
+ /**
684
+ * Il numero di un testo scritto a mano, o `null` se non lo è. Le migliaia si
685
+ * tolgono, il separatore dei decimali della lingua vale come punto ; un testo
686
+ * vuoto è `null`, non zero.
687
+ */
688
+ export declare function parseNumber(text: string, options?: NumberFormatOptions): number | null;
689
+ /** Il numero dentro i limiti, e arrotondato ai decimali ammessi. */
690
+ export declare function clampNumber(value: number, min?: number | null, max?: number | null, maxFractionDigits?: number): number;
691
+ export interface AllowedInput extends NumberFormatOptions {
692
+ /** Il minimo : sotto lo zero, o assente, ammette il meno. */
693
+ min?: number;
694
+ }
695
+ /**
696
+ * Il testo scritto, ripulito di quello che in un numero non può stare :
697
+ * restano le cifre, il separatore dei decimali (uno solo, e solo se i
698
+ * decimali sono ammessi), quello delle migliaia (solo con `useGrouping`) e il
699
+ * meno (solo in testa, e solo se il minimo lo consente). È quello che il campo
700
+ * fa a ogni tasto e a ogni incolla : le lettere non arrivano mai a video.
701
+ */
702
+ export declare function allowedText(text: string, options?: AllowedInput): string;
703
+ /**
704
+ * Mentre si scrive il valore arriva alla form a ogni tasto ; minimo,
705
+ * massimo e arrotondamento si applicano all'uscita dal campo, che è quando
706
+ * si riscrive il testo. Le frecce su e giù, e i due pulsanti con
707
+ * `showButtons`, cambiano di `step`.
708
+ *
709
+ * @author Vito Salvia - CNR IMAA geoSDI Group
710
+ * @email vito.salvia@gmail.com
711
+ */
712
+ export declare class InputNumberComponent implements ControlValueAccessor {
713
+ readonly inputId: InputSignal<string | undefined>;
714
+ readonly ariaLabel: InputSignal<string | undefined>;
715
+ readonly placeholder: InputSignal<string | undefined>;
716
+ readonly min: InputSignalWithTransform<number | undefined, unknown>;
717
+ readonly max: InputSignalWithTransform<number | undefined, unknown>;
718
+ readonly step: InputSignalWithTransform<number, unknown>;
719
+ readonly minFractionDigits: InputSignalWithTransform<number | undefined, unknown>;
720
+ readonly maxFractionDigits: InputSignalWithTransform<number | undefined, unknown>;
721
+ /** Abilita i separatori delle migliaia; attivo di serie. */
722
+ readonly useGrouping: InputSignalWithTransform<boolean, unknown>;
723
+ /** La lingua dei separatori ; di serie quella del browser. */
724
+ readonly locale: InputSignal<string | undefined>;
725
+ /** Modalità di inserimento numerico: sempre «decimal». */
726
+ readonly mode: InputSignal<string | undefined>;
727
+ readonly showButtons: InputSignalWithTransform<boolean, unknown>;
728
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
729
+ protected readonly ownId: string;
730
+ protected readonly value: WritableSignal<number | null>;
731
+ /** Il testo scritto, finché non si esce dal campo. */
732
+ private readonly draft;
733
+ private readonly formDisabled;
734
+ private readonly field;
735
+ protected readonly isDisabled: Signal<boolean>;
736
+ private readonly format;
737
+ protected readonly text: Signal<string>;
738
+ private onChange;
739
+ private onTouched;
740
+ writeValue(value: unknown): void;
741
+ registerOnChange(fn: (value: number | null) => void): void;
742
+ registerOnTouched(fn: () => void): void;
743
+ setDisabledState(disabled: boolean): void;
744
+ protected typed(raw: string): void;
745
+ protected blurred(): void;
746
+ protected keydown(event: KeyboardEvent): void;
747
+ protected spin(direction: 1 | -1): void;
748
+ private set;
749
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputNumberComponent, never>;
750
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputNumberComponent, "ml-inputnumber", never, {
751
+ "inputId": {
752
+ "alias": "inputId";
753
+ "required": false;
754
+ "isSignal": true;
755
+ };
756
+ "ariaLabel": {
757
+ "alias": "ariaLabel";
758
+ "required": false;
759
+ "isSignal": true;
760
+ };
761
+ "placeholder": {
762
+ "alias": "placeholder";
763
+ "required": false;
764
+ "isSignal": true;
765
+ };
766
+ "min": {
767
+ "alias": "min";
768
+ "required": false;
769
+ "isSignal": true;
770
+ };
771
+ "max": {
772
+ "alias": "max";
773
+ "required": false;
774
+ "isSignal": true;
775
+ };
776
+ "step": {
777
+ "alias": "step";
778
+ "required": false;
779
+ "isSignal": true;
780
+ };
781
+ "minFractionDigits": {
782
+ "alias": "minFractionDigits";
783
+ "required": false;
784
+ "isSignal": true;
785
+ };
786
+ "maxFractionDigits": {
787
+ "alias": "maxFractionDigits";
788
+ "required": false;
789
+ "isSignal": true;
790
+ };
791
+ "useGrouping": {
792
+ "alias": "useGrouping";
793
+ "required": false;
794
+ "isSignal": true;
795
+ };
796
+ "locale": {
797
+ "alias": "locale";
798
+ "required": false;
799
+ "isSignal": true;
800
+ };
801
+ "mode": {
802
+ "alias": "mode";
803
+ "required": false;
804
+ "isSignal": true;
805
+ };
806
+ "showButtons": {
807
+ "alias": "showButtons";
808
+ "required": false;
809
+ "isSignal": true;
810
+ };
811
+ "disabled": {
812
+ "alias": "disabled";
813
+ "required": false;
814
+ "isSignal": true;
815
+ };
816
+ }, {}, never, never, true, never>;
817
+ }
818
+ /**
819
+ * @author Vito Salvia - CNR IMAA geoSDI Group
820
+ * @email vito.salvia@gmail.com
821
+ */
822
+ export declare class ToggleSwitchComponent implements ControlValueAccessor {
823
+ readonly inputId: InputSignal<string | undefined>;
824
+ readonly ariaLabel: InputSignal<string | undefined>;
825
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
826
+ readonly changed: OutputEmitterRef<boolean>;
827
+ protected readonly checked: WritableSignal<boolean>;
828
+ private readonly formDisabled;
829
+ protected readonly isDisabled: Signal<boolean>;
830
+ private onChange;
831
+ protected onTouched: () => void;
832
+ writeValue(value: unknown): void;
833
+ registerOnChange(fn: (value: boolean) => void): void;
834
+ registerOnTouched(fn: () => void): void;
835
+ setDisabledState(disabled: boolean): void;
836
+ protected toggle(value: boolean): void;
837
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToggleSwitchComponent, never>;
838
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToggleSwitchComponent, "ml-toggleswitch", never, {
839
+ "inputId": {
840
+ "alias": "inputId";
841
+ "required": false;
842
+ "isSignal": true;
843
+ };
844
+ "ariaLabel": {
845
+ "alias": "ariaLabel";
846
+ "required": false;
847
+ "isSignal": true;
848
+ };
849
+ "disabled": {
850
+ "alias": "disabled";
851
+ "required": false;
852
+ "isSignal": true;
853
+ };
854
+ }, {
855
+ "changed": "changed";
856
+ }, never, never, true, never>;
857
+ }
858
+ /**
859
+ * @author Vito Salvia - CNR IMAA geoSDI Group
860
+ * @email vito.salvia@gmail.com
861
+ */
862
+ export declare class SliderComponent implements ControlValueAccessor {
863
+ readonly min: InputSignalWithTransform<number, unknown>;
864
+ readonly max: InputSignalWithTransform<number, unknown>;
865
+ readonly step: InputSignalWithTransform<number, unknown>;
866
+ readonly ariaLabel: InputSignal<string | undefined>;
867
+ readonly ariaLabelledBy: InputSignal<string | undefined>;
868
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
869
+ readonly changed: OutputEmitterRef<number>;
870
+ protected readonly value: WritableSignal<number>;
871
+ private readonly formDisabled;
872
+ protected readonly isDisabled: Signal<boolean>;
873
+ /** La parte piena della pista, in percentuale : la disegna il css. */
874
+ protected readonly fill: Signal<string>;
875
+ private onChange;
876
+ protected onTouched: () => void;
877
+ writeValue(value: unknown): void;
878
+ registerOnChange(fn: (value: number) => void): void;
879
+ registerOnTouched(fn: () => void): void;
880
+ setDisabledState(disabled: boolean): void;
881
+ protected moved(value: number): void;
882
+ static ɵfac: i0.ɵɵFactoryDeclaration<SliderComponent, never>;
883
+ static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "ml-slider", never, {
884
+ "min": {
885
+ "alias": "min";
886
+ "required": false;
887
+ "isSignal": true;
888
+ };
889
+ "max": {
890
+ "alias": "max";
891
+ "required": false;
892
+ "isSignal": true;
893
+ };
894
+ "step": {
895
+ "alias": "step";
896
+ "required": false;
897
+ "isSignal": true;
898
+ };
899
+ "ariaLabel": {
900
+ "alias": "ariaLabel";
901
+ "required": false;
902
+ "isSignal": true;
903
+ };
904
+ "ariaLabelledBy": {
905
+ "alias": "ariaLabelledBy";
906
+ "required": false;
907
+ "isSignal": true;
908
+ };
909
+ "disabled": {
910
+ "alias": "disabled";
911
+ "required": false;
912
+ "isSignal": true;
913
+ };
914
+ }, {
915
+ "changed": "changed";
916
+ }, never, never, true, never>;
917
+ }
918
+ /**
919
+ * @author Vito Salvia - CNR IMAA geoSDI Group
920
+ * @email vito.salvia@gmail.com
921
+ */
922
+ export declare class SelectButtonComponent implements ControlValueAccessor {
923
+ readonly options: InputSignal<readonly unknown[] | null | undefined>;
924
+ readonly optionLabel: InputSignal<string | undefined>;
925
+ readonly optionValue: InputSignal<string | undefined>;
926
+ readonly allowEmpty: InputSignalWithTransform<boolean, unknown>;
927
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
928
+ protected readonly itemTemplate: Signal<TemplateRef<unknown> | undefined>;
929
+ private readonly value;
930
+ private onChange;
931
+ writeValue(value: unknown): void;
932
+ registerOnChange(fn: (value: unknown) => void): void;
933
+ registerOnTouched(): void;
934
+ protected labelOf(option: unknown): string;
935
+ protected isSelected(option: unknown): boolean;
936
+ protected pick(option: unknown): void;
937
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectButtonComponent, never>;
938
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectButtonComponent, "ml-selectbutton", never, {
939
+ "options": {
940
+ "alias": "options";
941
+ "required": false;
942
+ "isSignal": true;
943
+ };
944
+ "optionLabel": {
945
+ "alias": "optionLabel";
946
+ "required": false;
947
+ "isSignal": true;
948
+ };
949
+ "optionValue": {
950
+ "alias": "optionValue";
951
+ "required": false;
952
+ "isSignal": true;
953
+ };
954
+ "allowEmpty": {
955
+ "alias": "allowEmpty";
956
+ "required": false;
957
+ "isSignal": true;
958
+ };
959
+ "disabled": {
960
+ "alias": "disabled";
961
+ "required": false;
962
+ "isSignal": true;
963
+ };
964
+ }, {}, ["itemTemplate"], never, true, never>;
965
+ }
966
+ /**
967
+ * @author Vito Salvia - CNR IMAA geoSDI Group
968
+ * @email vito.salvia@gmail.com
969
+ */
970
+ export declare class RadioButtonComponent implements ControlValueAccessor {
971
+ readonly value: InputSignal<unknown>;
972
+ readonly name: InputSignal<string | undefined>;
973
+ readonly inputId: InputSignal<string | undefined>;
974
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
975
+ private readonly model;
976
+ private readonly formDisabled;
977
+ protected readonly checked: Signal<boolean>;
978
+ protected readonly isDisabled: Signal<boolean>;
979
+ private onChange;
980
+ protected onTouched: () => void;
981
+ writeValue(value: unknown): void;
982
+ registerOnChange(fn: (value: unknown) => void): void;
983
+ registerOnTouched(fn: () => void): void;
984
+ setDisabledState(disabled: boolean): void;
985
+ protected pick(): void;
986
+ static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonComponent, never>;
987
+ static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonComponent, "ml-radiobutton", never, {
988
+ "value": {
989
+ "alias": "value";
990
+ "required": false;
991
+ "isSignal": true;
992
+ };
993
+ "name": {
994
+ "alias": "name";
995
+ "required": false;
996
+ "isSignal": true;
997
+ };
998
+ "inputId": {
999
+ "alias": "inputId";
1000
+ "required": false;
1001
+ "isSignal": true;
1002
+ };
1003
+ "disabled": {
1004
+ "alias": "disabled";
1005
+ "required": false;
1006
+ "isSignal": true;
1007
+ };
1008
+ }, {}, never, never, true, never>;
1009
+ }
1010
+ /**
1011
+ * Fa seguire al pannello di un overlay il suo campo, quando a scorrere è un
1012
+ * contenitore e non la finestra.
1013
+ *
1014
+ * Il CDK riposiziona un overlay agganciato solo quando scorrono la finestra o i
1015
+ * contenitori marcati `cdkScrollable`. Nel builder a scorrere è `.workspace`
1016
+ * (la pagina ha `overflow: hidden` per la mappa), e il pannello di una
1017
+ * tendina aperta restava fermo mentre il campo scorreva via. Si ascolta quindi
1018
+ * lo scorrimento di **qualunque** elemento, in cattura, finché il pannello è
1019
+ * aperto, e a ogni passo lo si riposiziona. Lo scorrimento dentro il pannello
1020
+ * stesso (l'elenco delle voci) non lo sposta, e riposizionarlo non costa niente.
1021
+ */
1022
+ declare class ScrollFollower {
1023
+ private readonly reposition;
1024
+ private listening;
1025
+ private readonly onScroll;
1026
+ constructor(reposition: () => void);
1027
+ start(): void;
1028
+ stop(): void;
1029
+ }
1030
+ /**
1031
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1032
+ * @email vito.salvia@gmail.com
1033
+ */
1034
+ export declare class PopoverComponent {
1035
+ readonly styleClass: InputSignal<string | undefined>;
1036
+ protected readonly positions: ConnectedPosition[];
1037
+ protected readonly open: WritableSignal<boolean>;
1038
+ protected readonly origin: WritableSignal<FlexibleConnectedPositionStrategyOrigin | undefined>;
1039
+ private trigger?;
1040
+ private readonly connected;
1041
+ protected readonly follow: ScrollFollower;
1042
+ constructor();
1043
+ /** Apre accanto all'elemento dell'evento, o chiude se è già aperto. */
1044
+ toggle(event: Event): void;
1045
+ show(event: Event): void;
1046
+ hide(): void;
1047
+ protected outsideClick(event: MouseEvent): void;
1048
+ protected keydown(event: KeyboardEvent): void;
1049
+ static ɵfac: i0.ɵɵFactoryDeclaration<PopoverComponent, never>;
1050
+ static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "ml-popover", never, {
1051
+ "styleClass": {
1052
+ "alias": "styleClass";
1053
+ "required": false;
1054
+ "isSignal": true;
1055
+ };
1056
+ }, {}, never, ["*"], true, never>;
1057
+ }
1058
+ /**
1059
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1060
+ * @email vito.salvia@gmail.com
1061
+ */
1062
+ export declare class DrawerComponent {
1063
+ readonly visible: ModelSignal<boolean>;
1064
+ readonly position: InputSignal<"left" | "right">;
1065
+ readonly ariaLabel: InputSignal<string | undefined>;
1066
+ readonly closed: OutputEmitterRef<void>;
1067
+ close(): void;
1068
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
1069
+ static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "ml-drawer", never, {
1070
+ "visible": {
1071
+ "alias": "visible";
1072
+ "required": false;
1073
+ "isSignal": true;
1074
+ };
1075
+ "position": {
1076
+ "alias": "position";
1077
+ "required": false;
1078
+ "isSignal": true;
1079
+ };
1080
+ "ariaLabel": {
1081
+ "alias": "ariaLabel";
1082
+ "required": false;
1083
+ "isSignal": true;
1084
+ };
1085
+ }, {
1086
+ "visible": "visibleChange";
1087
+ "closed": "closed";
1088
+ }, never, ["*"], true, never>;
1089
+ }
1090
+ /**
1091
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1092
+ * @email vito.salvia@gmail.com
1093
+ */
1094
+ export declare class SpinnerComponent {
1095
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpinnerComponent, never>;
1096
+ static ɵcmp: i0.ɵɵComponentDeclaration<SpinnerComponent, "ml-spinner", never, {}, {}, never, never, true, never>;
1097
+ }
1098
+ /**
1099
+ * <ml-tabs [(value)]="scheda">
1100
+ * <ml-tablist>
1101
+ * <ml-tab value="a">A</ml-tab> …
1102
+ * </ml-tablist>
1103
+ * <ml-tabpanels>
1104
+ * <ml-tabpanel value="a">…</ml-tabpanel> …
1105
+ * </ml-tabpanels>
1106
+ * </ml-tabs>
1107
+ *
1108
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1109
+ * @email vito.salvia@gmail.com
1110
+ */
1111
+ export declare class TabsComponent {
1112
+ readonly value: ModelSignal<any>;
1113
+ /** Il prefisso degli `id` che legano schede e pannelli. */
1114
+ readonly uid: string;
1115
+ isActive(value: unknown): boolean;
1116
+ idOf(kind: "tab" | "panel", value: unknown): string;
1117
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabsComponent, never>;
1118
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabsComponent, "ml-tabs", never, {
1119
+ "value": {
1120
+ "alias": "value";
1121
+ "required": false;
1122
+ "isSignal": true;
1123
+ };
1124
+ }, {
1125
+ "value": "valueChange";
1126
+ }, never, ["*"], true, never>;
1127
+ }
1128
+ export declare class TabListComponent {
1129
+ private readonly host;
1130
+ protected keydown(event: KeyboardEvent): void;
1131
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabListComponent, never>;
1132
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabListComponent, "ml-tablist", never, {}, {}, never, ["*"], true, never>;
1133
+ }
1134
+ export declare class TabComponent {
1135
+ readonly value: InputSignal<unknown>;
1136
+ protected readonly tabs: TabsComponent;
1137
+ protected readonly active: Signal<boolean>;
1138
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
1139
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "ml-tab", never, {
1140
+ "value": {
1141
+ "alias": "value";
1142
+ "required": false;
1143
+ "isSignal": true;
1144
+ };
1145
+ }, {}, never, ["*"], true, never>;
1146
+ }
1147
+ export declare class TabPanelsComponent {
1148
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabPanelsComponent, never>;
1149
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabPanelsComponent, "ml-tabpanels", never, {}, {}, never, ["*"], true, never>;
1150
+ }
1151
+ export declare class TabPanelComponent {
1152
+ readonly value: InputSignal<unknown>;
1153
+ protected readonly tabs: TabsComponent;
1154
+ protected readonly active: Signal<boolean>;
1155
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabPanelComponent, never>;
1156
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabPanelComponent, "ml-tabpanel", never, {
1157
+ "value": {
1158
+ "alias": "value";
1159
+ "required": false;
1160
+ "isSignal": true;
1161
+ };
1162
+ }, {}, never, ["*"], true, never>;
1163
+ }
1164
+ /**
1165
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1166
+ * @email vito.salvia@gmail.com
1167
+ */
1168
+ export declare class AccordionComponent {
1169
+ /** La voce aperta : il `value` di un `ml-accordion-panel`. */
1170
+ readonly value: ModelSignal<any>;
1171
+ readonly opened: OutputEmitterRef<any>;
1172
+ readonly closed: OutputEmitterRef<any>;
1173
+ isOpen(value: unknown): boolean;
1174
+ toggle(value: unknown): void;
1175
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccordionComponent, never>;
1176
+ static ɵcmp: i0.ɵɵComponentDeclaration<AccordionComponent, "ml-accordion", never, {
1177
+ "value": {
1178
+ "alias": "value";
1179
+ "required": false;
1180
+ "isSignal": true;
1181
+ };
1182
+ }, {
1183
+ "value": "valueChange";
1184
+ "opened": "opened";
1185
+ "closed": "closed";
1186
+ }, never, ["*"], true, never>;
1187
+ }
1188
+ export declare class AccordionPanelComponent {
1189
+ readonly value: InputSignal<unknown>;
1190
+ readonly accordion: AccordionComponent;
1191
+ readonly uid: string;
1192
+ readonly open: Signal<boolean>;
1193
+ toggle(): void;
1194
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccordionPanelComponent, never>;
1195
+ static ɵcmp: i0.ɵɵComponentDeclaration<AccordionPanelComponent, "ml-accordion-panel", never, {
1196
+ "value": {
1197
+ "alias": "value";
1198
+ "required": false;
1199
+ "isSignal": true;
1200
+ };
1201
+ }, {}, never, ["*"], true, never>;
1202
+ }
1203
+ export declare class AccordionHeaderComponent {
1204
+ protected readonly panel: AccordionPanelComponent;
1205
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccordionHeaderComponent, never>;
1206
+ static ɵcmp: i0.ɵɵComponentDeclaration<AccordionHeaderComponent, "ml-accordion-header", never, {}, {}, never, ["*"], true, never>;
1207
+ }
1208
+ export declare class AccordionContentComponent {
1209
+ protected readonly panel: AccordionPanelComponent;
1210
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccordionContentComponent, never>;
1211
+ static ɵcmp: i0.ɵɵComponentDeclaration<AccordionContentComponent, "ml-accordion-content", never, {}, {}, never, ["*"], true, never>;
1212
+ }
1213
+ /**
1214
+ * Il modello `#item` disegna una proposta al posto della sola etichetta.
1215
+ *
1216
+ * Con `dropdown` accanto al campo c'è la freccia, che chiede tutte le proposte
1217
+ * (`(complete)` col testo vuoto). Disegno e classi sono quelli della tendina
1218
+ * (`ml-select`), quindi etichetta sul campo, larghezza e stato invalido valgono
1219
+ * allo stesso modo.
1220
+ *
1221
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1222
+ * @email vito.salvia@gmail.com
1223
+ */
1224
+ export declare class AutocompleteComponent implements ControlValueAccessor {
1225
+ /** Le proposte : testi, o oggetti con l'etichetta in `optionLabel`. */
1226
+ readonly suggestions: InputSignal<readonly unknown[] | null | undefined>;
1227
+ readonly optionLabel: InputSignal<string | undefined>;
1228
+ /** I millisecondi fra l'ultimo tasto e la richiesta delle proposte. */
1229
+ readonly delay: InputSignalWithTransform<number, unknown>;
1230
+ /** I caratteri che servono perché si chiedano le proposte. */
1231
+ readonly minQueryLength: InputSignalWithTransform<number, unknown>;
1232
+ /** La freccia accanto al campo, che chiede tutte le proposte. */
1233
+ readonly dropdown: InputSignalWithTransform<boolean, unknown>;
1234
+ readonly showClear: InputSignalWithTransform<boolean, unknown>;
1235
+ readonly placeholder: InputSignal<string | null | undefined>;
1236
+ /**
1237
+ * Il testo del pannello quando una ricerca non trova niente. Senza, il
1238
+ * pannello resta chiuso.
1239
+ */
1240
+ readonly emptyMessage: InputSignal<string | null | undefined>;
1241
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
1242
+ /** L'`id` del campo, per il `label for`. */
1243
+ readonly inputId: InputSignal<string | undefined>;
1244
+ /** Il tasto d'invio della tastiera del telefono : `search` per le ricerche. */
1245
+ readonly enterKeyHint: InputSignal<string | undefined>;
1246
+ readonly ariaLabel: InputSignal<string | null | undefined>;
1247
+ /** Classe del campo (il riquadro con il bordo). */
1248
+ readonly styleClass: InputSignal<string | undefined>;
1249
+ readonly panelStyleClass: InputSignal<string | undefined>;
1250
+ readonly size: InputSignal<"small" | undefined>;
1251
+ /**
1252
+ * Il fuoco nel campo appena è a video : per una ricerca aperta in una
1253
+ * finestra, dove si è appena chiesto di cercare. Sul telefono apre anche
1254
+ * la tastiera, ed è quello che si vuole.
1255
+ */
1256
+ readonly autoFocus: InputSignalWithTransform<boolean, unknown>;
1257
+ /** Largo quanto il suo contenitore. */
1258
+ readonly fluid: InputSignalWithTransform<boolean, unknown>;
1259
+ /** Il testo da cui cercare le proposte ; vuoto dalla freccia. */
1260
+ readonly complete: OutputEmitterRef<string>;
1261
+ readonly selected: OutputEmitterRef<any>;
1262
+ /** La X ha svuotato il campo. */
1263
+ readonly cleared: OutputEmitterRef<void>;
1264
+ /** Il campo ha perso il fuoco. */
1265
+ readonly blurred: OutputEmitterRef<void>;
1266
+ /** Il modello `#item` disegna una proposta, come nella tendina. */
1267
+ protected readonly itemTemplate: Signal<TemplateRef<unknown> | undefined>;
1268
+ private readonly triggerRef;
1269
+ private readonly fieldRef;
1270
+ private readonly connected;
1271
+ protected readonly follow: ScrollFollower;
1272
+ protected readonly positions: ConnectedPosition[];
1273
+ protected readonly listId: string;
1274
+ private readonly ownId;
1275
+ protected readonly fieldId: Signal<string>;
1276
+ protected readonly open: WritableSignal<boolean>;
1277
+ protected readonly focused: WritableSignal<boolean>;
1278
+ protected readonly active: WritableSignal<number>;
1279
+ protected readonly triggerWidth: WritableSignal<number>;
1280
+ private readonly selection;
1281
+ private readonly formDisabled;
1282
+ protected readonly isDisabled: Signal<boolean>;
1283
+ protected readonly items: Signal<readonly unknown[]>;
1284
+ protected readonly filled: Signal<boolean>;
1285
+ /** Il testo a video : quello scritto, o l'etichetta della proposta scelta. */
1286
+ protected readonly displayText: Signal<string>;
1287
+ protected readonly activeId: Signal<string | null>;
1288
+ /**
1289
+ * Si è chiesto `(complete)` e si aspettano le proposte : sono loro, quando
1290
+ * arrivano, ad aprire il pannello.
1291
+ */
1292
+ private waiting;
1293
+ private timer;
1294
+ constructor();
1295
+ private onChange;
1296
+ private onTouched;
1297
+ /** Il valore di adesso : il testo scritto, o la proposta scelta. */
1298
+ get value(): any;
1299
+ writeValue(value: unknown): void;
1300
+ registerOnChange(fn: (value: unknown) => void): void;
1301
+ registerOnTouched(fn: () => void): void;
1302
+ setDisabledState(disabled: boolean): void;
1303
+ protected labelOf(item: unknown): string;
1304
+ protected optionId(index: number): string;
1305
+ protected typed(text: string): void;
1306
+ /** La freccia : tutte le proposte, o chiude il pannello aperto. */
1307
+ protected all(): void;
1308
+ private ask;
1309
+ private suggestionsArrived;
1310
+ private show;
1311
+ close(): void;
1312
+ protected outsideClick(event: MouseEvent): void;
1313
+ protected leave(): void;
1314
+ protected pick(item: unknown): void;
1315
+ protected clear(): void;
1316
+ private commit;
1317
+ protected keydown(event: KeyboardEvent): void;
1318
+ static ɵfac: i0.ɵɵFactoryDeclaration<AutocompleteComponent, never>;
1319
+ static ɵcmp: i0.ɵɵComponentDeclaration<AutocompleteComponent, "ml-autocomplete", never, {
1320
+ "suggestions": {
1321
+ "alias": "suggestions";
1322
+ "required": false;
1323
+ "isSignal": true;
1324
+ };
1325
+ "optionLabel": {
1326
+ "alias": "optionLabel";
1327
+ "required": false;
1328
+ "isSignal": true;
1329
+ };
1330
+ "delay": {
1331
+ "alias": "delay";
1332
+ "required": false;
1333
+ "isSignal": true;
1334
+ };
1335
+ "minQueryLength": {
1336
+ "alias": "minQueryLength";
1337
+ "required": false;
1338
+ "isSignal": true;
1339
+ };
1340
+ "dropdown": {
1341
+ "alias": "dropdown";
1342
+ "required": false;
1343
+ "isSignal": true;
1344
+ };
1345
+ "showClear": {
1346
+ "alias": "showClear";
1347
+ "required": false;
1348
+ "isSignal": true;
1349
+ };
1350
+ "placeholder": {
1351
+ "alias": "placeholder";
1352
+ "required": false;
1353
+ "isSignal": true;
1354
+ };
1355
+ "emptyMessage": {
1356
+ "alias": "emptyMessage";
1357
+ "required": false;
1358
+ "isSignal": true;
1359
+ };
1360
+ "disabled": {
1361
+ "alias": "disabled";
1362
+ "required": false;
1363
+ "isSignal": true;
1364
+ };
1365
+ "inputId": {
1366
+ "alias": "inputId";
1367
+ "required": false;
1368
+ "isSignal": true;
1369
+ };
1370
+ "enterKeyHint": {
1371
+ "alias": "enterKeyHint";
1372
+ "required": false;
1373
+ "isSignal": true;
1374
+ };
1375
+ "ariaLabel": {
1376
+ "alias": "ariaLabel";
1377
+ "required": false;
1378
+ "isSignal": true;
1379
+ };
1380
+ "styleClass": {
1381
+ "alias": "styleClass";
1382
+ "required": false;
1383
+ "isSignal": true;
1384
+ };
1385
+ "panelStyleClass": {
1386
+ "alias": "panelStyleClass";
1387
+ "required": false;
1388
+ "isSignal": true;
1389
+ };
1390
+ "size": {
1391
+ "alias": "size";
1392
+ "required": false;
1393
+ "isSignal": true;
1394
+ };
1395
+ "autoFocus": {
1396
+ "alias": "autoFocus";
1397
+ "required": false;
1398
+ "isSignal": true;
1399
+ };
1400
+ "fluid": {
1401
+ "alias": "fluid";
1402
+ "required": false;
1403
+ "isSignal": true;
1404
+ };
1405
+ }, {
1406
+ "complete": "complete";
1407
+ "selected": "selected";
1408
+ "cleared": "cleared";
1409
+ "blurred": "blurred";
1410
+ }, ["itemTemplate"], never, true, never>;
1411
+ }
1412
+ export interface PageChange {
1413
+ /** L'indice del primo elemento della pagina. */
1414
+ first: number;
1415
+ rows: number;
1416
+ /** La pagina, da zero. */
1417
+ page: number;
1418
+ pageCount: number;
1419
+ }
1420
+ /**
1421
+ * Sul telefono i numeri delle pagine lasciano il posto a «3 / 12» : cinque
1422
+ * numeri più quattro frecce, a 44 px ciascuno, non ci starebbero.
1423
+ *
1424
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1425
+ * @email vito.salvia@gmail.com
1426
+ */
1427
+ export declare class PaginatorComponent {
1428
+ readonly first: InputSignalWithTransform<number, unknown>;
1429
+ readonly rows: InputSignalWithTransform<number, unknown>;
1430
+ readonly totalRecords: InputSignalWithTransform<number, unknown>;
1431
+ readonly pageChange: OutputEmitterRef<PageChange>;
1432
+ protected readonly pageCount: Signal<number>;
1433
+ protected readonly page: Signal<number>;
1434
+ /** I numeri a video : la pagina corrente al centro, quando si può. */
1435
+ protected readonly links: Signal<number[]>;
1436
+ protected go(page: number): void;
1437
+ static ɵfac: i0.ɵɵFactoryDeclaration<PaginatorComponent, never>;
1438
+ static ɵcmp: i0.ɵɵComponentDeclaration<PaginatorComponent, "ml-paginator", never, {
1439
+ "first": {
1440
+ "alias": "first";
1441
+ "required": false;
1442
+ "isSignal": true;
1443
+ };
1444
+ "rows": {
1445
+ "alias": "rows";
1446
+ "required": false;
1447
+ "isSignal": true;
1448
+ };
1449
+ "totalRecords": {
1450
+ "alias": "totalRecords";
1451
+ "required": false;
1452
+ "isSignal": true;
1453
+ };
1454
+ }, {
1455
+ "pageChange": "pageChange";
1456
+ }, never, never, true, never>;
1457
+ }
1458
+ /**
1459
+ * Le pagine da mostrare per numero : al più {@link PAGE_LINKS}, con la corrente
1460
+ * al centro finché non si arriva a un capo.
1461
+ */
1462
+ export declare function pageLinks(page: number, pageCount: number): number[];
1463
+ export declare function childrenOf(item: unknown, level: number, optionGroupChildren: string | readonly string[] | undefined): unknown[] | undefined;
1464
+ /** Una colonna del menu : le voci di un livello e dove sta in verticale. */
1465
+ interface CascadeColumn {
1466
+ level: number;
1467
+ items: readonly unknown[];
1468
+ offset: number;
1469
+ }
1470
+ /**
1471
+ * Sul telefono (sotto i 640 px) le colonne di fianco non ci starebbero : lì un
1472
+ * gruppo si apre al posto del suo livello, con una riga in cima per tornare
1473
+ * indietro.
1474
+ *
1475
+ * È un `ControlValueAccessor` ; il valore è la voce finale scelta, e
1476
+ * `(changed)` la dà (era `(onChange)` con `$event.value`).
1477
+ *
1478
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1479
+ * @email vito.salvia@gmail.com
1480
+ */
1481
+ export declare class CascadeSelectComponent implements ControlValueAccessor {
1482
+ readonly options: InputSignal<readonly unknown[] | null | undefined>;
1483
+ readonly optionLabel: InputSignal<string | undefined>;
1484
+ readonly optionGroupLabel: InputSignal<string | undefined>;
1485
+ readonly optionGroupChildren: InputSignal<string | readonly string[] | undefined>;
1486
+ /** Il campo che dice che una voce non si sceglie. */
1487
+ readonly optionDisabled: InputSignal<string | undefined>;
1488
+ readonly placeholder: InputSignal<string | null | undefined>;
1489
+ readonly ariaLabel: InputSignal<string | null | undefined>;
1490
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
1491
+ /**
1492
+ * Spento, la voce scelta va solo in `(changed)` e il campo resta sul
1493
+ * `placeholder` : per chi usa il menu come un comando e scrive da sé che
1494
+ * cosa è scelto (la mappa divisa, che lo scrive nel `placeholder`).
1495
+ */
1496
+ readonly keepSelection: InputSignalWithTransform<boolean, unknown>;
1497
+ readonly changed: OutputEmitterRef<any>;
1498
+ private readonly triggerRef;
1499
+ private readonly fieldRef;
1500
+ private readonly connected;
1501
+ protected readonly follow: ScrollFollower;
1502
+ protected readonly positions: ConnectedPosition[];
1503
+ protected readonly positionsToLeft: ConnectedPosition[];
1504
+ protected readonly listId: string;
1505
+ protected readonly open: WritableSignal<boolean>;
1506
+ protected readonly focused: WritableSignal<boolean>;
1507
+ /** La voce attiva, nell'ultima colonna. */
1508
+ protected readonly active: WritableSignal<number>;
1509
+ protected readonly triggerWidth: WritableSignal<number>;
1510
+ /** Schermo stretto : un livello per volta invece delle colonne. */
1511
+ protected readonly narrow: WritableSignal<boolean>;
1512
+ /** Il campo sta nella metà destra : le colonne si aprono verso sinistra. */
1513
+ protected readonly toLeft: WritableSignal<boolean>;
1514
+ /** I gruppi aperti, dal primo livello in giù. */
1515
+ protected readonly path: WritableSignal<unknown[]>;
1516
+ /** Lo scostamento in verticale di ogni colonna, allineata al suo gruppo. */
1517
+ private readonly offsets;
1518
+ private readonly selection;
1519
+ private readonly formDisabled;
1520
+ protected readonly isDisabled: Signal<boolean>;
1521
+ /** Una colonna per livello aperto : la prima, e i figli di ogni gruppo. */
1522
+ protected readonly columns: Signal<CascadeColumn[]>;
1523
+ protected readonly visibleColumns: Signal<CascadeColumn[]>;
1524
+ /** Le voci dell'ultimo livello aperto, dove va la tastiera. */
1525
+ private readonly items;
1526
+ protected readonly displayText: Signal<string>;
1527
+ protected readonly filled: Signal<boolean>;
1528
+ protected readonly activeId: Signal<string | null>;
1529
+ constructor();
1530
+ private onChange;
1531
+ private onTouched;
1532
+ writeValue(value: unknown): void;
1533
+ registerOnChange(fn: (value: unknown) => void): void;
1534
+ registerOnTouched(fn: () => void): void;
1535
+ setDisabledState(disabled: boolean): void;
1536
+ protected optionId(level: number, index: number): string;
1537
+ protected isGroup(item: unknown, level: number): boolean;
1538
+ protected isItemDisabled(item: unknown): boolean;
1539
+ protected groupLabel(item: unknown): string;
1540
+ protected itemLabel(item: unknown): string;
1541
+ protected toggle(): void;
1542
+ private show;
1543
+ close(): void;
1544
+ protected outsideClick(event: MouseEvent): void;
1545
+ protected blurred(): void;
1546
+ /**
1547
+ * Col mouse un gruppo si apre passandoci sopra, e una voce finale chiude
1548
+ * le colonne più a destra. Col dito (e sul telefono) decide il tocco.
1549
+ */
1550
+ protected hover(item: unknown, level: number, index: number, element: HTMLElement): void;
1551
+ protected choose(item: unknown, level: number, index: number, element: HTMLElement): void;
1552
+ /**
1553
+ * Apre i figli di un gruppo nella colonna dopo la sua, allineata in
1554
+ * verticale alla voce del gruppo.
1555
+ */
1556
+ private openGroup;
1557
+ protected back(): void;
1558
+ protected keydown(event: KeyboardEvent): void;
1559
+ static ɵfac: i0.ɵɵFactoryDeclaration<CascadeSelectComponent, never>;
1560
+ static ɵcmp: i0.ɵɵComponentDeclaration<CascadeSelectComponent, "ml-cascadeselect", never, {
1561
+ "options": {
1562
+ "alias": "options";
1563
+ "required": false;
1564
+ "isSignal": true;
1565
+ };
1566
+ "optionLabel": {
1567
+ "alias": "optionLabel";
1568
+ "required": false;
1569
+ "isSignal": true;
1570
+ };
1571
+ "optionGroupLabel": {
1572
+ "alias": "optionGroupLabel";
1573
+ "required": false;
1574
+ "isSignal": true;
1575
+ };
1576
+ "optionGroupChildren": {
1577
+ "alias": "optionGroupChildren";
1578
+ "required": false;
1579
+ "isSignal": true;
1580
+ };
1581
+ "optionDisabled": {
1582
+ "alias": "optionDisabled";
1583
+ "required": false;
1584
+ "isSignal": true;
1585
+ };
1586
+ "placeholder": {
1587
+ "alias": "placeholder";
1588
+ "required": false;
1589
+ "isSignal": true;
1590
+ };
1591
+ "ariaLabel": {
1592
+ "alias": "ariaLabel";
1593
+ "required": false;
1594
+ "isSignal": true;
1595
+ };
1596
+ "disabled": {
1597
+ "alias": "disabled";
1598
+ "required": false;
1599
+ "isSignal": true;
1600
+ };
1601
+ "keepSelection": {
1602
+ "alias": "keepSelection";
1603
+ "required": false;
1604
+ "isSignal": true;
1605
+ };
1606
+ }, {
1607
+ "changed": "changed";
1608
+ }, never, never, true, never>;
1609
+ }
1610
+ /**
1611
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1612
+ * @email vito.salvia@gmail.com
1613
+ */
1614
+ /** Le sei settimane a video di un mese, dal lunedì : 42 giorni. */
1615
+ export declare function monthGrid(year: number, month: number): Date[];
1616
+ export declare function sameDay(a: Date | null | undefined, b: Date | null | undefined): boolean;
1617
+ /** Il giorno, senza l'ora : per confrontare due date per giorno. */
1618
+ export declare function dayOf(date: Date): number;
1619
+ /** Se `day` cade fra `start` ed `end`, estremi compresi. */
1620
+ export declare function inRange(day: Date, start: Date | null | undefined, end: Date | null | undefined): boolean;
1621
+ /** `dd/mm/yyyy`, e con l'ora `dd/mm/yyyy HH:mm`. */
1622
+ export declare function formatDate(date: Date | null | undefined, showTime?: boolean): string;
1623
+ /**
1624
+ * Il testo del campo : una data, o un intervallo «dal – al» (con il solo
1625
+ * inizio, finché la fine non è scelta).
1626
+ */
1627
+ export declare function formatValue(value: unknown, showTime?: boolean): string;
1628
+ /** Il giorno scelto con l'ora di `time` : il calendario sceglie giorni. */
1629
+ export declare function withTime(day: Date, time: Date | null | undefined): Date;
1630
+ /**
1631
+ * Il prossimo valore di un intervallo dopo il clic su un giorno : il primo
1632
+ * clic (o quello dopo un intervallo intero) apre, il secondo chiude, e un
1633
+ * giorno prima dell'inizio diventa il nuovo inizio.
1634
+ */
1635
+ export declare function nextRange(current: (Date | null)[] | null | undefined, day: Date): [Date, Date | null];
1636
+ /** I nomi brevi dei giorni, da lunedì, nella lingua di `locale`. */
1637
+ export declare function weekdayNames(locale: string): string[];
1638
+ /** «novembre 2026», nella lingua di `locale`. */
1639
+ export declare function monthTitle(year: number, month: number, locale: string): string;
1640
+ /**
1641
+ * Il campo non si scrive : si sceglie dal calendario, che si apre col clic,
1642
+ * con Invio o con la freccia in giù. Nel calendario le frecce spostano il
1643
+ * giorno, Pagina su e giù il mese, Esc chiude. Il formato è `dd/mm/yyyy`.
1644
+ *
1645
+ * Sul telefono (`touchUI`, o sotto i 640 px) si apre al centro dello schermo
1646
+ * con la maschera, e l'ora la sceglie il selettore del sistema.
1647
+ *
1648
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1649
+ * @email vito.salvia@gmail.com
1650
+ */
1651
+ export declare class DatePickerComponent implements ControlValueAccessor {
1652
+ /** Modalità di selezione: `single` (di serie) o `range`. */
1653
+ readonly selectionMode: InputSignal<"single" | "range" | undefined>;
1654
+ readonly showTime: InputSignalWithTransform<boolean, unknown>;
1655
+ readonly showClear: InputSignalWithTransform<boolean, unknown>;
1656
+ /** La piccola icona del calendario accanto al campo ; di serie sì. */
1657
+ readonly showIcon: InputSignalWithTransform<boolean, unknown>;
1658
+ /** Il calendario al centro dello schermo, con la maschera. */
1659
+ readonly touchUI: InputSignalWithTransform<boolean, unknown>;
1660
+ readonly placeholder: InputSignal<string | null | undefined>;
1661
+ readonly ariaLabel: InputSignal<string | null | undefined>;
1662
+ /** L'`id` del campo, per il `label for`. */
1663
+ readonly inputId: InputSignal<string | undefined>;
1664
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
1665
+ /** La lingua dei nomi di mesi e giorni. */
1666
+ readonly locale: InputSignal<string>;
1667
+ /** Il valore nuovo, a ogni scelta : una `Date`, un intervallo o `null`. */
1668
+ readonly changed: OutputEmitterRef<any>;
1669
+ private readonly fieldRef;
1670
+ private readonly inputRef;
1671
+ private readonly panelRef;
1672
+ private readonly overlay;
1673
+ private readonly viewContainerRef;
1674
+ private overlayRef;
1675
+ private readonly ownId;
1676
+ protected readonly fieldId: Signal<string>;
1677
+ protected readonly open: WritableSignal<boolean>;
1678
+ /** Aperto al centro dello schermo invece che sotto il campo. */
1679
+ protected readonly sheet: WritableSignal<boolean>;
1680
+ protected readonly viewYear: WritableSignal<number>;
1681
+ protected readonly viewMonth: WritableSignal<number>;
1682
+ /** Il giorno che ha il fuoco della tastiera nel calendario. */
1683
+ protected readonly focused: WritableSignal<Date>;
1684
+ private readonly value;
1685
+ private readonly formDisabled;
1686
+ protected readonly isDisabled: Signal<boolean>;
1687
+ protected readonly isRange: Signal<boolean>;
1688
+ protected readonly text: Signal<string>;
1689
+ protected readonly filled: Signal<boolean>;
1690
+ protected readonly days: Signal<Date[]>;
1691
+ protected readonly weekdays: Signal<string[]>;
1692
+ protected readonly title: Signal<string>;
1693
+ protected readonly timeText: Signal<string>;
1694
+ constructor();
1695
+ private onChange;
1696
+ protected onTouched: () => void;
1697
+ writeValue(value: unknown): void;
1698
+ registerOnChange(fn: (value: unknown) => void): void;
1699
+ registerOnTouched(fn: () => void): void;
1700
+ setDisabledState(disabled: boolean): void;
1701
+ private start;
1702
+ private end;
1703
+ protected isSelected(day: Date): boolean;
1704
+ protected isInRange(day: Date): boolean;
1705
+ protected isToday(day: Date): boolean;
1706
+ protected isFocused(day: Date): boolean;
1707
+ protected label(day: Date): string;
1708
+ protected toggle(): void;
1709
+ private show;
1710
+ /**
1711
+ * Chiude il calendario. Col fuoco nel calendario (Esc, «Fatto», un
1712
+ * giorno scelto) lo si rimette nel campo ; con un clic fuori no, o lo si
1713
+ * toglierebbe a quello che si è cliccato.
1714
+ */
1715
+ close(refocus: boolean): void;
1716
+ private detach;
1717
+ /** Sposta il mese a video di `months` mesi (12 per un anno). */
1718
+ protected move(months: number): void;
1719
+ protected pick(day: Date): void;
1720
+ protected pickToday(): void;
1721
+ protected setTime(text: string): void;
1722
+ protected clear(): void;
1723
+ private commit;
1724
+ protected fieldKey(event: KeyboardEvent): void;
1725
+ protected panelKey(event: KeyboardEvent): void;
1726
+ /** Porta il fuoco sul giorno che lo deve avere, a vista aggiornata. */
1727
+ private focusDay;
1728
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
1729
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "ml-datepicker", never, {
1730
+ "selectionMode": {
1731
+ "alias": "selectionMode";
1732
+ "required": false;
1733
+ "isSignal": true;
1734
+ };
1735
+ "showTime": {
1736
+ "alias": "showTime";
1737
+ "required": false;
1738
+ "isSignal": true;
1739
+ };
1740
+ "showClear": {
1741
+ "alias": "showClear";
1742
+ "required": false;
1743
+ "isSignal": true;
1744
+ };
1745
+ "showIcon": {
1746
+ "alias": "showIcon";
1747
+ "required": false;
1748
+ "isSignal": true;
1749
+ };
1750
+ "touchUI": {
1751
+ "alias": "touchUI";
1752
+ "required": false;
1753
+ "isSignal": true;
1754
+ };
1755
+ "placeholder": {
1756
+ "alias": "placeholder";
1757
+ "required": false;
1758
+ "isSignal": true;
1759
+ };
1760
+ "ariaLabel": {
1761
+ "alias": "ariaLabel";
1762
+ "required": false;
1763
+ "isSignal": true;
1764
+ };
1765
+ "inputId": {
1766
+ "alias": "inputId";
1767
+ "required": false;
1768
+ "isSignal": true;
1769
+ };
1770
+ "disabled": {
1771
+ "alias": "disabled";
1772
+ "required": false;
1773
+ "isSignal": true;
1774
+ };
1775
+ "locale": {
1776
+ "alias": "locale";
1777
+ "required": false;
1778
+ "isSignal": true;
1779
+ };
1780
+ }, {
1781
+ "changed": "changed";
1782
+ }, never, never, true, never>;
1783
+ }
1784
+ /** Un nodo letto dal componente ad albero. */
1785
+ export interface TreeItem {
1786
+ label?: string;
1787
+ children?: TreeItem[];
1788
+ /** Aperto o chiuso : lo scrive il tree, e lo possono scrivere le azioni. */
1789
+ expanded?: boolean;
1790
+ /** Un nodo foglia non ha la freccia anche se ha `children`. */
1791
+ leaf?: boolean;
1792
+ /** Nodo padre, assegnato dal componente ad albero. */
1793
+ parent?: TreeItem;
1794
+ [key: string]: any;
1795
+ }
1796
+ export declare function linkParents(nodes: readonly TreeItem[] | null | undefined, parent?: TreeItem): void;
1797
+ /** Se il nodo ha figli da aprire. */
1798
+ export declare function hasChildren(node: TreeItem): boolean;
1799
+ /**
1800
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1801
+ * @email vito.salvia@gmail.com
1802
+ */
1803
+ export declare class TreeComponent {
1804
+ readonly value: InputSignal<readonly TreeItem[] | null | undefined>;
1805
+ protected readonly nodeTemplate: Signal<TemplateRef<unknown> | undefined>;
1806
+ /**
1807
+ * I nodi con il loro `parent` già scritto : prima che il template li
1808
+ * disegni, perché chi disegna le righe lo legge.
1809
+ */
1810
+ protected readonly nodes: Signal<readonly TreeItem[]>;
1811
+ protected readonly hasChildren: (node: TreeItem) => boolean;
1812
+ static ɵfac: i0.ɵɵFactoryDeclaration<TreeComponent, never>;
1813
+ static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "ml-tree", never, {
1814
+ "value": {
1815
+ "alias": "value";
1816
+ "required": false;
1817
+ "isSignal": true;
1818
+ };
1819
+ }, {}, ["nodeTemplate"], never, true, never>;
1820
+ }
1821
+ /**
1822
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1823
+ * @email vito.salvia@gmail.com
1824
+ */
1825
+ export type ColumnFilterType = "text" | "numeric" | "boolean" | "date";
1826
+ /** `equals` confronta tutto il valore, `contains` una sua parte. */
1827
+ export type ColumnMatchMode = "equals" | "contains";
1828
+ /** Un filtro acceso su una colonna. */
1829
+ export interface ColumnFilter {
1830
+ type: ColumnFilterType;
1831
+ matchMode: ColumnMatchMode;
1832
+ /** Il valore scritto : testo, numero, `true`/`false` o una `Date`. */
1833
+ value: unknown;
1834
+ }
1835
+ /** I filtri della tabella, per nome del campo. */
1836
+ export type ColumnFilters = Record<string, ColumnFilter>;
1837
+ /** Se il filtro non ha un valore, e quindi lascia passare tutto. */
1838
+ export declare function isEmptyFilter(filter: ColumnFilter | undefined): boolean;
1839
+ export declare function matchesFilter(cell: unknown, filter: ColumnFilter): boolean;
1840
+ /** Le righe che passano tutti i filtri, leggendo il campo con `row[field]`. */
1841
+ export declare function filterRows<T>(rows: readonly T[], filters: ColumnFilters): T[];
1842
+ /** Una riga scelta o tolta : la riga e la sua posizione in `value`. */
1843
+ export interface TableRowEvent<T = any> {
1844
+ data: T;
1845
+ index: number;
1846
+ }
1847
+ /** La pagina da chiedere quando il caricamento è differito (`lazy`). */
1848
+ export interface TableLazyLoad {
1849
+ first: number;
1850
+ rows: number;
1851
+ }
1852
+ /**
1853
+ * `rowIndex` è la posizione della riga in `value`, anche a righe filtrate :
1854
+ * chi la usa per ritrovare la feature (la tabella WMS) trova quella giusta.
1855
+ *
1856
+ * @author Vito Salvia - CNR IMAA geoSDI Group
1857
+ * @email vito.salvia@gmail.com
1858
+ */
1859
+ export declare class TableComponent implements OnInit {
1860
+ readonly value: InputSignal<readonly any[] | null | undefined>;
1861
+ /** Passate ai modelli come `columns`. */
1862
+ readonly columns: InputSignal<any[] | null | undefined>;
1863
+ /** Il campo che riconosce una riga nella selezione ; senza, la riga stessa. */
1864
+ readonly dataKey: InputSignal<string | undefined>;
1865
+ readonly size: InputSignal<"small" | undefined>;
1866
+ readonly stripedRows: InputSignalWithTransform<boolean, unknown>;
1867
+ readonly rowHover: InputSignalWithTransform<boolean, unknown>;
1868
+ /**
1869
+ * `flex` riempie l'altezza del contenitore della tabella, un'altezza
1870
+ * (`"300px"`) la fa scorrere oltre.
1871
+ */
1872
+ readonly scrollHeight: InputSignal<string | null | undefined>;
1873
+ readonly tableStyle: InputSignal<Record<string, string> | null | undefined>;
1874
+ readonly styleClass: InputSignal<string | undefined>;
1875
+ readonly paginator: InputSignalWithTransform<boolean, unknown>;
1876
+ readonly rows: InputSignalWithTransform<number, unknown>;
1877
+ /** Con `lazy`, il totale delle righe che il servizio ha. */
1878
+ readonly totalRecords: InputSignalWithTransform<number, unknown>;
1879
+ /** Indice della prima riga visibile con il paginatore. */
1880
+ readonly first: InputSignalWithTransform<number, unknown>;
1881
+ /** Le pagine le dà chi usa la tabella, a ogni `(lazyLoad)`. */
1882
+ readonly lazy: InputSignalWithTransform<boolean, unknown>;
1883
+ readonly loading: InputSignalWithTransform<boolean, unknown>;
1884
+ /** Le righe scelte con le caselle. */
1885
+ readonly selection: ModelSignal<any[] | null | undefined>;
1886
+ readonly rowSelect: OutputEmitterRef<TableRowEvent>;
1887
+ readonly rowUnselect: OutputEmitterRef<TableRowEvent>;
1888
+ /** La pagina da chiedere, con `lazy` : anche la prima, alla nascita. */
1889
+ readonly lazyLoad: OutputEmitterRef<TableLazyLoad>;
1890
+ protected readonly captionTemplate: Signal<TemplateRef<unknown> | undefined>;
1891
+ protected readonly colgroupTemplate: Signal<TemplateRef<unknown> | undefined>;
1892
+ protected readonly headerTemplate: Signal<TemplateRef<unknown> | undefined>;
1893
+ protected readonly bodyTemplate: Signal<TemplateRef<unknown> | undefined>;
1894
+ protected readonly footerTemplate: Signal<TemplateRef<unknown> | undefined>;
1895
+ protected readonly emptyTemplate: Signal<TemplateRef<unknown> | undefined>;
1896
+ /** L'elemento che scorre : chi carica righe mentre si scorre lo ascolta. */
1897
+ readonly element: ElementRef<HTMLElement>;
1898
+ /**
1899
+ * La prima riga a video : la cambia il paginatore, e la riporta a quella
1900
+ * di chi usa la tabella quando lui la cambia (la ricerca degli utenti la
1901
+ * rimette a 0).
1902
+ */
1903
+ protected readonly firstShown: WritableSignal<number>;
1904
+ private readonly filters;
1905
+ protected readonly filtered: Signal<readonly any[]>;
1906
+ /** Le righe a video : la pagina, se il paginatore le divide qui. */
1907
+ protected readonly pageRows: Signal<readonly any[]>;
1908
+ ngOnInit(): void;
1909
+ /** La posizione della riga in `value`. */
1910
+ protected indexOf(row: unknown): number;
1911
+ protected changePage(page: PageChange): void;
1912
+ private keyOf;
1913
+ isSelected(row: unknown): boolean;
1914
+ /** Seleziona o deseleziona una riga. */
1915
+ toggle(row: unknown, index?: number): void;
1916
+ /** Accende, cambia o spegne il filtro di una colonna. */
1917
+ setFilter(field: string, filter: ColumnFilter): void;
1918
+ /** Toglie tutti i filtri per colonna. */
1919
+ clearFilters(): void;
1920
+ filterOf(field: string): ColumnFilter | undefined;
1921
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent, never>;
1922
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "ml-table", never, {
1923
+ "value": {
1924
+ "alias": "value";
1925
+ "required": false;
1926
+ "isSignal": true;
1927
+ };
1928
+ "columns": {
1929
+ "alias": "columns";
1930
+ "required": false;
1931
+ "isSignal": true;
1932
+ };
1933
+ "dataKey": {
1934
+ "alias": "dataKey";
1935
+ "required": false;
1936
+ "isSignal": true;
1937
+ };
1938
+ "size": {
1939
+ "alias": "size";
1940
+ "required": false;
1941
+ "isSignal": true;
1942
+ };
1943
+ "stripedRows": {
1944
+ "alias": "stripedRows";
1945
+ "required": false;
1946
+ "isSignal": true;
1947
+ };
1948
+ "rowHover": {
1949
+ "alias": "rowHover";
1950
+ "required": false;
1951
+ "isSignal": true;
1952
+ };
1953
+ "scrollHeight": {
1954
+ "alias": "scrollHeight";
1955
+ "required": false;
1956
+ "isSignal": true;
1957
+ };
1958
+ "tableStyle": {
1959
+ "alias": "tableStyle";
1960
+ "required": false;
1961
+ "isSignal": true;
1962
+ };
1963
+ "styleClass": {
1964
+ "alias": "styleClass";
1965
+ "required": false;
1966
+ "isSignal": true;
1967
+ };
1968
+ "paginator": {
1969
+ "alias": "paginator";
1970
+ "required": false;
1971
+ "isSignal": true;
1972
+ };
1973
+ "rows": {
1974
+ "alias": "rows";
1975
+ "required": false;
1976
+ "isSignal": true;
1977
+ };
1978
+ "totalRecords": {
1979
+ "alias": "totalRecords";
1980
+ "required": false;
1981
+ "isSignal": true;
1982
+ };
1983
+ "first": {
1984
+ "alias": "first";
1985
+ "required": false;
1986
+ "isSignal": true;
1987
+ };
1988
+ "lazy": {
1989
+ "alias": "lazy";
1990
+ "required": false;
1991
+ "isSignal": true;
1992
+ };
1993
+ "loading": {
1994
+ "alias": "loading";
1995
+ "required": false;
1996
+ "isSignal": true;
1997
+ };
1998
+ "selection": {
1999
+ "alias": "selection";
2000
+ "required": false;
2001
+ "isSignal": true;
2002
+ };
2003
+ }, {
2004
+ "selection": "selectionChange";
2005
+ "rowSelect": "rowSelect";
2006
+ "rowUnselect": "rowUnselect";
2007
+ "lazyLoad": "lazyLoad";
2008
+ }, ["captionTemplate", "colgroupTemplate", "headerTemplate", "bodyTemplate", "footerTemplate", "emptyTemplate"], never, true, never>;
2009
+ }
2010
+ export declare class TableCheckboxComponent {
2011
+ readonly value: InputSignal<unknown>;
2012
+ readonly index: InputSignal<number | undefined>;
2013
+ protected readonly table: TableComponent;
2014
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableCheckboxComponent, never>;
2015
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableCheckboxComponent, "ml-table-checkbox", never, {
2016
+ "value": {
2017
+ "alias": "value";
2018
+ "required": false;
2019
+ "isSignal": true;
2020
+ };
2021
+ "index": {
2022
+ "alias": "index";
2023
+ "required": false;
2024
+ "isSignal": true;
2025
+ };
2026
+ }, {}, never, never, true, never>;
2027
+ }
2028
+ export declare class ResizableColumnDirective implements OnInit {
2029
+ private readonly th;
2030
+ ngOnInit(): void;
2031
+ private start;
2032
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResizableColumnDirective, never>;
2033
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ResizableColumnDirective, "th[mlResizableColumn]", never, {}, {}, never, never, true, never>;
2034
+ }
2035
+ export declare class ColumnFilterComponent {
2036
+ readonly field: InputSignal<string>;
2037
+ readonly type: InputSignal<ColumnFilterType>;
2038
+ readonly matchMode: InputSignal<ColumnMatchMode>;
2039
+ private readonly table;
2040
+ protected current(): unknown;
2041
+ protected set(value: unknown): void;
2042
+ protected setDate(text: string): void;
2043
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnFilterComponent, never>;
2044
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnFilterComponent, "ml-column-filter", never, {
2045
+ "field": {
2046
+ "alias": "field";
2047
+ "required": true;
2048
+ "isSignal": true;
2049
+ };
2050
+ "type": {
2051
+ "alias": "type";
2052
+ "required": false;
2053
+ "isSignal": true;
2054
+ };
2055
+ "matchMode": {
2056
+ "alias": "matchMode";
2057
+ "required": false;
2058
+ "isSignal": true;
2059
+ };
2060
+ }, {}, never, never, true, never>;
2061
+ }
2062
+ export {};
2063
+ //# sourceMappingURL=geosdi-ngx-ui.d.ts.map