@flusys/ng-shared 3.0.0-rc → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/permissions.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/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.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/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/utils/scroll-pagination.util.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/base-user-select.class.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/utils/base-form-page.ts","../../../projects/ng-shared/utils/base-list-page.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["/**\n * Centralized Permission Codes\n *\n * Single source of truth for all permission codes used across the application.\n * Use these constants instead of hardcoded strings to prevent typos and enable easy refactoring.\n *\n * Naming Convention: <entity>.<action>\n * - entity: The resource being accessed (e.g., user, role, company)\n * - action: The operation being performed (create, read, update, delete, assign)\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\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\n// ==================== AGGREGATED EXPORTS ====================\n\n/**\n * All permission codes grouped by module\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} 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 { 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}\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({ 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, Signal, 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\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 /** Get file URL by ID from cache (synchronous) */\n getFileUrl(fileId: string | null | undefined): string | null {\n if (!fileId) return null;\n return this._cache().get(fileId)?.url ?? null;\n }\n\n /** Get file URL as computed signal */\n fileUrlSignal(fileId: string | null | undefined): Signal<string | null> {\n return computed(() => this.getFileUrl(fileId));\n }\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<ISingleResponse<FilesResponseDto[]>>(\n `${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`,\n requestDto,\n )\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 /** Clear entire cache */\n clearCache(): void {\n this._cache.set(new Map());\n }\n\n /** Remove specific file from cache */\n removeFromCache(fileId: string): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n next.delete(fileId);\n return next;\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 { hasPermission } 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 /** @deprecated Use `isLoaded()` signal instead */\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})\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 {\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 * 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})\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 { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\n","import { NgModule } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ImageModule } from 'primeng/image';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { PasswordModule } from 'primeng/password';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { StepsModule } from 'primeng/steps';\nimport { TableModule } from 'primeng/table';\nimport { TabsModule } from 'primeng/tabs';\nimport { TagModule } from 'primeng/tag';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToastModule } from 'primeng/toast';\nimport { 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 { 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 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 /**\n * Signal to track resource initialization for computed signals.\n * This allows computed signals to re-evaluate when the resource is created.\n * Without this, computed signals would not detect when _listResource changes from null.\n */\n private readonly _resourceInitSignal = signal(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 // Signal that resource is now initialized - triggers computed re-evaluation\n this._resourceInitSignal.set(true);\n }\n\n // ==========================================================================\n // Computed State Accessors\n // ==========================================================================\n\n /**\n * Whether data is currently loading.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly isLoading = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.isLoading() ?? false;\n });\n\n /**\n * List data array.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly data = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.data ?? [];\n });\n\n /**\n * Total count of items.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly total = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.meta?.total ?? 0;\n });\n\n /**\n * Pagination metadata.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly pageInfo = computed(() => {\n this._resourceInitSignal(); // Track initialization\n return this._listResource?.value()?.meta;\n });\n\n /**\n * Whether there are more pages.\n * Tracks _resourceInitSignal to re-evaluate when resource is created.\n */\n readonly hasMore = computed(() => {\n this._resourceInitSignal(); // Track initialization\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 {\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 { ChangeDetectionStrategy, 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 changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.PRIMENG_ICON) {\n <i [class]=\"icon()\"></i>\n } @else if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <i class=\"pi pi-question\"></i>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n iconType = input<IconTypeEnum | undefined>(IconTypeEnum.PRIMENG_ICON);\n protected readonly IconTypeEnum = IconTypeEnum; // Needed for template reference\n}\n","import { 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 afterNextRender,\n ChangeDetectionStrategy,\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 { CheckboxChangeEvent } from 'primeng/checkbox';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [PrimeModule, AngularModule],\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 private readonly destroyRef = inject(DestroyRef);\n private readonly onDocumentClickBound = this.handleDocumentClick.bind(this);\n\n // View references\n readonly pSelectRef = viewChild.required<ElementRef<HTMLDivElement>>('pSelect');\n\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\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 `${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 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 document.addEventListener('click', this.onDocumentClickBound);\n });\n\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('click', this.onDocumentClickBound);\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 onSelectClick(event: Event): void {\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): void {\n event.stopPropagation();\n }\n\n private handleDocumentClick(event: MouseEvent): void {\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): boolean {\n return this.value()?.includes(data.value) ?? false;\n }\n\n key(option: IDropDown): string {\n return option.value;\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","<div class=\"p-select w-full\" #pSelect (click)=\"onSelectClick($event)\" [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\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\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 class=\"p-multiselect-dropdown-icon p-icon\" aria-hidden=\"true\">\n <path 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\" fill=\"currentColor\" />\n </svg>\n </span>\n </div>\n\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\n binary=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track key(data)) {\n <li class=\"p-select-option flex flex-row gap-2 items-center\"\n [ngClass]=\"{ 'p-select-option-selected': isSelected(data) }\">\n <p-checkbox\n binary=\"true\"\n [ngModel]=\"isSelected(data)\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n</div>","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [AngularModule, PrimeModule, EditModeElementChangerDirective],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly onScrollBound = this.onScroll.bind(this);\n private scrollTargetEl: HTMLElement | null = null;\n\n // View references\n readonly scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\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\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 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 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 },\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","<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport {\n IAuthStateProvider,\n ICompanyApiProvider,\n IProfilePermissionProvider,\n IProfileUploadProvider,\n IUserListItem,\n IUserListProvider,\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 =\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 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 { 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 abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\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 // 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>({ 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 // 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 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","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [AngularModule, PrimeModule, LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"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 extends BaseUserSelectComponent {\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 {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [AngularModule, PrimeModule, LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"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 extends BaseUserSelectComponent {\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 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 {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n} from '../../interfaces/file-select.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\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@Component({\n selector: 'lib-file-uploader',\n imports: [AngularModule, PrimeModule],\n template: `\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 <!-- Upload Area - Responsive padding -->\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-spin pi-spinner text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">Uploading {{ uploadingFileName() }}...</p>\n @if (uploadProgress() > 0) {\n <p-progressBar [value]=\"uploadProgress()\" [showValue]=\"true\" class=\"w-full mt-2 max-w-xs\" />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-cloud-upload text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{ multiple() ? 'Drop files here or click to upload' : 'Drop file here or click to upload' }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n Allowed: {{ acceptTypesDisplay() }}\n } @else {\n All file types allowed\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">(Max {{ maxSizeMb() }}MB)</span>\n }\n </p>\n </div>\n }\n </div>\n\n <!-- Hidden File Input -->\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 <!-- Selected Files Preview - Responsive layout -->\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n <div class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\">\n <i [class]=\"getFileIcon(file)\" class=\"text-lg sm:text-xl flex-shrink-0\"></i>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{ file.name }}</span>\n <span class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\">{{ formatSize(file.size) }}</span>\n <p-button\n icon=\"pi pi-times\"\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (onClick)=\"removeFile(file)\"\n />\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--p-surface-300);\n background: var(--p-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-700);\n }\n\n :host-context(.p-dark) .upload-zone.drag-over,\n .dark .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--p-surface-200);\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-preview-item,\n .dark .file-preview-item {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n `],\n 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 // Error toast handled by global interceptor\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 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 {\n formatFileSize,\n getAcceptString,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n LoadFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\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 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 [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n styleClass=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n <!-- Search Bar -->\n <div class=\"flex flex-col sm:flex-row 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 self-center whitespace-nowrap\">\n {{ selectedFiles().length }} selected\n </span>\n }\n </div>\n\n <!-- File Grid - Responsive columns -->\n <div\n class=\"file-grid\"\n #scrollContainer\n (scroll)=\"onScroll($event)\"\n >\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <i class=\"pi pi-spin pi-spinner text-4xl text-color-secondary\"></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2 block\"></i>\n <p>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=\"w-full h-full object-cover\" />\n } @else {\n <i [class]=\"getFileIcon(file)\" class=\"text-4xl sm:text-5xl text-color-secondary\"></i>\n }\n @if (isSelected(file)) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check text-xl sm:text-2xl\"></i>\n </div>\n }\n </div>\n\n <!-- File Info -->\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\" [title]=\"file.name\">\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{ formatSize(file.size) }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <i class=\"pi pi-spin pi-spinner text-color-secondary\"></i>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <ng-template #footer>\n <div class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\">\n <button\n pButton\n label=\"Cancel\"\n class=\"p-button-text w-full sm:w-auto\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n [label]=\"multiple() ? 'Select (' + selectedFiles().length + ')' : 'Select'\"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (click)=\"onConfirm()\"\n ></button>\n </div>\n </ng-template>\n </p-dialog>\n `,\n styles: [`\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--p-surface-300);\n border-radius: var(--p-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-card,\n .dark .file-card {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--p-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--p-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n :host-context(.p-dark) .file-card.selected,\n .dark .file-card.selected {\n background: var(--p-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--p-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.p-dark) .file-preview,\n .dark .file-preview {\n background: var(--p-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--p-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--p-primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.p-dark) .selected-overlay i,\n .dark .selected-overlay i {\n background: var(--p-surface-900);\n }\n `],\n 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 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) => 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/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","import {\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n signal,\n Signal,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base class for form page components that handle create/edit operations.\n * Provides common functionality for loading existing items, form submission,\n * navigation, and toast notifications.\n *\n * ## Features\n * - Automatic route parameter handling (loads item when ID is present)\n * - Edit mode detection based on existing item\n * - Unified submit handler for create/update operations\n * - Cancel navigation\n * - Toast messages for success/validation errors\n *\n * ## Usage\n *\n * ```typescript\n * interface IProductFormModel {\n * name: string;\n * price: number;\n * }\n *\n * @Component({\n * selector: 'app-product-form',\n * standalone: true,\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * template: `...`\n * })\n * export class ProductFormComponent extends BaseFormPage<IProduct, IProductFormModel> {\n * private readonly productService = inject(ProductApiService);\n *\n * // Form model signal (private writable, public readonly)\n * private readonly _formModel = signal<IProductFormModel>({ name: '', price: 0 });\n * readonly formModel = this._formModel.asReadonly();\n *\n * // Required abstract implementations\n * getFormModel(): Signal<IProductFormModel> {\n * return this.formModel;\n * }\n *\n * getResourceRoute(): string {\n * return '/products';\n * }\n *\n * getResourceName(): string {\n * return 'Product';\n * }\n *\n * isFormValid(): boolean {\n * const model = this.formModel();\n * return model.name.trim().length > 0 && model.price > 0;\n * }\n *\n * loadItem(id: string): void {\n * this.isLoading.set(true);\n * this.productService.findById(id)\n * .pipe(takeUntilDestroyed(this.destroyRef))\n * .subscribe({\n * next: (response) => {\n * if (response.success && response.data) {\n * this.existingItem.set(response.data);\n * this._formModel.set({\n * name: response.data.name,\n * price: response.data.price,\n * });\n * }\n * this.isLoading.set(false);\n * },\n * error: () => {\n * this.router.navigate([this.getResourceRoute()]);\n * this.isLoading.set(false);\n * },\n * });\n * }\n *\n * createItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.insert(model);\n * }\n *\n * updateItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.update({ id: this.existingItem()!.id, ...model });\n * }\n * }\n * ```\n *\n * @template T The entity/interface type being edited\n * @template TFormModel The form model interface\n */\n@Directive()\nexport abstract class BaseFormPage<T, TFormModel> {\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly messageService = inject(MessageService);\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly routeParams = toSignal(this.route.paramMap);\n protected initialized = false;\n\n /** Loading state for async operations */\n readonly isLoading = signal(false);\n\n /** The existing item when in edit mode, null when creating */\n readonly existingItem = signal<T | null>(null);\n\n /** Whether the form is in edit mode (has existing item) */\n readonly isEditMode = computed(() => !!this.existingItem());\n\n /**\n * Get the form model signal.\n * Returns a readonly Signal - implementations should expose their\n * WritableSignal as readonly through this method.\n */\n abstract getFormModel(): Signal<TFormModel>;\n\n /**\n * Get the base route for the resource (used for navigation after save/cancel).\n * @example '/products' or '/administration/users'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the display name of the resource for toast messages.\n * @example 'Product' or 'User'\n */\n abstract getResourceName(): string;\n\n /**\n * Validate the current form model.\n * Return true if the form is valid and can be submitted.\n */\n abstract isFormValid(): boolean;\n\n /**\n * Load an existing item by ID.\n * Should set existingItem and populate formModel on success.\n * Should handle loading state and navigation on error.\n */\n abstract loadItem(id: string): void;\n\n /**\n * Create a new item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract createItem(model: TFormModel): Observable<unknown>;\n\n /**\n * Update an existing item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract updateItem(model: TFormModel): Observable<unknown>;\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadItem(id);\n }\n });\n }\n\n /**\n * Handle form submission.\n * Validates the form, then calls createItem or updateItem based on mode.\n * Shows appropriate toast messages and navigates back on success.\n */\n onSubmit(): void {\n if (!this.isFormValid()) {\n this.showValidationError();\n return;\n }\n\n this.isLoading.set(true);\n const model = this.getFormModel()();\n\n const operation$ = this.isEditMode()\n ? this.updateItem(model)\n : this.createItem(model);\n\n operation$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: () => {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.showSuccess(`${this.getResourceName()} ${action} successfully.`);\n this.router.navigate([this.getResourceRoute()]);\n },\n error: () => {\n this.isLoading.set(false);\n },\n complete: () => {\n this.isLoading.set(false);\n },\n });\n }\n\n /**\n * Handle cancel action.\n * Navigates back to the resource list.\n */\n onCancel(): void {\n this.router.navigate([this.getResourceRoute()]);\n }\n\n /**\n * Show validation error toast.\n * Override to customize the validation error message.\n */\n protected showValidationError(): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Validation Error',\n detail: 'Please fill in all required fields.',\n });\n }\n\n /**\n * Show success toast.\n * @param detail The success message to display\n */\n protected showSuccess(detail: string): void {\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail,\n });\n }\n\n /**\n * Show error toast.\n * @param detail The error message to display\n */\n protected showError(detail: string): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Error',\n detail,\n });\n }\n}\n","import { computed, DestroyRef, Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG } from '@flusys/ng-core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base List Page\n * Abstract directive providing common signals, computed values, and utilities\n * for list page components across all feature packages.\n *\n * Features:\n * - Pagination state management (pageSize, currentPage, total)\n * - Loading state\n * - CRUD navigation helpers\n * - Message display utilities\n * - Delete confirmation with API integration\n * - Company feature flag support\n *\n * Usage:\n * ```typescript\n * @Component({ ... })\n * export class UserListComponent extends BaseListPage<IUser> {\n * getResourceRoute(): string { return '/users'; }\n * getDeleteConfirmMessage(user: IUser): string { return `Delete \"${user.name}\"?`; }\n * async loadData(): Promise<void> { ... }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseListPage<T> {\n protected readonly router = inject(Router);\n protected readonly messageService = inject(MessageService);\n protected readonly appConfig = inject(APP_CONFIG);\n protected readonly confirmationService = inject(ConfirmationService);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Items list */\n readonly items = signal<T[]>([]);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Total records for pagination */\n readonly total = signal(0);\n\n /** Page size */\n readonly pageSize = signal(10);\n\n /** First record index (for p-table lazy load) */\n readonly first = signal(0);\n\n /** Current page (0-based for API, derived from first/pageSize) */\n readonly currentPage = computed(() => Math.floor(this.first() / this.pageSize()));\n\n /** Show company info if company feature enabled */\n readonly showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature);\n\n /**\n * Abstract method to load data - must be implemented by subclass\n */\n abstract loadData(): Promise<void>;\n\n /**\n * Get the base route for this resource\n * Used for navigation to create/edit pages\n * @example '/administration/users' or '/storage/folders'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the confirmation message for deleting an item\n * @param item The item to delete\n * @returns Confirmation message string\n */\n abstract getDeleteConfirmMessage(item: T): string;\n\n /**\n * Navigate to create page\n */\n onCreate(): void {\n this.router.navigate([this.getResourceRoute(), 'new']);\n }\n\n /**\n * Navigate to edit page\n * @param id The ID of the item to edit\n */\n onEdit(id: string): void {\n this.router.navigate([this.getResourceRoute(), id]);\n }\n\n /**\n * Handle page change from p-table lazy load\n */\n onPageChange(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadData();\n }\n\n /**\n * Get pagination params for API call\n * Returns 0-based page for backend API\n */\n protected getPaginationParams(): { currentPage: number; pageSize: number } {\n return {\n currentPage: this.currentPage(),\n pageSize: this.pageSize(),\n };\n }\n\n /**\n * Show success toast message\n */\n protected showSuccess(detail: string, summary = 'Success'): void {\n this.messageService.add({ severity: 'success', summary, detail });\n }\n\n /**\n * Show error toast message\n */\n protected showError(detail: string, summary = 'Error'): void {\n this.messageService.add({ severity: 'error', summary, detail });\n }\n\n /**\n * Show info toast message\n */\n protected showInfo(detail: string, summary = 'Info'): void {\n this.messageService.add({ severity: 'info', summary, detail });\n }\n\n /**\n * Show warning toast message\n */\n protected showWarn(detail: string, summary = 'Warning'): void {\n this.messageService.add({ severity: 'warn', summary, detail });\n }\n\n /**\n * Delete an item with confirmation dialog\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Function that returns Observable for delete API call\n * @param options Optional configuration\n */\n onDelete(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Observable<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): void {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: () => {\n deleteApiCall(idGetter(item))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n this.loadData();\n },\n error: () => {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n },\n });\n },\n });\n }\n\n /**\n * Delete an item with confirmation dialog using async/await\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Async function for delete API call\n * @param options Optional configuration\n */\n async onDeleteAsync(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Promise<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): Promise<void> {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n await deleteApiCall(idGetter(item));\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n await this.loadData();\n } catch {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n }\n },\n });\n }\n\n /**\n * Navigate to a route\n */\n protected navigateTo(path: string[]): void {\n this.router.navigate(path);\n }\n}\n","// Constants\nexport * from './constants/permissions';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/response-payload.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/providers.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';\nexport * from './classes/base-form-control.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/base-user-select.class';\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":["i1.IsEmptyImageDirective","i4","i1","DEFAULT_PAGE_SIZE","map","i2","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"flusys-ng-shared.mjs","sources":["../../../projects/ng-shared/constants/permissions.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/utils/permission-evaluator.util.ts","../../../projects/ng-shared/services/permission-validator.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/modules/angular.module.ts","../../../projects/ng-shared/modules/prime.module.ts","../../../projects/ng-shared/classes/api-resource.class.ts","../../../projects/ng-shared/classes/base-form-control.class.ts","../../../projects/ng-shared/components/icon/icon.component.ts","../../../projects/ng-shared/utils/scroll-pagination.util.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/base-user-select.class.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/utils/base-form-page.ts","../../../projects/ng-shared/utils/base-list-page.ts","../../../projects/ng-shared/public-api.ts","../../../projects/ng-shared/flusys-ng-shared.ts"],"sourcesContent":["export 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\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\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 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\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 EVENT_PERMISSIONS = {\n CREATE: 'event.create',\n READ: 'event.read',\n UPDATE: 'event.update',\n DELETE: 'event.delete',\n} as const;\n\nexport const EVENT_PARTICIPANT_PERMISSIONS = {\n CREATE: 'event-participant.create',\n READ: 'event-participant.read',\n UPDATE: 'event-participant.update',\n DELETE: 'event-participant.delete',\n} as const;\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\nexport const PERMISSIONS = {\n USER: USER_PERMISSIONS,\n COMPANY: COMPANY_PERMISSIONS,\n BRANCH: BRANCH_PERMISSIONS,\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 FILE: FILE_PERMISSIONS,\n FOLDER: FOLDER_PERMISSIONS,\n STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,\n EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,\n EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,\n FORM: FORM_PERMISSIONS,\n EVENT: EVENT_PERMISSIONS,\n EVENT_PARTICIPANT: EVENT_PARTICIPANT_PERMISSIONS,\n NOTIFICATION: NOTIFICATION_PERMISSIONS,\n} as const;\n\nexport type PermissionCode =\n (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];\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}\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({ 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, Signal, 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\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 /** Get file URL by ID from cache (synchronous) */\n getFileUrl(fileId: string | null | undefined): string | null {\n if (!fileId) return null;\n return this._cache().get(fileId)?.url ?? null;\n }\n\n /** Get file URL as computed signal */\n fileUrlSignal(fileId: string | null | undefined): Signal<string | null> {\n return computed(() => this.getFileUrl(fileId));\n }\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<ISingleResponse<FilesResponseDto[]>>(\n `${getServiceUrl(this.appConfig, 'storage')}/file-manager/get-files`,\n requestDto,\n )\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 /** Clear entire cache */\n clearCache(): void {\n this._cache.set(new Map());\n }\n\n /** Remove specific file from cache */\n removeFromCache(fileId: string): void {\n this._cache.update((cache) => {\n const next = new Map(cache);\n next.delete(fileId);\n return next;\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 { hasPermission } 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 /** @deprecated Use `isLoaded()` signal instead */\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})\nexport class EditModeElementChangerDirective {\n private readonly el = inject(ElementRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n\n readonly isEditMode = input.required<boolean>();\n\n constructor() {\n effect(() => {\n const editMode = this.isEditMode();\n this.updateElement(editMode);\n this.updateControl(editMode);\n });\n }\n\n private updateControl(editMode: boolean): void {\n if (!editMode) this.ngControl?.control?.disable();\n else this.ngControl?.control?.enable();\n }\n\n private updateElement(editMode: boolean): void {\n const inputElement: HTMLElement = this.el.nativeElement;\n\n if (inputElement instanceof HTMLInputElement) {\n if (!editMode) {\n inputElement.setAttribute('readonly', 'true');\n inputElement.classList.add('edit-mode-element-css');\n } else {\n inputElement.removeAttribute('readonly');\n inputElement.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-SELECT') {\n const dropdown = inputElement.querySelector<HTMLElement>('.p-select-dropdown');\n const label = inputElement.querySelector<HTMLElement>('.p-select-label');\n if (!editMode) {\n inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'none';\n label?.classList.add('edit-mode-element-css');\n } else {\n inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');\n if (dropdown) dropdown.style.display = 'flex';\n label?.classList.remove('edit-mode-element-css');\n }\n }\n\n if (inputElement.tagName === 'P-CALENDAR') {\n const firstChild = inputElement.firstElementChild;\n if (!editMode) {\n firstChild?.children[0]?.classList.add('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.add('hidden');\n } else {\n firstChild?.children[0]?.classList.remove('edit-mode-element-css', 'cursor-auto');\n firstChild?.children[1]?.classList.remove('hidden');\n }\n }\n }\n}\n","import {\n Directive,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ILogicNode } from '../interfaces/common-data.interface';\nimport { PermissionValidatorService } from '../services/permission-validator.service';\nimport { evaluatePermission } from '../utils/permission-evaluator.util';\n\n/**\n * HasPermission Directive\n *\n * Structural directive for permission-based rendering.\n * Shows/hides elements based on permission logic evaluation.\n *\n * Supports:\n * - Simple permission check (string)\n * - Complex permission logic (ILogicNode with AND/OR operators)\n *\n * Usage:\n * ```html\n * <!-- Simple permission check -->\n * <button *hasPermission=\"'user.create'\">Create User</button>\n *\n * <!-- Complex permission logic -->\n * <button *hasPermission=\"userManageLogic\">Manage Users</button>\n *\n * <!-- Where userManageLogic is: -->\n * <!-- (user.view OR user.create) AND department.manage -->\n * ```\n *\n * The directive automatically reacts to permission changes through signals.\n *\n * @example\n * // In component\n * readonly userManageLogic: ILogicNode = {\n * 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})\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 { CommonModule, DatePipe, NgComponentOutlet, NgOptimizedImage } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\nimport { IsEmptyImageDirective, PreventDefaultDirective } from '../directives/public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n providers: [DatePipe],\n exports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterOutlet,\n RouterLink,\n RouterLinkActive,\n IsEmptyImageDirective,\n NgOptimizedImage,\n NgComponentOutlet,\n PreventDefaultDirective,\n ],\n})\nexport class AngularModule {}\n","import { NgModule } from '@angular/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { ImageModule } from 'primeng/image';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { PasswordModule } from 'primeng/password';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { StepsModule } from 'primeng/steps';\nimport { TableModule } from 'primeng/table';\nimport { TabsModule } from 'primeng/tabs';\nimport { TagModule } from 'primeng/tag';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToastModule } from 'primeng/toast';\nimport { ToggleButtonModule } from 'primeng/togglebutton';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TreeTableModule } from 'primeng/treetable';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { ColorPickerModule } from 'primeng/colorpicker';\n@NgModule({\n exports: [\n AutoCompleteModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n CheckboxModule,\n ConfirmDialogModule,\n DatePickerModule,\n DialogModule,\n DividerModule,\n FileUploadModule,\n IconFieldModule,\n ImageModule,\n InputIconModule,\n InputNumberModule,\n InputTextModule,\n ListboxModule,\n MultiSelectModule,\n PaginatorModule,\n PanelModule,\n PasswordModule,\n PopoverModule,\n ProgressBarModule,\n RadioButtonModule,\n RippleModule,\n SelectButtonModule,\n SelectModule,\n SkeletonModule,\n SplitButtonModule,\n StepsModule,\n TableModule,\n TabsModule,\n TagModule,\n TextareaModule,\n ToastModule,\n ToggleButtonModule,\n ToggleSwitchModule,\n TooltipModule,\n TreeTableModule,\n ProgressSpinnerModule,\n ColorPickerModule,\n ],\n})\nexport class PrimeModule {}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injector, resource, ResourceRef, runInInjectionContext, signal } from '@angular/core';\nimport { APP_CONFIG, getServiceUrl, IAppConfig } from '@flusys/ng-core';\nimport { firstValueFrom, Observable } from 'rxjs';\n\nexport type ServiceName = 'auth' | 'administration' | 'iam' | 'storage' | 'formBuilder' | 'email' | 'eventManager' | 'notification';\n\nimport {\n IBulkResponse,\n IDeleteData,\n IFilterData,\n IListResponse,\n IMessageResponse,\n IPagination,\n ISingleResponse,\n} from '../interfaces/public-api';\n\n/**\n * Service interface for CRUD operations.\n * Matches NestJS shared API controller endpoints (all POST, RPC-style).\n */\nexport interface IApiService<DtoT, InterfaceT> {\n insert(dto: DtoT): Observable<ISingleResponse<InterfaceT>>;\n insertMany(dtos: DtoT[]): Observable<IBulkResponse<InterfaceT>>;\n findById(id: string, select?: string[]): Observable<ISingleResponse<InterfaceT>>;\n getAll(search: string, filter: IFilterData): 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 * Abstract base class for API services using Angular 21 resource() API.\n * Provides signal-based reactive data fetching with automatic loading states.\n *\n * @example\n * ```typescript\n * @Injectable({ providedIn: 'root' })\n * export class UserService extends ApiResourceService<UserDto, User> {\n * constructor() {\n * super('auth/users', inject(HttpClient));\n * }\n * }\n * ```\n */\nexport abstract class ApiResourceService<DtoT, InterfaceT> implements IApiService<DtoT, InterfaceT> {\n protected readonly baseUrl: string;\n protected readonly injector = inject(Injector);\n protected readonly http: HttpClient;\n protected readonly moduleApiName: string;\n\n readonly searchTerm = signal('');\n readonly filterData = signal<IFilterData>({\n pagination: { currentPage: 0, pageSize: 10 },\n filter: {},\n select: [],\n sort: {},\n });\n\n private _listResource: ResourceRef<IListResponse<InterfaceT> | undefined> | null = null;\n private _resourceInitialized = false;\n private readonly _resourceInitSignal = signal(false);\n\n get listResource(): ResourceRef<IListResponse<InterfaceT> | undefined> {\n if (!this._listResource) {\n this.initListResource();\n }\n return this._listResource!;\n }\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 }) => this.getAllAsync(params.filter, params.search),\n });\n });\n this._resourceInitSignal.set(true);\n }\n\n readonly isLoading = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.isLoading() ?? false;\n });\n\n readonly data = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.data ?? [];\n });\n\n readonly total = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.meta?.total ?? 0;\n });\n\n readonly pageInfo = computed(() => {\n this._resourceInitSignal();\n return this._listResource?.value()?.meta;\n });\n\n readonly hasMore = computed(() => {\n this._resourceInitSignal();\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, serviceName?: ServiceName) {\n this.moduleApiName = moduleApiName || serviceName || 'api';\n const config = inject<IAppConfig>(APP_CONFIG);\n const serviceBaseUrl = serviceName ? getServiceUrl(config, serviceName) : config.apiBaseUrl;\n this.baseUrl = moduleApiName ? `${serviceBaseUrl}/${moduleApiName}` : serviceBaseUrl;\n this.http = http;\n }\n\n protected getHttpOptions(endpoint: string, params?: HttpParams) {\n return {\n headers: new HttpHeaders({ 'x-loader-tag': `${this.moduleApiName}/${endpoint}` }),\n ...(params ? { params } : {}),\n };\n }\n\n // ==========================================================================\n // List Management\n // ==========================================================================\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 setPagination(pagination: IPagination): void {\n this.initListResource();\n this.filterData.update((prev) => ({ ...prev, pagination }));\n }\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 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 reload(): void {\n this._listResource?.reload();\n }\n\n // ==========================================================================\n // Observable API (IApiService interface)\n // ==========================================================================\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 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 findById(id: string, select?: string[]): 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 getAll(search: string, filter: IFilterData): 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 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 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 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 // Async API\n // ==========================================================================\n\n async getAllAsync(filter: IFilterData, search: string = ''): Promise<IListResponse<InterfaceT>> {\n return firstValueFrom(this.getAll(search, filter));\n }\n\n async findByIdAsync(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.findById(id, select));\n }\n\n async insertAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.insert(dto));\n }\n\n async insertManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.insertMany(dtos));\n }\n\n async updateAsync(dto: DtoT): Promise<ISingleResponse<InterfaceT>> {\n return firstValueFrom(this.update(dto));\n }\n\n async updateManyAsync(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>> {\n return firstValueFrom(this.updateMany(dtos));\n }\n\n async deleteAsync(deleteDto: IDeleteData): Promise<IMessageResponse> {\n return firstValueFrom(this.delete(deleteDto));\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/**\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 { ChangeDetectionStrategy, 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 changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (icon()) {\n @if (iconType() === IconTypeEnum.PRIMENG_ICON) {\n <i [class]=\"icon()\"></i>\n } @else if (iconType() === IconTypeEnum.IMAGE_FILE_LINK) {\n <img [alt]=\"icon()\" [src]=\"icon()\" />\n } @else {\n <i class=\"pi pi-question\"></i>\n }\n }\n `,\n})\nexport class IconComponent {\n icon = input.required<string>();\n iconType = input<IconTypeEnum | undefined>(IconTypeEnum.PRIMENG_ICON);\n protected readonly IconTypeEnum = IconTypeEnum; // Needed for template reference\n}\n","import { 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 { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n EmbeddedViewRef,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CheckboxChangeEvent } from 'primeng/checkbox';\nimport {\n BaseFormControl,\n provideValueAccessor,\n} from '../../classes/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading multi-select component with search, pagination, and select-all.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedIds\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-multi-select',\n imports: [PrimeModule, AngularModule],\n templateUrl: './lazy-multi-select.component.html',\n styleUrl: './lazy-multi-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [provideValueAccessor(LazyMultiSelectComponent)],\n})\nexport class LazyMultiSelectComponent\n extends BaseFormControl<string[] | null>\n implements OnDestroy\n{\n private readonly document = inject(DOCUMENT);\n private readonly appRef = inject(ApplicationRef);\n private readonly 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>('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\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 `${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 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","<div\n class=\"p-select w-full\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.p-disabled]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ placeHolder() }}</span>\n }\n\n @if (isEditMode()) {\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n </div>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track data.value) {\n <li\n class=\"p-select-option flex flex-row gap-2 items-center\"\n [class.p-select-option-selected]=\"isSelected(data)\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelected(data)\"\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 ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { BaseFormControl, provideValueAccessor } from '../../classes/public-api';\nimport { EditModeElementChangerDirective } from '../../directives/public-api';\nimport { IDropDown, IPagination } from '../../interfaces/public-api';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\n\n/**\n * Lazy-loading single select component with search and pagination.\n *\n * Supports ALL Angular form patterns:\n * - Template-driven: `[(value)]=\"selectedId\"`\n * - Reactive forms: `[formControl]=\"ctrl\"` or `formControlName=\"field\"`\n * - Signal forms: `[formField]=\"formTree.field\"`\n */\n@Component({\n selector: 'lib-lazy-select',\n imports: [AngularModule, PrimeModule, EditModeElementChangerDirective],\n templateUrl: './lazy-select.component.html',\n styleUrl: './lazy-select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideValueAccessor(LazySelectComponent)],\n})\nexport class LazySelectComponent extends BaseFormControl<string | null> {\n private readonly destroyRef = inject(DestroyRef);\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 = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\n\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\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>('.p-select-list-container');\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","<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport {\n IAuthStateProvider,\n ICompanyApiProvider,\n IProfilePermissionProvider,\n IProfileUploadProvider,\n IUserListItem,\n IUserListProvider,\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 =\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 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 { 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 abortController: AbortController | null = null;\n\n // Inputs\n readonly loadUsers = input<LoadUsersFn>();\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 // 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>({ 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 // 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 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","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazySelectComponent } from '../lazy-select/lazy-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from './base-user-select.class';\n\n/**\n * User Select Component - Single user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-select)\n * - Infinite scroll pagination\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-select\n * [(value)]=\"selectedUserId\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-select',\n imports: [AngularModule, PrimeModule, LazySelectComponent],\n template: `\n <lib-lazy-select\n [(value)]=\"value\"\n [placeHolder]=\"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 extends BaseUserSelectComponent {\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 {\n ChangeDetectionStrategy,\n Component,\n effect,\n model,\n output,\n untracked,\n} from '@angular/core';\nimport { AngularModule } from '../../modules/angular.module';\nimport { PrimeModule } from '../../modules/prime.module';\nimport { LazyMultiSelectComponent } from '../lazy-multi-select/lazy-multi-select.component';\nimport { IUserBasicInfo } from '../../interfaces/providers.interface';\nimport { BaseUserSelectComponent } from '../user-select/base-user-select.class';\n\n/**\n * User Multi-Select Component - Multiple user selection with lazy loading.\n *\n * Uses USER_PROVIDER internally by default, or accepts custom `loadUsers` function.\n *\n * Features:\n * - Search with debouncing (handled by lazy-multi-select)\n * - Infinite scroll pagination\n * - Select all / deselect all\n * - Filter active users by default (configurable)\n * - Supports additional filters via `additionalFilters` input\n *\n * @example\n * ```html\n * <!-- Simple usage - uses USER_PROVIDER internally -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * />\n *\n * <!-- With custom loadUsers function -->\n * <lib-user-multi-select\n * [(value)]=\"selectedUserIds\"\n * [isEditMode]=\"true\"\n * [loadUsers]=\"customLoadUsers\"\n * />\n * ```\n */\n@Component({\n selector: 'lib-user-multi-select',\n imports: [AngularModule, PrimeModule, LazyMultiSelectComponent],\n template: `\n <lib-lazy-multi-select\n [(value)]=\"value\"\n [placeHolder]=\"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 extends BaseUserSelectComponent {\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 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 {\n FILE_TYPE_FILTERS,\n getAcceptString,\n getFileIconClass,\n IFileUploadOptions,\n isFileTypeAllowed,\n IUploadedFile,\n UploadFileFn,\n} from '../../interfaces/file-select.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\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@Component({\n selector: 'lib-file-uploader',\n imports: [AngularModule, PrimeModule],\n template: `\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 <!-- Upload Area - Responsive padding -->\n <div\n class=\"upload-zone border-2 border-dashed rounded-lg p-4 sm:p-6 md:p-8 cursor-pointer transition-all duration-200 text-center\"\n [class.drag-over]=\"isDragOver()\"\n [class.cursor-not-allowed]=\"disabled()\"\n (click)=\"fileInput.click()\"\n >\n @if (isUploading()) {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-spin pi-spinner text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 text-sm sm:text-base break-all px-2\">Uploading {{ uploadingFileName() }}...</p>\n @if (uploadProgress() > 0) {\n <p-progressBar [value]=\"uploadProgress()\" [showValue]=\"true\" class=\"w-full mt-2 max-w-xs\" />\n }\n </div>\n } @else {\n <div class=\"flex flex-col items-center\">\n <i class=\"pi pi-cloud-upload text-3xl sm:text-4xl text-primary\"></i>\n <p class=\"mt-2 mb-1 font-semibold text-sm sm:text-base\">\n {{ multiple() ? 'Drop files here or click to upload' : 'Drop file here or click to upload' }}\n </p>\n <p class=\"text-xs sm:text-sm text-color-secondary px-2\">\n @if (acceptTypesDisplay()) {\n Allowed: {{ acceptTypesDisplay() }}\n } @else {\n All file types allowed\n }\n @if (maxSizeMb()) {\n <span class=\"whitespace-nowrap\">(Max {{ maxSizeMb() }}MB)</span>\n }\n </p>\n </div>\n }\n </div>\n\n <!-- Hidden File Input -->\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 <!-- Selected Files Preview - Responsive layout -->\n @if (selectedFiles().length > 0 && showPreview()) {\n <div class=\"mt-3 space-y-2\">\n @for (file of selectedFiles(); track file.name) {\n <div class=\"file-preview-item flex items-center gap-2 p-2 sm:p-3 rounded-lg\">\n <i [class]=\"getFileIcon(file)\" class=\"text-lg sm:text-xl flex-shrink-0\"></i>\n <span class=\"flex-1 truncate text-sm sm:text-base min-w-0\">{{ file.name }}</span>\n <span class=\"text-xs sm:text-sm text-color-secondary whitespace-nowrap\">{{ formatSize(file.size) }}</span>\n <p-button\n icon=\"pi pi-times\"\n [text]=\"true\"\n [rounded]=\"true\"\n size=\"small\"\n severity=\"secondary\"\n [disabled]=\"isUploading()\"\n (onClick)=\"removeFile(file)\"\n />\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n /* Upload zone - light mode */\n .upload-zone {\n border-color: var(--p-surface-300);\n background: var(--p-surface-50);\n }\n\n .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-100);\n }\n\n .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n /* Upload zone - dark mode */\n :host-context(.p-dark) .upload-zone,\n .dark .upload-zone {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n :host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),\n .dark .upload-zone:hover:not(.cursor-not-allowed) {\n border-color: var(--p-primary-color);\n background: var(--p-surface-700);\n }\n\n :host-context(.p-dark) .upload-zone.drag-over,\n .dark .upload-zone.drag-over {\n border-color: var(--p-primary-color);\n background: var(--p-primary-900);\n }\n\n /* File preview item */\n .file-preview-item {\n border: 1px solid var(--p-surface-200);\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-preview-item,\n .dark .file-preview-item {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n `],\n 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 // Error toast handled by global interceptor\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 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 {\n formatFileSize,\n getAcceptString,\n getFileIconClass,\n IFileBasicInfo,\n IFileSelectFilter,\n LoadFilesFn,\n} from '../../interfaces/file-select.interface';\nimport { IPagination } from '../../interfaces/filter-data.interface';\nimport { AngularModule, PrimeModule } from '../../modules/public-api';\nimport { checkScrollPagination } from '../../utils/scroll-pagination.util';\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 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 [breakpoints]=\"{ '960px': '90vw', '640px': '95vw' }\"\n [style]=\"{ width: '800px', maxWidth: '95vw', maxHeight: '90vh' }\"\n styleClass=\"file-selector-dialog\"\n (onHide)=\"onDialogHide()\"\n >\n <!-- Search Bar -->\n <div class=\"flex flex-col sm:flex-row 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 self-center whitespace-nowrap\">\n {{ selectedFiles().length }} selected\n </span>\n }\n </div>\n\n <!-- File Grid - Responsive columns -->\n <div\n class=\"file-grid\"\n #scrollContainer\n (scroll)=\"onScroll($event)\"\n >\n @if (isLoading() && files().length === 0) {\n <div class=\"col-span-full flex justify-center p-4\">\n <i class=\"pi pi-spin pi-spinner text-4xl text-color-secondary\"></i>\n </div>\n } @else if (files().length === 0) {\n <div class=\"col-span-full text-center p-4 text-color-secondary\">\n <i class=\"pi pi-inbox text-4xl mb-2 block\"></i>\n <p>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=\"w-full h-full object-cover\" />\n } @else {\n <i [class]=\"getFileIcon(file)\" class=\"text-4xl sm:text-5xl text-color-secondary\"></i>\n }\n @if (isSelected(file)) {\n <div class=\"selected-overlay\">\n <i class=\"pi pi-check text-xl sm:text-2xl\"></i>\n </div>\n }\n </div>\n\n <!-- File Info -->\n <div class=\"p-2 text-center bg-surface-0 dark:bg-surface-900\">\n <span class=\"block text-xs sm:text-sm whitespace-nowrap overflow-hidden text-ellipsis\" [title]=\"file.name\">\n {{ file.name }}\n </span>\n <span class=\"block text-xs text-color-secondary\">{{ formatSize(file.size) }}</span>\n </div>\n </div>\n }\n\n @if (isLoading()) {\n <div class=\"col-span-full flex justify-center p-2\">\n <i class=\"pi pi-spin pi-spinner text-color-secondary\"></i>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <ng-template #footer>\n <div class=\"flex flex-col-reverse sm:flex-row gap-2 w-full sm:w-auto sm:justify-end\">\n <button\n pButton\n label=\"Cancel\"\n class=\"p-button-text w-full sm:w-auto\"\n (click)=\"onCancel()\"\n ></button>\n <button\n pButton\n [label]=\"multiple() ? 'Select (' + selectedFiles().length + ')' : 'Select'\"\n [disabled]=\"selectedFiles().length === 0\"\n class=\"w-full sm:w-auto\"\n (click)=\"onConfirm()\"\n ></button>\n </div>\n </ng-template>\n </p-dialog>\n `,\n styles: [`\n /* Responsive file grid */\n .file-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 0.75rem;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem;\n }\n\n @media (min-width: 480px) {\n .file-grid {\n grid-template-columns: repeat(3, 1fr);\n max-height: 350px;\n }\n }\n\n @media (min-width: 640px) {\n .file-grid {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 1rem;\n max-height: 400px;\n }\n }\n\n /* File card styles */\n .file-card {\n border: 2px solid var(--p-surface-300);\n border-radius: var(--p-border-radius);\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n background: var(--p-surface-0);\n }\n\n :host-context(.p-dark) .file-card,\n .dark .file-card {\n border-color: var(--p-surface-600);\n background: var(--p-surface-800);\n }\n\n .file-card:hover:not(.disabled) {\n border-color: var(--p-primary-color);\n transform: translateY(-2px);\n box-shadow: var(--p-overlay-shadow);\n }\n\n .file-card.selected {\n border-color: var(--p-primary-color);\n background: var(--p-primary-50);\n }\n\n :host-context(.p-dark) .file-card.selected,\n .dark .file-card.selected {\n background: var(--p-primary-900);\n }\n\n .file-card.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* File preview area */\n .file-preview {\n position: relative;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--p-surface-100);\n }\n\n @media (min-width: 640px) {\n .file-preview {\n height: 100px;\n }\n }\n\n :host-context(.p-dark) .file-preview,\n .dark .file-preview {\n background: var(--p-surface-700);\n }\n\n /* Selected overlay */\n .selected-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(var(--p-primary-500-rgb, 59, 130, 246), 0.3);\n }\n\n .selected-overlay i {\n color: var(--p-primary-color);\n background: var(--p-surface-0);\n border-radius: 50%;\n padding: 0.5rem;\n }\n\n :host-context(.p-dark) .selected-overlay i,\n .dark .selected-overlay i {\n background: var(--p-surface-900);\n }\n `],\n 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 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) => 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/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","import {\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n signal,\n Signal,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base class for form page components that handle create/edit operations.\n * Provides common functionality for loading existing items, form submission,\n * navigation, and toast notifications.\n *\n * ## Features\n * - Automatic route parameter handling (loads item when ID is present)\n * - Edit mode detection based on existing item\n * - Unified submit handler for create/update operations\n * - Cancel navigation\n * - Toast messages for success/validation errors\n *\n * ## Usage\n *\n * ```typescript\n * interface IProductFormModel {\n * name: string;\n * price: number;\n * }\n *\n * @Component({\n * selector: 'app-product-form',\n * standalone: true,\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * template: `...`\n * })\n * export class ProductFormComponent extends BaseFormPage<IProduct, IProductFormModel> {\n * private readonly productService = inject(ProductApiService);\n *\n * // Form model signal (private writable, public readonly)\n * private readonly _formModel = signal<IProductFormModel>({ name: '', price: 0 });\n * readonly formModel = this._formModel.asReadonly();\n *\n * // Required abstract implementations\n * getFormModel(): Signal<IProductFormModel> {\n * return this.formModel;\n * }\n *\n * getResourceRoute(): string {\n * return '/products';\n * }\n *\n * getResourceName(): string {\n * return 'Product';\n * }\n *\n * isFormValid(): boolean {\n * const model = this.formModel();\n * return model.name.trim().length > 0 && model.price > 0;\n * }\n *\n * loadItem(id: string): void {\n * this.isLoading.set(true);\n * this.productService.findById(id)\n * .pipe(takeUntilDestroyed(this.destroyRef))\n * .subscribe({\n * next: (response) => {\n * if (response.success && response.data) {\n * this.existingItem.set(response.data);\n * this._formModel.set({\n * name: response.data.name,\n * price: response.data.price,\n * });\n * }\n * this.isLoading.set(false);\n * },\n * error: () => {\n * this.router.navigate([this.getResourceRoute()]);\n * this.isLoading.set(false);\n * },\n * });\n * }\n *\n * createItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.insert(model);\n * }\n *\n * updateItem(model: IProductFormModel): Observable<ISingleResponse<IProduct>> {\n * return this.productService.update({ id: this.existingItem()!.id, ...model });\n * }\n * }\n * ```\n *\n * @template T The entity/interface type being edited\n * @template TFormModel The form model interface\n */\n@Directive()\nexport abstract class BaseFormPage<T, TFormModel> {\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly messageService = inject(MessageService);\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly routeParams = toSignal(this.route.paramMap);\n protected initialized = false;\n\n /** Loading state for async operations */\n readonly isLoading = signal(false);\n\n /** The existing item when in edit mode, null when creating */\n readonly existingItem = signal<T | null>(null);\n\n /** Whether the form is in edit mode (has existing item) */\n readonly isEditMode = computed(() => !!this.existingItem());\n\n /**\n * Get the form model signal.\n * Returns a readonly Signal - implementations should expose their\n * WritableSignal as readonly through this method.\n */\n abstract getFormModel(): Signal<TFormModel>;\n\n /**\n * Get the base route for the resource (used for navigation after save/cancel).\n * @example '/products' or '/administration/users'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the display name of the resource for toast messages.\n * @example 'Product' or 'User'\n */\n abstract getResourceName(): string;\n\n /**\n * Validate the current form model.\n * Return true if the form is valid and can be submitted.\n */\n abstract isFormValid(): boolean;\n\n /**\n * Load an existing item by ID.\n * Should set existingItem and populate formModel on success.\n * Should handle loading state and navigation on error.\n */\n abstract loadItem(id: string): void;\n\n /**\n * Create a new item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract createItem(model: TFormModel): Observable<unknown>;\n\n /**\n * Update an existing item with the given form model.\n * Return an Observable that emits the API response.\n */\n abstract updateItem(model: TFormModel): Observable<unknown>;\n\n constructor() {\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const id = params.get('id');\n if (id && id !== 'new') {\n this.loadItem(id);\n }\n });\n }\n\n /**\n * Handle form submission.\n * Validates the form, then calls createItem or updateItem based on mode.\n * Shows appropriate toast messages and navigates back on success.\n */\n onSubmit(): void {\n if (!this.isFormValid()) {\n this.showValidationError();\n return;\n }\n\n this.isLoading.set(true);\n const model = this.getFormModel()();\n\n const operation$ = this.isEditMode()\n ? this.updateItem(model)\n : this.createItem(model);\n\n operation$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: () => {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.showSuccess(`${this.getResourceName()} ${action} successfully.`);\n this.router.navigate([this.getResourceRoute()]);\n },\n error: () => {\n this.isLoading.set(false);\n },\n complete: () => {\n this.isLoading.set(false);\n },\n });\n }\n\n /**\n * Handle cancel action.\n * Navigates back to the resource list.\n */\n onCancel(): void {\n this.router.navigate([this.getResourceRoute()]);\n }\n\n /**\n * Show validation error toast.\n * Override to customize the validation error message.\n */\n protected showValidationError(): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Validation Error',\n detail: 'Please fill in all required fields.',\n });\n }\n\n /**\n * Show success toast.\n * @param detail The success message to display\n */\n protected showSuccess(detail: string): void {\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail,\n });\n }\n\n /**\n * Show error toast.\n * @param detail The error message to display\n */\n protected showError(detail: string): void {\n this.messageService.add({\n severity: 'error',\n summary: 'Error',\n detail,\n });\n }\n}\n","import { computed, DestroyRef, Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG } from '@flusys/ng-core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { Observable } from 'rxjs';\n\n/**\n * Base List Page\n * Abstract directive providing common signals, computed values, and utilities\n * for list page components across all feature packages.\n *\n * Features:\n * - Pagination state management (pageSize, currentPage, total)\n * - Loading state\n * - CRUD navigation helpers\n * - Message display utilities\n * - Delete confirmation with API integration\n * - Company feature flag support\n *\n * Usage:\n * ```typescript\n * @Component({ ... })\n * export class UserListComponent extends BaseListPage<IUser> {\n * getResourceRoute(): string { return '/users'; }\n * getDeleteConfirmMessage(user: IUser): string { return `Delete \"${user.name}\"?`; }\n * async loadData(): Promise<void> { ... }\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseListPage<T> {\n protected readonly router = inject(Router);\n protected readonly messageService = inject(MessageService);\n protected readonly appConfig = inject(APP_CONFIG);\n protected readonly confirmationService = inject(ConfirmationService);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Items list */\n readonly items = signal<T[]>([]);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Total records for pagination */\n readonly total = signal(0);\n\n /** Page size */\n readonly pageSize = signal(10);\n\n /** First record index (for p-table lazy load) */\n readonly first = signal(0);\n\n /** Current page (0-based for API, derived from first/pageSize) */\n readonly currentPage = computed(() => Math.floor(this.first() / this.pageSize()));\n\n /** Show company info if company feature enabled */\n readonly showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature);\n\n /**\n * Abstract method to load data - must be implemented by subclass\n */\n abstract loadData(): Promise<void>;\n\n /**\n * Get the base route for this resource\n * Used for navigation to create/edit pages\n * @example '/administration/users' or '/storage/folders'\n */\n abstract getResourceRoute(): string;\n\n /**\n * Get the confirmation message for deleting an item\n * @param item The item to delete\n * @returns Confirmation message string\n */\n abstract getDeleteConfirmMessage(item: T): string;\n\n /**\n * Navigate to create page\n */\n onCreate(): void {\n this.router.navigate([this.getResourceRoute(), 'new']);\n }\n\n /**\n * Navigate to edit page\n * @param id The ID of the item to edit\n */\n onEdit(id: string): void {\n this.router.navigate([this.getResourceRoute(), id]);\n }\n\n /**\n * Handle page change from p-table lazy load\n */\n onPageChange(event: { first?: number | null; rows?: number | null }): void {\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? 10);\n this.loadData();\n }\n\n /**\n * Get pagination params for API call\n * Returns 0-based page for backend API\n */\n protected getPaginationParams(): { currentPage: number; pageSize: number } {\n return {\n currentPage: this.currentPage(),\n pageSize: this.pageSize(),\n };\n }\n\n /**\n * Show success toast message\n */\n protected showSuccess(detail: string, summary = 'Success'): void {\n this.messageService.add({ severity: 'success', summary, detail });\n }\n\n /**\n * Show error toast message\n */\n protected showError(detail: string, summary = 'Error'): void {\n this.messageService.add({ severity: 'error', summary, detail });\n }\n\n /**\n * Show info toast message\n */\n protected showInfo(detail: string, summary = 'Info'): void {\n this.messageService.add({ severity: 'info', summary, detail });\n }\n\n /**\n * Show warning toast message\n */\n protected showWarn(detail: string, summary = 'Warning'): void {\n this.messageService.add({ severity: 'warn', summary, detail });\n }\n\n /**\n * Delete an item with confirmation dialog\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Function that returns Observable for delete API call\n * @param options Optional configuration\n */\n onDelete(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Observable<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): void {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: () => {\n deleteApiCall(idGetter(item))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n this.loadData();\n },\n error: () => {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n },\n });\n },\n });\n }\n\n /**\n * Delete an item with confirmation dialog using async/await\n * @param item The item to delete\n * @param idGetter Function to extract ID from item\n * @param deleteApiCall Async function for delete API call\n * @param options Optional configuration\n */\n async onDeleteAsync(\n item: T,\n idGetter: (item: T) => string,\n deleteApiCall: (id: string) => Promise<unknown>,\n options?: {\n header?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n ): Promise<void> {\n this.confirmationService.confirm({\n message: this.getDeleteConfirmMessage(item),\n header: options?.header ?? 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n await deleteApiCall(idGetter(item));\n this.showSuccess(options?.successMessage ?? 'Item deleted successfully.');\n await this.loadData();\n } catch {\n this.showError(options?.errorMessage ?? 'Failed to delete item.');\n }\n },\n });\n }\n\n /**\n * Navigate to a route\n */\n protected navigateTo(path: string[]): void {\n this.router.navigate(path);\n }\n}\n","// Constants\nexport * from './constants/permissions';\n\n// Interfaces (consolidated)\nexport * from './interfaces/common-data.interface';\nexport * from './interfaces/filter-data.interface';\nexport * from './interfaces/response-payload.interface';\nexport * from './interfaces/file-select.interface';\nexport * from './interfaces/providers.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';\nexport * from './classes/base-form-control.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/base-user-select.class';\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":["i1.IsEmptyImageDirective","DOCUMENT","i3","i1","DEFAULT_PAGE_SIZE","map","i2","i5"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,mBAAmB,GAAG;AACjC,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE,gBAAgB;;AAGnB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;;AAGvB,MAAM,qBAAqB,GAAG;AACnC,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,MAAM,EAAE,kBAAkB;;AAGrB,MAAM,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;;AAGvB,MAAM,0BAA0B,GAAG;AACxC,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,kBAAkB,GAAG;AAChC,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,MAAM,EAAE,eAAe;;AAGlB,MAAM,0BAA0B,GAAG;AACxC,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,wBAAwB,GAAG;AACtC,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,MAAM,EAAE,qBAAqB;;AAGxB,MAAM,0BAA0B,GAAG;AACxC,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,uBAAuB;AAC/B,IAAA,MAAM,EAAE,uBAAuB;;AAG1B,MAAM,gBAAgB,GAAG;AAC9B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;;AAGhB,MAAM,iBAAiB,GAAG;AAC/B,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,cAAc;;AAGjB,MAAM,6BAA6B,GAAG;AAC3C,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,IAAI,EAAE,wBAAwB;AAC9B,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,MAAM,EAAE,0BAA0B;;AAG7B,MAAM,wBAAwB,GAAG;AACtC,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,MAAM,EAAE,qBAAqB;;AAGxB,MAAM,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,cAAc,EAAE,0BAA0B;AAC1C,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,iBAAiB,EAAE,6BAA6B;AAChD,IAAA,YAAY,EAAE,wBAAwB;;;ACtExC;;AAEG;AACI,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC;AAC/E,IAAA,SAAS,EAAE;QACT,iBAAiB;QACjB,oBAAoB;QACpB,yEAAyE;QACzE,0BAA0B;QAC1B,mEAAmE;AACpE,KAAA;IACD,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC;IACnE,KAAK,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7D,IAAA,GAAG,EAAE,EAAc;;AAGrB;;AAEG;AACG,SAAU,eAAe,CAAC,YAAsB,EAAA;IACpD,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AACtC,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,IAAU,EAAE,YAAsB,EAAA;IAClE,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AACrC,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI;AAC3B,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,WAAmB,EAAA;AAClD,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,aAAa;AAC1D,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,aAAa;AAC1D,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,iBAAiB;AAC9D,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,gBAAgB;AACxD,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,QAAA,OAAO,iBAAiB;AAC9F,IAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,QAAA,OAAO,kBAAkB;AACnG,IAAA,OAAO,YAAY;AACrB;AAEA;;AAEG;AACG,SAAU,cAAc,CAAC,QAAyB,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzE,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC3C,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IACpB,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC3C,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IACpB,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC9B;;IC/HY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACX,CAAC,EAHW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;;ICAf;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB;AAChB,IAAA,YAAA,CAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB;AACnB,IAAA,YAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB;AACpB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;MCIX,eAAe,CAAA;AACT,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEjD,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;uGALW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,aAAa,CAAA;IAChB,GAAG,GAAG,MAAM,CAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AACrD,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE9D,GAAG,GAAA;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;IACrG;uGAPW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACQD;;;AAGG;MAEU,cAAc,CAAA;AACR,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAE9B,IAAA,MAAM,GAAG,MAAM,CAAgC,IAAI,GAAG,EAAE,kDAAC;AACjE,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;;AAGzC,IAAA,UAAU,CAAC,MAAiC,EAAA;AAC1C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI;IAC/C;;AAGA,IAAA,aAAa,CAAC,MAAiC,EAAA;AAC7C,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD;;AAGA,IAAA,aAAa,CACX,OAAiB,EACjB,YAAY,GAAG,KAAK,EAAA;QAEpB,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AAElC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,MAAM,UAAU,GAAG;AACjB,cAAE;AACF,cAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC;AAEA,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CACH,CAAA,EAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA,uBAAA,CAAyB,EACpE,UAAU;aAEX,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EACtC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EACtC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EACrC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CACzB;IACL;;AAGA,IAAA,kBAAkB,CAChB,MAAc,EACd,YAAY,GAAG,KAAK,EAAA;AAEpB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CACjC;IACH;;IAGA,UAAU,GAAA;QACR,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC5B;;AAGA,IAAA,eAAe,CAAC,MAAc,EAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,UAAU,CAAC,KAAyB,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YACzB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,YAAY,CAAC,OAAiB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,KAAK,SAAS,CAAC;IAC1D;uGAxFW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AChBlC;;;;;;AAMG;AACG,SAAU,aAAa,CAC3B,kBAA0B,EAC1B,eAAyB,EAAA;;AAGzB,IAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAAE,QAAA,OAAO,IAAI;;AAG7D,IAAA,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE;;QAExC,IAAI,UAAU,KAAK,GAAG;AAAE,YAAA,OAAO,IAAI;;AAGnC,QAAA,IACE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzB,YAAA,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACtD;AACA,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;AACM,SAAU,kBAAkB,CAChC,KAA6C,EAC7C,WAAqB,EAAA;AAErB,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;AACvE,IAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC9C;AAEA;AACM,SAAU,iBAAiB,CAC/B,IAAgB,EAChB,WAAqB,EAAA;AAErB,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK;AAE1E,QAAA,KAAK,OAAO;YACV,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AAE9D,YAAA,OAAO,IAAI,CAAC,QAAQ,KAAK;AACvB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;AACtE,kBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAE1E,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;AAEA;AACM,SAAU,gBAAgB,CAC9B,eAAyB,EACzB,WAAqB,EAAA;IAErB,IAAI,CAAC,eAAe,EAAE,MAAM;AAAE,QAAA,OAAO,KAAK;AAC1C,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzE;AAEA;AACM,SAAU,iBAAiB,CAC/B,eAAyB,EACzB,WAAqB,EAAA;IAErB,IAAI,CAAC,eAAe,EAAE,MAAM;AAAE,QAAA,OAAO,KAAK;AAC1C,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC1E;;AC7EA;;;AAGG;MAEU,0BAA0B,CAAA;AACpB,IAAA,YAAY,GAAG,MAAM,CAAW,EAAE,wDAAC;AAC3C,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAEpC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACjC,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;;AAG/C,IAAA,cAAc,CAAC,WAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,aAAa,CAAC,IAAY,EAAA;QACxB,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACjD;;IAGA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;uGA3BW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,+BAA+B,CAAA;AACzB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IACvB,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEzD,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AAE/C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,QAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;;AAC5C,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;IACxC;AAEQ,IAAA,aAAa,CAAC,QAAiB,EAAA;AACrC,QAAA,MAAM,YAAY,GAAgB,IAAI,CAAC,EAAE,CAAC,aAAa;AAEvD,QAAA,IAAI,YAAY,YAAY,gBAAgB,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;AAC7C,gBAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACrD;iBAAO;AACL,gBAAA,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC;AACxC,gBAAA,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;YACxD;QACF;AAEA,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE;YACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAc,oBAAoB,CAAC;YAC9E,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAc,iBAAiB,CAAC;YACxE,IAAI,CAAC,QAAQ,EAAE;gBACb,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;AACtE,gBAAA,IAAI,QAAQ;AAAE,oBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC7C,gBAAA,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/C;iBAAO;gBACL,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;AACzE,gBAAA,IAAI,QAAQ;AAAE,oBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC7C,gBAAA,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB;YACjD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC;AAC9E,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD;iBAAO;AACL,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,aAAa,CAAC;AACjF,gBAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrD;QACF;IACF;uGAxDW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACxC,iBAAA;;;ACOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;MAIU,sBAAsB,CAAA;;AAGhB,IAAA,WAAW,GAAG,MAAM,EAAC,WAAoB,EAAC;AAC1C,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;;AAIzE;;;;;AAKG;AACM,IAAA,aAAa,GAAG,KAAK,CAA6B,IAAI,yDAAC;AAEhE;;AAEG;IACK,WAAW,GAAG,KAAK;;AAI3B,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;;AAEV,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;;AAGtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;;AAGlC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;;AAIA;;AAEG;AACK,IAAA,UAAU,CAAC,KAAiC,EAAA;;QAElD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;;QAGA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,EAAE;YACnD,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,kBAAkB,CACtC,KAAK,EACL,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CACvC;AAED,QAAA,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;YAEtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AAAO,aAAA,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7C,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;IACF;uGA/EW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;;MCtDY,qBAAqB,CAAA;AACvB,IAAA,GAAG,GAAG,KAAK,CAAS,EAAE,+CAAC;AACf,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;IACxB,UAAU,GAAG,6CAA6C;AAElE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU;QACxB;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;QAC3B,OAAO,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU;AAC9C,IAAA,CAAC,oDAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;uGAfW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,KAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA;AACF,iBAAA;;;MCEY,uBAAuB,CAAA;AACzB,IAAA,SAAS,GAAG,KAAK,CAAgC,OAAO,qDAAC;AACzD,IAAA,UAAU,GAAG,KAAK,CAAqB,SAAS,sDAAC;IACjD,MAAM,GAAG,MAAM,EAAS;AAEjC,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AACzD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;AAEA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AACzD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;AAEQ,IAAA,YAAY,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;uGA9BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,iBAAiB;AAC7B,qBAAA;AACF,iBAAA;;;MCwBY,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAzBtB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,UAAU;YACV,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,iBAAiB;AACjB,YAAA,uBAAuB,aAIvB,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,UAAU;YACV,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,iBAAiB;YACjB,uBAAuB,CAAA,EAAA,CAAA;AAGd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,SAAA,EAdb,CAAC,QAAQ,CAAC,YAXnB,YAAY;YACZ,WAAW;AACX,YAAA,mBAAmB,EAWnB,YAAY;YACZ,WAAW;YACX,mBAAmB,CAAA,EAAA,CAAA;;2FAUV,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3BzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,iBAAiB;wBACjB,uBAAuB;AACxB,qBAAA;oBACD,SAAS,EAAE,CAAC,QAAQ,CAAC;AACrB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,UAAU;wBACV,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,iBAAiB;wBACjB,uBAAuB;AACxB,qBAAA;AACF,iBAAA;;;MCqDY,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YA1CpB,kBAAkB;YAClB,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,mBAAmB;YACnB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,WAAW;YACX,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,iBAAiB;YACjB,YAAY;YACZ,kBAAkB;YAClB,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,WAAW;YACX,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,WAAW;YACX,kBAAkB;YAClB,kBAAkB;YAClB,aAAa;YACb,eAAe;YACf,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,CAAA;AAGR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YA1CpB,kBAAkB;YAClB,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,mBAAmB;YACnB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,WAAW;YACX,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,iBAAiB;YACjB,YAAY;YACZ,kBAAkB;YAClB,YAAY;YACZ,cAAc;YACd,iBAAiB;YACjB,WAAW;YACX,WAAW;YACX,UAAU;YACV,SAAS;YACT,cAAc;YACd,WAAW;YACX,kBAAkB;YAClB,kBAAkB;YAClB,aAAa;YACb,eAAe;YACf,qBAAqB;YACrB,iBAAiB,CAAA,EAAA,CAAA;;2FAGR,WAAW,EAAA,UAAA,EAAA,CAAA;kBA5CvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,kBAAkB;wBAClB,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,cAAc;wBACd,mBAAmB;wBACnB,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,iBAAiB;wBACjB,YAAY;wBACZ,kBAAkB;wBAClB,YAAY;wBACZ,cAAc;wBACd,iBAAiB;wBACjB,WAAW;wBACX,WAAW;wBACX,UAAU;wBACV,SAAS;wBACT,cAAc;wBACd,WAAW;wBACX,kBAAkB;wBAClB,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,qBAAqB;wBACrB,iBAAiB;AAClB,qBAAA;AACF,iBAAA;;;ACrDD;;;;;;;;;;;;;AAaG;MACmB,kBAAkB,CAAA;AACnB,IAAA,OAAO;AACP,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,IAAI;AACJ,IAAA,aAAa;AAEvB,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;IACvB,UAAU,GAAG,MAAM,CAAc;QACxC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC5C,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEM,aAAa,GAA8D,IAAI;IAC/E,oBAAoB,GAAG,KAAK;AACnB,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,+DAAC;AAEpD,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,gBAAgB,EAAE;QACzB;QACA,OAAO,IAAI,CAAC,aAAc;IAC5B;IAEA,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,oBAAoB;YAAE;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,GAAA,EAAA,CAAA,EAC3B,MAAM,EAAE,OAAO;AACb,oBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,oBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;iBAC1B,CAAC;gBACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAA,CAC5E;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC;AAES,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACjC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,KAAK;AACjD,IAAA,CAAC,qDAAC;AAEO,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;QAC5B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE;AAChD,IAAA,CAAC,gDAAC;AAEO,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;QAC7B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AACtD,IAAA,CAAC,iDAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAChC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI;AAC1C,IAAA,CAAC,oDAAC;AAEO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QAC/B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,IAAI;AAC9C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;AACrE,IAAA,CAAC,mDAAC;AAEF,IAAA,WAAA,CAAY,aAAqB,EAAE,IAAgB,EAAE,WAAyB,EAAA;QAC5E,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,WAAW,IAAI,KAAK;AAC1D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAa,UAAU,CAAC;AAC7C,QAAA,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC,UAAU;AAC3F,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,GAAG,cAAc;AACpF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;IAEU,cAAc,CAAC,QAAgB,EAAE,MAAmB,EAAA;QAC5D,OAAO;AACL,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAAE,CAAC;AACjF,YAAA,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SAC9B;IACH;;;;AAMA,IAAA,SAAS,CAAC,MAAA,GAAiB,EAAE,EAAE,MAA6B,EAAA;QAC1D,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC5D;IACF;AAEA,IAAA,aAAa,CAAC,UAAuB,EAAA;QACnC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAChC,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE;gBACV,GAAG,IAAI,CAAC,UAAW;gBACnB,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC;AACrD,aAAA;AACF,SAAA,CAAC,CAAC;IACL;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAChC,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE;AAC1E,SAAA,CAAC,CAAC;IACL;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;IAC9B;;;;AAMA,IAAA,MAAM,CAAC,GAAS,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,GAAG,EACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,cAAc,EAC7B,IAAI,EACJ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CACnC;IACH;IAEA,QAAQ,CAAC,EAAU,EAAE,MAAiB,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAE,EAC3B,EAAE,MAAM,EAAE,EACV,IAAI,CAAC,cAAc,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,CAAE,CAAC,CACjC;IACH;IAEA,MAAM,CAAC,MAAc,EAAE,MAAmB,EAAA;AACxC,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;QACrC;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,QAAA,CAAU,EACzB,MAAM,EACN,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CACvC;IACH;AAEA,IAAA,MAAM,CAAC,GAAS,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,GAAG,EACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,cAAc,EAC7B,IAAI,EACJ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CACnC;IACH;AAEA,IAAA,MAAM,CAAC,SAAsB,EAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS,EACxB,SAAS,EACT,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B;IACH;;;;AAMA,IAAA,MAAM,WAAW,CAAC,MAAmB,EAAE,SAAiB,EAAE,EAAA;QACxD,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD;AAEA,IAAA,MAAM,aAAa,CAAC,EAAU,EAAE,MAAiB,EAAA;QAC/C,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD;IAEA,MAAM,WAAW,CAAC,GAAS,EAAA;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC;IAEA,MAAM,eAAe,CAAC,IAAY,EAAA;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C;IAEA,MAAM,WAAW,CAAC,GAAS,EAAA;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC;IAEA,MAAM,eAAe,CAAC,IAAY,EAAA;QAChC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C;IAEA,MAAM,WAAW,CAAC,SAAsB,EAAA;QACtC,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C;AACD;;ACzPD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAEmB,eAAe,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAU9C;;;AAGG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAEzC;;;AAGG;AACM,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AAEhC,IAAA,QAAQ,GAAuB,MAAK,EAAE,CAAC;AACvC,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAChC,cAAc,GAAG,KAAK;AAE9B;;;;;;AAMG;IACO,qBAAqB,GAAA;AAC7B,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBACxB,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC9C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;;;;AAQA,IAAA,UAAU,CAAC,KAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;;AAGA,IAAA,gBAAgB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;;;;;;;;;IAWU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;uGAtFoB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;;AA0FD;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAA6D,SAAY,EAAA;IAC3G,OAAO;AACL,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,QAAA,KAAK,EAAE;KACR;AACH;;MClIa,aAAa,CAAA;AACxB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAA2B,YAAY,CAAC,YAAY,oDAAC;AAClD,IAAA,YAAY,GAAG,YAAY,CAAC;uGAHpC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZd;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAZS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAcZ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAhBzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;AACF,iBAAA;;;ACHD;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,qBAAqB,CACnC,KAAY,EACZ,MAA8B,EAAA;AAE9B,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;AACvB,IAAA,IAAI,EAAE,EAAE,YAAY,WAAW,CAAC;AAAE,QAAA,OAAO,IAAI;AAE7C,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;AACxC,IAAA,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,SAAS;AAEhF,IAAA,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;AAEhD,IAAA,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM;AACpC,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,GAAG,CAAC;AAC3C,IAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,CAAC;AAE7D,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;IAEzB,OAAO,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE;AACjD;;ACxBA;;;;;;;AAOG;AAUG,MAAO,wBACX,SAAQ,eAAgC,CAAA;AAGvB,IAAA,QAAQ,GAAG,MAAM,CAACC,UAAQ,CAAC;AAC3B,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAC/B,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGlE,IAAA,UAAU,GACjB,SAAS,CAAC,QAAQ,CAA6B,SAAS,CAAC;AAClD,IAAA,eAAe,GACtB,SAAS,CAAC,QAAQ,CAAuB,YAAY,CAAC;;IAGhD,cAAc,GAAoC,IAAI;;AAGrD,IAAA,WAAW,GAAG,KAAK,CAAS,gBAAgB,uDAAC;AAC7C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAsB;AAC5C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAe;AAC1C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAoB;;AAG1C,IAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,iDAAC;;IAG7C,QAAQ,GAAG,MAAM,EAAU;IAC3B,YAAY,GAAG,MAAM,EAAe;;AAGpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;;AAG3B,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACzC,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAC1C,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAA,EAAG,cAAc,CAAC,MAAM,iBAAiB;QAClD;QACA,OAAO,IAAI,CAAC,cAAc;AACvB,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;aACpD,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;aACxB,IAAI,CAAC,IAAI,CAAC;AACf,IAAA,CAAC,gEAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;QACjE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACvE,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/D,IAAA,CAAC,uDAAC;AAEF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,eAAe,GAAyC,IAAI;AAChE,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AAErC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;YAGtC,IAAI,YAAY,KAAK,aAAa;gBAAE;YACpC,aAAa,GAAG,YAAY;;AAG5B,YAAA,IAAI,eAAe;gBAAE,YAAY,CAAC,eAAe,CAAC;;AAGlD,YAAA,eAAe,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC,EAAE,GAAG,CAAC;YAEP,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,eAAe;oBAAE,YAAY,CAAC,eAAe,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,eAAe,CAAC;YACd,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;YACpE,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC;IACF;IAEA,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AAE3C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACzD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAgB;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;;QAGzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,qBAAqB,EAAE;QACrE,IAAI,IAAI,EAAE;AACR,YAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG;;eAEjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACd,cAAA,EAAA,IAAI,CAAC,IAAI,CAAA;AACR,eAAA,EAAA,IAAI,CAAC,KAAK,CAAA;AACN,mBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;AACV,mBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;;OAExB;QACH;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;AAC3C,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEQ,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzE,QAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAErD,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,EAAE;YACzC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK;IACpD;IAEA,WAAW,CAAC,KAA0B,EAAE,MAAiB,EAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD;QACF;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE;IACF;AAEA,IAAA,eAAe,CAAC,KAA0B,EAAA;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB;IACF;AAEA,IAAA,KAAK,CAAC,KAAY,EAAA;QAChB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpB;uGArMW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAFxB,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5C7D,g+FAgFA,EAAA,MAAA,EAAA,CAAA,8wCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzCY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAOzB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,WAAW,EAAE,aAAa,CAAC,mBAGpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,aAC1B,CAAC,oBAAoB,0BAA0B,CAAC,EAAA,QAAA,EAAA,g+FAAA,EAAA,MAAA,EAAA,CAAA,8wCAAA,CAAA,EAAA;AAYV,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,yEAEf,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtCzD;;;;;;;AAOG;AASG,MAAO,mBAAoB,SAAQ,eAA8B,CAAA;AACpD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACjD,cAAc,GAAuB,IAAI;IACzC,WAAW,GAAG,KAAK;;AAGlB,IAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAA6B,iBAAiB,CAAC;;AAGnF,IAAA,WAAW,GAAG,KAAK,CAAS,eAAe,uDAAC;AAC5C,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AACtC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AACtC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAsB;AAC5C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAe;AAC1C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAoB;;AAG1C,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;IAG3C,QAAQ,GAAG,MAAM,EAAU;IAC3B,YAAY,GAAG,MAAM,EAAe;;AAGpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAEpC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,eAAe,GAAyC,IAAI;AAChE,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AAErC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;YAGtC,IAAI,YAAY,KAAK,aAAa;gBAAE;YACpC,aAAa,GAAG,YAAY;;AAG5B,YAAA,IAAI,eAAe;gBAAE,YAAY,CAAC,eAAe,CAAC;;AAGlD,YAAA,eAAe,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC,EAAE,GAAG,CAAC;YAEP,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,eAAe;oBAAE,YAAY,CAAC,eAAe,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;YACvE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC;IACF;IAEA,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QAEvC,IAAI,YAAY,EAAE;YAChB,eAAe,CACb,MAAK;gBACH,IAAI,IAAI,CAAC,WAAW;oBAAE;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;gBACxD,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAc,0BAA0B,CAAC;gBACjF,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACrD,oBAAA,IAAI,CAAC,cAAc,GAAG,MAAM;gBAC9B;YACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;QACH;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACrE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE;IACtB;uGAxGW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAFnB,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCxD,q8BAiCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,ksCAAE,+BAA+B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAM1D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,WAClB,CAAC,aAAa,EAAE,WAAW,EAAE,+BAA+B,CAAC,EAAA,eAAA,EAGrD,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,oBAAoB,qBAAqB,CAAC,EAAA,QAAA,EAAA,q8BAAA,EAAA;uGASoB,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/B7F;;;;;;;;;;;;;;;;;;;;AAoBG;AAEH;;;;AAIG;MACU,aAAa,GAAG,IAAI,cAAc,CAC7C,eAAe,EACf;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF;IACH,CAAC;AACF,CAAA;AAGH;;;;AAIG;MACU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB,EACtB;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF;IACH,CAAC;AACF,CAAA;AAGH;;;;AAIG;MACU,wBAAwB,GACnC,IAAI,cAAc,CAA0B,0BAA0B,EAAE;AACtE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F;IACH,CAAC;AACF,CAAA;AAEH;;;;AAIG;MACU,mBAAmB,GAC9B,IAAI,cAAc,CAAqB,qBAAqB,EAAE;AAC5D,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF;IACH,CAAC;AACF,CAAA;AAEH;;;;;;AAMG;MACU,2BAA2B,GACtC,IAAI,cAAc,CAA6B,6BAA6B;AAE9E;;;;;;AAMG;MACU,uBAAuB,GAClC,IAAI,cAAc,CAAyB,yBAAyB;AAEtE;;;;;;;;;;;;AAYG;MACU,kBAAkB,GAC7B,IAAI,cAAc,CAAmC,oBAAoB;;AC5G3E,MAAMC,mBAAiB,GAAG,EAAE;AAE5B;;;;;;AAMG;MAEmB,uBAAuB,CAAA;AACxB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,YAAY,GAAG,MAAM,CAAgB,aAAa,CAAC;IAC5D,eAAe,GAA2B,IAAI;;IAG/C,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAe;AAChC,IAAA,WAAW,GAAG,KAAK,CAAS,aAAa,uDAAC;AAC1C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,YAAY,GAAG,KAAK,CAAU,IAAI,wDAAC;AACnC,IAAA,iBAAiB,GAAG,KAAK,CAA0B,EAAE,6DAAC;AACtD,IAAA,QAAQ,GAAG,KAAK,CAASA,mBAAiB,oDAAC;;IAG3C,OAAO,GAAG,MAAM,EAAS;;AAGzB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,iDAAC;AAC7C,IAAA,UAAU,GAAG,MAAM,CAAc,EAAE,QAAQ,EAAEA,mBAAiB,EAAE,WAAW,EAAE,CAAC,EAAE,sDAAC;AACjF,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,aAAa,GAAG,QAAQ,CAAc,MAC7C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC1B,QAAA,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;QAC9B,KAAK,EAAE,IAAI,CAAC,EAAE;KACf,CAAC,CAAC,yDACJ;AAED,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC/B,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAKA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,gBAAgB,CAAC,UAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEU,IAAA,MAAM,UAAU,CAAC,MAAM,GAAG,KAAK,EAAA;QACvC,IAAI,IAAI,CAAC,SAAS,EAAE;YAAE;;AAGtB,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAE5C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAsB;gBAChC,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;gBACzB,GAAG,IAAI,CAAC,iBAAiB,EAAE;aAC5B;;AAGD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC;AACE,kBAAE,eAAe,CAAC,MAAM;kBACtB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CACvC;YAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAK,CAAC,CAAC;gBACjE;qBAAO;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B;gBACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;YACnC;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;;AAGQ,IAAA,qBAAqB,CAAC,MAAyB,EAAA;QACrD,OAAO,IAAI,CAAC;AACT,aAAA,QAAQ,CAAC;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS;SACjD;aACA,IAAI,CACHC,KAAG,CAAC,CAAC,GAAG,MAAM;AACZ,YAAA,GAAG,GAAG;AACN,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;gBAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;AACf,aAAA,CAAC,CAAC;SACJ,CAAC,CAAC,CACJ;IACL;uGA1IoB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACnBD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AAqBG,MAAO,mBAAoB,SAAQ,uBAAuB,CAAA;;AAErD,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;IAGlC,YAAY,GAAG,MAAM,EAAyB;IAEpC,gBAAgB,GAAA;;QAEjC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,SAAS,CAAC,MAAK;gBACb,IAAI,UAAU,EAAE;AACd,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;oBACnD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;gBACtC;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGArBW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkB9C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,mBAAmB,CAAC;AAC1D,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;AC9CD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AAmBG,MAAO,wBAAyB,SAAQ,uBAAuB,CAAA;;AAE1D,IAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,iDAAC;;IAGpC,aAAa,GAAG,MAAM,EAAoB;IAEhC,gBAAgB,GAAA;;QAEjC,MAAM,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,SAAS,CAAC,MAAK;gBACb,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGAjBW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfzB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAbS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgBnD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,wBAAwB,CAAC;AAC/D,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACrCD;;;;AAIG;MAmIU,qBAAqB,CAAA;AACf,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;;AAG/C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAgB;;AAG3C,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,oDAAC;AAC5B,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,aAAa,GAAG,KAAK,CAAqB,EAAE,yDAAC;AAC7C,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,uDAAC;AAClC,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;;IAGjC,YAAY,GAAG,MAAM,EAAiB;IACtC,aAAa,GAAG,MAAM,EAAmB;IACzC,OAAO,GAAG,MAAM,EAAS;IACzB,YAAY,GAAG,MAAM,EAAU;;AAG/B,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,0DAAC;AAC1B,IAAA,iBAAiB,GAAG,MAAM,CAAC,EAAE,6DAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAAS,EAAE,yDAAC;;AAGlC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,wDAAC;AAClE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;;QAG5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACtC,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,QAAQ;QAC1E,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,WAAW;QAChF,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,QAAQ;QAC1E,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;QAExE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,IAAA,CAAC,8DAAC;AAEF,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B;IACF;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAE3C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;AACvC,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC;;AAEA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;;AAE/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,OAAO,EAAE,mBAAmB;AAC5B,oBAAA,MAAM,EAAE,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAA,CAAE;AAC9C,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;QAGF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,GAAG,IAAI;QAC9C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAG;AAC9C,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,OAAO,EAAE,gBAAgB;oBACzB,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,SAAS,EAAE,CAAA,QAAA,CAAU;AAC3D,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;cAC9B,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE;cACvC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACnE;IAEA,MAAM,WAAW,CAAC,KAAc,EAAA;QAC9B,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;QACnD,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAEjD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAE1B,MAAM,aAAa,GAAoB,EAAE;AAEzC,QAAA,IAAI;AACF,YAAA,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1B,gBAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAC9C;gBAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,oBAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACvC;qBAAO;oBACL,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,eAAe,CAAC;gBACtD;YACF;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAE1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,MAAM,EAAE,CAAA,EAAG,aAAa,CAAC,MAAM,CAAA,8BAAA,CAAgC;AAChE,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;QACnC;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B;IACF;AAEA,IAAA,WAAW,CAAC,IAAU,EAAA;AACpB,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI;QACvB,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC3C,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;QACpB,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;IAC9B;uGAtLW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/HtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4ET,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7ES,aAAa,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgIzB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlIjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,CAAC,aAAa,EAAE,WAAW,CAAC,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4ET,EAAA,eAAA,EAiDgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y7BAAA,CAAA,EAAA;;;ACjIjD,MAAM,iBAAiB,GAAG,EAAE;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;MA4NU,2BAA2B,CAAA;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACxC,eAAe,GAA2B,IAAI;IAC9C,mBAAmB,GAAyC,IAAI;;AAG/D,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAe;;AAGzC,IAAA,MAAM,GAAG,KAAK,CAAS,aAAa,kDAAC;AACrC,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,wDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAS,iBAAiB,oDAAC;;AAG3C,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;;IAG/B,YAAY,GAAG,MAAM,EAAkB;IACvC,aAAa,GAAG,MAAM,EAAoB;IAC1C,MAAM,GAAG,MAAM,EAAQ;IACvB,OAAO,GAAG,MAAM,EAAS;;AAGzB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAmB,EAAE,yDAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,iDAAC;AAC7C,IAAA,UAAU,GAAG,MAAM,CAAc,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,EAAE,sDAAC;AACjF,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,wDAAC;AAE3E,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gBAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,MAAK;oBACb,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;;AAE1B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,EAAE;QACnB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;QACF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB;IACF;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAEzD,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E;iBAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YACxD;QACF;aAAO;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,IAAoB,EAAA;QAC7B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IAC3D;AAEA,IAAA,aAAa,CAAC,IAAoB,EAAA;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAErC,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7D;AACA,YAAA,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG;IAC5D;AAEA,IAAA,WAAW,CAAC,IAAoB,EAAA;AAC9B,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAC3B;AAEQ,IAAA,MAAM,UAAU,CAAC,MAAM,GAAG,KAAK,EAAA;QACrC,IAAI,IAAI,CAAC,SAAS,EAAE;YAAE;AAEtB,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAE5C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAsB;gBAChC,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,gBAAA,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS;aACzE;AAED,YAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;YAE/D,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAK,CAAC,CAAC;gBACjE;qBAAO;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B;gBACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAc,CAAC;YACnC;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;uGApMW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxN5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2GT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6lDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5GS,aAAa,0sBAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyNzB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3NvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,WAC3B,CAAC,aAAa,EAAE,WAAW,CAAC,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2GT,EAAA,eAAA,EA2GgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6lDAAA,CAAA,EAAA;;;ACtRjD,SAAS,WAAW,CAClB,SAAiB,EACjB,UAAkB,EAClB,QAAoB,EACpB,gBAA8B,EAAA;AAE9B,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAE7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,EAAE;YAC9C,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,CAAA,wCAAA,CAA0C,CAAC;YACtE;YACA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3C;QAEA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE;YAChD,IAAI,SAAS,EAAE,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,KAAK,gBAAgB,EAAE,CAAA,CAAE,CAAC;YACrD;YACA,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3C;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAEA;;;;;;;;AAQG;SACa,eAAe,CAC7B,UAA+B,EAC/B,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,MAAM,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,eAAe;IAC1E,OAAO,WAAW,CAChB,iBAAiB,EACjB,UAAU,EACV,CAAC,KAAK,KAAK,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,EAChD,MAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CACzC;AACH;AAEA;;;;;;;AAOG;SACa,kBAAkB,CAChC,WAAqB,EACrB,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AACxB,QAAA,OAAO,MAAK;YACV,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;YACtE;YACA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,CAAC;IACH;AACA,IAAA,OAAO,WAAW,CAChB,oBAAoB,EACpB,UAAU,EACV,CAAC,KAAK,KAAK,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,EAC/C,MAAM,CAAA,gCAAA,EAAmC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAClE;AACH;AAEA;;;;;;;AAOG;SACa,mBAAmB,CACjC,WAAqB,EACrB,UAAU,GAAG,GAAG,EAAA;AAEhB,IAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AACxB,QAAA,OAAO,MAAK;YACV,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC;YACvE;YACA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,CAAC;IACH;AACA,IAAA,OAAO,WAAW,CAChB,qBAAqB,EACrB,UAAU,EACV,CAAC,KAAK,KAAK,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,EAChD,MAAM,CAAA,gCAAA,EAAmC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAClE;AACH;;ACtGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFG;MAEmB,YAAY,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAE/B,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpD,WAAW,GAAG,KAAK;;AAGpB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,wDAAC;;AAGrC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,sDAAC;AA8C3D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AAEnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAChC,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK;AACvB,cAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAE1B,QAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,IAAI,EAAE,MAAK;AACT,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,SAAS;AACxD,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA,cAAA,CAAgB,CAAC;AACrE,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;;AAGG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjD;AAEA;;;AAGG;IACO,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE,kBAAkB;AAC3B,YAAA,MAAM,EAAE,qCAAqC;AAC9C,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACO,IAAA,WAAW,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,OAAO,EAAE,SAAS;YAClB,MAAM;AACP,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACO,IAAA,SAAS,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE,OAAO;YAChB,MAAM;AACP,SAAA,CAAC;IACJ;uGAtJoB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC7FD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAEmB,YAAY,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGzC,IAAA,KAAK,GAAG,MAAM,CAAM,EAAE,iDAAC;;AAGvB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;;AAGrB,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,iDAAC;;IAGjB,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAqB9E;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;IACxD;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAsD,EAAA;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEA;;;AAGG;IACO,mBAAmB,GAAA;QAC3B,OAAO;AACL,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B;IACH;AAEA;;AAEG;AACO,IAAA,WAAW,CAAC,MAAc,EAAE,OAAO,GAAG,SAAS,EAAA;AACvD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACnE;AAEA;;AAEG;AACO,IAAA,SAAS,CAAC,MAAc,EAAE,OAAO,GAAG,OAAO,EAAA;AACnD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACjE;AAEA;;AAEG;AACO,IAAA,QAAQ,CAAC,MAAc,EAAE,OAAO,GAAG,MAAM,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAChE;AAEA;;AAEG;AACO,IAAA,QAAQ,CAAC,MAAc,EAAE,OAAO,GAAG,SAAS,EAAA;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAChE;AAEA;;;;;;AAMG;AACH,IAAA,QAAQ,CACN,IAAO,EACP,QAA6B,EAC7B,aAAkD,EAClD,OAIC,EAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAC3C,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,gBAAgB;AAC3C,YAAA,IAAI,EAAE,4BAA4B;AAClC,YAAA,sBAAsB,EAAE,iBAAiB;YACzC,MAAM,EAAE,MAAK;AACX,gBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzB,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;oBACT,IAAI,EAAE,MAAK;wBACT,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,4BAA4B,CAAC;wBACzE,IAAI,CAAC,QAAQ,EAAE;oBACjB,CAAC;oBACD,KAAK,EAAE,MAAK;wBACV,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,wBAAwB,CAAC;oBACnE,CAAC;AACF,iBAAA,CAAC;YACN,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;IACH,MAAM,aAAa,CACjB,IAAO,EACP,QAA6B,EAC7B,aAA+C,EAC/C,OAIC,EAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAC3C,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,gBAAgB;AAC3C,YAAA,IAAI,EAAE,4BAA4B;AAClC,YAAA,sBAAsB,EAAE,iBAAiB;YACzC,MAAM,EAAE,YAAW;AACjB,gBAAA,IAAI;AACF,oBAAA,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,4BAA4B,CAAC;AACzE,oBAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;gBACvB;AAAE,gBAAA,MAAM;oBACN,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,wBAAwB,CAAC;gBACnE;YACF,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,IAAc,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B;uGA3LoB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC9BD;;ACAA;;AAEG;;;;"}