@flusys/ng-shared 8.1.4 → 9.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/messages.ts","../../../projects/ng-shared/constants/permissions.ts","../../../projects/ng-shared/interfaces/file-select.interface.ts","../../../projects/ng-shared/enums/icon-type.enum.ts","../../../projects/ng-shared/services/platform.service.ts","../../../projects/ng-shared/services/cookie.service.ts","../../../projects/ng-shared/services/file-url.service.ts","../../../projects/ng-shared/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.service.ts","../../../projects/ng-shared/services/translate.service.ts","../../../projects/ng-shared/services/favicon.service.ts","../../../projects/ng-shared/directives/edit-mode-element-changer.directive.ts","../../../projects/ng-shared/directives/has-permission.directive.ts","../../../projects/ng-shared/directives/is-empty-image.directive.ts","../../../projects/ng-shared/directives/prevent-default.directive.ts","../../../projects/ng-shared/pipes/translate.pipe.ts","../../../projects/ng-shared/interceptors/error-catching.interceptor.ts","../../../projects/ng-shared/resolvers/translation-module.resolver.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/components/base-form/base-form-template.directive.ts","../../../projects/ng-shared/components/base-form/base-form.component.ts","../../../projects/ng-shared/components/base-form/base-form.component.html","../../../projects/ng-shared/components/base-list/base-list-template.directive.ts","../../../projects/ng-shared/components/base-list/base-list.component.ts","../../../projects/ng-shared/components/base-list/base-list.component.html","../../../projects/ng-shared/tokens/provider.tokens.ts","../../../projects/ng-shared/utils/scroll-pagination.util.ts","../../../projects/ng-shared/components/file-uploader/file-uploader.component.ts","../../../projects/ng-shared/components/file-selector-dialog/file-selector-dialog.component.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/components/inline-svg/inline-svg.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.html","../../../projects/ng-shared/components/lazy-select/lazy-select.component.ts","../../../projects/ng-shared/components/lazy-select/lazy-select.component.html","../../../projects/ng-shared/components/router-tabs/router-tabs.component.ts","../../../projects/ng-shared/components/user-select/base-user-select.class.ts","../../../projects/ng-shared/components/user-multi-select/user-multi-select.component.ts","../../../projects/ng-shared/components/user-select/user-select.component.ts","../../../projects/ng-shared/guards/permission.guard.ts","../../../projects/ng-shared/guards/authenticated.guard.ts","../../../projects/ng-shared/utils/date-time.util.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["export const SHARED_MESSAGES: Record<string, string> = {\n // Backend shared auth key (used by exception filters)\n 'auth.token.required': 'Refresh token is required',\n 'auth.token.invalid': 'Invalid token',\n 'auth.token.expired': 'Token has expired',\n 'auth.token.revoked': 'Token has been revoked',\n 'auth.session.expired.title': 'Session Expired',\n 'entity.belongs.another.company': '{{entity}} belongs to another company',\n 'auth.company.no.access': 'No access to this company',\n\n // Backend error keys (used by exception filters)\n 'error.not.found': 'Resource not found',\n 'error.validation': 'Validation failed',\n 'error.unauthorized': 'Unauthorized access',\n 'error.forbidden': 'Access forbidden',\n 'error.conflict': '{{entity}} with this {{field}} already exists',\n 'error.db.foreign.key': \"Invalid reference for '{{field}}'\",\n 'error.db.not.null': \"Required field '{{field}}' cannot be null\",\n 'error.db.invalid.input': \"Invalid {{type}} value\",\n 'error.db.value.too.long': \"Value too long for '{{field}}'\",\n 'error.db.check.constraint': '{{entity}} violates a validation rule',\n 'error.db.deadlock': 'The request could not be completed due to a conflict, please try again',\n 'error.internal': 'Internal server error',\n 'error.service.unavailable': 'Service temporarily unavailable',\n 'error.unknown': 'Unknown error occurred',\n 'error.http': 'HTTP error',\n 'error.generic': 'An error occurred',\n 'error.permission.system.unavailable':\n 'Permission system temporarily unavailable. Please try again later.',\n 'error.insufficient.permissions':\n 'Missing required permissions: {{permissions}}',\n 'error.insufficient.permissions.or':\n 'Requires at least one of: {{permissions}}',\n 'error.no.permissions.found':\n 'No permissions found. Please contact administrator.',\n 'error.endpoint.disabled': 'Endpoint {{endpoint}} is disabled',\n\n // Backend system keys (infrastructure errors)\n 'system.repository.not.available': '{{entity}} repository not available',\n 'system.datasource.not.available': 'Data source not available',\n 'system.database.config.not.available':\n 'Database configuration not available',\n 'system.service.not.available':\n 'Service \"{{provider}}\" not available. Available: {{available}}',\n 'system.config.required': 'Configuration required',\n 'system.internal.error': 'Failed to initialize \"{{provider}}\": {{error}}',\n 'system.duplicate.request': 'Duplicate request detected',\n 'system.invalid.tenant.id': 'Invalid tenant ID',\n 'system.tenant.not.found': 'Tenant \"{{tenantId}}\" not found',\n 'system.tenant.header.required':\n 'Tenant not found. Ensure \"{{header}}\" header is set.',\n 'system.missing.parameter': 'Missing required parameter: {{key}}',\n 'system.sdk.not.installed':\n 'Required SDK \"{{sdk}}\" not installed. Run: npm install {{sdk}}',\n 'system.path.traversal.detected': 'Path traversal detected',\n 'system.invalid.file.key': 'Invalid file key',\n\n // shared feedback & confirmation keys (used across all list/form components)\n 'shared.success': 'Success',\n 'shared.error': 'Error',\n 'shared.info': 'Info',\n 'shared.warning': 'Warning',\n 'shared.confirm.delete.header': 'Confirm Delete',\n 'shared.validation.error': 'Validation Error',\n 'shared.fill.required.fields': 'Please fill in all required fields',\n\n // components/base-list/base-list.component.ts\n 'shared.no.data': 'No data found',\n 'shared.pagination.report': 'Showing {first} to {last} of {totalRecords} records',\n\n // components/base-form/base-form.component.ts\n 'shared.required': 'is required',\n\n // components/file-selector-dialog/file-selector-dialog.component.ts\n 'shared.file.selector.provider.not.configured':\n 'File selection not configured.',\n 'shared.file.selector.add.provider': 'Add',\n 'shared.close': 'Close',\n 'shared.file.selector.search.placeholder': 'Search files...',\n 'shared.file.selector.all.folders': 'All Folders',\n 'shared.file.selector.all.storage': 'All Storage',\n 'shared.default': 'Default',\n 'shared.file.selector.selected': '{{count}} selected',\n 'shared.file.selector.no.files': 'No files found',\n 'shared.cancel': 'Cancel',\n 'shared.file.selector.select.multiple': 'Select ({{count}})',\n 'shared.file.selector.select': 'Select',\n 'shared.file.selector.select.files': 'Select Files',\n 'shared.file.selector.select.file': 'Select File',\n\n // components/file-uploader/file-uploader.component.ts\n 'shared.upload.provider.not.configured':\n 'File upload not configured. Add {{provider}} to your app config.',\n 'shared.upload.uploading': 'Uploading {{fileName}}...',\n 'shared.upload.drop.multiple': 'Drop files here or click to upload',\n 'shared.upload.drop.single': 'Drop file here or click to upload',\n 'shared.upload.allowed.types': 'Allowed:',\n 'shared.upload.all.types.allowed': 'All file types allowed',\n 'shared.upload.max.size': '(Max {{size}}MB)',\n 'shared.file.uploader.no.upload.function':\n 'No upload function available. Configure FILE_PROVIDER or provide uploadFile input.',\n 'shared.file.type.images': 'Images',\n 'shared.file.type.documents': 'Documents',\n 'shared.file.type.videos': 'Videos',\n 'shared.file.type.audio': 'Audio',\n 'shared.upload.invalid.type': 'Invalid File Type',\n 'shared.upload.file.too.large': 'File Too Large',\n 'shared.size.mb': 'MB',\n 'shared.upload.files': 'files',\n 'shared.upload.complete': 'Upload Complete',\n 'shared.upload.failed': 'Upload failed',\n 'shared.upload.files.uploaded': '{{count}} file(s) uploaded successfully',\n 'shared.size.kb': 'KB',\n\n // components/lazy-select/lazy-select.component.ts\n 'shared.select.placeholder': 'Select Option',\n\n // components/lazy-multi-select/lazy-multi-select.component.ts\n 'shared.multi.select.placeholder': 'Select Options',\n 'shared.multi.select.items.selected': '{{count}} Items Selected',\n\n // components/user-select/base-user-select.class.ts\n 'shared.user.select.placeholder': 'Select User',\n\n // cross-package shared keys (shared.* — used across feature packages)\n 'shared.actions': 'Actions',\n 'shared.active': 'Active',\n 'shared.add': 'Add',\n 'shared.created': 'Created',\n 'shared.all': 'All',\n 'shared.assigned': 'Assigned',\n 'shared.back': 'Back',\n 'shared.code': 'Code',\n 'shared.company': 'Company',\n 'shared.confirm': 'Confirm',\n 'shared.confirm.delete': 'Are you sure you want to delete this item?',\n 'shared.confirm.delete.item': 'Are you sure you want to delete \"{{name}}\"?',\n 'shared.continue': 'Continue',\n 'shared.create': 'Create',\n 'shared.delete': 'Delete',\n 'shared.description': 'Description',\n 'shared.description.placeholder': 'Enter description',\n 'shared.deselect.all': 'Deselect All',\n 'shared.display.order': 'Display Order',\n 'shared.display.order.placeholder': 'Enter display order',\n 'shared.edit': 'Edit',\n 'shared.error.bad.request': 'Bad Request',\n 'shared.error.conflict': 'Conflict',\n 'shared.error.not.found': 'Not Found',\n 'shared.error.server.error': 'Server Error',\n 'shared.error.service.unavailable': 'Service Unavailable',\n 'shared.error.validation.error': 'Validation Error',\n 'shared.inactive': 'Inactive',\n 'shared.invalid.email': 'Please enter a valid email address',\n 'shared.loading.actions': 'Loading actions...',\n 'shared.loading.roles': 'Loading roles...',\n 'shared.min.characters': 'Min. {{count}} characters',\n 'shared.na': 'N/A',\n 'shared.name': 'Name',\n 'shared.name.required': 'Name is required',\n 'shared.no': 'No',\n 'shared.no.results': 'No results found',\n 'shared.not.assigned': 'Not Assigned',\n 'shared.pending.changes': 'Pending Changes',\n 'shared.read.only': 'Read Only',\n 'shared.remove': 'Remove',\n 'shared.save': 'Save',\n 'shared.save.changes': 'Save Changes',\n 'shared.search': 'Search',\n 'shared.select': 'Select...',\n 'shared.select.all': 'Select All',\n 'shared.select.deselect.all': 'Select/Deselect All',\n 'shared.status': 'Status',\n 'shared.to.add': 'To Add',\n 'shared.to.assign': 'To Assign',\n 'shared.to.remove': 'To Remove',\n 'shared.to.whitelist': 'To Whitelist',\n 'shared.type': 'Type',\n 'shared.unexpected.error': 'An unexpected error occurred',\n 'shared.unknown': 'Unknown',\n 'shared.update': 'Update',\n 'shared.upload': 'Upload',\n 'shared.validation.required': '{{field}} is required',\n 'shared.verified': 'Verified',\n 'shared.unverified': 'Un-Verified',\n 'shared.view': 'View',\n 'shared.view.details': 'View Details',\n 'shared.yes': 'Yes',\n 'shared.validation': 'Validation',\n\n};\n","// ==================== AUTH MODULE ====================\n\nexport const USER_PERMISSIONS = {\n CREATE: 'user.create',\n READ: 'user.read',\n UPDATE: 'user.update',\n DELETE: 'user.delete',\n LOOKUP: 'user.lookup',\n} as const;\n\nexport const COMPANY_PERMISSIONS = {\n CREATE: 'company.create',\n READ: 'company.read',\n UPDATE: 'company.update',\n DELETE: 'company.delete',\n} as const;\n\nexport const BRANCH_PERMISSIONS = {\n CREATE: 'branch.create',\n READ: 'branch.read',\n UPDATE: 'branch.update',\n DELETE: 'branch.delete',\n} as const;\n\nexport const SOCIAL_AUTH_CONFIG_PERMISSIONS = {\n CREATE: 'social-config.create',\n READ: 'social-config.read',\n UPDATE: 'social-config.update',\n DELETE: 'social-config.delete',\n} as const;\n\n// ==================== IAM MODULE ====================\n\nexport const ACTION_PERMISSIONS = {\n CREATE: 'action.create',\n READ: 'action.read',\n UPDATE: 'action.update',\n DELETE: 'action.delete',\n} as const;\n\nexport const ROLE_PERMISSIONS = {\n CREATE: 'role.create',\n READ: 'role.read',\n UPDATE: 'role.update',\n DELETE: 'role.delete',\n} as const;\n\nexport const ROLE_ACTION_PERMISSIONS = {\n READ: 'role-action.read',\n ASSIGN: 'role-action.assign',\n} as const;\n\nexport const USER_ROLE_PERMISSIONS = {\n READ: 'user-role.read',\n ASSIGN: 'user-role.assign',\n} as const;\n\nexport const USER_ACTION_PERMISSIONS = {\n READ: 'user-action.read',\n ASSIGN: 'user-action.assign',\n} as const;\n\nexport const COMPANY_ACTION_PERMISSIONS = {\n READ: 'company-action.read',\n ASSIGN: 'company-action.assign',\n} as const;\n\n// ==================== STORAGE MODULE ====================\n\nexport const FILE_PERMISSIONS = {\n CREATE: 'file.create',\n READ: 'file.read',\n UPDATE: 'file.update',\n DELETE: 'file.delete',\n} as const;\n\nexport const FOLDER_PERMISSIONS = {\n CREATE: 'folder.create',\n READ: 'folder.read',\n UPDATE: 'folder.update',\n DELETE: 'folder.delete',\n} as const;\n\nexport const STORAGE_CONFIG_PERMISSIONS = {\n CREATE: 'storage-config.create',\n READ: 'storage-config.read',\n UPDATE: 'storage-config.update',\n DELETE: 'storage-config.delete',\n} as const;\n\nexport const UPLOAD_CONFIG_PERMISSIONS = {\n DELETE: 'upload-config.delete',\n} as const;\n// ==================== EMAIL MODULE ====================\n\nexport const EMAIL_CONFIG_PERMISSIONS = {\n CREATE: 'email-config.create',\n READ: 'email-config.read',\n UPDATE: 'email-config.update',\n DELETE: 'email-config.delete',\n} as const;\n\nexport const EMAIL_TEMPLATE_PERMISSIONS = {\n CREATE: 'email-template.create',\n READ: 'email-template.read',\n UPDATE: 'email-template.update',\n DELETE: 'email-template.delete',\n} as const;\n\n// ==================== FORM BUILDER MODULE ====================\n\nexport const FORM_PERMISSIONS = {\n CREATE: 'form.create',\n READ: 'form.read',\n UPDATE: 'form.update',\n DELETE: 'form.delete',\n} as const;\n\nexport const FORM_RESULT_PERMISSIONS = {\n CREATE: 'form-result.create',\n READ: 'form-result.read',\n UPDATE: 'form-result.update',\n DELETE: 'form-result.delete',\n} as const;\n\n// ==================== EVENT MANAGER MODULE ====================\n\nexport const EVENT_PERMISSIONS = {\n CREATE: 'event.create',\n READ: 'event.read',\n UPDATE: 'event.update',\n DELETE: 'event.delete',\n} as const;\n\n// ==================== NOTIFICATION MODULE ====================\n\nexport const NOTIFICATION_PERMISSIONS = {\n CREATE: 'notification.create',\n READ: 'notification.read',\n UPDATE: 'notification.update',\n DELETE: 'notification.delete',\n} as const;\n\n// ==================== LOCALIZATION MODULE ====================\n\nexport const LANGUAGE_PERMISSIONS = {\n CREATE: 'language.create',\n READ: 'language.read',\n UPDATE: 'language.update',\n DELETE: 'language.delete',\n} as const;\n\nexport const TRANSLATION_KEY_PERMISSIONS = {\n CREATE: 'translation-key.create',\n READ: 'translation-key.read',\n UPDATE: 'translation-key.update',\n DELETE: 'translation-key.delete',\n} as const;\n\nexport const TRANSLATION_PERMISSIONS = {\n CREATE: 'translation.create',\n READ: 'translation.read',\n UPDATE: 'translation.update',\n DELETE: 'translation.delete',\n} as const;\n\n// ==================== AGGREGATED EXPORTS ====================\n\nexport const PERMISSIONS = {\n // Auth\n USER: USER_PERMISSIONS,\n COMPANY: COMPANY_PERMISSIONS,\n BRANCH: BRANCH_PERMISSIONS,\n SOCIAL_AUTH_CONFIG: SOCIAL_AUTH_CONFIG_PERMISSIONS,\n // IAM\n ACTION: ACTION_PERMISSIONS,\n ROLE: ROLE_PERMISSIONS,\n ROLE_ACTION: ROLE_ACTION_PERMISSIONS,\n USER_ROLE: USER_ROLE_PERMISSIONS,\n USER_ACTION: USER_ACTION_PERMISSIONS,\n COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,\n // Storage\n FILE: FILE_PERMISSIONS,\n FOLDER: FOLDER_PERMISSIONS,\n STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,\n // Email\n EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,\n // Form Builder\n FORM: FORM_PERMISSIONS,\n FORM_RESULT: FORM_RESULT_PERMISSIONS,\n // Event Manager\n EVENT: EVENT_PERMISSIONS,\n // Notification\n NOTIFICATION: NOTIFICATION_PERMISSIONS,\n // Localization\n LANGUAGE: LANGUAGE_PERMISSIONS,\n TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,\n TRANSLATION: TRANSLATION_PERMISSIONS,\n} as const;\n\n// Type exports for TypeScript support\nexport type PermissionCode =\n (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];\n","import { Observable } from 'rxjs';\nimport { ISingleResponse } from './response-payload.interface';\n\n// ─── Interfaces ───────────────────────────────────────────────────────────────\n\nexport interface IFileBasicInfo {\n id: string;\n name: string;\n contentType: string;\n size: string;\n url: string | null;\n}\n\nexport interface IUploadedFile {\n id?: string;\n name: string;\n key: string;\n size: number;\n contentType: string;\n}\n\nexport interface IFolderBasicInfo {\n id: string;\n name: string;\n slug: string;\n}\n\nexport interface IStorageConfigBasicInfo {\n id: string;\n name: string;\n isDefault: boolean;\n}\n\nexport interface IFileUploadOptions {\n storageConfigId?: string;\n folderPath?: string;\n maxWidth?: number;\n maxHeight?: number;\n quality?: number;\n compress?: boolean;\n isPrivate?: boolean;\n}\n\n// ─── Filter Interfaces ────────────────────────────────────────────────────────\n\nexport interface ISelectFilter {\n page: number;\n pageSize: number;\n search: string;\n}\n\nexport interface IFileSelectFilter extends ISelectFilter {\n contentTypes?: string[];\n folderId?: string;\n storageConfigId?: string;\n}\n\n// ─── Function Types ───────────────────────────────────────────────────────────\n\nexport type UploadFileFn = (\n file: File,\n options?: IFileUploadOptions,\n) => Observable<ISingleResponse<IUploadedFile>>;\nexport type UploadMultipleFilesFn = (\n files: File[],\n options?: IFileUploadOptions,\n) => Observable<ISingleResponse<IUploadedFile[]>>;\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nexport const FILE_TYPE_FILTERS = {\n IMAGES: [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n ],\n DOCUMENTS: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ],\n VIDEOS: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n AUDIO: ['audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/webm'],\n ALL: [] as string[],\n} as const;\n\n// ─── Utility Functions ────────────────────────────────────────────────────────\n\nexport function getAcceptString(contentTypes: string[]): string {\n return contentTypes.length ? contentTypes.join(',') : '*/*';\n}\n\nexport function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean {\n if (!allowedTypes.length) return true;\n return allowedTypes.some((type) =>\n type.endsWith('/*')\n ? file.type.startsWith(type.replace('/*', '/'))\n : file.type === type,\n );\n}\n\nexport function getFileIconClass(contentType: string): string {\n if (contentType.startsWith('image/')) return 'image';\n if (contentType.startsWith('video/')) return 'video';\n if (contentType.startsWith('audio/')) return 'volume-up';\n if (contentType.includes('pdf')) return 'file-pdf';\n if (contentType.includes('excel') || contentType.includes('spreadsheet'))\n return 'file-excel';\n if (contentType.includes('word') || contentType.includes('document'))\n return 'file-word';\n return 'file';\n}\n\nexport function formatFileSize(sizeInKb: string | number): string {\n const kb = typeof sizeInKb === 'string' ? parseFloat(sizeInKb) : sizeInKb;\n if (kb < 1024) return `${kb.toFixed(1)} KB`;\n const mb = kb / 1024;\n if (mb < 1024) return `${mb.toFixed(1)} MB`;\n return `${(mb / 1024).toFixed(2)} GB`;\n}\n","export enum IconTypeEnum {\n ICON_NAME = 1,\n IMAGE_FILE_LINK = 2,\n}\n","import { PLATFORM_ID, inject, Service } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Service()\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { inject, DOCUMENT, REQUEST, Service } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Service()\nexport class CookieService {\n private doc = inject<Document>(DOCUMENT, { optional: true })!;\n private platformService = inject(PlatformService);\n private readonly request = inject(REQUEST, { optional: true });\n\n get(): string {\n return !this.platformService.isServer ? this.doc.cookie : this.request?.headers.get('cookie') ?? \"\";\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, signal, Service } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { ISingleResponse } from '../interfaces/response-payload.interface';\n\nexport interface FilesResponseDto {\n id: string;\n name: string;\n contentType: string;\n url: string;\n}\n\n/**\n * Service to fetch file URLs from the backend.\n * Handles presigned URLs for cloud storage, auto-refresh, and caching.\n */\n@Service()\nexport class FileUrlService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject(APP_CONFIG);\n\n private readonly _cache = signal<Map<string, FilesResponseDto>>(new Map());\n readonly cache = this._cache.asReadonly();\n\n /** Fetch file URLs from backend and update cache */\n fetchFileUrls(\n fileIds: string[],\n forceRefresh = false,\n ): Observable<FilesResponseDto[]> {\n if (!fileIds.length) return of([]);\n\n const cache = this._cache();\n const missingIds = forceRefresh\n ? fileIds\n : fileIds.filter((id) => !cache.has(id));\n\n if (!missingIds.length) {\n return of(this.getFromCache(fileIds));\n }\n\n const requestDto = missingIds.map((id) => ({ id }));\n\n return this.http\n .post<\n ISingleResponse<FilesResponseDto[]>\n >(`${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`, requestDto)\n .pipe(\n map((response) => response.data ?? []),\n tap((files) => this.addToCache(files)),\n map(() => this.getFromCache(fileIds)),\n catchError(() => of([])),\n );\n }\n\n /** Fetch single file URL (delegates to fetchFileUrls) */\n fetchSingleFileUrl(\n fileId: string,\n forceRefresh = false,\n ): Observable<FilesResponseDto | null> {\n return this.fetchFileUrls([fileId], forceRefresh).pipe(\n map((files) => files[0] ?? null),\n );\n }\n\n private addToCache(files: FilesResponseDto[]): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n for (const file of files) {\n next.set(file.id, file);\n }\n return next;\n });\n }\n\n private getFromCache(fileIds: string[]): FilesResponseDto[] {\n const cache = this._cache();\n return fileIds\n .map((id) => cache.get(id))\n .filter((f): f is FilesResponseDto => f !== undefined);\n }\n}\n","import { ILogicNode } from '../interfaces/common-data.interface';\n\n/**\n * Check if user has a specific permission using wildcard matching.\n * Supports:\n * - Exact match: 'user.create' matches 'user.create'\n * - Full wildcard: '*' matches everything\n * - Module wildcard: 'user.*' matches 'user.create', 'user.read', etc.\n */\nexport function hasPermission(\n requiredPermission: string,\n userPermissions: string[],\n): boolean {\n // Exact match\n if (userPermissions.includes(requiredPermission)) return true;\n\n // Wildcard matching\n for (const permission of userPermissions) {\n // Full wildcard - grants all permissions\n if (permission === '*') return true;\n\n // Module wildcard (e.g., 'user.*' matches 'user.create')\n if (\n permission.endsWith('.*') &&\n requiredPermission.startsWith(permission.slice(0, -1))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Evaluate permission logic (string or ILogicNode) against user permissions */\nexport function evaluatePermission(\n logic: string | ILogicNode | null | undefined,\n permissions: string[],\n): boolean {\n if (!logic) return false;\n if (typeof logic === 'string') return hasPermission(logic, permissions);\n return evaluateLogicNode(logic, permissions);\n}\n\n/** Recursively evaluate an ILogicNode tree */\nexport function evaluateLogicNode(\n node: ILogicNode,\n permissions: string[],\n): boolean {\n switch (node.type) {\n case 'action':\n return node.actionId ? hasPermission(node.actionId, permissions) : false;\n\n case 'group':\n if (!node.children || node.children.length === 0) return false;\n\n return node.operator === 'AND'\n ? node.children.every((child) => evaluateLogicNode(child, permissions))\n : node.children.some((child) => evaluateLogicNode(child, permissions));\n\n default:\n return false;\n }\n}\n\n/** Check if user has ANY of the specified permissions (OR logic) */\nexport function hasAnyPermission(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.some((code) => hasPermission(code, permissions));\n}\n\n/** Check if user has ALL of the specified permissions (AND logic) */\nexport function hasAllPermissions(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.every((code) => hasPermission(code, permissions));\n}\n","import { signal, Service } from '@angular/core';\nimport {\n hasAnyPermission,\n hasPermission,\n} from '../utils/permission-evaluator.util';\n\n/**\n * Permission state management service.\n * Provides signal-based storage and permission checking with wildcard support.\n */\n@Service()\nexport class PermissionValidatorService {\n private readonly _permissions = signal<string[]>([]);\n readonly permissions = this._permissions.asReadonly();\n\n private readonly _isLoaded = signal(false);\n readonly isLoaded = this._isLoaded.asReadonly();\n\n /** Set permissions (replaces existing) */\n setPermissions(permissions: string[]): void {\n this._permissions.set(permissions);\n this._isLoaded.set(true);\n }\n\n /** Clear all permissions */\n clearPermissions(): void {\n this._permissions.set([]);\n this._isLoaded.set(false);\n }\n\n /** Check if user has permission (supports wildcards: '*', 'module.*') */\n hasPermission(code: string): boolean {\n return hasPermission(code, this._permissions());\n }\n\n /** Check if user has ANY of the specified permissions (OR logic) */\n hasAnyPermission(code: string[]): boolean {\n return hasAnyPermission(code, this._permissions());\n }\n}\n","import { computed, inject, Signal, Service } from '@angular/core';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\n\n@Service()\nexport class TranslateService {\n private readonly localizationState = inject(LOCALIZATION_STATE_SERVICE, {\n optional: true,\n });\n\n private readonly registry = inject(FALLBACK_MESSAGES_REGISTRY, {\n optional: false,\n });\n\n translate(key: string, params?: Record<string, string | unknown>): string {\n if (this.localizationState === null) {\n const value = this.registry[key] ?? key;\n return this.interpolate(value, params);\n }\n const translations = this.localizationState.translations();\n let value = translations[key];\n if (!value) {\n const fallbacks = this.localizationState.fallbackMessages();\n value = fallbacks[key] ?? key;\n }\n return this.interpolate(value, params);\n }\n\n translateSignal(\n key: string,\n params?: Record<string, string | number>,\n ): Signal<string> {\n return computed(() => {\n return this.translate(key, params);\n });\n }\n\n private interpolate(\n template: string,\n params?: Record<string, string | unknown>,\n ): string {\n if (!params || !template) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, paramKey) => {\n const value = params[paramKey];\n return value !== undefined ? String(value) : match;\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Service } from '@angular/core';\nimport { PlatformService } from './public-api';\n\n@Service()\nexport class FaviconService {\n private readonly http = inject(HttpClient);\n private readonly platformService = inject(PlatformService);\n private readonly document = inject(DOCUMENT);\n\n private svgTemplate: string | null = null;\n\n apply(): void {\n if (this.platformService.isServer) return;\n\n if (this.svgTemplate) {\n this.render(this.svgTemplate);\n return;\n }\n this.http\n .get('/favicon.svg', { responseType: 'text' })\n .subscribe((text) => {\n this.svgTemplate = text;\n this.render(text);\n });\n }\n\n private render(svgText: string): void {\n const style = getComputedStyle(this.document.documentElement);\n\n const resolved = svgText.replace(\n /var\\(\\s*(--[^,)]+?)\\s*(?:,\\s*([^)]+?))?\\s*\\)/g,\n (_, varName: string, fallback: string = '') => {\n const value = style.getPropertyValue(varName).trim();\n return value || fallback;\n },\n );\n\n const link =\n this.document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (link) {\n link.href = `data:image/svg+xml,${encodeURIComponent(resolved)}`;\n }\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEditModeElementChanger]',\n})\nexport class EditModeElementChangerDirective {\n private readonly el = inject(ElementRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n\n readonly isEditMode = input.required<boolean>();\n\n constructor() {\n effect(() => {\n const editMode = this.isEditMode();\n this.updateElement(editMode);\n this.updateControl(editMode);\n });\n }\n\n private updateControl(editMode: boolean): void {\n if (!editMode) this.ngControl?.control?.disable();\n else this.ngControl?.control?.enable();\n }\n\n private updateElement(editMode: boolean): void {\n const inputElement: HTMLElement = this.el.nativeElement;\n\n if (inputElement instanceof HTMLInputElement) {\n if (!editMode) {\n inputElement.setAttribute('readonly', 'true');\n inputElement.classList.add('edit-mode-element-css');\n } else {\n inputElement.removeAttribute('readonly');\n inputElement.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'F-SELECT') {\n const trigger = inputElement.querySelector<HTMLElement>('[data-select-trigger]');\n const label = inputElement.querySelector<HTMLElement>('[data-select-label]');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (trigger) trigger.style.display = 'none';\n label?.classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n if (trigger) trigger.style.display = '';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'F-DATEPICKER') {\n const firstChild = inputElement.firstElementChild;\n if (!editMode) {\n firstChild?.children[0]?.classList.add('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.add('hidden');\n } else {\n firstChild?.children[0]?.classList.remove('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.remove('hidden');\n }\n }\n }\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport { evaluatePermission } from '../utils/permission-evaluator.util';\n\n/**\n * HasPermission Directive\n *\n * Structural directive for permission-based rendering.\n * Shows/hides elements based on permission logic evaluation.\n *\n * Supports:\n * - Simple permission check (string)\n * - Complex permission logic (ILogicNode with AND/OR operators)\n *\n * Usage:\n * ```html\n * <!-- Simple permission check -->\n * <button *hasPermission=\"'user.create'\">Create User</button>\n *\n * <!-- Complex permission logic -->\n * <button *hasPermission=\"userManageLogic\">Manage Users</button>\n *\n * <!-- Where userManageLogic is: -->\n * <!-- (user.view OR user.create) AND department.manage -->\n * ```\n *\n * The directive automatically reacts to permission changes through signals.\n *\n * @example\n * // In component\n * readonly userManageLogic: ILogicNode = {\n * type: 'group',\n * operator: 'AND',\n * children: [\n * {\n * type: 'group',\n * operator: 'OR',\n * children: [\n * { type: 'action', actionId: 'user.view' },\n * { type: 'action', actionId: 'user.create' }\n * ]\n * },\n * { type: 'action', actionId: 'department.manage' }\n * ]\n * };\n *\n * // In template\n * <div *hasPermission=\"userManageLogic\">\n * User management content\n * </div>\n */\n@Directive({\n selector: '[hasPermission]',\n})\nexport class HasPermissionDirective {\n // ==================== DEPENDENCIES ====================\n\n private readonly templateRef = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n // ==================== SIGNALS ====================\n\n /**\n * Permission logic input signal\n * Accepts either:\n * - string: Single permission code to check\n * - ILogicNode: Complex permission logic tree\n */\n readonly hasPermission = input<string | ILogicNode | null>(null);\n\n /**\n * View created state\n */\n private viewCreated = false;\n\n // ==================== CONSTRUCTOR ====================\n\n constructor() {\n // Effect to reactively update view when permissions or logic changes\n effect(() => {\n // Track permission changes\n this.permissionValidator.permissions();\n\n // Track logic changes\n const logic = this.hasPermission();\n\n // Evaluate and update view\n this.updateView(logic);\n });\n }\n\n // ==================== VIEW MANAGEMENT ====================\n\n /**\n * Update view based on permission evaluation\n */\n private updateView(logic: string | ILogicNode | null): void {\n // Fail closed: No logic = no access\n if (!logic) {\n this.clearView();\n return;\n }\n\n // Fail closed: No permissions loaded = no access (unauthenticated state)\n if (!this.permissionValidator.isLoaded()) {\n this.clearView();\n return;\n }\n\n // Use shared evaluatePermission utility\n const hasPermission = evaluatePermission(\n logic,\n this.permissionValidator.permissions(),\n );\n\n if (hasPermission && !this.viewCreated) {\n // Create view if not exists\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.viewCreated = true;\n } else if (!hasPermission && this.viewCreated) {\n this.clearView();\n }\n }\n\n /**\n * Clear the view container\n */\n private clearView(): void {\n if (this.viewCreated) {\n this.viewContainer.clear();\n this.viewCreated = false;\n }\n }\n}\n","import { Directive, computed, input, signal } from '@angular/core';\n\n@Directive({\n selector: 'img',\n host: {\n '[src]': 'imageSrc()',\n '(error)': 'onError()',\n },\n})\nexport class IsEmptyImageDirective {\n readonly src = input<string>('');\n private readonly hasError = signal(false);\n private readonly defaultImg = 'lib/assets/images/default/default-image.jpg';\n\n readonly imageSrc = computed(() => {\n if (this.hasError()) {\n return this.defaultImg;\n }\n const srcValue = this.src();\n return srcValue ? srcValue : this.defaultImg;\n });\n\n onError(): void {\n this.hasError.set(true);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[appPreventDefault]',\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n },\n})\nexport class PreventDefaultDirective {\n readonly eventType = input<'click' | 'keydown' | 'keyup'>('click');\n readonly preventKey = input<string | undefined>(undefined);\n readonly action = output<Event>();\n\n onClick(event: MouseEvent): void {\n if (this.eventType() === 'click') {\n this.processEvent(event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.eventType() === 'keydown') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent): void {\n if (this.eventType() === 'keyup') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n private processEvent(event: Event): void {\n event.preventDefault();\n this.action.emit(event);\n }\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate.service';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform {\n private readonly translateAdapter = inject(TranslateService);\n\n transform(\n key: string | null | undefined,\n params?: Record<string, string | number> | null,\n fallback?: string,\n ): string {\n if (!key) return fallback ?? '';\n const result = this.translateAdapter.translate(key, params ?? undefined);\n return fallback !== undefined && result === key ? fallback : result;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n HttpContextToken,\n HttpErrorResponse,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, PLATFORM_ID } from '@angular/core';\nimport { ITranslateAdapter } from '@flusys/ng-core';\nimport { MessageService } from '@flusys/ng-ui';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { TranslateService } from '../services/translate.service';\n\n/**\n * HTTP context token to skip global error toast.\n * Use when component handles error display locally.\n *\n * @example\n * ```typescript\n * this.http.post(url, data, {\n * context: new HttpContext().set(SKIP_ERROR_TOAST, true)\n * });\n * ```\n */\nexport const SKIP_ERROR_TOAST = new HttpContextToken<boolean>(() => false);\n\n/**\n * Error Catching Interceptor\n * Displays error messages for failed HTTP requests using backend response.\n *\n * Features:\n * - Uses backend's error title (error.error.error) as summary\n * - Uses backend's error message (error.error.message) as detail\n * - Falls back to sensible defaults based on status code\n * - Skip with SKIP_ERROR_TOAST context token for local handling\n *\n * NOTE: This interceptor only handles error display.\n * For 401 handling and token refresh, use tokenRefreshInterceptor from @flusys/ng-auth.\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * provideHttpClient(\n * withInterceptors([\n * authInterceptor, // from @flusys/ng-auth\n * tokenRefreshInterceptor, // from @flusys/ng-auth\n * errorCatchingInterceptor, // from @flusys/ng-core\n * apiLoaderInterceptor, // from @flusys/ng-core\n * ])\n * )\n * ```\n */\nexport function errorCatchingInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const messageService = inject(MessageService);\n const platformId = inject(PLATFORM_ID);\n const translateAdapter = inject(TranslateService, { optional: true });\n const isBrowser = isPlatformBrowser(platformId);\n\n // Skip error display for check-login (expected to fail when not logged in)\n const isCheckLogin = req.url.includes('/check-login');\n // Skip if component handles error locally\n const skipErrorToast = req.context.get(SKIP_ERROR_TOAST);\n\n return next(req).pipe(\n catchError((error: HttpErrorResponse) => {\n // Skip 401 errors - handled by tokenRefreshInterceptor in ng-auth\n // Skip 403 errors - handled by permission denied UI in components\n // Skip check-login errors - expected behavior\n // Skip if component handles error locally\n if (\n error.status === 401 ||\n error.status === 403 ||\n isCheckLogin ||\n skipErrorToast\n ) {\n return throwError(() => error);\n }\n\n // Display error message for other errors\n if (isBrowser) {\n const { summary, detail } = extractErrorInfo(error, translateAdapter);\n messageService.add({\n severity: 'error',\n summary,\n detail,\n });\n }\n\n return throwError(() => error);\n }),\n );\n}\n\n/**\n * Extract error summary and detail from HTTP error response.\n * Uses backend response format: { message, messageKey, messageVariables, error, statusCode }\n * If messageKey is present and translate adapter is available, translates the message.\n */\nfunction extractErrorInfo(\n error: HttpErrorResponse,\n translateAdapter: ITranslateAdapter | null,\n): { summary: string; detail: string } {\n // Check if we have a messageKey for translation\n const messageKey = error.error?.messageKey;\n const messageVariables = error.error?.messageVariables;\n\n let detail: string;\n if (messageKey && translateAdapter) {\n // Use translated message if available\n detail = translateAdapter.translate(messageKey, messageVariables);\n } else if (typeof error.error?.message === 'string') {\n detail = error.error.message;\n } else if (Array.isArray(error.error?.message)) {\n // NestJS validation errors come as array\n detail = error.error.message[0];\n } else if (error.message) {\n detail = error.message;\n } else {\n detail = translateAdapter\n ? translateAdapter.translate('shared.unexpected.error')\n : 'shared.unexpected.error';\n }\n\n // Extract summary/title from backend response or use default based on status\n let summary: string;\n if (typeof error.error?.error === 'string') {\n // Backend sends error type (e.g., \"Not Found\", \"Bad Request\", \"Validation Error\")\n summary = error.error.error;\n } else {\n // Fallback to status-based title\n summary = getDefaultSummary(error.status, translateAdapter);\n }\n\n return { summary, detail };\n}\n\n/**\n * Get default error summary based on HTTP status code.\n */\nfunction getDefaultSummary(\n status: number,\n translateAdapter: ITranslateAdapter | null,\n): string {\n const keyMap: Record<number, string> = {\n 400: 'shared.error.bad.request',\n 404: 'shared.error.not.found',\n 409: 'shared.error.conflict',\n 422: 'shared.error.validation.error',\n 500: 'shared.error.server.error',\n 502: 'shared.error.service.unavailable',\n 503: 'shared.error.service.unavailable',\n 504: 'shared.error.service.unavailable',\n };\n\n const key = keyMap[status] || 'shared.error';\n\n if (translateAdapter) {\n return translateAdapter.translate(key);\n }\n\n // Fallback to key when no translator available\n return key;\n}\n","import { inject, Injector, isDevMode } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n ILocalizationApiServicesAdapter,\n ILocalizationStateServicesAdapter,\n LOCALIZATION_API_SERVICE,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\nimport { firstValueFrom } from 'rxjs';\n\nexport interface IResolverModuleConfig {\n modules: string[];\n fallbackMessages?: Record<string, string>;\n}\n\n/**\n * Resolver to load translations for specific modules.\n * Works with or without @flusys/ng-localization provider.\n *\n * When localization provider is enabled:\n * - Registers fallback messages in state\n * - Fetches translations from API\n * - Merges them into state\n *\n * When localization provider is not enabled:\n * - Registers fallback messages in FALLBACK_MESSAGES_REGISTRY\n * - TranslatePipe uses registry for translations\n * - No API calls\n *\n * @param config - Module config with modules array and optional fallback messages\n * @returns ResolveFn that loads translations before route activation\n *\n * @example\n * // With fallback messages (recommended)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth'], fallbackMessages: AUTH_MESSAGES }) } }\n *\n * @example\n * // Without fallback (API translations only, requires localization provider)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth', 'iam'] }) } }\n */\n\nasync function tryLoadLocalizationServices(injector: Injector): Promise<{\n stateService: ILocalizationStateServicesAdapter;\n apiService: ILocalizationApiServicesAdapter;\n} | null> {\n const stateService = injector.get(LOCALIZATION_STATE_SERVICE, null);\n const apiService = injector.get(LOCALIZATION_API_SERVICE, null);\n if (!stateService || !apiService) return null;\n return {\n stateService,\n apiService,\n };\n}\n\nexport function resolveTranslationModule(\n config: IResolverModuleConfig,\n): ResolveFn<boolean> {\n return async () => {\n const injector = inject(Injector);\n const { modules, fallbackMessages } = config;\n\n // Try to load localization services if available\n const locServices = await tryLoadLocalizationServices(injector);\n\n // Register fallback messages\n if (fallbackMessages) {\n if (locServices) {\n locServices.stateService.updateFallbackMessages(fallbackMessages);\n } else {\n const registry = injector.get(FALLBACK_MESSAGES_REGISTRY, null);\n if (registry) {\n Object.assign(registry, fallbackMessages);\n } else if (isDevMode()) {\n console.warn(\n 'resolveTranslationModule: FALLBACK_MESSAGES_REGISTRY not provided. ' +\n 'Add provideFallbackMessagesRegistry() to your app providers.',\n );\n }\n }\n }\n\n if (!locServices) return true;\n\n // Load translations from API\n const languageCode = locServices.stateService.currentLanguageCode();\n const modulesToLoad = modules.filter(\n (m) => !locServices.stateService.isModuleLoaded(m),\n );\n\n if (modulesToLoad.length === 0) return true;\n\n try {\n const response = (await firstValueFrom(\n locServices.apiService.getTranslationsByLanguage(\n languageCode,\n modulesToLoad,\n ),\n )) as { success?: boolean; data?: Record<string, string> };\n\n if (response?.success && response?.data) {\n locServices.stateService.mergeTranslations(response.data);\n modulesToLoad.forEach((m) =>\n locServices.stateService.markModuleLoaded(m),\n );\n } else if (modulesToLoad.length > 0 && isDevMode()) {\n console.warn(\n `No translation data received for modules: ${modulesToLoad.join(', ')}`,\n );\n }\n } catch (error) {\n if (isDevMode()) {\n console.error(\n `Failed to load translations for modules: ${modules.join(', ')}`,\n error,\n );\n }\n }\n\n return true;\n };\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport {\n computed,\n inject,\n resource,\n ResourceRef,\n ResourceStatus,\n signal,\n} from '@angular/core';\nimport {\n APP_CONFIG,\n getServiceUrl,\n IAppConfig,\n ServiceName,\n} from '@flusys/ng-core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n// ── Separate default filter into a named constant so it's sharable/testable ──\nconst DEFAULT_FILTER: IFilterData = {\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n};\n\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;\n findById(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>>;\n findByIds(\n ids: string[],\n select?: string[] | string,\n ): Promise<IListResponse<InterfaceT>>;\n getAll(\n filter: IFilterData,\n search?: string,\n ): Promise<IListResponse<InterfaceT>>;\n getByFilter(\n filter: Record<string, unknown>,\n ): Promise<ISingleResponse<InterfaceT>>;\n update(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;\n updateMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;\n bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]>;\n delete(deleteDto: IDeleteData): Promise<IMessageResponse>;\n}\n\nexport abstract class ApiResourceService<\n DtoT,\n InterfaceT,\n> implements IApiService<DtoT, InterfaceT> {\n // ── Injected once via `inject()` ──────────────────────────────────────────\n protected readonly http = inject(HttpClient);\n private readonly _config = inject<IAppConfig>(APP_CONFIG);\n\n protected readonly baseUrl: string;\n protected readonly moduleApiName: string;\n\n // ── Public writable signals ───────────────────────────────────────────────\n readonly searchTerm = signal('');\n readonly filterData = signal<IFilterData>({ ...DEFAULT_FILTER });\n\n // ── Private activation gate: avoids an initial fetch before fetchList() ──\n private readonly _active = signal(false);\n\n // ── Resource (reactive list fetching with abort support) ──────────────────\n readonly listResource: ResourceRef<IListResponse<InterfaceT> | undefined>;\n\n // ── Derived/computed signals (pure reads, no side-effects) ────────────────\n readonly isLoading = computed(() => this.listResource.isLoading());\n readonly data = computed(() => {\n if (this.listResource.error()) return [];\n return this.listResource.value()?.data ?? [];\n });\n readonly total = computed(() => {\n if (this.listResource.error()) return 0;\n return this.listResource.value()?.meta?.total ?? 0;\n });\n readonly pageInfo = computed(() => {\n if (this.listResource.error()) return undefined;\n return this.listResource.value()?.meta;\n });\n readonly hasMore = computed(() => {\n if (this.listResource.error()) return false;\n const meta = this.listResource.value()?.meta;\n if (!meta) return false;\n return meta.hasMore ?? (meta.page + 1) * meta.pageSize < meta.total;\n });\n readonly error = computed(() => this.listResource.error());\n readonly status = computed<ResourceStatus>(() => this.listResource.status());\n\n constructor(moduleApiName: string, serviceName?: ServiceName) {\n this.moduleApiName = moduleApiName;\n\n // ── Resolve base URL once at construction, not per-request ───────────────\n const serviceBaseUrl = serviceName\n ? getServiceUrl(this._config, serviceName)\n : this._config.apiBaseUrl;\n\n this.baseUrl = moduleApiName\n ? `${serviceBaseUrl}/${moduleApiName}`\n : serviceBaseUrl;\n\n this.listResource = resource({\n params: () => {\n // Short-circuit: skip the loader entirely when not yet activated\n if (!this._active()) return undefined;\n return { search: this.searchTerm(), filter: this.filterData() };\n },\n loader: ({ params, abortSignal }) =>\n // ── Inline promise keeps the closure tight; no temp variable needed ─\n new Promise<IListResponse<InterfaceT>>((resolve, reject) => {\n const sub = this._getAllObs(params!.filter, params!.search).subscribe(\n {\n next: resolve,\n error: reject,\n },\n );\n abortSignal.addEventListener('abort', () => sub.unsubscribe());\n }),\n });\n }\n\n // ── Single, memoised header builder – avoids object churn per call ────────\n protected getHttpOptions(endpoint: string, params?: HttpParams) {\n return {\n headers: new HttpHeaders({\n 'x-loader-tag': `${this.moduleApiName}/${endpoint}`,\n }),\n ...(params ? { params } : {}),\n };\n }\n\n // ── Private observable – shared by the resource loader and the public getAll() ──\n private _getAllObs(filter: IFilterData, search = '') {\n const params = search ? new HttpParams().append('q', search) : undefined;\n\n return this.http.post<IListResponse<InterfaceT>>(\n `${this.baseUrl}/get-all`,\n filter,\n this.getHttpOptions('get-all', params),\n );\n }\n\n // ── Activate guard: all list-management helpers call this first ───────────\n private _activate() {\n this._active.set(true);\n }\n\n // ==========================================================================\n // List management\n // ==========================================================================\n\n fetchList(search = '', filter?: Partial<IFilterData>): void {\n this.searchTerm.set(search);\n if (filter) this.filterData.update((prev) => ({ ...prev, ...filter }));\n this._activate();\n }\n\n setPagination(pagination: IPagination): void {\n this._activate();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\n\n nextPage(): void {\n this._activate();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: {\n ...prev.pagination!,\n currentPage: (prev.pagination?.currentPage ?? 0) + 1,\n },\n }));\n }\n\n resetPagination(): void {\n this._activate();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },\n }));\n }\n\n reload(): void {\n this.listResource.reload();\n }\n\n // ==========================================================================\n // Promise API (IApiService implementation)\n // ==========================================================================\n\n // ── DRY helper: all promise methods are one-liners via this ───────────────\n private _post<R>(\n endpoint: string,\n body: unknown,\n params?: HttpParams,\n ): Promise<R> {\n return firstValueFrom(\n this.http.post<R>(\n `${this.baseUrl}/${endpoint}`,\n body,\n this.getHttpOptions(endpoint, params),\n ),\n );\n }\n\n insert(dto: DtoT) {\n return this._post<ISingleResponse<InterfaceT>>('insert', dto);\n }\n insertMany(dtos: DtoT[]) {\n return this._post<IBulkResponse<InterfaceT>>('insert-many', dtos);\n }\n findById(id: string, select?: string[]) {\n return this._post<ISingleResponse<InterfaceT>>(`get/${id}`, { select });\n }\n getAll(filter: IFilterData, search = '') {\n return firstValueFrom(this._getAllObs(filter, search));\n }\n update(dto: DtoT) {\n return this._post<ISingleResponse<InterfaceT>>('update', dto);\n }\n updateMany(dtos: DtoT[]) {\n return this._post<IBulkResponse<InterfaceT>>('update-many', dtos);\n }\n delete(deleteDto: IDeleteData) {\n return this._post<IMessageResponse>('delete', deleteDto);\n }\n\n findByIds(ids: string[], select?: string[] | string) {\n return this._post<IListResponse<InterfaceT>>('get-by-ids', { ids, select });\n }\n\n getByFilter(filter: Record<string, unknown>) {\n return this._post<ISingleResponse<InterfaceT>>('get-by-filter', filter);\n }\n\n async bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]> {\n const res = await this._post<IBulkResponse<InterfaceT>>('bulk-upsert', [\n ...toInsert,\n ...toUpdate,\n ]);\n return res.data ?? [];\n }\n}\n\nexport { ApiResourceService as ApiService };\n","import {\n Directive,\n effect,\n forwardRef,\n inject,\n Injector,\n model,\n runInInjectionContext,\n untracked,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormValueControl } from '@angular/forms/signals';\n\n@Directive()\nexport abstract class BaseFormControl<T>\n implements ControlValueAccessor, FormValueControl<T>\n{\n protected readonly injector = inject(Injector);\n\n abstract readonly value: ReturnType<typeof model<T>>;\n\n readonly disabled = model(false);\n readonly touched = model(false);\n\n // ── CVA callbacks ─────────────────────────────────────────────────────────\n // Initialised to no-ops so subclasses never need null-guards\n private onChange: (value: T) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Write-guard: prevents echo loop (writeValue → effect → onChange) ──────\n // Using a counter instead of a boolean handles the (rare) re-entrant case\n private writeDepth = 0;\n\n /**\n * Wire up the ControlValueAccessor ↔ signal bridge.\n * Call once at the end of the subclass constructor.\n *\n * Signal-form consumers ([formField]) don't need this — Angular's\n * FormField directive binds directly to `value`.\n *\n * @example\n * constructor() { super(); this.initializeFormControl(); }\n */\n protected initializeFormControl(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const next = this.value();\n // Skip propagation while writeValue() is on the call stack\n if (this.writeDepth === 0) {\n untracked(() => this.onChange(next));\n }\n });\n });\n }\n\n // ==========================================================================\n // ControlValueAccessor\n // ==========================================================================\n\n writeValue(value: T): void {\n this.writeDepth++;\n try {\n this.value.set(value);\n } finally {\n // Always decrement — even if set() throws — so the guard never sticks\n this.writeDepth--;\n }\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ==========================================================================\n // FormValueControl (signal forms)\n // `value: ModelSignal<T>` satisfies the interface — nothing else needed.\n // ==========================================================================\n\n /** Call on blur / panel-close to propagate touched state. */\n protected markAsTouched(): void {\n if (!this.touched()) {\n this.touched.set(true);\n this.onTouched();\n }\n }\n}\n\n/**\n * Factory function to provide NG_VALUE_ACCESSOR for a component.\n * Use in component providers array.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(LazySelectComponent)]\n * })\n * export class LazySelectComponent extends BaseFormControl<string | null> {}\n * ```\n */\nexport function provideValueAccessor<\n T extends new (...args: unknown[]) => ControlValueAccessor,\n>(component: T) {\n return {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true,\n };\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: 'ng-template[baseFormTemplate]' })\nexport class BaseFormTemplateDirective {\n readonly key = input.required<string>({ alias: 'baseFormTemplate' });\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n CardComponent,\n CheckboxComponent,\n DatePickerComponent,\n FButtonDirective,\n InputNumberComponent,\n InputTextDirective,\n MessageService,\n MultiSelectComponent,\n PasswordComponent,\n SelectComponent,\n TextareaDirective,\n ToggleSwitchComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { TranslateService } from '../../services/translate.service';\nimport { BaseFormTemplateDirective } from './base-form-template.directive';\nimport { IFormField } from './base-form.interfaces';\n\n@Component({\n selector: 'lib-base-form',\n imports: [\n FormsModule,\n NgTemplateOutlet,\n CardComponent,\n InputTextDirective,\n PasswordComponent,\n UiIconComponent,\n InputNumberComponent,\n TextareaDirective,\n SelectComponent,\n MultiSelectComponent,\n DatePickerComponent,\n CheckboxComponent,\n ToggleSwitchComponent,\n FButtonDirective,\n ],\n templateUrl: './base-form.component.html',\n})\nexport class BaseFormComponent {\n private readonly translateAdapter = inject(TranslateService, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly messageService = inject(MessageService, { optional: true });\n\n readonly fields = input.required<IFormField[]>();\n readonly title = input<string>('');\n readonly createTitle = input<string>('');\n readonly editTitle = input<string>('');\n readonly columns = input<1 | 2 | 3>(2);\n readonly submitLabel = input<string>('');\n readonly cancelLabel = input<string>('');\n\n readonly isLoading = input<boolean>(false);\n readonly isEditMode = input<boolean>(false);\n readonly initialValue = input<Record<string, unknown>>({});\n\n readonly service = input<ApiResourceService<unknown, unknown> | null>(null);\n readonly editId = input<string | null>(null);\n readonly cancelRoute = input<string | string[] | null>(null);\n readonly navigateOnSuccess = input<string | string[] | null>(null);\n readonly mapToRequest = input<((data: Record<string, unknown>, editId: string | null) => unknown) | null>(null);\n readonly mapFromEntity = input<((entity: unknown) => Record<string, unknown>) | null>(null);\n\n readonly onSubmit = output<Record<string, unknown>>();\n readonly onCancel = output<void>();\n readonly onValueChange = output<Record<string, unknown>>();\n\n readonly fieldTemplates = contentChildren(BaseFormTemplateDirective);\n\n private readonly _formData = signal<Record<string, unknown>>({});\n private readonly _submitted = signal(false);\n private readonly _isLoadingInternal = signal(false);\n private readonly _touchedFields = signal<Set<string>>(new Set());\n\n readonly formData = this._formData.asReadonly();\n readonly submitted = this._submitted.asReadonly();\n\n readonly effectiveIsEditMode = computed(() => this.isEditMode() || !!this.editId());\n readonly effectiveIsLoading = computed(() => this.isLoading() || this._isLoadingInternal());\n readonly isFormValid = computed(() => this.checkValidity());\n\n readonly resolvedTitle = computed(() => {\n if (this.effectiveIsEditMode()) return this.editTitle() || this.title();\n return this.createTitle() || this.title();\n });\n\n readonly gridClass = computed(() => {\n switch (this.columns()) {\n case 1: return 'grid-cols-1';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n default: return 'grid-cols-1 md:grid-cols-2';\n }\n });\n\n constructor() {\n effect(() => {\n const fields = this.fields();\n const initial = this.initialValue();\n const defaults: Record<string, unknown> = {};\n for (const f of fields) defaults[f.key] = this.getDefaultValue(f);\n this._formData.set({ ...defaults, ...initial });\n this._submitted.set(false);\n this._touchedFields.set(new Set());\n });\n\n effect(() => {\n const editId = this.editId();\n const service = this.service();\n const mapFn = this.mapFromEntity();\n if (editId && service && mapFn) this.loadEntity(editId, service, mapFn);\n });\n }\n\n private async loadEntity(\n id: string,\n service: ApiResourceService<unknown, unknown>,\n mapFn: (entity: unknown) => Record<string, unknown>,\n ): Promise<void> {\n this._isLoadingInternal.set(true);\n try {\n const response = await service.findById(id);\n if (response.success && response.data) {\n this._formData.update((prev) => ({ ...prev, ...mapFn(response.data) }));\n this._submitted.set(false);\n }\n } catch {\n this.navigateTo(this.cancelRoute());\n } finally {\n this._isLoadingInternal.set(false);\n }\n }\n\n getFieldValue(key: string): unknown {\n return this._formData()[key];\n }\n\n setFieldValue(key: string, value: unknown): void {\n this._formData.update((data) => ({ ...data, [key]: value }));\n this._touchedFields.update((set) => new Set([...set, key]));\n this.onValueChange.emit(this._formData());\n }\n\n markFieldTouched(key: string): void {\n this._touchedFields.update((set) => new Set([...set, key]));\n }\n\n isFieldInvalid(field: IFormField): boolean {\n const isActive = this._submitted() || this._touchedFields().has(field.key);\n if (!isActive || !field.required) return false;\n const value = this._formData()[field.key];\n if (Array.isArray(value)) return value.length === 0;\n return value === null || value === undefined || value === '';\n }\n\n getFieldTemplate(key: string): TemplateRef<unknown> | null {\n return this.fieldTemplates().find((t) => t.key() === key)?.templateRef ?? null;\n }\n\n async handleSubmit(): Promise<void> {\n this._submitted.set(true);\n if (!this.isFormValid()) return;\n\n const service = this.service();\n const mapFn = this.mapToRequest();\n\n if (service && mapFn) {\n await this.managedSubmit(service, mapFn);\n } else {\n this.onSubmit.emit({ ...this._formData() });\n }\n }\n\n handleCancel(): void {\n this.navigateTo(this.cancelRoute());\n this.onCancel.emit();\n }\n\n reset(): void {\n const defaults: Record<string, unknown> = {};\n for (const f of this.fields()) defaults[f.key] = this.getDefaultValue(f);\n this._formData.set(defaults);\n this._submitted.set(false);\n this._touchedFields.set(new Set());\n }\n\n t(key: string, vars?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n private async managedSubmit(\n service: ApiResourceService<unknown, unknown>,\n mapFn: (data: Record<string, unknown>, editId: string | null) => unknown,\n ): Promise<void> {\n this._isLoadingInternal.set(true);\n try {\n const editId = this.editId();\n const dto = mapFn(this._formData(), editId);\n const response = editId ? await service.update(dto) : await service.insert(dto);\n\n this.messageService?.add({\n severity: 'success',\n summary: this.t('shared.success'),\n detail: response.messageKey\n ? this.t(response.messageKey, response.messageVariables as Record<string, string | number>)\n : (response.message ?? ''),\n });\n\n this.onSubmit.emit({ ...this._formData() });\n this.navigateTo(this.navigateOnSuccess());\n } catch {\n // handled by global interceptor\n } finally {\n this._isLoadingInternal.set(false);\n }\n }\n\n private checkValidity(): boolean {\n return this.fields().every((f) => {\n if (!f.required) return true;\n const value = this._formData()[f.key];\n if (Array.isArray(value)) return value.length > 0;\n return value !== null && value !== undefined && value !== '';\n });\n }\n\n private navigateTo(route: string | string[] | null | undefined): void {\n if (!route || !this.router) return;\n this.router.navigate(Array.isArray(route) ? route : [route]);\n }\n\n private getDefaultValue(field: IFormField): unknown {\n switch (field.type) {\n case 'checkbox':\n case 'toggle':\n return false;\n case 'multiselect':\n return [];\n case 'number':\n return null;\n default:\n return '';\n }\n }\n}\n","<f-card>\n <ng-template #header>\n @if (resolvedTitle()) {\n <div class=\"flex justify-between items-center p-4\">\n <h2 class=\"text-xl font-semibold m-0\">{{ resolvedTitle() }}</h2>\n </div>\n }\n </ng-template>\n\n <form (ngSubmit)=\"handleSubmit()\" novalidate>\n <div class=\"grid gap-4\" [class]=\"gridClass()\">\n @for (field of fields(); track field.key) {\n <div class=\"flex flex-col gap-2\" [class.col-span-full]=\"field.fullWidth\">\n @if (field.type !== 'checkbox' && field.type !== 'toggle') {\n <label [for]=\"field.key\" class=\"font-medium\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n }\n\n @switch (field.type) {\n @case ('text') {\n <input\n fInputText\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('email') {\n <input\n fInputText\n type=\"email\"\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('password') {\n <f-password\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n />\n }\n\n @case ('number') {\n <f-inputnumber\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [min]=\"field.min ?? null\"\n [max]=\"field.max ?? null\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('textarea') {\n <textarea\n fTextarea\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [rows]=\"field.rows ?? 3\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n ></textarea>\n }\n\n @case ('select') {\n <f-select\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [options]=\"field.options ?? []\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"field.placeholder ?? t('shared.select.placeholder')\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('multiselect') {\n <f-multiselect\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [options]=\"field.options ?? []\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"field.placeholder ?? t('shared.select.placeholder')\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('date') {\n <f-datepicker\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [minDate]=\"field.minDate ?? null\"\n [maxDate]=\"field.maxDate ?? null\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('checkbox') {\n <div class=\"flex items-center gap-2 h-9\">\n <f-checkbox\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [disabled]=\"field.disabled ?? false\"\n [binary]=\"true\"\n [invalid]=\"isFieldInvalid(field)\"\n />\n <label [for]=\"field.key\" class=\"font-medium cursor-pointer select-none\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n </div>\n }\n\n @case ('toggle') {\n <div class=\"flex items-center gap-3 h-9\">\n <f-toggleswitch\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [disabled]=\"field.disabled ?? false\"\n />\n <label [for]=\"field.key\" class=\"font-medium cursor-pointer select-none\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n </div>\n }\n\n @case ('custom') {\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate(field.key)\"\n [ngTemplateOutletContext]=\"{ $implicit: getFieldValue(field.key), field: field }\"\n />\n }\n }\n\n @if (isFieldInvalid(field)) {\n <small class=\"text-red-500\">{{ field.label }} {{ t('shared.required') }}</small>\n }\n\n @if (field.hint && !isFieldInvalid(field)) {\n <small class=\"text-surface-400\">{{ field.hint }}</small>\n }\n </div>\n }\n\n <div class=\"col-span-full flex justify-end gap-4 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n [disabled]=\"effectiveIsLoading()\"\n (click)=\"handleCancel()\"\n >\n <span pButtonLabel>{{ cancelLabel() || t('shared.cancel') }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || effectiveIsLoading()\"\n >\n @if (effectiveIsLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ submitLabel() || (effectiveIsEditMode() ? t('shared.update') : t('shared.save')) }}</span>\n </button>\n </div>\n </div>\n </form>\n</f-card>\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: 'ng-template[baseListTemplate]' })\nexport class BaseListTemplateDirective {\n readonly key = input.required<string>({ alias: 'baseListTemplate' });\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n computed,\n contentChildren,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { DatePipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG, isServiceEnabled } from '@flusys/ng-core';\nimport {\n CardComponent,\n ConfirmationService,\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n MessageService,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { DeleteType } from '../../interfaces/common-data.interface';\nimport { IFilter } from '../../interfaces/filter-data.interface';\nimport { TranslateService } from '../../services/translate.service';\nimport { BaseListTemplateDirective } from './base-list-template.directive';\nimport { ITableAction, ITableColumn, ITagConfig } from './base-list.interfaces';\n\n@Component({\n selector: 'lib-base-list',\n imports: [\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n FormsModule,\n CardComponent,\n IconFieldComponent,\n InputIconComponent,\n UiIconComponent,\n InputTextDirective,\n FButtonDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n ],\n templateUrl: './base-list.component.html',\n})\nexport class BaseListComponent {\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly router = inject(Router, { optional: true });\n private readonly messageService = inject(MessageService, { optional: true });\n private readonly appConfig = inject(APP_CONFIG);\n private readonly confirmationService = inject(ConfirmationService, {\n optional: true,\n });\n\n readonly columns = input.required<ITableColumn[]>();\n readonly actions = input<ITableAction[]>([]);\n readonly title = input<string>('');\n readonly showCreateButton = input<boolean>(true);\n readonly searchable = input<boolean>(false);\n readonly pageSize = input<number>(10);\n readonly scrollHeight = input<string>('10rem');\n readonly emptyMessage = input<string>('');\n readonly createButtonLabel = input<string>('');\n readonly createButtonIcon = input<string>('plus');\n\n readonly data = input<unknown[]>([]);\n readonly total = input<number>(0);\n readonly isLoading = input<boolean>(false);\n\n readonly service = input<ApiResourceService<unknown, unknown> | null>(null);\n readonly filter = input<IFilter>({});\n readonly createRoute = input<string | null>(null);\n readonly editRoute = input<string | null>(null);\n readonly deleteConfirmField = input<string | null>(null);\n readonly deleteType = input<DeleteType>('delete');\n readonly idField = input<string>('id');\n readonly canEdit = input<((item: unknown) => boolean) | null>(null);\n readonly canDelete = input<((item: unknown) => boolean) | null>(null);\n\n readonly onCreate = output<void>();\n readonly onLazyLoad = output<{ first: number; rows: number }>();\n readonly onSearch = output<string>();\n\n readonly columnTemplates = contentChildren(BaseListTemplateDirective);\n\n private readonly _first = signal(0);\n private readonly _searchTerm = signal('');\n readonly first = this._first.asReadonly();\n readonly searchTerm = this._searchTerm.asReadonly();\n\n readonly effectiveData = computed(\n () => this.service()?.data() ?? this.data(),\n );\n readonly effectiveTotal = computed(\n () => this.service()?.total() ?? this.total(),\n );\n readonly effectiveIsLoading = computed(\n () => this.service()?.isLoading() ?? this.isLoading(),\n );\n\n readonly effectiveActions = computed<ITableAction[]>(() => {\n const editRoute = this.editRoute();\n const deleteField = this.deleteConfirmField();\n\n const editAction: ITableAction[] = editRoute\n ? [\n {\n icon: 'pencil',\n tooltip: 'shared.edit',\n severity: 'info',\n show: this.canEdit() ?? undefined,\n handler: (item) => this.handleEditItem(item),\n },\n ]\n : [];\n\n const deleteAction: ITableAction[] = deleteField\n ? [\n {\n icon: 'trash',\n tooltip: 'shared.delete',\n severity: 'danger',\n show: this.canDelete() ?? undefined,\n handler: (item) => this.handleDeleteItem(item),\n },\n ]\n : [];\n\n return [...editAction, ...this.actions(), ...deleteAction];\n });\n\n readonly visibleColumns = computed(() =>\n this.columns().filter((c) => !c.hidden),\n );\n readonly columnCount = computed(\n () =>\n this.visibleColumns().length +\n (this.effectiveActions().length > 0 ? 1 : 0),\n );\n\n readonly resolvedEmptyMessage = computed(\n () => this.emptyMessage() || this.t('shared.no.data'),\n );\n readonly resolvedCreateLabel = computed(\n () => this.createButtonLabel() || this.t('shared.create'),\n );\n\n handleLazyLoad(event: { first?: number | null; rows?: number | null }): void {\n const first = event.first ?? 0;\n const rows = event.rows ?? this.pageSize();\n this._first.set(first);\n\n const service = this.service();\n if (service) {\n service.fetchList(this.searchTerm(), {\n pagination: { currentPage: Math.floor(first / rows), pageSize: rows },\n filter: this.filter(),\n });\n }\n\n this.onLazyLoad.emit({ first, rows });\n }\n\n onSearchChange(value: string): void {\n this._first.set(0);\n this._searchTerm.set(value);\n\n const service = this.service();\n if (service) {\n service.fetchList(value, {\n pagination: { currentPage: 0, pageSize: this.pageSize() },\n filter: this.filter(),\n });\n }\n\n this.onSearch.emit(value);\n }\n\n handleCreate(): void {\n const route = this.createRoute();\n if (route && this.router) this.router.navigate([route]);\n this.onCreate.emit();\n }\n\n private handleEditItem(item: unknown): void {\n const route = this.editRoute();\n const id = this.getFieldValueAsString(item, this.idField());\n if (route && id && this.router) this.router.navigate([route, id]);\n }\n\n private handleDeleteItem(item: unknown): void {\n const nameField = this.deleteConfirmField()!;\n const name = this.getFieldValueAsString(item, nameField);\n const id = this.getFieldValueAsString(item, this.idField());\n\n this.confirmationService?.confirm({\n message: this.t('shared.confirm.delete.item', { name }),\n header: this.t('shared.confirm.delete'),\n icon: 'exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n const response = await this.service()?.delete({\n id,\n type: this.deleteType(),\n });\n this.messageService?.add({\n severity: 'success',\n summary: this.t('shared.success'),\n detail:\n response && isServiceEnabled(this.appConfig, 'localization')\n ? this.t(\n response?.messageKey || '',\n response.messageVariables as Record<\n string,\n string | number\n >,\n )\n : (response?.message ?? ''),\n });\n this.service()?.reload();\n } catch {\n // handled by global interceptor\n }\n },\n });\n }\n\n getFieldValue(item: unknown, field: string): unknown {\n return field\n .split('.')\n .reduce<unknown>(\n (obj, key) =>\n obj != null ? (obj as Record<string, unknown>)[key] : null,\n item,\n );\n }\n\n getFieldValueAsString(item: unknown, field: string): string {\n return String(this.getFieldValue(item, field) ?? '');\n }\n\n getTagConfig(col: ITableColumn, value: unknown): ITagConfig | null {\n return col.tagMap?.[String(value)] ?? null;\n }\n\n getColumnTemplate(field: string): TemplateRef<unknown> | null {\n return (\n this.columnTemplates().find((t) => t.key() === field)?.templateRef ?? null\n );\n }\n\n truncateText(value: unknown, limit?: number): string {\n const str = String(value ?? '');\n return limit && str.length > limit ? `${str.slice(0, limit)}…` : str;\n }\n\n getCellClass(col: ITableColumn): string {\n switch (col.align) {\n case 'center':\n return 'text-center';\n case 'right':\n return 'text-right';\n default:\n return '';\n }\n }\n\n t(key: string, vars?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n}\n","<f-card>\n <ng-template #header>\n @if (title() || searchable() || showCreateButton()) {\n <div\n class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 p-4\"\n >\n @if (title()) {\n <h2 class=\"text-xl font-semibold m-0\">{{ title() }}</h2>\n }\n <div class=\"flex items-center gap-2\" [class.ml-auto]=\"!!title()\">\n @if (searchable()) {\n <f-iconfield>\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"t('shared.search')\"\n />\n </f-iconfield>\n }\n @if (showCreateButton()) {\n <button fButton (click)=\"handleCreate()\">\n <ui-icon pButtonIcon [name]=\"createButtonIcon()\"></ui-icon>\n <span pButtonLabel>{{ resolvedCreateLabel() }}</span>\n </button>\n }\n </div>\n </div>\n }\n </ng-template>\n\n <div class=\"overflow-x-auto\">\n <f-table\n [value]=\"effectiveData()\"\n [loading]=\"effectiveIsLoading()\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [scrollHeight]=\"scrollHeight()\"\n [paginator]=\"effectiveTotal() > pageSize()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"effectiveTotal()\"\n [first]=\"first()\"\n (onLazyLoad)=\"handleLazyLoad($event)\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"t('shared.pagination.report')\"\n class=\"p-datatable-striped\"\n >\n <ng-template #header>\n <tr>\n @for (col of visibleColumns(); track col.field) {\n <th\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth\"\n [class]=\"getCellClass(col)\"\n >\n {{ col.header }}\n </th>\n }\n @if (effectiveActions().length > 0) {\n <th style=\"width: 120px; text-align: center\">\n {{ t(\"shared.actions\") }}\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-item>\n <tr>\n @for (col of visibleColumns(); track col.field) {\n <td [class]=\"getCellClass(col)\">\n @switch (col.type ?? \"text\") {\n @case (\"tag\") {\n @if (\n getTagConfig(col, getFieldValue(item, col.field));\n as tagCfg\n ) {\n <f-tag\n [severity]=\"tagCfg.severity\"\n [value]=\"\n tagCfg.label ?? getFieldValueAsString(item, col.field)\n \"\n />\n } @else {\n {{ getFieldValueAsString(item, col.field) }}\n }\n }\n @case (\"boolean\") {\n <f-tag\n [severity]=\"\n getFieldValue(item, col.field) ? 'success' : 'danger'\n \"\n [value]=\"\n getFieldValue(item, col.field)\n ? t('shared.yes')\n : t('shared.no')\n \"\n />\n }\n @case (\"date\") {\n {{\n getFieldValueAsString(item, col.field)\n | date: col.dateFormat ?? \"dd/MM/yyyy\"\n }}\n }\n @case (\"number\") {\n {{ getFieldValueAsString(item, col.field) | number }}\n }\n @case (\"custom\") {\n <ng-container\n [ngTemplateOutlet]=\"getColumnTemplate(col.field)\"\n [ngTemplateOutletContext]=\"{ $implicit: item, field: col.field }\"\n />\n }\n @default {\n {{\n truncateText(getFieldValue(item, col.field), col.truncate)\n }}\n }\n }\n </td>\n }\n @if (effectiveActions().length > 0) {\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @for (action of effectiveActions(); track $index) {\n @if (!action.show || action.show(item)) {\n <button\n fButton\n [severity]=\"action.severity ?? 'secondary'\"\n [fTooltip]=\"action.tooltip ? t(action.tooltip) : ''\"\n [disabled]=\"\n action.disabled ? action.disabled(item) : false\n \"\n (click)=\"action.handler(item)\"\n [rounded]=\"true\"\n [text]=\"true\"\n >\n <ui-icon pButtonIcon [name]=\"action.icon\"></ui-icon>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template #emptymessage>\n <tr>\n <td [attr.colspan]=\"columnCount()\">\n <div\n class=\"flex flex-col items-center justify-center py-12 text-surface-400\"\n >\n <ui-icon name=\"inbox\" class=\"text-5xl mb-3\"></ui-icon>\n <span>{{ resolvedEmptyMessage() }}</span>\n </div>\n </td>\n </tr>\n </ng-template>\n </f-table>\n </div>\n</f-card>\n","import { InjectionToken } from '@angular/core';\nimport {\n IAuthStateProvider,\n ICompanyApiProvider,\n IFileProvider,\n IProfilePermissionProvider,\n IUserPermissionProvider,\n IUserProvider,\n} from '../interfaces/providers.interface';\n\n/**\n * Injection Tokens for Provider Interfaces\n *\n * These tokens enable dependency injection of provider implementations\n * without creating direct package dependencies.\n *\n * Pattern:\n * 1. ng-shared defines interfaces and tokens (no implementation)\n * 2. ng-auth provides implementations\n * 3. ng-iam and ng-storage inject via tokens\n * 4. app.config.ts wires everything together\n *\n * @example\n * // In IAM component\n * private readonly userProvider = inject(USER_PROVIDER);\n *\n * // In app.config.ts\n * providers: [\n * { provide: USER_PROVIDER, useClass: AuthUserProvider },\n * ]\n */\n\n/**\n * User Provider Token\n *\n * Provides user data access for IAM user selection.\n */\nexport const USER_PROVIDER = new InjectionToken<IUserProvider>(\n 'USER_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Company API Provider Token\n *\n * Provides company data access for IAM company selection.\n */\nexport const COMPANY_API_PROVIDER = new InjectionToken<ICompanyApiProvider>(\n 'COMPANY_API_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'COMPANY_API_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * User Permission Provider Token\n *\n * Provides user permission assignment operations for IAM.\n */\nexport const USER_PERMISSION_PROVIDER =\n new InjectionToken<IUserPermissionProvider>('USER_PERMISSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PERMISSION_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Auth State Provider Token\n *\n * Provides auth state access for feature packages (form-builder, etc.)\n */\nexport const AUTH_STATE_PROVIDER = new InjectionToken<IAuthStateProvider>(\n 'AUTH_STATE_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'AUTH_STATE_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Profile Permission Provider Token\n *\n * Provides user permission data for profile display.\n * Optional - if not configured, profile permissions section is hidden.\n * Use with `inject(PROFILE_PERMISSION_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_PERMISSION_PROVIDER =\n new InjectionToken<IProfilePermissionProvider>('PROFILE_PERMISSION_PROVIDER');\n\n/**\n * File Provider Token\n *\n * Provides file loading and upload functionality for file selectors.\n * Optional - if not configured, file selector requires loadFiles/uploadFile inputs.\n * Use with `inject(FILE_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: FILE_PROVIDER, useClass: StorageFileProvider },\n * ]\n */\nexport const FILE_PROVIDER = new InjectionToken<IFileProvider>('FILE_PROVIDER');\n","import { IPagination } from '../interfaces/filter-data.interface';\n\n/**\n * Configuration for scroll pagination behavior\n */\nexport interface ScrollPaginationConfig {\n /** Distance from bottom to trigger pagination (default: 50px) */\n threshold?: number;\n /** Current pagination state */\n pagination: IPagination;\n /** Total items available */\n total: number | undefined;\n /** Whether currently loading */\n isLoading: boolean;\n}\n\n/**\n * Check if scroll has reached near bottom and calculate next page if available.\n * Returns next pagination if should load more, null otherwise.\n *\n * @example\n * ```typescript\n * onScroll(event: Event): void {\n * const nextPagination = checkScrollPagination(event, {\n * pagination: this.pagination(),\n * total: this.total(),\n * isLoading: this.isLoading(),\n * });\n * if (nextPagination) {\n * this.onPagination.emit(nextPagination);\n * }\n * }\n * ```\n */\nexport function checkScrollPagination(\n event: Event,\n config: ScrollPaginationConfig,\n): IPagination | null {\n const el = event.target;\n if (!(el instanceof HTMLElement)) return null;\n\n const threshold = config.threshold ?? 50;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - threshold;\n\n if (!nearBottom || config.isLoading) return null;\n\n const { pagination, total } = config;\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (total ?? 0);\n\n if (!hasMore) return null;\n\n return { ...pagination, currentPage: nextPage };\n}\n","import {\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n FButtonDirective,\n MessageService,\n ProgressbarComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { firstValueFrom } from 'rxjs';\nimport {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n UploadMultipleFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\n\n@Component({\n selector: 'lib-file-uploader',\n imports: [\n UiIconComponent,\n ProgressbarComponent,\n FButtonDirective,\n TranslatePipe,\n ],\n template: `\n @if (!hasUploadCapability()) {\n <div\n class=\"p-4 border border-dashed border-orange-300 bg-orange-50 dark:bg-orange-900/20 rounded-lg text-center\"\n >\n <ui-icon name=\"exclamation-triangle\" class=\"text-2xl text-orange-500 mb-2\"></ui-icon>\n <p class=\"text-sm text-orange-700 dark:text-orange-300\">\n {{\n 'shared.upload.provider.not.configured'\n | translate: { provider: 'provideStorageProviders()' }\n }}\n </p>\n </div>\n } @else {\n <div\n class=\"w-full\"\n [class.opacity-60]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <ui-icon name=\"loader-circle\" spin class=\"text-3xl sm:text-4xl text-primary\"></ui-icon>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">\n {{\n 'shared.upload.uploading'\n | translate: { fileName: uploadingFileName() }\n }}\n </p>\n @if (uploadProgress() > 0) {\n <f-progressbar\n [value]=\"uploadProgress()\"\n [showValue]=\"true\"\n class=\"w-full mt-2 max-w-xs\"\n />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <ui-icon name=\"cloud-upload\" class=\"text-3xl sm:text-4xl text-primary\"></ui-icon>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{\n multiple()\n ? ('shared.upload.drop.multiple' | translate)\n : ('shared.upload.drop.single' | translate)\n }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n {{ 'shared.upload.allowed.types' | translate }}\n {{ acceptTypesDisplay() }}\n } @else {\n {{ 'shared.upload.all.types.allowed' | translate }}\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">{{\n 'shared.upload.max.size' | translate: { size: maxSizeMb() }\n }}</span>\n }\n </p>\n </div>\n }\n </div>\n\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n [accept]=\"acceptString()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isUploading()\"\n (change)=\"onFileSelected($event)\"\n />\n\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n @let fileIcon = getFileIcon(file);\n @let fileSize = formatSize(file.size);\n <div\n class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\"\n >\n <ui-icon\n [name]=\"fileIcon\"\n class=\"text-lg sm:text-xl flex-shrink-0\"\n ></ui-icon>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{\n file.name\n }}</span>\n <span\n class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\"\n >{{ fileSize }}</span\n >\n <button\n fButton\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (click)=\"removeFile(file)\"\n >\n <ui-icon pButtonIcon name=\"times\"></ui-icon>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [\n `\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--f-surface-300);\n background: var(--f-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--f-primary-color);\n background: var(--f-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--f-primary-color);\n background: var(--f-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.app-dark) .upload-zone,\n .app-dark .upload-zone {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n\n :host-context(.app-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .app-dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--f-primary-color);\n background: var(--f-surface-700);\n }\n\n :host-context(.app-dark) .upload-zone.drag-over,\n .app-dark .upload-zone.drag-over {\n border-color: var(--f-primary-color);\n background: var(--f-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--f-surface-200);\n background: var(--f-surface-0);\n }\n\n :host-context(.app-dark) .file-preview-item,\n .app-dark .file-preview-item {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n `,\n ],\n})\nexport class FileUploaderComponent {\n private readonly messageService = inject(MessageService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n\n readonly uploadFile = input<UploadFileFn>();\n readonly uploadMultipleFiles = input<UploadMultipleFilesFn>();\n readonly hasUploadCapability = computed(\n () => !!this.uploadFile() || !!this.fileProvider,\n );\n\n private getUploadFn(): UploadFileFn {\n const inputFn = this.uploadFile();\n if (inputFn) return inputFn;\n if (this.fileProvider)\n return (file, opts) => this.fileProvider!.uploadFile(file, opts);\n throw new Error('shared.file.uploader.no.upload.function');\n }\n\n private getUploadMultipleFn(): UploadMultipleFilesFn | undefined {\n const inputFn = this.uploadMultipleFiles();\n if (inputFn) return inputFn;\n if (this.fileProvider?.uploadMultipleFiles) {\n return (files, opts) =>\n this.fileProvider!.uploadMultipleFiles!(files, opts);\n }\n return undefined;\n }\n\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxFiles = input<number>(10);\n readonly maxSizeMb = input<number>(10);\n readonly uploadOptions = input<IFileUploadOptions>({});\n readonly disabled = input<boolean>(false);\n readonly showPreview = input<boolean>(true);\n readonly autoUpload = input<boolean>(true);\n\n readonly fileUploaded = output<IUploadedFile>();\n readonly filesUploaded = output<IUploadedFile[]>();\n readonly onError = output<Error>();\n readonly fileSelected = output<File[]>();\n\n readonly isUploading = signal(false);\n readonly isDragOver = signal(false);\n readonly uploadProgress = signal(0);\n readonly uploadingFileName = signal('');\n readonly selectedFiles = signal<File[]>([]);\n\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n readonly acceptTypesDisplay = computed(() => {\n const types = this.acceptTypes();\n if (!types.length) return '';\n\n const typesStr = JSON.stringify(types);\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.IMAGES))\n return this.t('shared.file.type.images');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.DOCUMENTS))\n return this.t('shared.file.type.documents');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.VIDEOS))\n return this.t('shared.file.type.videos');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.AUDIO))\n return this.t('shared.file.type.audio');\n\n return types.map((t) => t.split('/')[1] || t).join(', ');\n });\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isUploading()) {\n this.isDragOver.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n if (this.disabled() || this.isUploading()) return;\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n input.value = '';\n }\n\n private handleFiles(files: File[]): void {\n const allowedTypes = this.acceptTypes();\n const validFiles = files.filter((file) => {\n if (!isFileTypeAllowed(file, allowedTypes)) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.invalid.type'),\n detail: `${file.name}`,\n });\n return false;\n }\n return true;\n });\n\n const maxSize = this.maxSizeMb() * 1024 * 1024;\n const sizeValidFiles = validFiles.filter((file) => {\n if (file.size > maxSize) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.file.too.large'),\n detail: `${file.name} (${this.maxSizeMb()}${this.t('shared.size.mb')})`,\n });\n return false;\n }\n return true;\n });\n\n const limitedFiles = this.multiple()\n ? sizeValidFiles.slice(0, this.maxFiles())\n : sizeValidFiles.slice(0, 1);\n\n if (!limitedFiles.length) return;\n\n this.selectedFiles.set(limitedFiles);\n this.fileSelected.emit(limitedFiles);\n\n if (this.autoUpload()) {\n this.uploadFiles(limitedFiles);\n }\n }\n\n removeFile(file: File): void {\n this.selectedFiles.update((files) => files.filter((f) => f !== file));\n }\n\n async uploadFiles(files?: File[]): Promise<void> {\n const filesToUpload = files ?? this.selectedFiles();\n if (!filesToUpload.length || this.isUploading()) return;\n\n this.isUploading.set(true);\n\n try {\n const batchUploadFn = this.getUploadMultipleFn();\n\n if (batchUploadFn && filesToUpload.length > 1) {\n await this.uploadBatch(filesToUpload, batchUploadFn);\n } else {\n await this.uploadSequential(filesToUpload);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.isUploading.set(false);\n this.uploadingFileName.set('');\n this.uploadProgress.set(0);\n }\n }\n\n private async uploadBatch(\n files: File[],\n uploadFn: UploadMultipleFilesFn,\n ): Promise<void> {\n this.uploadingFileName.set(\n `${files.length} ${this.t('shared.upload.files')}`,\n );\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(files, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n response.data.forEach((file) => this.fileUploaded.emit(file));\n this.filesUploaded.emit(response.data);\n this.selectedFiles.set([]);\n\n const r = response as unknown as {\n messageKey?: string;\n messageVariables?: Record<string, string | number>;\n message?: string;\n };\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: r?.messageKey\n ? this.t(r.messageKey, r.messageVariables)\n : (r?.message ?? ''),\n });\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n private async uploadSequential(files: File[]): Promise<void> {\n const uploadedFiles: IUploadedFile[] = [];\n const uploadFn = this.getUploadFn();\n\n for (const file of files) {\n this.uploadingFileName.set(file.name);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(file, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n uploadedFiles.push(response.data);\n this.fileUploaded.emit(response.data);\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n this.filesUploaded.emit(uploadedFiles);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: this.t('shared.upload.files.uploaded', {\n count: uploadedFiles.length,\n }),\n });\n }\n\n getFileIcon(file: File): string {\n return getFileIconClass(file.type);\n }\n\n formatSize(bytes: number): string {\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(1)} ${this.t('shared.size.kb')}`;\n const mb = kb / 1024;\n return `${mb.toFixed(1)} ${this.t('shared.size.mb')}`;\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n formatFileSize,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n IFileUploadOptions,\n IFolderBasicInfo,\n ISelectFilter,\n IStorageConfigBasicInfo,\n IUploadedFile,\n} from '../../interfaces/file-select.interface';\nimport { FormsModule } from '@angular/forms';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { IsEmptyImageDirective } from '../../directives/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { FileUploaderComponent } from '../file-uploader/file-uploader.component';\nimport {\n ButtonComponent,\n DialogComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n SelectComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_SELECTOR_PAGE_SIZE = 50;\n\n@Component({\n selector: 'lib-file-selector-dialog',\n imports: [\n FormsModule,\n IsEmptyImageDirective,\n DialogComponent,\n UiIconComponent,\n ButtonComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n SelectComponent,\n FileUploaderComponent,\n TranslatePipe,\n ],\n template: `\n <f-dialog\n [header]=\"dialogHeader()\"\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n class=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n @if (!fileProvider) {\n <div class=\"p-6 text-center\">\n <ui-icon name=\"exclamation-triangle\" class=\"text-4xl text-orange-500 mb-3\"></ui-icon>\n <p class=\"text-lg font-medium text-color mb-2\">\n {{ 'shared.file.selector.provider.not.configured' | translate }}\n </p>\n <p class=\"text-sm text-color-secondary mb-4\">\n {{ 'shared.file.selector.add.provider' | translate }}\n <code\n class=\"inline-block bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded font-mono text-xs\"\n >provideStorageProviders()</code\n >\n </p>\n <f-button\n [label]=\"'shared.close' | translate\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onCancel()\"\n />\n </div>\n } @else {\n @if (withUploader()) {\n <div class=\"mb-4\">\n <lib-file-uploader\n [uploadFile]=\"uploadFileFn\"\n [uploadMultipleFiles]=\"uploadMultipleFilesFn\"\n [uploadOptions]=\"{ storageConfigId: effectiveStorageConfigId() }\"\n [acceptTypes]=\"acceptTypes()\"\n [multiple]=\"multiple()\"\n [maxFiles]=\"maxSelection()\"\n [maxSizeMb]=\"10\"\n [showPreview]=\"false\"\n (fileUploaded)=\"onFileUploaded($event)\"\n />\n </div>\n }\n\n <div\n class=\"flex flex-col sm:flex-row gap-2 mb-3 items-stretch sm:items-center\"\n >\n <f-iconfield class=\"flex-1\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"\n 'shared.file.selector.search.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </f-iconfield>\n\n @if (fileProvider.loadFolders) {\n <f-select\n [options]=\"folders()\"\n [ngModel]=\"selectedFolderId()\"\n (ngModelChange)=\"onFolderChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.folders' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onFolderSearch($event)\"\n [selectedObject]=\"selectedFolderObject()\"\n [loading]=\"foldersLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadFolders()\"\n >\n <ng-template #selectedItem let-folder>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"folder\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ folder?.name }}</span>\n </div>\n </ng-template>\n <ng-template #item let-folder>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"folder\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ folder.name }}</span>\n </div>\n </ng-template>\n </f-select>\n }\n\n @if (fileProvider.loadStorageConfigs) {\n <f-select\n [options]=\"storageConfigs()\"\n [ngModel]=\"selectedStorageConfigId()\"\n (ngModelChange)=\"onStorageConfigChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.storage' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onStorageConfigSearch($event)\"\n [selectedObject]=\"selectedStorageConfigObject()\"\n [loading]=\"storageConfigsLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadStorageConfigs()\"\n >\n <ng-template #selectedItem let-config>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"database\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ config?.name }}</span>\n @if (config?.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n <ng-template #item let-config>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"database\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ config.name }}</span>\n @if (config.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n </f-select>\n }\n\n @if (multiple()) {\n <span\n class=\"text-sm text-color-secondary self-center whitespace-nowrap\"\n >\n {{\n 'shared.file.selector.selected'\n | translate: { count: selectedFiles().length }\n }}\n </span>\n }\n </div>\n\n <div class=\"file-grid\" #scrollContainer (scroll)=\"onScroll($event)\">\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <ui-icon name=\"loader-circle\" spin class=\"text-4xl text-color-secondary\"></ui-icon>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <ui-icon name=\"inbox\" class=\"text-4xl mb-2 block\"></ui-icon>\n <p>{{ 'shared.file.selector.no.files' | translate }}</p>\n </div>\n } @else {\n @for (file of files(); track file.id) {\n @let fileSelected = isSelected(file);\n @let fileAllowed = isFileAllowed(file);\n @let isImg = isImage(file);\n @let fileIcon = getFileIcon(file);\n <div\n class=\"file-card\"\n [class.selected]=\"fileSelected\"\n [class.disabled]=\"!fileAllowed\"\n (click)=\"toggleSelection(file)\"\n >\n <div class=\"file-preview\">\n @if (isImg && file.url) {\n <img\n [src]=\"file.url\"\n [alt]=\"file.name\"\n class=\"w-full h-full object-cover\"\n />\n } @else {\n <ui-icon\n [name]=\"fileIcon\"\n class=\"text-4xl sm:text-5xl text-color-secondary\"\n ></ui-icon>\n }\n @if (fileSelected) {\n <div class=\"selected-overlay\">\n <ui-icon name=\"check\" class=\"text-xl sm:text-2xl\"></ui-icon>\n </div>\n }\n </div>\n\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span\n class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\"\n [title]=\"file.name\"\n >\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{\n formatSize(file.size)\n }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <ui-icon name=\"loader-circle\" spin class=\"text-color-secondary\"></ui-icon>\n </div>\n }\n }\n </div>\n\n <ng-template #footer>\n <div\n class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\"\n >\n <f-button\n [label]=\"'shared.cancel' | translate\"\n severity=\"secondary\"\n [text]=\"true\"\n class=\"w-full sm:w-auto\"\n (onClick)=\"onCancel()\"\n />\n <f-button\n [label]=\"\n multiple()\n ? ('shared.file.selector.select.multiple'\n | translate: { count: selectedFiles().length })\n : ('shared.file.selector.select' | translate)\n \"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (onClick)=\"onConfirm()\"\n />\n </div>\n </ng-template>\n }\n </f-dialog>\n `,\n styles: [\n `\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--f-surface-300);\n border-radius: var(--f-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--f-surface-0);\n }\n\n :host-context(.app-dark) .file-card,\n .app-dark .file-card {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--f-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--f-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--f-primary-color);\n background: var(--f-primary-50);\n }\n\n :host-context(.app-dark) .file-card.selected,\n .app-dark .file-card.selected {\n background: var(--f-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--f-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.app-dark) .file-preview,\n .app-dark .file-preview {\n background: var(--f-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--f-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--f-primary-color);\n background: var(--f-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.app-dark) .selected-overlay i,\n .app-dark .selected-overlay i {\n background: var(--f-surface-900);\n }\n `,\n ],\n})\nexport class FileSelectorDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n private abortController: AbortController | null = null;\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly header = input<string>();\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n\n readonly dialogHeader = computed(() => {\n const customHeader = this.header();\n if (customHeader) return customHeader;\n return this.t(\n this.multiple()\n ? 'shared.file.selector.select.files'\n : 'shared.file.selector.select.file',\n );\n });\n readonly maxSelection = input<number>(10);\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n readonly folderId = input<string>(); // Filter by folder\n readonly withUploader = input<boolean>(false);\n\n readonly visible = model<boolean>(false);\n\n readonly fileSelected = output<IFileBasicInfo>();\n readonly filesSelected = output<IFileBasicInfo[]>();\n readonly closed = output<void>();\n readonly onError = output<Error>();\n\n readonly isLoading = signal(false);\n readonly files = signal<IFileBasicInfo[]>([]);\n readonly selectedFiles = signal<IFileBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({\n pageSize: DEFAULT_PAGE_SIZE,\n currentPage: 0,\n });\n readonly searchTerm = signal('');\n\n readonly folders = signal<IFolderBasicInfo[]>([]);\n readonly selectedFolderId = signal<string | null>(null);\n // Captured at selection time so the trigger label survives a later\n // (onFilter) search replacing `folders()` with results that no longer\n // include the already-selected folder.\n readonly selectedFolderObject = signal<IFolderBasicInfo | null>(null);\n readonly foldersLoading = signal(false);\n readonly foldersPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly foldersTotal = signal<number | undefined>(undefined);\n\n readonly storageConfigs = signal<IStorageConfigBasicInfo[]>([]);\n readonly selectedStorageConfigId = signal<string | null>(null);\n // Same reasoning as selectedFolderObject above.\n readonly selectedStorageConfigObject = signal<IStorageConfigBasicInfo | null>(\n null,\n );\n readonly storageConfigsLoading = signal(false);\n readonly storageConfigsPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly storageConfigsTotal = signal<number | undefined>(undefined);\n\n readonly effectiveStorageConfigId = computed(() => {\n const selected = this.selectedStorageConfigId();\n if (selected) return selected;\n // Find default config\n const defaultConfig = this.storageConfigs().find((c) => c.isDefault);\n return defaultConfig?.id;\n });\n\n readonly uploadFileFn = (file: File, options?: IFileUploadOptions) => {\n if (!this.fileProvider)\n throw new Error('shared.file.selector.provider.not.configured');\n return this.fileProvider.uploadFile(file, options);\n };\n\n readonly uploadMultipleFilesFn = this.fileProvider?.uploadMultipleFiles\n ? (files: File[], options?: IFileUploadOptions) =>\n this.fileProvider!.uploadMultipleFiles!(files, options)\n : undefined;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n });\n\n effect(() => {\n const isVisible = this.visible();\n if (isVisible) {\n untracked(() => {\n this.resetState();\n this.fetchFiles();\n if (this.fileProvider?.loadStorageConfigs) {\n this.loadStorageConfigs();\n }\n });\n }\n });\n\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n }\n\n onSearchChange(value: string): void {\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchTerm.set(value);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }, 500);\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.pagination.set(nextPagination);\n this.fetchFiles(true);\n }\n }\n\n toggleSelection(file: IFileBasicInfo): void {\n if (!this.isFileAllowed(file)) return;\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n const isSelected = selected.some((f) => f.id === file.id);\n\n if (isSelected) {\n this.selectedFiles.update((files) =>\n files.filter((f) => f.id !== file.id),\n );\n } else if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, file]);\n }\n } else {\n this.selectedFiles.set([file]);\n }\n }\n\n isSelected(file: IFileBasicInfo): boolean {\n return this.selectedFiles().some((f) => f.id === file.id);\n }\n\n isFileAllowed(file: IFileBasicInfo): boolean {\n const allowedTypes = this.acceptTypes();\n if (!allowedTypes.length) return true;\n\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.contentType.startsWith(type.replace('/*', '/'));\n }\n return file.contentType === type;\n });\n }\n\n isImage(file: IFileBasicInfo): boolean {\n return file.contentType.startsWith('image/') && !!file.url;\n }\n\n getFileIcon(file: IFileBasicInfo): string {\n return getFileIconClass(file.contentType);\n }\n\n formatSize(size: string): string {\n return formatFileSize(size);\n }\n\n onCancel(): void {\n this.visible.set(false);\n }\n\n onConfirm(): void {\n const selected = this.selectedFiles();\n if (selected.length === 0) return;\n\n if (this.multiple()) {\n this.filesSelected.emit(selected);\n } else {\n this.fileSelected.emit(selected[0]);\n }\n\n this.visible.set(false);\n }\n\n onDialogHide(): void {\n this.closed.emit();\n }\n\n onFolderChange(folderId: string | null): void {\n this.selectedFolderId.set(folderId);\n this.selectedFolderObject.set(\n folderId ? (this.folders().find((f) => f.id === folderId) ?? null) : null,\n );\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onFolderSearch(event: { filter: string }): void {\n this.foldersPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadFolders(event.filter);\n }\n\n async loadFolders(search = ''): Promise<void> {\n if (!this.fileProvider?.loadFolders || this.foldersLoading()) return;\n\n this.foldersLoading.set(true);\n try {\n const pag = this.foldersPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFolders(filter),\n );\n if (response.success && response.data) {\n this.folders.set(response.data);\n this.foldersTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.foldersLoading.set(false);\n }\n }\n\n onStorageConfigChange(configId: string | null): void {\n this.selectedStorageConfigId.set(configId);\n this.selectedStorageConfigObject.set(\n configId\n ? (this.storageConfigs().find((c) => c.id === configId) ?? null)\n : null,\n );\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onStorageConfigSearch(event: { filter: string }): void {\n this.storageConfigsPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadStorageConfigs(event.filter);\n }\n\n async loadStorageConfigs(search = ''): Promise<void> {\n if (!this.fileProvider?.loadStorageConfigs || this.storageConfigsLoading())\n return;\n\n this.storageConfigsLoading.set(true);\n try {\n const pag = this.storageConfigsPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadStorageConfigs(filter),\n );\n if (response.success && response.data) {\n this.storageConfigs.set(response.data);\n this.storageConfigsTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.storageConfigsLoading.set(false);\n }\n }\n\n onFileUploaded(uploadedFile: IUploadedFile): void {\n if (!uploadedFile.id) return;\n\n const fileInfo: IFileBasicInfo = {\n id: uploadedFile.id,\n name: uploadedFile.name,\n contentType: uploadedFile.contentType,\n size: String(uploadedFile.size / 1024),\n url: null,\n };\n\n this.files.update((current) => [fileInfo, ...current]);\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, fileInfo]);\n }\n } else {\n this.selectedFiles.set([fileInfo]);\n }\n\n this.fetchFiles();\n }\n\n private resetState(): void {\n this.abortController?.abort();\n this.abortController = null;\n this.isLoading.set(false);\n\n this.files.set([]);\n this.selectedFiles.set([]);\n this.searchTerm.set('');\n this.pagination.set({ pageSize: this.pageSize(), currentPage: 0 });\n this.total.set(undefined);\n this.selectedFolderId.set(null);\n this.selectedFolderObject.set(null);\n this.folders.set([]);\n this.foldersPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.foldersTotal.set(undefined);\n this.selectedStorageConfigId.set(null);\n this.selectedStorageConfigObject.set(null);\n this.storageConfigs.set([]);\n this.storageConfigsPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.storageConfigsTotal.set(undefined);\n }\n\n private async fetchFiles(append = false): Promise<void> {\n if (!this.fileProvider || this.isLoading()) return;\n\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IFileSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n contentTypes: this.acceptTypes().length\n ? this.acceptTypes()\n : undefined,\n folderId: this.selectedFolderId() || this.folderId(),\n storageConfigId: this.selectedStorageConfigId() || undefined,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFiles(filter),\n );\n\n if (response.success && response.data) {\n let files = response.data;\n\n if (this.fileProvider.getFileUrls && files.length > 0) {\n const fileIds = files.map((f) => f.id);\n const urlResponse = await firstValueFrom(\n this.fileProvider.getFileUrls(fileIds),\n );\n if (urlResponse.success && urlResponse.data) {\n const urlMap = new Map(urlResponse.data.map((f) => [f.id, f.url]));\n files = files.map((f) => ({\n ...f,\n url: urlMap.get(f.id) ?? f.url,\n }));\n }\n }\n\n if (append) {\n this.files.update((current) => [...current, ...files]);\n } else {\n this.files.set(files);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { UiIconComponent } from '@flusys/ng-ui';\nimport { IconTypeEnum } from '../../enums/public-api';\n\n@Component({\n selector: 'lib-icon',\n imports: [UiIconComponent],\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <ui-icon [name]=\"icon()\" [size]=\"17\"></ui-icon>\n }\n }\n `,\n})\nexport class IconComponent {\n readonly icon = input.required<string>();\n readonly iconType = input<IconTypeEnum | undefined>(IconTypeEnum.ICON_NAME);\n protected readonly IconTypeEnum = IconTypeEnum;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, inject, input, resource, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Strips script execution vectors from fetched SVG markup before it is rendered\n * via [innerHTML]. Angular's own DomSanitizer strips SVG elements wholesale (it\n * has no SVG allowlist), which would break every legitimate icon this component\n * renders - so instead this removes only the actual attack surface: <script>/\n * <foreignObject> elements, \"on*\" event handler attributes, and javascript: URIs.\n */\nfunction sanitizeSvgMarkup(svgText: string): string {\n const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml');\n if (doc.querySelector('parsererror')) {\n return '';\n }\n\n doc.querySelectorAll('script, foreignObject').forEach((el) => el.remove());\n\n const walker = doc.createTreeWalker(doc.documentElement, NodeFilter.SHOW_ELEMENT);\n let node: Node | null = walker.currentNode;\n while (node) {\n const element = node as Element;\n Array.from(element.attributes).forEach((attr) => {\n const name = attr.name.toLowerCase();\n const value = attr.value.trim().toLowerCase();\n const isEventHandler = name.startsWith('on');\n const isScriptUri =\n (name === 'href' || name === 'xlink:href') && value.startsWith('javascript:');\n if (isEventHandler || isScriptUri) {\n element.removeAttribute(attr.name);\n }\n });\n node = walker.nextNode();\n }\n\n return new XMLSerializer().serializeToString(doc.documentElement);\n}\n\n@Component({\n selector: 'inline-svg',\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (svg.hasValue()) {\n <span [innerHTML]=\"svg.value()\"></span>\n }\n `,\n styles: `\n inline-svg {\n display: inline-flex;\n align-items: center;\n }\n inline-svg span {\n display: inline-flex;\n align-items: center;\n height: 100%;\n width: 100%;\n }\n inline-svg svg {\n height: 100%;\n width: auto;\n }\n `,\n})\nexport class InlineSvgComponent {\n readonly src = input.required<string>();\n\n private readonly http = inject(HttpClient);\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly svg = resource({\n params: this.src,\n loader: ({ params: url }) =>\n firstValueFrom(this.http.get(url, { responseType: 'text' })).then((text) =>\n // Safe: bypassing Angular's own sanitizer (which would strip all SVG\n // elements) is fine here because sanitizeSvgMarkup already removed the\n // actual attack surface above - never bypass on the raw fetched text.\n this.sanitizer.bypassSecurityTrustHtml(sanitizeSvgMarkup(text)),\n ),\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n ApplicationRef,\n Component,\n computed,\n effect,\n ElementRef,\n EmbeddedViewRef,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n attachOverlayPosition,\n CheckboxChangeEvent,\n CheckboxComponent,\n InputTextDirective,\n OverlayStackService,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [\n FormsModule,\n UiIconComponent,\n CheckboxComponent,\n InputTextDirective,\n TranslatePipe,\n ],\n templateUrl: './lazy-multi-select.component.html',\n providers: [provideValueAccessor(LazyMultiSelectComponent)],\n})\nexport class LazyMultiSelectComponent\n extends BaseFormControl<string[] | null>\n implements OnDestroy\n{\n private readonly document = inject(DOCUMENT);\n private readonly appRef = inject(ApplicationRef);\n private readonly overlayStack = inject(OverlayStackService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly onDocumentClickBound = this.handleDocumentClick.bind(this);\n\n // View references\n readonly pSelectRef =\n viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n readonly overlayTemplate =\n viewChild.required<TemplateRef<unknown>>('overlayTpl');\n\n // Portal state\n private overlayViewRef: EmbeddedViewRef<unknown> | null = null;\n private detachOverlayPosition: (() => void) | null = null;\n\n // Inputs\n readonly placeHolder = input<string>('');\n readonly showClear = input<boolean>(true);\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.multi.select.placeholder');\n });\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n /**\n * Full option objects for the currently selected values, supplied by the\n * caller (or a subclass like UserMultiSelectComponent). Pinned into\n * `mergedDataList` (deduped by `value`) so chips/labels/checkboxes survive\n * a later search/page reload that replaces `selectDataList()` without the\n * selection having changed. This component renders its own overlay list\n * (it does not build on f-multiselect), so the merge has to happen here.\n */\n readonly selectedObjects = input<IDropDown[]>([]);\n\n // Two-way bound value\n override readonly value = model<string[] | null>(null);\n\n private readonly selectedObjectEntries = computed<IDropDown[]>(() => {\n const vals = this.value() ?? [];\n return this.selectedObjects().filter((o) => vals.includes(o.value));\n });\n\n readonly mergedDataList = computed<IDropDown[]>(() => {\n const base = this.selectDataList();\n const extras = this.selectedObjectEntries().filter(\n (sel) => !base.some((o) => o.value === sel.value),\n );\n return extras.length ? [...extras, ...base] : base;\n });\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly openOptions = signal(false);\n\n // Computed values\n readonly selectedValueDisplay = computed(() => {\n const selectedValues = this.value() ?? [];\n if (selectedValues.length === 0) return '';\n if (selectedValues.length > 3) {\n return this.t('shared.multi.select.items.selected', {\n count: selectedValues.length,\n });\n }\n return this.mergedDataList()\n .filter((item) => selectedValues.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n });\n\n readonly hasSelectedValues = computed(() => {\n const selectedValues = this.value() ?? [];\n return selectedValues.length > 0;\n });\n\n readonly isSelectAll = computed(() => {\n const selectedValues = this.value() ?? [];\n const allValues = this.mergedDataList().map((item) => item.value);\n if (selectedValues.length === 0 || allValues.length === 0) return false;\n return allValues.every((val) => selectedValues.includes(val));\n });\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Document click listener for closing dropdown\n afterNextRender({\n write: () => {\n this.document.addEventListener('click', this.onDocumentClickBound);\n },\n });\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('click', this.onDocumentClickBound);\n this.closeOverlay();\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n onSelectClick(): void {\n if (this.disabled() || !this.isEditMode()) return;\n\n if (this.openOptions()) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n }\n\n private openOverlay(): void {\n this.pSelectRef()?.nativeElement.classList.add('p-focus');\n this.openOptions.set(true);\n\n // Create embedded view and append to body (portal pattern)\n this.overlayViewRef = this.overlayTemplate().createEmbeddedView({});\n this.appRef.attachView(this.overlayViewRef);\n // Zoneless CD only flushes this view on the next scheduler tick, so\n // without a synchronous detectChanges() here the panel is still just its\n // empty shell (no search box, no @for rows) at the moment we measure it\n // below. attachOverlayPosition() would place it for that near-zero\n // height, then the ResizeObserver correction a frame later — once the\n // real content has rendered — snaps it to its true (often much taller)\n // size, which is the visible \"blip down and up\" the panel does on open.\n this.overlayViewRef.detectChanges();\n\n const overlayEl = this.overlayViewRef.rootNodes[0] as HTMLElement;\n this.document.body.appendChild(overlayEl);\n\n const anchorEl = this.pSelectRef()?.nativeElement;\n if (!anchorEl) return;\n overlayEl.style.position = 'fixed';\n overlayEl.style.zIndex = `${this.overlayStack.open()}`;\n // Flips above the field and caps its height against the viewport, so a list\n // that grows after its lazy page arrives is never cut off by the screen edge.\n this.detachOverlayPosition = attachOverlayPosition(anchorEl, overlayEl, {\n gap: 2,\n matchAnchorWidth: true,\n });\n }\n\n private closeOverlay(): void {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\n\n this.detachOverlayPosition?.();\n this.detachOverlayPosition = null;\n\n if (this.overlayViewRef) {\n this.appRef.detachView(this.overlayViewRef);\n this.overlayViewRef.destroy();\n this.overlayViewRef = null;\n }\n }\n\n onOverlayClick(event: Event): void {\n event.stopPropagation();\n }\n\n private handleDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n const clickedInSelect = this.pSelectRef()?.nativeElement.contains(target);\n const clickedInOverlay =\n this.overlayViewRef?.rootNodes[0]?.contains(target);\n\n if (!clickedInSelect && !clickedInOverlay) {\n this.closeOverlay();\n this.markAsTouched();\n }\n }\n\n isSelected(data: IDropDown): boolean {\n return this.value()?.includes(data.value) ?? false;\n }\n\n selectValue(event: CheckboxChangeEvent, option: IDropDown): void {\n const previousValue = this.value() ?? [];\n if (event.checked) {\n if (!previousValue.includes(option.value)) {\n this.value.set([...previousValue, option.value]);\n }\n } else {\n this.value.set(previousValue.filter((v) => v !== option.value));\n }\n }\n\n changeSelectAll(event: CheckboxChangeEvent): void {\n if (event.checked) {\n this.value.set(this.mergedDataList().map((item) => item.value));\n } else {\n this.value.set([]);\n }\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div\n class=\"w-full flex items-center justify-between px-3 py-2 text-sm rounded-lg border border-(--f-form-field-border-color) bg-(--f-form-field-background) cursor-pointer min-h-[34px]\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.opacity-50]=\"disabled()\"\n [class.pointer-events-none]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span\n class=\"flex-1 truncate text-(--f-form-field-color)\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n >\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"flex-1 truncate text-(--f-form-field-placeholder-color)\">{{\n displayPlaceholder()\n }}</span>\n }\n\n @if (showClear() && hasSelectedValues()) {\n <span\n class=\"inline-flex items-center px-1 text-(--f-text-muted-color) hover:text-(--f-text-hover-color) cursor-pointer\"\n (click)=\"clear($event)\"\n >\n <ui-icon name=\"times\" class=\"text-xs\"></ui-icon>\n </span>\n }\n\n @if (isEditMode()) {\n <span\n class=\"inline-flex items-center px-1 text-(--f-form-field-placeholder-color)\"\n >\n <ui-icon name=\"chevron-down\" class=\"text-xs\"></ui-icon>\n </span>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div\n class=\"flex flex-col max-h-[250px] overflow-hidden\"\n (click)=\"onOverlayClick($event)\"\n >\n <div\n class=\"p-3 border-b border-(--f-content-border-color) bg-(--f-content-hover-background) shrink-0 w-full flex flex-row gap-2 items-center\"\n >\n <f-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n fInputText\n class=\"w-full\"\n [placeholder]=\"'shared.search' | translate\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div\n class=\"flex-1 overflow-y-auto min-h-0 w-full\"\n (scroll)=\"onScroll($event)\"\n >\n <ul\n class=\"m-0 py-1 list-none bg-(--f-overlay-popover-background) text-(--f-text-color) w-full\"\n >\n @for (data of mergedDataList(); track data.value) {\n @let isItemSelected = isSelected(data);\n <li\n class=\"px-3 py-2 cursor-pointer transition-colors flex flex-row gap-2 items-center text-sm\"\n [class]=\"\n isItemSelected\n ? 'bg-primary/10 text-primary'\n : 'text-(--f-text-color) hover:bg-(--f-content-hover-background)'\n \"\n >\n <f-checkbox\n [binary]=\"true\"\n [ngModel]=\"isItemSelected\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n</ng-template>\n","import {\n afterNextRender,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { InputTextDirective, SelectComponent } from '@flusys/ng-ui';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [\n FormsModule,\n SelectComponent,\n InputTextDirective,\n EditModeElementChangerDirective,\n ],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly onScrollBound = this.onScroll.bind(this);\n private scrollTargetEl: HTMLElement | null = null;\n private isDestroyed = false;\n\n // View references\n readonly scrollContainer =\n viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\n // Inputs\n readonly placeHolder = input<string>('');\n readonly showClear = input<boolean>(true);\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.select.placeholder');\n });\n readonly optionLabel = input.required<string>();\n readonly optionValue = input.required<string>();\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n /**\n * Full option object for the current value, supplied by the caller (or a\n * subclass like UserSelectComponent). Forwarded to f-select's own\n * `selectedObject` input so the label survives a later search/page reload\n * that replaces `selectDataList()` without the value having changed.\n */\n readonly selectedObject = input<unknown | null>(null);\n\n // Two-way bound value\n override readonly value = model<string | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly isPanelShow = signal(false);\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Cleanup scroll listener on destroy\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n }\n });\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n showPanel(): void {\n if (this.disabled()) return;\n this.isPanelShow.update((prev) => !prev);\n const isNowVisible = this.isPanelShow();\n\n if (isNowVisible) {\n afterNextRender(\n () => {\n if (this.isDestroyed) return;\n const containerEl = this.scrollContainer().nativeElement;\n const target = containerEl.querySelector<HTMLElement>(\n '[data-select-list]',\n );\n if (target) {\n target.addEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = target;\n }\n },\n { injector: this.injector },\n );\n } else if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = null;\n }\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div #scrollContainer class=\"lib-scroll-container\">\n <f-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"showClear()\"\n [placeholder]=\"displayPlaceholder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n [selectedObject]=\"selectedObject()\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"markAsTouched()\"\n >\n <ng-template #filter let-filter>\n <input\n fInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </f-select>\n</div>\n","import { Component, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { UiIconComponent } from '@flusys/ng-ui';\n\nexport interface RouterTabItem {\n id: string | number;\n label: string;\n icon?: string;\n route: string | unknown[];\n routerLinkActiveExact?: boolean;\n}\n\n@Component({\n selector: 'lib-router-tabs',\n imports: [RouterLink, RouterLinkActive, UiIconComponent],\n host: { class: 'block' },\n styles: [`\n .router-tabs-scroll { -ms-overflow-style: none; scrollbar-width: none; }\n .router-tabs-scroll::-webkit-scrollbar { display: none; }\n `],\n template: `\n <div class=\"router-tabs-scroll flex gap-1 border-b border-(--f-content-border-color) overflow-x-auto flex-nowrap\">\n @for (tab of tabs(); track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"router-tab-active\"\n [routerLinkActiveOptions]=\"{ exact: tab.routerLinkActiveExact ?? false }\"\n class=\"flex items-center gap-2 px-4 py-2 rounded-t-lg cursor-pointer transition-colors text-(--f-text-muted-color) no-underline border-b-2 border-transparent -mb-px hover:bg-(--f-content-hover-background) [&.router-tab-active]:text-primary [&.router-tab-active]:border-primary [&.router-tab-active]:bg-(--f-content-hover-background) whitespace-nowrap shrink-0\"\n >\n @if (tab.icon) {\n <ui-icon [name]=\"tab.icon\"></ui-icon>\n }\n <span>{{ tab.label }}</span>\n </a>\n }\n </div>\n `,\n})\nexport class RouterTabsComponent {\n readonly tabs = input<RouterTabItem[]>([]);\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { IDropDown } from '../../interfaces/common-data.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport {\n IUserBasicInfo,\n IUserProvider,\n IUserSelectFilter,\n LoadUsersFn,\n} from '../../interfaces/providers.interface';\nimport { TranslateService } from '../../services/translate.service';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * Base class for user selection components.\n * Provides shared user loading, pagination, and search functionality.\n *\n * Subclasses must implement:\n * - `setupValueEffect()` to track value changes and emit selection events\n */\n@Directive()\nexport abstract class BaseUserSelectComponent {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly injector = inject(Injector);\n protected readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n protected readonly translateAdapter = inject(TranslateService);\n protected abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\n readonly placeHolder = input<string>('');\n readonly isEditMode = input.required<boolean>();\n readonly filterActive = input<boolean>(true);\n readonly additionalFilters = input<Record<string, unknown>>({});\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Outputs\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly users = signal<IUserBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({\n pageSize: DEFAULT_PAGE_SIZE,\n currentPage: 0,\n });\n readonly searchTerm = signal('');\n\n // Computed dropdown data\n readonly dropdownUsers = computed<IDropDown[]>(() =>\n this.users().map((user) => this.toDropDown(user)),\n );\n\n // Every user this component has ever seen, keyed by id. Search/pagination\n // replace `users()` wholesale, so without this a user selected before a\n // later search would silently disappear from `dropdownUsers()` even though\n // the selection itself hasn't changed.\n private readonly _knownUsers = signal<Map<string, IUserBasicInfo>>(\n new Map(),\n );\n\n protected toDropDown(user: IUserBasicInfo): IDropDown {\n return { label: user.name || user.email, value: user.id };\n }\n\n /** Resolves a single previously-seen user id, even if it's no longer in `users()`. */\n protected resolveKnownUser(id: string | null | undefined): IDropDown | null {\n const user = this.resolveKnownUserRaw(id);\n return user ? this.toDropDown(user) : null;\n }\n\n /** Resolves multiple previously-seen user ids, even if no longer in `users()`. */\n protected resolveKnownUsers(ids: string[]): IDropDown[] {\n return this.resolveKnownUsersRaw(ids).map((u) => this.toDropDown(u));\n }\n\n /** Same as resolveKnownUser, but returns the raw IUserBasicInfo (for outputs like userSelected). */\n protected resolveKnownUserRaw(\n id: string | null | undefined,\n ): IUserBasicInfo | null {\n if (!id) return null;\n return this._knownUsers().get(id) ?? null;\n }\n\n /** Same as resolveKnownUsers, but returns the raw IUserBasicInfo[] (for outputs like usersSelected). */\n protected resolveKnownUsersRaw(ids: string[]): IUserBasicInfo[] {\n const known = this._knownUsers();\n return ids\n .map((id) => known.get(id))\n .filter((u): u is IUserBasicInfo => !!u);\n }\n\n // Called synchronously wherever `users()` gains new entries (fetchUsers),\n // rather than via an effect watching `users()`: fetchUsers is invoked from\n // afterNextRender's callback, whose async continuation runs outside the\n // normal change-detection flush cycle, so an effect there is not\n // guaranteed to re-run promptly when the fetch resolves.\n private rememberUsers(list: IUserBasicInfo[]): void {\n if (!list.length) return;\n this._knownUsers.update((map) => {\n let changed = false;\n const next = new Map(map);\n for (const u of list) {\n if (next.get(u.id) !== u) {\n next.set(u.id, u);\n changed = true;\n }\n }\n return changed ? next : map;\n });\n }\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.user.select.placeholder');\n });\n\n constructor() {\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n\n // Load initial users after render\n afterNextRender(() => {\n this.fetchUsers();\n });\n\n // Setup value change tracking (implemented by subclass)\n this.setupValueEffect();\n }\n\n /** Setup effect to track value changes and emit selection events */\n protected abstract setupValueEffect(): void;\n\n handleSearch(search: string): void {\n this.searchTerm.set(search);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n handlePagination(pagination: IPagination): void {\n this.pagination.set(pagination);\n this.fetchUsers(true);\n }\n\n /** Reload users (useful when filters change externally) */\n reload(): void {\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n protected async fetchUsers(append = false): Promise<void> {\n if (this.isLoading()) return;\n\n // Cancel previous request\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IUserSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n ...this.additionalFilters(),\n };\n\n // Use custom loadUsers if provided, otherwise use USER_PROVIDER\n const customLoadUsers = this.loadUsers();\n const response = await firstValueFrom(\n customLoadUsers\n ? customLoadUsers(filter)\n : this.loadUsersFromProvider(filter),\n );\n\n if (response.success && response.data) {\n if (append) {\n this.users.update((current) => [...current, ...response.data!]);\n } else {\n this.users.set(response.data);\n }\n this.total.set(response.meta?.total);\n this.rememberUsers(response.data);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /** Load users from USER_PROVIDER with active filter */\n private loadUsersFromProvider(filter: IUserSelectFilter) {\n const extraFilters = {\n isActive: this.filterActive() ? true : undefined,\n ...this.additionalFilters(),\n };\n return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n ...extraFilters,\n })\n .pipe(\n map((res) => ({\n ...res,\n data: res.data?.map((u) => ({\n id: u.id,\n name: u.name,\n email: u.email,\n })),\n })),\n );\n }\n\n protected t(\n key: string,\n variables?: Record<string, string | number>,\n ): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [showClear]=\"showClear()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n [selectedObjects]=\"selectedObjects()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserMultiSelectComponent extends BaseUserSelectComponent {\n // Inputs\n readonly showClear = input<boolean>(true);\n\n // Two-way bound value\n readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly usersSelected = output<IUserBasicInfo[]>();\n\n readonly selectedObjects = computed(() =>\n this.resolveKnownUsers(this.value() ?? []),\n );\n\n protected override setupValueEffect(): void {\n // Emit selected users when value changes. Resolves via the sticky known-\n // users cache (not the transient users() page) so this stays correct\n // across searches, matching selectedObjects()'s behavior above.\n effect(() => {\n const selectedIds = this.value() ?? [];\n const selectedUsers = this.resolveKnownUsersRaw(selectedIds);\n untracked(() => {\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [showClear]=\"showClear()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n [selectedObject]=\"selectedObject()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserSelectComponent extends BaseUserSelectComponent {\n // Inputs\n readonly showClear = input<boolean>(true);\n\n // Two-way bound value\n readonly value = model<string | null>(null);\n\n // Outputs\n readonly userSelected = output<IUserBasicInfo | null>();\n\n readonly selectedObject = computed(() => this.resolveKnownUser(this.value()));\n\n protected override setupValueEffect(): void {\n // Emit selected user when value changes. Resolves via the sticky known-\n // users cache (not the transient users() page) so this stays correct\n // across searches, matching selectedObject()'s behavior above.\n effect(() => {\n const selectedId = this.value();\n const user = this.resolveKnownUserRaw(selectedId);\n untracked(() => {\n this.userSelected.emit(user);\n });\n });\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport {\n evaluatePermission,\n hasAllPermissions,\n hasAnyPermission,\n} from '../utils/permission-evaluator.util';\n\ntype EvaluateFn = (userPermissions: string[]) => boolean;\n\nfunction createGuard(\n guardName: string,\n redirectTo: string,\n evaluate: EvaluateFn,\n getDenialMessage: () => string,\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n if (!permissionValidator.isLoaded()) {\n if (isDevMode()) {\n console.log(`[${guardName}] Permissions not loaded, denying access`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n if (!evaluate(permissionValidator.permissions())) {\n if (isDevMode()) {\n console.log(`[${guardName}] ${getDenialMessage()}`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * Permission Guard - Single permission or ILogicNode check.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [permissionGuard('user.view')] }\n * { path: 'admin', canActivate: [permissionGuard(logicNode, '/access-denied')] }\n * ```\n */\nexport function permissionGuard(\n permission: string | ILogicNode,\n redirectTo = '/',\n): CanActivateFn {\n const code = typeof permission === 'string' ? permission : 'complex-logic';\n return createGuard(\n 'permissionGuard',\n redirectTo,\n (perms) => evaluatePermission(permission, perms),\n () => `Access denied - missing: ${code}`,\n );\n}\n\n/**\n * Any Permission Guard (OR logic) - Access if user has ANY permission.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }\n * ```\n */\nexport function anyPermissionGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[anyPermissionGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'anyPermissionGuard',\n redirectTo,\n (perms) => hasAnyPermission(permissions, perms),\n () => `Access denied - missing any of: ${permissions.join(', ')}`,\n );\n}\n\n/**\n * All Permissions Guard (AND logic) - Access only if user has ALL permissions.\n *\n * @example\n * ```typescript\n * { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }\n * ```\n */\nexport function allPermissionsGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[allPermissionsGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'allPermissionsGuard',\n redirectTo,\n (perms) => hasAllPermissions(permissions, perms),\n () => `Access denied - missing all of: ${permissions.join(', ')}`,\n );\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AUTH_STATE_PROVIDER } from '../tokens/provider.tokens';\n\n/**\n * Authenticated Guard - Redirects to login when the user isn't authenticated.\n *\n * Uses AUTH_STATE_PROVIDER so feature packages can gate routes requiring\n * authentication without depending on ng-auth directly.\n *\n * @example\n * ```typescript\n * { path: 'notifications', canActivate: [authenticatedGuard()] }\n * ```\n */\nexport function authenticatedGuard(redirectTo = '/auth/login'): CanActivateFn {\n return (_route, state) => {\n const authStateProvider = inject(AUTH_STATE_PROVIDER);\n const router = inject(Router);\n\n if (!authStateProvider.isAuthenticated()) {\n return router.createUrlTree([redirectTo], {\n queryParams: { returnUrl: state.url },\n });\n }\n\n return true;\n };\n}\n","function getOffsetMinutes(utcDate: Date, timezone: string): number {\n const extract = (tz: string): number => {\n const parts = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n }).formatToParts(utcDate);\n\n const p = Object.fromEntries(\n parts.filter(x => x.type !== 'literal').map(x => [x.type, parseInt(x.value)]),\n );\n\n return Date.UTC(p['year'], p['month'] - 1, p['day'], p['hour'], p['minute'], p['second']);\n };\n\n return (extract(timezone) - extract('UTC')) / 60_000;\n}\n\nexport function localToUtc(dateStr: string, timeStr: string, timezone: string): Date {\n const [year, month, day] = dateStr.split('-').map(Number);\n const [hours, minutes] = timeStr.split(':').map(Number);\n\n const approx = new Date(Date.UTC(year, month - 1, day, hours, minutes, 0));\n const offset = getOffsetMinutes(approx, timezone);\n const utcDate = new Date(approx.getTime() - offset * 60_000);\n\n // DST boundary guard: re-check offset after adjustment\n const finalOffset = getOffsetMinutes(utcDate, timezone);\n return finalOffset !== offset\n ? new Date(approx.getTime() - finalOffset * 60_000)\n : utcDate;\n}\n\nexport function utcToLocal(\n utcDate: Date | string,\n timezone: string,\n): { date: string; time: string; display: string } {\n const d = typeof utcDate === 'string' ? new Date(utcDate) : utcDate;\n\n const parts = new Intl.DateTimeFormat('en-CA', {\n timeZone: timezone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).formatToParts(d);\n\n const p = Object.fromEntries(\n parts.filter(x => x.type !== 'literal').map(x => [x.type, x.value]),\n );\n\n // en-CA formats midnight hour as '24' — normalize to '00'\n const hour = p['hour'] === '24' ? '00' : p['hour'];\n\n return {\n date: `${p['year']}-${p['month']}-${p['day']}`,\n time: `${hour}:${p['minute']}`,\n display: new Intl.DateTimeFormat(undefined, {\n timeZone: timezone,\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(d),\n };\n}\n\nexport function formatInTimezone(\n utcDate: Date | string,\n timezone: string,\n options: Intl.DateTimeFormatOptions = { dateStyle: 'medium', timeStyle: 'short' },\n): string {\n const d = typeof utcDate === 'string' ? new Date(utcDate) : utcDate;\n return new Intl.DateTimeFormat(undefined, { ...options, timeZone: timezone }).format(d);\n}\n\nexport function getUserTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n","// Constants\nexport * from './constants/messages';\nexport * from './constants/permissions';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/providers.interface';\nexport * from './interfaces/response-payload.interface';\n\n// Enums\nexport * from './enums/icon-type.enum';\n\n// Services\nexport * from './services/cookie.service';\nexport * from './services/favicon.service';\nexport * from './services/file-url.service';\nexport * from './services/permission-validator.service';\nexport * from './services/platform.service';\nexport * from './services/translate.service';\n\n// Directives\nexport * from './directives/edit-mode-element-changer.directive';\nexport * from './directives/has-permission.directive';\nexport * from './directives/is-empty-image.directive';\nexport * from './directives/prevent-default.directive';\n\n// Pipes\nexport * from './pipes/translate.pipe';\n// Interceptors\nexport * from './interceptors/error-catching.interceptor';\n\n// Resolvers\nexport * from './resolvers/translation-module.resolver';\n\n// Classes\nexport * from './classes/api-resource.class';\nexport * from './classes/base-form-control.class';\n\n// Components\nexport * from './components/base-form/base-form-template.directive';\nexport * from './components/base-form/base-form.component';\nexport * from './components/base-form/base-form.interfaces';\nexport * from './components/base-list/base-list-template.directive';\nexport * from './components/base-list/base-list.component';\nexport * from './components/base-list/base-list.interfaces';\nexport * from './components/file-selector-dialog/file-selector-dialog.component';\nexport * from './components/file-uploader/file-uploader.component';\nexport * from './components/icon/icon.component';\nexport * from './components/inline-svg/inline-svg.component';\nexport * from './components/lazy-multi-select/lazy-multi-select.component';\nexport * from './components/lazy-select/lazy-select.component';\nexport * from './components/router-tabs/router-tabs.component';\nexport * from './components/user-multi-select/user-multi-select.component';\nexport * from './components/user-select/base-user-select.class';\nexport * from './components/user-select/user-select.component';\n\n// Tokens\nexport * from './tokens/provider.tokens';\n\n// Guards\nexport * from './guards/index';\n\n// Utils\nexport * from './utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","catchError","DEFAULT_PAGE_SIZE","map"],"mappings":"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"}
1
+ {"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/messages.ts","../../../projects/ng-shared/constants/permissions.ts","../../../projects/ng-shared/interfaces/file-select.interface.ts","../../../projects/ng-shared/enums/icon-type.enum.ts","../../../projects/ng-shared/services/platform.service.ts","../../../projects/ng-shared/services/cookie.service.ts","../../../projects/ng-shared/services/file-url.service.ts","../../../projects/ng-shared/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.service.ts","../../../projects/ng-shared/services/translate.service.ts","../../../projects/ng-shared/services/favicon.service.ts","../../../projects/ng-shared/directives/edit-mode-element-changer.directive.ts","../../../projects/ng-shared/directives/has-permission.directive.ts","../../../projects/ng-shared/directives/is-empty-image.directive.ts","../../../projects/ng-shared/directives/prevent-default.directive.ts","../../../projects/ng-shared/pipes/translate.pipe.ts","../../../projects/ng-shared/interceptors/error-catching.interceptor.ts","../../../projects/ng-shared/resolvers/translation-module.resolver.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/tokens/provider.tokens.ts","../../../projects/ng-shared/components/action-select/base-action-select.class.ts","../../../projects/ng-shared/components/action-select/action-multi-select.component.ts","../../../projects/ng-shared/components/action-select/action-select.component.ts","../../../projects/ng-shared/components/base-form/base-form-template.directive.ts","../../../projects/ng-shared/components/base-form/base-form.component.ts","../../../projects/ng-shared/components/base-form/base-form.component.html","../../../projects/ng-shared/components/base-list/base-list-template.directive.ts","../../../projects/ng-shared/components/base-list/base-list.component.ts","../../../projects/ng-shared/components/base-list/base-list.component.html","../../../projects/ng-shared/utils/scroll-pagination.util.ts","../../../projects/ng-shared/components/file-uploader/file-uploader.component.ts","../../../projects/ng-shared/components/file-selector-dialog/file-selector-dialog.component.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/components/inline-svg/inline-svg.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.ts","../../../projects/ng-shared/components/lazy-multi-select/lazy-multi-select.component.html","../../../projects/ng-shared/components/lazy-select/lazy-select.component.ts","../../../projects/ng-shared/components/lazy-select/lazy-select.component.html","../../../projects/ng-shared/components/router-tabs/router-tabs.component.ts","../../../projects/ng-shared/components/user-select/base-user-select.class.ts","../../../projects/ng-shared/components/user-multi-select/user-multi-select.component.ts","../../../projects/ng-shared/components/user-select/user-select.component.ts","../../../projects/ng-shared/guards/permission.guard.ts","../../../projects/ng-shared/guards/authenticated.guard.ts","../../../projects/ng-shared/utils/date-time.util.ts","../../../projects/ng-shared/utils/message-ref.util.ts","../../../projects/ng-shared/utils/html-escape.util.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["export const SHARED_MESSAGES: Record<string, string> = {\n // Backend shared auth key (used by exception filters)\n 'auth.token.required': 'Refresh token is required',\n 'auth.token.invalid': 'Invalid token',\n 'auth.token.expired': 'Token has expired',\n 'auth.token.revoked': 'Token has been revoked',\n 'auth.session.expired.title': 'Session Expired',\n 'entity.belongs.another.company': '{{entity}} belongs to another company',\n 'auth.company.no.access': 'No access to this company',\n\n // Backend error keys (used by exception filters)\n 'error.not.found': 'Resource not found',\n 'error.validation': 'Validation failed',\n 'error.unauthorized': 'Unauthorized access',\n 'error.forbidden': 'Access forbidden',\n 'error.conflict': '{{entity}} with this {{field}} already exists',\n 'error.db.foreign.key': \"Invalid reference for '{{field}}'\",\n 'error.db.not.null': \"Required field '{{field}}' cannot be null\",\n 'error.db.invalid.input': \"Invalid {{type}} value\",\n 'error.db.value.too.long': \"Value too long for '{{field}}'\",\n 'error.db.check.constraint': '{{entity}} violates a validation rule',\n 'error.db.deadlock': 'The request could not be completed due to a conflict, please try again',\n 'error.internal': 'Internal server error',\n 'error.service.unavailable': 'Service temporarily unavailable',\n 'error.unknown': 'Unknown error occurred',\n 'error.http': 'HTTP error',\n 'error.generic': 'An error occurred',\n 'error.permission.system.unavailable':\n 'Permission system temporarily unavailable. Please try again later.',\n 'error.insufficient.permissions':\n 'Missing required permissions: {{permissions}}',\n 'error.insufficient.permissions.or':\n 'Requires at least one of: {{permissions}}',\n 'error.no.permissions.found':\n 'No permissions found. Please contact administrator.',\n 'error.endpoint.disabled': 'Endpoint {{endpoint}} is disabled',\n\n // Backend system keys (infrastructure errors)\n 'system.repository.not.available': '{{entity}} repository not available',\n 'system.datasource.not.available': 'Data source not available',\n 'system.database.config.not.available':\n 'Database configuration not available',\n 'system.service.not.available':\n 'Service \"{{provider}}\" not available. Available: {{available}}',\n 'system.config.required': 'Configuration required',\n 'system.internal.error': 'Failed to initialize \"{{provider}}\": {{error}}',\n 'system.duplicate.request': 'Duplicate request detected',\n 'system.invalid.tenant.id': 'Invalid tenant ID',\n 'system.tenant.not.found': 'Tenant \"{{tenantId}}\" not found',\n 'system.tenant.header.required':\n 'Tenant not found. Ensure \"{{header}}\" header is set.',\n 'system.missing.parameter': 'Missing required parameter: {{key}}',\n 'system.sdk.not.installed':\n 'Required SDK \"{{sdk}}\" not installed. Run: npm install {{sdk}}',\n 'system.path.traversal.detected': 'Path traversal detected',\n 'system.invalid.file.key': 'Invalid file key',\n\n // shared feedback & confirmation keys (used across all list/form components)\n 'shared.success': 'Success',\n 'shared.error': 'Error',\n 'shared.info': 'Info',\n 'shared.warning': 'Warning',\n 'shared.confirm.delete.header': 'Confirm Delete',\n 'shared.validation.error': 'Validation Error',\n 'shared.fill.required.fields': 'Please fill in all required fields',\n\n // components/base-list/base-list.component.ts\n 'shared.no.data': 'No data found',\n 'shared.pagination.report': 'Showing {first} to {last} of {totalRecords} records',\n\n // components/base-form/base-form.component.ts\n 'shared.required': 'is required',\n\n // components/file-selector-dialog/file-selector-dialog.component.ts\n 'shared.file.selector.provider.not.configured':\n 'File selection not configured.',\n 'shared.file.selector.add.provider': 'Add',\n 'shared.close': 'Close',\n 'shared.file.selector.search.placeholder': 'Search files...',\n 'shared.file.selector.all.folders': 'All Folders',\n 'shared.file.selector.all.storage': 'All Storage',\n 'shared.default': 'Default',\n 'shared.file.selector.selected': '{{count}} selected',\n 'shared.file.selector.no.files': 'No files found',\n 'shared.cancel': 'Cancel',\n 'shared.file.selector.select.multiple': 'Select ({{count}})',\n 'shared.file.selector.select': 'Select',\n 'shared.file.selector.select.files': 'Select Files',\n 'shared.file.selector.select.file': 'Select File',\n\n // components/file-uploader/file-uploader.component.ts\n 'shared.upload.provider.not.configured':\n 'File upload not configured. Add {{provider}} to your app config.',\n 'shared.upload.uploading': 'Uploading {{fileName}}...',\n 'shared.upload.drop.multiple': 'Drop files here or click to upload',\n 'shared.upload.drop.single': 'Drop file here or click to upload',\n 'shared.upload.allowed.types': 'Allowed:',\n 'shared.upload.all.types.allowed': 'All file types allowed',\n 'shared.upload.max.size': '(Max {{size}}MB)',\n 'shared.file.uploader.no.upload.function':\n 'No upload function available. Configure FILE_PROVIDER or provide uploadFile input.',\n 'shared.file.type.images': 'Images',\n 'shared.file.type.documents': 'Documents',\n 'shared.file.type.videos': 'Videos',\n 'shared.file.type.audio': 'Audio',\n 'shared.upload.invalid.type': 'Invalid File Type',\n 'shared.upload.file.too.large': 'File Too Large',\n 'shared.size.mb': 'MB',\n 'shared.upload.files': 'files',\n 'shared.upload.complete': 'Upload Complete',\n 'shared.upload.failed': 'Upload failed',\n 'shared.upload.files.uploaded': '{{count}} file(s) uploaded successfully',\n 'shared.size.kb': 'KB',\n\n // components/lazy-select/lazy-select.component.ts\n 'shared.select.placeholder': 'Select Option',\n\n // components/lazy-multi-select/lazy-multi-select.component.ts\n 'shared.multi.select.placeholder': 'Select Options',\n 'shared.multi.select.items.selected': '{{count}} Items Selected',\n\n // components/user-select/base-user-select.class.ts\n 'shared.user.select.placeholder': 'Select User',\n\n // components/action-select/action-select.component.ts\n 'shared.action.select.placeholder': 'Select a permission',\n 'shared.action.select.placeholder.multiple': 'Select permissions',\n 'shared.action.select.type.code': 'Type a permission code and press Enter',\n 'shared.action.select.empty': 'No permissions found',\n\n // cross-package shared keys (shared.* — used across feature packages)\n 'shared.actions': 'Actions',\n 'shared.active': 'Active',\n 'shared.add': 'Add',\n 'shared.created': 'Created',\n 'shared.all': 'All',\n 'shared.assigned': 'Assigned',\n 'shared.back': 'Back',\n 'shared.code': 'Code',\n 'shared.company': 'Company',\n 'shared.confirm': 'Confirm',\n 'shared.confirm.delete': 'Are you sure you want to delete this item?',\n 'shared.confirm.delete.item': 'Are you sure you want to delete \"{{name}}\"?',\n 'shared.continue': 'Continue',\n 'shared.create': 'Create',\n 'shared.delete': 'Delete',\n 'shared.description': 'Description',\n 'shared.description.placeholder': 'Enter description',\n 'shared.deselect.all': 'Deselect All',\n 'shared.display.order': 'Display Order',\n 'shared.display.order.placeholder': 'Enter display order',\n 'shared.edit': 'Edit',\n 'shared.error.bad.request': 'Bad Request',\n 'shared.error.conflict': 'Conflict',\n 'shared.error.not.found': 'Not Found',\n 'shared.error.server.error': 'Server Error',\n 'shared.error.service.unavailable': 'Service Unavailable',\n 'shared.error.validation.error': 'Validation Error',\n 'shared.inactive': 'Inactive',\n 'shared.invalid.email': 'Please enter a valid email address',\n 'shared.loading.actions': 'Loading actions...',\n 'shared.loading.roles': 'Loading roles...',\n 'shared.min.characters': 'Min. {{count}} characters',\n 'shared.na': 'N/A',\n 'shared.name': 'Name',\n 'shared.name.required': 'Name is required',\n 'shared.no': 'No',\n 'shared.no.results': 'No results found',\n 'shared.not.assigned': 'Not Assigned',\n 'shared.pending.changes': 'Pending Changes',\n 'shared.read.only': 'Read Only',\n 'shared.remove': 'Remove',\n 'shared.save': 'Save',\n 'shared.save.changes': 'Save Changes',\n 'shared.search': 'Search',\n 'shared.select': 'Select...',\n 'shared.select.all': 'Select All',\n 'shared.select.deselect.all': 'Select/Deselect All',\n 'shared.status': 'Status',\n 'shared.to.add': 'To Add',\n 'shared.to.assign': 'To Assign',\n 'shared.to.remove': 'To Remove',\n 'shared.to.whitelist': 'To Whitelist',\n 'shared.type': 'Type',\n 'shared.unexpected.error': 'An unexpected error occurred',\n 'shared.unknown': 'Unknown',\n 'shared.update': 'Update',\n 'shared.upload': 'Upload',\n 'shared.validation.required': '{{field}} is required',\n 'shared.verified': 'Verified',\n 'shared.unverified': 'Un-Verified',\n 'shared.view': 'View',\n 'shared.view.details': 'View Details',\n 'shared.yes': 'Yes',\n 'shared.validation': 'Validation',\n\n};\n","// ==================== AUTH MODULE ====================\n\nexport const USER_PERMISSIONS = {\n CREATE: 'user.create',\n READ: 'user.read',\n UPDATE: 'user.update',\n DELETE: 'user.delete',\n LOOKUP: 'user.lookup',\n} as const;\n\nexport const COMPANY_PERMISSIONS = {\n CREATE: 'company.create',\n READ: 'company.read',\n UPDATE: 'company.update',\n DELETE: 'company.delete',\n} as const;\n\nexport const BRANCH_PERMISSIONS = {\n CREATE: 'branch.create',\n READ: 'branch.read',\n UPDATE: 'branch.update',\n DELETE: 'branch.delete',\n} as const;\n\nexport const SOCIAL_AUTH_CONFIG_PERMISSIONS = {\n CREATE: 'social-config.create',\n READ: 'social-config.read',\n UPDATE: 'social-config.update',\n DELETE: 'social-config.delete',\n} as const;\n\n// ==================== IAM MODULE ====================\n\nexport const ACTION_PERMISSIONS = {\n CREATE: 'action.create',\n READ: 'action.read',\n UPDATE: 'action.update',\n DELETE: 'action.delete',\n} as const;\n\nexport const ROLE_PERMISSIONS = {\n CREATE: 'role.create',\n READ: 'role.read',\n UPDATE: 'role.update',\n DELETE: 'role.delete',\n} as const;\n\nexport const ROLE_ACTION_PERMISSIONS = {\n READ: 'role-action.read',\n ASSIGN: 'role-action.assign',\n} as const;\n\nexport const USER_ROLE_PERMISSIONS = {\n READ: 'user-role.read',\n ASSIGN: 'user-role.assign',\n} as const;\n\nexport const USER_ACTION_PERMISSIONS = {\n READ: 'user-action.read',\n ASSIGN: 'user-action.assign',\n} as const;\n\nexport const COMPANY_ACTION_PERMISSIONS = {\n READ: 'company-action.read',\n ASSIGN: 'company-action.assign',\n} as const;\n\n// ==================== STORAGE MODULE ====================\n\nexport const FILE_PERMISSIONS = {\n CREATE: 'file.create',\n READ: 'file.read',\n UPDATE: 'file.update',\n DELETE: 'file.delete',\n} as const;\n\nexport const FOLDER_PERMISSIONS = {\n CREATE: 'folder.create',\n READ: 'folder.read',\n UPDATE: 'folder.update',\n DELETE: 'folder.delete',\n} as const;\n\nexport const STORAGE_CONFIG_PERMISSIONS = {\n CREATE: 'storage-config.create',\n READ: 'storage-config.read',\n UPDATE: 'storage-config.update',\n DELETE: 'storage-config.delete',\n} as const;\n\nexport const UPLOAD_CONFIG_PERMISSIONS = {\n DELETE: 'upload-config.delete',\n} as const;\n// ==================== EMAIL MODULE ====================\n\nexport const EMAIL_CONFIG_PERMISSIONS = {\n CREATE: 'email-config.create',\n READ: 'email-config.read',\n UPDATE: 'email-config.update',\n DELETE: 'email-config.delete',\n} as const;\n\nexport const EMAIL_TEMPLATE_PERMISSIONS = {\n CREATE: 'email-template.create',\n READ: 'email-template.read',\n UPDATE: 'email-template.update',\n DELETE: 'email-template.delete',\n} as const;\n\n// ==================== FORM BUILDER MODULE ====================\n\nexport const FORM_PERMISSIONS = {\n CREATE: 'form.create',\n READ: 'form.read',\n UPDATE: 'form.update',\n DELETE: 'form.delete',\n} as const;\n\nexport const FORM_RESULT_PERMISSIONS = {\n CREATE: 'form-result.create',\n READ: 'form-result.read',\n UPDATE: 'form-result.update',\n DELETE: 'form-result.delete',\n} as const;\n\n// ==================== ENTITY BUILDER MODULE ====================\n// Static metadata permissions only - matches nestjs-entity-builder's\n// ENTITY_DEFINITION_PERMISSIONS/FIELD_DEFINITION_PERMISSIONS exactly. Per-dynamic-entity\n// record permissions (`entity_builder.entity.<entityCode>.<action>`) are runtime-computed and\n// have no static constant - flows running as the caller check them per entity step.\n\nexport const ENTITY_DEFINITION_PERMISSIONS = {\n CREATE: 'entity_builder.entity_definition.create',\n READ: 'entity_builder.entity_definition.read',\n UPDATE: 'entity_builder.entity_definition.update',\n DELETE: 'entity_builder.entity_definition.delete',\n} as const;\n\nexport const FIELD_DEFINITION_PERMISSIONS = {\n READ: 'entity_builder.field_definition.read',\n UPDATE: 'entity_builder.field_definition.update',\n} as const;\n\nexport const FLOW_DEFINITION_PERMISSIONS = {\n CREATE: 'entity_builder.flow_definition.create',\n READ: 'entity_builder.flow_definition.read',\n UPDATE: 'entity_builder.flow_definition.update',\n DELETE: 'entity_builder.flow_definition.delete',\n TEST: 'entity_builder.flow_definition.test',\n /** Needed to save a flow that runs as the system (bypassing per-entity permissions). */\n SYSTEM: 'entity_builder.flow_definition.system',\n /** Needed to save a flow containing a code node (sandboxed JavaScript). */\n CODE: 'entity_builder.flow_definition.code',\n} as const;\n\n// ==================== EVENT MANAGER MODULE ====================\n\nexport const EVENT_PERMISSIONS = {\n CREATE: 'event.create',\n READ: 'event.read',\n UPDATE: 'event.update',\n DELETE: 'event.delete',\n} as const;\n\n// ==================== NOTIFICATION MODULE ====================\n\nexport const NOTIFICATION_PERMISSIONS = {\n CREATE: 'notification.create',\n READ: 'notification.read',\n UPDATE: 'notification.update',\n DELETE: 'notification.delete',\n} as const;\n\n// ==================== LOCALIZATION MODULE ====================\n\nexport const LANGUAGE_PERMISSIONS = {\n CREATE: 'language.create',\n READ: 'language.read',\n UPDATE: 'language.update',\n DELETE: 'language.delete',\n} as const;\n\nexport const TRANSLATION_KEY_PERMISSIONS = {\n CREATE: 'translation-key.create',\n READ: 'translation-key.read',\n UPDATE: 'translation-key.update',\n DELETE: 'translation-key.delete',\n} as const;\n\nexport const TRANSLATION_PERMISSIONS = {\n CREATE: 'translation.create',\n READ: 'translation.read',\n UPDATE: 'translation.update',\n DELETE: 'translation.delete',\n} as const;\n\n// ==================== AGGREGATED EXPORTS ====================\n\nexport const PERMISSIONS = {\n // Auth\n USER: USER_PERMISSIONS,\n COMPANY: COMPANY_PERMISSIONS,\n BRANCH: BRANCH_PERMISSIONS,\n SOCIAL_AUTH_CONFIG: SOCIAL_AUTH_CONFIG_PERMISSIONS,\n // IAM\n ACTION: ACTION_PERMISSIONS,\n ROLE: ROLE_PERMISSIONS,\n ROLE_ACTION: ROLE_ACTION_PERMISSIONS,\n USER_ROLE: USER_ROLE_PERMISSIONS,\n USER_ACTION: USER_ACTION_PERMISSIONS,\n COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,\n // Storage\n FILE: FILE_PERMISSIONS,\n FOLDER: FOLDER_PERMISSIONS,\n STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,\n // Email\n EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,\n // Form Builder\n FORM: FORM_PERMISSIONS,\n FORM_RESULT: FORM_RESULT_PERMISSIONS,\n // Event Manager\n EVENT: EVENT_PERMISSIONS,\n // Notification\n NOTIFICATION: NOTIFICATION_PERMISSIONS,\n // Localization\n LANGUAGE: LANGUAGE_PERMISSIONS,\n TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,\n TRANSLATION: TRANSLATION_PERMISSIONS,\n} as const;\n\n// Type exports for TypeScript support\nexport type PermissionCode =\n (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];\n","import { Observable } from 'rxjs';\nimport { ISingleResponse } from './response-payload.interface';\n\n// ─── Interfaces ───────────────────────────────────────────────────────────────\n\nexport interface IFileBasicInfo {\n id: string;\n name: string;\n contentType: string;\n size: string;\n url: string | null;\n}\n\nexport interface IUploadedFile {\n id?: string;\n name: string;\n key: string;\n size: number;\n contentType: string;\n}\n\nexport interface IFolderBasicInfo {\n id: string;\n name: string;\n slug: string;\n}\n\nexport interface IStorageConfigBasicInfo {\n id: string;\n name: string;\n isDefault: boolean;\n}\n\nexport interface IFileUploadOptions {\n storageConfigId?: string;\n folderPath?: string;\n maxWidth?: number;\n maxHeight?: number;\n quality?: number;\n compress?: boolean;\n isPrivate?: boolean;\n}\n\n// ─── Filter Interfaces ────────────────────────────────────────────────────────\n\nexport interface ISelectFilter {\n page: number;\n pageSize: number;\n search: string;\n}\n\nexport interface IFileSelectFilter extends ISelectFilter {\n contentTypes?: string[];\n folderId?: string;\n storageConfigId?: string;\n}\n\n// ─── Function Types ───────────────────────────────────────────────────────────\n\nexport type UploadFileFn = (\n file: File,\n options?: IFileUploadOptions,\n) => Observable<ISingleResponse<IUploadedFile>>;\nexport type UploadMultipleFilesFn = (\n files: File[],\n options?: IFileUploadOptions,\n) => Observable<ISingleResponse<IUploadedFile[]>>;\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nexport const FILE_TYPE_FILTERS = {\n IMAGES: [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n ],\n DOCUMENTS: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ],\n VIDEOS: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n AUDIO: ['audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/webm'],\n ALL: [] as string[],\n} as const;\n\n// ─── Utility Functions ────────────────────────────────────────────────────────\n\nexport function getAcceptString(contentTypes: string[]): string {\n return contentTypes.length ? contentTypes.join(',') : '*/*';\n}\n\nexport function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean {\n if (!allowedTypes.length) return true;\n return allowedTypes.some((type) =>\n type.endsWith('/*')\n ? file.type.startsWith(type.replace('/*', '/'))\n : file.type === type,\n );\n}\n\nexport function getFileIconClass(contentType: string): string {\n if (contentType.startsWith('image/')) return 'image';\n if (contentType.startsWith('video/')) return 'video';\n if (contentType.startsWith('audio/')) return 'volume-up';\n if (contentType.includes('pdf')) return 'file-pdf';\n if (contentType.includes('excel') || contentType.includes('spreadsheet'))\n return 'file-excel';\n if (contentType.includes('word') || contentType.includes('document'))\n return 'file-word';\n return 'file';\n}\n\nexport function formatFileSize(sizeInKb: string | number): string {\n const kb = typeof sizeInKb === 'string' ? parseFloat(sizeInKb) : sizeInKb;\n if (kb < 1024) return `${kb.toFixed(1)} KB`;\n const mb = kb / 1024;\n if (mb < 1024) return `${mb.toFixed(1)} MB`;\n return `${(mb / 1024).toFixed(2)} GB`;\n}\n","export enum IconTypeEnum {\n ICON_NAME = 1,\n IMAGE_FILE_LINK = 2,\n}\n","import { PLATFORM_ID, inject, Service } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Service()\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { inject, DOCUMENT, REQUEST, Service } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Service()\nexport class CookieService {\n private doc = inject<Document>(DOCUMENT, { optional: true })!;\n private platformService = inject(PlatformService);\n private readonly request = inject(REQUEST, { optional: true });\n\n get(): string {\n return !this.platformService.isServer ? this.doc.cookie : this.request?.headers.get('cookie') ?? \"\";\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, signal, Service } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { ISingleResponse } from '../interfaces/response-payload.interface';\n\nexport interface FilesResponseDto {\n id: string;\n name: string;\n contentType: string;\n url: string;\n}\n\n/**\n * Service to fetch file URLs from the backend.\n * Handles presigned URLs for cloud storage, auto-refresh, and caching.\n */\n@Service()\nexport class FileUrlService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject(APP_CONFIG);\n\n private readonly _cache = signal<Map<string, FilesResponseDto>>(new Map());\n readonly cache = this._cache.asReadonly();\n\n /** Fetch file URLs from backend and update cache */\n fetchFileUrls(\n fileIds: string[],\n forceRefresh = false,\n ): Observable<FilesResponseDto[]> {\n if (!fileIds.length) return of([]);\n\n const cache = this._cache();\n const missingIds = forceRefresh\n ? fileIds\n : fileIds.filter((id) => !cache.has(id));\n\n if (!missingIds.length) {\n return of(this.getFromCache(fileIds));\n }\n\n const requestDto = missingIds.map((id) => ({ id }));\n\n return this.http\n .post<\n ISingleResponse<FilesResponseDto[]>\n >(`${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`, requestDto)\n .pipe(\n map((response) => response.data ?? []),\n tap((files) => this.addToCache(files)),\n map(() => this.getFromCache(fileIds)),\n catchError(() => of([])),\n );\n }\n\n /** Fetch single file URL (delegates to fetchFileUrls) */\n fetchSingleFileUrl(\n fileId: string,\n forceRefresh = false,\n ): Observable<FilesResponseDto | null> {\n return this.fetchFileUrls([fileId], forceRefresh).pipe(\n map((files) => files[0] ?? null),\n );\n }\n\n private addToCache(files: FilesResponseDto[]): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n for (const file of files) {\n next.set(file.id, file);\n }\n return next;\n });\n }\n\n private getFromCache(fileIds: string[]): FilesResponseDto[] {\n const cache = this._cache();\n return fileIds\n .map((id) => cache.get(id))\n .filter((f): f is FilesResponseDto => f !== undefined);\n }\n}\n","import { ILogicNode } from '../interfaces/common-data.interface';\n\n/**\n * Check if user has a specific permission using wildcard matching.\n * Supports:\n * - Exact match: 'user.create' matches 'user.create'\n * - Full wildcard: '*' matches everything\n * - Module wildcard: 'user.*' matches 'user.create', 'user.read', etc.\n */\nexport function hasPermission(\n requiredPermission: string,\n userPermissions: string[],\n): boolean {\n // Exact match\n if (userPermissions.includes(requiredPermission)) return true;\n\n // Wildcard matching\n for (const permission of userPermissions) {\n // Full wildcard - grants all permissions\n if (permission === '*') return true;\n\n // Module wildcard (e.g., 'user.*' matches 'user.create')\n if (\n permission.endsWith('.*') &&\n requiredPermission.startsWith(permission.slice(0, -1))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/** Evaluate permission logic (string or ILogicNode) against user permissions */\nexport function evaluatePermission(\n logic: string | ILogicNode | null | undefined,\n permissions: string[],\n): boolean {\n if (!logic) return false;\n if (typeof logic === 'string') return hasPermission(logic, permissions);\n return evaluateLogicNode(logic, permissions);\n}\n\n/** Recursively evaluate an ILogicNode tree */\nexport function evaluateLogicNode(\n node: ILogicNode,\n permissions: string[],\n): boolean {\n switch (node.type) {\n case 'action':\n return node.actionId ? hasPermission(node.actionId, permissions) : false;\n\n case 'group':\n if (!node.children || node.children.length === 0) return false;\n\n return node.operator === 'AND'\n ? node.children.every((child) => evaluateLogicNode(child, permissions))\n : node.children.some((child) => evaluateLogicNode(child, permissions));\n\n default:\n return false;\n }\n}\n\n/** Check if user has ANY of the specified permissions (OR logic) */\nexport function hasAnyPermission(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.some((code) => hasPermission(code, permissions));\n}\n\n/** Check if user has ALL of the specified permissions (AND logic) */\nexport function hasAllPermissions(\n permissionCodes: string[],\n permissions: string[],\n): boolean {\n if (!permissionCodes?.length) return false;\n return permissionCodes.every((code) => hasPermission(code, permissions));\n}\n","import { signal, Service } from '@angular/core';\nimport {\n hasAnyPermission,\n hasPermission,\n} from '../utils/permission-evaluator.util';\n\n/**\n * Permission state management service.\n * Provides signal-based storage and permission checking with wildcard support.\n */\n@Service()\nexport class PermissionValidatorService {\n private readonly _permissions = signal<string[]>([]);\n readonly permissions = this._permissions.asReadonly();\n\n private readonly _isLoaded = signal(false);\n readonly isLoaded = this._isLoaded.asReadonly();\n\n /** Set permissions (replaces existing) */\n setPermissions(permissions: string[]): void {\n this._permissions.set(permissions);\n this._isLoaded.set(true);\n }\n\n /** Clear all permissions */\n clearPermissions(): void {\n this._permissions.set([]);\n this._isLoaded.set(false);\n }\n\n /** Check if user has permission (supports wildcards: '*', 'module.*') */\n hasPermission(code: string): boolean {\n return hasPermission(code, this._permissions());\n }\n\n /** Check if user has ANY of the specified permissions (OR logic) */\n hasAnyPermission(code: string[]): boolean {\n return hasAnyPermission(code, this._permissions());\n }\n}\n","import { computed, inject, Signal, Service } from '@angular/core';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\nimport { IMessageRef } from '../interfaces/message-ref.interface';\n\n@Service()\nexport class TranslateService {\n private readonly localizationState = inject(LOCALIZATION_STATE_SERVICE, {\n optional: true,\n });\n\n private readonly registry = inject(FALLBACK_MESSAGES_REGISTRY, {\n optional: false,\n });\n\n translate(key: string, params?: Record<string, string | unknown>): string {\n if (this.localizationState === null) {\n const value = this.registry[key] ?? key;\n return this.interpolate(value, params);\n }\n const translations = this.localizationState.translations();\n let value = translations[key];\n if (!value) {\n const fallbacks = this.localizationState.fallbackMessages();\n value = fallbacks[key] ?? key;\n }\n return this.interpolate(value, params);\n }\n\n translateRef(ref: IMessageRef): string {\n const params: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(ref.messageVariables ?? {})) {\n params[name] = this.isMessageRef(value) ? this.translateRef(value) : value;\n }\n return this.translate(ref.messageKey, params);\n }\n\n translateSignal(\n key: string,\n params?: Record<string, string | number>,\n ): Signal<string> {\n return computed(() => {\n return this.translate(key, params);\n });\n }\n\n private isMessageRef(value: unknown): value is IMessageRef {\n return typeof value === 'object' && value !== null && typeof (value as IMessageRef).messageKey === 'string';\n }\n\n private interpolate(\n template: string,\n params?: Record<string, string | unknown>,\n ): string {\n if (!params || !template) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, paramKey) => {\n const value = params[paramKey];\n return value !== undefined ? String(value) : match;\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Service } from '@angular/core';\nimport { PlatformService } from './public-api';\n\n@Service()\nexport class FaviconService {\n private readonly http = inject(HttpClient);\n private readonly platformService = inject(PlatformService);\n private readonly document = inject(DOCUMENT);\n\n private svgTemplate: string | null = null;\n\n apply(): void {\n if (this.platformService.isServer) return;\n\n if (this.svgTemplate) {\n this.render(this.svgTemplate);\n return;\n }\n this.http\n .get('/favicon.svg', { responseType: 'text' })\n .subscribe((text) => {\n this.svgTemplate = text;\n this.render(text);\n });\n }\n\n private render(svgText: string): void {\n const style = getComputedStyle(this.document.documentElement);\n\n const resolved = svgText.replace(\n /var\\(\\s*(--[^,)]+?)\\s*(?:,\\s*([^)]+?))?\\s*\\)/g,\n (_, varName: string, fallback: string = '') => {\n const value = style.getPropertyValue(varName).trim();\n return value || fallback;\n },\n );\n\n const link =\n this.document.querySelector<HTMLLinkElement>('link[rel=\"icon\"]');\n if (link) {\n link.href = `data:image/svg+xml,${encodeURIComponent(resolved)}`;\n }\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEditModeElementChanger]',\n})\nexport class EditModeElementChangerDirective {\n private readonly el = inject(ElementRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n\n readonly isEditMode = input.required<boolean>();\n\n constructor() {\n effect(() => {\n const editMode = this.isEditMode();\n this.updateElement(editMode);\n this.updateControl(editMode);\n });\n }\n\n private updateControl(editMode: boolean): void {\n if (!editMode) this.ngControl?.control?.disable();\n else this.ngControl?.control?.enable();\n }\n\n private updateElement(editMode: boolean): void {\n const inputElement: HTMLElement = this.el.nativeElement;\n\n if (inputElement instanceof HTMLInputElement) {\n if (!editMode) {\n inputElement.setAttribute('readonly', 'true');\n inputElement.classList.add('edit-mode-element-css');\n } else {\n inputElement.removeAttribute('readonly');\n inputElement.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'F-SELECT') {\n const trigger = inputElement.querySelector<HTMLElement>('[data-select-trigger]');\n const label = inputElement.querySelector<HTMLElement>('[data-select-label]');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (trigger) trigger.style.display = 'none';\n label?.classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n if (trigger) trigger.style.display = '';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'F-DATEPICKER') {\n const firstChild = inputElement.firstElementChild;\n if (!editMode) {\n firstChild?.children[0]?.classList.add('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.add('hidden');\n } else {\n firstChild?.children[0]?.classList.remove('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.remove('hidden');\n }\n }\n }\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport { evaluatePermission } from '../utils/permission-evaluator.util';\n\n/**\n * HasPermission Directive\n *\n * Structural directive for permission-based rendering.\n * Shows/hides elements based on permission logic evaluation.\n *\n * Supports:\n * - Simple permission check (string)\n * - Complex permission logic (ILogicNode with AND/OR operators)\n *\n * Usage:\n * ```html\n * <!-- Simple permission check -->\n * <button *hasPermission=\"'user.create'\">Create User</button>\n *\n * <!-- Complex permission logic -->\n * <button *hasPermission=\"userManageLogic\">Manage Users</button>\n *\n * <!-- Where userManageLogic is: -->\n * <!-- (user.view OR user.create) AND department.manage -->\n * ```\n *\n * The directive automatically reacts to permission changes through signals.\n *\n * @example\n * // In component\n * readonly userManageLogic: ILogicNode = {\n * type: 'group',\n * operator: 'AND',\n * children: [\n * {\n * type: 'group',\n * operator: 'OR',\n * children: [\n * { type: 'action', actionId: 'user.view' },\n * { type: 'action', actionId: 'user.create' }\n * ]\n * },\n * { type: 'action', actionId: 'department.manage' }\n * ]\n * };\n *\n * // In template\n * <div *hasPermission=\"userManageLogic\">\n * User management content\n * </div>\n */\n@Directive({\n selector: '[hasPermission]',\n})\nexport class HasPermissionDirective {\n // ==================== DEPENDENCIES ====================\n\n private readonly templateRef = inject(TemplateRef<unknown>);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly permissionValidator = inject(PermissionValidatorService);\n\n // ==================== SIGNALS ====================\n\n /**\n * Permission logic input signal\n * Accepts either:\n * - string: Single permission code to check\n * - ILogicNode: Complex permission logic tree\n */\n readonly hasPermission = input<string | ILogicNode | null>(null);\n\n /**\n * View created state\n */\n private viewCreated = false;\n\n // ==================== CONSTRUCTOR ====================\n\n constructor() {\n // Effect to reactively update view when permissions or logic changes\n effect(() => {\n // Track permission changes\n this.permissionValidator.permissions();\n\n // Track logic changes\n const logic = this.hasPermission();\n\n // Evaluate and update view\n this.updateView(logic);\n });\n }\n\n // ==================== VIEW MANAGEMENT ====================\n\n /**\n * Update view based on permission evaluation\n */\n private updateView(logic: string | ILogicNode | null): void {\n // Fail closed: No logic = no access\n if (!logic) {\n this.clearView();\n return;\n }\n\n // Fail closed: No permissions loaded = no access (unauthenticated state)\n if (!this.permissionValidator.isLoaded()) {\n this.clearView();\n return;\n }\n\n // Use shared evaluatePermission utility\n const hasPermission = evaluatePermission(\n logic,\n this.permissionValidator.permissions(),\n );\n\n if (hasPermission && !this.viewCreated) {\n // Create view if not exists\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.viewCreated = true;\n } else if (!hasPermission && this.viewCreated) {\n this.clearView();\n }\n }\n\n /**\n * Clear the view container\n */\n private clearView(): void {\n if (this.viewCreated) {\n this.viewContainer.clear();\n this.viewCreated = false;\n }\n }\n}\n","import { Directive, computed, input, signal } from '@angular/core';\n\n@Directive({\n selector: 'img',\n host: {\n '[src]': 'imageSrc()',\n '(error)': 'onError()',\n },\n})\nexport class IsEmptyImageDirective {\n readonly src = input<string>('');\n private readonly hasError = signal(false);\n private readonly defaultImg = 'lib/assets/images/default/default-image.jpg';\n\n readonly imageSrc = computed(() => {\n if (this.hasError()) {\n return this.defaultImg;\n }\n const srcValue = this.src();\n return srcValue ? srcValue : this.defaultImg;\n });\n\n onError(): void {\n this.hasError.set(true);\n }\n}\n","import { Directive, input, output } from '@angular/core';\n\n@Directive({\n selector: '[appPreventDefault]',\n host: {\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(keyup)': 'onKeyup($event)',\n },\n})\nexport class PreventDefaultDirective {\n readonly eventType = input<'click' | 'keydown' | 'keyup'>('click');\n readonly preventKey = input<string | undefined>(undefined);\n readonly action = output<Event>();\n\n onClick(event: MouseEvent): void {\n if (this.eventType() === 'click') {\n this.processEvent(event);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.eventType() === 'keydown') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent): void {\n if (this.eventType() === 'keyup') {\n if (!this.preventKey() || event.key === this.preventKey()) {\n this.processEvent(event);\n }\n }\n }\n\n private processEvent(event: Event): void {\n event.preventDefault();\n this.action.emit(event);\n }\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { IMessageRef } from '../interfaces/message-ref.interface';\nimport { TranslateService } from '../services/translate.service';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform {\n private readonly translateAdapter = inject(TranslateService);\n\n transform(\n key: string | IMessageRef | null | undefined,\n params?: Record<string, string | number> | null,\n fallback?: string,\n ): string {\n if (!key) return fallback ?? '';\n if (typeof key === 'object') return this.translateAdapter.translateRef(key);\n const result = this.translateAdapter.translate(key, params ?? undefined);\n return fallback !== undefined && result === key ? fallback : result;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n HttpContextToken,\n HttpErrorResponse,\n HttpEvent,\n HttpHandlerFn,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, PLATFORM_ID } from '@angular/core';\nimport { MessageService } from '@flusys/ng-ui';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { TranslateService } from '../services/translate.service';\n\n/**\n * HTTP context token to skip global error toast.\n * Use when component handles error display locally.\n *\n * @example\n * ```typescript\n * this.http.post(url, data, {\n * context: new HttpContext().set(SKIP_ERROR_TOAST, true)\n * });\n * ```\n */\nexport const SKIP_ERROR_TOAST = new HttpContextToken<boolean>(() => false);\n\n/** 401 is handled by tokenRefreshInterceptor, 403 by the permission-denied UI. */\nconst SILENT_STATUSES = new Set([401, 403]);\n\nconst isCheckLoginUrl = (url: string | null | undefined) => !!url?.includes('/check-login');\n\n/**\n * Whether errorCatchingInterceptor already showed this failure as a toast, so a caller's own\n * catch block adds one only for failures the user has not been told about yet.\n */\nexport function isErrorToastShown(error: unknown): boolean {\n return error instanceof HttpErrorResponse && !SILENT_STATUSES.has(error.status) && !isCheckLoginUrl(error.url);\n}\n\n/**\n * Error Catching Interceptor\n * Displays error messages for failed HTTP requests using backend response.\n *\n * Features:\n * - Uses backend's error title (error.error.error) as summary\n * - Uses backend's error message (error.error.message) as detail\n * - Falls back to sensible defaults based on status code\n * - Skip with SKIP_ERROR_TOAST context token for local handling\n *\n * NOTE: This interceptor only handles error display.\n * For 401 handling and token refresh, use tokenRefreshInterceptor from @flusys/ng-auth.\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * provideHttpClient(\n * withInterceptors([\n * authInterceptor, // from @flusys/ng-auth\n * tokenRefreshInterceptor, // from @flusys/ng-auth\n * errorCatchingInterceptor, // from @flusys/ng-core\n * apiLoaderInterceptor, // from @flusys/ng-core\n * ])\n * )\n * ```\n */\nexport function errorCatchingInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const messageService = inject(MessageService);\n const platformId = inject(PLATFORM_ID);\n const translateAdapter = inject(TranslateService, { optional: true });\n const isBrowser = isPlatformBrowser(platformId);\n\n // Skip error display for check-login (expected to fail when not logged in)\n const isCheckLogin = isCheckLoginUrl(req.url);\n // Skip if component handles error locally\n const skipErrorToast = req.context.get(SKIP_ERROR_TOAST);\n\n return next(req).pipe(\n catchError((error: HttpErrorResponse) => {\n // Skip 401 errors - handled by tokenRefreshInterceptor in ng-auth\n // Skip 403 errors - handled by permission denied UI in components\n // Skip check-login errors - expected behavior\n // Skip if component handles error locally\n if (SILENT_STATUSES.has(error.status) || isCheckLogin || skipErrorToast) {\n return throwError(() => error);\n }\n\n // Display error message for other errors\n if (isBrowser) {\n const { summary, detail } = extractErrorInfo(error, translateAdapter);\n messageService.add({\n severity: 'error',\n summary,\n detail,\n });\n }\n\n return throwError(() => error);\n }),\n );\n}\n\n/**\n * Extract error summary and detail from HTTP error response.\n * Uses backend response format: { message, messageKey, messageVariables, error, statusCode }\n * If messageKey is present and translate adapter is available, translates the message.\n */\nfunction extractErrorInfo(\n error: HttpErrorResponse,\n translateAdapter: TranslateService | null,\n): { summary: string; detail: string } {\n // Check if we have a messageKey for translation\n const messageKey = error.error?.messageKey;\n const messageVariables = error.error?.messageVariables;\n\n let detail: string;\n if (messageKey && translateAdapter) {\n // translateRef also translates variables that are message refs themselves (a nested reason)\n detail = translateAdapter.translateRef({ messageKey, messageVariables });\n } else if (typeof error.error?.message === 'string') {\n detail = error.error.message;\n } else if (Array.isArray(error.error?.message)) {\n // NestJS validation errors come as array\n detail = error.error.message[0];\n } else if (error.message) {\n detail = error.message;\n } else {\n detail = translateAdapter\n ? translateAdapter.translate('shared.unexpected.error')\n : 'shared.unexpected.error';\n }\n\n // Extract summary/title from backend response or use default based on status\n let summary: string;\n if (typeof error.error?.error === 'string') {\n // Backend sends error type (e.g., \"Not Found\", \"Bad Request\", \"Validation Error\")\n summary = error.error.error;\n } else {\n // Fallback to status-based title\n summary = getDefaultSummary(error.status, translateAdapter);\n }\n\n return { summary, detail };\n}\n\n/**\n * Get default error summary based on HTTP status code.\n */\nfunction getDefaultSummary(\n status: number,\n translateAdapter: TranslateService | null,\n): string {\n const keyMap: Record<number, string> = {\n 400: 'shared.error.bad.request',\n 404: 'shared.error.not.found',\n 409: 'shared.error.conflict',\n 422: 'shared.error.validation.error',\n 500: 'shared.error.server.error',\n 502: 'shared.error.service.unavailable',\n 503: 'shared.error.service.unavailable',\n 504: 'shared.error.service.unavailable',\n };\n\n const key = keyMap[status] || 'shared.error';\n\n if (translateAdapter) {\n return translateAdapter.translate(key);\n }\n\n // Fallback to key when no translator available\n return key;\n}\n","import { inject, Injector, isDevMode } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n ILocalizationApiServicesAdapter,\n ILocalizationStateServicesAdapter,\n LOCALIZATION_API_SERVICE,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\nimport { firstValueFrom } from 'rxjs';\n\nexport interface IResolverModuleConfig {\n modules: string[];\n fallbackMessages?: Record<string, string>;\n}\n\n/**\n * Resolver to load translations for specific modules.\n * Works with or without @flusys/ng-localization provider.\n *\n * When localization provider is enabled:\n * - Registers fallback messages in state\n * - Fetches translations from API\n * - Merges them into state\n *\n * When localization provider is not enabled:\n * - Registers fallback messages in FALLBACK_MESSAGES_REGISTRY\n * - TranslatePipe uses registry for translations\n * - No API calls\n *\n * @param config - Module config with modules array and optional fallback messages\n * @returns ResolveFn that loads translations before route activation\n *\n * @example\n * // With fallback messages (recommended)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth'], fallbackMessages: AUTH_MESSAGES }) } }\n *\n * @example\n * // Without fallback (API translations only, requires localization provider)\n * { resolve: { t: resolveTranslationModule({ modules: ['auth', 'iam'] }) } }\n */\n\nasync function tryLoadLocalizationServices(injector: Injector): Promise<{\n stateService: ILocalizationStateServicesAdapter;\n apiService: ILocalizationApiServicesAdapter;\n} | null> {\n const stateService = injector.get(LOCALIZATION_STATE_SERVICE, null);\n const apiService = injector.get(LOCALIZATION_API_SERVICE, null);\n if (!stateService || !apiService) return null;\n return {\n stateService,\n apiService,\n };\n}\n\nexport function resolveTranslationModule(\n config: IResolverModuleConfig,\n): ResolveFn<boolean> {\n return async () => {\n const injector = inject(Injector);\n const { modules, fallbackMessages } = config;\n\n // Try to load localization services if available\n const locServices = await tryLoadLocalizationServices(injector);\n\n // Register fallback messages\n if (fallbackMessages) {\n if (locServices) {\n locServices.stateService.updateFallbackMessages(fallbackMessages);\n } else {\n const registry = injector.get(FALLBACK_MESSAGES_REGISTRY, null);\n if (registry) {\n Object.assign(registry, fallbackMessages);\n } else if (isDevMode()) {\n console.warn(\n 'resolveTranslationModule: FALLBACK_MESSAGES_REGISTRY not provided. ' +\n 'Add provideFallbackMessagesRegistry() to your app providers.',\n );\n }\n }\n }\n\n if (!locServices) return true;\n\n // Load translations from API\n const languageCode = locServices.stateService.currentLanguageCode();\n const modulesToLoad = modules.filter(\n (m) => !locServices.stateService.isModuleLoaded(m),\n );\n\n if (modulesToLoad.length === 0) return true;\n\n try {\n const response = (await firstValueFrom(\n locServices.apiService.getTranslationsByLanguage(\n languageCode,\n modulesToLoad,\n ),\n )) as { success?: boolean; data?: Record<string, string> };\n\n if (response?.success && response?.data) {\n locServices.stateService.mergeTranslations(response.data);\n modulesToLoad.forEach((m) =>\n locServices.stateService.markModuleLoaded(m),\n );\n } else if (modulesToLoad.length > 0 && isDevMode()) {\n console.warn(\n `No translation data received for modules: ${modulesToLoad.join(', ')}`,\n );\n }\n } catch (error) {\n if (isDevMode()) {\n console.error(\n `Failed to load translations for modules: ${modules.join(', ')}`,\n error,\n );\n }\n }\n\n return true;\n };\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport {\n computed,\n inject,\n resource,\n ResourceRef,\n ResourceStatus,\n signal,\n} from '@angular/core';\nimport {\n APP_CONFIG,\n getServiceUrl,\n IAppConfig,\n ServiceName,\n} from '@flusys/ng-core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n// ── Separate default filter into a named constant so it's sharable/testable ──\nconst DEFAULT_FILTER: IFilterData = {\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n};\n\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;\n findById(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>>;\n findByIds(\n ids: string[],\n select?: string[] | string,\n ): Promise<IListResponse<InterfaceT>>;\n getAll(\n filter: IFilterData,\n search?: string,\n ): Promise<IListResponse<InterfaceT>>;\n getByFilter(\n filter: Record<string, unknown>,\n ): Promise<ISingleResponse<InterfaceT>>;\n update(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;\n updateMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;\n bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]>;\n delete(deleteDto: IDeleteData): Promise<IMessageResponse>;\n}\n\nexport abstract class ApiResourceService<\n DtoT,\n InterfaceT,\n> implements IApiService<DtoT, InterfaceT> {\n // ── Injected once via `inject()` ──────────────────────────────────────────\n protected readonly http = inject(HttpClient);\n private readonly _config = inject<IAppConfig>(APP_CONFIG);\n\n protected readonly baseUrl: string;\n protected readonly moduleApiName: string;\n\n // ── Public writable signals ───────────────────────────────────────────────\n readonly searchTerm = signal('');\n readonly filterData = signal<IFilterData>({ ...DEFAULT_FILTER });\n\n // ── Private activation gate: avoids an initial fetch before fetchList() ──\n private readonly _active = signal(false);\n\n // ── Resource (reactive list fetching with abort support) ──────────────────\n readonly listResource: ResourceRef<IListResponse<InterfaceT> | undefined>;\n\n // ── Derived/computed signals (pure reads, no side-effects) ────────────────\n readonly isLoading = computed(() => this.listResource.isLoading());\n readonly data = computed(() => {\n if (this.listResource.error()) return [];\n return this.listResource.value()?.data ?? [];\n });\n readonly total = computed(() => {\n if (this.listResource.error()) return 0;\n return this.listResource.value()?.meta?.total ?? 0;\n });\n readonly pageInfo = computed(() => {\n if (this.listResource.error()) return undefined;\n return this.listResource.value()?.meta;\n });\n readonly hasMore = computed(() => {\n if (this.listResource.error()) return false;\n const meta = this.listResource.value()?.meta;\n if (!meta) return false;\n return meta.hasMore ?? (meta.page + 1) * meta.pageSize < meta.total;\n });\n readonly error = computed(() => this.listResource.error());\n readonly status = computed<ResourceStatus>(() => this.listResource.status());\n\n constructor(moduleApiName: string, serviceName?: ServiceName) {\n this.moduleApiName = moduleApiName;\n\n // ── Resolve base URL once at construction, not per-request ───────────────\n const serviceBaseUrl = serviceName\n ? getServiceUrl(this._config, serviceName)\n : this._config.apiBaseUrl;\n\n this.baseUrl = moduleApiName\n ? `${serviceBaseUrl}/${moduleApiName}`\n : serviceBaseUrl;\n\n this.listResource = resource({\n params: () => {\n // Short-circuit: skip the loader entirely when not yet activated\n if (!this._active()) return undefined;\n return { search: this.searchTerm(), filter: this.filterData() };\n },\n loader: ({ params, abortSignal }) =>\n // ── Inline promise keeps the closure tight; no temp variable needed ─\n new Promise<IListResponse<InterfaceT>>((resolve, reject) => {\n const sub = this._getAllObs(params!.filter, params!.search).subscribe(\n {\n next: resolve,\n error: reject,\n },\n );\n abortSignal.addEventListener('abort', () => sub.unsubscribe());\n }),\n });\n }\n\n // ── Single, memoised header builder – avoids object churn per call ────────\n protected getHttpOptions(endpoint: string, params?: HttpParams) {\n return {\n headers: new HttpHeaders({\n 'x-loader-tag': `${this.moduleApiName}/${endpoint}`,\n }),\n ...(params ? { params } : {}),\n };\n }\n\n // ── Private observable – shared by the resource loader and the public getAll() ──\n private _getAllObs(filter: IFilterData, search = '') {\n const params = search ? new HttpParams().append('q', search) : undefined;\n\n return this.http.post<IListResponse<InterfaceT>>(\n `${this.baseUrl}/get-all`,\n filter,\n this.getHttpOptions('get-all', params),\n );\n }\n\n // ── Activate guard: all list-management helpers call this first ───────────\n private _activate() {\n this._active.set(true);\n }\n\n // ==========================================================================\n // List management\n // ==========================================================================\n\n fetchList(search = '', filter?: Partial<IFilterData>): void {\n this.searchTerm.set(search);\n if (filter) this.filterData.update((prev) => ({ ...prev, ...filter }));\n this._activate();\n }\n\n setPagination(pagination: IPagination): void {\n this._activate();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\n\n nextPage(): void {\n this._activate();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: {\n ...prev.pagination!,\n currentPage: (prev.pagination?.currentPage ?? 0) + 1,\n },\n }));\n }\n\n resetPagination(): void {\n this._activate();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },\n }));\n }\n\n reload(): void {\n this.listResource.reload();\n }\n\n // ==========================================================================\n // Promise API (IApiService implementation)\n // ==========================================================================\n\n // ── DRY helper: all promise methods are one-liners via this; subclasses use it for their own endpoints ──\n protected post<R>(\n endpoint: string,\n body: unknown,\n params?: HttpParams,\n ): Promise<R> {\n return firstValueFrom(\n this.http.post<R>(\n `${this.baseUrl}/${endpoint}`,\n body,\n this.getHttpOptions(endpoint, params),\n ),\n );\n }\n\n insert(dto: DtoT) {\n return this.post<ISingleResponse<InterfaceT>>('insert', dto);\n }\n insertMany(dtos: DtoT[]) {\n return this.post<IBulkResponse<InterfaceT>>('insert-many', dtos);\n }\n findById(id: string, select?: string[]) {\n return this.post<ISingleResponse<InterfaceT>>(`get/${id}`, { select });\n }\n getAll(filter: IFilterData, search = '') {\n return firstValueFrom(this._getAllObs(filter, search));\n }\n update(dto: DtoT) {\n return this.post<ISingleResponse<InterfaceT>>('update', dto);\n }\n updateMany(dtos: DtoT[]) {\n return this.post<IBulkResponse<InterfaceT>>('update-many', dtos);\n }\n delete(deleteDto: IDeleteData) {\n return this.post<IMessageResponse>('delete', deleteDto);\n }\n\n findByIds(ids: string[], select?: string[] | string) {\n return this.post<IListResponse<InterfaceT>>('get-by-ids', { ids, select });\n }\n\n getByFilter(filter: Record<string, unknown>) {\n return this.post<ISingleResponse<InterfaceT>>('get-by-filter', filter);\n }\n\n async bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]> {\n const res = await this.post<IBulkResponse<InterfaceT>>('bulk-upsert', [\n ...toInsert,\n ...toUpdate,\n ]);\n return res.data ?? [];\n }\n}\n\nexport { ApiResourceService as ApiService };\n","import {\n Directive,\n effect,\n forwardRef,\n inject,\n Injector,\n model,\n runInInjectionContext,\n untracked,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FormValueControl } from '@angular/forms/signals';\n\n@Directive()\nexport abstract class BaseFormControl<T>\n implements ControlValueAccessor, FormValueControl<T>\n{\n protected readonly injector = inject(Injector);\n\n abstract readonly value: ReturnType<typeof model<T>>;\n\n readonly disabled = model(false);\n readonly touched = model(false);\n\n // ── CVA callbacks ─────────────────────────────────────────────────────────\n // Initialised to no-ops so subclasses never need null-guards\n private onChange: (value: T) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Write-guard: prevents echo loop (writeValue → effect → onChange) ──────\n // Using a counter instead of a boolean handles the (rare) re-entrant case\n private writeDepth = 0;\n\n /**\n * Wire up the ControlValueAccessor ↔ signal bridge.\n * Call once at the end of the subclass constructor.\n *\n * Signal-form consumers ([formField]) don't need this — Angular's\n * FormField directive binds directly to `value`.\n *\n * @example\n * constructor() { super(); this.initializeFormControl(); }\n */\n protected initializeFormControl(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const next = this.value();\n // Skip propagation while writeValue() is on the call stack\n if (this.writeDepth === 0) {\n untracked(() => this.onChange(next));\n }\n });\n });\n }\n\n // ==========================================================================\n // ControlValueAccessor\n // ==========================================================================\n\n writeValue(value: T): void {\n this.writeDepth++;\n try {\n this.value.set(value);\n } finally {\n // Always decrement — even if set() throws — so the guard never sticks\n this.writeDepth--;\n }\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ==========================================================================\n // FormValueControl (signal forms)\n // `value: ModelSignal<T>` satisfies the interface — nothing else needed.\n // ==========================================================================\n\n /** Call on blur / panel-close to propagate touched state. */\n protected markAsTouched(): void {\n if (!this.touched()) {\n this.touched.set(true);\n this.onTouched();\n }\n }\n}\n\n/**\n * Factory function to provide NG_VALUE_ACCESSOR for a component.\n * Use in component providers array.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(LazySelectComponent)]\n * })\n * export class LazySelectComponent extends BaseFormControl<string | null> {}\n * ```\n */\nexport function provideValueAccessor<\n T extends new (...args: unknown[]) => ControlValueAccessor,\n>(component: T) {\n return {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true,\n };\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n IActionProvider,\n IAuthStateProvider,\n ICompanyApiProvider,\n IFileProvider,\n IProfilePermissionProvider,\n IUserPermissionProvider,\n IUserProvider,\n} from '../interfaces/providers.interface';\n\n/**\n * Injection Tokens for Provider Interfaces\n *\n * These tokens enable dependency injection of provider implementations\n * without creating direct package dependencies.\n *\n * Pattern:\n * 1. ng-shared defines interfaces and tokens (no implementation)\n * 2. ng-auth provides implementations\n * 3. ng-iam and ng-storage inject via tokens\n * 4. app.config.ts wires everything together\n *\n * @example\n * // In IAM component\n * private readonly userProvider = inject(USER_PROVIDER);\n *\n * // In app.config.ts\n * providers: [\n * { provide: USER_PROVIDER, useClass: AuthUserProvider },\n * ]\n */\n\n/**\n * User Provider Token\n *\n * Provides user data access for IAM user selection.\n */\nexport const USER_PROVIDER = new InjectionToken<IUserProvider>(\n 'USER_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Company API Provider Token\n *\n * Provides company data access for IAM company selection.\n */\nexport const COMPANY_API_PROVIDER = new InjectionToken<ICompanyApiProvider>(\n 'COMPANY_API_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'COMPANY_API_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * User Permission Provider Token\n *\n * Provides user permission assignment operations for IAM.\n */\nexport const USER_PERMISSION_PROVIDER =\n new InjectionToken<IUserPermissionProvider>('USER_PERMISSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'USER_PERMISSION_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n });\n\n/**\n * Auth State Provider Token\n *\n * Provides auth state access for feature packages (form-builder, etc.)\n */\nexport const AUTH_STATE_PROVIDER = new InjectionToken<IAuthStateProvider>(\n 'AUTH_STATE_PROVIDER',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'AUTH_STATE_PROVIDER not configured. Please provide an implementation in app.config.ts',\n );\n },\n },\n);\n\n/**\n * Profile Permission Provider Token\n *\n * Provides user permission data for profile display.\n * Optional - if not configured, profile permissions section is hidden.\n * Use with `inject(PROFILE_PERMISSION_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_PERMISSION_PROVIDER =\n new InjectionToken<IProfilePermissionProvider>('PROFILE_PERMISSION_PROVIDER');\n\n/**\n * File Provider Token\n *\n * Provides file loading and upload functionality for file selectors.\n * Optional - if not configured, file selector requires loadFiles/uploadFile inputs.\n * Use with `inject(FILE_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: FILE_PROVIDER, useClass: StorageFileProvider },\n * ]\n */\nexport const FILE_PROVIDER = new InjectionToken<IFileProvider>('FILE_PROVIDER');\n\n/**\n * Action Provider Token\n *\n * Lists permission actions for pickers such as `lib-action-select`.\n * Optional - if not configured, permission pickers fall back to a free-text code input.\n * Use with `inject(ACTION_PROVIDER, { optional: true })`.\n */\nexport const ACTION_PROVIDER = new InjectionToken<IActionProvider>('ACTION_PROVIDER');\n","import { computed, Directive, inject, input, resource } from '@angular/core';\nimport { TreeNode } from '@flusys/ng-ui';\nimport { firstValueFrom } from 'rxjs';\nimport { IActionBasicInfo } from '../../interfaces/providers.interface';\nimport { ACTION_PROVIDER } from '../../tokens/provider.tokens';\n\nfunction byOrder(a: IActionBasicInfo, b: IActionBasicInfo): number {\n return (a.serial ?? Number.MAX_SAFE_INTEGER) - (b.serial ?? Number.MAX_SAFE_INTEGER) || a.name.localeCompare(b.name);\n}\n\n/** Nests actions by parentId; code-less groups can only be expanded, and groups with nothing pickable are dropped. */\nfunction buildActionTree(actions: IActionBasicInfo[]): TreeNode[] {\n const ids = new Set(actions.map((a) => a.id));\n const byParent = new Map<string | null, IActionBasicInfo[]>();\n for (const action of actions) {\n const parentId = action.parentId && ids.has(action.parentId) ? action.parentId : null;\n byParent.set(parentId, [...(byParent.get(parentId) ?? []), action]);\n }\n\n const build = (parentId: string | null): TreeNode[] =>\n [...(byParent.get(parentId) ?? [])].sort(byOrder).flatMap((action) => {\n const children = build(action.id);\n if (!action.code && !children.length) return [];\n return [{\n key: action.code ?? `group:${action.id}`,\n label: action.name,\n code: action.code ?? '',\n selectable: !!action.code,\n leaf: !children.length,\n children: children.length ? children : undefined,\n }];\n });\n\n return build(null);\n}\n\n/** Shared action loading for the single and multi permission pickers. */\n@Directive()\nexport abstract class BaseActionSelectComponent {\n private readonly provider = inject(ACTION_PROVIDER, { optional: true });\n\n readonly placeholder = input<string>('');\n readonly inputId = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly hasProvider = !!this.provider && this.provider.isAvailable?.() !== false;\n\n readonly actions = resource({\n loader: async () => {\n const provider = this.hasProvider ? this.provider : null;\n if (!provider) return [];\n const response = await firstValueFrom(provider.getActions());\n return response.data ?? [];\n },\n });\n\n /** Picker mode; typing codes is the fallback when there is no provider or the actions could not be loaded. */\n readonly useSelect = computed(() => this.hasProvider && !this.actions.error());\n\n private readonly actionTree = computed(() => buildActionTree(this.actions.hasValue() ? this.actions.value() : []));\n\n private readonly knownCodes = computed(\n () => new Set((this.actions.hasValue() ? this.actions.value() : []).flatMap((a) => (a.code ? [a.code] : []))),\n );\n\n /** The action tree plus any saved code that is not (or no longer) an action, so the selection still shows. */\n protected treeWith(saved: string[]): TreeNode[] {\n const known = this.knownCodes();\n const unknown = saved.filter((code) => !known.has(code)).map((code) => ({ key: code, label: code, code, leaf: true }));\n return [...unknown, ...this.actionTree()];\n }\n}\n","import { Component, computed, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextDirective, TagComponent, TreeNode, TreeSelectComponent, UiIconComponent } from '@flusys/ng-ui';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { BaseActionSelectComponent } from './base-action-select.class';\n\n/**\n * Picks several permission action codes from the action tree of ACTION_PROVIDER (wired by ng-iam);\n * without an available provider, or when loading fails, it falls back to typing codes as chips (Enter adds one).\n *\n * @example\n * <lib-action-multi-select [(value)]=\"actionGroups\" inputId=\"actionGroups\" />\n */\n@Component({\n selector: 'lib-action-multi-select',\n imports: [FormsModule, InputTextDirective, TagComponent, TreeSelectComponent, UiIconComponent, TranslatePipe],\n host: { class: 'block w-full min-w-0' },\n template: `\n @if (useSelect()) {\n <f-treeselect\n [inputId]=\"inputId()\"\n [options]=\"options()\"\n selectionMode=\"checkbox\"\n [propagateSelectionDown]=\"false\"\n [propagateSelectionUp]=\"false\"\n display=\"chip\"\n filterBy=\"label,code\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder() || ('shared.action.select.placeholder.multiple' | translate)\"\n [emptyMessage]=\"'shared.action.select.empty' | translate\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"value.set($event ?? [])\"\n />\n } @else {\n <div class=\"flex flex-wrap items-center gap-1\">\n @for (code of value(); track code) {\n <f-tag [rounded]=\"true\" severity=\"secondary\">\n <span class=\"flex items-center gap-1 font-mono text-xs\">\n {{ code }}\n @if (!disabled()) {\n <button type=\"button\" class=\"cursor-pointer hover:text-danger\" [attr.aria-label]=\"'shared.remove' | translate\" (click)=\"remove(code)\">\n <ui-icon name=\"x\" [size]=\"12\" />\n </button>\n }\n </span>\n </f-tag>\n }\n <input\n fInputText\n class=\"flex-1 min-w-40\"\n [id]=\"inputId()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder() || ('shared.action.select.type.code' | translate)\"\n [ngModel]=\"draft()\"\n (ngModelChange)=\"draft.set($event)\"\n (keydown.enter)=\"add($event)\"\n />\n </div>\n }\n `,\n})\nexport class ActionMultiSelectComponent extends BaseActionSelectComponent {\n readonly value = model<string[]>([]);\n readonly draft = signal('');\n readonly options = computed<TreeNode[]>(() => this.treeWith(this.value()));\n\n add(event: Event): void {\n event.preventDefault();\n const code = this.draft().trim();\n if (code && !this.value().includes(code)) this.value.set([...this.value(), code]);\n this.draft.set('');\n }\n\n remove(code: string): void {\n this.value.set(this.value().filter((c) => c !== code));\n }\n}\n","import { Component, computed, input, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextDirective, TreeNode, TreeSelectComponent } from '@flusys/ng-ui';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { BaseActionSelectComponent } from './base-action-select.class';\n\n/**\n * Picks a permission action code from the action tree of ACTION_PROVIDER (wired by ng-iam);\n * without an available provider, or when loading fails, it falls back to a free-text code input.\n *\n * @example\n * <lib-action-select [(value)]=\"permissionCode\" inputId=\"permission\" [placeholder]=\"defaultCode\" />\n */\n@Component({\n selector: 'lib-action-select',\n imports: [FormsModule, InputTextDirective, TreeSelectComponent, TranslatePipe],\n host: { class: 'block w-full min-w-0' },\n template: `\n @if (useSelect()) {\n <f-treeselect\n [inputId]=\"inputId()\"\n [options]=\"options()\"\n filterBy=\"label,code\"\n [filter]=\"true\"\n [showClear]=\"showClear()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder() || ('shared.action.select.placeholder' | translate)\"\n [emptyMessage]=\"'shared.action.select.empty' | translate\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"value.set($event ?? null)\"\n />\n } @else {\n <input\n fInputText\n class=\"w-full\"\n [id]=\"inputId()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"value() ?? ''\"\n (ngModelChange)=\"value.set($event || null)\"\n />\n }\n `,\n})\nexport class ActionSelectComponent extends BaseActionSelectComponent {\n readonly value = model<string | null>(null);\n readonly showClear = input<boolean>(true);\n\n readonly options = computed<TreeNode[]>(() => {\n const current = this.value();\n return this.treeWith(current ? [current] : []);\n });\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: 'ng-template[baseFormTemplate]' })\nexport class BaseFormTemplateDirective {\n readonly key = input.required<string>({ alias: 'baseFormTemplate' });\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n CardComponent,\n CheckboxComponent,\n DatePickerComponent,\n FButtonDirective,\n InputNumberComponent,\n InputTextDirective,\n MessageService,\n MultiSelectComponent,\n PasswordComponent,\n SelectComponent,\n TextareaDirective,\n ToggleSwitchComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { TranslateService } from '../../services/translate.service';\nimport { BaseFormTemplateDirective } from './base-form-template.directive';\nimport { IFormField } from './base-form.interfaces';\n\n@Component({\n selector: 'lib-base-form',\n imports: [\n FormsModule,\n NgTemplateOutlet,\n CardComponent,\n InputTextDirective,\n PasswordComponent,\n UiIconComponent,\n InputNumberComponent,\n TextareaDirective,\n SelectComponent,\n MultiSelectComponent,\n DatePickerComponent,\n CheckboxComponent,\n ToggleSwitchComponent,\n FButtonDirective,\n ],\n templateUrl: './base-form.component.html',\n})\nexport class BaseFormComponent {\n private readonly translateAdapter = inject(TranslateService, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly messageService = inject(MessageService, { optional: true });\n\n readonly fields = input.required<IFormField[]>();\n readonly title = input<string>('');\n readonly createTitle = input<string>('');\n readonly editTitle = input<string>('');\n readonly columns = input<1 | 2 | 3>(2);\n readonly submitLabel = input<string>('');\n readonly cancelLabel = input<string>('');\n\n readonly isLoading = input<boolean>(false);\n readonly isEditMode = input<boolean>(false);\n readonly initialValue = input<Record<string, unknown>>({});\n\n readonly service = input<ApiResourceService<unknown, unknown> | null>(null);\n readonly editId = input<string | null>(null);\n readonly cancelRoute = input<string | string[] | null>(null);\n readonly navigateOnSuccess = input<string | string[] | null>(null);\n readonly mapToRequest = input<((data: Record<string, unknown>, editId: string | null) => unknown) | null>(null);\n readonly mapFromEntity = input<((entity: unknown) => Record<string, unknown>) | null>(null);\n\n readonly onSubmit = output<Record<string, unknown>>();\n readonly onCancel = output<void>();\n readonly onValueChange = output<Record<string, unknown>>();\n\n readonly fieldTemplates = contentChildren(BaseFormTemplateDirective);\n\n private readonly _formData = signal<Record<string, unknown>>({});\n private readonly _submitted = signal(false);\n private readonly _isLoadingInternal = signal(false);\n private readonly _touchedFields = signal<Set<string>>(new Set());\n\n readonly formData = this._formData.asReadonly();\n readonly submitted = this._submitted.asReadonly();\n\n readonly effectiveIsEditMode = computed(() => this.isEditMode() || !!this.editId());\n readonly effectiveIsLoading = computed(() => this.isLoading() || this._isLoadingInternal());\n readonly isFormValid = computed(() => this.checkValidity());\n\n readonly resolvedTitle = computed(() => {\n if (this.effectiveIsEditMode()) return this.editTitle() || this.title();\n return this.createTitle() || this.title();\n });\n\n readonly gridClass = computed(() => {\n switch (this.columns()) {\n case 1: return 'grid-cols-1';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n default: return 'grid-cols-1 md:grid-cols-2';\n }\n });\n\n constructor() {\n effect(() => {\n const fields = this.fields();\n const initial = this.initialValue();\n const defaults: Record<string, unknown> = {};\n for (const f of fields) defaults[f.key] = this.getDefaultValue(f);\n this._formData.set({ ...defaults, ...initial });\n this._submitted.set(false);\n this._touchedFields.set(new Set());\n });\n\n effect(() => {\n const editId = this.editId();\n const service = this.service();\n const mapFn = this.mapFromEntity();\n if (editId && service && mapFn) this.loadEntity(editId, service, mapFn);\n });\n }\n\n private async loadEntity(\n id: string,\n service: ApiResourceService<unknown, unknown>,\n mapFn: (entity: unknown) => Record<string, unknown>,\n ): Promise<void> {\n this._isLoadingInternal.set(true);\n try {\n const response = await service.findById(id);\n if (response.success && response.data) {\n this._formData.update((prev) => ({ ...prev, ...mapFn(response.data) }));\n this._submitted.set(false);\n }\n } catch {\n this.navigateTo(this.cancelRoute());\n } finally {\n this._isLoadingInternal.set(false);\n }\n }\n\n getFieldValue(key: string): unknown {\n return this._formData()[key];\n }\n\n setFieldValue(key: string, value: unknown): void {\n this._formData.update((data) => ({ ...data, [key]: value }));\n this._touchedFields.update((set) => new Set([...set, key]));\n this.onValueChange.emit(this._formData());\n }\n\n markFieldTouched(key: string): void {\n this._touchedFields.update((set) => new Set([...set, key]));\n }\n\n isFieldInvalid(field: IFormField): boolean {\n const isActive = this._submitted() || this._touchedFields().has(field.key);\n if (!isActive || !field.required) return false;\n const value = this._formData()[field.key];\n if (Array.isArray(value)) return value.length === 0;\n return value === null || value === undefined || value === '';\n }\n\n getFieldTemplate(key: string): TemplateRef<unknown> | null {\n return this.fieldTemplates().find((t) => t.key() === key)?.templateRef ?? null;\n }\n\n async handleSubmit(): Promise<void> {\n this._submitted.set(true);\n if (!this.isFormValid()) return;\n\n const service = this.service();\n const mapFn = this.mapToRequest();\n\n if (service && mapFn) {\n await this.managedSubmit(service, mapFn);\n } else {\n this.onSubmit.emit({ ...this._formData() });\n }\n }\n\n handleCancel(): void {\n this.navigateTo(this.cancelRoute());\n this.onCancel.emit();\n }\n\n reset(): void {\n const defaults: Record<string, unknown> = {};\n for (const f of this.fields()) defaults[f.key] = this.getDefaultValue(f);\n this._formData.set(defaults);\n this._submitted.set(false);\n this._touchedFields.set(new Set());\n }\n\n t(key: string, vars?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n\n private async managedSubmit(\n service: ApiResourceService<unknown, unknown>,\n mapFn: (data: Record<string, unknown>, editId: string | null) => unknown,\n ): Promise<void> {\n this._isLoadingInternal.set(true);\n try {\n const editId = this.editId();\n const dto = mapFn(this._formData(), editId);\n const response = editId ? await service.update(dto) : await service.insert(dto);\n\n this.messageService?.add({\n severity: 'success',\n summary: this.t('shared.success'),\n detail: response.messageKey\n ? this.t(response.messageKey, response.messageVariables as Record<string, string | number>)\n : (response.message ?? ''),\n });\n\n this.onSubmit.emit({ ...this._formData() });\n this.navigateTo(this.navigateOnSuccess());\n } catch {\n // handled by global interceptor\n } finally {\n this._isLoadingInternal.set(false);\n }\n }\n\n private checkValidity(): boolean {\n return this.fields().every((f) => {\n if (!f.required) return true;\n const value = this._formData()[f.key];\n if (Array.isArray(value)) return value.length > 0;\n return value !== null && value !== undefined && value !== '';\n });\n }\n\n private navigateTo(route: string | string[] | null | undefined): void {\n if (!route || !this.router) return;\n this.router.navigate(Array.isArray(route) ? route : [route]);\n }\n\n private getDefaultValue(field: IFormField): unknown {\n switch (field.type) {\n case 'checkbox':\n case 'toggle':\n return false;\n case 'multiselect':\n return [];\n case 'number':\n return null;\n default:\n return '';\n }\n }\n}\n","<f-card>\n <ng-template #header>\n @if (resolvedTitle()) {\n <div class=\"flex justify-between items-center p-4\">\n <h2 class=\"text-xl font-semibold m-0\">{{ resolvedTitle() }}</h2>\n </div>\n }\n </ng-template>\n\n <form (ngSubmit)=\"handleSubmit()\" novalidate>\n <div class=\"grid gap-4\" [class]=\"gridClass()\">\n @for (field of fields(); track field.key) {\n <div class=\"flex flex-col gap-2\" [class.col-span-full]=\"field.fullWidth\">\n @if (field.type !== 'checkbox' && field.type !== 'toggle') {\n <label [for]=\"field.key\" class=\"font-medium\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n }\n\n @switch (field.type) {\n @case ('text') {\n <input\n fInputText\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('email') {\n <input\n fInputText\n type=\"email\"\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('password') {\n <f-password\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n />\n }\n\n @case ('number') {\n <f-inputnumber\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [min]=\"field.min ?? null\"\n [max]=\"field.max ?? null\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('textarea') {\n <textarea\n fTextarea\n [id]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (blur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [rows]=\"field.rows ?? 3\"\n [class.ng-invalid]=\"isFieldInvalid(field)\"\n [class.ng-dirty]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n ></textarea>\n }\n\n @case ('select') {\n <f-select\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [options]=\"field.options ?? []\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"field.placeholder ?? t('shared.select.placeholder')\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('multiselect') {\n <f-multiselect\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [options]=\"field.options ?? []\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"field.placeholder ?? t('shared.select.placeholder')\"\n [disabled]=\"field.disabled ?? false\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n }\n\n @case ('date') {\n <f-datepicker\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n (onBlur)=\"markFieldTouched(field.key)\"\n [placeholder]=\"field.placeholder ?? ''\"\n [disabled]=\"field.disabled ?? false\"\n [minDate]=\"field.minDate ?? null\"\n [maxDate]=\"field.maxDate ?? null\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('checkbox') {\n <div class=\"flex items-center gap-2 h-9\">\n <f-checkbox\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [disabled]=\"field.disabled ?? false\"\n [binary]=\"true\"\n [invalid]=\"isFieldInvalid(field)\"\n />\n <label [for]=\"field.key\" class=\"font-medium cursor-pointer select-none\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n </div>\n }\n\n @case ('toggle') {\n <div class=\"flex items-center gap-3 h-9\">\n <f-toggleswitch\n [inputId]=\"field.key\"\n [name]=\"field.key\"\n [ngModel]=\"getFieldValue(field.key)\"\n (ngModelChange)=\"setFieldValue(field.key, $event)\"\n [disabled]=\"field.disabled ?? false\"\n />\n <label [for]=\"field.key\" class=\"font-medium cursor-pointer select-none\">\n {{ field.label }}\n @if (field.required) {\n <span class=\"text-red-500 ml-1\">*</span>\n }\n </label>\n </div>\n }\n\n @case ('custom') {\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate(field.key)\"\n [ngTemplateOutletContext]=\"{ $implicit: getFieldValue(field.key), field: field }\"\n />\n }\n }\n\n @if (isFieldInvalid(field)) {\n <small class=\"text-red-500\">{{ field.label }} {{ t('shared.required') }}</small>\n }\n\n @if (field.hint && !isFieldInvalid(field)) {\n <small class=\"text-surface-400\">{{ field.hint }}</small>\n }\n </div>\n }\n\n <div class=\"col-span-full flex justify-end gap-4 pt-4\">\n <button\n fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n [disabled]=\"effectiveIsLoading()\"\n (click)=\"handleCancel()\"\n >\n <span pButtonLabel>{{ cancelLabel() || t('shared.cancel') }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || effectiveIsLoading()\"\n >\n @if (effectiveIsLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ submitLabel() || (effectiveIsEditMode() ? t('shared.update') : t('shared.save')) }}</span>\n </button>\n </div>\n </div>\n </form>\n</f-card>\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: 'ng-template[baseListTemplate]' })\nexport class BaseListTemplateDirective {\n readonly key = input.required<string>({ alias: 'baseListTemplate' });\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n computed,\n contentChildren,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { DatePipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG, isServiceEnabled } from '@flusys/ng-core';\nimport {\n CardComponent,\n ConfirmationService,\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n MessageService,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { DeleteType } from '../../interfaces/common-data.interface';\nimport { IFilter } from '../../interfaces/filter-data.interface';\nimport { TranslateService } from '../../services/translate.service';\nimport { BaseListTemplateDirective } from './base-list-template.directive';\nimport { ITableAction, ITableColumn, ITagConfig } from './base-list.interfaces';\n\n@Component({\n selector: 'lib-base-list',\n imports: [\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n FormsModule,\n CardComponent,\n IconFieldComponent,\n InputIconComponent,\n UiIconComponent,\n InputTextDirective,\n FButtonDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n ],\n templateUrl: './base-list.component.html',\n})\nexport class BaseListComponent {\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly router = inject(Router, { optional: true });\n private readonly messageService = inject(MessageService, { optional: true });\n private readonly appConfig = inject(APP_CONFIG);\n private readonly confirmationService = inject(ConfirmationService, {\n optional: true,\n });\n\n readonly columns = input.required<ITableColumn[]>();\n readonly actions = input<ITableAction[]>([]);\n readonly title = input<string>('');\n readonly showCreateButton = input<boolean>(true);\n readonly searchable = input<boolean>(false);\n readonly pageSize = input<number>(10);\n readonly scrollHeight = input<string>('10rem');\n readonly emptyMessage = input<string>('');\n readonly createButtonLabel = input<string>('');\n readonly createButtonIcon = input<string>('plus');\n\n readonly data = input<unknown[]>([]);\n readonly total = input<number>(0);\n readonly isLoading = input<boolean>(false);\n\n readonly service = input<ApiResourceService<unknown, unknown> | null>(null);\n readonly filter = input<IFilter>({});\n readonly createRoute = input<string | null>(null);\n readonly editRoute = input<string | null>(null);\n readonly deleteConfirmField = input<string | null>(null);\n readonly deleteType = input<DeleteType>('delete');\n readonly idField = input<string>('id');\n readonly canEdit = input<((item: unknown) => boolean) | null>(null);\n readonly canDelete = input<((item: unknown) => boolean) | null>(null);\n\n readonly onCreate = output<void>();\n readonly onLazyLoad = output<{ first: number; rows: number }>();\n readonly onSearch = output<string>();\n\n readonly columnTemplates = contentChildren(BaseListTemplateDirective);\n\n private readonly _first = signal(0);\n private readonly _searchTerm = signal('');\n readonly first = this._first.asReadonly();\n readonly searchTerm = this._searchTerm.asReadonly();\n\n readonly effectiveData = computed(\n () => this.service()?.data() ?? this.data(),\n );\n readonly effectiveTotal = computed(\n () => this.service()?.total() ?? this.total(),\n );\n readonly effectiveIsLoading = computed(\n () => this.service()?.isLoading() ?? this.isLoading(),\n );\n\n readonly effectiveActions = computed<ITableAction[]>(() => {\n const editRoute = this.editRoute();\n const deleteField = this.deleteConfirmField();\n\n const editAction: ITableAction[] = editRoute\n ? [\n {\n icon: 'pencil',\n tooltip: 'shared.edit',\n severity: 'info',\n show: this.canEdit() ?? undefined,\n handler: (item) => this.handleEditItem(item),\n },\n ]\n : [];\n\n const deleteAction: ITableAction[] = deleteField\n ? [\n {\n icon: 'trash',\n tooltip: 'shared.delete',\n severity: 'danger',\n show: this.canDelete() ?? undefined,\n handler: (item) => this.handleDeleteItem(item),\n },\n ]\n : [];\n\n return [...editAction, ...this.actions(), ...deleteAction];\n });\n\n readonly visibleColumns = computed(() =>\n this.columns().filter((c) => !c.hidden),\n );\n readonly columnCount = computed(\n () =>\n this.visibleColumns().length +\n (this.effectiveActions().length > 0 ? 1 : 0),\n );\n\n readonly resolvedEmptyMessage = computed(\n () => this.emptyMessage() || this.t('shared.no.data'),\n );\n readonly resolvedCreateLabel = computed(\n () => this.createButtonLabel() || this.t('shared.create'),\n );\n\n handleLazyLoad(event: { first?: number | null; rows?: number | null }): void {\n const first = event.first ?? 0;\n const rows = event.rows ?? this.pageSize();\n this._first.set(first);\n\n const service = this.service();\n if (service) {\n service.fetchList(this.searchTerm(), {\n pagination: { currentPage: Math.floor(first / rows), pageSize: rows },\n filter: this.filter(),\n });\n }\n\n this.onLazyLoad.emit({ first, rows });\n }\n\n onSearchChange(value: string): void {\n this._first.set(0);\n this._searchTerm.set(value);\n\n const service = this.service();\n if (service) {\n service.fetchList(value, {\n pagination: { currentPage: 0, pageSize: this.pageSize() },\n filter: this.filter(),\n });\n }\n\n this.onSearch.emit(value);\n }\n\n handleCreate(): void {\n const route = this.createRoute();\n if (route && this.router) this.router.navigate([route]);\n this.onCreate.emit();\n }\n\n private handleEditItem(item: unknown): void {\n const route = this.editRoute();\n const id = this.getFieldValueAsString(item, this.idField());\n if (route && id && this.router) this.router.navigate([route, id]);\n }\n\n private handleDeleteItem(item: unknown): void {\n const nameField = this.deleteConfirmField()!;\n const name = this.getFieldValueAsString(item, nameField);\n const id = this.getFieldValueAsString(item, this.idField());\n\n this.confirmationService?.confirm({\n message: this.t('shared.confirm.delete.item', { name }),\n header: this.t('shared.confirm.delete'),\n icon: 'exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n const response = await this.service()?.delete({\n id,\n type: this.deleteType(),\n });\n this.messageService?.add({\n severity: 'success',\n summary: this.t('shared.success'),\n detail:\n response && isServiceEnabled(this.appConfig, 'localization')\n ? this.t(\n response?.messageKey || '',\n response.messageVariables as Record<\n string,\n string | number\n >,\n )\n : (response?.message ?? ''),\n });\n this.service()?.reload();\n } catch {\n // handled by global interceptor\n }\n },\n });\n }\n\n getFieldValue(item: unknown, field: string): unknown {\n return field\n .split('.')\n .reduce<unknown>(\n (obj, key) =>\n obj != null ? (obj as Record<string, unknown>)[key] : null,\n item,\n );\n }\n\n getFieldValueAsString(item: unknown, field: string): string {\n return String(this.getFieldValue(item, field) ?? '');\n }\n\n getTagConfig(col: ITableColumn, value: unknown): ITagConfig | null {\n return col.tagMap?.[String(value)] ?? null;\n }\n\n getColumnTemplate(field: string): TemplateRef<unknown> | null {\n return (\n this.columnTemplates().find((t) => t.key() === field)?.templateRef ?? null\n );\n }\n\n truncateText(value: unknown, limit?: number): string {\n const str = String(value ?? '');\n return limit && str.length > limit ? `${str.slice(0, limit)}…` : str;\n }\n\n getCellClass(col: ITableColumn): string {\n switch (col.align) {\n case 'center':\n return 'text-center';\n case 'right':\n return 'text-right';\n default:\n return '';\n }\n }\n\n t(key: string, vars?: Record<string, string | number>): string {\n return this.translateAdapter?.translate(key, vars) ?? key;\n }\n}\n","<f-card>\n <ng-template #header>\n @if (title() || searchable() || showCreateButton()) {\n <div\n class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 p-4\"\n >\n @if (title()) {\n <h2 class=\"text-xl font-semibold m-0\">{{ title() }}</h2>\n }\n <div class=\"flex items-center gap-2\" [class.ml-auto]=\"!!title()\">\n @if (searchable()) {\n <f-iconfield>\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"t('shared.search')\"\n />\n </f-iconfield>\n }\n @if (showCreateButton()) {\n <button fButton (click)=\"handleCreate()\">\n <ui-icon pButtonIcon [name]=\"createButtonIcon()\"></ui-icon>\n <span pButtonLabel>{{ resolvedCreateLabel() }}</span>\n </button>\n }\n </div>\n </div>\n }\n </ng-template>\n\n <div class=\"overflow-x-auto\">\n <f-table\n [value]=\"effectiveData()\"\n [loading]=\"effectiveIsLoading()\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [scrollHeight]=\"scrollHeight()\"\n [paginator]=\"effectiveTotal() > pageSize()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"effectiveTotal()\"\n [first]=\"first()\"\n (onLazyLoad)=\"handleLazyLoad($event)\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"t('shared.pagination.report')\"\n class=\"p-datatable-striped\"\n >\n <ng-template #header>\n <tr>\n @for (col of visibleColumns(); track col.field) {\n <th\n [style.width]=\"col.width\"\n [style.min-width]=\"col.minWidth\"\n [class]=\"getCellClass(col)\"\n >\n {{ col.header }}\n </th>\n }\n @if (effectiveActions().length > 0) {\n <th style=\"width: 120px; text-align: center\">\n {{ t(\"shared.actions\") }}\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-item>\n <tr>\n @for (col of visibleColumns(); track col.field) {\n <td [class]=\"getCellClass(col)\">\n @switch (col.type ?? \"text\") {\n @case (\"tag\") {\n @if (\n getTagConfig(col, getFieldValue(item, col.field));\n as tagCfg\n ) {\n <f-tag\n [severity]=\"tagCfg.severity\"\n [value]=\"\n tagCfg.label ?? getFieldValueAsString(item, col.field)\n \"\n />\n } @else {\n {{ getFieldValueAsString(item, col.field) }}\n }\n }\n @case (\"boolean\") {\n <f-tag\n [severity]=\"\n getFieldValue(item, col.field) ? 'success' : 'danger'\n \"\n [value]=\"\n getFieldValue(item, col.field)\n ? t('shared.yes')\n : t('shared.no')\n \"\n />\n }\n @case (\"date\") {\n {{\n getFieldValueAsString(item, col.field)\n | date: col.dateFormat ?? \"dd/MM/yyyy\"\n }}\n }\n @case (\"number\") {\n {{ getFieldValueAsString(item, col.field) | number }}\n }\n @case (\"custom\") {\n <ng-container\n [ngTemplateOutlet]=\"getColumnTemplate(col.field)\"\n [ngTemplateOutletContext]=\"{ $implicit: item, field: col.field }\"\n />\n }\n @default {\n {{\n truncateText(getFieldValue(item, col.field), col.truncate)\n }}\n }\n }\n </td>\n }\n @if (effectiveActions().length > 0) {\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @for (action of effectiveActions(); track $index) {\n @if (!action.show || action.show(item)) {\n <button\n fButton\n [severity]=\"action.severity ?? 'secondary'\"\n [fTooltip]=\"action.tooltip ? t(action.tooltip) : ''\"\n [disabled]=\"\n action.disabled ? action.disabled(item) : false\n \"\n (click)=\"action.handler(item)\"\n [rounded]=\"true\"\n [text]=\"true\"\n >\n <ui-icon pButtonIcon [name]=\"action.icon\"></ui-icon>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template #emptymessage>\n <tr>\n <td [attr.colspan]=\"columnCount()\">\n <div\n class=\"flex flex-col items-center justify-center py-12 text-surface-400\"\n >\n <ui-icon name=\"inbox\" class=\"text-5xl mb-3\"></ui-icon>\n <span>{{ resolvedEmptyMessage() }}</span>\n </div>\n </td>\n </tr>\n </ng-template>\n </f-table>\n </div>\n</f-card>\n","import { IPagination } from '../interfaces/filter-data.interface';\n\n/**\n * Configuration for scroll pagination behavior\n */\nexport interface ScrollPaginationConfig {\n /** Distance from bottom to trigger pagination (default: 50px) */\n threshold?: number;\n /** Current pagination state */\n pagination: IPagination;\n /** Total items available */\n total: number | undefined;\n /** Whether currently loading */\n isLoading: boolean;\n}\n\n/**\n * Check if scroll has reached near bottom and calculate next page if available.\n * Returns next pagination if should load more, null otherwise.\n *\n * @example\n * ```typescript\n * onScroll(event: Event): void {\n * const nextPagination = checkScrollPagination(event, {\n * pagination: this.pagination(),\n * total: this.total(),\n * isLoading: this.isLoading(),\n * });\n * if (nextPagination) {\n * this.onPagination.emit(nextPagination);\n * }\n * }\n * ```\n */\nexport function checkScrollPagination(\n event: Event,\n config: ScrollPaginationConfig,\n): IPagination | null {\n const el = event.target;\n if (!(el instanceof HTMLElement)) return null;\n\n const threshold = config.threshold ?? 50;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - threshold;\n\n if (!nearBottom || config.isLoading) return null;\n\n const { pagination, total } = config;\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (total ?? 0);\n\n if (!hasMore) return null;\n\n return { ...pagination, currentPage: nextPage };\n}\n","import {\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n FButtonDirective,\n MessageService,\n ProgressbarComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport { firstValueFrom } from 'rxjs';\nimport {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n UploadMultipleFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\n\n@Component({\n selector: 'lib-file-uploader',\n imports: [\n UiIconComponent,\n ProgressbarComponent,\n FButtonDirective,\n TranslatePipe,\n ],\n template: `\n @if (!hasUploadCapability()) {\n <div\n class=\"p-4 border border-dashed border-orange-300 bg-orange-50 dark:bg-orange-900/20 rounded-lg text-center\"\n >\n <ui-icon name=\"exclamation-triangle\" class=\"text-2xl text-orange-500 mb-2\"></ui-icon>\n <p class=\"text-sm text-orange-700 dark:text-orange-300\">\n {{\n 'shared.upload.provider.not.configured'\n | translate: { provider: 'provideStorageProviders()' }\n }}\n </p>\n </div>\n } @else {\n <div\n class=\"w-full\"\n [class.opacity-60]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <ui-icon name=\"loader-circle\" spin class=\"text-3xl sm:text-4xl text-primary\"></ui-icon>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">\n {{\n 'shared.upload.uploading'\n | translate: { fileName: uploadingFileName() }\n }}\n </p>\n @if (uploadProgress() > 0) {\n <f-progressbar\n [value]=\"uploadProgress()\"\n [showValue]=\"true\"\n class=\"w-full mt-2 max-w-xs\"\n />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <ui-icon name=\"cloud-upload\" class=\"text-3xl sm:text-4xl text-primary\"></ui-icon>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{\n multiple()\n ? ('shared.upload.drop.multiple' | translate)\n : ('shared.upload.drop.single' | translate)\n }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n {{ 'shared.upload.allowed.types' | translate }}\n {{ acceptTypesDisplay() }}\n } @else {\n {{ 'shared.upload.all.types.allowed' | translate }}\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">{{\n 'shared.upload.max.size' | translate: { size: maxSizeMb() }\n }}</span>\n }\n </p>\n </div>\n }\n </div>\n\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n [accept]=\"acceptString()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isUploading()\"\n (change)=\"onFileSelected($event)\"\n />\n\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n @let fileIcon = getFileIcon(file);\n @let fileSize = formatSize(file.size);\n <div\n class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\"\n >\n <ui-icon\n [name]=\"fileIcon\"\n class=\"text-lg sm:text-xl flex-shrink-0\"\n ></ui-icon>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{\n file.name\n }}</span>\n <span\n class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\"\n >{{ fileSize }}</span\n >\n <button\n fButton\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (click)=\"removeFile(file)\"\n >\n <ui-icon pButtonIcon name=\"times\"></ui-icon>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [\n `\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--f-surface-300);\n background: var(--f-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--f-primary-color);\n background: var(--f-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--f-primary-color);\n background: var(--f-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.app-dark) .upload-zone,\n .app-dark .upload-zone {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n\n :host-context(.app-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .app-dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--f-primary-color);\n background: var(--f-surface-700);\n }\n\n :host-context(.app-dark) .upload-zone.drag-over,\n .app-dark .upload-zone.drag-over {\n border-color: var(--f-primary-color);\n background: var(--f-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--f-surface-200);\n background: var(--f-surface-0);\n }\n\n :host-context(.app-dark) .file-preview-item,\n .app-dark .file-preview-item {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n `,\n ],\n})\nexport class FileUploaderComponent {\n private readonly messageService = inject(MessageService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n\n readonly uploadFile = input<UploadFileFn>();\n readonly uploadMultipleFiles = input<UploadMultipleFilesFn>();\n readonly hasUploadCapability = computed(\n () => !!this.uploadFile() || !!this.fileProvider,\n );\n\n private getUploadFn(): UploadFileFn {\n const inputFn = this.uploadFile();\n if (inputFn) return inputFn;\n if (this.fileProvider)\n return (file, opts) => this.fileProvider!.uploadFile(file, opts);\n throw new Error('shared.file.uploader.no.upload.function');\n }\n\n private getUploadMultipleFn(): UploadMultipleFilesFn | undefined {\n const inputFn = this.uploadMultipleFiles();\n if (inputFn) return inputFn;\n if (this.fileProvider?.uploadMultipleFiles) {\n return (files, opts) =>\n this.fileProvider!.uploadMultipleFiles!(files, opts);\n }\n return undefined;\n }\n\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxFiles = input<number>(10);\n readonly maxSizeMb = input<number>(10);\n readonly uploadOptions = input<IFileUploadOptions>({});\n readonly disabled = input<boolean>(false);\n readonly showPreview = input<boolean>(true);\n readonly autoUpload = input<boolean>(true);\n\n readonly fileUploaded = output<IUploadedFile>();\n readonly filesUploaded = output<IUploadedFile[]>();\n readonly onError = output<Error>();\n readonly fileSelected = output<File[]>();\n\n readonly isUploading = signal(false);\n readonly isDragOver = signal(false);\n readonly uploadProgress = signal(0);\n readonly uploadingFileName = signal('');\n readonly selectedFiles = signal<File[]>([]);\n\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n readonly acceptTypesDisplay = computed(() => {\n const types = this.acceptTypes();\n if (!types.length) return '';\n\n const typesStr = JSON.stringify(types);\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.IMAGES))\n return this.t('shared.file.type.images');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.DOCUMENTS))\n return this.t('shared.file.type.documents');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.VIDEOS))\n return this.t('shared.file.type.videos');\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.AUDIO))\n return this.t('shared.file.type.audio');\n\n return types.map((t) => t.split('/')[1] || t).join(', ');\n });\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled() && !this.isUploading()) {\n this.isDragOver.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n if (this.disabled() || this.isUploading()) return;\n\n const files = event.dataTransfer?.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files?.length) {\n this.handleFiles(Array.from(files));\n }\n input.value = '';\n }\n\n private handleFiles(files: File[]): void {\n const allowedTypes = this.acceptTypes();\n const validFiles = files.filter((file) => {\n if (!isFileTypeAllowed(file, allowedTypes)) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.invalid.type'),\n detail: `${file.name}`,\n });\n return false;\n }\n return true;\n });\n\n const maxSize = this.maxSizeMb() * 1024 * 1024;\n const sizeValidFiles = validFiles.filter((file) => {\n if (file.size > maxSize) {\n this.messageService.add({\n severity: 'warn',\n summary: this.t('shared.upload.file.too.large'),\n detail: `${file.name} (${this.maxSizeMb()}${this.t('shared.size.mb')})`,\n });\n return false;\n }\n return true;\n });\n\n const limitedFiles = this.multiple()\n ? sizeValidFiles.slice(0, this.maxFiles())\n : sizeValidFiles.slice(0, 1);\n\n if (!limitedFiles.length) return;\n\n this.selectedFiles.set(limitedFiles);\n this.fileSelected.emit(limitedFiles);\n\n if (this.autoUpload()) {\n this.uploadFiles(limitedFiles);\n }\n }\n\n removeFile(file: File): void {\n this.selectedFiles.update((files) => files.filter((f) => f !== file));\n }\n\n async uploadFiles(files?: File[]): Promise<void> {\n const filesToUpload = files ?? this.selectedFiles();\n if (!filesToUpload.length || this.isUploading()) return;\n\n this.isUploading.set(true);\n\n try {\n const batchUploadFn = this.getUploadMultipleFn();\n\n if (batchUploadFn && filesToUpload.length > 1) {\n await this.uploadBatch(filesToUpload, batchUploadFn);\n } else {\n await this.uploadSequential(filesToUpload);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.isUploading.set(false);\n this.uploadingFileName.set('');\n this.uploadProgress.set(0);\n }\n }\n\n private async uploadBatch(\n files: File[],\n uploadFn: UploadMultipleFilesFn,\n ): Promise<void> {\n this.uploadingFileName.set(\n `${files.length} ${this.t('shared.upload.files')}`,\n );\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(files, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n response.data.forEach((file) => this.fileUploaded.emit(file));\n this.filesUploaded.emit(response.data);\n this.selectedFiles.set([]);\n\n const r = response as unknown as {\n messageKey?: string;\n messageVariables?: Record<string, string | number>;\n message?: string;\n };\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: r?.messageKey\n ? this.t(r.messageKey, r.messageVariables)\n : (r?.message ?? ''),\n });\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n private async uploadSequential(files: File[]): Promise<void> {\n const uploadedFiles: IUploadedFile[] = [];\n const uploadFn = this.getUploadFn();\n\n for (const file of files) {\n this.uploadingFileName.set(file.name);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n uploadFn(file, this.uploadOptions()),\n );\n\n if (response.success && response.data) {\n uploadedFiles.push(response.data);\n this.fileUploaded.emit(response.data);\n } else {\n throw new Error(response.message || this.t('shared.upload.failed'));\n }\n }\n\n this.filesUploaded.emit(uploadedFiles);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: this.t('shared.upload.complete'),\n detail: this.t('shared.upload.files.uploaded', {\n count: uploadedFiles.length,\n }),\n });\n }\n\n getFileIcon(file: File): string {\n return getFileIconClass(file.type);\n }\n\n formatSize(bytes: number): string {\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(1)} ${this.t('shared.size.kb')}`;\n const mb = kb / 1024;\n return `${mb.toFixed(1)} ${this.t('shared.size.mb')}`;\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n formatFileSize,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n IFileUploadOptions,\n IFolderBasicInfo,\n ISelectFilter,\n IStorageConfigBasicInfo,\n IUploadedFile,\n} from '../../interfaces/file-select.interface';\nimport { FormsModule } from '@angular/forms';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { IsEmptyImageDirective } from '../../directives/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { FileUploaderComponent } from '../file-uploader/file-uploader.component';\nimport {\n ButtonComponent,\n DialogComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n SelectComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_SELECTOR_PAGE_SIZE = 50;\n\n@Component({\n selector: 'lib-file-selector-dialog',\n imports: [\n FormsModule,\n IsEmptyImageDirective,\n DialogComponent,\n UiIconComponent,\n ButtonComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n SelectComponent,\n FileUploaderComponent,\n TranslatePipe,\n ],\n template: `\n <f-dialog\n [header]=\"dialogHeader()\"\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n class=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n @if (!fileProvider) {\n <div class=\"p-6 text-center\">\n <ui-icon name=\"exclamation-triangle\" class=\"text-4xl text-orange-500 mb-3\"></ui-icon>\n <p class=\"text-lg font-medium text-color mb-2\">\n {{ 'shared.file.selector.provider.not.configured' | translate }}\n </p>\n <p class=\"text-sm text-color-secondary mb-4\">\n {{ 'shared.file.selector.add.provider' | translate }}\n <code\n class=\"inline-block bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded font-mono text-xs\"\n >provideStorageProviders()</code\n >\n </p>\n <f-button\n [label]=\"'shared.close' | translate\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onCancel()\"\n />\n </div>\n } @else {\n @if (withUploader()) {\n <div class=\"mb-4\">\n <lib-file-uploader\n [uploadFile]=\"uploadFileFn\"\n [uploadMultipleFiles]=\"uploadMultipleFilesFn\"\n [uploadOptions]=\"{ storageConfigId: effectiveStorageConfigId() }\"\n [acceptTypes]=\"acceptTypes()\"\n [multiple]=\"multiple()\"\n [maxFiles]=\"maxSelection()\"\n [maxSizeMb]=\"10\"\n [showPreview]=\"false\"\n (fileUploaded)=\"onFileUploaded($event)\"\n />\n </div>\n }\n\n <div\n class=\"flex flex-col sm:flex-row gap-2 mb-3 items-stretch sm:items-center\"\n >\n <f-iconfield class=\"flex-1\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"\n 'shared.file.selector.search.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </f-iconfield>\n\n @if (fileProvider.loadFolders) {\n <f-select\n [options]=\"folders()\"\n [ngModel]=\"selectedFolderId()\"\n (ngModelChange)=\"onFolderChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.folders' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onFolderSearch($event)\"\n [selectedObject]=\"selectedFolderObject()\"\n [loading]=\"foldersLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadFolders()\"\n >\n <ng-template #selectedItem let-folder>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"folder\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ folder?.name }}</span>\n </div>\n </ng-template>\n <ng-template #item let-folder>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"folder\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ folder.name }}</span>\n </div>\n </ng-template>\n </f-select>\n }\n\n @if (fileProvider.loadStorageConfigs) {\n <f-select\n [options]=\"storageConfigs()\"\n [ngModel]=\"selectedStorageConfigId()\"\n (ngModelChange)=\"onStorageConfigChange($event)\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [placeholder]=\"'shared.file.selector.all.storage' | translate\"\n [showClear]=\"true\"\n [filter]=\"true\"\n filterBy=\"name\"\n (onFilter)=\"onStorageConfigSearch($event)\"\n [selectedObject]=\"selectedStorageConfigObject()\"\n [loading]=\"storageConfigsLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadStorageConfigs()\"\n >\n <ng-template #selectedItem let-config>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"database\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ config?.name }}</span>\n @if (config?.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n <ng-template #item let-config>\n <div class=\"flex items-center gap-2\">\n <ui-icon name=\"database\" class=\"text-color-secondary\"></ui-icon>\n <span>{{ config.name }}</span>\n @if (config.isDefault) {\n <span\n class=\"text-xs bg-primary text-primary-contrast px-1 rounded\"\n >{{ 'shared.default' | translate }}</span\n >\n }\n </div>\n </ng-template>\n </f-select>\n }\n\n @if (multiple()) {\n <span\n class=\"text-sm text-color-secondary self-center whitespace-nowrap\"\n >\n {{\n 'shared.file.selector.selected'\n | translate: { count: selectedFiles().length }\n }}\n </span>\n }\n </div>\n\n <div class=\"file-grid\" #scrollContainer (scroll)=\"onScroll($event)\">\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <ui-icon name=\"loader-circle\" spin class=\"text-4xl text-color-secondary\"></ui-icon>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <ui-icon name=\"inbox\" class=\"text-4xl mb-2 block\"></ui-icon>\n <p>{{ 'shared.file.selector.no.files' | translate }}</p>\n </div>\n } @else {\n @for (file of files(); track file.id) {\n @let fileSelected = isSelected(file);\n @let fileAllowed = isFileAllowed(file);\n @let isImg = isImage(file);\n @let fileIcon = getFileIcon(file);\n <div\n class=\"file-card\"\n [class.selected]=\"fileSelected\"\n [class.disabled]=\"!fileAllowed\"\n (click)=\"toggleSelection(file)\"\n >\n <div class=\"file-preview\">\n @if (isImg && file.url) {\n <img\n [src]=\"file.url\"\n [alt]=\"file.name\"\n class=\"w-full h-full object-cover\"\n />\n } @else {\n <ui-icon\n [name]=\"fileIcon\"\n class=\"text-4xl sm:text-5xl text-color-secondary\"\n ></ui-icon>\n }\n @if (fileSelected) {\n <div class=\"selected-overlay\">\n <ui-icon name=\"check\" class=\"text-xl sm:text-2xl\"></ui-icon>\n </div>\n }\n </div>\n\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span\n class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\"\n [title]=\"file.name\"\n >\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{\n formatSize(file.size)\n }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <ui-icon name=\"loader-circle\" spin class=\"text-color-secondary\"></ui-icon>\n </div>\n }\n }\n </div>\n\n <ng-template #footer>\n <div\n class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\"\n >\n <f-button\n [label]=\"'shared.cancel' | translate\"\n severity=\"secondary\"\n [text]=\"true\"\n class=\"w-full sm:w-auto\"\n (onClick)=\"onCancel()\"\n />\n <f-button\n [label]=\"\n multiple()\n ? ('shared.file.selector.select.multiple'\n | translate: { count: selectedFiles().length })\n : ('shared.file.selector.select' | translate)\n \"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (onClick)=\"onConfirm()\"\n />\n </div>\n </ng-template>\n }\n </f-dialog>\n `,\n styles: [\n `\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--f-surface-300);\n border-radius: var(--f-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--f-surface-0);\n }\n\n :host-context(.app-dark) .file-card,\n .app-dark .file-card {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--f-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--f-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--f-primary-color);\n background: var(--f-primary-50);\n }\n\n :host-context(.app-dark) .file-card.selected,\n .app-dark .file-card.selected {\n background: var(--f-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--f-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.app-dark) .file-preview,\n .app-dark .file-preview {\n background: var(--f-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--f-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--f-primary-color);\n background: var(--f-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.app-dark) .selected-overlay i,\n .app-dark .selected-overlay i {\n background: var(--f-surface-900);\n }\n `,\n ],\n})\nexport class FileSelectorDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n readonly fileProvider = inject(FILE_PROVIDER, { optional: true });\n private abortController: AbortController | null = null;\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly header = input<string>();\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n\n readonly dialogHeader = computed(() => {\n const customHeader = this.header();\n if (customHeader) return customHeader;\n return this.t(\n this.multiple()\n ? 'shared.file.selector.select.files'\n : 'shared.file.selector.select.file',\n );\n });\n readonly maxSelection = input<number>(10);\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n readonly folderId = input<string>(); // Filter by folder\n readonly withUploader = input<boolean>(false);\n\n readonly visible = model<boolean>(false);\n\n readonly fileSelected = output<IFileBasicInfo>();\n readonly filesSelected = output<IFileBasicInfo[]>();\n readonly closed = output<void>();\n readonly onError = output<Error>();\n\n readonly isLoading = signal(false);\n readonly files = signal<IFileBasicInfo[]>([]);\n readonly selectedFiles = signal<IFileBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({\n pageSize: DEFAULT_PAGE_SIZE,\n currentPage: 0,\n });\n readonly searchTerm = signal('');\n\n readonly folders = signal<IFolderBasicInfo[]>([]);\n readonly selectedFolderId = signal<string | null>(null);\n // Captured at selection time so the trigger label survives a later\n // (onFilter) search replacing `folders()` with results that no longer\n // include the already-selected folder.\n readonly selectedFolderObject = signal<IFolderBasicInfo | null>(null);\n readonly foldersLoading = signal(false);\n readonly foldersPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly foldersTotal = signal<number | undefined>(undefined);\n\n readonly storageConfigs = signal<IStorageConfigBasicInfo[]>([]);\n readonly selectedStorageConfigId = signal<string | null>(null);\n // Same reasoning as selectedFolderObject above.\n readonly selectedStorageConfigObject = signal<IStorageConfigBasicInfo | null>(\n null,\n );\n readonly storageConfigsLoading = signal(false);\n readonly storageConfigsPagination = signal<IPagination>({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n readonly storageConfigsTotal = signal<number | undefined>(undefined);\n\n readonly effectiveStorageConfigId = computed(() => {\n const selected = this.selectedStorageConfigId();\n if (selected) return selected;\n // Find default config\n const defaultConfig = this.storageConfigs().find((c) => c.isDefault);\n return defaultConfig?.id;\n });\n\n readonly uploadFileFn = (file: File, options?: IFileUploadOptions) => {\n if (!this.fileProvider)\n throw new Error('shared.file.selector.provider.not.configured');\n return this.fileProvider.uploadFile(file, options);\n };\n\n readonly uploadMultipleFilesFn = this.fileProvider?.uploadMultipleFiles\n ? (files: File[], options?: IFileUploadOptions) =>\n this.fileProvider!.uploadMultipleFiles!(files, options)\n : undefined;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n });\n\n effect(() => {\n const isVisible = this.visible();\n if (isVisible) {\n untracked(() => {\n this.resetState();\n this.fetchFiles();\n if (this.fileProvider?.loadStorageConfigs) {\n this.loadStorageConfigs();\n }\n });\n }\n });\n\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n }\n\n onSearchChange(value: string): void {\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchTerm.set(value);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }, 500);\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.pagination.set(nextPagination);\n this.fetchFiles(true);\n }\n }\n\n toggleSelection(file: IFileBasicInfo): void {\n if (!this.isFileAllowed(file)) return;\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n const isSelected = selected.some((f) => f.id === file.id);\n\n if (isSelected) {\n this.selectedFiles.update((files) =>\n files.filter((f) => f.id !== file.id),\n );\n } else if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, file]);\n }\n } else {\n this.selectedFiles.set([file]);\n }\n }\n\n isSelected(file: IFileBasicInfo): boolean {\n return this.selectedFiles().some((f) => f.id === file.id);\n }\n\n isFileAllowed(file: IFileBasicInfo): boolean {\n const allowedTypes = this.acceptTypes();\n if (!allowedTypes.length) return true;\n\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.contentType.startsWith(type.replace('/*', '/'));\n }\n return file.contentType === type;\n });\n }\n\n isImage(file: IFileBasicInfo): boolean {\n return file.contentType.startsWith('image/') && !!file.url;\n }\n\n getFileIcon(file: IFileBasicInfo): string {\n return getFileIconClass(file.contentType);\n }\n\n formatSize(size: string): string {\n return formatFileSize(size);\n }\n\n onCancel(): void {\n this.visible.set(false);\n }\n\n onConfirm(): void {\n const selected = this.selectedFiles();\n if (selected.length === 0) return;\n\n if (this.multiple()) {\n this.filesSelected.emit(selected);\n } else {\n this.fileSelected.emit(selected[0]);\n }\n\n this.visible.set(false);\n }\n\n onDialogHide(): void {\n this.closed.emit();\n }\n\n onFolderChange(folderId: string | null): void {\n this.selectedFolderId.set(folderId);\n this.selectedFolderObject.set(\n folderId ? (this.folders().find((f) => f.id === folderId) ?? null) : null,\n );\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onFolderSearch(event: { filter: string }): void {\n this.foldersPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadFolders(event.filter);\n }\n\n async loadFolders(search = ''): Promise<void> {\n if (!this.fileProvider?.loadFolders || this.foldersLoading()) return;\n\n this.foldersLoading.set(true);\n try {\n const pag = this.foldersPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFolders(filter),\n );\n if (response.success && response.data) {\n this.folders.set(response.data);\n this.foldersTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.foldersLoading.set(false);\n }\n }\n\n onStorageConfigChange(configId: string | null): void {\n this.selectedStorageConfigId.set(configId);\n this.selectedStorageConfigObject.set(\n configId\n ? (this.storageConfigs().find((c) => c.id === configId) ?? null)\n : null,\n );\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.files.set([]);\n this.fetchFiles();\n }\n\n onStorageConfigSearch(event: { filter: string }): void {\n this.storageConfigsPagination.update((p) => ({ ...p, currentPage: 0 }));\n this.loadStorageConfigs(event.filter);\n }\n\n async loadStorageConfigs(search = ''): Promise<void> {\n if (!this.fileProvider?.loadStorageConfigs || this.storageConfigsLoading())\n return;\n\n this.storageConfigsLoading.set(true);\n try {\n const pag = this.storageConfigsPagination();\n const filter: ISelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadStorageConfigs(filter),\n );\n if (response.success && response.data) {\n this.storageConfigs.set(response.data);\n this.storageConfigsTotal.set(response.meta?.total);\n }\n } catch (error) {\n this.onError.emit(error as Error);\n } finally {\n this.storageConfigsLoading.set(false);\n }\n }\n\n onFileUploaded(uploadedFile: IUploadedFile): void {\n if (!uploadedFile.id) return;\n\n const fileInfo: IFileBasicInfo = {\n id: uploadedFile.id,\n name: uploadedFile.name,\n contentType: uploadedFile.contentType,\n size: String(uploadedFile.size / 1024),\n url: null,\n };\n\n this.files.update((current) => [fileInfo, ...current]);\n\n if (this.multiple()) {\n const selected = this.selectedFiles();\n if (selected.length < this.maxSelection()) {\n this.selectedFiles.update((files) => [...files, fileInfo]);\n }\n } else {\n this.selectedFiles.set([fileInfo]);\n }\n\n this.fetchFiles();\n }\n\n private resetState(): void {\n this.abortController?.abort();\n this.abortController = null;\n this.isLoading.set(false);\n\n this.files.set([]);\n this.selectedFiles.set([]);\n this.searchTerm.set('');\n this.pagination.set({ pageSize: this.pageSize(), currentPage: 0 });\n this.total.set(undefined);\n this.selectedFolderId.set(null);\n this.selectedFolderObject.set(null);\n this.folders.set([]);\n this.foldersPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.foldersTotal.set(undefined);\n this.selectedStorageConfigId.set(null);\n this.selectedStorageConfigObject.set(null);\n this.storageConfigs.set([]);\n this.storageConfigsPagination.set({\n pageSize: DEFAULT_SELECTOR_PAGE_SIZE,\n currentPage: 0,\n });\n this.storageConfigsTotal.set(undefined);\n }\n\n private async fetchFiles(append = false): Promise<void> {\n if (!this.fileProvider || this.isLoading()) return;\n\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IFileSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n contentTypes: this.acceptTypes().length\n ? this.acceptTypes()\n : undefined,\n folderId: this.selectedFolderId() || this.folderId(),\n storageConfigId: this.selectedStorageConfigId() || undefined,\n };\n\n const response = await firstValueFrom(\n this.fileProvider.loadFiles(filter),\n );\n\n if (response.success && response.data) {\n let files = response.data;\n\n if (this.fileProvider.getFileUrls && files.length > 0) {\n const fileIds = files.map((f) => f.id);\n const urlResponse = await firstValueFrom(\n this.fileProvider.getFileUrls(fileIds),\n );\n if (urlResponse.success && urlResponse.data) {\n const urlMap = new Map(urlResponse.data.map((f) => [f.id, f.url]));\n files = files.map((f) => ({\n ...f,\n url: urlMap.get(f.id) ?? f.url,\n }));\n }\n }\n\n if (append) {\n this.files.update((current) => [...current, ...files]);\n } else {\n this.files.set(files);\n }\n this.total.set(response.meta?.total);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import { Component, input } from '@angular/core';\nimport { UiIconComponent } from '@flusys/ng-ui';\nimport { IconTypeEnum } from '../../enums/public-api';\n\n@Component({\n selector: 'lib-icon',\n imports: [UiIconComponent],\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <ui-icon [name]=\"icon()\" [size]=\"17\"></ui-icon>\n }\n }\n `,\n})\nexport class IconComponent {\n readonly icon = input.required<string>();\n readonly iconType = input<IconTypeEnum | undefined>(IconTypeEnum.ICON_NAME);\n protected readonly IconTypeEnum = IconTypeEnum;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, inject, input, resource, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Strips script execution vectors from fetched SVG markup before it is rendered\n * via [innerHTML]. Angular's own DomSanitizer strips SVG elements wholesale (it\n * has no SVG allowlist), which would break every legitimate icon this component\n * renders - so instead this removes only the actual attack surface: <script>/\n * <foreignObject> elements, \"on*\" event handler attributes, and javascript: URIs.\n */\nfunction sanitizeSvgMarkup(svgText: string): string {\n const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml');\n if (doc.querySelector('parsererror')) {\n return '';\n }\n\n doc.querySelectorAll('script, foreignObject').forEach((el) => el.remove());\n\n const walker = doc.createTreeWalker(doc.documentElement, NodeFilter.SHOW_ELEMENT);\n let node: Node | null = walker.currentNode;\n while (node) {\n const element = node as Element;\n Array.from(element.attributes).forEach((attr) => {\n const name = attr.name.toLowerCase();\n const value = attr.value.trim().toLowerCase();\n const isEventHandler = name.startsWith('on');\n const isScriptUri =\n (name === 'href' || name === 'xlink:href') && value.startsWith('javascript:');\n if (isEventHandler || isScriptUri) {\n element.removeAttribute(attr.name);\n }\n });\n node = walker.nextNode();\n }\n\n return new XMLSerializer().serializeToString(doc.documentElement);\n}\n\n@Component({\n selector: 'inline-svg',\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (svg.hasValue()) {\n <span [innerHTML]=\"svg.value()\"></span>\n }\n `,\n styles: `\n inline-svg {\n display: inline-flex;\n align-items: center;\n }\n inline-svg span {\n display: inline-flex;\n align-items: center;\n height: 100%;\n width: 100%;\n }\n inline-svg svg {\n height: 100%;\n width: auto;\n }\n `,\n})\nexport class InlineSvgComponent {\n readonly src = input.required<string>();\n\n private readonly http = inject(HttpClient);\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly svg = resource({\n params: this.src,\n loader: ({ params: url }) =>\n firstValueFrom(this.http.get(url, { responseType: 'text' })).then((text) =>\n // Safe: bypassing Angular's own sanitizer (which would strip all SVG\n // elements) is fine here because sanitizeSvgMarkup already removed the\n // actual attack surface above - never bypass on the raw fetched text.\n this.sanitizer.bypassSecurityTrustHtml(sanitizeSvgMarkup(text)),\n ),\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n ApplicationRef,\n Component,\n computed,\n effect,\n ElementRef,\n EmbeddedViewRef,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n attachOverlayPosition,\n CheckboxChangeEvent,\n CheckboxComponent,\n InputTextDirective,\n OverlayStackService,\n UiIconComponent,\n} from '@flusys/ng-ui';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [\n FormsModule,\n UiIconComponent,\n CheckboxComponent,\n InputTextDirective,\n TranslatePipe,\n ],\n templateUrl: './lazy-multi-select.component.html',\n providers: [provideValueAccessor(LazyMultiSelectComponent)],\n})\nexport class LazyMultiSelectComponent\n extends BaseFormControl<string[] | null>\n implements OnDestroy\n{\n private readonly document = inject(DOCUMENT);\n private readonly appRef = inject(ApplicationRef);\n private readonly overlayStack = inject(OverlayStackService);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly onDocumentClickBound = this.handleDocumentClick.bind(this);\n\n // View references\n readonly pSelectRef =\n viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n readonly overlayTemplate =\n viewChild.required<TemplateRef<unknown>>('overlayTpl');\n\n // Portal state\n private overlayViewRef: EmbeddedViewRef<unknown> | null = null;\n private detachOverlayPosition: (() => void) | null = null;\n\n // Inputs\n readonly placeHolder = input<string>('');\n readonly showClear = input<boolean>(true);\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.multi.select.placeholder');\n });\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n /**\n * Full option objects for the currently selected values, supplied by the\n * caller (or a subclass like UserMultiSelectComponent). Pinned into\n * `mergedDataList` (deduped by `value`) so chips/labels/checkboxes survive\n * a later search/page reload that replaces `selectDataList()` without the\n * selection having changed. This component renders its own overlay list\n * (it does not build on f-multiselect), so the merge has to happen here.\n */\n readonly selectedObjects = input<IDropDown[]>([]);\n\n // Two-way bound value\n override readonly value = model<string[] | null>(null);\n\n private readonly selectedObjectEntries = computed<IDropDown[]>(() => {\n const vals = this.value() ?? [];\n return this.selectedObjects().filter((o) => vals.includes(o.value));\n });\n\n readonly mergedDataList = computed<IDropDown[]>(() => {\n const base = this.selectDataList();\n const extras = this.selectedObjectEntries().filter(\n (sel) => !base.some((o) => o.value === sel.value),\n );\n return extras.length ? [...extras, ...base] : base;\n });\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly openOptions = signal(false);\n\n // Computed values\n readonly selectedValueDisplay = computed(() => {\n const selectedValues = this.value() ?? [];\n if (selectedValues.length === 0) return '';\n if (selectedValues.length > 3) {\n return this.t('shared.multi.select.items.selected', {\n count: selectedValues.length,\n });\n }\n return this.mergedDataList()\n .filter((item) => selectedValues.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n });\n\n readonly hasSelectedValues = computed(() => {\n const selectedValues = this.value() ?? [];\n return selectedValues.length > 0;\n });\n\n readonly isSelectAll = computed(() => {\n const selectedValues = this.value() ?? [];\n const allValues = this.mergedDataList().map((item) => item.value);\n if (selectedValues.length === 0 || allValues.length === 0) return false;\n return allValues.every((val) => selectedValues.includes(val));\n });\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Document click listener for closing dropdown\n afterNextRender({\n write: () => {\n this.document.addEventListener('click', this.onDocumentClickBound);\n },\n });\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('click', this.onDocumentClickBound);\n this.closeOverlay();\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n onSelectClick(): void {\n if (this.disabled() || !this.isEditMode()) return;\n\n if (this.openOptions()) {\n this.closeOverlay();\n } else {\n this.openOverlay();\n }\n }\n\n private openOverlay(): void {\n this.pSelectRef()?.nativeElement.classList.add('p-focus');\n this.openOptions.set(true);\n\n // Create embedded view and append to body (portal pattern)\n this.overlayViewRef = this.overlayTemplate().createEmbeddedView({});\n this.appRef.attachView(this.overlayViewRef);\n // Zoneless CD only flushes this view on the next scheduler tick, so\n // without a synchronous detectChanges() here the panel is still just its\n // empty shell (no search box, no @for rows) at the moment we measure it\n // below. attachOverlayPosition() would place it for that near-zero\n // height, then the ResizeObserver correction a frame later — once the\n // real content has rendered — snaps it to its true (often much taller)\n // size, which is the visible \"blip down and up\" the panel does on open.\n this.overlayViewRef.detectChanges();\n\n const overlayEl = this.overlayViewRef.rootNodes[0] as HTMLElement;\n this.document.body.appendChild(overlayEl);\n\n const anchorEl = this.pSelectRef()?.nativeElement;\n if (!anchorEl) return;\n overlayEl.style.position = 'fixed';\n overlayEl.style.zIndex = `${this.overlayStack.open()}`;\n // Flips above the field and caps its height against the viewport, so a list\n // that grows after its lazy page arrives is never cut off by the screen edge.\n this.detachOverlayPosition = attachOverlayPosition(anchorEl, overlayEl, {\n gap: 2,\n matchAnchorWidth: true,\n });\n }\n\n private closeOverlay(): void {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\n\n this.detachOverlayPosition?.();\n this.detachOverlayPosition = null;\n\n if (this.overlayViewRef) {\n this.appRef.detachView(this.overlayViewRef);\n this.overlayViewRef.destroy();\n this.overlayViewRef = null;\n }\n }\n\n onOverlayClick(event: Event): void {\n event.stopPropagation();\n }\n\n private handleDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n const clickedInSelect = this.pSelectRef()?.nativeElement.contains(target);\n const clickedInOverlay =\n this.overlayViewRef?.rootNodes[0]?.contains(target);\n\n if (!clickedInSelect && !clickedInOverlay) {\n this.closeOverlay();\n this.markAsTouched();\n }\n }\n\n isSelected(data: IDropDown): boolean {\n return this.value()?.includes(data.value) ?? false;\n }\n\n selectValue(event: CheckboxChangeEvent, option: IDropDown): void {\n const previousValue = this.value() ?? [];\n if (event.checked) {\n if (!previousValue.includes(option.value)) {\n this.value.set([...previousValue, option.value]);\n }\n } else {\n this.value.set(previousValue.filter((v) => v !== option.value));\n }\n }\n\n changeSelectAll(event: CheckboxChangeEvent): void {\n if (event.checked) {\n this.value.set(this.mergedDataList().map((item) => item.value));\n } else {\n this.value.set([]);\n }\n }\n\n clear(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div\n class=\"w-full flex items-center justify-between px-3 py-2 text-sm rounded-lg border border-(--f-form-field-border-color) bg-(--f-form-field-background) cursor-pointer min-h-[34px]\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.opacity-50]=\"disabled()\"\n [class.pointer-events-none]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span\n class=\"flex-1 truncate text-(--f-form-field-color)\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n >\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"flex-1 truncate text-(--f-form-field-placeholder-color)\">{{\n displayPlaceholder()\n }}</span>\n }\n\n @if (showClear() && hasSelectedValues()) {\n <span\n class=\"inline-flex items-center px-1 text-(--f-text-muted-color) hover:text-(--f-text-hover-color) cursor-pointer\"\n (click)=\"clear($event)\"\n >\n <ui-icon name=\"times\" class=\"text-xs\"></ui-icon>\n </span>\n }\n\n @if (isEditMode()) {\n <span\n class=\"inline-flex items-center px-1 text-(--f-form-field-placeholder-color)\"\n >\n <ui-icon name=\"chevron-down\" class=\"text-xs\"></ui-icon>\n </span>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div\n class=\"flex flex-col max-h-[250px] overflow-hidden\"\n (click)=\"onOverlayClick($event)\"\n >\n <div\n class=\"p-3 border-b border-(--f-content-border-color) bg-(--f-content-hover-background) shrink-0 w-full flex flex-row gap-2 items-center\"\n >\n <f-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n fInputText\n class=\"w-full\"\n [placeholder]=\"'shared.search' | translate\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div\n class=\"flex-1 overflow-y-auto min-h-0 w-full\"\n (scroll)=\"onScroll($event)\"\n >\n <ul\n class=\"m-0 py-1 list-none bg-(--f-overlay-popover-background) text-(--f-text-color) w-full\"\n >\n @for (data of mergedDataList(); track data.value) {\n @let isItemSelected = isSelected(data);\n <li\n class=\"px-3 py-2 cursor-pointer transition-colors flex flex-row gap-2 items-center text-sm\"\n [class]=\"\n isItemSelected\n ? 'bg-primary/10 text-primary'\n : 'text-(--f-text-color) hover:bg-(--f-content-hover-background)'\n \"\n >\n <f-checkbox\n [binary]=\"true\"\n [ngModel]=\"isItemSelected\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span class=\"flex flex-col min-w-0 flex-1\">\n <span class=\"truncate\">{{ data.label }}</span>\n @if (data.subLabel) {\n <span class=\"truncate text-xs text-(--f-text-muted-color)\">{{\n data.subLabel\n }}</span>\n }\n </span>\n </li>\n }\n </ul>\n </div>\n </div>\n</ng-template>\n","import {\n afterNextRender,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { InputTextDirective, SelectComponent } from '@flusys/ng-ui';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [\n FormsModule,\n SelectComponent,\n InputTextDirective,\n EditModeElementChangerDirective,\n ],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly translateAdapter = inject(TranslateService, {\n optional: true,\n });\n private readonly onScrollBound = this.onScroll.bind(this);\n private scrollTargetEl: HTMLElement | null = null;\n private isDestroyed = false;\n\n // View references\n readonly scrollContainer =\n viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\n // Inputs\n readonly placeHolder = input<string>('');\n readonly showClear = input<boolean>(true);\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.select.placeholder');\n });\n readonly optionLabel = input.required<string>();\n readonly optionValue = input.required<string>();\n readonly isEditMode = input.required<boolean>();\n readonly isLoading = input.required<boolean>();\n readonly total = input.required<number | undefined>();\n readonly pagination = input.required<IPagination>();\n readonly selectDataList = input.required<Array<IDropDown>>();\n /**\n * Full option object for the current value, supplied by the caller (or a\n * subclass like UserSelectComponent). Forwarded to f-select's own\n * `selectedObject` input so the label survives a later search/page reload\n * that replaces `selectDataList()` without the value having changed.\n */\n readonly selectedObject = input<unknown | null>(null);\n\n // Two-way bound value\n override readonly value = model<string | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI state\n readonly searchTerm = signal('');\n readonly isPanelShow = signal(false);\n\n constructor() {\n super();\n this.initializeFormControl();\n\n // Search debounce using effect\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n let previousValue = this.searchTerm();\n\n effect((onCleanup) => {\n const currentValue = this.searchTerm();\n\n // Skip unchanged values\n if (currentValue === previousValue) return;\n previousValue = currentValue;\n\n // Clear existing timeout\n if (debounceTimeout) clearTimeout(debounceTimeout);\n\n // Debounced emit\n debounceTimeout = setTimeout(() => {\n this.onSearch.emit(currentValue);\n }, 500);\n\n onCleanup(() => {\n if (debounceTimeout) clearTimeout(debounceTimeout);\n });\n });\n\n // Cleanup scroll listener on destroy\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n }\n });\n }\n\n onScroll(event: Event): void {\n const nextPagination = checkScrollPagination(event, {\n pagination: this.pagination(),\n total: this.total(),\n isLoading: this.isLoading(),\n });\n if (nextPagination) {\n this.onPagination.emit(nextPagination);\n }\n }\n\n showPanel(): void {\n if (this.disabled()) return;\n this.isPanelShow.update((prev) => !prev);\n const isNowVisible = this.isPanelShow();\n\n if (isNowVisible) {\n afterNextRender(\n () => {\n if (this.isDestroyed) return;\n const containerEl = this.scrollContainer().nativeElement;\n const target = containerEl.querySelector<HTMLElement>(\n '[data-select-list]',\n );\n if (target) {\n target.addEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = target;\n }\n },\n { injector: this.injector },\n );\n } else if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = null;\n }\n }\n\n private t(key: string, variables?: Record<string, string | number>): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","<div #scrollContainer class=\"lib-scroll-container\">\n <f-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"showClear()\"\n [placeholder]=\"displayPlaceholder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n [selectedObject]=\"selectedObject()\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"markAsTouched()\"\n >\n <ng-template #filter let-filter>\n <input\n fInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"truncate\">{{ item[optionLabel()] }}</span>\n @if (item.subLabel) {\n <span class=\"truncate text-xs text-(--f-text-muted-color)\">{{\n item.subLabel\n }}</span>\n }\n </div>\n </ng-template>\n </f-select>\n</div>\n","import { Component, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { UiIconComponent } from '@flusys/ng-ui';\n\nexport interface RouterTabItem {\n id: string | number;\n label: string;\n icon?: string;\n route: string | unknown[];\n routerLinkActiveExact?: boolean;\n}\n\n@Component({\n selector: 'lib-router-tabs',\n imports: [RouterLink, RouterLinkActive, UiIconComponent],\n host: { class: 'block' },\n styles: [`\n .router-tabs-scroll { -ms-overflow-style: none; scrollbar-width: none; }\n .router-tabs-scroll::-webkit-scrollbar { display: none; }\n `],\n template: `\n <div class=\"router-tabs-scroll flex gap-1 border-b border-(--f-content-border-color) overflow-x-auto flex-nowrap\">\n @for (tab of tabs(); track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"router-tab-active\"\n [routerLinkActiveOptions]=\"{ exact: tab.routerLinkActiveExact ?? false }\"\n class=\"flex items-center gap-2 px-4 py-2 rounded-t-lg cursor-pointer transition-colors text-(--f-text-muted-color) no-underline border-b-2 border-transparent -mb-px hover:bg-(--f-content-hover-background) [&.router-tab-active]:text-primary [&.router-tab-active]:border-primary [&.router-tab-active]:bg-(--f-content-hover-background) whitespace-nowrap shrink-0\"\n >\n @if (tab.icon) {\n <ui-icon [name]=\"tab.icon\"></ui-icon>\n }\n <span>{{ tab.label }}</span>\n </a>\n }\n </div>\n `,\n})\nexport class RouterTabsComponent {\n readonly tabs = input<RouterTabItem[]>([]);\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { IDropDown } from '../../interfaces/common-data.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport {\n IUserBasicInfo,\n IUserProvider,\n IUserSelectFilter,\n LoadUsersFn,\n} from '../../interfaces/providers.interface';\nimport { TranslateService } from '../../services/translate.service';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * Base class for user selection components.\n * Provides shared user loading, pagination, and search functionality.\n *\n * Subclasses must implement:\n * - `setupValueEffect()` to track value changes and emit selection events\n */\n@Directive()\nexport abstract class BaseUserSelectComponent {\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly injector = inject(Injector);\n protected readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n protected readonly translateAdapter = inject(TranslateService);\n protected abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\n readonly placeHolder = input<string>('');\n readonly isEditMode = input.required<boolean>();\n readonly filterActive = input<boolean>(true);\n readonly additionalFilters = input<Record<string, unknown>>({});\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Outputs\n readonly onError = output<Error>();\n\n // Internal state\n readonly isLoading = signal(false);\n readonly users = signal<IUserBasicInfo[]>([]);\n readonly total = signal<number | undefined>(undefined);\n readonly pagination = signal<IPagination>({\n pageSize: DEFAULT_PAGE_SIZE,\n currentPage: 0,\n });\n readonly searchTerm = signal('');\n\n // Computed dropdown data\n readonly dropdownUsers = computed<IDropDown[]>(() =>\n this.users().map((user) => this.toDropDown(user)),\n );\n\n // Every user this component has ever seen, keyed by id. Search/pagination\n // replace `users()` wholesale, so without this a user selected before a\n // later search would silently disappear from `dropdownUsers()` even though\n // the selection itself hasn't changed.\n private readonly _knownUsers = signal<Map<string, IUserBasicInfo>>(\n new Map(),\n );\n\n protected toDropDown(user: IUserBasicInfo): IDropDown {\n // Names collide across users; showing the email as a subLabel keeps entries distinguishable.\n return {\n label: user.name || user.email,\n value: user.id,\n subLabel: user.name ? user.email : undefined,\n };\n }\n\n /** Resolves a single previously-seen user id, even if it's no longer in `users()`. */\n protected resolveKnownUser(id: string | null | undefined): IDropDown | null {\n const user = this.resolveKnownUserRaw(id);\n return user ? this.toDropDown(user) : null;\n }\n\n /** Resolves multiple previously-seen user ids, even if no longer in `users()`. */\n protected resolveKnownUsers(ids: string[]): IDropDown[] {\n return this.resolveKnownUsersRaw(ids).map((u) => this.toDropDown(u));\n }\n\n /** Same as resolveKnownUser, but returns the raw IUserBasicInfo (for outputs like userSelected). */\n protected resolveKnownUserRaw(\n id: string | null | undefined,\n ): IUserBasicInfo | null {\n if (!id) return null;\n return this._knownUsers().get(id) ?? null;\n }\n\n /** Same as resolveKnownUsers, but returns the raw IUserBasicInfo[] (for outputs like usersSelected). */\n protected resolveKnownUsersRaw(ids: string[]): IUserBasicInfo[] {\n const known = this._knownUsers();\n return ids\n .map((id) => known.get(id))\n .filter((u): u is IUserBasicInfo => !!u);\n }\n\n // Called synchronously wherever `users()` gains new entries (fetchUsers),\n // rather than via an effect watching `users()`: fetchUsers is invoked from\n // afterNextRender's callback, whose async continuation runs outside the\n // normal change-detection flush cycle, so an effect there is not\n // guaranteed to re-run promptly when the fetch resolves.\n private rememberUsers(list: IUserBasicInfo[]): void {\n if (!list.length) return;\n this._knownUsers.update((map) => {\n let changed = false;\n const next = new Map(map);\n for (const u of list) {\n if (next.get(u.id) !== u) {\n next.set(u.id, u);\n changed = true;\n }\n }\n return changed ? next : map;\n });\n }\n\n // Computed placeholder with translation fallback\n readonly displayPlaceholder = computed(() => {\n const customPlaceholder = this.placeHolder();\n if (customPlaceholder) return customPlaceholder;\n return this.t('shared.user.select.placeholder');\n });\n\n constructor() {\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n });\n\n // Update page size from input\n effect(() => {\n const size = this.pageSize();\n untracked(() => {\n this.pagination.update((p) => ({ ...p, pageSize: size }));\n });\n });\n\n // Load initial users after render\n afterNextRender(() => {\n this.fetchUsers();\n });\n\n // Setup value change tracking (implemented by subclass)\n this.setupValueEffect();\n }\n\n /** Setup effect to track value changes and emit selection events */\n protected abstract setupValueEffect(): void;\n\n handleSearch(search: string): void {\n this.searchTerm.set(search);\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n handlePagination(pagination: IPagination): void {\n this.pagination.set(pagination);\n this.fetchUsers(true);\n }\n\n /** Reload users (useful when filters change externally) */\n reload(): void {\n this.pagination.update((p) => ({ ...p, currentPage: 0 }));\n this.users.set([]);\n this.fetchUsers();\n }\n\n protected async fetchUsers(append = false): Promise<void> {\n if (this.isLoading()) return;\n\n // Cancel previous request\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.isLoading.set(true);\n try {\n const pag = this.pagination();\n const filter: IUserSelectFilter = {\n page: pag.currentPage,\n pageSize: pag.pageSize,\n search: this.searchTerm(),\n ...this.additionalFilters(),\n };\n\n // Use custom loadUsers if provided, otherwise use USER_PROVIDER\n const customLoadUsers = this.loadUsers();\n const response = await firstValueFrom(\n customLoadUsers\n ? customLoadUsers(filter)\n : this.loadUsersFromProvider(filter),\n );\n\n if (response.success && response.data) {\n if (append) {\n this.users.update((current) => [...current, ...response.data!]);\n } else {\n this.users.set(response.data);\n }\n this.total.set(response.meta?.total);\n this.rememberUsers(response.data);\n }\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n this.onError.emit(error as Error);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /** Load users from USER_PROVIDER with active filter */\n private loadUsersFromProvider(filter: IUserSelectFilter) {\n const extraFilters = {\n isActive: this.filterActive() ? true : undefined,\n ...this.additionalFilters(),\n };\n return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n ...extraFilters,\n })\n .pipe(\n map((res) => ({\n ...res,\n data: res.data?.map((u) => ({\n id: u.id,\n name: u.name,\n email: u.email,\n })),\n })),\n );\n }\n\n protected t(\n key: string,\n variables?: Record<string, string | number>,\n ): string {\n if (this.translateAdapter) {\n return this.translateAdapter.translate(key, variables);\n }\n return key;\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [showClear]=\"showClear()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n [selectedObjects]=\"selectedObjects()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserMultiSelectComponent extends BaseUserSelectComponent {\n // Inputs\n readonly showClear = input<boolean>(true);\n\n // Two-way bound value\n readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly usersSelected = output<IUserBasicInfo[]>();\n\n readonly selectedObjects = computed(() =>\n this.resolveKnownUsers(this.value() ?? []),\n );\n\n protected override setupValueEffect(): void {\n // Emit selected users when value changes. Resolves via the sticky known-\n // users cache (not the transient users() page) so this stays correct\n // across searches, matching selectedObjects()'s behavior above.\n effect(() => {\n const selectedIds = this.value() ?? [];\n const selectedUsers = this.resolveKnownUsersRaw(selectedIds);\n untracked(() => {\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"displayPlaceholder()\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [showClear]=\"showClear()\"\n [isEditMode]=\"isEditMode()\"\n [isLoading]=\"isLoading()\"\n [total]=\"total()\"\n [pagination]=\"pagination()\"\n [selectDataList]=\"dropdownUsers()\"\n [selectedObject]=\"selectedObject()\"\n (onSearch)=\"handleSearch($event)\"\n (onPagination)=\"handlePagination($event)\"\n />\n `,\n})\nexport class UserSelectComponent extends BaseUserSelectComponent {\n // Inputs\n readonly showClear = input<boolean>(true);\n\n // Two-way bound value\n readonly value = model<string | null>(null);\n\n // Outputs\n readonly userSelected = output<IUserBasicInfo | null>();\n\n readonly selectedObject = computed(() => this.resolveKnownUser(this.value()));\n\n protected override setupValueEffect(): void {\n // Emit selected user when value changes. Resolves via the sticky known-\n // users cache (not the transient users() page) so this stays correct\n // across searches, matching selectedObject()'s behavior above.\n effect(() => {\n const selectedId = this.value();\n const user = this.resolveKnownUserRaw(selectedId);\n untracked(() => {\n this.userSelected.emit(user);\n });\n });\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport {\n evaluatePermission,\n hasAllPermissions,\n hasAnyPermission,\n} from '../utils/permission-evaluator.util';\n\ntype EvaluateFn = (userPermissions: string[]) => boolean;\n\nfunction createGuard(\n guardName: string,\n redirectTo: string,\n evaluate: EvaluateFn,\n getDenialMessage: () => string,\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n if (!permissionValidator.isLoaded()) {\n if (isDevMode()) {\n console.log(`[${guardName}] Permissions not loaded, denying access`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n if (!evaluate(permissionValidator.permissions())) {\n if (isDevMode()) {\n console.log(`[${guardName}] ${getDenialMessage()}`);\n }\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * Permission Guard - Single permission or ILogicNode check.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [permissionGuard('user.view')] }\n * { path: 'admin', canActivate: [permissionGuard(logicNode, '/access-denied')] }\n * ```\n */\nexport function permissionGuard(\n permission: string | ILogicNode,\n redirectTo = '/',\n): CanActivateFn {\n const code = typeof permission === 'string' ? permission : 'complex-logic';\n return createGuard(\n 'permissionGuard',\n redirectTo,\n (perms) => evaluatePermission(permission, perms),\n () => `Access denied - missing: ${code}`,\n );\n}\n\n/**\n * Any Permission Guard (OR logic) - Access if user has ANY permission.\n *\n * @example\n * ```typescript\n * { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }\n * ```\n */\nexport function anyPermissionGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[anyPermissionGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'anyPermissionGuard',\n redirectTo,\n (perms) => hasAnyPermission(permissions, perms),\n () => `Access denied - missing any of: ${permissions.join(', ')}`,\n );\n}\n\n/**\n * All Permissions Guard (AND logic) - Access only if user has ALL permissions.\n *\n * @example\n * ```typescript\n * { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }\n * ```\n */\nexport function allPermissionsGuard(\n permissions: string[],\n redirectTo = '/',\n): CanActivateFn {\n if (!permissions?.length) {\n return () => {\n if (isDevMode()) {\n console.log('[allPermissionsGuard] Empty permissions array, denying');\n }\n return inject(Router).createUrlTree([redirectTo]);\n };\n }\n return createGuard(\n 'allPermissionsGuard',\n redirectTo,\n (perms) => hasAllPermissions(permissions, perms),\n () => `Access denied - missing all of: ${permissions.join(', ')}`,\n );\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AUTH_STATE_PROVIDER } from '../tokens/provider.tokens';\n\n/**\n * Authenticated Guard - Redirects to login when the user isn't authenticated.\n *\n * Uses AUTH_STATE_PROVIDER so feature packages can gate routes requiring\n * authentication without depending on ng-auth directly.\n *\n * @example\n * ```typescript\n * { path: 'notifications', canActivate: [authenticatedGuard()] }\n * ```\n */\nexport function authenticatedGuard(redirectTo = '/auth/login'): CanActivateFn {\n return (_route, state) => {\n const authStateProvider = inject(AUTH_STATE_PROVIDER);\n const router = inject(Router);\n\n if (!authStateProvider.isAuthenticated()) {\n return router.createUrlTree([redirectTo], {\n queryParams: { returnUrl: state.url },\n });\n }\n\n return true;\n };\n}\n","function getOffsetMinutes(utcDate: Date, timezone: string): number {\n const extract = (tz: string): number => {\n const parts = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n }).formatToParts(utcDate);\n\n const p = Object.fromEntries(\n parts.filter(x => x.type !== 'literal').map(x => [x.type, parseInt(x.value)]),\n );\n\n return Date.UTC(p['year'], p['month'] - 1, p['day'], p['hour'], p['minute'], p['second']);\n };\n\n return (extract(timezone) - extract('UTC')) / 60_000;\n}\n\nexport function localToUtc(dateStr: string, timeStr: string, timezone: string): Date {\n const [year, month, day] = dateStr.split('-').map(Number);\n const [hours, minutes] = timeStr.split(':').map(Number);\n\n const approx = new Date(Date.UTC(year, month - 1, day, hours, minutes, 0));\n const offset = getOffsetMinutes(approx, timezone);\n const utcDate = new Date(approx.getTime() - offset * 60_000);\n\n // DST boundary guard: re-check offset after adjustment\n const finalOffset = getOffsetMinutes(utcDate, timezone);\n return finalOffset !== offset\n ? new Date(approx.getTime() - finalOffset * 60_000)\n : utcDate;\n}\n\nexport function utcToLocal(\n utcDate: Date | string,\n timezone: string,\n): { date: string; time: string; display: string } {\n const d = typeof utcDate === 'string' ? new Date(utcDate) : utcDate;\n\n const parts = new Intl.DateTimeFormat('en-CA', {\n timeZone: timezone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).formatToParts(d);\n\n const p = Object.fromEntries(\n parts.filter(x => x.type !== 'literal').map(x => [x.type, x.value]),\n );\n\n // en-CA formats midnight hour as '24' — normalize to '00'\n const hour = p['hour'] === '24' ? '00' : p['hour'];\n\n return {\n date: `${p['year']}-${p['month']}-${p['day']}`,\n time: `${hour}:${p['minute']}`,\n display: new Intl.DateTimeFormat(undefined, {\n timeZone: timezone,\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(d),\n };\n}\n\nexport function formatInTimezone(\n utcDate: Date | string,\n timezone: string,\n options: Intl.DateTimeFormatOptions = { dateStyle: 'medium', timeStyle: 'short' },\n): string {\n const d = typeof utcDate === 'string' ? new Date(utcDate) : utcDate;\n return new Intl.DateTimeFormat(undefined, { ...options, timeZone: timezone }).format(d);\n}\n\nexport function getUserTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n","import { IMessageRef } from '../interfaces/message-ref.interface';\n\n/** The translatable reason in a failed HTTP call: the backend's `messageKey`/`messageVariables`, or `fallbackKey` when the response carries none. */\nexport function errorToMessageRef(error: unknown, fallbackKey = 'shared.unexpected.error'): IMessageRef {\n const body = (error as { error?: { messageKey?: unknown; messageVariables?: Record<string, unknown> } } | null)?.error;\n if (typeof body?.messageKey === 'string') {\n return body.messageVariables ? { messageKey: body.messageKey, messageVariables: body.messageVariables } : { messageKey: body.messageKey };\n }\n return { messageKey: fallbackKey };\n}\n","const HTML_ESCAPES: Record<string, string> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' };\n\n/** Escapes user-authored text interpolated into markup rendered via [innerHTML] (e.g. confirm dialog messages). */\nexport function escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (ch) => HTML_ESCAPES[ch]);\n}\n","// Constants\nexport * from './constants/messages';\nexport * from './constants/permissions';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/message-ref.interface';\nexport * from './interfaces/providers.interface';\nexport * from './interfaces/response-payload.interface';\n\n// Enums\nexport * from './enums/icon-type.enum';\n\n// Services\nexport * from './services/cookie.service';\nexport * from './services/favicon.service';\nexport * from './services/file-url.service';\nexport * from './services/permission-validator.service';\nexport * from './services/platform.service';\nexport * from './services/translate.service';\n\n// Directives\nexport * from './directives/edit-mode-element-changer.directive';\nexport * from './directives/has-permission.directive';\nexport * from './directives/is-empty-image.directive';\nexport * from './directives/prevent-default.directive';\n\n// Pipes\nexport * from './pipes/translate.pipe';\n// Interceptors\nexport * from './interceptors/error-catching.interceptor';\n\n// Resolvers\nexport * from './resolvers/translation-module.resolver';\n\n// Classes\nexport * from './classes/api-resource.class';\nexport * from './classes/base-form-control.class';\n\n// Components\nexport * from './components/action-select/action-multi-select.component';\nexport * from './components/action-select/action-select.component';\nexport * from './components/action-select/base-action-select.class';\nexport * from './components/base-form/base-form-template.directive';\nexport * from './components/base-form/base-form.component';\nexport * from './components/base-form/base-form.interfaces';\nexport * from './components/base-list/base-list-template.directive';\nexport * from './components/base-list/base-list.component';\nexport * from './components/base-list/base-list.interfaces';\nexport * from './components/file-selector-dialog/file-selector-dialog.component';\nexport * from './components/file-uploader/file-uploader.component';\nexport * from './components/icon/icon.component';\nexport * from './components/inline-svg/inline-svg.component';\nexport * from './components/lazy-multi-select/lazy-multi-select.component';\nexport * from './components/lazy-select/lazy-select.component';\nexport * from './components/router-tabs/router-tabs.component';\nexport * from './components/user-multi-select/user-multi-select.component';\nexport * from './components/user-select/base-user-select.class';\nexport * from './components/user-select/user-select.component';\n\n// Tokens\nexport * from './tokens/provider.tokens';\n\n// Guards\nexport * from './guards/index';\n\n// Utils\nexport * from './utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","catchError","DEFAULT_PAGE_SIZE","map"],"mappings":"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"}