@flusys/ng-shared 5.4.1 → 6.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../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/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/inline-svg/inline-svg.component.ts","../../../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/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/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/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 '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.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 // cross-package shared keys (primeng.* — PrimeNG i18n provider)\n 'primeng.accept': 'Yes',\n 'primeng.add.rule': 'Add Rule',\n 'primeng.apply': 'Apply',\n 'primeng.aria.cancel.edit': 'Cancel Edit',\n 'primeng.aria.close': 'Close',\n 'primeng.aria.collapse.row': 'Row Collapsed',\n 'primeng.aria.edit.row': 'Edit Row',\n 'primeng.aria.expand.row': 'Row Expanded',\n 'primeng.aria.false.label': 'False',\n 'primeng.aria.filter.constraint': 'Filter Constraint',\n 'primeng.aria.filter.operator': 'Filter Operator',\n 'primeng.aria.first.page.label': 'First Page',\n 'primeng.aria.grid.view': 'Grid View',\n 'primeng.aria.hide.filter.menu': 'Hide Filter Menu',\n 'primeng.aria.jump.to.page.dropdown.label': 'Jump to Page Dropdown',\n 'primeng.aria.jump.to.page.input.label': 'Jump to Page Input',\n 'primeng.aria.last.page.label': 'Last Page',\n 'primeng.aria.list.view': 'List View',\n 'primeng.aria.move.all.to.source': 'Move All to Source',\n 'primeng.aria.move.all.to.target': 'Move All to Target',\n 'primeng.aria.move.bottom': 'Move Bottom',\n 'primeng.aria.move.down': 'Move Down',\n 'primeng.aria.move.to.source': 'Move to Source',\n 'primeng.aria.move.to.target': 'Move to Target',\n 'primeng.aria.move.top': 'Move Top',\n 'primeng.aria.move.up': 'Move Up',\n 'primeng.aria.navigation': 'Navigation',\n 'primeng.aria.next': 'Next',\n 'primeng.aria.next.page.label': 'Next Page',\n 'primeng.aria.null.label': 'Not Selected',\n 'primeng.aria.page.label': 'Page {page}',\n 'primeng.aria.prev.page.label': 'Previous Page',\n 'primeng.aria.previous': 'Previous',\n 'primeng.aria.rotate.left': 'Rotate Left',\n 'primeng.aria.rotate.right': 'Rotate Right',\n 'primeng.aria.rows.per.page.label': 'Rows per page',\n 'primeng.aria.save.edit': 'Save Edit',\n 'primeng.aria.scroll.top': 'Scroll Top',\n 'primeng.aria.select.all': 'All items selected',\n 'primeng.aria.select.row': 'Row Selected',\n 'primeng.aria.show.filter.menu': 'Show Filter Menu',\n 'primeng.aria.slide': 'Slide',\n 'primeng.aria.slide.number': '{slideNumber}',\n 'primeng.aria.star': '1 star',\n 'primeng.aria.stars': '{star} stars',\n 'primeng.aria.true.label': 'True',\n 'primeng.aria.unselect.all': 'All items unselected',\n 'primeng.aria.unselect.row': 'Row Unselected',\n 'primeng.aria.zoom.image': 'Zoom Image',\n 'primeng.aria.zoom.in': 'Zoom In',\n 'primeng.aria.zoom.out': 'Zoom Out',\n 'primeng.cancel': 'Cancel',\n 'primeng.choose': 'Choose',\n 'primeng.choose.date': 'Choose Date',\n 'primeng.clear': 'Clear',\n 'primeng.contains': 'Contains',\n 'primeng.date.after': 'Date is after',\n 'primeng.date.before': 'Date is before',\n 'primeng.date.is': 'Date is',\n 'primeng.date.is.not': 'Date is not',\n 'primeng.empty.filter.message': 'No results found',\n 'primeng.empty.message': 'No results found',\n 'primeng.empty.search.message': 'No results found',\n 'primeng.empty.selection.message': 'No selected item',\n 'primeng.ends.with': 'Ends with',\n 'primeng.equals': 'Equals',\n 'primeng.first.day.of.week': '0',\n 'primeng.gt': 'Greater than',\n 'primeng.gte': 'Greater than or equal to',\n 'primeng.lt': 'Less than',\n 'primeng.lte': 'Less than or equal to',\n 'primeng.match.all': 'Match All',\n 'primeng.match.any': 'Match Any',\n 'primeng.no.filter': 'No Filter',\n 'primeng.not.contains': 'Not contains',\n 'primeng.not.equals': 'Not equals',\n 'primeng.pending': 'Pending',\n 'primeng.reject': 'No',\n 'primeng.remove.rule': 'Remove Rule',\n 'primeng.selection.message': '{0} items selected',\n 'primeng.starts.with': 'Starts with',\n 'primeng.today': 'Today',\n 'primeng.upload': 'Upload',\n 'primeng.week.header': 'Wk',\n 'primeng.choose.year': 'Choose Year',\n 'primeng.choose.month': 'Choose Month',\n 'primeng.date.format': 'mm/dd/yy',\n 'primeng.weak': 'Weak',\n 'primeng.medium': 'Medium',\n 'primeng.strong': 'Strong',\n 'primeng.password.prompt': 'Enter a password',\n 'primeng.country.placeholder': 'Choose a country',\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} 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\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 // 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 'pi pi-image';\n if (contentType.startsWith('video/')) return 'pi pi-video';\n if (contentType.startsWith('audio/')) return 'pi pi-volume-up';\n if (contentType.includes('pdf')) return 'pi pi-file-pdf';\n if (contentType.includes('word') || contentType.includes('document'))\n return 'pi pi-file-word';\n if (contentType.includes('excel') || contentType.includes('spreadsheet'))\n return 'pi pi-file-excel';\n return 'pi pi-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 PRIMENG_ICON = 1,\n IMAGE_FILE_LINK = 2,\n DIRECT_TAG_SVG = 3,\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { Injectable, inject, DOCUMENT, REQUEST } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Injectable({\n providedIn: 'root',\n})\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 { Injectable, inject, signal } 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@Injectable({ providedIn: 'root' })\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 { Injectable, signal } 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@Injectable({ providedIn: 'root' })\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 isPermissionsLoaded(): boolean {\n return this._isLoaded();\n }\n}\n","import { computed, inject, Injectable, Signal } from '@angular/core';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\n\n@Injectable({ providedIn: 'root' })\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, Injectable } from '@angular/core';\nimport { PlatformService } from './public-api';\n\n@Injectable({ providedIn: 'root' })\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 === 'P-SELECT') {\n const dropdown = inputElement.querySelector<HTMLElement>('.p-select-dropdown');\n const label = inputElement.querySelector<HTMLElement>('.p-select-label');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.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 (dropdown) dropdown.style.display = 'flex';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-CALENDAR') {\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.isPermissionsLoaded()) {\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 'primeng/api';\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 * withFetch(),\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 { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\n","import { NgModule } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ImageModule } from 'primeng/image';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { PasswordModule } from 'primeng/password';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { StepsModule } from 'primeng/steps';\nimport { TableModule } from 'primeng/table';\nimport { TabsModule } from 'primeng/tabs';\nimport { TagModule } from 'primeng/tag';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToastModule } from 'primeng/toast';\nimport { ToggleButtonModule } from 'primeng/togglebutton';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TreeTableModule } from 'primeng/treetable';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n@NgModule({\n exports: [\n AutoCompleteModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n CheckboxModule,\n ConfirmDialogModule,\n DatePickerModule,\n DialogModule,\n DividerModule,\n FileUploadModule,\n IconFieldModule,\n ImageModule,\n InputIconModule,\n InputNumberModule,\n InputTextModule,\n ListboxModule,\n MultiSelectModule,\n PaginatorModule,\n PanelModule,\n PasswordModule,\n PopoverModule,\n ProgressBarModule,\n RadioButtonModule,\n RippleModule,\n SelectButtonModule,\n SelectModule,\n SkeletonModule,\n SplitButtonModule,\n StepsModule,\n TableModule,\n TabsModule,\n TagModule,\n TextareaModule,\n ToastModule,\n ToggleButtonModule,\n ToggleSwitchModule,\n TooltipModule,\n TreeTableModule,\n ProgressSpinnerModule,\n ColorPickerModule,\n ],\n})\nexport class PrimeModule {}\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[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 { Router } from '@angular/router';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { IFilter } from '../../interfaces/filter-data.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\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: [AngularModule, PrimeModule],\n templateUrl: './base-list.component.html',\n})\nexport class BaseListComponent {\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 private readonly confirmationService = inject(ConfirmationService, { optional: true });\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 emptyMessage = input<string>('');\n readonly createButtonLabel = input<string>('');\n readonly createButtonIcon = input<string>('pi pi-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 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(() => this.service()?.data() ?? this.data());\n readonly effectiveTotal = computed(() => this.service()?.total() ?? this.total());\n readonly effectiveIsLoading = computed(() => this.service()?.isLoading() ?? this.isLoading());\n\n readonly effectiveActions = computed<ITableAction[]>(() => {\n const editRoute = this.editRoute();\n const deleteField = this.deleteConfirmField();\n\n const editAction: ITableAction[] = editRoute\n ? [{ icon: 'pi pi-pencil', tooltip: 'shared.edit', severity: 'info',\n show: this.canEdit() ?? undefined, handler: (item) => this.handleEditItem(item) }]\n : [];\n\n const deleteAction: ITableAction[] = deleteField\n ? [{ icon: 'pi pi-trash', tooltip: 'shared.delete', severity: 'danger',\n show: this.canDelete() ?? undefined, handler: (item) => this.handleDeleteItem(item) }]\n : [];\n\n return [...editAction, ...this.actions(), ...deleteAction];\n });\n\n readonly visibleColumns = computed(() => this.columns().filter((c) => !c.hidden));\n readonly columnCount = computed(\n () => this.visibleColumns().length + (this.effectiveActions().length > 0 ? 1 : 0),\n );\n\n readonly resolvedEmptyMessage = computed(() => this.emptyMessage() || this.t('shared.no.data'));\n readonly resolvedCreateLabel = computed(() => this.createButtonLabel() || this.t('shared.create'));\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: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n const response = await this.service()?.delete({ id, type: 'delete' });\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 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>((obj, key) => (obj != null ? (obj as Record<string, unknown>)[key] : null), item);\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 this.columnTemplates().find((t) => t.key() === field)?.templateRef ?? null;\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': return 'text-center';\n case 'right': return 'text-right';\n default: 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","<p-card>\n <ng-template #header>\n @if (title() || searchable() || showCreateButton()) {\n <div class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 p-4\">\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 <p-iconfield>\n <p-inputicon class=\"pi pi-search\" />\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"t('shared.search')\"\n />\n </p-iconfield>\n }\n @if (showCreateButton()) {\n <p-button\n [icon]=\"createButtonIcon()\"\n [label]=\"resolvedCreateLabel()\"\n (onClick)=\"handleCreate()\"\n />\n }\n </div>\n </div>\n }\n </ng-template>\n\n <div class=\"overflow-x-auto\">\n <p-table\n [value]=\"effectiveData()\"\n [loading]=\"effectiveIsLoading()\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\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 [style.width]=\"col.width\" [style.min-width]=\"col.minWidth\" [class]=\"getCellClass(col)\">\n {{ col.header }}\n </th>\n }\n @if (effectiveActions().length > 0) {\n <th style=\"width: 120px; text-align: center;\">{{ t('shared.actions') }}</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 (getTagConfig(col, getFieldValue(item, col.field)); as tagCfg) {\n <p-tag [severity]=\"tagCfg.severity\" [value]=\"tagCfg.label ?? getFieldValueAsString(item, col.field)\" />\n } @else {\n {{ getFieldValueAsString(item, col.field) }}\n }\n }\n @case ('boolean') {\n <p-tag\n [severity]=\"getFieldValue(item, col.field) ? 'success' : 'danger'\"\n [value]=\"getFieldValue(item, col.field) ? t('shared.yes') : t('shared.no')\"\n />\n }\n @case ('date') {\n {{ getFieldValueAsString(item, col.field) | date: (col.dateFormat ?? 'dd/MM/yyyy') }}\n }\n @case ('number') {\n {{ getFieldValueAsString(item, col.field) | number }}\n }\n @case ('custom') {\n <ng-container\n *ngTemplateOutlet=\"getColumnTemplate(col.field); context: { $implicit: item, field: col.field }\"\n />\n }\n @default {\n {{ truncateText(getFieldValue(item, col.field), col.truncate) }}\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 <p-button\n [icon]=\"action.icon\"\n [severity]=\"action.severity\"\n [pTooltip]=\"action.tooltip ? t(action.tooltip) : ''\"\n [disabled]=\"action.disabled ? action.disabled(item) : false\"\n (onClick)=\"action.handler(item)\"\n [rounded]=\"true\"\n [text]=\"true\"\n />\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 class=\"flex flex-col items-center justify-center py-12 text-surface-400\">\n <i class=\"pi pi-inbox text-5xl mb-3\"></i>\n <span>{{ resolvedEmptyMessage() }}</span>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</p-card>\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 { Router } from '@angular/router';\nimport { MessageService } from 'primeng/api';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\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: [AngularModule, PrimeModule],\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","<p-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 pInputText\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 pInputText\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 <p-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 [feedback]=\"false\"\n [toggleMask]=\"true\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('number') {\n <p-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 ?? undefined\"\n [max]=\"field.max ?? undefined\"\n [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n inputStyleClass=\"w-full\"\n />\n }\n\n @case ('textarea') {\n <textarea\n pTextarea\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 <p-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 <p-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 <p-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 ?? undefined\"\n [maxDate]=\"field.maxDate ?? undefined\"\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 <p-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 <p-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); context: { $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 <p-button\n type=\"button\"\n [label]=\"cancelLabel() || t('shared.cancel')\"\n severity=\"secondary\"\n [outlined]=\"true\"\n [disabled]=\"effectiveIsLoading()\"\n (onClick)=\"handleCancel()\"\n />\n <p-button\n type=\"submit\"\n [label]=\"submitLabel() || (effectiveIsEditMode() ? t('shared.update') : t('shared.save'))\"\n [loading]=\"effectiveIsLoading()\"\n [disabled]=\"!isFormValid() || effectiveIsLoading()\"\n />\n </div>\n </div>\n </form>\n</p-card>\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@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(\n (text) => this.sanitizer.bypassSecurityTrustHtml(text),\n ),\n });\n}\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 { MessageService } from 'primeng/api';\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 { AngularModule, PrimeModule } from '../../modules/public-api';\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: [AngularModule, PrimeModule, TranslatePipe],\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 <i class=\"pi pi-exclamation-triangle text-2xl text-orange-500 mb-2\"></i>\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 <i\n class=\"pi pi-spin pi-spinner text-3xl sm:text-4xl text-primary\"\n ></i>\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 <p-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 <i\n class=\"pi pi-cloud-upload text-3xl sm:text-4xl text-primary\"\n ></i>\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 <i\n [class]=\"fileIcon\"\n class=\"text-lg sm:text-xl flex-shrink-0\"\n ></i>\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 <p-button\n icon=\"pi pi-times\"\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (onClick)=\"removeFile(file)\"\n />\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(--p-surface-300);\n background: var(--p-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-700);\n }\n\n :host-context(.p-dark) .upload-zone.drag-over,\n .dark .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--p-surface-200);\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-preview-item,\n .dark .file-preview-item {\n border-color: var(--p-surface-600);\n background: var(--p-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 { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule, PrimeModule } from '../../modules/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';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_SELECTOR_PAGE_SIZE = 50;\n\n@Component({\n selector: 'lib-file-selector-dialog',\n imports: [AngularModule, PrimeModule, FileUploaderComponent, TranslatePipe],\n template: `\n <p-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 <i\n class=\"pi pi-exclamation-triangle text-4xl text-orange-500 mb-3\"\n ></i>\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 <button\n pButton\n [label]=\"'shared.close' | translate\"\n class=\"p-button-text\"\n (click)=\"onCancel()\"\n ></button>\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 <p-iconfield class=\"flex-1\">\n <p-inputicon class=\"pi pi-search\" />\n <input\n pInputText\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 </p-iconfield>\n\n @if (fileProvider.loadFolders) {\n <p-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 [loading]=\"foldersLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadFolders()\"\n >\n <ng-template pTemplate=\"selectedItem\" let-folder>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-folder text-color-secondary\"></i>\n <span>{{ folder?.name }}</span>\n </div>\n </ng-template>\n <ng-template pTemplate=\"item\" let-folder>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-folder text-color-secondary\"></i>\n <span>{{ folder.name }}</span>\n </div>\n </ng-template>\n </p-select>\n }\n\n @if (fileProvider.loadStorageConfigs) {\n <p-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 [loading]=\"storageConfigsLoading()\"\n class=\"w-full sm:w-40\"\n (onShow)=\"loadStorageConfigs()\"\n >\n <ng-template pTemplate=\"selectedItem\" let-config>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-database text-color-secondary\"></i>\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 pTemplate=\"item\" let-config>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-database text-color-secondary\"></i>\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 </p-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 <i\n class=\"pi pi-spin pi-spinner text-4xl text-color-secondary\"\n ></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2 block\"></i>\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 <i\n [class]=\"fileIcon\"\n class=\"text-4xl sm:text-5xl text-color-secondary\"\n ></i>\n }\n @if (fileSelected) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check text-xl sm:text-2xl\"></i>\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 <i class=\"pi pi-spin pi-spinner text-color-secondary\"></i>\n </div>\n }\n }\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div\n class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\"\n >\n <button\n pButton\n type=\"button\"\n [label]=\"'shared.cancel' | translate\"\n class=\"p-button-text w-full sm:w-auto\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n type=\"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 (click)=\"onConfirm()\"\n ></button>\n </div>\n </ng-template>\n }\n </p-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(--p-surface-300);\n border-radius: var(--p-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-card,\n .dark .file-card {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--p-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--p-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n :host-context(.p-dark) .file-card.selected,\n .dark .file-card.selected {\n background: var(--p-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(--p-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.p-dark) .file-preview,\n .dark .file-preview {\n background: var(--p-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(--p-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--p-primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.p-dark) .selected-overlay i,\n .dark .selected-overlay i {\n background: var(--p-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 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 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.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.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.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.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 { AngularModule } from '../../modules/public-api';\nimport { IconTypeEnum } from '../../enums/public-api';\n\n@Component({\n selector: 'lib-icon',\n imports: [AngularModule],\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.PRIMENG_ICON) {\n <i [class]=\"icon()\"></i>\n } @else if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <i class=\"pi pi-question\"></i>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n iconType = input<IconTypeEnum | undefined>(IconTypeEnum.PRIMENG_ICON);\n protected readonly IconTypeEnum = IconTypeEnum; // Needed for template reference\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 ViewEncapsulation,\n} from '@angular/core';\nimport { CheckboxChangeEvent } from 'primeng/checkbox';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/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: [PrimeModule, AngularModule, TranslatePipe],\n templateUrl: './lazy-multi-select.component.html',\n styleUrl: './lazy-multi-select.component.scss',\n encapsulation: ViewEncapsulation.None,\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 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\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 // 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 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.selectDataList()\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.selectDataList().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\n const overlayEl = this.overlayViewRef.rootNodes[0] as HTMLElement;\n this.document.body.appendChild(overlayEl);\n\n // Override positioning for portal (CSS class handles visual styles)\n const rect = this.pSelectRef()?.nativeElement.getBoundingClientRect();\n if (rect) {\n overlayEl.style.cssText = `\n position: fixed !important;\n top: ${rect.bottom + 2}px !important;\n left: ${rect.left}px !important;\n width: ${rect.width}px !important;\n max-width: ${rect.width}px !important;\n min-width: ${rect.width}px !important;\n z-index: 999999999999 !important;\n `;\n }\n }\n\n private closeOverlay(): void {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\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.selectDataList().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=\"p-select w-full\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.p-disabled]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ displayPlaceholder() }}</span>\n }\n\n @if (showClear() && hasSelectedValues()) {\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n }\n\n @if (isEditMode()) {\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n </div>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n [placeholder]=\"'shared.search' | translate\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track data.value) {\n @let isItemSelected = isSelected(data);\n <li\n class=\"p-select-option flex flex-row gap-2 items-center\"\n [class.p-select-option-selected]=\"isItemSelected\"\n >\n <p-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 {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\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: [AngularModule, PrimeModule, EditModeElementChangerDirective],\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 // 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 '.p-select-list-container',\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 onBlur(): void {\n this.markAsTouched();\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 <p-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 appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\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 </p-select>\n</div>\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) => ({\n label: user.name || user.email,\n value: user.id,\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 }\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 effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\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: [AngularModule, PrimeModule, 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 (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 protected override setupValueEffect(): void {\n // Emit selected users when value changes\n effect(() => {\n const selectedIds = this.value() ?? [];\n const users = this.users();\n untracked(() => {\n const selectedUsers = users.filter((u) => selectedIds.includes(u.id));\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n Component,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\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: [AngularModule, PrimeModule, 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 (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 protected override setupValueEffect(): void {\n // Emit selected user when value changes\n effect(() => {\n const selectedId = this.value();\n const users = this.users();\n untracked(() => {\n if (selectedId) {\n const user = users.find((u) => u.id === selectedId);\n this.userSelected.emit(user ?? null);\n } else {\n this.userSelected.emit(null);\n }\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.isPermissionsLoaded()) {\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","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// Modules\nexport * from './modules/angular.module';\nexport * from './modules/prime.module';\n\n// Classes\nexport * from './classes/api-resource.class';\nexport * from './classes/base-form-control.class';\n\n// Components\nexport * from './components/base-list/base-list.interfaces';\nexport * from './components/base-list/base-list-template.directive';\nexport * from './components/base-list/base-list.component';\nexport * from './components/base-form/base-form.interfaces';\nexport * from './components/base-form/base-form-template.directive';\nexport * from './components/base-form/base-form.component';\nexport * from './components/inline-svg/inline-svg.component';\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/lazy-multi-select/lazy-multi-select.component';\nexport * from './components/lazy-select/lazy-select.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","i7","i8","i5","i6","i9","i10","i1","i2","DEFAULT_PAGE_SIZE","i2.IsEmptyImageDirective","i3","i4","i1.IsEmptyImageDirective","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/modules/angular.module.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/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 '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} 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\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 // 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('word') || contentType.includes('document'))\n return 'file-word';\n if (contentType.includes('excel') || contentType.includes('spreadsheet'))\n return 'file-excel';\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 { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n private readonly platformId = inject(PLATFORM_ID);\n\n get isServer(): boolean {\n return isPlatformServer(this.platformId);\n }\n}\n","import { Injectable, inject, DOCUMENT, REQUEST } from '@angular/core';\n\nimport { PlatformService } from \"./platform.service\";\n\n@Injectable({\n providedIn: 'root',\n})\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 { Injectable, inject, signal } 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@Injectable({ providedIn: 'root' })\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 { Injectable, signal } 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@Injectable({ providedIn: 'root' })\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 isPermissionsLoaded(): boolean {\n return this._isLoaded();\n }\n}\n","import { computed, inject, Injectable, Signal } from '@angular/core';\nimport {\n FALLBACK_MESSAGES_REGISTRY,\n LOCALIZATION_STATE_SERVICE,\n} from '@flusys/ng-core';\n\n@Injectable({ providedIn: 'root' })\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, Injectable } from '@angular/core';\nimport { PlatformService } from './public-api';\n\n@Injectable({ providedIn: 'root' })\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.isPermissionsLoaded()) {\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 * withFetch(),\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 { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\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 { Router } from '@angular/router';\nimport { MessageService } from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { AngularModule } from '../../modules/angular.module';\nimport { UiModule } from '@flusys/ng-ui';\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: [AngularModule, UiModule],\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 private readonly _visiblePasswordFields = 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 isPasswordVisible(key: string): boolean {\n return this._visiblePasswordFields().has(key);\n }\n\n togglePasswordVisibility(key: string): void {\n this._visiblePasswordFields.update((set) => {\n const next = new Set(set);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\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-iconfield iconPosition=\"right\" class=\"w-full\">\n <input\n fInputText\n fInputPassword\n [id]=\"field.key\"\n [name]=\"field.key\"\n [mask]=\"!isPasswordVisible(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 [invalid]=\"isFieldInvalid(field)\"\n class=\"w-full\"\n />\n <f-inputicon\n class=\"cursor-pointer\"\n (click)=\"togglePasswordVisibility(field.key)\"\n >\n <ui-icon [name]=\"isPasswordVisible(field.key) ? 'eye-slash' : 'eye'\"></ui-icon>\n </f-inputicon>\n </f-iconfield>\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); context: { $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 { Router } from '@angular/router';\nimport { ConfirmationService, MessageService } from '@flusys/ng-ui';\nimport { ApiResourceService } from '../../classes/api-resource.class';\nimport { IFilter } from '../../interfaces/filter-data.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { UiModule } from '@flusys/ng-ui';\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: [AngularModule, UiModule],\n templateUrl: './base-list.component.html',\n})\nexport class BaseListComponent {\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 private readonly confirmationService = inject(ConfirmationService, { optional: true });\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 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 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(() => this.service()?.data() ?? this.data());\n readonly effectiveTotal = computed(() => this.service()?.total() ?? this.total());\n readonly effectiveIsLoading = computed(() => this.service()?.isLoading() ?? this.isLoading());\n\n readonly effectiveActions = computed<ITableAction[]>(() => {\n const editRoute = this.editRoute();\n const deleteField = this.deleteConfirmField();\n\n const editAction: ITableAction[] = editRoute\n ? [{ icon: 'pencil', tooltip: 'shared.edit', severity: 'info',\n show: this.canEdit() ?? undefined, handler: (item) => this.handleEditItem(item) }]\n : [];\n\n const deleteAction: ITableAction[] = deleteField\n ? [{ icon: 'trash', tooltip: 'shared.delete', severity: 'danger',\n show: this.canDelete() ?? undefined, handler: (item) => this.handleDeleteItem(item) }]\n : [];\n\n return [...editAction, ...this.actions(), ...deleteAction];\n });\n\n readonly visibleColumns = computed(() => this.columns().filter((c) => !c.hidden));\n readonly columnCount = computed(\n () => this.visibleColumns().length + (this.effectiveActions().length > 0 ? 1 : 0),\n );\n\n readonly resolvedEmptyMessage = computed(() => this.emptyMessage() || this.t('shared.no.data'));\n readonly resolvedCreateLabel = computed(() => this.createButtonLabel() || this.t('shared.create'));\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({ id, type: 'delete' });\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 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>((obj, key) => (obj != null ? (obj as Record<string, unknown>)[key] : null), item);\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 this.columnTemplates().find((t) => t.key() === field)?.templateRef ?? null;\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': return 'text-center';\n case 'right': return 'text-right';\n default: 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 class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 p-4\">\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><ui-icon name=\"search\" class=\"text-sm\"></ui-icon></f-inputicon>\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\n fButton\n (click)=\"handleCreate()\"\n >\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 [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 [style.width]=\"col.width\" [style.min-width]=\"col.minWidth\" [class]=\"getCellClass(col)\">\n {{ col.header }}\n </th>\n }\n @if (effectiveActions().length > 0) {\n <th style=\"width: 120px; text-align: center;\">{{ t('shared.actions') }}</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 (getTagConfig(col, getFieldValue(item, col.field)); as tagCfg) {\n <f-tag [severity]=\"tagCfg.severity\" [value]=\"tagCfg.label ?? getFieldValueAsString(item, col.field)\" />\n } @else {\n {{ getFieldValueAsString(item, col.field) }}\n }\n }\n @case ('boolean') {\n <f-tag\n [severity]=\"getFieldValue(item, col.field) ? 'success' : 'danger'\"\n [value]=\"getFieldValue(item, col.field) ? t('shared.yes') : t('shared.no')\"\n />\n }\n @case ('date') {\n {{ getFieldValueAsString(item, col.field) | date: (col.dateFormat ?? 'dd/MM/yyyy') }}\n }\n @case ('number') {\n {{ getFieldValueAsString(item, col.field) | number }}\n }\n @case ('custom') {\n <ng-container\n *ngTemplateOutlet=\"getColumnTemplate(col.field); context: { $implicit: item, field: col.field }\"\n />\n }\n @default {\n {{ truncateText(getFieldValue(item, col.field), col.truncate) }}\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]=\"action.disabled ? action.disabled(item) : false\"\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 class=\"flex flex-col items-center justify-center py-12 text-surface-400\">\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 { MessageService } 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 { AngularModule } from '../../modules/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { FILE_PROVIDER } from '../../tokens/provider.tokens';\nimport { UiModule } from '@flusys/ng-ui';\n\n@Component({\n selector: 'lib-file-uploader',\n imports: [AngularModule, UiModule, TranslatePipe],\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(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--f-surface-600);\n background: var(--f-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .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(.p-dark) .upload-zone.drag-over,\n .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(.p-dark) .file-preview-item,\n .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 { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule } from '../../modules/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 { UiModule } 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: [AngularModule, UiModule, FileUploaderComponent, TranslatePipe],\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><ui-icon name=\"search\" /></f-inputicon>\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 [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 [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(.p-dark) .file-card,\n .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(.p-dark) .file-card.selected,\n .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(.p-dark) .file-preview,\n .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(.p-dark) .selected-overlay i,\n .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 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 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.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.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.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.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()\"></ui-icon>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n 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@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(\n (text) => this.sanitizer.bypassSecurityTrustHtml(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 { CheckboxChangeEvent } from '@flusys/ng-ui';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule } from '../../modules/public-api';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { UiModule } from '@flusys/ng-ui';\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: [UiModule, AngularModule, TranslatePipe],\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 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\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 // 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 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.selectDataList()\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.selectDataList().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\n const overlayEl = this.overlayViewRef.rootNodes[0] as HTMLElement;\n this.document.body.appendChild(overlayEl);\n\n // Override positioning for portal (CSS class handles visual styles)\n const rect = this.pSelectRef()?.nativeElement.getBoundingClientRect();\n if (rect) {\n overlayEl.style.cssText = `\n position: fixed !important;\n top: ${rect.bottom + 2}px !important;\n left: ${rect.left}px !important;\n width: ${rect.width}px !important;\n max-width: ${rect.width}px !important;\n min-width: ${rect.width}px !important;\n z-index: 999999999999 !important;\n `;\n }\n }\n\n private closeOverlay(): void {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\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.selectDataList().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-[38px]\"\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 class=\"flex-1 truncate text-(--f-form-field-color)\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"flex-1 truncate text-(--f-form-field-placeholder-color)\">{{ displayPlaceholder() }}</span>\n }\n\n @if (showClear() && hasSelectedValues()) {\n <span class=\"inline-flex items-center px-1 text-(--f-text-muted-color) hover:text-(--f-text-hover-color) cursor-pointer\" (click)=\"clear($event)\">\n <ui-icon name=\"times\" class=\"text-xs\"></ui-icon>\n </span>\n }\n\n @if (isEditMode()) {\n <span class=\"inline-flex items-center px-1 text-(--f-form-field-placeholder-color)\">\n <ui-icon name=\"chevron-down\" class=\"text-xs\"></ui-icon>\n </span>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"flex flex-col max-h-[250px] overflow-hidden\" (click)=\"onOverlayClick($event)\">\n <div 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 <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 class=\"flex-1 overflow-y-auto min-h-0 w-full\" (scroll)=\"onScroll($event)\">\n <ul class=\"m-0 py-1 list-none bg-(--f-overlay-popover-background) text-(--f-text-color) w-full\">\n @for (data of selectDataList(); 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]=\"isItemSelected ? 'bg-primary/10 text-primary' : 'text-(--f-text-color) hover:bg-(--f-content-hover-background)'\"\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 {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule } from '../../modules/public-api';\nimport { TranslateService } from '../../services/translate.service';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\nimport { UiModule } 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: [AngularModule, UiModule, EditModeElementChangerDirective],\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 // 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 onBlur(): void {\n this.markAsTouched();\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 appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\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) => ({\n label: user.name || user.email,\n value: user.id,\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 }\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 effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { UiModule } from '@flusys/ng-ui';\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: [AngularModule, UiModule, 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 (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 protected override setupValueEffect(): void {\n // Emit selected users when value changes\n effect(() => {\n const selectedIds = this.value() ?? [];\n const users = this.users();\n untracked(() => {\n const selectedUsers = users.filter((u) => selectedIds.includes(u.id));\n this.usersSelected.emit(selectedUsers);\n });\n });\n }\n}\n","import {\n Component,\n effect,\n input,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { AngularModule } from '../../modules/angular.module';\nimport { UiModule } from '@flusys/ng-ui';\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: [AngularModule, UiModule, 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 (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 protected override setupValueEffect(): void {\n // Emit selected user when value changes\n effect(() => {\n const selectedId = this.value();\n const users = this.users();\n untracked(() => {\n if (selectedId) {\n const user = users.find((u) => u.id === selectedId);\n this.userSelected.emit(user ?? null);\n } else {\n this.userSelected.emit(null);\n }\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.isPermissionsLoaded()) {\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","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// Modules\nexport * from './modules/angular.module';\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","i1","DEFAULT_PAGE_SIZE","i2.IsEmptyImageDirective","map"],"mappings":"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"}