ngx-eiffage-material 0.1.8 → 0.2.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.
package/index.d.ts CHANGED
@@ -1,83 +1,21 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, ElementRef, WritableSignal, Type, TemplateRef, PipeTransform, InjectionToken, Signal, OnDestroy } from '@angular/core';
3
- import { ControlValueAccessor, FormControl, FormBuilder, FormGroup, FormArray, AbstractControl } from '@angular/forms';
2
+ import { WritableSignal, Type, TemplateRef, PipeTransform, InjectionToken, Signal, EnvironmentProviders, OnInit, ElementRef, OnDestroy } from '@angular/core';
3
+ import * as ngx_eiffage_material from 'ngx-eiffage-material';
4
+ import { FormBuilder, FormGroup, FormArray, AbstractControl, ControlValueAccessor, FormControl } from '@angular/forms';
4
5
  import { ErrorStateMatcher } from '@angular/material/core';
5
6
  import { SubscriptSizing } from '@angular/material/form-field';
6
7
  import { MatSelect, MatSelectChange } from '@angular/material/select';
7
- import { Observable, Subject } from 'rxjs';
8
- import * as ngx_eiffage_material from 'ngx-eiffage-material';
9
8
  import { MatDialogRef, MatDialogConfig } from '@angular/material/dialog';
10
9
  import { DateRange } from '@angular/material/datepicker';
11
10
  import { MatMenuTrigger } from '@angular/material/menu';
12
11
  import { PageEvent, MatPaginator } from '@angular/material/paginator';
13
12
  import { SortDirection, Sort } from '@angular/material/sort';
13
+ import { Observable, Subject } from 'rxjs';
14
14
  import jsPDF from 'jspdf';
15
15
  import moment from 'moment';
16
16
  import { MatTableDataSource } from '@angular/material/table';
17
17
  import { MatChipEvent } from '@angular/material/chips';
18
18
 
19
- declare class NgxLoadingButton {
20
- isLoading: _angular_core.InputSignal<boolean>;
21
- label: _angular_core.InputSignal<string>;
22
- matButton: _angular_core.InputSignal<"text" | "filled" | "elevated" | "outlined" | "tonal">;
23
- type: _angular_core.InputSignal<"button" | "submit" | "reset">;
24
- disabled: _angular_core.InputSignal<boolean>;
25
- spinnerDiameter: _angular_core.InputSignal<number>;
26
- spinnerStrokeWidth: _angular_core.InputSignal<number>;
27
- color: _angular_core.InputSignal<"secondary" | "tertiary" | undefined>;
28
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxLoadingButton, never>;
29
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxLoadingButton, "ngx-loading-button", never, { "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "matButton": { "alias": "matButton"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "spinnerDiameter": { "alias": "spinnerDiameter"; "required": false; "isSignal": true; }; "spinnerStrokeWidth": { "alias": "spinnerStrokeWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
30
- }
31
-
32
- declare class NgxInputFile implements ControlValueAccessor, OnInit {
33
- private _cdr;
34
- value: _angular_core.WritableSignal<File[]>;
35
- onChangeCb?: (files: File[]) => void;
36
- onTouchCb?: () => void;
37
- label: _angular_core.InputSignal<string>;
38
- /**
39
- * FormControl externo. Es opcional: si el componente se usa con
40
- * `formControlName` / `[formControl]`, el enlace se hace por
41
- * ControlValueAccessor y no hace falta pasarlo.
42
- */
43
- control: _angular_core.InputSignal<FormControl<File[]> | undefined>;
44
- disabled: _angular_core.InputSignal<boolean>;
45
- placeholder: _angular_core.InputSignal<string>;
46
- class: _angular_core.InputSignal<string>;
47
- accept: _angular_core.InputSignal<string[]>;
48
- multiple: _angular_core.InputSignal<boolean>;
49
- hint: _angular_core.InputSignal<string>;
50
- error: _angular_core.InputSignal<string>;
51
- isDropping: _angular_core.WritableSignal<boolean>;
52
- inputFileRef: _angular_core.Signal<ElementRef<any> | undefined>;
53
- internalControl: FormControl<string[] | null>;
54
- /** Estado deshabilitado que llega desde setDisabledState() (reactive forms). */
55
- private readonly _cvaDisabled;
56
- /** Estado deshabilitado efectivo: input `disabled` o el del FormControl padre. */
57
- readonly isDisabled: _angular_core.Signal<boolean>;
58
- constructor();
59
- private checkErrors;
60
- controlEffect: _angular_core.EffectRef;
61
- ngOnInit(): void;
62
- onContainerClick(): void;
63
- onInputchange(event: any): void;
64
- onDragOver(event: DragEvent): void;
65
- onDragLeave(event: DragEvent): void;
66
- onDrop(event: DragEvent): void;
67
- attachFiles(files: FileList | null | undefined): void;
68
- writeValue(files: File[] | undefined | null): void;
69
- registerOnChange(fn: any): void;
70
- registerOnTouched(fn: any): void;
71
- setDisabledState(isDisabled: boolean): void;
72
- onDeleteFileClick(file: File): void;
73
- getAccept(): string;
74
- bytesToMegaBytes(bytes: number): string;
75
- private markAsTouched;
76
- private markAsDirty;
77
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxInputFile, never>;
78
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxInputFile, "ngx-input-file", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
79
- }
80
-
81
19
  interface BasicSelectConfig<T> {
82
20
  valueKey: keyof T;
83
21
  displayedLabel: (item: T) => string;
@@ -263,6 +201,12 @@ interface DynamicFilter<T> {
263
201
  grupo: string;
264
202
  }
265
203
 
204
+ /**
205
+ * @deprecated Usa `provideNgxEiffageTexts()`: solo hay que indicar los textos que cambian, se agrupan
206
+ * por componente y se actualizan solos al cambiar de idioma (signals). Mientras tanto, una subclase de
207
+ * NgxTablesIntl provista en la app se sigue respetando. Esta clase no recibirá textos nuevos y se
208
+ * eliminará en una versión mayor.
209
+ */
266
210
  declare class NgxTablesIntl {
267
211
  /**
268
212
  * Stream que emite cuando las etiquetas cambian.
@@ -500,6 +444,192 @@ declare class NgxTablesIntl {
500
444
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<NgxTablesIntl>;
501
445
  }
502
446
 
447
+ /**
448
+ * Todos los textos de la librería, agrupados por componente.
449
+ * Los que dependen de un dato (nombre, número…) son funciones.
450
+ */
451
+ interface NgxEiffageTexts {
452
+ /** Textos compartidos por varios componentes. */
453
+ common: {
454
+ search: string;
455
+ clearSearch: string;
456
+ noData: string;
457
+ loading: string;
458
+ cancel: string;
459
+ confirm: string;
460
+ close: string;
461
+ save: string;
462
+ saveAndApply: string;
463
+ };
464
+ /** ngx-basic-table y ngx-paginated-table. */
465
+ table: {
466
+ create: string;
467
+ edit: string;
468
+ delete: string;
469
+ confirmDelete: string;
470
+ deleteConfirmTitle: string;
471
+ deleteConfirmBody: string;
472
+ editColumns: string;
473
+ deselectAll: string;
474
+ selectionActions: string;
475
+ export: string;
476
+ exportExcel: string;
477
+ exportPdf: string;
478
+ enterFullscreen: string;
479
+ exitFullscreen: string;
480
+ actions: string;
481
+ dateRangeStart: string;
482
+ dateRangeEnd: string;
483
+ totalPerPage: string;
484
+ totalGeneral: string;
485
+ };
486
+ /** Diálogo de ordenar y mostrar columnas de las tablas. */
487
+ columnsDialog: {
488
+ title: string;
489
+ pin: string;
490
+ unpin: string;
491
+ moveUp: string;
492
+ moveDown: string;
493
+ hasFiltersApplied: string;
494
+ hideColumnWithFiltersNote: string;
495
+ note: string;
496
+ reset: string;
497
+ };
498
+ /** Filtros avanzados de ngx-paginated-table. */
499
+ advancedFilters: {
500
+ label: string;
501
+ new: string;
502
+ remove: string;
503
+ editTooltip: (filterName: string) => string;
504
+ deleteTooltip: (filterName: string) => string;
505
+ deleteTitle: string;
506
+ deleteMessage: (filterName: string) => string;
507
+ dialogTitle: string;
508
+ templateName: string;
509
+ templateNameRequired: string;
510
+ helpTitle: string;
511
+ groupHelp: string;
512
+ ruleHelp: string;
513
+ group: string;
514
+ filter: string;
515
+ addFilter: string;
516
+ addGroup: string;
517
+ deleteGroup: string;
518
+ deleteFilter: string;
519
+ field: string;
520
+ condition: string;
521
+ value: string;
522
+ selectOption: string;
523
+ required: string;
524
+ and: string;
525
+ or: string;
526
+ operators: {
527
+ equals: string;
528
+ notEquals: string;
529
+ greaterThan: string;
530
+ greaterOrEquals: string;
531
+ lessThan: string;
532
+ lessOrEquals: string;
533
+ like: string;
534
+ };
535
+ };
536
+ /** ngx-basic-select, ngx-searchable-select y ngx-paginated-searchable-select. */
537
+ select: {
538
+ noResults: string;
539
+ showMore: string;
540
+ removeOption: (optionName: string) => string;
541
+ resultsCount: (count: number) => string;
542
+ };
543
+ /** ngx-paginated-select. */
544
+ paginatedSelect: {
545
+ confirm: string;
546
+ reset: string;
547
+ selectAll: string;
548
+ loadingMore: string;
549
+ endOfList: string;
550
+ noResultsHint: string;
551
+ clearSearch: string;
552
+ errorTitle: string;
553
+ errorHint: string;
554
+ retry: string;
555
+ selectedCount: (selected: number, total: number) => string;
556
+ resultsCount: (total: number) => string;
557
+ };
558
+ /** NgxDialogService y ngx-dialog (botones por defecto). */
559
+ dialog: {
560
+ cancel: string;
561
+ /** Botón de confirmar de NgxDialogService.confirm(). */
562
+ confirm: string;
563
+ /** Botón de aceptar de NgxDialogService.info() y de ngx-dialog. */
564
+ accept: string;
565
+ /** Etiqueta accesible y tooltip del botón X de cerrar. */
566
+ close: string;
567
+ };
568
+ /** ngx-file-input. */
569
+ fileInput: {
570
+ dropLabel: string;
571
+ browse: string;
572
+ remove: (fileName: string) => string;
573
+ removed: (fileName: string) => string;
574
+ added: (count: number) => string;
575
+ maxFiles: (max: number) => string;
576
+ typeNotAllowed: (type: string) => string;
577
+ tooLarge: (maxSize: string) => string;
578
+ };
579
+ /** ngx-input-file. */
580
+ inputFile: {
581
+ label: string;
582
+ dropping: string;
583
+ remove: (fileName: string) => string;
584
+ };
585
+ skeleton: {
586
+ loading: string;
587
+ };
588
+ alert: {
589
+ dismiss: string;
590
+ };
591
+ loadingButton: {
592
+ busy: string;
593
+ };
594
+ }
595
+ /** Igual que T pero con todo opcional, a cualquier profundidad (las funciones se quedan como están). */
596
+ type DeepPartial<T> = {
597
+ [K in keyof T]?: T[K] extends (...args: never[]) => unknown ? T[K] : T[K] extends object ? DeepPartial<T[K]> : T[K];
598
+ };
599
+ /** Textos que la app quiere cambiar: solo los que difieren de los valores por defecto. */
600
+ type NgxEiffageTextsOverrides = DeepPartial<NgxEiffageTexts>;
601
+ /** Valores por defecto (castellano). */
602
+ declare const NGX_EIFFAGE_DEFAULT_TEXTS: NgxEiffageTexts;
603
+ /** Lo que acepta provideNgxEiffageTexts: un objeto fijo o un signal (para cambiar de idioma en caliente). */
604
+ type NgxEiffageTextsSource = NgxEiffageTextsOverrides | Signal<NgxEiffageTextsOverrides>;
605
+ /** Textos que la app consumidora sustituye. Se provee con provideNgxEiffageTexts(). */
606
+ declare const NGX_EIFFAGE_TEXTS: InjectionToken<Signal<DeepPartial<NgxEiffageTexts>>>;
607
+ /**
608
+ * Cambia los textos de la librería. Solo hay que indicar los que difieren de los valores por defecto.
609
+ *
610
+ * ```ts
611
+ * // Textos fijos
612
+ * provideNgxEiffageTexts({ alert: { dismiss: 'Dismiss' } })
613
+ *
614
+ * // Según el idioma de la app: una función (se ejecuta en contexto de inyección) que devuelve un signal
615
+ * provideNgxEiffageTexts(() => {
616
+ * const language = inject(LanguageService);
617
+ * return computed(() => language.current() === 'en' ? EN_TEXTS : {});
618
+ * })
619
+ * ```
620
+ */
621
+ declare function provideNgxEiffageTexts(texts: NgxEiffageTextsSource | (() => NgxEiffageTextsSource)): EnvironmentProviders;
622
+ /** Textos efectivos de la librería: valores por defecto + NgxTablesIntl (obsoleto) + provideNgxEiffageTexts. */
623
+ declare class NgxTexts {
624
+ private readonly _overrides;
625
+ private readonly _legacyIntl;
626
+ private readonly _legacyChanges;
627
+ /** Todos los textos ya combinados. En plantilla: `texts().alert.dismiss`. */
628
+ readonly texts: Signal<NgxEiffageTexts>;
629
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTexts, never>;
630
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<NgxTexts>;
631
+ }
632
+
503
633
  declare class AdvancedFilterUtils {
504
634
  static createAdvancedFilter: <T>(fb: FormBuilder, advancedFilter: AdvancedFilter<T>) => FormGroup;
505
635
  static createFilterGroup: <T>(fb: FormBuilder, group: FilterGroup<T>) => FormGroup;
@@ -519,7 +649,7 @@ declare class AdvancedFilterUtils {
519
649
  private static isNonEmptyFilter;
520
650
  private static isNonEmptyGroup;
521
651
  private static isNonEmptyRule;
522
- static groupsToReadableHtml<T>(groups: FilterGroup<T>[], columns: PaginatedTableColumn<T>[], intl: NgxTablesIntl): string;
652
+ static groupsToReadableHtml<T>(groups: FilterGroup<T>[], columns: PaginatedTableColumn<T>[], texts: NgxEiffageTexts): string;
523
653
  private static groupToHtml;
524
654
  private static ruleToHtml;
525
655
  private static getOperatorLabel;
@@ -612,6 +742,13 @@ interface BasicTableColumn<T> {
612
742
  type SortType = 'string' | 'number' | 'date';
613
743
 
614
744
  type AlertType = 'info' | 'warning' | 'error' | 'success';
745
+ /** standard: fondo tintado + borde izquierdo; soft: solo fondo tintado; outlined: solo borde. */
746
+ type AlertAppearance = 'standard' | 'soft' | 'outlined';
747
+
748
+ /** Apariencia de Material del botón (el valor del atributo matButton). */
749
+ type LoadingButtonAppearance = 'text' | 'filled' | 'elevated' | 'outlined' | 'tonal';
750
+ /** Color del botón. Sin valor, el primary del tema. */
751
+ type LoadingButtonColor = 'secondary' | 'tertiary' | 'error';
615
752
 
616
753
  type SkeletonVariant = 'text' | 'circle' | 'rect' | 'rounded';
617
754
  type SkeletonAnimation = 'shimmer' | 'pulse' | 'none';
@@ -670,6 +807,31 @@ interface DialogConfig<T = any> {
670
807
  showConfirm?: boolean;
671
808
  cancelText?: string;
672
809
  confirmText?: string;
810
+ /** El botón de confirmar se pinta en el color de error (eliminar, descartar…). */
811
+ destructive?: boolean;
812
+ /** Muestra la X de cerrar en el encabezado (cierra devolviendo undefined). Por defecto true, salvo con disableClose. */
813
+ showClose?: boolean;
814
+ }
815
+ /**
816
+ * Lo que un componente o plantilla dentro de un diálogo de NgxDialogService puede controlar.
817
+ *
818
+ * - En un componente: `inject(NgxDialogContext)`.
819
+ * - En una plantilla: viene en el contexto como `dialog` (`let-dialog="dialog"`).
820
+ */
821
+ declare abstract class NgxDialogContext<R = unknown> {
822
+ /** Resultado que se devuelve al pulsar confirmar. Si se queda sin valor, se devuelve `true`. */
823
+ abstract readonly result: WritableSignal<R | undefined>;
824
+ /** Deshabilita el botón de confirmar (p. ej. mientras un formulario no es válido). */
825
+ abstract readonly confirmDisabled: WritableSignal<boolean>;
826
+ /** Cierra el diálogo devolviendo `result` (o `false`/`undefined` para cancelar). */
827
+ abstract close(result?: R | boolean): void;
828
+ }
829
+ /** Contexto que recibe una plantilla usada como cuerpo de un diálogo. */
830
+ interface NgxDialogTemplateContext<T = any, R = unknown> {
831
+ /** Los datos que se pasaron en `templateData`. */
832
+ $implicit: T;
833
+ /** Para cerrar el diálogo, fijar el resultado o deshabilitar el botón de confirmar. */
834
+ dialog: NgxDialogContext<R>;
673
835
  }
674
836
 
675
837
  interface ConfigureTableColumnData<T> {
@@ -695,6 +857,105 @@ interface Pantalla {
695
857
 
696
858
  type SendType = 'save' | 'save_and_apply';
697
859
 
860
+ /**
861
+ * Botón de Material que muestra un spinner mientras dura una acción y no deja volver a pulsarlo.
862
+ *
863
+ * El clic se escucha en el propio selector: `<ngx-loading-button (click)="save()" />`.
864
+ * Mientras `isLoading` es true el clic no llega (ni el submit del formulario, ni con Enter).
865
+ */
866
+ declare class NgxLoadingButton {
867
+ private readonly _texts;
868
+ /** Muestra el spinner y bloquea el botón. */
869
+ readonly isLoading: _angular_core.InputSignalWithTransform<boolean, unknown>;
870
+ /** Texto del botón. Para iconos o contenido con formato, proyéctalo en su lugar. */
871
+ readonly label: _angular_core.InputSignal<string | undefined>;
872
+ /**
873
+ * Texto que sustituye al contenido mientras carga, con un spinner pequeño delante
874
+ * (p. ej. «Guardando…»). Sin él, el spinner se superpone y el botón mantiene su ancho.
875
+ */
876
+ readonly loadingText: _angular_core.InputSignal<string | undefined>;
877
+ /** Apariencia de Material: text, filled, elevated, outlined o tonal. */
878
+ readonly matButton: _angular_core.InputSignal<LoadingButtonAppearance>;
879
+ /** Tipo nativo del botón. */
880
+ readonly type: _angular_core.InputSignal<"reset" | "submit" | "button">;
881
+ /** Deshabilita el botón (independiente de isLoading). */
882
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
883
+ /** Color. Sin valor, el primary del tema. */
884
+ readonly color: _angular_core.InputSignal<LoadingButtonColor | undefined>;
885
+ /** Diámetro en px del spinner superpuesto. */
886
+ readonly spinnerDiameter: _angular_core.InputSignalWithTransform<number, unknown>;
887
+ /** Grosor en px del trazo del spinner. */
888
+ readonly spinnerStrokeWidth: _angular_core.InputSignalWithTransform<number, unknown>;
889
+ /** Lo que anuncia el lector de pantalla mientras carga. Por defecto, el texto `loadingButton.busy` de la librería. */
890
+ readonly busyLabel: _angular_core.InputSignal<string | undefined>;
891
+ /** El spinner va encima del contenido (que se oculta sin cambiar el ancho). */
892
+ protected readonly overlaySpinner: _angular_core.Signal<boolean>;
893
+ /** El spinner va en línea, delante de loadingText. */
894
+ protected readonly inlineSpinner: _angular_core.Signal<boolean>;
895
+ protected readonly resolvedBusyLabel: _angular_core.Signal<string>;
896
+ /**
897
+ * Mientras carga, anula el clic en el propio botón: preventDefault evita el submit del formulario
898
+ * (también el implícito al pulsar Enter en un campo) y stopImmediatePropagation evita que llegue
899
+ * al (click) que el consumidor escucha en <ngx-loading-button>.
900
+ */
901
+ protected blockWhileLoading(event: Event): void;
902
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxLoadingButton, never>;
903
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxLoadingButton, "ngx-loading-button", never, { "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "matButton": { "alias": "matButton"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "spinnerDiameter": { "alias": "spinnerDiameter"; "required": false; "isSignal": true; }; "spinnerStrokeWidth": { "alias": "spinnerStrokeWidth"; "required": false; "isSignal": true; }; "busyLabel": { "alias": "busyLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
904
+ }
905
+
906
+ declare class NgxInputFile implements ControlValueAccessor, OnInit {
907
+ private _cdr;
908
+ value: _angular_core.WritableSignal<File[]>;
909
+ onChangeCb?: (files: File[]) => void;
910
+ onTouchCb?: () => void;
911
+ /** Etiqueta del campo. Por defecto, el texto `inputFile.label` de la librería. */
912
+ label: _angular_core.InputSignal<string | undefined>;
913
+ /**
914
+ * FormControl externo. Es opcional: si el componente se usa con
915
+ * `formControlName` / `[formControl]`, el enlace se hace por
916
+ * ControlValueAccessor y no hace falta pasarlo.
917
+ */
918
+ control: _angular_core.InputSignal<FormControl<File[]> | undefined>;
919
+ disabled: _angular_core.InputSignal<boolean>;
920
+ /** Sin uso: la plantilla nunca lo ha pintado (pendiente de revisar en ngx-input-file). */
921
+ placeholder: _angular_core.InputSignal<string | undefined>;
922
+ protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
923
+ protected readonly resolvedLabel: _angular_core.Signal<string>;
924
+ class: _angular_core.InputSignal<string>;
925
+ accept: _angular_core.InputSignal<string[]>;
926
+ multiple: _angular_core.InputSignal<boolean>;
927
+ hint: _angular_core.InputSignal<string>;
928
+ error: _angular_core.InputSignal<string>;
929
+ isDropping: _angular_core.WritableSignal<boolean>;
930
+ inputFileRef: _angular_core.Signal<ElementRef<any> | undefined>;
931
+ internalControl: FormControl<string[] | null>;
932
+ /** Estado deshabilitado que llega desde setDisabledState() (reactive forms). */
933
+ private readonly _cvaDisabled;
934
+ /** Estado deshabilitado efectivo: input `disabled` o el del FormControl padre. */
935
+ readonly isDisabled: _angular_core.Signal<boolean>;
936
+ constructor();
937
+ private checkErrors;
938
+ controlEffect: _angular_core.EffectRef;
939
+ ngOnInit(): void;
940
+ onContainerClick(): void;
941
+ onInputchange(event: any): void;
942
+ onDragOver(event: DragEvent): void;
943
+ onDragLeave(event: DragEvent): void;
944
+ onDrop(event: DragEvent): void;
945
+ attachFiles(files: FileList | null | undefined): void;
946
+ writeValue(files: File[] | undefined | null): void;
947
+ registerOnChange(fn: any): void;
948
+ registerOnTouched(fn: any): void;
949
+ setDisabledState(isDisabled: boolean): void;
950
+ onDeleteFileClick(file: File): void;
951
+ getAccept(): string;
952
+ bytesToMegaBytes(bytes: number): string;
953
+ private markAsTouched;
954
+ private markAsDirty;
955
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxInputFile, never>;
956
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxInputFile, "ngx-input-file", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
957
+ }
958
+
698
959
  /** Opción ya resuelta (valor, etiqueta, disabled y visibilidad según el buscador). */
699
960
  interface ResolvedOption<T> {
700
961
  value: T[keyof T];
@@ -703,7 +964,7 @@ interface ResolvedOption<T> {
703
964
  visible: boolean;
704
965
  }
705
966
  declare class NgxBasicSelect<T> implements ControlValueAccessor {
706
- readonly intl: NgxTablesIntl;
967
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
707
968
  /**
708
969
  * Se auto-registra como ControlValueAccessor del control del formulario.
709
970
  * Se usa `self`/`optional` para poder leer el estado de validación (invalid/touched)
@@ -798,9 +1059,14 @@ declare class NgxBasicSelect<T> implements ControlValueAccessor {
798
1059
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxBasicSelect<any>, "ngx-basic-select", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "basicSelectConfig": { "alias": "basicSelectConfig"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
799
1060
  }
800
1061
 
801
- declare class NgxDialog<T = any> {
802
- private _dialogRef;
803
- private _data;
1062
+ /**
1063
+ * Diálogo genérico que abre NgxDialogService. El contenido (texto, HTML, componente o plantilla)
1064
+ * puede usar NgxDialogContext para devolver un resultado o deshabilitar el botón de confirmar.
1065
+ */
1066
+ declare class NgxDialog<T = any, R = unknown> implements NgxDialogContext<R> {
1067
+ private readonly _dialogRef;
1068
+ private readonly _data;
1069
+ private readonly _texts;
804
1070
  readonly title: string;
805
1071
  readonly icon: string | undefined;
806
1072
  readonly iconColor: string | undefined;
@@ -808,31 +1074,37 @@ declare class NgxDialog<T = any> {
808
1074
  readonly body: ngx_eiffage_material.DialogBodyConfig<T>;
809
1075
  readonly showCancel: boolean;
810
1076
  readonly showConfirm: boolean;
1077
+ readonly destructive: boolean;
1078
+ /** La X no tiene sentido en un diálogo con disableClose (está pensado para no poder cerrarse sin decidir). */
1079
+ readonly showClose: boolean;
1080
+ readonly closeLabel: string;
811
1081
  readonly cancelText: string;
812
1082
  readonly confirmText: string;
813
- DialogBodyType: typeof DialogBodyType;
1083
+ readonly result: _angular_core.WritableSignal<R | undefined>;
1084
+ readonly confirmDisabled: _angular_core.WritableSignal<boolean>;
1085
+ close(result?: R | boolean): void;
1086
+ protected readonly DialogBodyType: typeof DialogBodyType;
1087
+ protected readonly templateContext: NgxDialogTemplateContext<T, R>;
814
1088
  onCancelClick(): void;
815
1089
  onConfirmClick(): void;
816
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDialog<any>, never>;
817
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxDialog<any>, "ngx-dialog", never, {}, {}, never, never, true, never>;
1090
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDialog<any, any>, never>;
1091
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxDialog<any, any>, "ngx-dialog", never, {}, {}, never, never, true, never>;
818
1092
  }
819
1093
 
820
1094
  declare class NgxConfirmDialogComponent {
821
1095
  dialogRef: MatDialogRef<any, any>;
822
1096
  data: ConfirmDialogData<any>;
823
- intl: NgxTablesIntl;
1097
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
824
1098
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxConfirmDialogComponent, never>;
825
1099
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxConfirmDialogComponent, "ngx-confirm-dialog", never, {}, {}, never, never, true, never>;
826
1100
  }
827
1101
 
828
- declare class NgxPaginatedTable<T, U extends PaginatedFilter<T>> implements OnInit, OnDestroy {
1102
+ declare class NgxPaginatedTable<T, U extends PaginatedFilter<T>> implements OnDestroy {
829
1103
  private readonly columnConfigService;
830
1104
  private readonly advancedFilterService;
831
1105
  private readonly dialog;
832
1106
  private readonly datosPantallaService;
833
- private readonly _changeDetectorRef;
834
- readonly intl: NgxTablesIntl;
835
- private readonly _destroy$;
1107
+ readonly texts: Signal<ngx_eiffage_material.NgxEiffageTexts>;
836
1108
  protected isDesktop: Signal<boolean>;
837
1109
  endpoint: _angular_core.InputSignal<(filters: U) => Observable<PaginatedItems<T>>>;
838
1110
  filters: _angular_core.InputSignal<WritableSignal<U>>;
@@ -874,7 +1146,6 @@ declare class NgxPaginatedTable<T, U extends PaginatedFilter<T>> implements OnIn
874
1146
  private overlayRef?;
875
1147
  private portal?;
876
1148
  protected defaultFiltersForPaginatedFilterOptions: WritableSignal<PaginatedFilter<FilterOption>>;
877
- ngOnInit(): void;
878
1149
  onEscape(): void;
879
1150
  ngOnDestroy(): void;
880
1151
  private includeInColumnConfig;
@@ -936,7 +1207,7 @@ declare class NgxBasicTable<T, U extends BasicFilter<T>> {
936
1207
  private readonly columnConfigService;
937
1208
  private readonly dialog;
938
1209
  private readonly datosPantallaService;
939
- readonly intl: NgxTablesIntl;
1210
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
940
1211
  protected isDesktop: _angular_core.Signal<boolean>;
941
1212
  filters: _angular_core.InputSignal<WritableSignal<U>>;
942
1213
  config: _angular_core.InputSignal<WritableSignal<BasicTableConfig<T>>>;
@@ -1032,7 +1303,7 @@ declare class NgxBasicTable<T, U extends BasicFilter<T>> {
1032
1303
  }
1033
1304
 
1034
1305
  declare class SearchableSelectComponent<T> {
1035
- readonly intl: NgxTablesIntl;
1306
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1036
1307
  control: _angular_core.InputSignal<FormControl<any> | undefined>;
1037
1308
  options: _angular_core.InputSignal<T[]>;
1038
1309
  optionLabel: _angular_core.InputSignal<(option: T) => string>;
@@ -1062,7 +1333,7 @@ declare class SearchableSelectComponent<T> {
1062
1333
  }
1063
1334
 
1064
1335
  declare class PaginatedSearchableSelectComponent<T, U extends PaginatedFilter<T>> implements OnDestroy {
1065
- readonly intl: NgxTablesIntl;
1336
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1066
1337
  control: _angular_core.InputSignal<FormControl<any> | undefined>;
1067
1338
  endpoint: _angular_core.InputSignal<(filters: U) => Observable<PaginatedItems<T>>>;
1068
1339
  filters: _angular_core.InputSignal<WritableSignal<U>>;
@@ -1101,12 +1372,38 @@ declare class PaginatedSearchableSelectComponent<T, U extends PaginatedFilter<T>
1101
1372
  }
1102
1373
 
1103
1374
  declare class NgxAlert {
1104
- type: _angular_core.InputSignal<AlertType>;
1105
- title: _angular_core.InputSignal<string | undefined>;
1106
- message: _angular_core.InputSignal<string | undefined>;
1107
- iconName: _angular_core.Signal<"info" | "warning" | "error" | "check_circle">;
1375
+ private readonly _texts;
1376
+ /** Gravedad del mensaje: define color, icono por defecto y cómo se anuncia. */
1377
+ readonly type: _angular_core.InputSignal<AlertType>;
1378
+ /** Título en negrita sobre el mensaje. */
1379
+ readonly title: _angular_core.InputSignal<string | undefined>;
1380
+ /** Mensaje en texto plano. Para contenido con formato o enlaces, proyéctalo como contenido. */
1381
+ readonly message: _angular_core.InputSignal<string | undefined>;
1382
+ /** Estilo visual: standard (fondo + franja lateral), soft (solo fondo) u outlined (solo borde). */
1383
+ readonly appearance: _angular_core.InputSignal<AlertAppearance>;
1384
+ /** Icono de Material Symbols. Por defecto, el del tipo (info, check_circle, warning, error). */
1385
+ readonly icon: _angular_core.InputSignal<string | undefined>;
1386
+ /** Oculta el icono. */
1387
+ readonly hideIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
1388
+ /** Muestra un botón para cerrar el aviso. Al pulsarlo se oculta y emite `dismissed`. */
1389
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
1390
+ /** Etiqueta accesible del botón de cerrar. Por defecto, el texto `alert.dismiss` de la librería. */
1391
+ readonly dismissLabel: _angular_core.InputSignal<string | undefined>;
1392
+ /**
1393
+ * Cómo lo anuncia el lector de pantalla. assertive interrumpe (role="alert"), polite espera
1394
+ * a que termine (role="status") y off no lo anuncia. Por defecto: assertive para error y
1395
+ * warning, polite para info y success.
1396
+ */
1397
+ readonly politeness: _angular_core.InputSignal<"assertive" | "polite" | "off" | undefined>;
1398
+ /** Se emite cuando el usuario cierra el aviso con el botón de cerrar. */
1399
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
1400
+ protected readonly isDismissed: _angular_core.WritableSignal<boolean>;
1401
+ protected readonly resolvedIcon: _angular_core.Signal<string>;
1402
+ protected readonly resolvedDismissLabel: _angular_core.Signal<string>;
1403
+ protected readonly resolvedRole: _angular_core.Signal<"alert" | "status" | null>;
1404
+ protected dismiss(): void;
1108
1405
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxAlert, never>;
1109
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxAlert, "ngx-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1406
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxAlert, "ngx-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "hideIcon": { "alias": "hideIcon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "dismissLabel": { "alias": "dismissLabel"; "required": false; "isSignal": true; }; "politeness": { "alias": "politeness"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*", "[alertActions]"], true, never>;
1110
1407
  }
1111
1408
 
1112
1409
  declare class NgxPaginatedSelect<T, U extends PaginatedFilter<T>> implements ControlValueAccessor {
@@ -1117,7 +1414,7 @@ declare class NgxPaginatedSelect<T, U extends PaginatedFilter<T>> implements Con
1117
1414
  private readonly _parentFormGroup;
1118
1415
  private readonly _parentForm;
1119
1416
  private readonly _changeDetectorRef;
1120
- readonly intl: NgxTablesIntl;
1417
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1121
1418
  /** Label that floats on the form field */
1122
1419
  readonly label: _angular_core.InputSignal<string>;
1123
1420
  /** Title shown in the bottom sheet header */
@@ -1144,9 +1441,9 @@ declare class NgxPaginatedSelect<T, U extends PaginatedFilter<T>> implements Con
1144
1441
  readonly displayMode: _angular_core.InputSignal<"text" | "chips">;
1145
1442
  /** Whether to show the search input inside the bottom sheet */
1146
1443
  readonly showSearch: _angular_core.InputSignalWithTransform<boolean, unknown>;
1147
- /** Placeholder for the search input inside the bottom sheet (defaults to intl) */
1444
+ /** Placeholder for the search input inside the bottom sheet (defaults to the library texts) */
1148
1445
  readonly searchPlaceholder: _angular_core.InputSignal<string | undefined>;
1149
- /** Message when no results are found (defaults to intl) */
1446
+ /** Message when no results are found (defaults to the library texts) */
1150
1447
  readonly noResultsMessage: _angular_core.InputSignal<string | undefined>;
1151
1448
  /** Label for the confirm button (multiple mode, defaults to intl) */
1152
1449
  readonly confirmLabel: _angular_core.InputSignal<string | undefined>;
@@ -1173,7 +1470,7 @@ declare class NgxPaginatedSelect<T, U extends PaginatedFilter<T>> implements Con
1173
1470
  readonly chipsDirection: _angular_core.InputSignal<"row" | "column">;
1174
1471
  /** Whether to show a "Select all" toggle in the bottom sheet (multiple mode) */
1175
1472
  readonly showSelectAll: _angular_core.InputSignalWithTransform<boolean, unknown>;
1176
- /** Label for the select all toggle (defaults to intl) */
1473
+ /** Label for the select all toggle (defaults to the library texts) */
1177
1474
  readonly selectAllLabel: _angular_core.InputSignal<string | undefined>;
1178
1475
  /** Emits the full T object (single) or T[] (multiple) when selection changes */
1179
1476
  readonly valueChange: _angular_core.OutputEmitterRef<Partial<T> | Partial<T>[] | undefined>;
@@ -1264,7 +1561,7 @@ declare class NgxPaginatedSelectBottomSheetComponent<T, U extends PaginatedFilte
1264
1561
  private readonly _ref;
1265
1562
  private readonly _destroy;
1266
1563
  readonly data: NgxPaginatedSelectBottomSheetData<T, U>;
1267
- readonly intl: NgxTablesIntl;
1564
+ readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1268
1565
  /** Raw input value — updates on every keystroke, does NOT trigger the resource */
1269
1566
  readonly query: WritableSignal<string | undefined>;
1270
1567
  /** Holds Partial<T> initially; items get upgraded to full T when toggled from the list */
@@ -1355,36 +1652,46 @@ declare class NgxPaginatedSelectBottomSheetComponent<T, U extends PaginatedFilte
1355
1652
  }
1356
1653
 
1357
1654
  declare class NgxSkeleton {
1358
- /** Shape variant of the skeleton: text (horizontal bars), circle, rect, or rounded rect. */
1359
- variant: _angular_core.InputSignal<SkeletonVariant>;
1360
- /** Width of the skeleton element. Accepts any valid CSS value (px, %, rem, etc.). */
1361
- width: _angular_core.InputSignal<string>;
1362
- /** Height of the skeleton element. Accepts any valid CSS value (px, %, rem, etc.). */
1363
- height: _angular_core.InputSignal<string>;
1364
- /** Number of lines to render. Only applies when variant is 'text'. */
1365
- lines: _angular_core.InputSignal<number>;
1366
- /** Vertical spacing between text lines. Accepts any valid CSS value. */
1367
- lineSpacing: _angular_core.InputSignal<string>;
1368
- /** Width of the last text line for a realistic paragraph effect. Accepts any valid CSS value. */
1369
- lastLineWidth: _angular_core.InputSignal<string>;
1370
- /** Type of loading animation: shimmer (sliding highlight), pulse (opacity), or none. */
1371
- animation: _angular_core.InputSignal<SkeletonAnimation>;
1372
- /** Duration of one full animation cycle. Accepts any valid CSS time value. */
1373
- animationDuration: _angular_core.InputSignal<string>;
1374
- /** Overrides the default border-radius derived from the variant. */
1375
- borderRadius: _angular_core.InputSignal<string | null>;
1376
- /** Accessible label read by screen readers. */
1377
- ariaLabel: _angular_core.InputSignal<string>;
1378
- /** Whether the component should render multiple stacked lines. */
1379
- protected isMultiLine: _angular_core.Signal<boolean>;
1380
- /** Index array used to iterate over text lines in the template. */
1381
- protected lineIndices: _angular_core.Signal<number[]>;
1382
- /** Resolved border-radius based on variant with optional override. */
1383
- protected computedBorderRadius: _angular_core.Signal<string>;
1384
- /** For circle variant, width equals height to ensure a perfect circle. */
1385
- protected computedWidth: _angular_core.Signal<string>;
1655
+ private readonly _texts;
1656
+ /** Forma: text (barras de texto), circle, rect o rounded (rectángulo redondeado). */
1657
+ readonly variant: _angular_core.InputSignal<SkeletonVariant>;
1658
+ /** Ancho. Cualquier valor CSS; un número se interpreta como px. Se ignora en `circle`. */
1659
+ readonly width: _angular_core.InputSignalWithTransform<string, string | number>;
1660
+ /** Alto. Cualquier valor CSS; un número se interpreta como px. En `circle` también es el diámetro. */
1661
+ readonly height: _angular_core.InputSignalWithTransform<string, string | number>;
1662
+ /** Número de líneas. Solo aplica con `variant="text"`. */
1663
+ readonly lines: _angular_core.InputSignalWithTransform<number, unknown>;
1664
+ /** Separación vertical entre líneas de texto. */
1665
+ readonly lineSpacing: _angular_core.InputSignalWithTransform<string, string | number>;
1666
+ /** Ancho de la última línea, para que el párrafo parezca real. Solo con varias líneas. */
1667
+ readonly lastLineWidth: _angular_core.InputSignalWithTransform<string, string | number>;
1668
+ /** Animación: shimmer (brillo que se desliza), pulse (opacidad) o none. */
1669
+ readonly animation: _angular_core.InputSignal<SkeletonAnimation>;
1670
+ /**
1671
+ * Duración de un ciclo de animación (cualquier tiempo CSS). Por defecto 1.5s, o el valor
1672
+ * de la variable CSS `--ngx-skeleton-duration` si el consumidor la define.
1673
+ */
1674
+ readonly animationDuration: _angular_core.InputSignal<string | undefined>;
1675
+ /** Sustituye el border-radius que corresponde a la variante. */
1676
+ readonly borderRadius: _angular_core.InputSignalWithTransform<string | null, string | number | null | undefined>;
1677
+ /** Etiqueta accesible. Por defecto, el texto `skeleton.loading` de la librería. */
1678
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1679
+ /**
1680
+ * Oculta el skeleton a lectores de pantalla (sin role ni etiqueta). Úsalo cuando varios
1681
+ * skeletons forman una misma pieza: márcalos todos como decorativos y anuncia la carga
1682
+ * una sola vez en el contenedor (p. ej. con `aria-busy` o un skeleton sin `decorative`).
1683
+ */
1684
+ readonly decorative: _angular_core.InputSignalWithTransform<boolean, unknown>;
1685
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
1686
+ /** Una entrada por línea a pintar (siempre al menos una). */
1687
+ protected readonly lineIndices: _angular_core.Signal<number[]>;
1688
+ protected readonly isMultiLine: _angular_core.Signal<boolean>;
1689
+ /** border-radius de la variante, salvo que se indique `borderRadius`. */
1690
+ protected readonly computedBorderRadius: _angular_core.Signal<string>;
1691
+ /** En `circle` el ancho es el alto, para que sea un círculo perfecto. */
1692
+ protected readonly computedWidth: _angular_core.Signal<string>;
1386
1693
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxSkeleton, never>;
1387
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxSkeleton, "ngx-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "lineSpacing": { "alias": "lineSpacing"; "required": false; "isSignal": true; }; "lastLineWidth": { "alias": "lastLineWidth"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1694
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxSkeleton, "ngx-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "lineSpacing": { "alias": "lineSpacing"; "required": false; "isSignal": true; }; "lastLineWidth": { "alias": "lastLineWidth"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "animationDuration": { "alias": "animationDuration"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "decorative": { "alias": "decorative"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1388
1695
  }
1389
1696
 
1390
1697
  declare class NgxFileInput implements ControlValueAccessor {
@@ -1401,8 +1708,10 @@ declare class NgxFileInput implements ControlValueAccessor {
1401
1708
  readonly maxFiles: _angular_core.InputSignal<number | null>;
1402
1709
  /** Disables the component. */
1403
1710
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1404
- /** Label text shown inside the drop zone. */
1405
- readonly label: _angular_core.InputSignal<string>;
1711
+ /** Label text shown inside the drop zone. Por defecto, el texto `fileInput.dropLabel` de la librería. */
1712
+ readonly label: _angular_core.InputSignal<string | undefined>;
1713
+ protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1714
+ protected readonly resolvedLabel: _angular_core.Signal<string>;
1406
1715
  /** Secondary hint text (formats, sizes…). */
1407
1716
  readonly hint: _angular_core.InputSignal<string | null>;
1408
1717
  /** Show the file preview list below the drop zone. */
@@ -1464,123 +1773,73 @@ declare class NgxFileInput implements ControlValueAccessor {
1464
1773
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxFileInput, "ngx-file-input", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "showPreview": { "alias": "showPreview"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "fileRemoved": "fileRemoved"; "validationError": "validationError"; }, never, never, true, never>;
1465
1774
  }
1466
1775
 
1467
- declare class NgxDialogService {
1468
- private readonly _dialog;
1776
+ /** Opciones comunes a todos los diálogos. */
1777
+ interface DialogHeaderOptions {
1778
+ title: string;
1779
+ subtitle?: string;
1780
+ icon?: string;
1781
+ iconColor?: string;
1782
+ cancelText?: string;
1783
+ confirmText?: string;
1784
+ showCancel?: boolean;
1785
+ showConfirm?: boolean;
1786
+ /** El botón de confirmar se pinta en el color de error (eliminar, descartar…). */
1787
+ destructive?: boolean;
1469
1788
  /**
1470
- *
1471
- * @param config
1472
- * @param dialogConfig
1473
- * @returns Observable<DialogResult>
1474
- *
1475
- * Opens a text dialog with the provided configuration.
1789
+ * Muestra la X de cerrar en el encabezado; cerrar con ella devuelve undefined, igual que Esc.
1790
+ * Por defecto true, salvo si dialogConfig.disableClose es true.
1476
1791
  */
1477
- openText(config: {
1478
- title: string;
1792
+ showClose?: boolean;
1793
+ }
1794
+ /**
1795
+ * Abre diálogos de Material con una estructura común: título con icono opcional, subtítulo,
1796
+ * cuerpo (texto, HTML, componente o plantilla) y botones de cancelar/confirmar.
1797
+ *
1798
+ * Todos devuelven un Observable que emite al cerrarse y completa:
1799
+ * - `true` (o el resultado fijado por el contenido) si se confirma,
1800
+ * - `false` si se cancela,
1801
+ * - `undefined` si se cierra sin pulsar ningún botón (Esc o clic fuera).
1802
+ */
1803
+ declare class NgxDialogService {
1804
+ private readonly _dialog;
1805
+ private readonly _texts;
1806
+ /** Diálogo con un texto. Base de `confirm()` e `info()`. */
1807
+ openText(config: DialogHeaderOptions & {
1479
1808
  content: string;
1480
- subtitle?: string;
1481
- cancelText?: string;
1482
- confirmText?: string;
1483
- icon?: string;
1484
- iconColor?: string;
1485
- showCancel?: boolean;
1486
- showConfirm?: boolean;
1487
1809
  }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1488
- /**
1489
- *
1490
- * @param title
1491
- * @param message
1492
- * @param cancelText
1493
- * @param confirmText
1494
- * @param dialogConfig
1495
- * @returns Observable<DialogResult>
1496
- *
1497
- * Opens a confirmation dialog with cancel and confirm buttons.
1498
- */
1499
- confirm(config: {
1500
- title: string;
1810
+ /** Pregunta de confirmación con botones de cancelar y confirmar. */
1811
+ confirm(config: Omit<DialogHeaderOptions, 'showCancel' | 'showConfirm'> & {
1501
1812
  message: string;
1502
- subtitle?: string;
1503
- icon?: string;
1504
- iconColor?: string;
1505
- cancelText?: string;
1506
- confirmText?: string;
1507
1813
  }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1508
- /**
1509
- *
1510
- * @param title
1511
- * @param message
1512
- * @param confirmText
1513
- * @param dialogConfig
1514
- * @returns Observable<DialogResult>
1515
- *
1516
- * Opens an informational dialog with a single confirm button.
1517
- */
1518
- info(config: {
1519
- title: string;
1814
+ /** Aviso informativo con un único botón. */
1815
+ info(config: Omit<DialogHeaderOptions, 'showCancel' | 'showConfirm' | 'cancelText'> & {
1520
1816
  message: string;
1521
- subtitle?: string;
1522
- icon?: string;
1523
- iconColor?: string;
1524
- confirmText?: string;
1525
1817
  }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1526
1818
  /**
1527
- *
1528
- * @param config
1529
- * @param dialogConfig
1530
- * @returns Observable<DialogResult>
1531
- *
1532
- * Opens an HTML dialog with the provided configuration.
1819
+ * Diálogo con HTML. Angular sanea el HTML: se quitan scripts, estilos en línea y atributos
1820
+ * peligrosos. Para contenido con interacción, usa `component()` o `template()`.
1533
1821
  */
1534
- html(config: {
1535
- title: string;
1536
- subtitle?: string;
1537
- icon?: string;
1538
- iconColor?: string;
1822
+ html(config: DialogHeaderOptions & {
1539
1823
  html: string;
1540
- cancelText?: string;
1541
- confirmText?: string;
1542
- showCancel?: boolean;
1543
- showConfirm?: boolean;
1544
1824
  }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1545
1825
  /**
1546
- *
1547
- * @param config
1548
- * @return Observable<DialogResult>
1549
- *
1550
- * Opens a component dialog with the provided configuration.
1826
+ * Diálogo con un componente propio. El componente recibe `componentData` por su input `data`
1827
+ * y puede inyectar `NgxDialogContext<R>` para devolver un resultado (`result`), cerrar
1828
+ * (`close()`) o deshabilitar el botón de confirmar (`confirmDisabled`).
1551
1829
  */
1552
- component<T = any>(config: {
1553
- title: string;
1554
- subtitle?: string;
1555
- icon?: string;
1556
- iconColor?: string;
1830
+ component<T = any, R = boolean>(config: DialogHeaderOptions & {
1557
1831
  component: Type<any>;
1558
1832
  componentData?: T;
1559
- cancelText?: string;
1560
- confirmText?: string;
1561
- showCancel?: boolean;
1562
- showConfirm?: boolean;
1563
- }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1833
+ }, dialogConfig?: MatDialogConfig): Observable<R | boolean | undefined>;
1564
1834
  /**
1565
- *
1566
- * @param config
1567
- * @param dialogConfig
1568
- * @returns Observable<DialogResult>
1569
- *
1570
- * Opens a template dialog with the provided configuration.
1835
+ * Diálogo con una plantilla. La plantilla recibe `templateData` como `$implicit` y el contexto
1836
+ * del diálogo como `dialog` (`let-data let-dialog="dialog"`).
1571
1837
  */
1572
- template<T = any>(config: {
1573
- title: string;
1574
- subtitle?: string;
1575
- icon?: string;
1576
- iconColor?: string;
1577
- template: TemplateRef<T>;
1838
+ template<T = any, R = boolean>(config: DialogHeaderOptions & {
1839
+ template: TemplateRef<NgxDialogTemplateContext<T, R>> | TemplateRef<T>;
1578
1840
  templateData?: T;
1579
- cancelText?: string;
1580
- confirmText?: string;
1581
- showCancel?: boolean;
1582
- showConfirm?: boolean;
1583
- }, dialogConfig?: MatDialogConfig): Observable<boolean | undefined>;
1841
+ }, dialogConfig?: MatDialogConfig): Observable<R | boolean | undefined>;
1842
+ private _open;
1584
1843
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDialogService, never>;
1585
1844
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<NgxDialogService>;
1586
1845
  }
@@ -1636,5 +1895,5 @@ declare class DynamicHostDirective<T> {
1636
1895
  declare const includeNoSensible: (cadena: string, query: string) => boolean;
1637
1896
  declare const base64ToUtf8: (str: string) => string;
1638
1897
 
1639
- export { AdvancedFilterService, AdvancedFilterUtils, ColumnConfigService, DatosPantallaService, DialogBodyType, DynamicHostDirective, NgxAlert, NgxBasicSelect, NgxBasicTable, NgxConfirmDialogComponent, NgxDialog, NgxDialogService, NgxFileInput, NgxInputFile, NgxLoadingButton, NgxPaginatedSelect, NgxPaginatedSelectBottomSheetComponent, NgxPaginatedTable, NgxSkeleton, NgxTablesIntl, OPERATOR_BY_FILTER_TYPE, PaginatedSearchableSelectComponent, SearchableSelectComponent, USER_ID_FACTORY, base64ToUtf8, includeNoSensible, isFilterOption };
1640
- export type { AdvancedFilter, AlertType, BasicFilter, BasicSelectConfig, BasicTableColumn, BasicTableConfig, ColumnConfig, ColumnPipe, ColumnValue, ConfigureTableColumnData, ConfirmDialogData, DeleteConfirm, DialogBodyConfig, DialogConfig, DynamicFilter, FilterConnector, FilterGroup, FilterOperator, FilterOption, FilterRule, FilterType, NgxFileError, NgxFileErrorCode, NgxFileInputVariant, NgxFileItem, NgxPaginatedSelectBottomSheetData, PaginatedFilter, PaginatedItems, PaginatedSelectConfig, PaginatedTableColumn, PaginatedTableConfig, Pantalla, RowActionClickEvent, RowActionIconColor, RowSelectionAction, SelectionActionEvent, SendType, SkeletonAnimation, SkeletonVariant, SortBy, SortType, TableBasicAction, TableRowAction, TipoPantalla };
1898
+ export { AdvancedFilterService, AdvancedFilterUtils, ColumnConfigService, DatosPantallaService, DialogBodyType, DynamicHostDirective, NGX_EIFFAGE_DEFAULT_TEXTS, NGX_EIFFAGE_TEXTS, NgxAlert, NgxBasicSelect, NgxBasicTable, NgxConfirmDialogComponent, NgxDialog, NgxDialogContext, NgxDialogService, NgxFileInput, NgxInputFile, NgxLoadingButton, NgxPaginatedSelect, NgxPaginatedSelectBottomSheetComponent, NgxPaginatedTable, NgxSkeleton, NgxTablesIntl, NgxTexts, OPERATOR_BY_FILTER_TYPE, PaginatedSearchableSelectComponent, SearchableSelectComponent, USER_ID_FACTORY, base64ToUtf8, includeNoSensible, isFilterOption, provideNgxEiffageTexts };
1899
+ export type { AdvancedFilter, AlertAppearance, AlertType, BasicFilter, BasicSelectConfig, BasicTableColumn, BasicTableConfig, ColumnConfig, ColumnPipe, ColumnValue, ConfigureTableColumnData, ConfirmDialogData, DeleteConfirm, DialogBodyConfig, DialogConfig, DynamicFilter, FilterConnector, FilterGroup, FilterOperator, FilterOption, FilterRule, FilterType, LoadingButtonAppearance, LoadingButtonColor, NgxDialogTemplateContext, NgxEiffageTexts, NgxEiffageTextsOverrides, NgxEiffageTextsSource, NgxFileError, NgxFileErrorCode, NgxFileInputVariant, NgxFileItem, NgxPaginatedSelectBottomSheetData, PaginatedFilter, PaginatedItems, PaginatedSelectConfig, PaginatedTableColumn, PaginatedTableConfig, Pantalla, RowActionClickEvent, RowActionIconColor, RowSelectionAction, SelectionActionEvent, SendType, SkeletonAnimation, SkeletonVariant, SortBy, SortType, TableBasicAction, TableRowAction, TipoPantalla };