@flusys/ng-storage 1.1.1-beta → 1.2.0-rc.1

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 (29) hide show
  1. package/README.md +36 -623
  2. package/fesm2022/flusys-ng-storage-file-manager-form.component-DhqZmpuX.mjs +671 -0
  3. package/fesm2022/flusys-ng-storage-file-manager-form.component-DhqZmpuX.mjs.map +1 -0
  4. package/fesm2022/flusys-ng-storage-file-manager-list.component-nZDj1UfS.mjs +464 -0
  5. package/fesm2022/flusys-ng-storage-file-manager-list.component-nZDj1UfS.mjs.map +1 -0
  6. package/fesm2022/flusys-ng-storage-folder-form.component-Bru9NQyr.mjs +218 -0
  7. package/fesm2022/flusys-ng-storage-folder-form.component-Bru9NQyr.mjs.map +1 -0
  8. package/fesm2022/flusys-ng-storage-folder-list.component-fuJMWYWZ.mjs +263 -0
  9. package/fesm2022/flusys-ng-storage-folder-list.component-fuJMWYWZ.mjs.map +1 -0
  10. package/fesm2022/flusys-ng-storage-storage-config-form.component-Da-pWR7d.mjs +891 -0
  11. package/fesm2022/flusys-ng-storage-storage-config-form.component-Da-pWR7d.mjs.map +1 -0
  12. package/fesm2022/flusys-ng-storage-storage-config-list.component-D59X4sae.mjs +288 -0
  13. package/fesm2022/flusys-ng-storage-storage-config-list.component-D59X4sae.mjs.map +1 -0
  14. package/fesm2022/flusys-ng-storage.mjs +679 -321
  15. package/fesm2022/flusys-ng-storage.mjs.map +1 -1
  16. package/package.json +11 -10
  17. package/types/flusys-ng-storage.d.ts +179 -178
  18. package/fesm2022/flusys-ng-storage-file-manager-form.component-H3OZS0SW.mjs +0 -715
  19. package/fesm2022/flusys-ng-storage-file-manager-form.component-H3OZS0SW.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-storage-file-manager-list.component-4pb6TafD.mjs +0 -475
  21. package/fesm2022/flusys-ng-storage-file-manager-list.component-4pb6TafD.mjs.map +0 -1
  22. package/fesm2022/flusys-ng-storage-folder-form.component-DQ0QY7P0.mjs +0 -253
  23. package/fesm2022/flusys-ng-storage-folder-form.component-DQ0QY7P0.mjs.map +0 -1
  24. package/fesm2022/flusys-ng-storage-folder-list.component-D-oMaEgl.mjs +0 -267
  25. package/fesm2022/flusys-ng-storage-folder-list.component-D-oMaEgl.mjs.map +0 -1
  26. package/fesm2022/flusys-ng-storage-storage-config-form.component-CjIAxfHC.mjs +0 -546
  27. package/fesm2022/flusys-ng-storage-storage-config-form.component-CjIAxfHC.mjs.map +0 -1
  28. package/fesm2022/flusys-ng-storage-storage-config-list.component-jHk8O9Mx.mjs +0 -328
  29. package/fesm2022/flusys-ng-storage-storage-config-list.component-jHk8O9Mx.mjs.map +0 -1
@@ -1,9 +1,14 @@
1
- import { IBaseEntity, IProfileUploadProvider, IProfileUploadOptions, ISingleResponse, IProfileUploadResult, ApiResourceService, IListResponse } from '@flusys/ng-shared';
2
- import { Observable } from 'rxjs';
1
+ import { IBaseEntity, TranslateService, IFileProvider, IFileSelectFilter, IListResponse, IFileBasicInfo, IFileUploadOptions, ISingleResponse, IUploadedFile, ISelectFilter, IFolderBasicInfo, IStorageConfigBasicInfo, ApiResourceService, IBulkResponse, RouterTabItem } from '@flusys/ng-shared';
3
2
  import * as i0 from '@angular/core';
4
- import { Provider } from '@angular/core';
3
+ import { DestroyRef, Provider } from '@angular/core';
4
+ import * as _flusys_ng_layout from '@flusys/ng-layout';
5
+ import * as _flusys_ng_core from '@flusys/ng-core';
5
6
  import { BaseApiService } from '@flusys/ng-core';
6
- import { Routes } from '@angular/router';
7
+ import { Router, Routes } from '@angular/router';
8
+ import { MessageService, ConfirmationService } from '@flusys/ng-ui';
9
+ import { Observable } from 'rxjs';
10
+
11
+ declare const STORAGE_MESSAGES: Record<string, string>;
7
12
 
8
13
  /**
9
14
  * File Location Enum
@@ -29,10 +34,7 @@ declare enum ImageFormat {
29
34
  /**
30
35
  * File Manager Interface (matches backend IFileManager)
31
36
  */
32
- interface IFileManager {
33
- id: string;
34
- createdAt: Date;
35
- updatedAt: Date;
37
+ interface IFileManager extends IBaseEntity {
36
38
  name: string;
37
39
  contentType: string;
38
40
  size: string;
@@ -41,7 +43,6 @@ interface IFileManager {
41
43
  location: FileLocationEnum;
42
44
  storageConfigId: string | null;
43
45
  providerName?: string;
44
- expiresAt: Date | null;
45
46
  isPrivate: boolean;
46
47
  companyId?: string;
47
48
  folderId?: string | null;
@@ -82,71 +83,41 @@ interface IFilesResponseDto {
82
83
  name: string;
83
84
  contentType: string;
84
85
  url: string;
86
+ location?: string;
87
+ storageConfigId?: string;
88
+ providerName?: string;
85
89
  }
86
90
 
87
- /**
88
- * Folder Interface
89
- * Matches backend IFolder and FolderResponseDto
90
- */
91
91
  interface IFolder extends IBaseEntity {
92
92
  name: string;
93
93
  slug: string;
94
94
  companyId?: string | null;
95
95
  }
96
- /**
97
- * Create Folder DTO
98
- * POST /storage/folder/insert
99
- */
100
96
  interface ICreateFolderDto {
101
97
  name: string;
102
98
  }
103
- /**
104
- * Update Folder DTO
105
- * POST /storage/folder/update
106
- */
107
- interface IUpdateFolderDto {
99
+ interface IUpdateFolderDto extends Partial<ICreateFolderDto> {
108
100
  id: string;
109
- name?: string;
110
101
  }
111
102
 
112
- /**
113
- * Storage Config Interface
114
- * Matches backend IStorageConfig and StorageConfigResponseDto
115
- */
116
103
  interface IStorageConfig extends IBaseEntity {
117
104
  name: string;
118
105
  storage: FileLocationEnum;
119
- config: Record<string, any>;
106
+ config: Record<string, unknown>;
120
107
  isActive: boolean;
121
108
  isDefault: boolean;
122
109
  companyId?: string | null;
123
110
  }
124
- /**
125
- * Create Storage Config DTO
126
- * POST /storage/storage-config/insert
127
- */
128
111
  interface ICreateStorageConfigDto {
129
112
  name: string;
130
113
  storage: FileLocationEnum;
131
- config: Record<string, any>;
114
+ config: Record<string, unknown>;
132
115
  isActive?: boolean;
133
116
  isDefault?: boolean;
134
117
  }
135
- /**
136
- * Update Storage Config DTO
137
- * POST /storage/storage-config/update
138
- */
139
- interface IUpdateStorageConfigDto {
118
+ interface IUpdateStorageConfigDto extends Partial<ICreateStorageConfigDto> {
140
119
  id: string;
141
- name?: string;
142
- storage?: FileLocationEnum;
143
- config?: Record<string, any>;
144
- isActive?: boolean;
145
- isDefault?: boolean;
146
120
  }
147
- /**
148
- * AWS S3 Configuration
149
- */
150
121
  interface IAwsS3Config {
151
122
  region: string;
152
123
  bucket: string;
@@ -154,17 +125,11 @@ interface IAwsS3Config {
154
125
  secretAccessKey: string;
155
126
  endpoint?: string;
156
127
  }
157
- /**
158
- * Azure Blob Storage Configuration
159
- */
160
128
  interface IAzureBlobConfig {
161
129
  accountName: string;
162
130
  accountKey: string;
163
131
  containerName: string;
164
132
  }
165
- /**
166
- * SFTP Configuration
167
- */
168
133
  interface ISftpConfig {
169
134
  host: string;
170
135
  port: number;
@@ -173,9 +138,6 @@ interface ISftpConfig {
173
138
  privateKey?: string;
174
139
  basePath: string;
175
140
  }
176
- /**
177
- * Local Storage Configuration
178
- */
179
141
  interface ILocalStorageConfig {
180
142
  basePath: string;
181
143
  }
@@ -200,29 +162,141 @@ interface IUploadedFileInfo {
200
162
  key: string;
201
163
  size: number;
202
164
  contentType: string;
165
+ location?: string;
166
+ storageConfigId?: string;
203
167
  }
204
168
 
205
169
  /**
206
- * Profile Upload Provider Adapter
207
- *
208
- * Implements IProfileUploadProvider interface for ng-auth profile page.
209
- * Uses UploadService.uploadAndRegister() to upload files and register in file manager.
210
- *
211
- * @example
212
- * // In app.config.ts
213
- * providers: [
214
- * ...provideStorageProviders(),
215
- * ]
170
+ * Provider label translation keys
216
171
  */
217
- declare class ProfileUploadProviderAdapter implements IProfileUploadProvider {
172
+ declare const PROVIDER_LABEL_KEYS: Record<FileLocationEnum, string>;
173
+ /**
174
+ * Get provider label translation key
175
+ */
176
+ declare function getProviderLabelKey(storage: FileLocationEnum | string): string;
177
+ /**
178
+ * Get provider icon class
179
+ */
180
+ declare function getProviderIcon(storage: FileLocationEnum | string): string;
181
+ /**
182
+ * Get provider severity for f-tag
183
+ */
184
+ declare function getProviderSeverity(storage: FileLocationEnum | string): 'success' | 'info' | 'warn' | 'danger' | 'secondary' | 'contrast';
185
+ /**
186
+ * Get file icon based on content type
187
+ */
188
+ declare function getFileIcon(contentType: string): string;
189
+ /** File size unit keys for translation */
190
+ declare const FILE_SIZE_UNIT_KEYS: readonly ["storage.size.bytes", "shared.size.kb", "shared.size.mb", "storage.size.gb"];
191
+ /**
192
+ * Format file size from bytes to human readable format
193
+ * Returns an object with value and unitKey for translation
194
+ */
195
+ declare function formatFileSizeWithKey(bytes: number): {
196
+ value: string;
197
+ unitKey: string;
198
+ };
199
+ /**
200
+ * Format file size from bytes to human readable string
201
+ * @deprecated Use formatFileSizeWithKey for localization support
202
+ */
203
+ declare function formatFileSize(bytes: number): string;
204
+ /**
205
+ * Storage provider options for dropdown selects
206
+ * Labels are translation keys - components should translate them
207
+ */
208
+ declare const STORAGE_PROVIDER_OPTIONS: readonly [{
209
+ readonly labelKey: "storage.aws.title";
210
+ readonly value: FileLocationEnum.AWS;
211
+ }, {
212
+ readonly labelKey: "storage.azure.title";
213
+ readonly value: FileLocationEnum.AZURE;
214
+ }, {
215
+ readonly labelKey: "storage.sftp.title";
216
+ readonly value: FileLocationEnum.SFTP;
217
+ }, {
218
+ readonly labelKey: "storage.local.title";
219
+ readonly value: FileLocationEnum.LOCAL;
220
+ }];
221
+ type StorageProviderOption = (typeof STORAGE_PROVIDER_OPTIONS)[number];
222
+
223
+ declare abstract class BaseStoragePage {
224
+ protected readonly router: Router;
225
+ protected readonly messageService: MessageService;
226
+ protected readonly appConfig: _flusys_ng_core.IAppConfig;
227
+ protected readonly companyContext: _flusys_ng_layout.ILayoutAuthState;
228
+ protected readonly translateAdapter: TranslateService;
229
+ readonly isLoading: i0.WritableSignal<boolean>;
230
+ readonly showCompanyInfo: i0.Signal<boolean>;
231
+ readonly currentCompanyName: i0.Signal<string>;
232
+ protected showSuccess(detail: string, summaryKey?: string): void;
233
+ protected showError(detail: string, summaryKey?: string): void;
234
+ protected navigateTo(path: string[]): void;
235
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseStoragePage, never>;
236
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseStoragePage, never, never, {}, {}, never, never, true, never>;
237
+ }
238
+ declare abstract class BaseStorageListPage<T> {
239
+ protected readonly router: Router;
240
+ protected readonly messageService: MessageService;
241
+ protected readonly appConfig: _flusys_ng_core.IAppConfig;
242
+ protected readonly confirmationService: ConfirmationService;
243
+ protected readonly destroyRef: DestroyRef;
244
+ protected readonly translateAdapter: TranslateService;
245
+ protected readonly companyContext: _flusys_ng_layout.ILayoutAuthState;
246
+ readonly items: i0.WritableSignal<T[]>;
247
+ readonly isLoading: i0.WritableSignal<boolean>;
248
+ readonly total: i0.WritableSignal<number>;
249
+ readonly pageSize: i0.WritableSignal<number>;
250
+ readonly first: i0.WritableSignal<number>;
251
+ readonly currentPage: i0.Signal<number>;
252
+ readonly showCompanyInfo: i0.Signal<boolean>;
253
+ readonly totalRecords: i0.WritableSignal<number>;
254
+ readonly currentCompanyName: i0.Signal<string>;
255
+ abstract loadData(): Promise<void>;
256
+ abstract getResourceRoute(): string;
257
+ getDeleteConfirmMessage(item: T): string;
258
+ onCreate(): void;
259
+ onEdit(id: string): void;
260
+ onPageChange(event: {
261
+ first?: number | null;
262
+ rows?: number | null;
263
+ }): void;
264
+ protected getPaginationParams(): {
265
+ currentPage: number;
266
+ pageSize: number;
267
+ };
268
+ protected showSuccess(detail: string, summary?: string): void;
269
+ protected showError(detail: string, summary?: string): void;
270
+ protected showInfo(detail: string, summary?: string): void;
271
+ protected showWarn(detail: string, summary?: string): void;
272
+ onDelete(item: T, idGetter: (item: T) => string, deleteApiCall: (id: string) => Observable<unknown> | Promise<unknown>, options?: {
273
+ header?: string;
274
+ }): void;
275
+ onDeleteAsync(item: T, idGetter: (item: T) => string, deleteApiCall: (id: string) => Promise<unknown>, options?: {
276
+ header?: string;
277
+ }): Promise<void>;
278
+ protected navigateTo(path: string[]): void;
279
+ protected t(key: string, variables?: Record<string, string | number>): string;
280
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseStorageListPage<any>, never>;
281
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseStorageListPage<any>, never, never, {}, {}, never, never, true, never>;
282
+ }
283
+
284
+ declare class FileProviderAdapter implements IFileProvider {
285
+ private readonly fileManagerApi;
218
286
  private readonly uploadService;
219
- /**
220
- * Upload profile picture and register in file manager
221
- * Returns file manager ID (UUID) for storing in user.profilePictureId
222
- */
223
- uploadProfilePicture(file: File, options?: IProfileUploadOptions): Observable<ISingleResponse<IProfileUploadResult>>;
224
- static ɵfac: i0.ɵɵFactoryDeclaration<ProfileUploadProviderAdapter, never>;
225
- static ɵprov: i0.ɵɵInjectableDeclaration<ProfileUploadProviderAdapter>;
287
+ private readonly folderApi;
288
+ private readonly storageConfigApi;
289
+ loadFiles(filter: IFileSelectFilter): Observable<IListResponse<IFileBasicInfo>>;
290
+ uploadFile(file: File, options?: IFileUploadOptions): Observable<ISingleResponse<IUploadedFile>>;
291
+ uploadMultipleFiles(files: File[], options?: IFileUploadOptions): Observable<ISingleResponse<IUploadedFile[]>>;
292
+ getFileUrls(fileIds: string[]): Observable<ISingleResponse<IFileBasicInfo[]>>;
293
+ loadFolders(filter: ISelectFilter): Observable<IListResponse<IFolderBasicInfo>>;
294
+ loadStorageConfigs(filter: ISelectFilter): Observable<IListResponse<IStorageConfigBasicInfo>>;
295
+ private buildFileFilter;
296
+ private mapToFileBasicInfo;
297
+ private mapToUploadedFile;
298
+ static ɵfac: i0.ɵɵFactoryDeclaration<FileProviderAdapter, never>;
299
+ static ɵprov: i0.ɵɵInjectableDeclaration<FileProviderAdapter>;
226
300
  }
227
301
 
228
302
  /**
@@ -243,38 +317,11 @@ declare class ProfileUploadProviderAdapter implements IProfileUploadProvider {
243
317
  */
244
318
  declare function provideStorageProviders(): Provider[];
245
319
 
246
- /**
247
- * File Manager API Service
248
- * Handles file metadata CRUD operations
249
- * Endpoint: POST /storage/file-manager/*
250
- *
251
- * Note: Company feature enabled - all queries automatically scoped to user's company
252
- */
253
320
  declare class FileManagerApiService extends ApiResourceService<IUpdateFileManagerDto, IFileManager> {
254
321
  constructor();
255
- /**
256
- * Get multiple files with valid URLs
257
- * POST /storage/file-manager/get-files
258
- * Regenerates presigned URLs if expired
259
- */
260
322
  getFiles(fileIds: string[]): Observable<ISingleResponse<IFilesResponseDto[]>>;
261
- /**
262
- * Get files by folder
263
- * POST /storage/file-manager/get-all
264
- * Filtered by folder ID and company (if enabled)
265
- */
266
- getFilesByFolder(folderId: number | null, page?: number, limit?: number): Observable<IListResponse<IFileManager>>;
267
- /**
268
- * Get private files (requires permission)
269
- * POST /storage/file-manager/get-all
270
- * Filtered by isPrivate and user permission 'storage.file.viewPrivate'
271
- */
272
- getPrivateFiles(page?: number, limit?: number): Observable<IListResponse<IFileManager>>;
273
- /**
274
- * Create new file manager record
275
- * POST /storage/file-manager/insert
276
- */
277
- create(dto: ICreateFileManagerDto): Observable<ISingleResponse<IFileManager>>;
323
+ createFile(dto: ICreateFileManagerDto): Observable<ISingleResponse<IFileManager>>;
324
+ createFiles(dtos: ICreateFileManagerDto[]): Observable<IBulkResponse<IFileManager>>;
278
325
  static ɵfac: i0.ɵɵFactoryDeclaration<FileManagerApiService, never>;
279
326
  static ɵprov: i0.ɵɵInjectableDeclaration<FileManagerApiService>;
280
327
  }
@@ -286,7 +333,7 @@ declare class FileManagerApiService extends ApiResourceService<IUpdateFileManage
286
333
  *
287
334
  * Note: Company feature enabled - all queries automatically scoped to user's company
288
335
  */
289
- declare class FolderApiService extends ApiResourceService<IUpdateFolderDto, IFolder> {
336
+ declare class FolderApiService extends ApiResourceService<ICreateFolderDto | IUpdateFolderDto, IFolder> {
290
337
  constructor();
291
338
  static ɵfac: i0.ɵɵFactoryDeclaration<FolderApiService, never>;
292
339
  static ɵprov: i0.ɵɵInjectableDeclaration<FolderApiService>;
@@ -299,119 +346,73 @@ declare class FolderApiService extends ApiResourceService<IUpdateFolderDto, IFol
299
346
  *
300
347
  * Note: Company feature enabled - all queries automatically scoped to user's company
301
348
  */
302
- declare class StorageConfigApiService extends ApiResourceService<IUpdateStorageConfigDto, IStorageConfig> {
349
+ declare class StorageConfigApiService extends ApiResourceService<ICreateStorageConfigDto | IUpdateStorageConfigDto, IStorageConfig> {
303
350
  constructor();
304
351
  static ɵfac: i0.ɵɵFactoryDeclaration<StorageConfigApiService, never>;
305
352
  static ɵprov: i0.ɵɵInjectableDeclaration<StorageConfigApiService>;
306
353
  }
307
354
 
308
355
  /**
309
- * Upload Service
310
- * Handles file upload/delete operations
356
+ * Upload Service - File upload/delete operations
311
357
  * Endpoint: POST /storage/upload/*
312
- *
313
- * Features:
314
- * - Company-scoped uploads (if company feature enabled)
315
- * - Image compression
316
- * - Multiple storage providers
317
- * - File validation (size, type)
318
- * - Default storage config from environment (services.storage.defaultStorageConfigId)
319
358
  */
320
359
  declare class UploadService extends BaseApiService {
321
360
  private readonly fileManagerApi;
322
361
  constructor();
323
- /**
324
- * Get default storage config ID from app config
325
- * Used when no storageConfigId is provided in upload options
326
- */
362
+ /** Get default storage config ID from app config */
327
363
  getDefaultConfigId(): string | undefined;
328
- /**
329
- * Upload single file
330
- * POST /storage/upload/single-file?storageConfigId=x&folderPath=y
331
- *
332
- * @param file - File to upload
333
- * @param options - Upload options (storage config, compression, etc.)
334
- */
364
+ /** Upload single file - POST /storage/upload/single-file */
335
365
  uploadSingleFile(file: File, options?: IUploadOptionsDto): Observable<ISingleResponse<IUploadedFileInfo>>;
336
- /**
337
- * Upload multiple files (max 50)
338
- * POST /storage/upload/multiple-file?storageConfigId=x&folderPath=y
339
- *
340
- * @param files - Array of files to upload
341
- * @param options - Upload options
342
- */
366
+ /** Upload multiple files (max 50) - POST /storage/upload/multiple-file */
343
367
  uploadMultipleFiles(files: File[], options?: IUploadOptionsDto): Observable<ISingleResponse<IUploadedFileInfo[]>>;
344
- /**
345
- * Build query string from upload options
346
- * Uses default storageConfigId from app config if not provided in options
347
- */
348
- private buildQueryParams;
349
- /**
350
- * Delete single file
351
- * POST /storage/upload/delete-single-file
352
- *
353
- * @param key - File key/path to delete
354
- * @param storageConfigId - Optional storage config ID (uses default from config if not provided)
355
- */
368
+ /** Delete single file - POST /storage/upload/delete-single-file */
356
369
  deleteSingleFile(key: string, storageConfigId?: string): Observable<ISingleResponse<void>>;
357
- /**
358
- * Delete multiple files
359
- * POST /storage/upload/delete-multiple-file
360
- *
361
- * @param keys - Array of file keys/paths to delete
362
- * @param storageConfigId - Optional storage config ID (uses default from config if not provided)
363
- */
370
+ /** Delete multiple files - POST /storage/upload/delete-multiple-file */
364
371
  deleteMultipleFiles(keys: string[], storageConfigId?: string): Observable<ISingleResponse<void>>;
365
- /**
366
- * Get file download URL
367
- * GET /storage/upload/file/:filePath
368
- *
369
- * @param key - File key/path
370
- * @returns URL for direct file access
371
- */
372
+ /** Get file download URL - GET /storage/upload/file/:filePath */
372
373
  getFileUrl(key: string): string;
373
- /**
374
- * Upload file and register in file manager
375
- * Returns file manager ID (UUID) for storing in references like profilePictureId
376
- *
377
- * @param file - File to upload
378
- * @param options - Upload options (storage config, compression, etc.)
379
- * @returns Observable with file manager record (id is the UUID to store)
380
- */
374
+ /** Upload file and register in file manager - returns file manager ID (UUID) */
381
375
  uploadAndRegister(file: File, options?: IUploadOptionsDto & {
382
376
  isPrivate?: boolean;
383
377
  folderId?: string;
384
378
  }): Observable<ISingleResponse<IFileManager>>;
379
+ /** Upload multiple files and register in file manager - batch upload (2 API calls total) */
380
+ uploadAndRegisterMultiple(files: File[], options?: IUploadOptionsDto & {
381
+ isPrivate?: boolean;
382
+ folderId?: string;
383
+ }): Observable<ISingleResponse<IFileManager[]>>;
384
+ private resolveConfigId;
385
+ private toCreateFileDto;
386
+ private buildUploadUrl;
387
+ private buildQueryParams;
388
+ private buildDeleteBody;
385
389
  static ɵfac: i0.ɵɵFactoryDeclaration<UploadService, never>;
386
390
  static ɵprov: i0.ɵɵInjectableDeclaration<UploadService>;
387
391
  }
388
392
 
389
393
  /**
390
394
  * Storage Module Routes
391
- * All storage management routes: configs, files, folders
392
- *
393
- * All routes are protected by permission guards to prevent direct URL access.
395
+ * All routes protected by permission guards
394
396
  */
395
397
  declare const STORAGE_ROUTES: Routes;
396
398
 
397
- interface ITab {
398
- id: string;
399
- label: string;
400
- icon: string;
401
- route: string;
402
- }
403
399
  /**
404
400
  * Storage Container Component
405
401
  *
406
402
  * Main container for Storage module with tab navigation
407
403
  * Routes: Files | Folders | Configurations
404
+ * Tabs are filtered based on user permissions
408
405
  */
409
406
  declare class StorageContainerComponent {
410
- /** All available tabs */
411
- readonly tabs: ITab[];
407
+ private readonly permissionValidator;
408
+ private readonly translateService;
409
+ /** All available tabs with required permissions */
410
+ private readonly allTabs;
411
+ /** Visible tabs based on user permissions */
412
+ readonly visibleTabs: i0.Signal<RouterTabItem[]>;
412
413
  static ɵfac: i0.ɵɵFactoryDeclaration<StorageContainerComponent, never>;
413
414
  static ɵcmp: i0.ɵɵComponentDeclaration<StorageContainerComponent, "lib-storage-container", never, {}, {}, never, never, true, never>;
414
415
  }
415
416
 
416
- export { FileLocationEnum, FileManagerApiService, FolderApiService, ImageFormat, ProfileUploadProviderAdapter, STORAGE_ROUTES, StorageConfigApiService, StorageContainerComponent, UploadService, provideStorageProviders };
417
- export type { IAwsS3Config, IAzureBlobConfig, ICreateFileManagerDto, ICreateFolderDto, ICreateStorageConfigDto, IFileManager, IFilesResponseDto, IFolder, IGetFilesRequestDto, ILocalStorageConfig, ISftpConfig, IStorageConfig, IUpdateFileManagerDto, IUpdateFolderDto, IUpdateStorageConfigDto, IUploadOptionsDto, IUploadedFileInfo };
417
+ export { BaseStorageListPage, BaseStoragePage, FILE_SIZE_UNIT_KEYS, FileLocationEnum, FileManagerApiService, FileProviderAdapter, FolderApiService, ImageFormat, PROVIDER_LABEL_KEYS, STORAGE_MESSAGES, STORAGE_PROVIDER_OPTIONS, STORAGE_ROUTES, StorageConfigApiService, StorageContainerComponent, UploadService, formatFileSize, formatFileSizeWithKey, getFileIcon, getProviderIcon, getProviderLabelKey, getProviderSeverity, provideStorageProviders };
418
+ export type { IAwsS3Config, IAzureBlobConfig, ICreateFileManagerDto, ICreateFolderDto, ICreateStorageConfigDto, IFileManager, IFilesResponseDto, IFolder, IGetFilesRequestDto, ILocalStorageConfig, ISftpConfig, IStorageConfig, IUpdateFileManagerDto, IUpdateFolderDto, IUpdateStorageConfigDto, IUploadOptionsDto, IUploadedFileInfo, StorageProviderOption };