ngx-eiffage-material 0.3.0 → 0.4.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
@@ -1778,83 +1778,105 @@ declare class NgxSkeleton {
1778
1778
  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
1779
  }
1780
1780
 
1781
- declare class NgxFileInput implements ControlValueAccessor {
1782
- private readonly _platform;
1783
- private readonly _inputId;
1781
+ /** Familia del fichero, para el color de su icono en ngx-file-input. */
1782
+ type FileKind = 'image' | 'pdf' | 'video' | 'audio' | 'generic';
1783
+
1784
+ /**
1785
+ * Zona para soltar o seleccionar ficheros, con lista de ficheros y previsualización de imágenes.
1786
+ * Se usa con `formControlName` / `[formControl]` / `ngModel` (valor: los `File[]` válidos) o con `[(files)]`.
1787
+ */
1788
+ declare class NgxFileInput implements ControlValueAccessor, AfterViewInit, DoCheck {
1789
+ private readonly _ngControl;
1790
+ private readonly _parentForm;
1791
+ private readonly _host;
1792
+ private readonly _locale;
1793
+ private readonly _isBrowser;
1784
1794
  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. */
1795
+ protected readonly texts: _angular_core.Signal<ngx_eiffage_material.NgxEiffageTexts>;
1796
+ /** Tipos admitidos: extensiones (`.pdf`), MIME (`application/pdf`) o comodines (`image/*`). `'*'` = cualquiera. */
1797
+ readonly accept: _angular_core.InputSignal<string | string[]>;
1798
+ /** Admite varios ficheros: cada selección se añade a la anterior. */
1788
1799
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
1789
- /** Maximum file size in bytes per file. `null` means no limit. */
1800
+ /** Tamaño máximo por fichero, en bytes. `null` = sin límite. */
1790
1801
  readonly maxSize: _angular_core.InputSignal<number | null>;
1791
- /** Maximum number of files when `multiple` is true. `null` means no limit. */
1802
+ /** Número máximo de ficheros válidos (con `multiple`). `null` = sin límite. */
1792
1803
  readonly maxFiles: _angular_core.InputSignal<number | null>;
1793
- /** Disables the component. */
1794
1804
  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. */
1805
+ /** Texto principal. Por defecto, el texto `fileInput.dropLabel` de la librería. */
1796
1806
  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…). */
1807
+ /** Texto secundario (formatos, tamaños…). */
1800
1808
  readonly hint: _angular_core.InputSignal<string | null>;
1801
- /** Show the file preview list below the drop zone. */
1809
+ /** Mensaje de error. Se ve cuando el control es inválido y está tocado o el formulario se ha enviado. */
1810
+ readonly error: _angular_core.InputSignal<string>;
1811
+ /** Muestra la lista de ficheros (con miniatura de las imágenes). */
1802
1812
  readonly showPreview: _angular_core.InputSignalWithTransform<boolean, unknown>;
1803
- /** Visual variant: `'default'` (large zone), `'compact'` (horizontal), or `'button'`. */
1813
+ /** `'default'` (zona grande), `'compact'` (barra horizontal) o `'button'` (solo un botón). */
1804
1814
  readonly variant: _angular_core.InputSignal<NgxFileInputVariant>;
1805
- /** Emits when valid files are added. */
1815
+ /** Ficheros válidos seleccionados. Admite `[(files)]` para usarlo sin formularios. */
1816
+ readonly files: _angular_core.ModelSignal<File[]>;
1817
+ /** Ficheros válidos añadidos en una selección o al soltar. */
1806
1818
  readonly filesSelected: _angular_core.OutputEmitterRef<NgxFileItem[]>;
1807
- /** Emits when a file is removed from the list. */
1819
+ /** Fichero quitado de la lista (válido o rechazado). */
1808
1820
  readonly fileRemoved: _angular_core.OutputEmitterRef<NgxFileItem>;
1809
- /** Emits for each file that fails validation. */
1821
+ /** Un fichero rechazado (tipo, tamaño o número). */
1810
1822
  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). */
1823
+ protected readonly id: string;
1824
+ private readonly _entries;
1822
1825
  private readonly _cvaDisabled;
1823
- /**
1824
- * Effective disabled state: the `disabled` input OR the state pushed by the
1825
- * parent FormControl through `setDisabledState()`.
1826
- */
1826
+ /** Deshabilitado por el input `disabled` o por el control del formulario. */
1827
1827
  readonly isDisabled: _angular_core.Signal<boolean>;
1828
- /** Derived: valid files only (used as FormControl value). */
1829
- protected readonly validFiles: _angular_core.Signal<File[]>;
1828
+ protected readonly isDragOver: _angular_core.WritableSignal<boolean>;
1829
+ protected readonly showDropConfirm: _angular_core.WritableSignal<boolean>;
1830
+ protected readonly announcement: _angular_core.WritableSignal<string>;
1831
+ protected readonly isRequired: _angular_core.WritableSignal<boolean>;
1832
+ protected readonly showError: _angular_core.WritableSignal<boolean>;
1833
+ protected readonly resolvedLabel: _angular_core.Signal<string>;
1834
+ protected readonly acceptAttr: _angular_core.Signal<string>;
1835
+ protected readonly describedBy: _angular_core.Signal<string | null>;
1836
+ /** Lo que pinta la lista: icono, color, tamaño legible y mensaje de error ya traducido. */
1837
+ protected readonly views: _angular_core.Signal<{
1838
+ item: NgxFileItem;
1839
+ icon: string;
1840
+ kind: FileKind;
1841
+ size: string;
1842
+ error: string | null;
1843
+ }[]>;
1830
1844
  private _onChange;
1831
1845
  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;
1846
+ private _controlSub?;
1847
+ private _confirmTimer?;
1848
+ constructor();
1849
+ ngAfterViewInit(): void;
1850
+ ngDoCheck(): void;
1851
+ /** Abre el selector de ficheros del sistema (no hace nada si está deshabilitado). */
1840
1852
  openFilePicker(): void;
1853
+ /** Quita un fichero de la lista, válido o rechazado. */
1841
1854
  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;
1855
+ protected onZoneKeydown(event: KeyboardEvent): void;
1856
+ protected onZoneBlur(): void;
1857
+ protected onNativeChange(event: Event): void;
1858
+ protected onDragOver(event: DragEvent): void;
1859
+ protected onDragLeave(event: DragEvent): void;
1860
+ protected onDrop(event: DragEvent): void;
1861
+ writeValue(files: File[] | null | undefined): void;
1862
+ registerOnChange(fn: (files: File[]) => void): void;
1863
+ registerOnTouched(fn: () => void): void;
1864
+ setDisabledState(isDisabled: boolean): void;
1865
+ private _validFiles;
1866
+ private _addFiles;
1867
+ /** Publica los ficheros válidos: model, formulario y estado de tocado. */
1868
+ private _commit;
1869
+ /** Lista nueva a partir de un valor externo (writeValue o [files]); los rechazados se descartan. */
1870
+ private _resetFrom;
1871
+ private _toItem;
1872
+ private _revokePreview;
1873
+ private _message;
1874
+ private _bindControl;
1875
+ private _syncFormState;
1876
+ private _markTouched;
1854
1877
  private _flashDropConfirm;
1855
- private _generateId;
1856
1878
  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>;
1879
+ 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
1880
  }
1859
1881
 
1860
1882
  /** Opciones comunes a todos los diálogos. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-eiffage-material",
3
- "version": "0.3.0",
3
+ "version": "0.4.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",