valtech-components 2.0.408 → 2.0.410

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.
Files changed (109) hide show
  1. package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
  2. package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
  3. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +82 -0
  4. package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +55 -11
  6. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +13 -4
  7. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +27 -23
  8. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +277 -0
  9. package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
  10. package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +157 -0
  11. package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
  12. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +12 -2
  13. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +21 -9
  14. package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
  15. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +13 -4
  16. package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
  17. package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
  18. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +31 -14
  19. package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
  20. package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
  21. package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
  22. package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
  23. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -4
  24. package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
  25. package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
  26. package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +72 -0
  27. package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
  28. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +175 -3
  29. package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
  30. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  31. package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
  32. package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
  33. package/esm2022/lib/components/organisms/menu/menu.component.mjs +197 -0
  34. package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
  35. package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
  36. package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
  37. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +156 -0
  38. package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
  39. package/esm2022/lib/components/templates/page-template/page-template.component.mjs +181 -0
  40. package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
  41. package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +195 -0
  42. package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
  43. package/esm2022/lib/components/types.mjs +1 -1
  44. package/esm2022/lib/services/firebase/config.mjs +103 -0
  45. package/esm2022/lib/services/firebase/firebase.service.mjs +285 -0
  46. package/esm2022/lib/services/firebase/firestore-collection.mjs +266 -0
  47. package/esm2022/lib/services/firebase/firestore.service.mjs +508 -0
  48. package/esm2022/lib/services/firebase/index.mjs +46 -0
  49. package/esm2022/lib/services/firebase/messaging.service.mjs +503 -0
  50. package/esm2022/lib/services/firebase/storage.service.mjs +421 -0
  51. package/esm2022/lib/services/firebase/types.mjs +8 -0
  52. package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
  53. package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
  54. package/esm2022/public-api.mjs +33 -1
  55. package/fesm2022/valtech-components.mjs +5821 -868
  56. package/fesm2022/valtech-components.mjs.map +1 -1
  57. package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
  58. package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
  59. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +39 -0
  60. package/lib/components/atoms/rights-footer/types.d.ts +13 -0
  61. package/lib/components/molecules/check-input/check-input.component.d.ts +17 -2
  62. package/lib/components/molecules/email-input/email-input.component.d.ts +1 -2
  63. package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
  64. package/lib/components/molecules/footer-links/types.d.ts +37 -0
  65. package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +48 -0
  66. package/lib/components/molecules/links-accordion/types.d.ts +33 -0
  67. package/lib/components/molecules/password-input/password-input.component.d.ts +1 -1
  68. package/lib/components/molecules/prompter/prompter.component.d.ts +8 -1
  69. package/lib/components/molecules/prompter/types.d.ts +7 -1
  70. package/lib/components/molecules/radio-input/radio-input.component.d.ts +1 -2
  71. package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
  72. package/lib/components/molecules/recap-card/types.d.ts +30 -0
  73. package/lib/components/molecules/select-input/select-input.component.d.ts +6 -1
  74. package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
  75. package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
  76. package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
  77. package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
  78. package/lib/components/molecules/text-input/text-input.component.d.ts +13 -4
  79. package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
  80. package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
  81. package/lib/components/organisms/company-footer/company-footer.component.d.ts +32 -0
  82. package/lib/components/organisms/company-footer/types.d.ts +15 -0
  83. package/lib/components/organisms/data-table/data-table.component.d.ts +1 -1
  84. package/lib/components/organisms/data-table/types.d.ts +6 -0
  85. package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
  86. package/lib/components/organisms/fun-header/types.d.ts +28 -0
  87. package/lib/components/organisms/menu/menu.component.d.ts +39 -0
  88. package/lib/components/organisms/menu/types.d.ts +23 -0
  89. package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
  90. package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
  91. package/lib/components/templates/page-content/page-content.component.d.ts +55 -0
  92. package/lib/components/templates/page-content/types.d.ts +14 -0
  93. package/lib/components/templates/page-template/page-template.component.d.ts +49 -0
  94. package/lib/components/templates/page-template/types.d.ts +17 -0
  95. package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +61 -0
  96. package/lib/components/templates/page-wrapper/types.d.ts +19 -0
  97. package/lib/components/types.d.ts +14 -0
  98. package/lib/services/firebase/config.d.ts +49 -0
  99. package/lib/services/firebase/firebase.service.d.ts +140 -0
  100. package/lib/services/firebase/firestore-collection.d.ts +195 -0
  101. package/lib/services/firebase/firestore.service.d.ts +303 -0
  102. package/lib/services/firebase/index.d.ts +38 -0
  103. package/lib/services/firebase/messaging.service.d.ts +254 -0
  104. package/lib/services/firebase/storage.service.d.ts +204 -0
  105. package/lib/services/firebase/types.d.ts +279 -0
  106. package/lib/services/firebase/utils/path-builder.d.ts +132 -0
  107. package/lib/services/firebase/utils/query-builder.d.ts +210 -0
  108. package/package.json +3 -1
  109. package/public-api.d.ts +31 -0
@@ -0,0 +1,254 @@
1
+ import { Observable } from 'rxjs';
2
+ import { NotificationAction, NotificationClickEvent, NotificationPayload, NotificationPermission } from './types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Estado interno del servicio de messaging
6
+ */
7
+ interface MessagingState {
8
+ token: string | null;
9
+ permission: NotificationPermission;
10
+ isSupported: boolean;
11
+ }
12
+ /**
13
+ * Servicio para Firebase Cloud Messaging (FCM).
14
+ *
15
+ * Permite recibir notificaciones push en la aplicación web.
16
+ * Requiere VAPID key configurada en ValtechFirebaseConfig.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * @Component({...})
21
+ * export class NotificationComponent {
22
+ * private messaging = inject(MessagingService);
23
+ *
24
+ * token = signal<string | null>(null);
25
+ *
26
+ * async enableNotifications() {
27
+ * // Solicitar permiso y obtener token
28
+ * const token = await this.messaging.requestPermission();
29
+ *
30
+ * if (token) {
31
+ * this.token.set(token);
32
+ * // Enviar token a tu backend para almacenarlo
33
+ * await this.backend.registerDeviceToken(token);
34
+ * }
35
+ * }
36
+ *
37
+ * // Escuchar mensajes en foreground
38
+ * messages$ = this.messaging.onMessage();
39
+ * }
40
+ * ```
41
+ */
42
+ export declare class MessagingService {
43
+ private messaging;
44
+ private config;
45
+ private platformId;
46
+ private ngZone;
47
+ private messageSubject;
48
+ private notificationClickSubject;
49
+ private stateSubject;
50
+ private unsubscribeOnMessage?;
51
+ constructor();
52
+ /**
53
+ * Inicializa el servicio de messaging
54
+ */
55
+ private initializeMessaging;
56
+ /**
57
+ * Configura listener para mensajes del Service Worker.
58
+ * Recibe eventos cuando el usuario hace click en una notificación background.
59
+ */
60
+ private setupServiceWorkerListener;
61
+ /**
62
+ * Verifica si FCM está soportado en el navegador actual
63
+ */
64
+ private checkSupport;
65
+ /**
66
+ * Solicita permiso de notificaciones y obtiene el token FCM.
67
+ *
68
+ * @returns Token FCM si se otorgó permiso, null si se denegó
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const token = await messaging.requestPermission();
73
+ * if (token) {
74
+ * console.log('Token FCM:', token);
75
+ * // Enviar a backend
76
+ * } else {
77
+ * console.log('Permiso denegado o no soportado');
78
+ * }
79
+ * ```
80
+ */
81
+ requestPermission(): Promise<string | null>;
82
+ /**
83
+ * Obtiene el token FCM actual (sin solicitar permiso).
84
+ *
85
+ * @returns Token FCM si está disponible, null si no
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const token = await messaging.getToken();
90
+ * ```
91
+ */
92
+ getToken(): Promise<string | null>;
93
+ /**
94
+ * Elimina el token FCM actual (unsubscribe de notificaciones).
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * await messaging.deleteToken();
99
+ * console.log('Token eliminado, no recibirá más notificaciones');
100
+ * ```
101
+ */
102
+ deleteToken(): Promise<void>;
103
+ /**
104
+ * Observable de mensajes recibidos en foreground.
105
+ *
106
+ * IMPORTANTE: Los mensajes en background son manejados por el Service Worker.
107
+ *
108
+ * @returns Observable que emite cuando llega un mensaje en foreground
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * messaging.onMessage().subscribe(payload => {
113
+ * console.log('Mensaje recibido:', payload);
114
+ * // Mostrar notificación custom o actualizar UI
115
+ * });
116
+ * ```
117
+ */
118
+ onMessage(): Observable<NotificationPayload>;
119
+ /**
120
+ * Configura el listener de mensajes en foreground
121
+ */
122
+ private setupMessageListener;
123
+ /**
124
+ * Obtiene el estado actual del permiso de notificaciones.
125
+ *
126
+ * @returns 'granted' | 'denied' | 'default'
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const permission = messaging.getPermissionState();
131
+ * if (permission === 'granted') {
132
+ * // Ya tiene permiso
133
+ * } else if (permission === 'default') {
134
+ * // Puede solicitar permiso
135
+ * } else {
136
+ * // Denegado, debe habilitar manualmente
137
+ * }
138
+ * ```
139
+ */
140
+ getPermissionState(): NotificationPermission;
141
+ /**
142
+ * Verifica si FCM está soportado en el navegador actual.
143
+ *
144
+ * @returns true si FCM está soportado
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * if (await messaging.isSupported()) {
149
+ * // Puede usar notificaciones push
150
+ * } else {
151
+ * // Navegador no soporta o no tiene Service Worker
152
+ * }
153
+ * ```
154
+ */
155
+ isSupported(): Promise<boolean>;
156
+ /**
157
+ * Obtiene el token actual sin hacer request.
158
+ *
159
+ * @returns Token almacenado o null
160
+ */
161
+ get currentToken(): string | null;
162
+ /**
163
+ * Observable del estado completo del servicio de messaging.
164
+ */
165
+ get state$(): Observable<MessagingState>;
166
+ /**
167
+ * Verifica si el usuario ya otorgó permiso de notificaciones.
168
+ */
169
+ get hasPermission(): boolean;
170
+ /**
171
+ * Observable de clicks en notificaciones.
172
+ *
173
+ * Emite cuando el usuario hace click en una notificación (foreground o background).
174
+ * Usa este observable para navegar a la página correspondiente.
175
+ *
176
+ * @returns Observable que emite NotificationClickEvent
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * @Component({...})
181
+ * export class AppComponent {
182
+ * private messaging = inject(MessagingService);
183
+ * private router = inject(Router);
184
+ *
185
+ * constructor() {
186
+ * this.messaging.onNotificationClick().subscribe(event => {
187
+ * if (event.action.route) {
188
+ * this.router.navigate([event.action.route], {
189
+ * queryParams: event.action.queryParams
190
+ * });
191
+ * }
192
+ * });
193
+ * }
194
+ * }
195
+ * ```
196
+ */
197
+ onNotificationClick(): Observable<NotificationClickEvent>;
198
+ /**
199
+ * Extrae la acción de navegación de los datos de una notificación.
200
+ *
201
+ * Busca campos específicos en el payload de datos:
202
+ * - `route`: Ruta interna de la app (ej: '/orders/123')
203
+ * - `url`: URL externa (ej: 'https://example.com')
204
+ * - `action_type`: Tipo de acción personalizada
205
+ * - Campos con prefijo `action_`: Datos adicionales
206
+ *
207
+ * @param data - Datos del payload de la notificación
208
+ * @returns Acción de navegación extraída
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * // Payload desde el backend:
213
+ * // { route: '/orders/123', action_type: 'view_order', action_orderId: '123' }
214
+ *
215
+ * const action = messaging.extractActionFromData(notification.data);
216
+ * // { route: '/orders/123', actionType: 'view_order', actionData: { orderId: '123' } }
217
+ * ```
218
+ */
219
+ extractActionFromData(data?: Record<string, string>): NotificationAction;
220
+ /**
221
+ * Emite manualmente un evento de click en notificación.
222
+ *
223
+ * Útil para manejar clicks en notificaciones foreground donde
224
+ * la app decide mostrar un banner custom.
225
+ *
226
+ * @param notification - Payload de la notificación
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * messaging.onMessage().subscribe(notification => {
231
+ * // Mostrar banner custom
232
+ * this.showBanner(notification, () => {
233
+ * // Usuario hizo click en el banner
234
+ * messaging.handleNotificationClick(notification);
235
+ * });
236
+ * });
237
+ * ```
238
+ */
239
+ handleNotificationClick(notification: NotificationPayload): void;
240
+ /**
241
+ * Verifica si una notificación tiene acción de navegación.
242
+ *
243
+ * @param data - Datos del payload
244
+ * @returns true si tiene route o url
245
+ */
246
+ hasNavigationAction(data?: Record<string, string>): boolean;
247
+ /**
248
+ * Parsea un query string en un objeto.
249
+ */
250
+ private parseQueryString;
251
+ static ɵfac: i0.ɵɵFactoryDeclaration<MessagingService, never>;
252
+ static ɵprov: i0.ɵɵInjectableDeclaration<MessagingService>;
253
+ }
254
+ export {};
@@ -0,0 +1,204 @@
1
+ import { Observable } from 'rxjs';
2
+ import { StorageListResult, StorageMetadata, UploadProgress, UploadResult } from './types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Servicio para Firebase Storage.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * @Component({...})
10
+ * export class FileUploadComponent {
11
+ * private storage = inject(StorageService);
12
+ *
13
+ * uploadProgress = signal<number>(0);
14
+ * downloadUrl = signal<string | null>(null);
15
+ *
16
+ * async onFileSelected(event: Event) {
17
+ * const file = (event.target as HTMLInputElement).files?.[0];
18
+ * if (!file) return;
19
+ *
20
+ * // Upload con progreso
21
+ * this.storage.upload(`uploads/${file.name}`, file).subscribe({
22
+ * next: (progress) => this.uploadProgress.set(progress.percentage),
23
+ * complete: async () => {
24
+ * const url = await this.storage.getDownloadUrl(`uploads/${file.name}`);
25
+ * this.downloadUrl.set(url);
26
+ * }
27
+ * });
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ export declare class StorageService {
33
+ private storage;
34
+ /**
35
+ * Sube un archivo con tracking de progreso.
36
+ *
37
+ * @param path - Ruta en Storage donde guardar el archivo
38
+ * @param file - Archivo a subir (File o Blob)
39
+ * @param metadata - Metadata opcional (contentType, customMetadata)
40
+ * @returns Observable que emite el progreso y completa cuando termina
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * // Upload básico
45
+ * storage.upload('images/photo.jpg', file).subscribe({
46
+ * next: (progress) => console.log(`${progress.percentage}%`),
47
+ * complete: () => console.log('Upload completado')
48
+ * });
49
+ *
50
+ * // Con metadata
51
+ * storage.upload('docs/report.pdf', file, {
52
+ * contentType: 'application/pdf',
53
+ * customMetadata: { uploadedBy: 'user123' }
54
+ * }).subscribe(...);
55
+ * ```
56
+ */
57
+ upload(path: string, file: File | Blob, metadata?: StorageMetadata): Observable<UploadProgress>;
58
+ /**
59
+ * Sube un archivo y retorna la URL de descarga al completar.
60
+ *
61
+ * @param path - Ruta en Storage
62
+ * @param file - Archivo a subir
63
+ * @param metadata - Metadata opcional
64
+ * @returns Resultado del upload con URL de descarga
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const result = await storage.uploadAndGetUrl('avatars/user123.jpg', file);
69
+ * console.log('URL:', result.downloadUrl);
70
+ * ```
71
+ */
72
+ uploadAndGetUrl(path: string, file: File | Blob, metadata?: StorageMetadata): Promise<UploadResult>;
73
+ /**
74
+ * Sube un archivo desde una Data URL (base64).
75
+ *
76
+ * @param path - Ruta en Storage
77
+ * @param dataUrl - Data URL (ej: 'data:image/png;base64,...')
78
+ * @param metadata - Metadata opcional
79
+ * @returns Resultado del upload
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * // Desde canvas
84
+ * const dataUrl = canvas.toDataURL('image/png');
85
+ * const result = await storage.uploadFromDataUrl('images/drawing.png', dataUrl);
86
+ * ```
87
+ */
88
+ uploadFromDataUrl(path: string, dataUrl: string, metadata?: StorageMetadata): Promise<UploadResult>;
89
+ /**
90
+ * Obtiene la URL de descarga de un archivo.
91
+ *
92
+ * @param path - Ruta del archivo en Storage
93
+ * @returns URL de descarga
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const url = await storage.getDownloadUrl('images/photo.jpg');
98
+ * // Usar en <img [src]="url">
99
+ * ```
100
+ */
101
+ getDownloadUrl(path: string): Promise<string>;
102
+ /**
103
+ * Obtiene la metadata de un archivo.
104
+ *
105
+ * @param path - Ruta del archivo
106
+ * @returns Metadata del archivo
107
+ */
108
+ getMetadata(path: string): Promise<StorageMetadata & {
109
+ size: number;
110
+ name: string;
111
+ }>;
112
+ /**
113
+ * Elimina un archivo.
114
+ *
115
+ * @param path - Ruta del archivo a eliminar
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * await storage.delete('images/old-photo.jpg');
120
+ * ```
121
+ */
122
+ delete(path: string): Promise<void>;
123
+ /**
124
+ * Elimina múltiples archivos.
125
+ *
126
+ * @param paths - Array de rutas a eliminar
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * await storage.deleteMultiple([
131
+ * 'images/photo1.jpg',
132
+ * 'images/photo2.jpg'
133
+ * ]);
134
+ * ```
135
+ */
136
+ deleteMultiple(paths: string[]): Promise<void>;
137
+ /**
138
+ * Lista archivos en un directorio.
139
+ *
140
+ * @param path - Ruta del directorio
141
+ * @returns Lista de rutas de archivos
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * const result = await storage.list('images/');
146
+ * console.log(result.items); // ['images/photo1.jpg', 'images/photo2.jpg']
147
+ * ```
148
+ */
149
+ list(path: string): Promise<StorageListResult>;
150
+ /**
151
+ * Genera un nombre de archivo único con timestamp.
152
+ *
153
+ * @param originalName - Nombre original del archivo
154
+ * @param prefix - Prefijo opcional
155
+ * @returns Nombre único
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const uniqueName = storage.generateFileName('photo.jpg', 'user123');
160
+ * // => 'user123_1703091234567_photo.jpg'
161
+ * ```
162
+ */
163
+ generateFileName(originalName: string, prefix?: string): string;
164
+ /**
165
+ * Genera una ruta única para un archivo.
166
+ *
167
+ * @param directory - Directorio base
168
+ * @param originalName - Nombre original
169
+ * @param prefix - Prefijo opcional
170
+ * @returns Ruta completa única
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const path = storage.generatePath('uploads', 'photo.jpg', 'user123');
175
+ * // => 'uploads/user123_1703091234567_photo.jpg'
176
+ * ```
177
+ */
178
+ generatePath(directory: string, originalName: string, prefix?: string): string;
179
+ /**
180
+ * Obtiene la extensión de un archivo.
181
+ *
182
+ * @param filename - Nombre del archivo
183
+ * @returns Extensión (sin el punto)
184
+ */
185
+ getExtension(filename: string): string;
186
+ /**
187
+ * Verifica si un archivo es una imagen basándose en su extensión.
188
+ */
189
+ isImage(filename: string): boolean;
190
+ /**
191
+ * Verifica si un archivo es un documento.
192
+ */
193
+ isDocument(filename: string): boolean;
194
+ /**
195
+ * Mapea el estado de la tarea de upload
196
+ */
197
+ private mapTaskState;
198
+ /**
199
+ * Convierte errores de Storage a mensajes en español
200
+ */
201
+ private getErrorMessage;
202
+ static ɵfac: i0.ɵɵFactoryDeclaration<StorageService, never>;
203
+ static ɵprov: i0.ɵɵInjectableDeclaration<StorageService>;
204
+ }