ngx-eiffage-material 0.3.0 → 0.5.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
@@ -1124,7 +1124,6 @@ declare class NgxDialog<T = any, R = unknown> implements NgxDialogContext<R> {
1124
1124
  readonly destructive: boolean;
1125
1125
  /** La X no tiene sentido en un diálogo con disableClose (está pensado para no poder cerrarse sin decidir). */
1126
1126
  readonly showClose: boolean;
1127
- readonly closeLabel: string;
1128
1127
  readonly cancelText: string;
1129
1128
  readonly confirmText: string;
1130
1129
  readonly result: _angular_core.WritableSignal<R | undefined>;
@@ -1138,6 +1137,44 @@ declare class NgxDialog<T = any, R = unknown> implements NgxDialogContext<R> {
1138
1137
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxDialog<any, any>, "ngx-dialog", never, {}, {}, never, never, true, never>;
1139
1138
  }
1140
1139
 
1140
+ /**
1141
+ * Encabezado de diálogo con botón X para cerrar: el mismo que usa ngx-dialog, para diálogos propios
1142
+ * abiertos con MatDialog. Va en lugar de `<h2 mat-dialog-title>`:
1143
+ *
1144
+ * ```html
1145
+ * <ngx-dialog-header [title]="'Editar proyecto'" icon="edit" />
1146
+ * <!-- o con contenido propio -->
1147
+ * <ngx-dialog-header>{{ (isNew ? 'PROJECTS.create' : 'PROJECTS.edit') | translate }}</ngx-dialog-header>
1148
+ * ```
1149
+ */
1150
+ declare class NgxDialogHeader implements DoCheck {
1151
+ private readonly _dialogRef;
1152
+ protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1153
+ /** Título. También se puede poner como contenido (`<ngx-dialog-header>…</ngx-dialog-header>`). */
1154
+ readonly title: _angular_core.InputSignal<string | undefined>;
1155
+ /** Línea secundaria bajo el título. */
1156
+ readonly subtitle: _angular_core.InputSignal<string | undefined>;
1157
+ /** Icono de Material Symbols delante del título. */
1158
+ readonly icon: _angular_core.InputSignal<string | undefined>;
1159
+ /** Color del icono (p. ej. `var(--mat-sys-error)`). */
1160
+ readonly iconColor: _angular_core.InputSignal<string | undefined>;
1161
+ /**
1162
+ * Muestra la X. Sin indicar, se ve mientras el diálogo se pueda cerrar: se oculta si el diálogo tiene
1163
+ * `disableClose` (también si se activa después, p. ej. durante una subida) y vuelve al quitarlo.
1164
+ */
1165
+ readonly showClose: _angular_core.InputSignal<boolean | undefined>;
1166
+ /** Valor con el que se cierra al pulsar la X. Por defecto `undefined`, igual que con Esc o al pulsar fuera. */
1167
+ readonly closeResult: _angular_core.InputSignal<unknown>;
1168
+ /** disableClose es una propiedad normal del MatDialogRef: se lee en cada comprobación. */
1169
+ private readonly _closable;
1170
+ protected readonly closeVisible: _angular_core.Signal<boolean>;
1171
+ ngDoCheck(): void;
1172
+ /** Cierra el diálogo con `closeResult`. */
1173
+ close(): void;
1174
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDialogHeader, never>;
1175
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxDialogHeader, "ngx-dialog-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "closeResult": { "alias": "closeResult"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1176
+ }
1177
+
1141
1178
  /**
1142
1179
  * @deprecated Usar `NgxDialogService.confirm()` (o `template()` con contenido propio), que tiene el
1143
1180
  * encabezado, el botón X y la opción `destructive` de ngx-dialog. Las tablas ya no lo usan; se
@@ -1778,83 +1815,105 @@ declare class NgxSkeleton {
1778
1815
  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>;
1779
1816
  }
1780
1817
 
1781
- declare class NgxFileInput implements ControlValueAccessor {
1782
- private readonly _platform;
1783
- private readonly _inputId;
1818
+ /** Familia del fichero, para el color de su icono en ngx-file-input. */
1819
+ type FileKind = 'image' | 'pdf' | 'video' | 'audio' | 'generic';
1820
+
1821
+ /**
1822
+ * Zona para soltar o seleccionar ficheros, con lista de ficheros y previsualización de imágenes.
1823
+ * Se usa con `formControlName` / `[formControl]` / `ngModel` (valor: los `File[]` válidos) o con `[(files)]`.
1824
+ */
1825
+ declare class NgxFileInput implements ControlValueAccessor, AfterViewInit, DoCheck {
1826
+ private readonly _ngControl;
1827
+ private readonly _parentForm;
1828
+ private readonly _host;
1829
+ private readonly _locale;
1830
+ private readonly _isBrowser;
1784
1831
  private readonly _nativeInput;
1785
- /** Accepted MIME types or extensions (e.g. `'image/*,.pdf'`). */
1786
- readonly accept: _angular_core.InputSignal<string>;
1787
- /** Allow selecting multiple files. */
1832
+ protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1833
+ /** Tipos admitidos: extensiones (`.pdf`), MIME (`application/pdf`) o comodines (`image/*`). `'*'` = cualquiera. */
1834
+ readonly accept: _angular_core.InputSignal<string | string[]>;
1835
+ /** Admite varios ficheros: cada selección se añade a la anterior. */
1788
1836
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
1789
- /** Maximum file size in bytes per file. `null` means no limit. */
1837
+ /** Tamaño máximo por fichero, en bytes. `null` = sin límite. */
1790
1838
  readonly maxSize: _angular_core.InputSignal<number | null>;
1791
- /** Maximum number of files when `multiple` is true. `null` means no limit. */
1839
+ /** Número máximo de ficheros válidos (con `multiple`). `null` = sin límite. */
1792
1840
  readonly maxFiles: _angular_core.InputSignal<number | null>;
1793
- /** Disables the component. */
1794
1841
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1795
- /** Label text shown inside the drop zone. Por defecto, el texto `fileInput.dropLabel` de la librería. */
1842
+ /** Texto principal. Por defecto, el texto `fileInput.dropLabel` de la librería. */
1796
1843
  readonly label: _angular_core.InputSignal<string | undefined>;
1797
- protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1798
- protected readonly resolvedLabel: _angular_core.Signal<string>;
1799
- /** Secondary hint text (formats, sizes…). */
1844
+ /** Texto secundario (formatos, tamaños…). */
1800
1845
  readonly hint: _angular_core.InputSignal<string | null>;
1801
- /** Show the file preview list below the drop zone. */
1846
+ /** Mensaje de error. Se ve cuando el control es inválido y está tocado o el formulario se ha enviado. */
1847
+ readonly error: _angular_core.InputSignal<string>;
1848
+ /** Muestra la lista de ficheros (con miniatura de las imágenes). */
1802
1849
  readonly showPreview: _angular_core.InputSignalWithTransform<boolean, unknown>;
1803
- /** Visual variant: `'default'` (large zone), `'compact'` (horizontal), or `'button'`. */
1850
+ /** `'default'` (zona grande), `'compact'` (barra horizontal) o `'button'` (solo un botón). */
1804
1851
  readonly variant: _angular_core.InputSignal<NgxFileInputVariant>;
1805
- /** Emits when valid files are added. */
1852
+ /** Ficheros válidos seleccionados. Admite `[(files)]` para usarlo sin formularios. */
1853
+ readonly files: _angular_core.ModelSignal<File[]>;
1854
+ /** Ficheros válidos añadidos en una selección o al soltar. */
1806
1855
  readonly filesSelected: _angular_core.OutputEmitterRef<NgxFileItem[]>;
1807
- /** Emits when a file is removed from the list. */
1856
+ /** Fichero quitado de la lista (válido o rechazado). */
1808
1857
  readonly fileRemoved: _angular_core.OutputEmitterRef<NgxFileItem>;
1809
- /** Emits for each file that fails validation. */
1858
+ /** Un fichero rechazado (tipo, tamaño o número). */
1810
1859
  readonly validationError: _angular_core.OutputEmitterRef<NgxFileError>;
1811
- /** All file items (valid + invalid). */
1812
- readonly items: _angular_core.WritableSignal<NgxFileItem[]>;
1813
- /** Whether the user is dragging files over the drop zone. */
1814
- readonly isDragOver: _angular_core.WritableSignal<boolean>;
1815
- /** Brief flash after a successful drop. */
1816
- readonly showDropConfirm: _angular_core.WritableSignal<boolean>;
1817
- /** Announcement text for screen readers. */
1818
- readonly liveAnnouncement: _angular_core.WritableSignal<string>;
1819
- /** Unique id for the hidden file input. */
1820
- readonly inputId: string;
1821
- /** Disabled state coming from `setDisabledState()` (reactive forms). */
1860
+ protected readonly id: string;
1861
+ private readonly _entries;
1822
1862
  private readonly _cvaDisabled;
1823
- /**
1824
- * Effective disabled state: the `disabled` input OR the state pushed by the
1825
- * parent FormControl through `setDisabledState()`.
1826
- */
1863
+ /** Deshabilitado por el input `disabled` o por el control del formulario. */
1827
1864
  readonly isDisabled: _angular_core.Signal<boolean>;
1828
- /** Derived: valid files only (used as FormControl value). */
1829
- protected readonly validFiles: _angular_core.Signal<File[]>;
1865
+ protected readonly isDragOver: _angular_core.WritableSignal<boolean>;
1866
+ protected readonly showDropConfirm: _angular_core.WritableSignal<boolean>;
1867
+ protected readonly announcement: _angular_core.WritableSignal<string>;
1868
+ protected readonly isRequired: _angular_core.WritableSignal<boolean>;
1869
+ protected readonly showError: _angular_core.WritableSignal<boolean>;
1870
+ protected readonly resolvedLabel: _angular_core.Signal<string>;
1871
+ protected readonly acceptAttr: _angular_core.Signal<string>;
1872
+ protected readonly describedBy: _angular_core.Signal<string | null>;
1873
+ /** Lo que pinta la lista: icono, color, tamaño legible y mensaje de error ya traducido. */
1874
+ protected readonly views: _angular_core.Signal<{
1875
+ item: NgxFileItem;
1876
+ icon: string;
1877
+ kind: FileKind;
1878
+ size: string;
1879
+ error: string | null;
1880
+ }[]>;
1830
1881
  private _onChange;
1831
1882
  private _onTouched;
1832
- writeValue(files: File[] | null): void;
1833
- registerOnChange(fn: (value: File[]) => void): void;
1834
- registerOnTouched(fn: () => void): void;
1835
- setDisabledState(isDisabled: boolean): void;
1836
- onDragOver(event: DragEvent): void;
1837
- onDragLeave(event: DragEvent): void;
1838
- onDrop(event: DragEvent): void;
1839
- onFileInputChange(event: Event): void;
1883
+ private _controlSub?;
1884
+ private _confirmTimer?;
1885
+ constructor();
1886
+ ngAfterViewInit(): void;
1887
+ ngDoCheck(): void;
1888
+ /** Abre el selector de ficheros del sistema (no hace nada si está deshabilitado). */
1840
1889
  openFilePicker(): void;
1890
+ /** Quita un fichero de la lista, válido o rechazado. */
1841
1891
  removeFile(item: NgxFileItem): void;
1842
- /** Format bytes to human-readable string. */
1843
- formatSize(bytes: number): string;
1844
- /** Get a Material icon name based on MIME type. */
1845
- getFileIcon(type: string): string;
1846
- /** Get an accent color class based on MIME type. */
1847
- getFileColorClass(type: string): string;
1848
- private _processFiles;
1849
- private _validateAndCreate;
1850
- private _toFileItem;
1851
- private _isTypeAllowed;
1852
- private _generatePreviews;
1853
- private _emitChange;
1892
+ protected onZoneKeydown(event: KeyboardEvent): void;
1893
+ protected onZoneBlur(): void;
1894
+ protected onNativeChange(event: Event): void;
1895
+ protected onDragOver(event: DragEvent): void;
1896
+ protected onDragLeave(event: DragEvent): void;
1897
+ protected onDrop(event: DragEvent): void;
1898
+ writeValue(files: File[] | null | undefined): void;
1899
+ registerOnChange(fn: (files: File[]) => void): void;
1900
+ registerOnTouched(fn: () => void): void;
1901
+ setDisabledState(isDisabled: boolean): void;
1902
+ private _validFiles;
1903
+ private _addFiles;
1904
+ /** Publica los ficheros válidos: model, formulario y estado de tocado. */
1905
+ private _commit;
1906
+ /** Lista nueva a partir de un valor externo (writeValue o [files]); los rechazados se descartan. */
1907
+ private _resetFrom;
1908
+ private _toItem;
1909
+ private _revokePreview;
1910
+ private _message;
1911
+ private _bindControl;
1912
+ private _syncFormState;
1913
+ private _markTouched;
1854
1914
  private _flashDropConfirm;
1855
- private _generateId;
1856
1915
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxFileInput, never>;
1857
- 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>;
1916
+ 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; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "showPreview": { "alias": "showPreview"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; }, { "files": "filesChange"; "filesSelected": "filesSelected"; "fileRemoved": "fileRemoved"; "validationError": "validationError"; }, never, never, true, never>;
1858
1917
  }
1859
1918
 
1860
1919
  /** Opciones comunes a todos los diálogos. */
@@ -1981,5 +2040,5 @@ declare class DynamicHostDirective<T> {
1981
2040
  declare const includeNoSensible: (cadena: string, query: string) => boolean;
1982
2041
  declare const base64ToUtf8: (str: string) => string;
1983
2042
 
1984
- 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 };
2043
+ export { AdvancedFilterService, AdvancedFilterUtils, ColumnConfigService, DatosPantallaService, DialogBodyType, DynamicHostDirective, NGX_EIFFAGE_DEFAULT_TEXTS, NGX_EIFFAGE_TEXTS, NgxAlert, NgxBasicSelect, NgxBasicTable, NgxConfirmDialogComponent, NgxDialog, NgxDialogContext, NgxDialogHeader, NgxDialogService, NgxFileInput, NgxInputFile, NgxLoadingButton, NgxPaginatedSelect, NgxPaginatedSelectBottomSheetComponent, NgxPaginatedTable, NgxSkeleton, NgxTablesIntl, NgxTexts, OPERATOR_BY_FILTER_TYPE, PaginatedSearchableSelectComponent, SearchableSelectComponent, USER_ID_FACTORY, base64ToUtf8, includeNoSensible, isFilterOption, provideNgxEiffageTexts };
1985
2044
  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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-eiffage-material",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.0.0 || ^21.0.0 || ^22.0.0",
6
6
  "@angular/common": "^20.1.0 || ^21.0.0 || ^22.0.0",