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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/interfaces/filter-data.interface.ts","../../../projects/ng-shared/interfaces/file-select.interface.ts","../../../projects/ng-shared/enums/contact-type.enum.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/services/permission-validator.service.ts","../../../projects/ng-shared/directives/edit-mode-element-changer.directive.ts","../../../projects/ng-shared/utils/permission-evaluator.util.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/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/classes/base-form-control.class.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/tokens/provider.tokens.ts","../../../projects/ng-shared/components/user-select/user-select.component.ts","../../../projects/ng-shared/components/user-multi-select/user-multi-select.component.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/guards/permission.guard.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["export interface IPagination {\n pageSize: number;\n currentPage:number;\n}\n\nexport interface ISort { [key: string]: 'ASC' | 'DESC' };\nexport interface IFilter { [key: string]: any };\n\nexport interface IFilterData {\n filter?: IFilter,\n pagination?: IPagination,\n select?: string[];\n sort?: ISort;\n withDeleted?: boolean;\n extraKey?: string[];\n}\n","import { Observable } from 'rxjs';\nimport { IListResponse, ISingleResponse } from './response-payload.interface';\n\n/**\n * Basic file info for selectors and displays\n */\nexport interface IFileBasicInfo {\n id: string;\n name: string;\n contentType: string;\n size: string;\n url: string | null;\n}\n\n/**\n * Upload options for file uploader\n */\nexport interface IFileUploadOptions {\n storageConfigId?: string;\n folderPath?: string;\n maxWidth?: number;\n maxHeight?: number;\n quality?: number;\n compress?: boolean;\n}\n\n/**\n * Uploaded file response\n */\nexport interface IUploadedFile {\n id?: string; // File manager ID (UUID) - available when registered via uploadAndRegister\n name: string;\n key: string;\n size: number;\n contentType: string;\n}\n\n/**\n * Filter params for file selector\n */\nexport interface IFileSelectFilter {\n page: number;\n pageSize: number;\n search: string;\n contentTypes?: string[];\n folderId?: string;\n [key: string]: unknown;\n}\n\n/**\n * Function type for loading files\n */\nexport type LoadFilesFn = (filter: IFileSelectFilter) => Observable<IListResponse<IFileBasicInfo>>;\n\n/**\n * Function type for uploading a file\n */\nexport type UploadFileFn = (\n file: File,\n options?: IFileUploadOptions\n) => Observable<ISingleResponse<IUploadedFile>>;\n\n/**\n * Function type for getting file URLs (presigned URL refresh)\n */\nexport type GetFileUrlsFn = (fileIds: string[]) => Observable<ISingleResponse<IFileBasicInfo[]>>;\n\n/**\n * Common file type filters\n */\nexport const FILE_TYPE_FILTERS = {\n IMAGES: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\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/**\n * Get accept string for file input from content types\n */\nexport function getAcceptString(contentTypes: string[]): string {\n if (!contentTypes.length) return '*/*';\n return contentTypes.join(',');\n}\n\n/**\n * Check if file matches allowed content types\n */\nexport function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean {\n if (!allowedTypes.length) return true;\n return allowedTypes.some((type) => {\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n}\n\n/**\n * Get file icon class based on content type\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')) return 'pi pi-file-word';\n if (contentType.includes('excel') || contentType.includes('spreadsheet')) return 'pi pi-file-excel';\n return 'pi pi-file';\n}\n\n/**\n * Format file size for display\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 const gb = mb / 1024;\n return `${gb.toFixed(2)} GB`;\n}\n","export enum ContactTypeEnum {\n PHONE = 1,\n EMAIL = 2,\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({\n providedIn: 'root'\n})\nexport class PlatformService {\n private readonly platformId = inject<Object>(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, computed } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';\nimport { Observable, of } from 'rxjs';\nimport { tap, catchError, map } from 'rxjs/operators';\nimport { ISingleResponse } from '../interfaces/response-payload.interface';\n\n/**\n * Request DTO for fetching file URLs\n */\nexport interface GetFilesRequestDto {\n id: string;\n}\n\n/**\n * Response DTO with file information including URL\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 * Uses POST /file-manager/get-files endpoint which:\n * - Handles presigned URLs for cloud storage (AWS S3, Azure)\n * - Auto-refreshes expired URLs\n * - Validates file access permissions\n * - Works with all storage providers (Local, S3, Azure, SFTP)\n */\n@Injectable({ providedIn: 'root' })\nexport class FileUrlService {\n private readonly http = inject(HttpClient);\n private readonly appConfig = inject(APP_CONFIG);\n\n /** Cache of file URLs by file ID */\n private readonly urlCache = signal<Map<string, FilesResponseDto>>(new Map());\n\n /**\n * Get file URL by ID from cache (reactive signal)\n */\n getFileUrl(fileId: string | null | undefined): string | null {\n if (!fileId) return null;\n return this.urlCache().get(fileId)?.url ?? null;\n }\n\n /**\n * Get file URL signal (computed from cache)\n */\n fileUrlSignal(fileId: string | null | undefined) {\n return computed(() => this.getFileUrl(fileId));\n }\n\n /**\n * Fetch file URLs from backend and update cache.\n * Skips IDs already in cache to prevent duplicate calls.\n * Returns Observable of fetched files (including cached ones).\n */\n fetchFileUrls(fileIds: string[], forceRefresh = false): Observable<FilesResponseDto[]> {\n if (!fileIds.length) return of([]);\n\n const cache = this.urlCache();\n\n // Filter out IDs already in cache (unless force refresh)\n const missingIds = forceRefresh\n ? fileIds\n : fileIds.filter((id) => !cache.has(id));\n\n // If all files are cached, return from cache\n if (missingIds.length === 0) {\n const cachedFiles = fileIds\n .map((id) => cache.get(id))\n .filter((f): f is FilesResponseDto => !!f);\n return of(cachedFiles);\n }\n\n const requestDto: GetFilesRequestDto[] = missingIds.map((id) => ({ id }));\n\n return this.http\n .post<ISingleResponse<FilesResponseDto[]>>(\n `${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`,\n requestDto\n )\n .pipe(\n map((response) => response.data ?? []),\n tap((files) => {\n // Update cache with new files\n const newCache = new Map(this.urlCache());\n files.forEach((file) => newCache.set(file.id, file));\n this.urlCache.set(newCache);\n }),\n map(() => {\n // Return all requested files (cached + newly fetched)\n const allCache = this.urlCache();\n return fileIds\n .map((id) => allCache.get(id))\n .filter((f): f is FilesResponseDto => !!f);\n }),\n catchError(() => of([]))\n );\n }\n\n /**\n * Fetch a single file URL.\n * Uses cache if available to prevent duplicate calls.\n * Returns Observable of file info or null if not found.\n */\n fetchSingleFileUrl(fileId: string, forceRefresh = false): Observable<FilesResponseDto | null> {\n // Return from cache immediately if available\n if (!forceRefresh) {\n const cached = this.urlCache().get(fileId);\n if (cached) {\n return of(cached);\n }\n }\n\n return this.fetchFileUrls([fileId], forceRefresh).pipe(\n map((files) => files[0] ?? null)\n );\n }\n\n /**\n * Clear the URL cache.\n * Useful on logout or when switching contexts.\n */\n clearCache(): void {\n this.urlCache.set(new Map());\n }\n\n /**\n * Remove specific file from cache.\n */\n removeFromCache(fileId: string): void {\n const cache = new Map(this.urlCache());\n cache.delete(fileId);\n this.urlCache.set(cache);\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Permission Validator Service\n *\n * Centralized service for permission validation across all packages.\n * Provides signal-based state management and reactive permission checking.\n *\n * Features:\n * - Signal-based permission storage\n * - Individual permission checks\n * - Permission change detection\n * - Reactive permission state updates\n *\n * Usage:\n * ```typescript\n * // In component\n * readonly permissionValidator = inject(PermissionValidatorService);\n *\n * // Set permissions (typically from auth/IAM)\n * this.permissionValidator.setPermissions(['user.view', 'user.create']);\n *\n * // Check individual permission\n * if (this.permissionValidator.hasPermission('user.view')) {\n * // Show UI element\n * }\n *\n * // Access current permissions reactively\n * const permissions = this.permissionValidator.permissions();\n * ```\n *\n * @packageDocumentation\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PermissionValidatorService {\n // ==================== SIGNALS ====================\n /**\n * Private writable signal for permissions\n */\n private readonly _permissions = signal<string[]>([]);\n\n /**\n * Readonly permission signal for external consumers\n */\n readonly permissions = this._permissions.asReadonly();\n\n /**\n * Private writable signal for loaded state\n */\n private readonly _isLoaded = signal(false);\n\n /**\n * Set permissions (replaces existing permissions)\n * @param permissions - Array of permission codes\n */\n setPermissions(permissions: string[]): void {\n this._permissions.set(permissions);\n this._isLoaded.set(true);\n }\n\n /**\n * Clear all permissions\n */\n clearPermissions(): void {\n this._permissions.set([]);\n this._isLoaded.set(false);\n }\n\n // ==================== PERMISSION CHECKING ====================\n\n /**\n * Check if user has a specific permission\n * @param permissionCode - Required permission code\n * @returns True if user has permission\n */\n hasPermission(permissionCode: string): boolean {\n return this.permissions().includes(permissionCode);\n }\n\n // ==================== UTILITY METHODS ====================\n /**\n * Check if permissions are loaded\n * @returns True if permissions have been loaded\n */\n isPermissionsLoaded(): boolean {\n return this._isLoaded();\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEditModeElementChanger]',\n standalone: true,\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 = 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 if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n inputElement.querySelector('.p-select-dropdown').style.display = 'none';\n inputElement.querySelector('.p-select-label').classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n inputElement.querySelector('.p-select-dropdown').style.display = 'flex';\n inputElement.querySelector('.p-select-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 { ILogicNode } from '../interfaces/permission.interface';\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 permissions.includes(logic);\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 ? permissions.includes(node.actionId) : 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) => permissions.includes(code));\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) => permissions.includes(code));\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/permission.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 * id: 'root',\n * type: 'group',\n * operator: 'AND',\n * children: [\n * {\n * id: '1',\n * type: 'group',\n * operator: 'OR',\n * children: [\n * { id: '2', type: 'action', actionId: 'user.view' },\n * { id: '3', type: 'action', actionId: 'user.create' }\n * ]\n * },\n * { id: '4', 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 standalone: true,\n})\nexport class HasPermissionDirective {\n // ==================== DEPENDENCIES ====================\n\n private readonly templateRef = inject(TemplateRef<any>);\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 standalone: true,\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, HostListener, input, output } from '@angular/core';\n\n@Directive({\n selector: '[appPreventDefault]',\n standalone: true,\n})\nexport class PreventDefaultDirective {\n eventType = input<'click' | 'keydown' | 'keyup'>('click');\n preventKey = input<string | undefined>(undefined);\n action = output<Event>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.eventType() === 'click') {\n this.processEvent(event);\n }\n }\n\n @HostListener('keydown', ['$event'])\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 @HostListener('keyup', ['$event'])\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 { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, 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 IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\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 { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TreeTableModule } from 'primeng/treetable';\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 ToggleSwitchModule,\n TooltipModule,\n TreeTableModule,\n ],\n})\nexport class PrimeModule {}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injector, resource, ResourceRef, runInInjectionContext, signal } from '@angular/core';\nimport { ApiLoaderService, APP_CONFIG } from '@flusys/ng-core';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n// =============================================================================\n// CRUD Service Interface - Matches NestJS Shared API Controller\n// =============================================================================\n\n/**\n * Service interface for CRUD operations.\n * Matches NestJS shared API controller endpoints:\n *\n * | Angular Method | HTTP | NestJS Endpoint | Response Type |\n * |------------------|--------|------------------------|------------------------|\n * | insert() | POST | /{resource}/insert | ISingleResponse<T> |\n * | insertMany() | POST | /{resource}/insert-many| IBulkResponse<T> |\n * | findById() | POST | /{resource}/get/:id | ISingleResponse<T> |\n * | getAll() | POST | /{resource}/get-all | IListResponse<T> |\n * | update() | POST | /{resource}/update | ISingleResponse<T> |\n * | updateMany() | POST | /{resource}/update-many| IBulkResponse<T> |\n * | delete() | POST | /{resource}/delete | IMessageResponse |\n */\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n findById(\n id: string,\n select?: string[],\n ): Observable<ISingleResponse<InterfaceT>>;\n getAll(\n search: string,\n filter: IFilterData,\n ): Observable<IListResponse<InterfaceT>>;\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n delete(deleteDto: IDeleteData): Observable<IMessageResponse>;\n}\n\n// =============================================================================\n// API Resource Service - Signal-based CRUD with Angular Resource API\n// =============================================================================\n\n/**\n * Abstract base class for API services using Angular 21 resource() API.\n * Provides signal-based reactive data fetching with automatic loading states.\n * Response types match FLUSYS_NEST backend DTOs.\n *\n * ## Endpoint Mapping\n *\n * All endpoints use POST method (RPC-style API):\n * - `POST /{resource}/insert` - Create single item\n * - `POST /{resource}/insert-many` - Create multiple items\n * - `POST /{resource}/get/:id` - Get single item by ID\n * - `POST /{resource}/get-all?q=` - List with pagination/filter\n * - `POST /{resource}/update` - Update single item\n * - `POST /{resource}/update-many` - Update multiple items\n * - `POST /{resource}/delete` - Delete/restore/permanent delete\n *\n * @example\n * ```typescript\n * // Define service\n * @Injectable({ providedIn: 'root' })\n * export class UserService extends ApiResourceService<UserDto, User> {\n * constructor(http: HttpClient) {\n * super('users', http);\n * }\n * }\n *\n * // In component - use signals\n * userService = inject(UserService);\n * users = this.userService.data; // Signal<User[]>\n * isLoading = this.userService.isLoading; // Signal<boolean>\n * total = this.userService.total; // Signal<number>\n *\n * // Trigger fetch\n * this.userService.fetchList('search', { pagination: { currentPage: 0, pageSize: 10 } });\n *\n * // CRUD operations\n * await this.userService.insertAsync({ name: 'John', email: 'john@example.com' });\n * await this.userService.updateAsync({ id: '123', name: 'John Updated' });\n * await this.userService.deleteAsync({ id: '123', type: 'delete' });\n * ```\n */\nexport abstract class ApiResourceService<\n DtoT,\n InterfaceT,\n> implements IApiService<DtoT, InterfaceT> {\n protected readonly baseUrl: string;\n protected readonly loaderService = inject(ApiLoaderService);\n protected readonly injector = inject(Injector);\n protected readonly http: HttpClient;\n protected readonly moduleApiName: string;\n\n // ==========================================================================\n // State Signals for List Queries\n // ==========================================================================\n\n /** Current search term */\n readonly searchTerm = signal('');\n\n /** Current filter and pagination state */\n readonly filterData = signal<IFilterData>({\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n });\n\n /**\n * Resource for list data - lazy initialized to prevent auto-fetch on service injection.\n * Call initListResource() or any list method (fetchList, reload, etc.) to initialize.\n */\n private _listResource: ResourceRef<IListResponse<InterfaceT> | undefined> | null = null;\n\n /** Whether the list resource has been initialized */\n private _resourceInitialized = false;\n\n /** Get or create the list resource (lazy initialization) */\n get listResource(): ResourceRef<IListResponse<InterfaceT> | undefined> {\n if (!this._listResource) {\n this.initListResource();\n }\n return this._listResource!;\n }\n\n /**\n * Initialize the list resource. Called automatically when accessing listResource\n * or any list-related computed signals/methods.\n * Uses runInInjectionContext to support lazy initialization outside constructor.\n */\n initListResource(): void {\n if (this._resourceInitialized) return;\n this._resourceInitialized = true;\n runInInjectionContext(this.injector, () => {\n this._listResource = resource({\n params: () => ({\n search: this.searchTerm(),\n filter: this.filterData(),\n }),\n loader: async ({ params }) => {\n const { search, filter } = params;\n return this.fetchAllAsync(search, filter);\n },\n });\n });\n }\n\n // ==========================================================================\n // Computed State Accessors\n // ==========================================================================\n\n /** Whether data is currently loading */\n readonly isLoading = computed(() => this._listResource?.isLoading() ?? false);\n\n /** List data array */\n readonly data = computed(() => this._listResource?.value()?.data ?? []);\n\n /** Total count of items */\n readonly total = computed(() => this._listResource?.value()?.meta?.total ?? 0);\n\n /** Pagination metadata */\n readonly pageInfo = computed(() => this._listResource?.value()?.meta);\n\n /** Whether there are more pages */\n readonly hasMore = computed(() => {\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\n constructor(moduleApiName: string, http: HttpClient) {\n this.moduleApiName = moduleApiName;\n this.baseUrl = inject(APP_CONFIG).apiBaseUrl + '/' + moduleApiName;\n this.http = http;\n // Resource is now lazy-initialized, not created in constructor\n }\n\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 // ==========================================================================\n // List Management Methods\n // ==========================================================================\n\n /**\n * Fetch list data (triggers resource initialization and reload)\n */\n fetchList(search: string = '', filter?: Partial<IFilterData>): void {\n this.initListResource();\n this.searchTerm.set(search);\n if (filter) {\n this.filterData.update((prev) => ({ ...prev, ...filter }));\n }\n }\n\n /**\n * Update pagination\n */\n setPagination(pagination: IPagination): void {\n this.initListResource();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\n\n /**\n * Go to next page\n */\n nextPage(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: {\n ...prev.pagination!,\n currentPage: (prev.pagination?.currentPage ?? 0) + 1,\n },\n }));\n }\n\n /**\n * Reset to first page\n */\n resetPagination(): void {\n this.initListResource();\n this.filterData.update((prev) => ({\n ...prev,\n pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },\n }));\n }\n\n /**\n * Reload current data\n */\n reload(): void {\n if (this._listResource) {\n this._listResource.reload();\n }\n }\n\n // ==========================================================================\n // Observable-based API Methods (IApiService interface)\n // ==========================================================================\n\n /**\n * Insert single item (Observable)\n * POST /{resource}/insert\n */\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/insert`,\n dto,\n this.getHttpOptions('insert'),\n );\n }\n\n /**\n * Insert multiple items (Observable)\n * POST /{resource}/insert-many\n */\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/insert-many`,\n dtos,\n this.getHttpOptions('insert-many'),\n );\n }\n\n /**\n * Find single item by ID (Observable)\n * POST /{resource}/get/:id\n */\n findById(\n id: string,\n select?: string[],\n ): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/get/${id}`,\n { select },\n this.getHttpOptions(`get/${id}`),\n );\n }\n\n /**\n * Get all items with pagination (Observable)\n * POST /{resource}/get-all?q=search\n */\n getAll(\n search: string,\n filter: IFilterData,\n ): Observable<IListResponse<InterfaceT>> {\n let params = new HttpParams();\n if (search) {\n params = params.append('q', search);\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 /**\n * Update single item (Observable)\n * POST /{resource}/update\n */\n update(dto: DtoT): Observable<ISingleResponse<InterfaceT>> {\n return this.http.post<ISingleResponse<InterfaceT>>(\n `${this.baseUrl}/update`,\n dto,\n this.getHttpOptions('update'),\n );\n }\n\n /**\n * Update multiple items (Observable)\n * POST /{resource}/update-many\n */\n updateMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>> {\n return this.http.post<IBulkResponse<InterfaceT>>(\n `${this.baseUrl}/update-many`,\n dtos,\n this.getHttpOptions('update-many'),\n );\n }\n\n /**\n * Delete items (Observable)\n * POST /{resource}/delete\n * @param deleteDto - { id: string | string[], type: 'delete' | 'restore' | 'permanent' }\n */\n delete(deleteDto: IDeleteData): Observable<IMessageResponse> {\n return this.http.post<IMessageResponse>(\n `${this.baseUrl}/delete`,\n deleteDto,\n this.getHttpOptions('delete'),\n );\n }\n\n // ==========================================================================\n // Promise-based API Methods (Async)\n // ==========================================================================\n\n /**\n * Fetch paginated list (async)\n */\n protected async fetchAllAsync(\n search: string,\n filter: IFilterData,\n ): Promise<IListResponse<InterfaceT>> {\n return firstValueFrom(this.getAll(search, filter));\n }\n\n /**\n * Find single item by ID (async)\n */\n async findByIdAsync(\n id: string,\n select?: string[],\n ): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.findById(id, select));\n }\n\n /**\n * Insert single item (async)\n */\n async insertAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.insert(dto));\n }\n\n /**\n * Insert multiple items (async)\n */\n async insertManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.insertMany(dtos));\n }\n\n /**\n * Update single item (async)\n */\n async updateAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.update(dto));\n }\n\n /**\n * Update multiple items (async)\n */\n async updateManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.updateMany(dtos));\n }\n\n /**\n * Delete items (async)\n */\n async deleteAsync(deleteDto: IDeleteData): Promise<IMessageResponse> {\n return firstValueFrom(this.delete(deleteDto));\n }\n}\n\nexport { ApiResourceService as ApiService };\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()){ @if(iconType()==IconTypeEnum.PRIMENG_ICON){\n <i [ngClass]=\"icon()\"></i>\n }@else if(iconType()==IconTypeEnum.IMAGE_FILE_LINK){\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n }@else if(iconType()==IconTypeEnum.DIRECT_TAG_SVG){\n {{ icon() }}\n }@else{ I } }\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 {\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/**\n * Base class for form controls that support ALL Angular form patterns:\n *\n * 1. **Template-driven forms:** `[(value)]=\"mySignal\"` or `[(ngModel)]=\"myValue\"`\n * 2. **Reactive forms:** `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * 3. **Signal forms (Angular 21+):** `[formField]=\"formTree.field\"`\n *\n * Implements both `ControlValueAccessor` (reactive forms) and `FormValueControl` (signal forms).\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [provideValueAccessor(MySelectComponent)]\n * })\n * export class MySelectComponent extends BaseFormControl<string | null> {\n * override readonly value = model<string | null>(null);\n *\n * constructor() {\n * super();\n * this.initializeFormControl();\n * }\n * }\n *\n * // Usage:\n * // Template-driven: <my-select [(value)]=\"selectedId\" />\n * // Reactive forms: <my-select [formControl]=\"myControl\" />\n * // Signal forms: <my-select [formField]=\"formTree.myField\" />\n * ```\n */\n@Directive()\nexport abstract class BaseFormControl<T> implements ControlValueAccessor, FormValueControl<T> {\n protected readonly injector = inject(Injector);\n\n /**\n * The value model - must be overridden in subclass with model<T>().\n * This property satisfies both:\n * - FormValueControl interface (signal forms)\n * - Internal state for ControlValueAccessor (reactive forms)\n */\n abstract readonly value: ReturnType<typeof model<T>>;\n\n /**\n * Disabled state model - bound to form control disabled state.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly disabled = model<boolean>(false);\n\n /**\n * Touched state model - for validation styling.\n * Using model() to satisfy FormValueControl interface requirements.\n */\n readonly touched = model<boolean>(false);\n\n private onChange: (value: T) => void = () => {};\n private onTouched: () => void = () => {};\n private isWritingValue = false;\n\n /**\n * Initialize the form control synchronization for ControlValueAccessor.\n * Must be called in the subclass constructor after super().\n *\n * Note: For signal forms ([formField]), this is not needed as\n * the FormField directive binds directly to the value model.\n */\n protected initializeFormControl(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const currentValue = this.value();\n if (!this.isWritingValue) {\n untracked(() => this.onChange(currentValue));\n }\n });\n });\n }\n\n // ============================================\n // ControlValueAccessor Implementation\n // (For reactive forms: formControl, formControlName)\n // ============================================\n\n /** ControlValueAccessor: Write value from form control to signal */\n writeValue(value: T): void {\n this.isWritingValue = true;\n this.value.set(value);\n this.isWritingValue = false;\n }\n\n /** ControlValueAccessor: Register change callback */\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n /** ControlValueAccessor: Register touched callback */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** ControlValueAccessor: Set disabled state from form control */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ============================================\n // FormValueControl Implementation\n // (For signal forms: [formField])\n // ============================================\n // The FormValueControl interface only requires:\n // - value: ModelSignal<T> (already declared as abstract above)\n // The FormField directive automatically binds to the value model.\n\n /** Mark the control as touched (call on blur or panel close) */\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<T extends new (...args: unknown[]) => ControlValueAccessor>(component: T) {\n return {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n model,\n output,\n runInInjectionContext,\n signal,\n viewChild,\n} from '@angular/core';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { CheckboxChangeEvent } from 'primeng/checkbox';\nimport { skip, debounceTime, distinctUntilChanged, tap } from 'rxjs';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\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],\n templateUrl: './lazy-multi-select.component.html',\n styleUrl: './lazy-multi-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazyMultiSelectComponent)]\n})\nexport class LazyMultiSelectComponent extends BaseFormControl<string[] | null> {\n // Inputs\n readonly placeHolder = input<string>('Select Options');\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 using model() for signal forms compatibility */\n override readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI signals\n readonly searchTerm = signal('');\n\n /** Computed: Display text for selected values (replaces getSelectedValue method) */\n readonly selectedValueDisplay = computed(() => {\n const selectedValues = this.value() ?? [];\n if (selectedValues.length === 0) return '';\n if (selectedValues.length > 3) {\n return `${selectedValues.length} Items Selected`;\n }\n return this.selectDataList()\n .filter(item => selectedValues.includes(item.value))\n .map(item => item.label)\n .join(', ');\n });\n\n /** Computed: Whether all items are selected (replaces isSelectAll signal) */\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 effect\n runInInjectionContext(this.injector, () => {\n toSignal(\n toObservable(this.searchTerm).pipe(\n skip(1),\n debounceTime(500),\n distinctUntilChanged(),\n tap((value) => {\n this.onSearch.emit(value);\n })\n ),\n { initialValue: this.searchTerm() }\n );\n });\n }\n\n private readonly onScrollBound = this.onScroll.bind(this);\n readonly multiScrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('multiScrollContainer');\n\n onScroll(event: Event) {\n const el = event.target as HTMLElement;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 50;\n if (nearBottom && !this.isLoading()) {\n const pagination = this.pagination();\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (this.total() ?? 0);\n if (hasMore) {\n this.onPagination.emit({ ...pagination, currentPage: nextPage });\n }\n }\n }\n\n readonly pSelectRef = viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n\n openOptions = signal(false);\n\n onSelectClick(event: Event) {\n if (this.disabled()) return;\n this.pSelectRef()?.nativeElement.classList.add('p-focus');\n this.openOptions.update((isOpen) => !isOpen);\n }\n\n onOverlayClick(event: Event) {\n event.stopPropagation();\n }\n\n @HostListener('document:click', ['$event'])\n handleDocumentClick(event: MouseEvent) {\n const clickedInside = this.pSelectRef()?.nativeElement.contains(event.target as Node);\n if (!clickedInside) {\n this.openOptions.set(false);\n this.pSelectRef()?.nativeElement.classList.remove('p-focus');\n this.markAsTouched();\n }\n }\n\n isSelected(data: IDropDown) {\n return this.value()?.includes(data.value);\n }\n\n key(option: IDropDown) {\n return option.value;\n }\n\n selectValue(event: CheckboxChangeEvent, option: IDropDown) {\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 const updated = previousValue.filter((v) => v !== option.value);\n this.value.set(updated);\n }\n }\n\n changeSelectAll(event: CheckboxChangeEvent) {\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) {\n event.stopPropagation();\n this.value.set([]);\n }\n}\n","<div class=\"p-select w-full\" #pSelect (click)=\"onSelectClick($event)\"\n [class.p-disabled]=\"disabled()\">\n @if(selectedValueDisplay()){\n <span class=\"p-select-label\">{{selectedValueDisplay()}}</span>\n }@else {\n <span class=\"p-select-label p-placeholder\">{{placeHolder()}}</span>\n }\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\"><i class=\"pi pi-times\"></i></span>\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n data-p-icon=\"chevron-down\" class=\"p-multiselect-dropdown-icon p-icon ng-star-inserted\"\n data-pc-section=\"triggericon\" aria-hidden=\"true\" pc75=\"\">\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\"></path>\n </svg>\n </span>\n </div>\n @if(openOptions()){\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 binary=\"true\" (onChange)=\"changeSelectAll($event)\" [ngModel]=\"isSelectAll()\" [disabled]=\"disabled()\"/>\n <input type=\"text\" pInputText class=\"w-full\" [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\" [ngModelOptions]=\"{ standalone: true }\"\n placeholder=\"Search...\" />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track key(data); let i = $index) {\n <li class=\"p-select-option flex flex-row gap-2 items-center\"\n [ngClass]=\"{ 'p-select-option-selected': isSelected(data) }\">\n <p-checkbox binary=\"true\" (onChange)=\"selectValue($event,data)\" [ngModel]=\"isSelected(data)\" [disabled]=\"disabled()\" />\n <span>{{data.label}}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, input, model, output, runInInjectionContext, signal, viewChild } from '@angular/core';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { skip, debounceTime, distinctUntilChanged, tap } from 'rxjs';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [\n AngularModule,\n PrimeModule,\n EditModeElementChangerDirective\n ],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazySelectComponent)]\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n // Inputs\n readonly placeHolder = input<string>('Select Option');\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 using model() for signal forms compatibility */\n override readonly value = model<string | null>(null);\n\n // Outputs\n readonly onSearch = output<string>();\n readonly onPagination = output<IPagination>();\n\n // UI signals\n readonly searchTerm = signal('');\n\n // Effect hooks\n constructor() {\n super();\n this.initializeFormControl();\n\n runInInjectionContext(this.injector, () => {\n toSignal(\n toObservable(this.searchTerm).pipe(\n skip(1),\n debounceTime(500),\n distinctUntilChanged(),\n tap(value => {\n this.onSearch.emit(value);\n })\n ),\n { initialValue: this.searchTerm() }\n );\n });\n }\n\n // Signal to toggle panel\n isPanelShow = signal(false);\n scrollTargetEl: HTMLElement | null = null;\n private readonly onScrollBound = this.onScroll.bind(this);\n readonly scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n onScroll(event: Event) {\n const el = event.target as HTMLElement;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 50;\n if (nearBottom && !this.isLoading()) {\n const pagination = this.pagination();\n const nextPage = pagination.currentPage + 1;\n const hasMore = nextPage * pagination.pageSize < (this.total() ?? 0);\n if (hasMore) {\n this.onPagination.emit({ ...pagination, currentPage: nextPage });\n }\n }\n }\n\n // Toggle panel and manage scroll event\n showPanel() {\n if (this.disabled()) return;\n this.isPanelShow.update(prev => !prev);\n const isNowVisible = this.isPanelShow();\n if (isNowVisible) {\n setTimeout(() => {\n const containerEl = this.scrollContainer().nativeElement;\n const target = containerEl.querySelector<HTMLElement>('.p-select-list-container');\n if (target) {\n target.addEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = target;\n }\n }, 0);\n } else {\n if (this.scrollTargetEl) {\n this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);\n this.scrollTargetEl = null;\n }\n }\n }\n\n onBlur(): void {\n this.markAsTouched();\n }\n}\n","<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n [options]=\"selectDataList()\"\n [(ngModel)]=\"value\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n class=\"w-full\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\">\n <ng-template let-filter #filter>\n <input\n pInputText\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n [ngModelOptions]=\"{standalone:true}\"\n class=\"w-full\" />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template let-item #item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { IAuthStateProvider } from '../interfaces/auth-state-provider.interface';\nimport { ICompanyApiProvider } from '../interfaces/company-provider.interface';\nimport { IProfilePermissionProvider } from '../interfaces/profile-permission-provider.interface';\nimport { IProfileUploadProvider } from '../interfaces/profile-upload-provider.interface';\nimport { IUserListItem, IUserListProvider } from '../interfaces/user-list-provider.interface';\nimport { IUserPermissionProvider } from '../interfaces/user-permission-provider.interface';\nimport { IUserProvider } from '../interfaces/user-provider.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 =\n new InjectionToken<IAuthStateProvider>('AUTH_STATE_PROVIDER', {\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 * 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 * Profile Upload Provider Token\n *\n * Provides file upload functionality for profile pictures.\n * Optional - if not configured or storage not enabled, upload section is hidden.\n * Use with `inject(PROFILE_UPLOAD_PROVIDER, { optional: true })`.\n */\nexport const PROFILE_UPLOAD_PROVIDER =\n new InjectionToken<IProfileUploadProvider>('PROFILE_UPLOAD_PROVIDER');\n\n/**\n * User List Provider Token\n *\n * Provides extra actions, columns, and data enrichment for user list.\n * Optional - if not configured, default user list behavior is used.\n * Use with `inject(USER_LIST_PROVIDER, { optional: true })`.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * { provide: USER_LIST_PROVIDER, useClass: MyUserListProvider },\n * ]\n */\nexport const USER_LIST_PROVIDER =\n new InjectionToken<IUserListProvider<IUserListItem>>('USER_LIST_PROVIDER');\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\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, map } from 'rxjs';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { IDropDown } from '../../interfaces/drop-down.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { IUserBasicInfo, IUserProvider } from '../../interfaces/user-provider.interface';\nimport { IUserSelectFilter, LoadUsersFn } from '../../interfaces/user-select.interface';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\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 standalone: true,\n imports: [AngularModule, PrimeModule, LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"placeHolder()\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\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 changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserSelectComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n private abortController: AbortController | null = null;\n\n // Optional: custom function to load users (uses USER_PROVIDER if not provided)\n readonly loadUsers = input<LoadUsersFn>();\n\n // Inputs\n readonly placeHolder = input<string>('Select User');\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 // Two-way bound value\n readonly value = model<string | null>(null);\n\n // Outputs\n readonly userSelected = output<IUserBasicInfo | null>();\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>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\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 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 // 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 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 private 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 return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n isActive: this.filterActive() ? true : undefined,\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 /** 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","import {\n afterNextRender,\n ChangeDetectionStrategy,\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, map } from 'rxjs';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { IDropDown } from '../../interfaces/drop-down.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { IUserBasicInfo, IUserProvider } from '../../interfaces/user-provider.interface';\nimport { IUserSelectFilter, LoadUsersFn } from '../../interfaces/user-select.interface';\nimport { USER_PROVIDER } from '../../tokens/provider.tokens';\n\nconst DEFAULT_PAGE_SIZE = 20;\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 standalone: true,\n imports: [AngularModule, PrimeModule, LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"placeHolder()\"\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 changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UserMultiSelectComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly userProvider = inject<IUserProvider>(USER_PROVIDER);\n private abortController: AbortController | null = null;\n\n // Optional: custom function to load users (uses USER_PROVIDER if not provided)\n readonly loadUsers = input<LoadUsersFn>();\n\n // Inputs\n readonly placeHolder = input<string>('Select Users');\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 // Two-way bound value\n readonly value = model<string[] | null>(null);\n\n // Outputs\n readonly usersSelected = output<IUserBasicInfo[]>();\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>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\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 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 // 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 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 private 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 return this.userProvider\n .getUsers({\n page: filter.page,\n pageSize: filter.pageSize,\n search: filter.search,\n isActive: this.filterActive() ? true : undefined,\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 /** 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","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { MessageService } from 'primeng/api';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n} from '../../interfaces/file-select.interface';\n\n/**\n * File Uploader Component - Drag & drop file upload with type filtering.\n *\n * Pass your own `uploadFile` function - works with any storage API.\n *\n * Features:\n * - Drag & drop support\n * - File type filtering (images, documents, etc.)\n * - Upload progress indication\n * - Multiple file support (optional)\n * - Image compression options\n *\n * @example\n * ```typescript\n * // In component\n * readonly uploadService = inject(UploadService);\n *\n * readonly uploadFile: UploadFileFn = (file, options) =>\n * this.uploadService.uploadSingleFile(file, options);\n * ```\n *\n * ```html\n * <!-- Single image upload -->\n * <lib-file-uploader\n * [uploadFile]=\"uploadFile\"\n * [acceptTypes]=\"['image/*']\"\n * [multiple]=\"false\"\n * (fileUploaded)=\"onFileUploaded($event)\"\n * />\n *\n * <!-- Multiple document upload -->\n * <lib-file-uploader\n * [uploadFile]=\"uploadFile\"\n * [acceptTypes]=\"FILE_TYPE_FILTERS.DOCUMENTS\"\n * [multiple]=\"true\"\n * [maxFiles]=\"5\"\n * (filesUploaded)=\"onFilesUploaded($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-file-uploader',\n standalone: true,\n imports: [AngularModule, PrimeModule],\n template: `\n <div\n class=\"file-uploader\"\n [class.drag-over]=\"isDragOver()\"\n [class.disabled]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <!-- Upload Area -->\n <div class=\"upload-area\" (click)=\"fileInput.click()\">\n @if (isUploading()) {\n <div class=\"uploading-state\">\n <i class=\"pi pi-spin pi-spinner text-4xl text-primary\"></i>\n <p class=\"mt-2\">Uploading {{ uploadingFileName() }}...</p>\n @if (uploadProgress() > 0) {\n <p-progressBar [value]=\"uploadProgress()\" [showValue]=\"true\" />\n }\n </div>\n } @else {\n <div class=\"idle-state text-center\">\n <i class=\"pi pi-cloud-upload text-4xl text-primary\"></i>\n <p class=\"mt-2 mb-1 font-semibold\">\n {{ multiple() ? 'Drop files here or click to upload' : 'Drop file here or click to upload' }}\n </p>\n <p class=\"text-sm text-color-secondary\">\n @if (acceptTypesDisplay()) {\n Allowed: {{ acceptTypesDisplay() }}\n } @else {\n All file types allowed\n }\n @if (maxSizeMb()) {\n (Max {{ maxSizeMb() }}MB)\n }\n </p>\n </div>\n }\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n [accept]=\"acceptString()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isUploading()\"\n (change)=\"onFileSelected($event)\"\n class=\"hidden\"\n />\n\n <!-- Selected Files Preview -->\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"selected-files mt-3\">\n @for (file of selectedFiles(); track file.name) {\n <div class=\"file-item flex align-items-center gap-2 p-2 border-round surface-border border-1 mb-2\">\n <i [class]=\"getFileIcon(file)\"></i>\n <span class=\"flex-1 text-overflow-ellipsis overflow-hidden\">{{ file.name }}</span>\n <span class=\"text-sm text-color-secondary\">{{ formatSize(file.size) }}</span>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-times\"\n class=\"p-button-text p-button-rounded p-button-sm\"\n (click)=\"removeFile(file)\"\n [disabled]=\"isUploading()\"\n ></button>\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n .file-uploader {\n width: 100%;\n }\n\n .upload-area {\n border: 2px dashed var(--surface-border);\n border-radius: var(--border-radius);\n padding: 2rem;\n cursor: pointer;\n transition: all 0.2s;\n background: var(--surface-ground);\n }\n\n .upload-area:hover {\n border-color: var(--primary-color);\n background: var(--surface-hover);\n }\n\n .drag-over .upload-area {\n border-color: var(--primary-color);\n background: var(--primary-100);\n }\n\n .disabled .upload-area {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .hidden {\n display: none;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploaderComponent {\n private readonly messageService = inject(MessageService);\n\n // Required: function to upload file\n readonly uploadFile = input.required<UploadFileFn>();\n\n // Inputs\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 // Outputs\n readonly fileUploaded = output<IUploadedFile>();\n readonly filesUploaded = output<IUploadedFile[]>();\n readonly onError = output<Error>();\n readonly fileSelected = output<File[]>();\n\n // Internal state\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 // Computed\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n readonly acceptTypesDisplay = computed(() => {\n const types = this.acceptTypes();\n if (!types.length) return '';\n\n // Check if types match predefined filters\n const typesStr = JSON.stringify(types);\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.IMAGES)) return 'Images';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.DOCUMENTS)) return 'Documents';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.VIDEOS)) return 'Videos';\n if (typesStr === JSON.stringify(FILE_TYPE_FILTERS.AUDIO)) return '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 // Reset input to allow selecting same file again\n input.value = '';\n }\n\n private handleFiles(files: File[]): void {\n // Filter by type\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: 'Invalid File Type',\n detail: `File type not allowed: ${file.name}`,\n });\n return false;\n }\n return true;\n });\n\n // Filter by size\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: 'File Too Large',\n detail: `${file.name} exceeds ${this.maxSizeMb()}MB limit`,\n });\n return false;\n }\n return true;\n });\n\n // Limit number of files\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 const uploadedFiles: IUploadedFile[] = [];\n\n try {\n for (const file of filesToUpload) {\n this.uploadingFileName.set(file.name);\n this.uploadProgress.set(0);\n\n const response = await firstValueFrom(\n this.uploadFile()(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 || 'Upload failed');\n }\n }\n\n this.filesUploaded.emit(uploadedFiles);\n this.selectedFiles.set([]);\n\n this.messageService.add({\n severity: 'success',\n summary: 'Upload Complete',\n detail: `${uploadedFiles.length} file(s) uploaded successfully`,\n });\n } catch (error) {\n this.messageService.add({\n severity: 'error',\n summary: 'Upload Failed',\n detail: (error as Error).message || 'Failed to upload file',\n });\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 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)} KB`;\n const mb = kb / 1024;\n return `${mb.toFixed(1)} MB`;\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\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 { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport {\n formatFileSize,\n getAcceptString,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n isFileTypeAllowed,\n LoadFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\n/**\n * File Selector Dialog - Browse and select existing files with filtering.\n *\n * Pass your own `loadFiles` function - works with any storage API.\n *\n * Features:\n * - Search with debouncing\n * - File type filtering\n * - Infinite scroll pagination\n * - Single or multiple selection\n * - File preview with icons\n *\n * @example\n * ```typescript\n * // In component\n * readonly fileService = inject(FileManagerApiService);\n *\n * readonly loadFiles: LoadFilesFn = (filter) =>\n * this.fileService.getAll(filter.search, {\n * pagination: { currentPage: filter.page, pageSize: filter.pageSize },\n * filter: { contentTypes: filter.contentTypes },\n * }).pipe(\n * map(res => ({\n * ...res,\n * data: res.data?.map(f => ({\n * id: f.id,\n * name: f.name,\n * contentType: f.contentType,\n * size: f.size,\n * url: f.url\n * }))\n * }))\n * );\n * ```\n *\n * ```html\n * <lib-file-selector-dialog\n * [(visible)]=\"showFileSelector\"\n * [loadFiles]=\"loadFiles\"\n * [acceptTypes]=\"['image/*']\"\n * [multiple]=\"false\"\n * (fileSelected)=\"onFileSelected($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-file-selector-dialog',\n standalone: true,\n imports: [AngularModule, PrimeModule],\n template: `\n <p-dialog\n [header]=\"header()\"\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '800px', maxHeight: '90vh' }\"\n (onHide)=\"onDialogHide()\"\n >\n <!-- Search Bar -->\n <div class=\"flex gap-2 mb-3\">\n <span class=\"p-input-icon-left flex-1\">\n <i class=\"pi pi-search\"></i>\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search files...\"\n class=\"w-full\"\n />\n </span>\n @if (multiple()) {\n <span class=\"text-sm text-color-secondary align-self-center\">\n {{ selectedFiles().length }} selected\n </span>\n }\n </div>\n\n <!-- File Grid -->\n <div\n class=\"file-grid\"\n #scrollContainer\n (scroll)=\"onScroll($event)\"\n >\n @if (isLoading() && files().length === 0) {\n <div class=\"flex justify-content-center p-4\">\n <i class=\"pi pi-spin pi-spinner text-4xl\"></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2\"></i>\n <p>No files found</p>\n </div>\n } @else {\n @for (file of files(); track file.id) {\n <div\n class=\"file-card\"\n [class.selected]=\"isSelected(file)\"\n [class.disabled]=\"!isFileAllowed(file)\"\n (click)=\"toggleSelection(file)\"\n >\n <!-- File Preview -->\n <div class=\"file-preview\">\n @if (isImage(file) && file.url) {\n <img [src]=\"file.url\" [alt]=\"file.name\" class=\"preview-image\" />\n } @else {\n <i [class]=\"getFileIcon(file)\" class=\"preview-icon\"></i>\n }\n @if (isSelected(file)) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check\"></i>\n </div>\n }\n </div>\n\n <!-- File Info -->\n <div class=\"file-info\">\n <span class=\"file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <span class=\"file-size\">{{ formatSize(file.size) }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"flex justify-content-center p-2 w-full\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <ng-template pTemplate=\"footer\">\n <button\n pButton\n label=\"Cancel\"\n class=\"p-button-text\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n [label]=\"multiple() ? 'Select (' + selectedFiles().length + ')' : 'Select'\"\n [disabled]=\"selectedFiles().length === 0\"\n (click)=\"onConfirm()\"\n ></button>\n </ng-template>\n </p-dialog>\n `,\n styles: [`\n .file-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n gap: 1rem;\n max-height: 400px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n .file-card {\n border: 2px solid var(--surface-border);\n border-radius: var(--border-radius);\n cursor: pointer;\n transition: all 0.2s;\n overflow: hidden;\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--primary-color);\n }\n\n .file-card.selected {\n border-color: var(--primary-color);\n background: var(--primary-50);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .file-preview {\n position: relative;\n height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--surface-ground);\n }\n\n .preview-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .preview-icon {\n font-size: 3rem;\n color: var(--text-color-secondary);\n }\n\n .selected-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(var(--primary-color-rgb), 0.3);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .selected-overlay i {\n font-size: 2rem;\n color: var(--primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n .file-info {\n padding: 0.5rem;\n text-align: center;\n }\n\n .file-name {\n display: block;\n font-size: 0.875rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .file-size {\n display: block;\n font-size: 0.75rem;\n color: var(--text-color-secondary);\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileSelectorDialogComponent {\n private readonly destroyRef = inject(DestroyRef);\n private abortController: AbortController | null = null;\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Required: function to load files\n readonly loadFiles = input.required<LoadFilesFn>();\n\n // Inputs\n readonly header = input<string>('Select File');\n readonly acceptTypes = input<string[]>([]);\n readonly multiple = input<boolean>(false);\n readonly maxSelection = input<number>(10);\n readonly pageSize = input<number>(DEFAULT_PAGE_SIZE);\n\n // Two-way visibility binding\n readonly visible = model<boolean>(false);\n\n // Outputs\n readonly fileSelected = output<IFileBasicInfo>();\n readonly filesSelected = output<IFileBasicInfo[]>();\n readonly closed = output<void>();\n readonly onError = output<Error>();\n\n // Internal state\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>({ pageSize: DEFAULT_PAGE_SIZE, currentPage: 0 });\n readonly searchTerm = signal('');\n\n // Computed\n readonly acceptString = computed(() => getAcceptString(this.acceptTypes()));\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.abortController?.abort();\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n });\n\n // Load files when dialog becomes visible\n effect(() => {\n const isVisible = this.visible();\n if (isVisible) {\n untracked(() => {\n this.resetState();\n this.fetchFiles();\n });\n }\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\n onSearchChange(value: string): void {\n // Debounce search\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 el = event.target as HTMLElement;\n const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 50;\n\n if (nearBottom && !this.isLoading()) {\n const pag = this.pagination();\n const nextPage = pag.currentPage + 1;\n const hasMore = nextPage * pag.pageSize < (this.total() ?? 0);\n\n if (hasMore) {\n this.pagination.update((p) => ({ ...p, currentPage: nextPage }));\n this.fetchFiles(true);\n }\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) => files.filter((f) => f.id !== file.id));\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 private resetState(): void {\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 }\n\n private async fetchFiles(append = false): Promise<void> {\n if (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 ? this.acceptTypes() : undefined,\n };\n\n const response = await firstValueFrom(this.loadFiles()(filter));\n\n if (response.success && response.data) {\n if (append) {\n this.files.update((current) => [...current, ...response.data!]);\n } else {\n this.files.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","import { inject, isDevMode } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { ILogicNode } from '../interfaces/permission.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport {\n evaluatePermission,\n hasAllPermissions,\n hasAnyPermission,\n} from '../utils/permission-evaluator.util';\n\n/** Log only in dev mode */\nconst devLog = (message: string) => {\n if (isDevMode()) console.log(message);\n};\n\n/**\n * Permission Guard\n *\n * Route-level guard for permission-based access control.\n * Validates permissions before allowing navigation.\n *\n * Features:\n * - Single permission check\n * - Complex ILogicNode logic trees\n * - Configurable redirect URL\n * - Debug logging for denied access\n *\n * @example\n * ```typescript\n * // Simple permission check\n * { path: 'users', canActivate: [permissionGuard('user.view')] }\n *\n * // Complex logic\n * { path: 'admin', canActivate: [permissionGuard({\n * id: 'root',\n * type: 'group',\n * operator: 'AND',\n * children: [\n * { id: '1', type: 'action', actionId: 'admin.view' },\n * { id: '2', type: 'action', actionId: 'admin.manage' }\n * ]\n * })] }\n *\n * // With custom redirect\n * { path: 'users', canActivate: [permissionGuard('user.view', '/access-denied')] }\n * ```\n */\nexport function permissionGuard(\n permission: string | ILogicNode,\n redirectTo: string = '/',\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n // Check if permissions are loaded\n if (!permissionValidator.isPermissionsLoaded()) {\n devLog(\n '[permissionGuard] Permissions not loaded, denying access to route',\n );\n return router.createUrlTree([redirectTo]);\n }\n\n const userPermissions = permissionValidator.permissions();\n const hasPermission = evaluatePermission(permission, userPermissions);\n\n if (!hasPermission) {\n const permissionCode =\n typeof permission === 'string' ? permission : 'complex-logic';\n devLog(\n `[permissionGuard] Access denied - missing permission: ${permissionCode}`,\n );\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * Any Permission Guard (OR logic)\n *\n * Allows access if user has ANY of the specified permissions.\n *\n * @example\n * ```typescript\n * // Allow if user has view OR create permission\n * { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }\n * ```\n */\nexport function anyPermissionGuard(\n permissions: string[],\n redirectTo: string = '/',\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n // Validate permissions array\n if (!permissions || permissions.length === 0) {\n devLog(\n '[anyPermissionGuard] Empty permissions array provided, denying access',\n );\n return router.createUrlTree([redirectTo]);\n }\n\n // Check if permissions are loaded\n if (!permissionValidator.isPermissionsLoaded()) {\n devLog(\n '[anyPermissionGuard] Permissions not loaded, denying access to route',\n );\n return router.createUrlTree([redirectTo]);\n }\n\n const userPermissions = permissionValidator.permissions();\n const hasPermission = hasAnyPermission(permissions, userPermissions);\n\n if (!hasPermission) {\n devLog(\n `[anyPermissionGuard] Access denied - missing any of: ${permissions.join(', ')}`,\n );\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n\n/**\n * All Permissions Guard (AND logic)\n *\n * Allows access only if user has ALL of the specified permissions.\n *\n * @example\n * ```typescript\n * // Allow only if user has BOTH view AND create permissions\n * { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }\n * ```\n */\nexport function allPermissionsGuard(\n permissions: string[],\n redirectTo: string = '/',\n): CanActivateFn {\n return () => {\n const permissionValidator = inject(PermissionValidatorService);\n const router = inject(Router);\n\n // Validate permissions array\n if (!permissions || permissions.length === 0) {\n devLog(\n '[allPermissionsGuard] Empty permissions array provided, denying access',\n );\n return router.createUrlTree([redirectTo]);\n }\n\n // Check if permissions are loaded\n if (!permissionValidator.isPermissionsLoaded()) {\n devLog(\n '[allPermissionsGuard] Permissions not loaded, denying access to route',\n );\n return router.createUrlTree([redirectTo]);\n }\n\n const userPermissions = permissionValidator.permissions();\n const hasPermission = hasAllPermissions(permissions, userPermissions);\n\n if (!hasPermission) {\n devLog(\n `[allPermissionsGuard] Access denied - missing all of: ${permissions.join(', ')}`,\n );\n return router.createUrlTree([redirectTo]);\n }\n\n return true;\n };\n}\n","// Interfaces\nexport * from './interfaces/auth-state-provider.interface';\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/company-provider.interface';\nexport * from './interfaces/delete-data.interface';\nexport * from './interfaces/drop-down.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/permission.interface';\nexport * from './interfaces/response-payload.interface';\nexport * from './interfaces/user-permission-provider.interface';\nexport * from './interfaces/user-provider.interface';\nexport * from './interfaces/user-select.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/profile-permission-provider.interface';\nexport * from './interfaces/profile-upload-provider.interface';\nexport * from './interfaces/user-list-provider.interface';\n\n// Enums\nexport * from './enums/contact-type.enum';\nexport * from './enums/icon-type.enum';\n\n// Services\nexport * from './services/cookie.service';\nexport * from './services/file-url.service';\nexport * from './services/permission-validator.service';\nexport * from './services/platform.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// Modules\nexport * from './modules/angular.module';\nexport * from './modules/prime.module';\n\n// Classes\nexport * from './classes/api-resource.class';\n\n// Components\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-select/user-select.component';\nexport * from './components/user-multi-select/user-multi-select.component';\nexport * from './components/file-uploader/file-uploader.component';\nexport * from './components/file-selector-dialog/file-selector-dialog.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":["i2.IsEmptyImageDirective","tap","i1","i3","i4","DEFAULT_PAGE_SIZE","map","i2","i6"],"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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"}