@seniorsistemas/components-ai 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +45 -8
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-datetime.component.mjs +100 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-lookup.component.mjs +31 -9
- package/esm2022/lib/components/dynamic-form/models/dynamic-form.models.mjs +1 -1
- package/esm2022/lib/components/loading/loading.component.mjs +279 -0
- package/esm2022/lib/directives/table-loading/table-loading.directive.mjs +166 -0
- package/esm2022/lib/services/entity.service.mjs +52 -22
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/seniorsistemas-components-ai.mjs +652 -39
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/components/dynamic-form/fields/dynamic-field-datetime.component.d.ts +20 -0
- package/lib/components/dynamic-form/fields/dynamic-field-lookup.component.d.ts +4 -2
- package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +1 -1
- package/lib/components/loading/loading.component.d.ts +17 -0
- package/lib/directives/table-loading/table-loading.directive.d.ts +34 -0
- package/lib/services/entity.service.d.ts +12 -3
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-components-ai.mjs","sources":["../../projects/components-ai/src/lib/angular-components.module.ts","../../projects/components-ai/src/lib/services/entity.service.ts","../../projects/components-ai/src/lib/services/cookie.service.ts","../../projects/components-ai/src/lib/services/auth.service.ts","../../projects/components-ai/src/lib/services/permission.service.ts","../../projects/components-ai/src/lib/services/senior-token.service.ts","../../projects/components-ai/src/lib/services/theme.service.ts","../../projects/components-ai/src/lib/config/translation.config.ts","../../projects/components-ai/src/lib/services/translation.service.ts","../../projects/components-ai/src/lib/services/mask.service.ts","../../projects/components-ai/src/lib/services/locale.service.ts","../../projects/components-ai/src/lib/pipes/translate.pipe.ts","../../projects/components-ai/src/lib/components/export-dialog/export-dialog.component.ts","../../projects/components-ai/src/lib/components/export-dialog/export-dialog.component.html","../../projects/components-ai/src/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.ts","../../projects/components-ai/src/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.html","../../projects/components-ai/src/lib/components/breadcrumb/breadcrumb.component.ts","../../projects/components-ai/src/lib/components/base/entity-list-base.component.ts","../../projects/components-ai/src/lib/directives/postal-code-mask.directive.ts","../../projects/components-ai/src/lib/directives/phone-mask.directive.ts","../../projects/components-ai/src/lib/directives/document-mask.directive.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.ts","../../projects/components-ai/src/lib/utils/translation.helper.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-base.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-text.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-number.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-date.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-lookup.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-textarea.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/dynamic-form.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/dynamic-form.component.html","../../projects/components-ai/src/lib/config/primeng.config.ts","../../projects/components-ai/src/lib/interceptors/api.interceptor.ts","../../projects/components-ai/src/lib/directives/money-mask.directive.ts","../../projects/components-ai/src/lib/pipes/cpf.pipe.ts","../../projects/components-ai/src/lib/pipes/cnpj.pipe.ts","../../projects/components-ai/src/lib/pipes/document.pipe.ts","../../projects/components-ai/src/lib/pipes/phone.pipe.ts","../../projects/components-ai/src/lib/pipes/postal-code.pipe.ts","../../projects/components-ai/src/lib/pipes/money.pipe.ts","../../projects/components-ai/src/lib/pipes/date-format.pipe.ts","../../projects/components-ai/src/lib/utils/utils.ts","../../projects/components-ai/src/public-api.ts","../../projects/components-ai/src/seniorsistemas-components-ai.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Módulo principal da biblioteca @seniorsistemas/components-ai\n * \n * Este módulo será populado conforme os componentes forem migrados.\n * Por enquanto, é um módulo vazio para permitir o build inicial.\n */\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n exports: []\n})\nexport class AngularComponentsModule { }\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface SortMeta {\n field: string;\n order: number; // 1 for asc, -1 for desc\n}\n\nexport interface ListParams {\n page?: number;\n size?: number;\n sort?: SortMeta[];\n filterQuery?: string;\n displayFields?: string[];\n}\n\nexport interface BodyParams {\n offset?: number;\n size?: number;\n orderBy?: string;\n filter?: string;\n displayfields?: string;\n}\n\nexport interface EntityListResponse<T> {\n contents: T[];\n totalElements: number;\n totalPages: number;\n size?: number;\n number?: number;\n first?: boolean;\n last?: boolean;\n}\n\n// Interface para o serviço de tradução (duck typing)\nexport interface TranslationService {\n translate(key: string, params?: any): string;\n}\n\n@Injectable()\nexport abstract class EntityService<T> {\n protected abstract entityUrl: string;\n protected abstract actionsUrl: string;\n protected queriesUrl: string = '';\n\n constructor(\n protected http: HttpClient,\n protected translationService?: TranslationService\n ) {\n // Initialize queriesUrl in ngOnInit or a separate method\n // since abstract properties can't be accessed in constructor\n }\n\n /**\n * Initialize the service - call this after setting actionsUrl\n */\n protected initializeService(): void {\n this.queriesUrl = this.actionsUrl.replace('actions', 'queries');\n }\n\n /**\n * Convert ListParams to HttpParams for GET requests\n */\n protected getListQueryParams(listParams: ListParams): HttpParams {\n const { page = 0, size = 10, sort = [], filterQuery = '', displayFields = [] } = listParams;\n let params = new HttpParams();\n \n params = params.append('size', String(size));\n params = params.append('offset', String(page));\n \n if (sort && sort.length) {\n const orderBy = sort\n .map((s) => {\n let order = '';\n if (s.order === 1) order = ' asc';\n else if (s.order === -1) order = ' desc';\n return `${s.field}${order}`;\n })\n .join(', ');\n params = params.append('orderby', orderBy);\n }\n\n if (filterQuery) {\n params = params.append('filter', filterQuery);\n }\n\n if (displayFields && displayFields.length) {\n params = params.append('displayfields', displayFields.join(','));\n }\n\n return params;\n }\n\n /**\n * Convert ListParams to body parameters for POST requests\n */\n protected getBodyParams(listParams: ListParams): BodyParams {\n const { page = 0, size = 10, sort = [], filterQuery = '', displayFields = [] } = listParams;\n const bodyParams: BodyParams = {};\n\n bodyParams.size = size;\n bodyParams.offset = page;\n\n if (sort && sort.length) {\n bodyParams.orderBy = sort\n .map((s) => {\n let order = '';\n if (s.order === 1) order = ' asc';\n else if (s.order === -1) order = ' desc';\n return `${s.field}${order}`;\n })\n .join(', ');\n }\n\n if (filterQuery) {\n bodyParams.filter = filterQuery;\n }\n\n if (displayFields && displayFields.length) {\n bodyParams.displayfields = displayFields.join(',');\n }\n\n return bodyParams;\n }\n\n /**\n * Default error handler\n * Note: This just logs the error and re-throws the original HttpErrorResponse\n * so that the HTTP interceptor can handle it properly (show toast, etc.)\n */\n protected handleError = (error: any): Observable<never> => {\n console.error('EntityService Error:', error);\n // Re-throw the original error so the interceptor can handle it\n return throwError(() => error);\n };\n\n /**\n * List entities with pagination, sorting, and filtering\n */\n list(listParams: ListParams = {}): Observable<EntityListResponse<T>> {\n const params = this.getListQueryParams(listParams);\n return this.http.get<EntityListResponse<T>>(this.entityUrl, { params })\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Get entity by ID\n */\n get(id: any): Observable<T> {\n return this.http.get<T>(`${this.entityUrl}/${id}`)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Sanitiza uma entidade antes de enviar para a API.\n * Objetos aninhados com `id` são reduzidos a `{ id }` para evitar\n * problemas com referências circulares ($ref) e dados desnecessários.\n */\n protected sanitizeEntity(entity: any): any {\n if (!entity || typeof entity !== 'object') return entity;\n\n const sanitized: any = {};\n for (const key of Object.keys(entity)) {\n const value = entity[key];\n if (value === null || value === undefined) {\n sanitized[key] = value;\n } else if (Array.isArray(value)) {\n sanitized[key] = value.map((item: any) =>\n item && typeof item === 'object' && item.id ? { id: item.id } : item\n );\n } else if (typeof value === 'object' && value.id && key !== '_discriminator') {\n sanitized[key] = { id: value.id };\n } else {\n sanitized[key] = value;\n }\n }\n return sanitized;\n }\n\n /**\n * Create new entity\n */\n insert(entity: T): Observable<T> {\n return this.http.post<T>(this.entityUrl, this.sanitizeEntity(entity))\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Update existing entity\n */\n update(id: any, entity: T): Observable<T> {\n return this.http.put<T>(`${this.entityUrl}/${id}`, this.sanitizeEntity(entity))\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Delete entity by ID\n */\n delete(id: any): Observable<void> {\n return this.http.delete<void>(`${this.entityUrl}/${id}`, { observe: 'response' })\n .pipe(\n map(() => undefined),\n catchError(this.handleError)\n );\n }\n\n /**\n * Execute custom filter action\n */\n listCustomFilter(listParams: ListParams, action: string): Observable<EntityListResponse<T>> {\n const bodyParams = this.getBodyParams(listParams);\n return this.http.post<EntityListResponse<T>>(`${this.actionsUrl}/${action}`, bodyParams)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Execute custom query\n */\n executeQuery(queryName: string, params: any = {}): Observable<any> {\n return this.http.post<any>(`${this.queriesUrl}/${queryName}`, params)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Execute custom action\n */\n executeAction(actionName: string, params: any = {}): Observable<any> {\n return this.http.post<any>(`${this.actionsUrl}/${actionName}`, params)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Check if entity exists by ID\n */\n exists(id: any): Observable<boolean> {\n return this.http.head(`${this.entityUrl}/${id}`)\n .pipe(\n map(() => true),\n catchError((error) => {\n if (error.status === 404) {\n return [false];\n }\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Bulk delete entities\n */\n bulkDelete(ids: any[]): Observable<void> {\n return this.http.post<void>(`${this.actionsUrl}/bulkDelete`, { ids }, { observe: 'response' })\n .pipe(\n map(() => undefined),\n catchError(this.handleError)\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CookieService {\n\n /**\n * Obtém o valor de um cookie pelo nome\n */\n getCookie(name: string): string | null {\n if (typeof document === 'undefined') {\n return null; // SSR protection\n }\n\n const nameEQ = name + '=';\n const cookies = document.cookie.split(';');\n \n for (let cookie of cookies) {\n cookie = cookie.trim();\n if (cookie.indexOf(nameEQ) === 0) {\n const value = decodeURIComponent(cookie.substring(nameEQ.length));\n return value;\n }\n }\n \n return null;\n }\n\n /**\n * Define um cookie\n */\n setCookie(name: string, value: string, days?: number, path: string = '/'): void {\n if (typeof document === 'undefined') {\n return; // SSR protection\n }\n\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toUTCString();\n }\n \n document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`;\n }\n\n /**\n * Remove um cookie\n */\n deleteCookie(name: string, path: string = '/'): void {\n this.setCookie(name, '', -1, path);\n }\n\n /**\n * Verifica se um cookie existe\n */\n hasCookie(name: string): boolean {\n return this.getCookie(name) !== null;\n }\n\n /**\n * Obtém todos os cookies como objeto\n */\n getAllCookies(): { [key: string]: string } {\n if (typeof document === 'undefined') {\n return {}; // SSR protection\n }\n\n const cookies: { [key: string]: string } = {};\n const cookieArray = document.cookie.split(';');\n \n for (let cookie of cookieArray) {\n cookie = cookie.trim();\n const [name, value] = cookie.split('=');\n if (name && value) {\n cookies[name] = decodeURIComponent(value);\n }\n }\n \n return cookies;\n }\n\n /**\n * Debug: Lista todos os cookies disponíveis\n */\n debugAllCookies(): void {\n console.log('[CookieService] All available cookies:');\n const allCookies = this.getAllCookies();\n \n Object.keys(allCookies).forEach(name => {\n const value = allCookies[name];\n console.log(`[CookieService] ${name}: ${value.length > 100 ? value.substring(0, 100) + '...' : value}`);\n });\n \n if (Object.keys(allCookies).length === 0) {\n console.log('[CookieService] No cookies found');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CookieService } from './cookie.service';\n\nexport interface UserToken {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n token_type: string;\n refresh_expires_in: number;\n username: string;\n email: string;\n fullName: string;\n tenantName: string;\n locale: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n private readonly TOKEN_COOKIE_NAME = 'com.senior.token';\n private readonly API_URL_COOKIE_NAME = 'com.senior.base.url';\n private readonly API_PATH_SUFFIX = '/t/senior.com.br/bridge/1.0/rest';\n \n private currentUserSubject = new BehaviorSubject<UserToken | null>(null);\n public currentUser$ = this.currentUserSubject.asObservable();\n\n constructor(private cookieService: CookieService) {\n this.loadUserFromCookie();\n }\n\n /**\n * Load user token from cookie\n */\n private loadUserFromCookie(): void {\n const tokenString = this.cookieService.getCookie(this.TOKEN_COOKIE_NAME);\n \n if (tokenString) {\n try {\n const token = JSON.parse(tokenString) as UserToken;\n \n if (this.isTokenValid(token)) {\n this.currentUserSubject.next(token);\n } else {\n this.currentUserSubject.next(null);\n }\n } catch (error) {\n console.error('[AuthService] Error parsing token from cookie:', error);\n this.currentUserSubject.next(null);\n }\n }\n }\n\n /**\n * Get current user token\n */\n getCurrentUser(): UserToken | null {\n return this.currentUserSubject.value;\n }\n\n /**\n * Get access token\n */\n getAccessToken(): string | null {\n const user = this.getCurrentUser();\n return user?.access_token || null;\n }\n\n /**\n * Get token type (e.g., \"Bearer\")\n */\n getTokenType(): string {\n const user = this.getCurrentUser();\n return user?.token_type || 'Bearer';\n }\n\n /**\n * Get refresh token\n */\n getRefreshToken(): string | null {\n const user = this.getCurrentUser();\n return user?.refresh_token || null;\n }\n\n /**\n * Get API base URL from cookie\n */\n getApiBaseUrl(): string | null {\n const baseUrl = this.cookieService.getCookie(this.API_URL_COOKIE_NAME);\n \n // In development, use proxy\n if (!baseUrl) {\n // Check if we're in development mode\n const isDevelopment = !window.location.hostname.includes('senior.com.br');\n if (isDevelopment) {\n return '/api';\n }\n return null;\n }\n \n // Remove trailing slash from base URL\n const cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n \n // Combine with API path suffix\n return `${cleanBaseUrl}${this.API_PATH_SUFFIX}`;\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n const user = this.getCurrentUser();\n return user !== null && this.isTokenValid(user);\n }\n\n /**\n * Check if token is valid (not expired)\n */\n private isTokenValid(token: UserToken): boolean {\n if (!token || !token.access_token) {\n return false;\n }\n\n // Check if token is expired\n const now = Math.floor(Date.now() / 1000);\n const tokenExpiry = token.expires_in;\n \n // If expires_in is a timestamp, compare directly\n // If it's a duration, we'd need the token creation time\n // For now, assume it's a timestamp\n // If expires_in is very large (like a duration in seconds), skip expiry check\n if (tokenExpiry > 1000000000) {\n // Looks like a timestamp\n return tokenExpiry > now;\n } else {\n // Looks like a duration, assume token is valid\n return true;\n }\n }\n\n /**\n * Check if refresh token is valid\n */\n isRefreshTokenValid(): boolean {\n const user = this.getCurrentUser();\n if (!user || !user.refresh_token) {\n return false;\n }\n\n const now = Math.floor(Date.now() / 1000);\n const refreshExpiry = user.refresh_expires_in;\n \n return refreshExpiry > now;\n }\n\n /**\n * Get user locale\n */\n getUserLocale(): string {\n const user = this.getCurrentUser();\n return user?.locale || 'pt-BR';\n }\n\n /**\n * Get user full name\n */\n getUserFullName(): string {\n const user = this.getCurrentUser();\n return user?.fullName || '';\n }\n\n /**\n * Get user email\n */\n getUserEmail(): string {\n const user = this.getCurrentUser();\n return user?.email || '';\n }\n\n /**\n * Get tenant name\n */\n getTenantName(): string {\n const user = this.getCurrentUser();\n return user?.tenantName || '';\n }\n\n /**\n * Get username\n */\n getUsername(): string {\n const user = this.getCurrentUser();\n return user?.username || '';\n }\n}\n","import { Injectable, Optional, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nexport interface PermissionRequest {\n resource: string;\n action: string;\n context?: { [key: string]: any };\n}\n\nexport interface PermissionResponse {\n allowed: boolean;\n resource: string;\n action: string;\n reason?: string;\n}\n\nexport interface CheckAccessRequest {\n permissions: PermissionRequest[];\n}\n\nexport interface CheckAccessResponse {\n results: PermissionResponse[];\n}\n\n// Interface para AuthService (duck typing)\nexport interface AuthServiceInterface {\n isAuthenticated(): boolean;\n getAccessToken(): string | null;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n private readonly PERMISSION_ENDPOINT = 'platform/authorization/queries/checkAccess';\n private permissionCache = new Map<string, PermissionResponse>();\n private cacheExpiry = new Map<string, number>();\n private readonly CACHE_DURATION = 5 * 60 * 1000; // 5 minutes in milliseconds\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject('AuthService') private authService?: AuthServiceInterface\n ) {}\n\n /**\n * Check access for a single permission\n */\n checkAccess(resource: string, action: string, context?: { [key: string]: any }): Observable<boolean> {\n const cacheKey = this.getCacheKey(resource, action, context);\n \n // Check cache first\n const cachedResult = this.getCachedPermission(cacheKey);\n if (cachedResult !== null) {\n return of(cachedResult.allowed);\n }\n\n // Make API request\n const request: CheckAccessRequest = {\n permissions: [{ resource, action, context }]\n };\n\n return this.http.post<CheckAccessResponse>(this.PERMISSION_ENDPOINT, request).pipe(\n map(response => {\n if (response.results && response.results.length > 0) {\n const result = response.results[0];\n this.cachePermission(cacheKey, result);\n return result.allowed;\n }\n return false;\n }),\n catchError(error => {\n console.error('Permission check failed:', error);\n // On error, deny access by default\n return of(false);\n })\n );\n }\n\n /**\n * Check access for multiple permissions\n */\n checkMultipleAccess(permissions: PermissionRequest[]): Observable<PermissionResponse[]> {\n const uncachedPermissions: PermissionRequest[] = [];\n const results: PermissionResponse[] = [];\n\n // Check cache for each permission\n permissions.forEach(permission => {\n const cacheKey = this.getCacheKey(permission.resource, permission.action, permission.context);\n const cachedResult = this.getCachedPermission(cacheKey);\n \n if (cachedResult !== null) {\n results.push(cachedResult);\n } else {\n uncachedPermissions.push(permission);\n }\n });\n\n // If all permissions are cached, return immediately\n if (uncachedPermissions.length === 0) {\n return of(results);\n }\n\n // Make API request for uncached permissions\n const request: CheckAccessRequest = {\n permissions: uncachedPermissions\n };\n\n return this.http.post<CheckAccessResponse>(this.PERMISSION_ENDPOINT, request).pipe(\n map(response => {\n if (response.results) {\n // Cache the new results\n response.results.forEach(result => {\n const cacheKey = this.getCacheKey(result.resource, result.action);\n this.cachePermission(cacheKey, result);\n });\n \n // Combine cached and new results\n return [...results, ...response.results];\n }\n return results;\n }),\n catchError(error => {\n console.error('Multiple permission check failed:', error);\n // On error, return cached results and deny uncached ones\n const deniedResults = uncachedPermissions.map(permission => ({\n allowed: false,\n resource: permission.resource,\n action: permission.action,\n reason: 'Permission check failed'\n }));\n return of([...results, ...deniedResults]);\n })\n );\n }\n\n /**\n * Check if user can read a resource\n */\n canRead(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'read', context);\n }\n\n /**\n * Check if user can write to a resource\n */\n canWrite(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'write', context);\n }\n\n /**\n * Check if user can delete a resource\n */\n canDelete(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'delete', context);\n }\n\n /**\n * Check if user can execute an action on a resource\n */\n canExecute(resource: string, action: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, action, context);\n }\n\n /**\n * Clear permission cache\n */\n clearCache(): void {\n this.permissionCache.clear();\n this.cacheExpiry.clear();\n }\n\n /**\n * Clear expired cache entries\n */\n clearExpiredCache(): void {\n const now = Date.now();\n const expiredKeys: string[] = [];\n\n this.cacheExpiry.forEach((expiry, key) => {\n if (expiry < now) {\n expiredKeys.push(key);\n }\n });\n\n expiredKeys.forEach(key => {\n this.permissionCache.delete(key);\n this.cacheExpiry.delete(key);\n });\n }\n\n /**\n * Generate cache key for permission\n */\n private getCacheKey(resource: string, action: string, context?: { [key: string]: any }): string {\n const contextStr = context ? JSON.stringify(context) : '';\n return `${resource}:${action}:${contextStr}`;\n }\n\n /**\n * Get cached permission result\n */\n private getCachedPermission(cacheKey: string): PermissionResponse | null {\n const expiry = this.cacheExpiry.get(cacheKey);\n if (expiry && expiry > Date.now()) {\n return this.permissionCache.get(cacheKey) || null;\n }\n \n // Remove expired entry\n this.permissionCache.delete(cacheKey);\n this.cacheExpiry.delete(cacheKey);\n return null;\n }\n\n /**\n * Cache permission result\n */\n private cachePermission(cacheKey: string, result: PermissionResponse): void {\n this.permissionCache.set(cacheKey, result);\n this.cacheExpiry.set(cacheKey, Date.now() + this.CACHE_DURATION);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CookieService } from './cookie.service';\n\nexport interface SeniorTokenData {\n locale?: string;\n userId?: string;\n userName?: string;\n access_token?: string;\n expires_in?: number;\n refresh_token?: string;\n token_type?: string;\n refresh_expires_in?: number;\n username?: string;\n email?: string;\n fullName?: string;\n tenantName?: string;\n type?: string;\n [key: string]: any;\n}\n\n/**\n * Serviço para gerenciar o token Senior e extrair informações específicas\n * para o sistema de traduções.\n * \n * Nota: Este serviço foca especificamente na extração do locale e informações\n * básicas do usuário. Para funcionalidades completas de autenticação,\n * use o AuthService que tem uma interface mais robusta.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SeniorTokenService {\n private readonly SENIOR_TOKEN_COOKIE = 'com.senior.token';\n\n constructor(private cookieService: CookieService) {}\n\n /**\n * Obtém o token Senior completo do cookie\n */\n getSeniorToken(): string | null {\n // Tentar o nome padrão primeiro\n let token = this.cookieService.getCookie(this.SENIOR_TOKEN_COOKIE);\n \n if (!token) {\n // Tentar nomes alternativos comuns\n const alternativeNames = [\n 'com.senior.token',\n 'senior.token',\n 'senior_token',\n 'seniorToken',\n 'token',\n 'authToken',\n 'auth_token'\n ];\n \n for (const name of alternativeNames) {\n token = this.cookieService.getCookie(name);\n if (token) {\n break;\n }\n }\n }\n \n return token;\n }\n\n /**\n * Decodifica e obtém os dados do token Senior\n */\n getSeniorTokenData(): SeniorTokenData | null {\n const token = this.getSeniorToken();\n \n if (!token) {\n return null;\n }\n\n try {\n let tokenData: any;\n \n // Primeiro, tentar como JSON direto (mais provável baseado na informação fornecida)\n try {\n tokenData = JSON.parse(token);\n } catch (jsonError) {\n // Se falhar, tentar como JWT\n if (token.includes('.')) {\n const parts = token.split('.');\n if (parts.length >= 2) {\n const payload = parts[1];\n // Adicionar padding se necessário\n const paddedPayload = payload + '='.repeat((4 - payload.length % 4) % 4);\n const decodedPayload = atob(paddedPayload);\n tokenData = JSON.parse(decodedPayload);\n } else {\n throw new Error('Invalid JWT format');\n }\n } else {\n throw jsonError; // Re-throw original JSON error\n }\n }\n\n return tokenData as SeniorTokenData;\n } catch (error) {\n console.error('[SeniorTokenService] Error parsing Senior token:', error);\n return null;\n }\n }\n\n /**\n * Obtém o locale do usuário do token Senior\n */\n getUserLocale(): string | null {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return null;\n }\n\n // O locale deve estar no mesmo nível do access_token\n if (tokenData.locale) {\n return tokenData.locale;\n }\n\n // Fallback: tentar outros campos comuns\n const possibleLocaleFields = [\n 'language', \n 'lang',\n 'user_locale',\n 'userLocale',\n 'preferred_language',\n 'preferredLanguage'\n ];\n\n for (const field of possibleLocaleFields) {\n if (tokenData[field]) {\n return tokenData[field];\n }\n }\n \n return null;\n }\n\n /**\n * Obtém informações do usuário do token Senior\n */\n getUserInfo(): { userId?: string; userName?: string; locale?: string; email?: string; fullName?: string } | null {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return null;\n }\n\n // Baseado na estrutura do AuthService, os campos devem estar no nível raiz\n return {\n userId: tokenData.userId || tokenData['sub'] || tokenData['user_id'] || tokenData.username,\n userName: tokenData.userName || tokenData['name'] || tokenData['user_name'] || tokenData.username || tokenData.fullName,\n locale: tokenData.locale,\n email: tokenData.email,\n fullName: tokenData.fullName\n };\n }\n\n /**\n * Verifica se o usuário está logado (token existe e é válido)\n */\n isUserLoggedIn(): boolean {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return false;\n }\n\n // Verificar expiração se existir\n if (tokenData['exp']) {\n const now = Math.floor(Date.now() / 1000);\n if (tokenData['exp'] < now) {\n console.warn('Senior token has expired');\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Monitora mudanças no cookie do token (para detectar login/logout)\n */\n watchTokenChanges(callback: (tokenData: SeniorTokenData | null) => void): void {\n let lastToken = this.getSeniorToken();\n \n const checkToken = () => {\n const currentToken = this.getSeniorToken();\n \n if (currentToken !== lastToken) {\n lastToken = currentToken;\n const tokenData = this.getSeniorTokenData();\n callback(tokenData);\n }\n };\n\n // Verificar a cada 5 segundos\n setInterval(checkToken, 5000);\n }\n\n /**\n * Valida se o token tem a estrutura esperada do Senior\n */\n validateTokenStructure(): { isValid: boolean; issues: string[] } {\n const tokenData = this.getSeniorTokenData();\n const issues: string[] = [];\n \n if (!tokenData) {\n issues.push('Token not found or could not be parsed');\n return { isValid: false, issues };\n }\n \n // Verificar campos obrigatórios esperados\n const requiredFields = ['access_token'];\n const recommendedFields = ['locale', 'username', 'email'];\n \n for (const field of requiredFields) {\n if (!tokenData[field]) {\n issues.push(`Missing required field: ${field}`);\n }\n }\n \n for (const field of recommendedFields) {\n if (!tokenData[field]) {\n issues.push(`Missing recommended field: ${field}`);\n }\n }\n \n // Verificar se locale está presente e é válido\n if (tokenData.locale) {\n // Importar a função de mapeamento seria circular, então fazer verificação básica\n const supportedLocales = ['pt-BR', 'en-US', 'es-ES', 'pt', 'en', 'es'];\n const locale = tokenData.locale;\n const isSupported = supportedLocales.some(supportedLocale => \n locale.toLowerCase().includes(supportedLocale.toLowerCase())\n );\n \n if (!isSupported) {\n issues.push(`Locale '${locale}' might not be supported`);\n }\n }\n \n const isValid = issues.filter(issue => issue.includes('required')).length === 0;\n \n console.log('[SeniorTokenService] Token validation result:', { isValid, issues });\n \n return { isValid, issues };\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n private isDarkModeSubject = new BehaviorSubject<boolean>(false);\n public isDarkMode$ = this.isDarkModeSubject.asObservable();\n private mediaQuery: MediaQueryList;\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n // Create media query to watch for system theme changes (kept for compatibility)\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n \n // Check for saved theme preference, default to light theme\n const savedTheme = localStorage.getItem('theme');\n \n if (savedTheme === 'dark') {\n // Only use dark theme if explicitly saved as dark\n this.setTheme(true);\n } else {\n // Default to light theme, ignoring system preference\n this.setTheme(false);\n // Set default theme preference if not exists\n if (!savedTheme) {\n localStorage.setItem('theme', 'light');\n }\n }\n }\n\n private followSystemTheme(): void {\n // This method is kept for compatibility but no longer used by default\n // Set theme based on system preference only when explicitly requested\n this.setTheme(this.mediaQuery.matches);\n \n // Listen for system theme changes only when in auto mode\n this.mediaQuery.addEventListener('change', (e) => {\n const savedTheme = localStorage.getItem('theme');\n if (savedTheme === 'auto') {\n this.setTheme(e.matches);\n }\n });\n }\n\n toggleTheme(): void {\n const currentTheme = this.isDarkModeSubject.value;\n this.setTheme(!currentTheme);\n // When manually toggling, save the specific preference\n localStorage.setItem('theme', !currentTheme ? 'dark' : 'light');\n }\n\n setThemeMode(mode: 'light' | 'dark' | 'auto'): void {\n localStorage.setItem('theme', mode);\n \n if (mode === 'auto') {\n this.followSystemTheme();\n } else {\n this.setTheme(mode === 'dark');\n }\n }\n\n private setTheme(isDark: boolean): void {\n this.isDarkModeSubject.next(isDark);\n \n // Apply theme to document\n if (isDark) {\n this.document.documentElement.classList.add('app-dark');\n } else {\n this.document.documentElement.classList.remove('app-dark');\n }\n }\n\n get isDarkMode(): boolean {\n return this.isDarkModeSubject.value;\n }\n\n get currentThemeMode(): 'light' | 'dark' | 'auto' {\n const savedTheme = localStorage.getItem('theme');\n return (savedTheme as 'light' | 'dark' | 'auto') || 'light'; // Default to light instead of auto\n }\n}\n","export interface LanguageConfig {\n code: string;\n name: string;\n flag: string;\n rtl?: boolean;\n aliases?: string[]; // Aliases para compatibilidade\n}\n\nexport const SUPPORTED_LANGUAGES: LanguageConfig[] = [\n { \n code: 'pt-BR', \n name: 'Português (Brasil)', \n flag: '🇧🇷',\n aliases: ['pt', 'pt_BR', 'portuguese', 'br'] \n },\n { \n code: 'en-US', \n name: 'English (US)', \n flag: '🇺🇸',\n aliases: ['en', 'en_US', 'english', 'us'] \n },\n { \n code: 'es-ES', \n name: 'Español (España)', \n flag: '🇪🇸',\n aliases: ['es', 'es_ES', 'spanish', 'spain'] \n }\n];\n\nexport const DEFAULT_LANGUAGE = 'pt-BR';\n\nexport const TRANSLATION_CONFIG = {\n supportedLanguages: SUPPORTED_LANGUAGES,\n defaultLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: 'pt-BR',\n storageKey: 'selectedLanguage',\n assetsPath: './app/locale'\n};\n\n/**\n * Mapeia um locale do token Senior para um código de idioma suportado\n */\nexport function mapTokenLocaleToLanguage(tokenLocale: string): string | null {\n if (!tokenLocale) return null;\n \n // Normalizar o locale (remover case sensitivity e caracteres especiais)\n const normalizedLocale = tokenLocale.toLowerCase().replace(/[_-]/g, '');\n \n // Procurar correspondência exata primeiro\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang.code.toLowerCase().replace(/[_-]/g, '') === normalizedLocale) {\n return lang.code;\n }\n }\n \n // Procurar por aliases\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang.aliases) {\n for (const alias of lang.aliases) {\n if (alias.toLowerCase().replace(/[_-]/g, '') === normalizedLocale) {\n return lang.code;\n }\n }\n }\n }\n \n // Tentar correspondência parcial (apenas o idioma, ignorando país)\n const languageOnly = normalizedLocale.substring(0, 2);\n for (const lang of SUPPORTED_LANGUAGES) {\n const langCode = lang.code.toLowerCase().substring(0, 2);\n if (langCode === languageOnly) {\n return lang.code;\n }\n }\n \n console.warn(`Unsupported locale from token: ${tokenLocale}`);\n return null;\n}\n\n/**\n * Obtém informações de um idioma pelo código\n */\nexport function getLanguageInfo(code: string): LanguageConfig | null {\n return SUPPORTED_LANGUAGES.find(lang => lang.code === code) || null;\n}\n","import { Injectable, Optional, Inject } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TRANSLATION_CONFIG, LanguageConfig, mapTokenLocaleToLanguage } from '../config/translation.config';\nimport { SeniorTokenService } from './senior-token.service';\n\n// Importar traduções estaticamente\nimport translationsPtBR from '../i18n/pt-BR.json';\nimport translationsEnUS from '../i18n/en-US.json';\nimport translationsEsES from '../i18n/es-ES.json';\n\nexport type SupportedLanguage = 'pt-BR' | 'en-US' | 'es-ES';\n\n// Mapa de traduções internas da biblioteca\nconst LIBRARY_TRANSLATIONS: Record<SupportedLanguage, any> = {\n 'pt-BR': translationsPtBR,\n 'en-US': translationsEnUS,\n 'es-ES': translationsEsES\n};\n\n// Interface para o loader de traduções (duck typing)\nexport interface TranslationLoader {\n loadTranslations(language: string): Promise<any>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private currentLanguage!: BehaviorSubject<SupportedLanguage>;\n private translations: { [key: string]: any } = {};\n private loadingLanguages = new Set<string>();\n private translationLoader?: TranslationLoader;\n\n constructor(\n private seniorTokenService: SeniorTokenService,\n @Optional() @Inject('TranslationLoader') loader?: TranslationLoader\n ) {\n // Inicializar o BehaviorSubject no construtor\n this.currentLanguage = new BehaviorSubject<SupportedLanguage>(\n TRANSLATION_CONFIG.defaultLanguage as SupportedLanguage\n );\n this.translationLoader = loader;\n \n this.loadStoredLanguage();\n // Carregar traduções do idioma inicial imediatamente\n this.loadTranslations();\n \n // Monitorar mudanças no token para atualizar idioma\n this.watchTokenChanges();\n }\n\n get currentLanguage$(): Observable<SupportedLanguage> {\n return this.currentLanguage.asObservable();\n }\n\n getCurrentLanguage(): SupportedLanguage {\n return this.currentLanguage.value;\n }\n\n async setLanguage(language: SupportedLanguage): Promise<void> {\n this.currentLanguage.next(language);\n localStorage.setItem(TRANSLATION_CONFIG.storageKey, language);\n await this.loadTranslations();\n }\n\n async waitForTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n if (!this.isLanguageLoaded(language)) {\n await this.loadTranslations();\n }\n }\n\n /**\n * Verifica se as traduções do idioma atual estão carregadas\n */\n isLanguageLoaded(language?: SupportedLanguage): boolean {\n const lang = language || this.currentLanguage.value;\n return !!this.translations[lang] && Object.keys(this.translations[lang]).length > 0;\n }\n\n translate(key: string, params?: { [key: string]: any }): string {\n const currentLang = this.currentLanguage.value;\n const translations = this.translations[currentLang];\n \n if (!translations || Object.keys(translations).length === 0) {\n // Se as traduções não estão carregadas, tentar carregar de forma assíncrona\n if (!this.loadingLanguages.has(currentLang)) {\n this.loadTranslations().catch(error => {\n console.error('Error loading translations:', error);\n });\n }\n console.warn(`No translations loaded for language: ${currentLang}`);\n return key;\n }\n\n // Buscar tradução (suporta estrutura plana e aninhada)\n const translation = this.getNestedTranslation(translations, key);\n \n if (!translation) {\n console.warn(`Translation key not found: ${key}`);\n return key;\n }\n\n if (typeof translation !== 'string') {\n console.warn(`Translation key is not a string: ${key}`);\n return key;\n }\n\n // Replace parameters if provided\n if (params) {\n return this.replaceParams(translation, params);\n }\n\n return translation;\n }\n\n /**\n * Busca tradução em estrutura aninhada ou plana\n */\n private getNestedTranslation(translations: any, key: string): string | undefined {\n // Primeiro tenta buscar diretamente (estrutura plana)\n if (translations[key]) {\n return translations[key];\n }\n\n // Se não encontrou, tenta buscar em estrutura aninhada\n const keys = key.split('.');\n let current = translations;\n \n for (const k of keys) {\n if (current && typeof current === 'object' && k in current) {\n current = current[k];\n } else {\n return undefined;\n }\n }\n \n return typeof current === 'string' ? current : undefined;\n }\n\n private async loadTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n \n // Se já está carregado, não carregar novamente\n if (this.isLanguageLoaded(language)) {\n return;\n }\n \n // Evitar carregamentos duplicados\n if (this.loadingLanguages.has(language)) {\n // Aguardar um pouco e tentar novamente\n await new Promise(resolve => setTimeout(resolve, 100));\n if (this.isLanguageLoaded(language)) {\n return;\n }\n }\n \n this.loadingLanguages.add(language);\n \n try {\n await this.doLoadTranslations(language);\n } catch (error) {\n console.error('Error in loadTranslations:', error);\n } finally {\n this.loadingLanguages.delete(language);\n }\n }\n \n private async doLoadTranslations(language: SupportedLanguage): Promise<void> {\n try {\n // 1. Carregar traduções internas da biblioteca\n const libTranslations = await this.loadLibraryTranslations(language);\n \n // 2. Se há um loader customizado, carregar traduções da aplicação\n if (this.translationLoader) {\n const appTranslations = await this.translationLoader.loadTranslations(language);\n // Merge: traduções da app sobrescrevem as da lib\n this.translations[language] = { ...libTranslations, ...appTranslations };\n console.log(`Translations loaded for ${language}:`, Object.keys(this.translations[language]).length, 'keys');\n return;\n }\n \n // Se não há loader, usar apenas traduções da lib\n this.translations[language] = libTranslations;\n console.log(`Library translations loaded for ${language}:`, Object.keys(this.translations[language]).length, 'keys');\n } catch (error) {\n console.error(`Error loading translations for ${language}:`, error);\n // Fallback para o idioma padrão se houver erro\n if (language !== TRANSLATION_CONFIG.fallbackLanguage) {\n try {\n const fallbackLibTranslations = await this.loadLibraryTranslations(TRANSLATION_CONFIG.fallbackLanguage as SupportedLanguage);\n if (this.translationLoader) {\n const fallbackAppTranslations = await this.translationLoader.loadTranslations(TRANSLATION_CONFIG.fallbackLanguage);\n this.translations[language] = { ...fallbackLibTranslations, ...fallbackAppTranslations };\n } else {\n this.translations[language] = fallbackLibTranslations;\n }\n console.log(`Fallback translations loaded for ${language}`);\n } catch (fallbackError) {\n console.error(`Error loading fallback translations:`, fallbackError);\n this.translations[language] = {};\n }\n }\n }\n }\n\n /**\n * Carrega traduções internas da biblioteca\n */\n private async loadLibraryTranslations(language: SupportedLanguage): Promise<any> {\n try {\n return LIBRARY_TRANSLATIONS[language] || {};\n } catch (error) {\n console.warn(`No library translations found for ${language}`);\n return {};\n }\n }\n\n private loadStoredLanguage(): void {\n // 1. Primeiro, tentar obter do token Senior\n const tokenLocale = this.seniorTokenService.getUserLocale();\n if (tokenLocale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenLocale);\n if (mappedLanguage) {\n console.log(`Using language from Senior token: ${tokenLocale} -> ${mappedLanguage}`);\n this.currentLanguage.next(mappedLanguage as SupportedLanguage);\n return;\n }\n }\n\n // 2. Segundo, tentar obter do localStorage\n const stored = localStorage.getItem(TRANSLATION_CONFIG.storageKey) as SupportedLanguage;\n const supportedCodes = TRANSLATION_CONFIG.supportedLanguages.map(lang => lang.code);\n if (stored && supportedCodes.includes(stored)) {\n console.log('Using language from localStorage:', stored);\n this.currentLanguage.next(stored);\n return;\n }\n\n // 3. Por último, usar idioma padrão\n console.log('Using default language:', TRANSLATION_CONFIG.defaultLanguage);\n this.currentLanguage.next(TRANSLATION_CONFIG.defaultLanguage as SupportedLanguage);\n }\n\n private replaceParams(text: string, params: { [key: string]: any }): string {\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return params[key] !== undefined ? params[key] : match;\n });\n }\n\n getSupportedLanguages(): LanguageConfig[] {\n return TRANSLATION_CONFIG.supportedLanguages;\n }\n\n /**\n * Força o recarregamento das traduções (útil para desenvolvimento)\n */\n async reloadTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n delete this.translations[language];\n await this.loadTranslations();\n }\n\n /**\n * Obtém todas as chaves de tradução carregadas\n */\n getLoadedKeys(): string[] {\n const language = this.currentLanguage.value;\n const translations = this.translations[language];\n return translations ? Object.keys(translations) : [];\n }\n\n /**\n * Verifica se um código de idioma é suportado\n */\n private isValidLanguage(locale: string): boolean {\n const supportedCodes = TRANSLATION_CONFIG.supportedLanguages.map(lang => lang.code);\n return supportedCodes.includes(locale);\n }\n\n /**\n * Monitora mudanças no token Senior para atualizar idioma automaticamente\n */\n private watchTokenChanges(): void {\n this.seniorTokenService.watchTokenChanges((tokenData) => {\n if (tokenData?.locale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenData.locale);\n if (mappedLanguage) {\n const newLocale = mappedLanguage as SupportedLanguage;\n const currentLocale = this.currentLanguage.value;\n \n if (newLocale !== currentLocale) {\n console.log(`Token locale changed: ${tokenData.locale} -> ${newLocale}`);\n this.setLanguage(newLocale);\n }\n }\n }\n });\n }\n\n /**\n * Força atualização do idioma baseado no token atual\n */\n async syncWithToken(): Promise<void> {\n const tokenLocale = this.seniorTokenService.getUserLocale();\n if (tokenLocale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenLocale);\n if (mappedLanguage) {\n const newLocale = mappedLanguage as SupportedLanguage;\n const currentLocale = this.currentLanguage.value;\n \n if (newLocale !== currentLocale) {\n console.log(`Syncing language with token: ${tokenLocale} -> ${newLocale}`);\n await this.setLanguage(newLocale);\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslationService, SupportedLanguage } from './translation.service';\n\n/**\n * Configuração de máscara por locale\n */\ninterface LocaleMaskConfig {\n phone: {\n mask: (value: string) => string;\n maxDigits: number;\n };\n postalCode: {\n mask: (value: string) => string;\n maxDigits: number;\n label: string;\n };\n money: {\n locale: string;\n currency: string;\n symbol: string;\n };\n}\n\nconst LOCALE_CONFIGS: Record<SupportedLanguage, LocaleMaskConfig> = {\n 'pt-BR': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 11);\n if (n.length <= 2) return n;\n if (n.length <= 6) return n.replace(/(\\d{2})(\\d+)/, '($1) $2');\n if (n.length <= 10) return n.replace(/(\\d{2})(\\d{4})(\\d+)/, '($1) $2-$3');\n return n.replace(/(\\d{2})(\\d{5})(\\d{4})/, '($1) $2-$3');\n },\n maxDigits: 11\n },\n postalCode: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 8);\n if (n.length <= 5) return n;\n return n.replace(/(\\d{5})(\\d+)/, '$1-$2');\n },\n maxDigits: 8,\n label: 'CEP'\n },\n money: { locale: 'pt-BR', currency: 'BRL', symbol: 'R$' }\n },\n 'en-US': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 10);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '($1) $2');\n return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '($1) $2-$3');\n },\n maxDigits: 10\n },\n postalCode: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 9);\n if (n.length <= 5) return n;\n return n.replace(/(\\d{5})(\\d+)/, '$1-$2');\n },\n maxDigits: 9,\n label: 'ZIP Code'\n },\n money: { locale: 'en-US', currency: 'USD', symbol: '$' }\n },\n 'es-ES': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 9);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '$1 $2');\n return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '$1 $2 $3');\n },\n maxDigits: 9\n },\n postalCode: {\n mask: (value: string) => {\n return value.replace(/\\D/g, '').substring(0, 5);\n },\n maxDigits: 5,\n label: 'Código Postal'\n },\n money: { locale: 'es-ES', currency: 'EUR', symbol: '€' }\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaskService {\n\n constructor(private translationService: TranslationService) {}\n\n /**\n * Obtém o locale atual ou usa o fornecido por parâmetro\n */\n private getLocale(locale?: SupportedLanguage): SupportedLanguage {\n return locale || this.translationService.getCurrentLanguage();\n }\n\n private getConfig(locale?: SupportedLanguage): LocaleMaskConfig {\n return LOCALE_CONFIGS[this.getLocale(locale)];\n }\n\n // =========================================================================\n // CPF (Brasil - fixo, não depende de locale)\n // =========================================================================\n\n applyCpfMask(value: string): string {\n if (!value) return '';\n const n = value.replace(/\\D/g, '').substring(0, 11);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '$1.$2');\n if (n.length <= 9) return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3');\n return n.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3-$4');\n }\n\n // =========================================================================\n // CNPJ (Brasil - fixo, alfanumérico conforme IN RFB 2229)\n // =========================================================================\n\n applyCnpjMask(value: string): string {\n if (!value) return '';\n const cleaned = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n const root = cleaned.substring(0, 12);\n const checkDigits = cleaned.substring(12, 14).replace(/[^0-9]/g, '');\n const chars = root + checkDigits;\n const len = chars.length;\n if (len <= 2) return chars;\n if (len <= 5) return chars.replace(/(\\w{2})(\\w+)/, '$1.$2');\n if (len <= 8) return chars.replace(/(\\w{2})(\\w{3})(\\w+)/, '$1.$2.$3');\n if (len <= 12) return chars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w+)/, '$1.$2.$3/$4');\n return chars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w{4})(\\w+)/, '$1.$2.$3/$4-$5');\n }\n\n // =========================================================================\n // Document (CPF ou CNPJ baseado no tipo de pessoa)\n // =========================================================================\n\n applyDocumentMask(value: string, typePerson: 'NATURAL_PERSON' | 'JURIDICAL_PERSON'): string {\n if (!value) return '';\n return typePerson === 'NATURAL_PERSON' ? this.applyCpfMask(value) : this.applyCnpjMask(value);\n }\n\n // =========================================================================\n // Phone (depende do locale)\n // =========================================================================\n\n applyPhoneMask(value: string, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.getConfig(locale).phone.mask(value);\n }\n\n getPhoneMaxDigits(locale?: SupportedLanguage): number {\n return this.getConfig(locale).phone.maxDigits;\n }\n\n // =========================================================================\n // Postal Code (depende do locale)\n // =========================================================================\n\n applyPostalCodeMask(value: string, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.getConfig(locale).postalCode.mask(value);\n }\n\n getPostalCodeMaxDigits(locale?: SupportedLanguage): number {\n return this.getConfig(locale).postalCode.maxDigits;\n }\n\n getPostalCodeLabel(locale?: SupportedLanguage): string {\n return this.getConfig(locale).postalCode.label;\n }\n\n // =========================================================================\n // Money (depende do locale)\n // =========================================================================\n\n formatMoney(value: number | string, locale?: SupportedLanguage, currency?: string): string {\n if (value === null || value === undefined || value === '') return '';\n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return '';\n const config = this.getConfig(locale).money;\n return new Intl.NumberFormat(config.locale, {\n style: 'currency',\n currency: currency || config.currency\n }).format(numValue);\n }\n\n getMoneyConfig(locale?: SupportedLanguage): { locale: string; currency: string; symbol: string } {\n return this.getConfig(locale).money;\n }\n\n // =========================================================================\n // Utilitários\n // =========================================================================\n\n removeMask(value: string): string {\n if (!value) return '';\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n removeNumericMask(value: string): string {\n if (!value) return '';\n return value.replace(/\\D/g, '');\n }\n\n getDocumentType(value: string): 'cpf' | 'cnpj' | 'unknown' {\n if (!value) return 'unknown';\n const cleaned = this.removeMask(value);\n if (cleaned.length <= 11) return 'cpf';\n if (cleaned.length <= 14) return 'cnpj';\n return 'unknown';\n }\n\n isValidCpfFormat(value: string): boolean {\n if (!value) return false;\n const cleaned = value.replace(/\\D/g, '');\n return cleaned.length === 11 && /^\\d{11}$/.test(cleaned);\n }\n\n isValidCnpjFormat(value: string): boolean {\n if (!value) return false;\n const cleaned = this.removeMask(value);\n if (cleaned.length !== 14) return false;\n const root = cleaned.substring(0, 12);\n const checkDigits = cleaned.substring(12, 14);\n return /^[A-Z0-9]{12}$/i.test(root) && /^\\d{2}$/.test(checkDigits);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PrimeNG } from 'primeng/config';\nimport { Translation } from 'primeng/api';\nimport { TranslationService, SupportedLanguage } from './translation.service';\n\n/**\n * Mapa de traduções do PrimeNG Calendar por idioma\n */\nconst PRIMENG_LOCALE: Record<SupportedLanguage, Translation> = {\n 'pt-BR': {\n dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['Do', 'Se', 'Te', 'Qa', 'Qi', 'Sx', 'Sa'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n today: 'Hoje',\n clear: 'Limpar',\n weekHeader: 'Sm',\n firstDayOfWeek: 0,\n dateFormat: 'dd/mm/yy',\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n pending: 'Pendente',\n emptyMessage: 'Nenhum resultado encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM'\n },\n 'en-US': {\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n today: 'Today',\n clear: 'Clear',\n weekHeader: 'Wk',\n firstDayOfWeek: 0,\n dateFormat: 'mm/dd/yy',\n accept: 'Yes',\n reject: 'No',\n choose: 'Choose',\n upload: 'Upload',\n cancel: 'Cancel',\n pending: 'Pending',\n emptyMessage: 'No results found',\n emptyFilterMessage: 'No results found',\n chooseYear: 'Choose Year',\n chooseMonth: 'Choose Month',\n chooseDate: 'Choose Date',\n prevDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n prevYear: 'Previous Year',\n nextYear: 'Next Year',\n prevMonth: 'Previous Month',\n nextMonth: 'Next Month',\n prevHour: 'Previous Hour',\n nextHour: 'Next Hour',\n prevMinute: 'Previous Minute',\n nextMinute: 'Next Minute',\n prevSecond: 'Previous Second',\n nextSecond: 'Next Second',\n am: 'AM',\n pm: 'PM'\n },\n 'es-ES': {\n dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],\n dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],\n monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\n monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\n today: 'Hoy',\n clear: 'Limpiar',\n weekHeader: 'Sm',\n firstDayOfWeek: 1,\n dateFormat: 'dd/mm/yy',\n accept: 'Sí',\n reject: 'No',\n choose: 'Elegir',\n upload: 'Subir',\n cancel: 'Cancelar',\n pending: 'Pendiente',\n emptyMessage: 'No se encontraron resultados',\n emptyFilterMessage: 'No se encontraron resultados',\n chooseYear: 'Elegir año',\n chooseMonth: 'Elegir mes',\n chooseDate: 'Elegir fecha',\n prevDecade: 'Década anterior',\n nextDecade: 'Siguiente década',\n prevYear: 'Año anterior',\n nextYear: 'Siguiente año',\n prevMonth: 'Mes anterior',\n nextMonth: 'Siguiente mes',\n prevHour: 'Hora anterior',\n nextHour: 'Siguiente hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Siguiente minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Siguiente segundo',\n am: 'AM',\n pm: 'PM'\n }\n};\n\n/**\n * Formatos de data por idioma para uso em pipes e formatação\n */\nconst DATE_FORMATS: Record<SupportedLanguage, string> = {\n 'pt-BR': 'dd/MM/yyyy',\n 'en-US': 'MM/dd/yyyy',\n 'es-ES': 'dd/MM/yyyy'\n};\n\n/**\n * Locales do Intl por idioma\n */\nconst INTL_LOCALES: Record<SupportedLanguage, string> = {\n 'pt-BR': 'pt-BR',\n 'en-US': 'en-US',\n 'es-ES': 'es-ES'\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocaleService {\n private initialized = false;\n\n constructor(\n private primeNG: PrimeNG,\n private translationService: TranslationService\n ) {\n this.init();\n }\n\n private init(): void {\n if (this.initialized) return;\n this.initialized = true;\n\n // Aplicar locale inicial\n this.applyLocale(this.translationService.getCurrentLanguage());\n\n // Reagir a mudanças de idioma\n this.translationService.currentLanguage$.subscribe((language) => {\n this.applyLocale(language);\n });\n }\n\n private applyLocale(language: SupportedLanguage): void {\n const locale = PRIMENG_LOCALE[language] || PRIMENG_LOCALE['pt-BR'];\n this.primeNG.setTranslation(locale);\n }\n\n /**\n * Retorna o formato de data PrimeNG (p-calendar) para o idioma atual\n */\n getPrimeNGDateFormat(): string {\n const language = this.translationService.getCurrentLanguage();\n return PRIMENG_LOCALE[language]?.dateFormat || 'dd/mm/yy';\n }\n\n /**\n * Retorna o formato de data Angular (DatePipe) para o idioma atual\n */\n getDateFormat(): string {\n return DATE_FORMATS[this.translationService.getCurrentLanguage()] || DATE_FORMATS['pt-BR'];\n }\n\n /**\n * Retorna o locale Intl para o idioma atual\n */\n getIntlLocale(): string {\n return INTL_LOCALES[this.translationService.getCurrentLanguage()] || INTL_LOCALES['pt-BR'];\n }\n\n /**\n * Formata uma data string (yyyy-MM-dd ou ISO) para o formato do idioma atual\n */\n formatDate(value: string | Date | null | undefined): string {\n if (!value) return '';\n const date = typeof value === 'string' ? new Date(value + (value.length === 10 ? 'T00:00:00' : '')) : value;\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString(this.getIntlLocale());\n }\n}\n","import { Pipe, PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslationService } from '../services/translation.service';\n\n@Pipe({\n name: 'translate',\n pure: false,\n standalone: true\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private subscription?: Subscription;\n private lastKey?: string;\n private lastParams?: any;\n private lastTranslation?: string;\n private isLoading = false;\n\n constructor(\n private translationService: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n transform(key: string, params?: { [key: string]: any }): string {\n if (!key) return '';\n\n // Check if we need to update the translation\n if (this.shouldUpdate(key, params)) {\n this.updateTranslation(key, params);\n }\n\n return this.lastTranslation || key;\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private shouldUpdate(key: string, params?: any): boolean {\n return this.lastKey !== key || \n JSON.stringify(this.lastParams) !== JSON.stringify(params) ||\n !this.subscription;\n }\n\n private updateTranslation(key: string, params?: any): void {\n this.lastKey = key;\n this.lastParams = params;\n \n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // Aguardar carregamento das traduções se necessário\n if (!this.translationService.isLanguageLoaded()) {\n if (!this.isLoading) {\n this.isLoading = true;\n this.translationService.waitForTranslations().then(() => {\n this.isLoading = false;\n this.lastTranslation = this.translationService.translate(key, params);\n this.cdr.markForCheck();\n }).catch(error => {\n this.isLoading = false;\n console.error('Error waiting for translations:', error);\n this.lastTranslation = key;\n this.cdr.markForCheck();\n });\n }\n return;\n }\n\n this.subscription = this.translationService.currentLanguage$.subscribe(() => {\n this.lastTranslation = this.translationService.translate(key, params);\n this.cdr.markForCheck();\n });\n }\n}","import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DividerModule } from 'primeng/divider';\nimport * as XLSX from 'xlsx';\nimport jsPDF from 'jspdf';\nimport 'jspdf-autotable';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslationService } from '../../services/translation.service';\n\nexport interface ColumnOption {\n field: string;\n header: string;\n selected: boolean;\n}\n\ninterface ExportFormat {\n value: 'xlsx' | 'pdf';\n label: string;\n icon: string;\n description: string;\n}\n\ninterface ExportScope {\n value: 'all' | 'selected';\n label: string;\n icon: string;\n description: string;\n}\n\n@Component({\n selector: 'sia-export-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n DialogModule,\n ButtonModule,\n RadioButtonModule,\n CheckboxModule,\n DividerModule,\n TranslatePipe\n ],\n templateUrl: './export-dialog.component.html',\n styleUrl: './export-dialog.component.scss'\n})\nexport class ExportDialogComponent implements OnChanges {\n @Input() visible: boolean = false;\n @Input() allRecords: any[] = [];\n @Input() selectedRecords: any[] = [];\n @Input() statusLabels?: { [key: string]: string };\n @Input() translationPrefix: string = 'design.components_ai';\n @Input() set availableColumns(columns: ColumnOption[]) {\n if (columns && columns.length > 0) {\n this.columns = columns;\n }\n }\n @Output() visibleChange = new EventEmitter<boolean>();\n\n exportFormat: 'xlsx' | 'pdf' = 'xlsx';\n exportScope: 'all' | 'selected' = 'all';\n\n formats: ExportFormat[] = [];\n scopes: ExportScope[] = [];\n columns: ColumnOption[] = [];\n\n constructor(private translationService: TranslationService) {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n ngOnChanges(): void {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n private initializeFormats(): void {\n this.formats = [\n {\n value: 'xlsx',\n label: 'Excel',\n icon: 'pi-file-excel',\n description: this.translationService.translate('design.components_ai.export_excel_description')\n },\n {\n value: 'pdf',\n label: 'PDF',\n icon: 'pi-file-pdf',\n description: this.translationService.translate('design.components_ai.export_pdf_description')\n }\n ];\n }\n\n private initializeScopes(): void {\n this.scopes = [\n {\n value: 'all',\n label: this.translationService.translate('design.components_ai.export_all_records'),\n icon: 'pi-list',\n description: this.translationService.translate('design.components_ai.export_all_records_description')\n },\n {\n value: 'selected',\n label: this.translationService.translate('design.components_ai.export_selected_records'),\n icon: 'pi-check-square',\n description: this.translationService.translate('design.components_ai.export_selected_records_description')\n }\n ];\n }\n\n get recordsToExport(): any[] {\n return this.exportScope === 'all' ? this.allRecords : this.selectedRecords;\n }\n\n get selectedColumnsCount(): number {\n return this.columns.filter(col => col.selected).length;\n }\n\n get canExport(): boolean {\n return this.selectedColumnsCount > 0 && this.recordsToExport.length > 0;\n }\n\n onHide(): void {\n this.visibleChange.emit(false);\n }\n\n selectAllColumns(): void {\n this.columns.forEach(col => col.selected = true);\n }\n\n deselectAllColumns(): void {\n this.columns.forEach(col => col.selected = false);\n }\n\n export(): void {\n if (!this.canExport) return;\n\n if (this.exportFormat === 'xlsx') {\n this.exportToExcel();\n } else {\n this.exportToPDF();\n }\n\n this.onHide();\n }\n\n private exportToExcel(): void {\n const selectedColumns = this.columns.filter(col => col.selected);\n const data = this.recordsToExport.map(record => {\n const row: any = {};\n selectedColumns.forEach(col => {\n if (col.field === 'status' && record.status && this.statusLabels) {\n row[col.header] = this.statusLabels[record.status];\n } else {\n row[col.header] = record[col.field];\n }\n });\n return row;\n });\n\n const worksheet = XLSX.utils.json_to_sheet(data);\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, this.translationService.translate('design.components_ai.export_data_sheet_name'));\n\n // Ajustar largura das colunas\n const maxWidth = 30;\n const colWidths = selectedColumns.map(col => ({\n wch: Math.min(col.header.length + 5, maxWidth)\n }));\n worksheet['!cols'] = colWidths;\n\n const fileName = `export-${new Date().getTime()}.xlsx`;\n XLSX.writeFile(workbook, fileName);\n }\n\n private exportToPDF(): void {\n const doc = new jsPDF();\n const selectedColumns = this.columns.filter(col => col.selected);\n\n // Título\n doc.setFontSize(18);\n doc.setTextColor(18, 168, 133);\n doc.text(this.translationService.translate('design.components_ai.export_pdf_title'), 14, 20);\n\n // Subtítulo\n doc.setFontSize(10);\n doc.setTextColor(100);\n doc.text(`${this.translationService.translate('design.components_ai.export_exported_at')}: ${new Date().toLocaleString('pt-BR')}`, 14, 28);\n doc.text(`${this.translationService.translate('design.components_ai.export_total_records')}: ${this.recordsToExport.length}`, 14, 34);\n\n // Preparar dados\n const headers = selectedColumns.map(col => col.header);\n const data = this.recordsToExport.map(record => {\n return selectedColumns.map(col => {\n if (col.field === 'status' && record.status && this.statusLabels) {\n return this.statusLabels[record.status];\n }\n return String(record[col.field] || '');\n });\n });\n\n // Tabela\n (doc as any).autoTable({\n head: [headers],\n body: data,\n startY: 40,\n theme: 'grid',\n headStyles: {\n fillColor: [18, 168, 133],\n textColor: [255, 255, 255],\n fontStyle: 'bold',\n halign: 'center'\n },\n styles: {\n fontSize: 9,\n cellPadding: 3\n },\n alternateRowStyles: {\n fillColor: [248, 255, 254]\n }\n });\n\n const fileName = `export-${new Date().getTime()}.pdf`;\n doc.save(fileName);\n }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n (onHide)=\"onHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '700px' }\"\n styleClass=\"export-dialog\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'design.components_ai.export_data_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n <!-- Formato de Exportação -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_format_title' | translate }}</h3>\n </div>\n <div class=\"format-options\">\n <div\n *ngFor=\"let format of formats\"\n class=\"format-card\"\n [class.selected]=\"exportFormat === format.value\"\n (click)=\"exportFormat = format.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"format.value\"\n [(ngModel)]=\"exportFormat\"\n [inputId]=\"format.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"format.value === 'xlsx'\" [class.pdf]=\"format.value === 'pdf'\">\n <i class=\"pi\" [ngClass]=\"format.icon\"></i>\n </div>\n <div class=\"card-info\">\n <label [for]=\"format.value\" class=\"card-label\">{{ format.label }}</label>\n <span class=\"card-description\">{{ format.description }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Escopo de Exportação -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-filter\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_scope_title' | translate }}</h3>\n </div>\n <div class=\"scope-options\">\n <div\n *ngFor=\"let scope of scopes\"\n class=\"scope-card\"\n [class.selected]=\"exportScope === scope.value\"\n [class.disabled]=\"scope.value === 'selected' && selectedRecords.length === 0\"\n (click)=\"scope.value === 'selected' && selectedRecords.length === 0 ? null : exportScope = scope.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"scope.value\"\n [(ngModel)]=\"exportScope\"\n [inputId]=\"scope.value\"\n [disabled]=\"scope.value === 'selected' && selectedRecords.length === 0\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"scope.icon\"></i>\n </div>\n <div class=\"card-info\">\n <label [for]=\"scope.value\" class=\"card-label\">{{ scope.label }}</label>\n <span class=\"card-description\">{{ scope.description }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ scope.value === 'all' ? allRecords.length : selectedRecords.length }} {{ 'design.components_ai.export_records_count' | translate }}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Seleção de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-table\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_columns_title' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'design.components_ai.export_select_all_columns' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'design.components_ai.export_clear_selection' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <div\n *ngFor=\"let column of columns\"\n class=\"column-item\"\n [class.selected]=\"column.selected\"\n (click)=\"column.selected = !column.selected\"\n >\n <p-checkbox\n [(ngModel)]=\"column.selected\"\n [binary]=\"true\"\n [inputId]=\"column.field\"\n ></p-checkbox>\n <label [for]=\"column.field\" class=\"column-label\">\n {{ column.header }}\n </label>\n </div>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ selectedColumnsCount }} {{ 'design.components_ai.export_columns_summary' | translate }} {{ columns.length }} {{ 'design.components_ai.export_columns_selected' | translate }}</span>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'design.components_ai.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onHide()\"\n ></p-button>\n <p-button\n [label]=\"'design.components_ai.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport\"\n (onClick)=\"export()\"\n ></p-button>\n </ng-template>\n</p-dialog>\n","import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { TagModule } from 'primeng/tag';\nimport { catchError, concatMap, from, of, Observable } from 'rxjs';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslationService } from '../../services/translation.service';\n\ninterface DeleteStatus {\n entity: any;\n status: 'pending' | 'processing' | 'success' | 'error';\n errorMessage?: string;\n}\n\n// Interface para o serviço de entidade (duck typing)\nexport interface EntityService {\n delete(id: any): Observable<any>;\n}\n\n@Component({\n selector: 'sia-bulk-delete-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DialogModule,\n ButtonModule,\n ProgressBarModule,\n TagModule,\n TranslatePipe\n ],\n templateUrl: './bulk-delete-dialog.component.html',\n styleUrl: './bulk-delete-dialog.component.scss'\n})\nexport class BulkDeleteDialogComponent implements OnChanges {\n @Input() visible: boolean = false;\n @Input() stages: any[] = []; // Generic entities\n @Input() service!: EntityService; // Generic service\n @Input() entityNameField: string = 'name'; // Field to display entity name\n @Input() entityCodeField: string = 'code'; // Field to display entity code (optional)\n @Input() translationPrefix: string = 'design.components_ai';\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onComplete = new EventEmitter<void>();\n\n deleteStatuses: DeleteStatus[] = [];\n isProcessing: boolean = false;\n isCompleted: boolean = false;\n currentIndex: number = 0;\n successCount: number = 0;\n errorCount: number = 0;\n\n constructor(private translationService: TranslationService) {}\n\n ngOnChanges(): void {\n if (this.visible && this.stages.length > 0) {\n this.initializeStatuses();\n }\n }\n\n initializeStatuses(): void {\n this.deleteStatuses = this.stages.map(entity => ({\n entity,\n status: 'pending'\n }));\n this.isProcessing = false;\n this.isCompleted = false;\n this.currentIndex = 0;\n this.successCount = 0;\n this.errorCount = 0;\n }\n\n get progress(): number {\n if (this.deleteStatuses.length === 0) return 0;\n return Math.round((this.currentIndex / this.deleteStatuses.length) * 100);\n }\n\n get canClose(): boolean {\n return !this.isProcessing || this.isCompleted;\n }\n\n startDeletion(): void {\n if (!this.service) {\n console.error('Service not provided to BulkDeleteDialogComponent');\n return;\n }\n\n this.isProcessing = true;\n this.isCompleted = false;\n\n // Process deletions sequentially\n from(this.deleteStatuses)\n .pipe(\n concatMap((deleteStatus, index) => {\n this.currentIndex = index;\n deleteStatus.status = 'processing';\n \n return this.service.delete(deleteStatus.entity.id).pipe(\n concatMap(() => {\n deleteStatus.status = 'success';\n this.successCount++;\n return of(null);\n }),\n catchError((error: any) => {\n // Check if it's actually a success (204 No Content)\n if (error?.status === 204) {\n deleteStatus.status = 'success';\n this.successCount++;\n } else {\n deleteStatus.status = 'error';\n deleteStatus.errorMessage = error?.message || error?.statusText || this.translationService.translate('design.components_ai.bulk_delete_error_generic');\n this.errorCount++;\n }\n \n return of(null);\n })\n );\n })\n )\n .subscribe({\n complete: () => {\n this.currentIndex = this.deleteStatuses.length;\n this.isCompleted = true;\n this.isProcessing = false;\n }\n });\n }\n\n onHide(): void {\n if (!this.canClose) return;\n \n this.visible = false;\n this.visibleChange.emit(false);\n \n if (this.isCompleted && this.successCount > 0) {\n this.onComplete.emit();\n }\n }\n\n onClose(): void {\n this.onHide();\n }\n\n getStatusSeverity(status: string): 'secondary' | 'info' | 'success' | 'danger' {\n switch (status) {\n case 'pending': return 'secondary';\n case 'processing': return 'info';\n case 'success': return 'success';\n case 'error': return 'danger';\n default: return 'secondary';\n }\n }\n\n getStatusLabel(status: string): string {\n return this.translationService.translate(`design.components_ai.bulk_delete_status_${status}`);\n }\n\n getStatusIcon(status: string): string {\n switch (status) {\n case 'pending': return 'pi pi-clock';\n case 'processing': return 'pi pi-spin pi-spinner';\n case 'success': return 'pi pi-check';\n case 'error': return 'pi pi-times';\n default: return 'pi pi-question';\n }\n }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"canClose\"\n [closeOnEscape]=\"canClose\"\n [dismissableMask]=\"false\"\n [style]=\"{ width: '700px', maxWidth: '90vw' }\"\n (onHide)=\"onHide()\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"dialog-header\">\n <i class=\"pi pi-trash header-icon\"></i>\n <h2>{{ 'design.components_ai.bulk_delete_title' | translate }}</h2>\n </div>\n </ng-template>\n\n <div class=\"dialog-content\">\n <!-- Summary -->\n @if (!isProcessing && !isCompleted) {\n <div class=\"summary-section\">\n <p class=\"summary-text\">\n <i class=\"pi pi-exclamation-triangle warning-icon\"></i>\n <span [innerHTML]=\"'design.components_ai.bulk_delete_warning' | translate:{ count: stages.length }\"></span>\n </p>\n <p class=\"summary-description\">\n {{ 'design.components_ai.bulk_delete_description' | translate }}\n </p>\n </div>\n }\n\n <!-- Progress Bar -->\n @if (isProcessing || isCompleted) {\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <span class=\"progress-label\">{{ 'design.components_ai.bulk_delete_progress' | translate }}</span>\n <span class=\"progress-count\">{{ currentIndex }} / {{ deleteStatuses.length }}</span>\n </div>\n <p-progressBar \n [value]=\"progress\" \n [showValue]=\"false\"\n styleClass=\"custom-progress\"\n ></p-progressBar>\n \n <div class=\"progress-stats\">\n <div class=\"stat success\">\n <i class=\"pi pi-check-circle\"></i>\n <span>{{ successCount }} {{ 'design.components_ai.bulk_delete_success_count' | translate }}</span>\n </div>\n @if (errorCount > 0) {\n <div class=\"stat error\">\n <i class=\"pi pi-times-circle\"></i>\n <span>{{ errorCount }} {{ 'design.components_ai.bulk_delete_error_count' | translate }}</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Status List -->\n @if (isProcessing || isCompleted) {\n <div class=\"status-list\">\n @for (item of deleteStatuses; track item.entity) {\n <div class=\"status-item\">\n <div class=\"status-info\">\n <i [class]=\"getStatusIcon(item.status)\" class=\"status-icon\"></i>\n <div class=\"status-details\">\n <span class=\"stage-name\">{{ item.entity[entityNameField] }}</span>\n @if (item.entity[entityCodeField]) {\n <span class=\"stage-code\">{{ 'design.components_ai.bulk_delete_code_label' | translate }}: {{ item.entity[entityCodeField] }}</span>\n }\n </div>\n </div>\n <div class=\"status-badge\">\n <p-tag \n [value]=\"getStatusLabel(item.status)\" \n [severity]=\"getStatusSeverity(item.status)\"\n >\n @if (item.status === 'processing') {\n <i class=\"pi pi-spin pi-spinner\"></i>\n }\n </p-tag>\n @if (item.status === 'error' && item.errorMessage) {\n <small class=\"error-message\">\n {{ item.errorMessage }}\n </small>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Completion Message -->\n @if (isCompleted) {\n <div class=\"completion-section\">\n <div class=\"completion-message\" [class.has-errors]=\"errorCount > 0\">\n <i [class]=\"errorCount > 0 ? 'pi pi-exclamation-circle' : 'pi pi-check-circle'\" class=\"completion-icon\"></i>\n @if (errorCount === 0) {\n <p>\n {{ 'design.components_ai.bulk_delete_success_message' | translate }}\n </p>\n }\n @if (errorCount > 0) {\n <p>\n {{ 'design.components_ai.bulk_delete_completed_with_errors' | translate:{ count: errorCount } }}\n </p>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"dialog-footer\">\n @if (!isProcessing && !isCompleted) {\n <p-button\n [label]=\"'design.components_ai.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onClose()\"\n ></p-button>\n <p-button\n [label]=\"'design.components_ai.bulk_delete_confirm' | translate\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n (onClick)=\"startDeletion()\"\n ></p-button>\n }\n @if (isCompleted) {\n <p-button\n [label]=\"'design.components_ai.close' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onClose()\"\n ></p-button>\n }\n </div>\n </ng-template>\n</p-dialog>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { TranslationService } from '../../services/translation.service';\n\ninterface BreadcrumbData {\n title: string;\n icon?: string;\n}\n\ninterface BreadcrumbItem {\n label: string;\n icon?: string;\n url?: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'sia-breadcrumb',\n standalone: true,\n imports: [CommonModule],\n template: `\n <nav class=\"breadcrumb-container\" aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb-list\">\n <li class=\"breadcrumb-item\" [class.disabled]=\"homeItem.disabled\">\n <a *ngIf=\"!homeItem.disabled && homeItem.url\" \n [href]=\"homeItem.url\" \n class=\"breadcrumb-link\"\n [title]=\"homeItem.label\">\n <i *ngIf=\"homeItem.icon\" [class]=\"homeItem.icon\"></i>\n </a>\n <span *ngIf=\"homeItem.disabled || !homeItem.url\" class=\"breadcrumb-text\">\n <i *ngIf=\"homeItem.icon\" [class]=\"homeItem.icon\"></i>\n </span>\n </li>\n \n <ng-container *ngFor=\"let item of breadcrumbItems; let last = last\">\n <li class=\"breadcrumb-separator\" aria-hidden=\"true\">/</li>\n <li class=\"breadcrumb-item\" [class.active]=\"last\" [class.disabled]=\"item.disabled\">\n <a *ngIf=\"!item.disabled && item.url\" \n [href]=\"item.url\" \n class=\"breadcrumb-link\"\n [title]=\"item.label\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n <span *ngIf=\"item.disabled || !item.url\" class=\"breadcrumb-text\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </span>\n </li>\n </ng-container>\n </ol>\n </nav>\n `,\n styles: [`\n .breadcrumb-container {\n background: transparent;\n padding: 0;\n margin-bottom: 1rem;\n }\n \n .breadcrumb-list {\n display: flex;\n align-items: center;\n list-style: none;\n padding: 0;\n margin: 0;\n flex-wrap: wrap;\n }\n \n .breadcrumb-item {\n display: flex;\n align-items: center;\n }\n \n .breadcrumb-link {\n color: var(--p-text-secondary-color, #64748b);\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n border-radius: 6px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .breadcrumb-link:hover {\n background: var(--p-primary-50, #eff6ff);\n color: var(--p-primary-600, #2563eb);\n }\n \n .breadcrumb-text {\n color: var(--p-text-secondary-color, #64748b);\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .breadcrumb-item.active .breadcrumb-text,\n .breadcrumb-item.active .breadcrumb-link {\n color: var(--p-primary-600, #2563eb);\n font-weight: 600;\n background: var(--p-primary-50, #eff6ff);\n }\n \n .breadcrumb-item.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n \n .breadcrumb-separator {\n color: var(--p-text-muted-color, #94a3b8);\n margin: 0 8px;\n font-size: 14px;\n }\n \n .breadcrumb-link i,\n .breadcrumb-text i {\n font-size: 16px;\n }\n `]\n})\nexport class BreadcrumbComponent implements OnInit {\n @Input() translationPrefix: string = 'design.components_ai';\n @Input() isProduction: boolean = false;\n \n breadcrumbItems: BreadcrumbItem[] = [];\n homeItem: BreadcrumbItem = { label: 'Home', icon: 'pi pi-home', disabled: true };\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private translationService: TranslationService\n ) {}\n\n ngOnInit(): void {\n this.updateHomeItem();\n this.buildBreadcrumbs();\n \n // Atualiza breadcrumbs quando a navegação muda\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => this.buildBreadcrumbs());\n }\n\n private updateHomeItem(): void {\n // Só mostra o link do home em desenvolvimento\n if (!this.isProduction) {\n this.homeItem = {\n icon: 'pi pi-home',\n url: '#/main',\n label: this.t('breadcrumb_home'),\n disabled: false\n };\n } else {\n // Em produção, o home não tem link (apenas ícone)\n this.homeItem = {\n icon: 'pi pi-home',\n label: this.t('breadcrumb_home'),\n disabled: true\n };\n }\n }\n\n private buildBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n let currentRoute: ActivatedRoute | null = this.activatedRoute.root;\n let url = '';\n let lastBreadcrumbLabel = '';\n\n // Percorre toda a árvore de rotas\n while (currentRoute) {\n // Verifica se há segmentos de URL\n if (currentRoute.snapshot.url.length > 0) {\n const routeURL = currentRoute.snapshot.url.map(segment => segment.path).join('/');\n url += `/${routeURL}`;\n }\n \n // Verifica se a rota tem dados de breadcrumb\n const breadcrumbData = currentRoute.snapshot.data['breadcrumb'] as BreadcrumbData;\n \n // Adiciona o breadcrumb se existir e não for duplicado\n if (breadcrumbData) {\n const label = this.t(breadcrumbData.title);\n \n // Só adiciona se não for o mesmo label do anterior (evita duplicação)\n if (label !== lastBreadcrumbLabel) {\n breadcrumbs.push({\n label: label,\n icon: breadcrumbData.icon,\n url: url ? `#${url}` : undefined\n });\n lastBreadcrumbLabel = label;\n }\n }\n\n // Move para a próxima rota filha\n currentRoute = currentRoute.firstChild;\n }\n\n // O último item não deve ter link (está desabilitado)\n if (breadcrumbs.length > 0) {\n const lastItem = breadcrumbs[breadcrumbs.length - 1];\n lastItem.url = undefined;\n lastItem.disabled = true;\n }\n\n this.breadcrumbItems = breadcrumbs;\n }\n\n private t(key: string): string {\n return this.translationService.translate(key);\n }\n}\n","import { Directive, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { TableLazyLoadEvent } from 'primeng/table';\nimport { MessageService, ConfirmationService } from 'primeng/api';\nimport { TranslationService } from '../../services/translation.service';\nimport { EntityService } from '../../services/entity.service';\nimport { ColumnOption } from '../export-dialog/export-dialog.component';\n\n/**\n * Base class for entity list components\n * Eliminates code duplication between feature list components\n */\n@Directive()\nexport abstract class EntityListBaseComponent<T extends { id?: string; name?: string }> implements OnInit {\n // Data\n entities: T[] = [];\n selectedEntities: T[] = [];\n totalRecords: number = 0;\n \n // Filters\n filterValues: { [key: string]: any } = {};\n \n // Pagination and sorting\n currentPage: number = 0;\n pageSize: number = 10;\n sortField: string = '';\n sortOrder: number = 1;\n\n // UI control\n loading: boolean = false;\n showExportDialog: boolean = false;\n showFormDialog: boolean = false;\n showBulkDeleteDialog: boolean = false;\n selectedEntityForEdit: T | null = null;\n firstLoad: boolean = true;\n\n // Configuration\n config: any;\n exportColumns: ColumnOption[] = [];\n\n constructor(\n protected service: EntityService<T>,\n protected messageService: MessageService,\n protected confirmationService: ConfirmationService,\n protected translationService: TranslationService,\n protected cdr: ChangeDetectorRef\n ) {}\n\n abstract ngOnInit(): void;\n abstract getEntityTranslationKey(): string;\n abstract getEntityPluralTranslationKey(): string;\n abstract buildFilterQuery(): string;\n\n /**\n * Load data from API\n */\n loadData(event?: TableLazyLoadEvent): void {\n if (this.firstLoad && !event) {\n this.firstLoad = false;\n return;\n }\n\n this.loading = true;\n\n if (event) {\n this.currentPage = event.first! / event.rows!;\n this.pageSize = event.rows!;\n \n if (event.sortField) {\n this.sortField = event.sortField as string;\n this.sortOrder = event.sortOrder!;\n }\n }\n\n const filterQuery = this.buildFilterQuery();\n\n const listParams: any = {\n page: this.currentPage,\n size: this.pageSize\n };\n\n if (filterQuery) {\n listParams.filterQuery = filterQuery;\n }\n\n if (this.sortField) {\n const sortDirection = this.sortOrder === 1 ? 'asc' : 'desc';\n listParams.sort = [`${this.sortField},${sortDirection}`];\n }\n\n this.service.list(listParams).subscribe({\n next: (response: any) => {\n this.entities = response.contents || [];\n this.totalRecords = response.totalElements || 0;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (error: any) => {\n console.error(`Error loading ${this.getEntityPluralTranslationKey()}:`, error);\n this.messageService.add({\n severity: 'error',\n summary: this.translationService.translate('design.components_ai.error'),\n detail: this.translationService.translate('design.components_ai.load_error', { \n entityType: this.translationService.translate(this.getEntityPluralTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n /**\n * Apply filters and reload data\n */\n onApplyFilters(filterValues: any): void {\n this.filterValues = filterValues;\n this.currentPage = 0;\n this.selectedEntities = [];\n \n const event: TableLazyLoadEvent = {\n first: 0,\n rows: this.pageSize,\n sortField: this.sortField,\n sortOrder: this.sortOrder\n };\n \n this.loadData(event);\n }\n\n /**\n * Clear filters and reload data\n */\n onClearFilters(): void {\n this.filterValues = {};\n this.onApplyFilters({});\n }\n\n clearSelection(): void {\n this.selectedEntities = [];\n }\n\n onAdd(): void {\n this.selectedEntityForEdit = null;\n this.showFormDialog = true;\n }\n\n onEdit(entity: T): void {\n this.selectedEntityForEdit = entity;\n this.showFormDialog = true;\n }\n\n onFormSave(): void {\n this.reloadData();\n }\n\n onDelete(entity: T): void {\n this.confirmationService.confirm({\n message: this.translationService.translate('design.components_ai.confirm_delete_message', { \n itemName: entity.name || entity.id \n }),\n header: this.translationService.translate('design.components_ai.confirm_delete'),\n icon: 'pi pi-exclamation-triangle',\n acceptLabel: this.translationService.translate('design.components_ai.yes'),\n rejectLabel: this.translationService.translate('design.components_ai.no'),\n accept: () => {\n this.loading = true;\n this.service.delete(entity.id).subscribe({\n next: () => {\n this.showDeleteSuccess();\n this.reloadData();\n },\n error: (error) => {\n console.error(`Error deleting ${this.getEntityTranslationKey()}:`, error);\n \n if (error.status === 204) {\n this.showDeleteSuccess();\n this.reloadData();\n } else {\n this.showDeleteError();\n }\n }\n });\n }\n });\n }\n\n private showDeleteSuccess(): void {\n this.messageService.add({\n severity: 'success',\n summary: this.translationService.translate('design.components_ai.success'),\n detail: this.translationService.translate('design.components_ai.entity_deleted_success', { \n entityName: this.translationService.translate(this.getEntityTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n\n private showDeleteError(): void {\n this.messageService.add({\n severity: 'error',\n summary: this.translationService.translate('design.components_ai.error'),\n detail: this.translationService.translate('design.components_ai.entity_delete_error', { \n entityName: this.translationService.translate(this.getEntityTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n\n onDeleteSelected(): void {\n if (this.selectedEntities.length === 0) return;\n this.showBulkDeleteDialog = true;\n }\n\n onBulkDeleteComplete(): void {\n this.selectedEntities = [];\n this.reloadData();\n }\n\n /**\n * Reload data (force reload)\n */\n reloadData(): void {\n const event: TableLazyLoadEvent = {\n first: this.currentPage * this.pageSize,\n rows: this.pageSize,\n sortField: this.sortField,\n sortOrder: this.sortOrder\n };\n \n this.loadData(event);\n }\n\n onExport(): void {\n this.showExportDialog = true;\n }\n\n /**\n * Get status label for display (override in child class if needed)\n */\n getStatusLabel(status: string): string {\n return this.translationService.translate(`status_${status.toLowerCase()}`);\n }\n\n /**\n * Get status severity for PrimeNG tag (override in child class if needed)\n */\n getStatusSeverity(status: string): 'success' | 'warn' | 'danger' {\n const statusUpper = status.toUpperCase();\n if (statusUpper === 'ACTIVE') return 'success';\n if (statusUpper === 'INACTIVE') return 'warn';\n if (statusUpper === 'DELETED') return 'danger';\n return 'warn';\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Directive para máscara de código postal\n * Usa o locale do cookie por padrão, ou aceita locale por parâmetro\n * Uso: <input siaPostalCodeMask /> -> usa locale do cookie\n * Uso: <input siaPostalCodeMask [postalCodeLocale]=\"'en-US'\" /> -> força ZIP Code\n */\n@Directive({\n selector: '[siaPostalCodeMask]',\n standalone: true\n})\nexport class PostalCodeMaskDirective {\n @Input() postalCodeLocale?: SupportedLanguage;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('keypress', ['$event'])\n onKeyPress(event: KeyboardEvent) {\n const charCode = event.which ? event.which : event.keyCode;\n if (charCode > 31 && (charCode < 48 || charCode > 57)) {\n event.preventDefault();\n return false;\n }\n return true;\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n this.applyMask(pastedText);\n }\n\n private applyMask(value: string) {\n if (!value) {\n this.el.nativeElement.value = '';\n return;\n }\n const masked = this.maskService.applyPostalCodeMask(value, this.postalCodeLocale);\n this.el.nativeElement.value = masked;\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n@Directive({\n selector: '[siaPhoneMask]',\n standalone: true\n})\nexport class PhoneMaskDirective {\n @Input() phoneMaskLocale?: SupportedLanguage;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n this.applyMask(pastedText);\n }\n\n private applyMask(value: string) {\n if (!value) return;\n const masked = this.maskService.applyPhoneMask(value, this.phoneMaskLocale);\n if (masked !== value) {\n this.el.nativeElement.value = masked;\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgControl, FormGroup } from '@angular/forms';\nimport { MaskService } from '../services/mask.service';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n selector: '[siaDocumentMask]',\n standalone: true\n})\nexport class DocumentMaskDirective implements OnInit, OnDestroy, OnChanges {\n @Input() documentType: 'cpf' | 'cnpj' | 'auto' = 'auto';\n @Input() typePerson?: 'NATURAL_PERSON' | 'JURIDICAL_PERSON' | null;\n @Input() typePersonField?: string; // Nome do campo no form que determina o tipo\n @Input() parentForm?: FormGroup; // Referência ao form pai\n\n private typePersonSubscription?: Subscription;\n\n constructor(\n private el: ElementRef,\n private control: NgControl,\n private maskService: MaskService\n ) {}\n\n ngOnInit() {\n this.setupTypePersonWatcher();\n if (this.control.value) {\n this.applyMask(this.control.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['typePerson'] && this.control.value) {\n this.applyMask(this.control.value);\n }\n if (changes['parentForm'] || changes['typePersonField']) {\n this.setupTypePersonWatcher();\n }\n }\n\n ngOnDestroy() {\n this.typePersonSubscription?.unsubscribe();\n }\n\n private setupTypePersonWatcher(): void {\n this.typePersonSubscription?.unsubscribe();\n\n if (this.parentForm && this.typePersonField) {\n const typePersonControl = this.parentForm.get(this.typePersonField);\n if (typePersonControl) {\n // Set initial value\n this.typePerson = typePersonControl.value || 'JURIDICAL_PERSON';\n\n // Watch for changes\n this.typePersonSubscription = typePersonControl.valueChanges.subscribe(value => {\n this.typePerson = value || 'JURIDICAL_PERSON';\n if (this.control.value) {\n // Re-apply mask with new type\n const raw = this.maskService.removeMask(this.control.value);\n this.applyMask(raw);\n }\n });\n }\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any): void {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any): void {\n this.applyMask(event.target.value);\n }\n\n private applyMask(value: string): void {\n if (!value) {\n this.control.control?.setValue('', { emitEvent: false });\n return;\n }\n\n const type = this.typePerson || 'JURIDICAL_PERSON';\n const masked = this.maskService.applyDocumentMask(value, type);\n this.control.control?.setValue(masked, { emitEvent: false });\n this.el.nativeElement.value = masked;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup } from '@angular/forms';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslatePipe } from '../../../pipes/translate.pipe';\nimport { TranslationService } from '../../../services/translation.service';\n\n/**\n * Componente wrapper para campos de formulário dinâmico\n * Centraliza a renderização de label, campo e mensagem de erro\n */\n@Component({\n selector: 'sia-dynamic-field-wrapper',\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe\n ],\n template: `\n <div class=\"field\">\n <label [for]=\"field.field\">\n {{ field.label | translate }}\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\n </label>\n \n <!-- Conteúdo do campo (projetado via ng-content) -->\n <ng-content></ng-content>\n \n <small *ngIf=\"isFieldInvalid()\" class=\"p-error\">\n {{ getFieldError() }}\n </small>\n </div>\n `,\n styles: [`\n .field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n label {\n font-weight: 500;\n color: var(--text-color);\n\n .required-asterisk {\n color: var(--p-red-500);\n margin-left: 0.25rem;\n }\n }\n\n small.p-error {\n margin-top: 0.25rem;\n color: var(--p-red-500);\n }\n }\n `]\n})\nexport class DynamicFieldWrapperComponent {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\n\n isRequired(): boolean {\n return this.field.required === true && this.mode === 'form';\n }\n\n isFieldInvalid(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n getFieldError(): string {\n const control = this.form.get(this.field.field);\n \n if (control?.hasError('required')) {\n return this.translationService.translate('design.components_ai.required_field');\n }\n if (control?.hasError('minlength')) {\n const minLength = this.field.minLength || control.errors?.['minlength'].requiredLength;\n return this.translationService.translate('design.components_ai.min_length_error', { length: minLength });\n }\n if (control?.hasError('maxlength')) {\n const maxLength = this.field.maxLength || control.errors?.['maxlength'].requiredLength;\n return this.translationService.translate('design.components_ai.max_length_error', { length: maxLength });\n }\n if (control?.hasError('min')) {\n const min = this.field.min || control.errors?.['min'].min;\n return this.translationService.translate('design.components_ai.min_value_error', { value: min });\n }\n if (control?.hasError('max')) {\n const max = this.field.max || control.errors?.['max'].max;\n return this.translationService.translate('design.components_ai.max_value_error', { value: max });\n }\n return '';\n }\n}\n","/**\n * Helper para métodos de tradução comuns\n */\nexport class TranslationHelper {\n /**\n * Traduz uma chave usando o prefixo da biblioteca\n */\n static translate(\n translationService: any,\n key: string,\n params?: { [key: string]: any }\n ): string {\n if (!translationService) {\n return key;\n }\n\n // Se a chave já tem o prefixo, usa diretamente\n const fullKey = key.includes('.') ? key : `design.components_ai.${key}`;\n const translated = translationService.translate(fullKey, params);\n\n // Se params foi fornecido e a tradução contém placeholders, fazer replace manual\n if (params && translated.includes('{{')) {\n return Object.keys(params).reduce((text, paramKey) => {\n return text.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), params[paramKey]);\n }, translated);\n }\n\n return translated;\n }\n\n /**\n * Gera placeholder para campos de filtro\n */\n static getFilterPlaceholder(\n translationService: any,\n mode: 'form' | 'filter',\n fieldLabel: string,\n customPlaceholder?: string,\n isSelect: boolean = false\n ): string {\n if (mode === 'filter') {\n const key = isSelect ? 'filter_select_placeholder' : 'filter_search_placeholder';\n return this.translate(translationService, key, { label: fieldLabel.toLowerCase() });\n }\n return customPlaceholder || '';\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { TranslationHelper } from '../../../utils/translation.helper';\n\n/**\n * Classe base abstrata para todos os campos do dynamic-form\n * Centraliza lógica comum de validação e placeholder\n */\n@Directive()\nexport abstract class DynamicFieldBaseComponent {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(protected translationService: TranslationService) {}\n\n /**\n * Verifica se o campo está inválido e foi tocado/modificado\n */\n isFieldInvalid(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n /**\n * Verifica se o campo foi modificado\n */\n isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n /**\n * Retorna o placeholder apropriado baseado no modo (form/filter)\n */\n getPlaceholder(isSelect: boolean = false): string {\n return TranslationHelper.getFilterPlaceholder(\n this.translationService,\n this.mode,\n this.field.label,\n this.field.placeholder,\n isSelect\n );\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TranslationService } from '../../../services/translation.service';\nimport { PostalCodeMaskDirective } from '../../../directives/postal-code-mask.directive';\nimport { PhoneMaskDirective } from '../../../directives/phone-mask.directive';\nimport { DocumentMaskDirective } from '../../../directives/document-mask.directive';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-text',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n PostalCodeMaskDirective,\n PhoneMaskDirective,\n DocumentMaskDirective,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <input\n *ngIf=\"!field.mask && !field.usePostalCodeMask && !field.usePhoneMask\"\n pInputText\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Código Postal -->\n <input\n *ngIf=\"field.mask === 'cep' || field.mask === 'postalCode' || field.usePostalCodeMask\"\n pInputText\n siaPostalCodeMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Telefone -->\n <input\n *ngIf=\"field.mask === 'phone' || field.usePhoneMask\"\n pInputText\n siaPhoneMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Documento (dinâmica baseada em typePerson) -->\n <input\n *ngIf=\"field.mask === 'document'\"\n pInputText\n siaDocumentMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [parentForm]=\"form\"\n [typePersonField]=\"field.maskDependsOn || 'typePerson'\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n\n <!-- Input com máscara CPF fixa -->\n <input\n *ngIf=\"field.mask === 'cpf'\"\n pInputText\n siaDocumentMask\n [typePerson]=\"'NATURAL_PERSON'\"\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n\n <!-- Input com máscara CNPJ fixa (alfanumérico) -->\n <input\n *ngIf=\"field.mask === 'cnpj'\"\n pInputText\n siaDocumentMask\n [typePerson]=\"'JURIDICAL_PERSON'\"\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n input {\n width: 100%;\n }\n `]\n})\nexport class DynamicFieldTextComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-number',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputNumberModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-inputNumber\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [min]=\"field.min\"\n [max]=\"field.max\"\n [minFractionDigits]=\"field.minFractionDigits || 0\"\n [maxFractionDigits]=\"field.maxFractionDigits || 2\"\n [mode]=\"field.numberMode || 'decimal'\"\n [currency]=\"field.currency || 'BRL'\"\n [locale]=\"field.locale || 'pt-BR'\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n styleClass=\"w-full\">\n </p-inputNumber>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-inputNumber {\n width: 100%;\n\n .p-inputnumber {\n width: 100%;\n }\n\n input {\n width: 100%;\n }\n }\n `]\n})\nexport class DynamicFieldNumberComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CalendarModule } from 'primeng/calendar';\nimport { Subscription } from 'rxjs';\nimport { TranslationService } from '../../../services/translation.service';\nimport { LocaleService } from '../../../services/locale.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-date',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CalendarModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-calendar\n *ngIf=\"calendarVisible\"\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [dateFormat]=\"currentDateFormat\"\n [showIcon]=\"true\"\n [showButtonBar]=\"true\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n [appendTo]=\"'body'\"\n styleClass=\"w-full\">\n </p-calendar>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-calendar {\n width: 100%;\n .p-calendar { width: 100%; }\n input { width: 100%; }\n }\n `]\n})\nexport class DynamicFieldDateComponent extends DynamicFieldBaseComponent implements OnInit, OnDestroy {\n currentDateFormat = 'dd/mm/yy';\n calendarVisible = true;\n private langSub?: Subscription;\n\n constructor(\n translationService: TranslationService,\n private localeService: LocaleService,\n private cdr: ChangeDetectorRef\n ) {\n super(translationService);\n }\n\n ngOnInit(): void {\n this.updateDateFormat();\n this.langSub = this.translationService.currentLanguage$.subscribe(() => {\n this.refreshCalendar();\n });\n }\n\n ngOnDestroy(): void {\n this.langSub?.unsubscribe();\n }\n\n /**\n * Força re-criação do p-calendar para aplicar novo dateFormat e locale\n */\n private refreshCalendar(): void {\n this.calendarVisible = false;\n this.cdr.detectChanges();\n this.updateDateFormat();\n this.calendarVisible = true;\n this.cdr.detectChanges();\n }\n\n private updateDateFormat(): void {\n this.currentDateFormat = this.field?.dateFormat || this.localeService.getPrimeNGDateFormat();\n }\n\n override getPlaceholder(): string {\n return super.getPlaceholder(true);\n }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\nimport { TranslationHelper } from '../../../utils/translation.helper';\n\n@Component({\n selector: 'sia-dynamic-field-dropdown',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DropdownModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-dropdown\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [options]=\"getOptions()\"\n [optionLabel]=\"field.optionLabel || 'label'\"\n [optionValue]=\"field.optionValue || 'value'\"\n [placeholder]=\"getPlaceholder()\"\n [showClear]=\"mode === 'filter' || field.showClear\"\n [filter]=\"field.filter || false\"\n [filterBy]=\"field.filterBy\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n [appendTo]=\"'body'\"\n panelStyleClass=\"dynamic-form-dropdown-panel\"\n styleClass=\"w-full\">\n </p-dropdown>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-dropdown {\n width: 100%;\n\n .p-dropdown {\n width: 100%;\n }\n }\n\n /* Estilos para o painel do dropdown */\n .dynamic-form-dropdown-panel {\n min-width: 100% !important;\n }\n `],\n // Estilos globais para o painel do dropdown\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFieldDropdownComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n\n // Override customizado para dropdown\n override getPlaceholder(): string {\n if (this.mode === 'filter') {\n return TranslationHelper.translate(\n this.translationService,\n 'filter_select_placeholder',\n { label: this.field.label.toLowerCase() }\n );\n }\n return this.field.placeholder || TranslationHelper.translate(this.translationService, 'select_option');\n }\n\n getOptions(): any[] {\n if (this.field.type === 'enum' && this.field.enumValues) {\n return this.field.enumValues.map(value => ({\n label: this.field.enumLabels?.[value] || value,\n value: value\n }));\n }\n if (this.field.type === 'enum' && this.field.enumOptions) {\n return this.field.enumOptions;\n }\n return this.field.options || [];\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DialogModule } from 'primeng/dialog';\nimport { TableModule } from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslatePipe } from '../../../pipes/translate.pipe';\nimport { TranslationHelper } from '../../../utils/translation.helper';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { LookupColumn } from '../../../models/entity-list.config';\n\n@Component({\n selector: 'sia-dynamic-field-lookup',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n ButtonModule,\n InputTextModule,\n DialogModule,\n TableModule,\n TooltipModule,\n TranslatePipe,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\" class=\"lookup-field\" [ngClass]=\"{'disabled': isFieldDisabled()}\">\n <!-- Hidden input para o formControl -->\n <input type=\"hidden\" [formControlName]=\"field.field\" />\n \n <div class=\"lookup-input-group\">\n <input\n pInputText\n [value]=\"displayValue\"\n [placeholder]=\"getPlaceholder()\"\n [class.p-invalid]=\"isFieldInvalid()\"\n [disabled]=\"isFieldDisabled()\"\n readonly\n class=\"lookup-display\"\n (click)=\"openLookup()\"\n />\n <div class=\"lookup-buttons\">\n <p-button\n *ngIf=\"currentValue\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"clearValue()\"\n [disabled]=\"isFieldDisabled()\"\n pTooltip=\"Limpar\"\n tooltipPosition=\"top\"\n size=\"small\"\n ></p-button>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"openLookup()\"\n [disabled]=\"isFieldDisabled()\"\n pTooltip=\"Buscar\"\n tooltipPosition=\"top\"\n size=\"small\"\n ></p-button>\n </div>\n </div>\n </div>\n\n <!-- Lookup Dialog -->\n <p-dialog\n [(visible)]=\"showLookupDialog\"\n [modal]=\"true\"\n [style]=\"{ width: '800px', maxHeight: '80vh' }\"\n [contentStyle]=\"{ maxHeight: 'calc(80vh - 120px)', overflow: 'auto' }\"\n [draggable]=\"false\"\n [resizable]=\"true\"\n [header]=\"'Selecionar ' + (field.label | translate)\"\n [appendTo]=\"'body'\"\n (onHide)=\"onDialogHide()\"\n >\n <div class=\"lookup-dialog-content\">\n <!-- Search Input -->\n <div class=\"search-wrapper\">\n <input\n pInputText\n [(ngModel)]=\"searchTerm\"\n [placeholder]=\"'Buscar ' + (field.label | translate).toLowerCase() + '...'\"\n (keydown.enter)=\"onSearch()\"\n class=\"search-input-full\"\n />\n <div class=\"search-buttons-inside\">\n <p-button\n *ngIf=\"searchTerm\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"clearSearch()\"\n class=\"search-button-clear\"\n pTooltip=\"Limpar busca\"\n tooltipPosition=\"top\"\n ></p-button>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"onSearch()\"\n class=\"search-button-search\"\n pTooltip=\"Buscar\"\n tooltipPosition=\"top\"\n ></p-button>\n </div>\n </div>\n\n <!-- Data Table -->\n <p-table\n [value]=\"filteredData\"\n [loading]=\"loading\"\n [paginator]=\"true\"\n [rows]=\"pageSize\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Mostrando {first} a {last} de {totalRecords} registros\"\n dataKey=\"id\"\n [rowHover]=\"true\"\n responsiveLayout=\"scroll\"\n styleClass=\"p-datatable-striped lookup-table\"\n [(selection)]=\"selectedItem\"\n (onRowSelect)=\"onRowSelect($event)\"\n selectionMode=\"single\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\" [style.width]=\"col.width\">\n {{ col.header }}\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item>\n <tr [pSelectableRow]=\"item\">\n <td *ngFor=\"let col of columns\">\n {{ getFieldValue(item, col.field) }}\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"columns.length\" class=\"empty-message\">\n <div class=\"empty-state\">\n <i class=\"pi pi-search\"></i>\n <p>Nenhum registro encontrado</p>\n <small>Tente ajustar os termos de busca</small>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </p-dialog>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n .lookup-field {\n width: 100%;\n position: relative;\n }\n\n .lookup-input-group {\n position: relative;\n width: 100%;\n \n .lookup-display {\n width: 100%;\n cursor: pointer;\n height: 2.857rem;\n padding: 0.75rem 4rem 0.75rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n \n &:focus {\n outline: none;\n }\n \n &:hover {\n background: transparent;\n }\n }\n\n .lookup-buttons {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 2px;\n z-index: 10;\n }\n\n ::ng-deep .p-button {\n width: 2rem !important;\n height: 2rem !important;\n min-width: 2rem !important;\n min-height: 2rem !important;\n padding: 0 !important;\n margin: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n box-sizing: border-box !important;\n \n .p-button-icon {\n margin: 0 !important;\n font-size: 0.875rem !important;\n }\n \n .p-button-label {\n display: none !important;\n }\n }\n }\n\n .lookup-dialog-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n padding: 0;\n\n .search-wrapper {\n position: relative;\n margin-bottom: 16px;\n width: 100%;\n\n .search-input-full {\n width: 100%;\n padding-right: 5.5rem;\n }\n\n .search-buttons-inside {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 2px;\n \n ::ng-deep .p-button {\n width: 2.5rem !important;\n height: 2.5rem !important;\n }\n }\n }\n\n .lookup-table {\n flex: 1;\n \n .empty-state {\n text-align: center;\n padding: 32px;\n color: var(--p-text-color-secondary);\n\n i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n }\n\n p {\n margin: 8px 0;\n font-size: 16px;\n }\n\n small {\n font-size: 14px;\n }\n }\n }\n }\n `]\n})\nexport class DynamicFieldLookupComponent implements OnInit {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() formGroup!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n displayValue: string = '';\n showLookupDialog: boolean = false;\n loading: boolean = false;\n searchTerm: string = '';\n \n data: any[] = [];\n filteredData: any[] = [];\n totalRecords: number = 0;\n currentPage: number = 0;\n pageSize: number = 5;\n selectedItem: any = null;\n \n columns: LookupColumn[] = [];\n displayField: string = 'name';\n valueField: string = 'id';\n searchFields: string[] = ['name'];\n\n constructor(private translationService: TranslationService) {}\n\n ngOnInit(): void {\n this.setupLookupConfig();\n this.watchValueChanges();\n }\n\n private watchValueChanges(): void {\n const control = this.getFormControl();\n if (control) {\n // Carregar valor inicial\n if (control.value) {\n this.handleValueDisplay(control.value);\n }\n \n // Observar mudanças\n control.valueChanges.subscribe((value: any) => {\n if (value !== null && value !== undefined && value !== '') {\n this.handleValueDisplay(value);\n } else {\n this.displayValue = '';\n }\n });\n }\n }\n\n /**\n * Obtém o FormControl, lidando com campos aninhados (com ponto no nome)\n */\n private getFormControl() {\n if (!this.field?.field) {\n return null;\n }\n\n // Acessa diretamente via controls[] pois form.get() não funciona com campos que têm ponto\n return this.form.controls[this.field.field];\n }\n\n private get value(): any {\n const control = this.getFormControl();\n return control?.value;\n }\n\n get currentValue(): any {\n return this.value;\n }\n\n private setValue(value: any): void {\n const control = this.getFormControl();\n control?.setValue(value);\n }\n\n private setupLookupConfig(): void {\n if (this.field) {\n this.displayField = this.field.lookupDisplayField || 'name';\n this.valueField = this.field.lookupValueField || 'id';\n this.searchFields = this.field.lookupSearchFields || ['name'];\n this.columns = this.field.lookupColumns || [\n { field: this.displayField, header: 'Nome', width: '100%' }\n ];\n }\n }\n\n private handleValueDisplay(value: any): void {\n if (value === null || value === undefined || value === '') {\n this.displayValue = '';\n return;\n }\n \n if (typeof value === 'object' && value !== null) {\n this.displayValue = this.formatDisplayValue(value);\n // Keep the full object in the form control\n return;\n }\n \n // Se é um ID (string ou number), não fazer requisição\n // Deixar vazio e só carregar quando abrir o lookup\n if (typeof value === 'string' || typeof value === 'number') {\n this.displayValue = '';\n return;\n }\n }\n\n private formatDisplayValue(item: any): string {\n if (!item) return '';\n \n if (this.field?.lookupDisplayFields && this.field.lookupDisplayFields.length > 0) {\n const values = this.field.lookupDisplayFields\n .map(fieldName => this.getFieldValue(item, fieldName))\n .filter(value => value !== null && value !== undefined && value !== '');\n \n return values.join(' - ');\n }\n \n return this.getFieldValue(item, this.displayField) || '';\n }\n\n isFieldInvalid(): boolean {\n const control = this.getFormControl();\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n isFieldDisabled(): boolean {\n const control = this.getFormControl();\n return control?.disabled || false;\n }\n\n getPlaceholder(): string {\n return TranslationHelper.getFilterPlaceholder(\n this.translationService,\n this.mode,\n this.field.label,\n this.field.placeholder\n );\n }\n\n openLookup(): void {\n if (this.isFieldDisabled()) {\n return;\n }\n \n this.updateSelectedItem();\n \n this.showLookupDialog = true;\n this.currentPage = 0;\n this.searchTerm = '';\n this.loadData();\n }\n\n onDialogHide(): void {\n this.searchTerm = '';\n this.currentPage = 0;\n }\n\n onPageChange(event: any): void {\n if (!this.showLookupDialog) {\n return;\n }\n \n this.currentPage = event.first / event.rows;\n this.loadData();\n }\n\n private loadData(): void {\n if (!this.field?.lookupService) {\n return;\n }\n\n this.loading = true;\n \n const listParams: any = { \n page: this.currentPage,\n size: this.pageSize\n };\n\n if (this.field.lookupSort) {\n listParams.sort = this.field.lookupSort;\n }\n \n if (this.searchTerm.trim()) {\n const term = this.searchTerm.trim();\n const filterConditions: string[] = [];\n const isNumericTerm = !isNaN(Number(term)) && term !== '';\n \n this.searchFields.forEach(field => {\n const column = this.columns.find(col => col.field === field);\n const fieldType = column?.type || 'text';\n \n if (fieldType === 'number') {\n if (isNumericTerm) {\n filterConditions.push(`${field} eq ${term}`);\n }\n } else {\n const upperTerm = term.toUpperCase();\n filterConditions.push(`UPPER(${field}) like '%${upperTerm}%'`);\n }\n });\n \n if (filterConditions.length > 0) {\n listParams.filterQuery = filterConditions.join(' or ');\n }\n }\n \n if (this.field.lookupFilters) {\n Object.keys(this.field.lookupFilters).forEach(key => {\n listParams[key] = this.field.lookupFilters![key];\n });\n }\n \n if (this.field.lookupDynamicFilters && this.formGroup) {\n const dynamicFilters = this.field.lookupDynamicFilters(this.formGroup.value);\n \n const dynamicFilterConditions: string[] = [];\n Object.keys(dynamicFilters).forEach(key => {\n const value = dynamicFilters[key];\n if (value !== null && value !== undefined) {\n dynamicFilterConditions.push(`${key} eq '${value}'`);\n }\n });\n \n if (dynamicFilterConditions.length > 0) {\n const dynamicFilterQuery = dynamicFilterConditions.join(' and ');\n if (listParams.filterQuery) {\n listParams.filterQuery = `(${listParams.filterQuery}) and (${dynamicFilterQuery})`;\n } else {\n listParams.filterQuery = dynamicFilterQuery;\n }\n }\n }\n \n this.field.lookupService.list(listParams).subscribe({\n next: (response: any) => {\n this.data = response.contents || [];\n this.filteredData = [...this.data];\n this.totalRecords = response.totalElements || 0;\n \n this.updateSelectedItem();\n \n // Após carregar os dados da grid, se temos um valor selecionado mas sem displayValue,\n // tentar encontrar o item nos dados carregados\n if (this.value && !this.displayValue) {\n const item = this.filteredData.find(i => i[this.valueField] === this.value);\n if (item) {\n this.displayValue = this.formatDisplayValue(item);\n }\n }\n \n this.loading = false;\n },\n error: (_error: unknown) => {\n this.data = [];\n this.filteredData = [];\n this.totalRecords = 0;\n this.loading = false;\n }\n });\n }\n\n private updateSelectedItem(): void {\n if (!this.value) {\n this.selectedItem = null;\n return;\n }\n \n const item = this.filteredData.find(i => i[this.valueField] === this.value);\n if (item) {\n this.selectedItem = item;\n }\n }\n\n onSearch(): void {\n if (!this.showLookupDialog) {\n return;\n }\n \n this.currentPage = 0;\n this.loadData();\n }\n\n clearSearch(): void {\n this.searchTerm = '';\n this.currentPage = 0;\n this.loadData();\n }\n\n selectItem(item: any): void {\n // Always set the full object, not just the ID\n this.setValue(item);\n this.displayValue = this.formatDisplayValue(item);\n this.showLookupDialog = false;\n }\n\n onRowSelect(event: any): void {\n this.selectItem(event.data);\n }\n\n clearValue(): void {\n this.setValue(null);\n this.displayValue = '';\n this.selectedItem = null;\n }\n\n getFieldValue(item: any, field: string): any {\n return field.split('.').reduce((obj, key) => obj?.[key], item) || '';\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputTextarea } from 'primeng/inputtextarea';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-textarea',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextarea,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <textarea\n pInputTextarea\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [rows]=\"field.rows || 3\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\">\n </textarea>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n textarea {\n width: 100%;\n resize: vertical;\n }\n `]\n})\nexport class DynamicFieldTextareaComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PanelModule } from 'primeng/panel';\nimport { DialogModule } from 'primeng/dialog';\nimport { DrawerModule } from 'primeng/drawer';\nimport { ButtonModule } from 'primeng/button';\nimport { \n DynamicFormFieldConfig, \n DynamicFormSection,\n DynamicFormDisplayMode,\n DynamicFormDialogConfig,\n DynamicFormDrawerConfig\n} from './models/dynamic-form.models';\nimport { TranslationService } from '../../services/translation.service';\nimport { MaskService } from '../../services/mask.service';\nimport { LocaleService } from '../../services/locale.service';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { DynamicFieldTextComponent } from './fields/dynamic-field-text.component';\nimport { DynamicFieldNumberComponent } from './fields/dynamic-field-number.component';\nimport { DynamicFieldDateComponent } from './fields/dynamic-field-date.component';\nimport { DynamicFieldDropdownComponent } from './fields/dynamic-field-dropdown.component';\nimport { DynamicFieldLookupComponent } from './fields/dynamic-field-lookup.component';\nimport { DynamicFieldTextareaComponent } from './fields/dynamic-field-textarea.component';\n\n@Component({\n selector: 'sia-dynamic-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PanelModule,\n DialogModule,\n DrawerModule,\n ButtonModule,\n TranslatePipe,\n DynamicFieldTextComponent,\n DynamicFieldNumberComponent,\n DynamicFieldDateComponent,\n DynamicFieldDropdownComponent,\n DynamicFieldLookupComponent,\n DynamicFieldTextareaComponent\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss'\n})\nexport class DynamicFormComponent implements OnInit, OnChanges {\n @Input() formFields: DynamicFormFieldConfig[] = [];\n @Input() formSections: DynamicFormSection[] = [];\n @Input() fixedFilters: DynamicFormFieldConfig[] = []; // Filtros fixos (sempre visíveis no topo)\n @Input() filterSections: DynamicFormSection[] = []; // Seções de filtros (colapsáveis)\n @Input() entityData: any = null;\n @Input() mode: 'form' | 'filter' | 'inline-edit' = 'form';\n \n // Display Mode Configuration\n @Input() displayMode: DynamicFormDisplayMode = 'inline';\n @Input() visible: boolean = false;\n @Input() dialogConfig: DynamicFormDialogConfig = {};\n @Input() drawerConfig: DynamicFormDrawerConfig = {};\n \n // Button Configuration\n @Input() showSubmitButton: boolean = false;\n @Input() showCancelButton: boolean = false;\n @Input() submitButtonLabel?: string;\n @Input() cancelButtonLabel?: string;\n @Input() submitButtonIcon: string = 'pi pi-check';\n @Input() cancelButtonIcon: string = 'pi pi-times';\n \n @Output() formReady = new EventEmitter<FormGroup>();\n @Output() formSubmit = new EventEmitter<any>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onCancel = new EventEmitter<void>();\n @Output() fieldSave = new EventEmitter<{ field: string, value: any }>();\n\n form!: FormGroup;\n loading: boolean = false;\n \n // Inline edit mode state\n editingField: string | null = null;\n savingField: boolean = false;\n\n get hasFields(): boolean {\n return this.formFields.length > 0;\n }\n\n get hasSections(): boolean {\n return this.formSections.length > 0;\n }\n\n get hasFixedFilters(): boolean {\n return this.fixedFilters.length > 0;\n }\n\n get hasFilterSections(): boolean {\n return this.filterSections.length > 0;\n }\n\n get allFields(): DynamicFormFieldConfig[] {\n // Retorna todos os campos (diretos + das seções + filtros fixos + seções de filtros)\n const sectionFields = this.formSections.flatMap(section => section.fields);\n const filterSectionFields = this.filterSections.flatMap(section => section.fields);\n return [...this.formFields, ...sectionFields, ...this.fixedFilters, ...filterSectionFields];\n }\n\n get isInlineMode(): boolean {\n return this.displayMode === 'inline';\n }\n\n get isInlineEditMode(): boolean {\n return this.mode === 'inline-edit';\n }\n\n get fieldMode(): 'form' | 'filter' {\n return this.isInlineEditMode ? 'form' : this.mode as 'form' | 'filter';\n }\n\n get isDialogMode(): boolean {\n return this.displayMode === 'dialog';\n }\n\n get isDrawerMode(): boolean {\n return this.displayMode === 'drawer';\n }\n\n // Dialog configuration with defaults\n get dialogHeader(): string {\n return this.dialogConfig.header || this.translationService.translate('design.components_ai.form');\n }\n\n get dialogWidth(): string {\n return this.dialogConfig.width || '600px';\n }\n\n get dialogDraggable(): boolean {\n return this.dialogConfig.draggable !== undefined ? this.dialogConfig.draggable : false;\n }\n\n get dialogResizable(): boolean {\n return this.dialogConfig.resizable !== undefined ? this.dialogConfig.resizable : false;\n }\n\n get dialogMaximizable(): boolean {\n return this.dialogConfig.maximizable !== undefined ? this.dialogConfig.maximizable : false;\n }\n\n get dialogCloseOnEscape(): boolean {\n return this.dialogConfig.closeOnEscape !== undefined ? this.dialogConfig.closeOnEscape : true;\n }\n\n get dialogDismissableMask(): boolean {\n return this.dialogConfig.dismissableMask !== undefined ? this.dialogConfig.dismissableMask : false;\n }\n\n // Drawer configuration with defaults\n get drawerHeader(): string {\n return this.drawerConfig.header || this.translationService.translate('design.components_ai.form');\n }\n\n get drawerPosition(): 'left' | 'right' | 'top' | 'bottom' {\n return this.drawerConfig.position || 'right';\n }\n\n get drawerShowCloseIcon(): boolean {\n return this.drawerConfig.showCloseIcon !== undefined ? this.drawerConfig.showCloseIcon : true;\n }\n\n get drawerCloseOnEscape(): boolean {\n return this.drawerConfig.closeOnEscape !== undefined ? this.drawerConfig.closeOnEscape : true;\n }\n\n get drawerDismissable(): boolean {\n return this.drawerConfig.dismissable !== undefined ? this.drawerConfig.dismissable : true;\n }\n\n get drawerStyle(): { [key: string]: string } {\n const position = this.drawerPosition;\n const isHorizontal = position === 'left' || position === 'right';\n \n // Se tem customWidth, usa ela\n if (this.drawerConfig.customWidth) {\n return isHorizontal \n ? { width: this.drawerConfig.customWidth }\n : { height: this.drawerConfig.customWidth };\n }\n \n // Usa o tamanho padronizado\n const size = this.drawerConfig.size || 'medium';\n const sizeMap = {\n 'small': isHorizontal ? '25%' : '25vh',\n 'medium': isHorizontal ? '40%' : '40vh',\n 'large': isHorizontal ? '60%' : '60vh',\n 'xlarge': isHorizontal ? '80%' : '80vh',\n 'full': isHorizontal ? '100%' : '100vh'\n };\n \n const sizeValue = sizeMap[size];\n return isHorizontal \n ? { width: sizeValue }\n : { height: sizeValue };\n }\n\n get submitLabel(): string {\n return this.submitButtonLabel || this.translationService.translate('design.components_ai.save');\n }\n\n get cancelLabel(): string {\n return this.cancelButtonLabel || this.translationService.translate('design.components_ai.cancel');\n }\n\n constructor(\n private fb: FormBuilder,\n private translationService: TranslationService,\n private maskService: MaskService,\n private localeService: LocaleService\n ) {}\n\n ngOnInit(): void {\n this.initForm();\n if (this.entityData) {\n this.loadEntityData();\n }\n this.setupConditionalFieldsWatcher();\n this.formReady.emit(this.form);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle entityData changes first\n if (changes['entityData'] && this.form) {\n if (this.entityData) {\n this.loadEntityData();\n } else {\n this.resetForm();\n }\n }\n \n // When dialog/drawer opens, ensure form is loaded with entityData\n if (changes['visible'] && changes['visible'].currentValue === true) {\n this.loading = false;\n \n // If opening with entityData, reload it to ensure form is populated\n if (this.entityData && this.form) {\n this.loadEntityData();\n } else if (!this.entityData && this.form) {\n // If opening without entityData (new record), reset form\n this.resetForm();\n }\n }\n }\n\n initForm(): void {\n const formControls: any = {};\n \n // Processa todos os campos (diretos + das seções)\n this.allFields.forEach(field => {\n const defaultValue = this.getDefaultValue(field);\n const validators = this.mode === 'filter' ? [] : (field.validators || []);\n \n const control = this.fb.control(\n { value: defaultValue, disabled: field.disabled || false },\n validators\n );\n \n formControls[field.field] = control;\n });\n \n this.form = this.fb.group(formControls);\n this.applyInitialDisabledState();\n }\n\n private getDefaultValue(field: DynamicFormFieldConfig): any {\n if (field.defaultValue !== undefined) {\n return field.defaultValue;\n }\n\n switch (field.type) {\n case 'number':\n case 'date':\n return null;\n case 'dropdown':\n case 'enum':\n return this.mode === 'filter' ? null : '';\n default:\n return '';\n }\n }\n\n private applyInitialDisabledState(): void {\n this.allFields.forEach(field => {\n if (field.disabledWhen) {\n const control = this.form.get(field.field);\n if (control && this.isFieldDisabled(field)) {\n control.disable();\n }\n }\n });\n }\n\n loadEntityData(): void {\n if (this.entityData && this.form) {\n const processedData = this.processEntityData(this.entityData);\n this.form.patchValue(processedData);\n }\n }\n\n private processEntityData(entity: any): any {\n const processedData = { ...entity };\n \n this.allFields.forEach(field => {\n if (field.type === 'lookup' && processedData[field.field]) {\n const lookupValue = processedData[field.field];\n // Keep the full object if it has display data, otherwise extract ID\n if (typeof lookupValue === 'object' && lookupValue.id) {\n const hasDisplayData = field.lookupDisplayFields \n ? field.lookupDisplayFields.some(f => this.getNestedValue(lookupValue, f))\n : lookupValue[field.lookupDisplayField || 'name'];\n \n if (hasDisplayData) {\n // Keep the full object to avoid unnecessary API calls\n processedData[field.field] = lookupValue;\n } else {\n // Only has ID, extract it\n processedData[field.field] = lookupValue.id;\n }\n }\n }\n });\n \n return processedData;\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n resetForm(): void {\n if (this.form) {\n const resetValues: any = {};\n this.allFields.forEach(field => {\n resetValues[field.field] = this.getDefaultValue(field);\n });\n this.form.reset(resetValues);\n }\n }\n\n private processFilterValue(formValue: any): any {\n const processedValue = { ...formValue };\n \n this.allFields.forEach(field => {\n const fieldValue = processedValue[field.field];\n \n if (field.type === 'lookup') {\n if (fieldValue && typeof fieldValue === 'object' && fieldValue.id) {\n processedValue[field.field] = fieldValue;\n } else if (fieldValue && typeof fieldValue === 'string') {\n processedValue[field.field] = { id: fieldValue };\n } else {\n processedValue[field.field] = null;\n }\n }\n });\n \n return processedValue;\n }\n\n private processFormValue(formValue: any): any {\n const processedValue = { ...formValue };\n \n if (this.entityData?.id) {\n processedValue.id = this.entityData.id;\n }\n \n this.allFields.forEach(field => {\n const fieldValue = processedValue[field.field];\n \n if (field.type === 'lookup') {\n // Keep the full object for lookup fields\n if (fieldValue && typeof fieldValue === 'object') {\n // Object is already complete, keep it as is\n processedValue[field.field] = fieldValue;\n } else if (fieldValue && fieldValue !== '') {\n // If it's just an ID, wrap it in an object\n processedValue[field.field] = { id: fieldValue };\n } else {\n processedValue[field.field] = null;\n }\n } else if (field.type === 'date') {\n if (fieldValue instanceof Date) {\n processedValue[field.field] = fieldValue.toISOString().split('T')[0];\n } else if (!fieldValue) {\n processedValue[field.field] = null;\n }\n } else if (['text', 'textarea', 'number', 'enum', 'dropdown'].includes(field.type)) {\n if (fieldValue === '' || fieldValue === undefined) {\n processedValue[field.field] = null;\n }\n }\n });\n \n return processedValue;\n }\n\n getFieldGridClass(field: DynamicFormFieldConfig): string {\n const classes: string[] = [];\n \n // Colspan base (padrão: 6)\n let baseColspan = field.colspan || 6;\n \n // Verifica condições de colspan dinâmico\n if (field.colspanWhen && field.colspanWhen.length > 0) {\n for (const condition of field.colspanWhen) {\n const dependentFieldValue = this.form.get(condition.field)?.value;\n if (dependentFieldValue === condition.value) {\n baseColspan = condition.colspan;\n break;\n }\n }\n }\n \n // Adiciona classe base\n classes.push(`col-${baseColspan}`);\n \n // Suporta tanto o objeto size quanto as propriedades antigas (para compatibilidade)\n const sizeXs = field.size?.xs ?? field.colspanXs;\n const sizeSm = field.size?.sm ?? field.colspanSm;\n const sizeMd = field.size?.md ?? field.colspanMd;\n const sizeLg = field.size?.lg ?? field.colspanLg;\n const sizeXl = field.size?.xl ?? field.colspanXl;\n \n // Adiciona classes responsivas se definidas\n if (sizeXs !== undefined) {\n classes.push(`col-xs-${sizeXs}`);\n }\n if (sizeSm !== undefined) {\n classes.push(`col-sm-${sizeSm}`);\n }\n if (sizeMd !== undefined) {\n classes.push(`col-md-${sizeMd}`);\n }\n if (sizeLg !== undefined) {\n classes.push(`col-lg-${sizeLg}`);\n }\n if (sizeXl !== undefined) {\n classes.push(`col-xl-${sizeXl}`);\n }\n \n return classes.join(' ');\n }\n\n isFieldVisible(field: DynamicFormFieldConfig): boolean {\n if (this.mode === 'filter') {\n return true;\n }\n \n if (!field.visibleWhen) {\n return true;\n }\n\n const dependentFieldValue = this.form.get(field.visibleWhen.field)?.value;\n return dependentFieldValue === field.visibleWhen.value;\n }\n\n isFieldDisabled(field: DynamicFormFieldConfig): boolean {\n if (field.disabled) {\n return true;\n }\n \n if (!('disabledWhen' in field) || !field.disabledWhen) {\n return false;\n }\n\n const dependentFieldValue = this.form.get(field.disabledWhen!.field)?.value;\n \n if (field.disabledWhen!.value === null) {\n return !dependentFieldValue;\n }\n \n return dependentFieldValue === field.disabledWhen!.value;\n }\n\n setupConditionalFieldsWatcher(): void {\n const visibleDependentFields = this.allFields.filter(field => field.visibleWhen);\n const visibleWatchedFields = [...new Set(visibleDependentFields.map(field => field.visibleWhen!.field))];\n\n const disabledDependentFields = this.allFields.filter(field => field.disabledWhen);\n const disabledWatchedFields = [...new Set(disabledDependentFields.map(field => field.disabledWhen!.field))];\n\n const allWatchedFields = [...new Set([...visibleWatchedFields, ...disabledWatchedFields])];\n\n allWatchedFields.forEach(fieldName => {\n const control = this.form.get(fieldName);\n if (control) {\n control.valueChanges.subscribe(() => {\n this.clearHiddenFields();\n this.updateDisabledFields();\n });\n }\n });\n }\n\n updateDisabledFields(): void {\n this.allFields.forEach(field => {\n if (field.disabledWhen) {\n const control = this.form.get(field.field);\n if (control) {\n const shouldBeDisabled = this.isFieldDisabled(field);\n \n if (shouldBeDisabled && control.enabled) {\n control.setValue(null);\n control.disable();\n } else if (!shouldBeDisabled && control.disabled && !field.disabled) {\n control.enable();\n }\n }\n }\n });\n }\n\n clearHiddenFields(): void {\n this.allFields.forEach(field => {\n if (field.visibleWhen && !this.isFieldVisible(field)) {\n const control = this.form.get(field.field);\n if (control) {\n const resetValue = this.getDefaultValue(field);\n control.setValue(resetValue);\n control.markAsUntouched();\n control.markAsPristine();\n }\n }\n });\n }\n\n getForm(): FormGroup {\n return this.form;\n }\n\n clearFilters(): void {\n if (this.mode === 'filter') {\n this.resetForm();\n }\n }\n\n getTypePersonValue(): 'NATURAL_PERSON' | 'JURIDICAL_PERSON' {\n const typePersonValue = this.form?.get('typePerson')?.value;\n return typePersonValue || 'JURIDICAL_PERSON';\n }\n\n // Display Mode Control Methods\n open(entity?: any): void {\n if (entity) {\n this.entityData = entity;\n } else {\n this.entityData = null;\n this.resetForm(); // Reset form when opening for new entity\n }\n this.loading = false; // Reset loading state\n this.visible = true;\n this.visibleChange.emit(true);\n }\n\n close(): void {\n this.loading = false; // Reset loading state\n this.visible = false;\n this.visibleChange.emit(false);\n this.resetForm(); // Reset form when closing\n this.onCancel.emit();\n }\n\n handleCancel(): void {\n this.close();\n }\n\n handleSubmit(): void {\n if (this.mode === 'form' && this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n \n this.loading = true;\n \n const formValue = this.mode === 'filter' \n ? this.processFilterValue(this.form.value)\n : this.processFormValue(this.form.value);\n \n this.formSubmit.emit(formValue);\n }\n\n // Inline Edit Mode Methods\n startEditField(fieldName: string): void {\n if (this.isInlineEditMode) {\n this.editingField = fieldName;\n \n // Ensure the field has the current value from entityData\n if (this.entityData) {\n const control = this.form.get(fieldName);\n if (control) {\n const field = this.allFields.find(f => f.field === fieldName);\n const value = this.entityData[fieldName];\n \n // For lookup fields in inline-edit mode, keep the full object\n // This prevents unnecessary API calls since we already have the data\n if (field?.type === 'lookup' && value && typeof value === 'object') {\n // Keep the full object - the lookup component will use it\n control.setValue(value);\n } else {\n control.setValue(value);\n }\n }\n }\n }\n }\n\n isFieldEditing(fieldName: string): boolean {\n return this.editingField === fieldName;\n }\n\n saveInlineField(fieldName: string): void {\n if (!this.isInlineEditMode) return;\n\n const control = this.form.get(fieldName);\n if (!control || control.invalid) {\n control?.markAsTouched();\n return;\n }\n\n this.savingField = true;\n \n let fieldValue = control.value;\n \n // For lookup fields, keep the full object (don't extract ID)\n const field = this.allFields.find(f => f.field === fieldName);\n if (field?.type === 'lookup' && fieldValue && typeof fieldValue !== 'object') {\n // If it's just an ID, wrap it in an object\n fieldValue = { id: fieldValue };\n }\n \n this.fieldSave.emit({ field: fieldName, value: fieldValue });\n }\n\n cancelInlineEdit(): void {\n if (this.isInlineEditMode && this.editingField) {\n const control = this.form.get(this.editingField);\n if (control && this.entityData) {\n // Restore original value\n const originalValue = this.entityData[this.editingField];\n control.setValue(originalValue);\n control.markAsPristine();\n control.markAsUntouched();\n }\n this.editingField = null;\n this.savingField = false;\n }\n }\n\n // Method to be called by parent after save completes\n completeInlineEdit(): void {\n this.editingField = null;\n this.savingField = false;\n }\n\n getFieldDisplayValue(fieldName: string): string {\n if (!this.entityData) return '';\n\n const field = this.allFields.find(f => f.field === fieldName);\n const value = this.entityData[fieldName];\n\n if (!value) return '';\n\n // For lookup fields, return the display name\n if (field?.type === 'lookup' && typeof value === 'object' && value.name) {\n return value.name;\n }\n\n // For lookup fields with multiple display fields\n if (field?.type === 'lookup' && typeof value === 'object' && field.lookupDisplayFields) {\n return field.lookupDisplayFields\n .map(f => this.getNestedValue(value, f))\n .filter(v => v)\n .join(' - ');\n }\n\n // For dropdown/enum fields, find the matching option label\n if ((field?.type === 'dropdown' || field?.type === 'enum') && field) {\n const options = field.options || field.enumOptions || [];\n const optionValue = field.optionValue || 'value';\n const optionLabel = field.optionLabel || 'label';\n const matchingOption = options.find((opt: any) => {\n const optVal = typeof opt === 'object' ? opt[optionValue] : opt;\n return optVal === value;\n });\n if (matchingOption) {\n return typeof matchingOption === 'object' ? matchingOption[optionLabel] : matchingOption;\n }\n }\n\n // For number fields, format appropriately\n if (field?.type === 'number' && typeof value === 'number') {\n if (field.numberMode === 'currency') {\n return new Intl.NumberFormat(field.locale || 'pt-BR', {\n style: 'currency',\n currency: field.currency || 'BRL'\n }).format(value);\n }\n return new Intl.NumberFormat(field.locale || 'pt-BR', {\n minimumFractionDigits: field.minFractionDigits || 0,\n maximumFractionDigits: field.maxFractionDigits || 2\n }).format(value);\n }\n\n // For date fields, format as date\n if (field?.type === 'date' && value) {\n return this.localeService.formatDate(value);\n }\n\n // For text fields with document mask, format the value\n if (field?.type === 'text' && field.mask === 'document' && value) {\n const dependsOn = field.maskDependsOn || 'typePerson';\n const typePerson = this.entityData[dependsOn] || 'JURIDICAL_PERSON';\n return this.maskService.applyDocumentMask(String(value), typePerson);\n }\n if (field?.type === 'text' && field.mask === 'cpf' && value) {\n return this.maskService.applyCpfMask(String(value));\n }\n if (field?.type === 'text' && field.mask === 'cnpj' && value) {\n return this.maskService.applyCnpjMask(String(value));\n }\n\n return String(value);\n }\n}\n","<!-- Modo Inline (padrão) -->\n<ng-container *ngIf=\"isInlineMode\">\n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n</ng-container>\n\n<!-- Modo Dialog -->\n<p-dialog\n *ngIf=\"isDialogMode\"\n [(visible)]=\"visible\"\n [header]=\"dialogHeader | translate\"\n [modal]=\"true\"\n [style]=\"{ width: dialogWidth }\"\n [draggable]=\"dialogDraggable\"\n [resizable]=\"dialogResizable\"\n [maximizable]=\"dialogMaximizable\"\n [closeOnEscape]=\"dialogCloseOnEscape\"\n [dismissableMask]=\"dialogDismissableMask\"\n (onHide)=\"close()\">\n \n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n \n <ng-template pTemplate=\"footer\" *ngIf=\"showSubmitButton || showCancelButton\">\n <div class=\"dialog-footer\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n </ng-template>\n</p-dialog>\n\n<!-- Modo Drawer -->\n<p-drawer\n *ngIf=\"isDrawerMode\"\n [(visible)]=\"visible\"\n [header]=\"drawerHeader | translate\"\n [position]=\"drawerPosition\"\n [style]=\"drawerStyle\"\n [showCloseIcon]=\"drawerShowCloseIcon\"\n [closeOnEscape]=\"drawerCloseOnEscape\"\n [modal]=\"drawerDismissable\"\n (onHide)=\"close()\">\n \n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n \n <ng-template pTemplate=\"footer\" *ngIf=\"showSubmitButton || showCancelButton\">\n <div class=\"drawer-footer\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n </ng-template>\n</p-drawer>\n\n<!-- Template do Formulário (reutilizável) -->\n<ng-template #formContent>\n <form [formGroup]=\"form\" class=\"dynamic-form\">\n \n <!-- Filtros Fixos (apenas no modo filter) -->\n <div *ngIf=\"mode === 'filter' && hasFixedFilters\" class=\"fixed-filters-section\">\n <div class=\"grid\">\n <ng-container *ngFor=\"let field of fixedFilters\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Campos Diretos (sem seção) -->\n <div *ngIf=\"hasFields\">\n <!-- Modo Inline Edit -->\n <div *ngIf=\"isInlineEditMode\" class=\"inline-edit-fields\">\n <ng-container *ngFor=\"let field of formFields\">\n <div *ngIf=\"isFieldVisible(field)\" class=\"inline-edit-field\">\n <ng-container *ngTemplateOutlet=\"inlineEditFieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n\n <!-- Modo Form Normal -->\n <div *ngIf=\"!isInlineEditMode\" class=\"grid\">\n <ng-container *ngFor=\"let field of formFields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Seções de Campos (modo form) -->\n <div *ngIf=\"hasSections\" class=\"sections-container\">\n <p-panel \n *ngFor=\"let section of formSections\"\n [toggleable]=\"section.toggleable !== false\"\n [collapsed]=\"section.collapsed || false\"\n [styleClass]=\"'section-panel'\">\n \n <ng-template pTemplate=\"header\">\n <div class=\"section-header\">\n <i *ngIf=\"section.icon\" [class]=\"section.icon + ' section-icon'\"></i>\n <span class=\"section-title\">{{ section.title }}</span>\n </div>\n </ng-template>\n\n <!-- Modo Inline Edit -->\n <div *ngIf=\"isInlineEditMode\" class=\"inline-edit-fields\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" class=\"inline-edit-field\">\n <ng-container *ngTemplateOutlet=\"inlineEditFieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n\n <!-- Modo Form Normal -->\n <div *ngIf=\"!isInlineEditMode\" class=\"grid\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </p-panel>\n </div>\n\n <!-- Seções de Filtros (apenas no modo filter) -->\n <div *ngIf=\"mode === 'filter' && hasFilterSections\" class=\"filter-sections-container\">\n <p-panel \n *ngFor=\"let section of filterSections\"\n [header]=\"section.title\"\n [toggleable]=\"true\"\n [collapsed]=\"true\">\n\n <div class=\"grid\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </p-panel>\n </div>\n\n <!-- Botões inline (apenas para modo inline) -->\n <div *ngIf=\"isInlineMode && (showSubmitButton || showCancelButton)\" class=\"form-actions\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n\n </form>\n</ng-template>\n\n<!-- Template de Campo (reutilizável) -->\n<ng-template #fieldTemplate let-field=\"field\">\n <!-- Text Field -->\n <sia-dynamic-field-text\n *ngIf=\"field.type === 'text'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-text>\n\n <!-- Textarea Field -->\n <sia-dynamic-field-textarea\n *ngIf=\"field.type === 'textarea'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-textarea>\n\n <!-- Number Field -->\n <sia-dynamic-field-number\n *ngIf=\"field.type === 'number'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-number>\n\n <!-- Date Field -->\n <sia-dynamic-field-date\n *ngIf=\"field.type === 'date'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-date>\n\n <!-- Dropdown/Enum Field -->\n <sia-dynamic-field-dropdown\n *ngIf=\"field.type === 'dropdown' || field.type === 'enum'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-dropdown>\n\n <!-- Lookup Field -->\n <sia-dynamic-field-lookup\n *ngIf=\"field.type === 'lookup'\"\n [field]=\"field\"\n [form]=\"form\"\n [formGroup]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-lookup>\n</ng-template>\n\n\n<!-- Template de Campo Inline Edit -->\n<ng-template #inlineEditFieldTemplate let-field=\"field\">\n <div class=\"edit-inline-field\">\n <label class=\"field-label\">{{ field.label | translate }}</label>\n \n <!-- Display Mode -->\n <div class=\"field-display\" \n *ngIf=\"!isFieldEditing(field.field)\" \n (click)=\"startEditField(field.field)\"\n [class.disabled]=\"field.disabled\">\n <span class=\"display-value\" \n [attr.data-placeholder]=\"field.placeholder || ('crmx.business.not_informed' | translate)\">\n {{ getFieldDisplayValue(field.field) }}\n </span>\n <i class=\"pi pi-pencil edit-icon\" *ngIf=\"!field.disabled\"></i>\n </div>\n \n <!-- Edit Mode -->\n <div class=\"field-edit\" *ngIf=\"isFieldEditing(field.field)\">\n <div class=\"input-container\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"edit-actions\">\n <p-button \n type=\"button\" \n icon=\"pi pi-check\" \n [rounded]=\"true\"\n severity=\"primary\"\n (onClick)=\"saveInlineField(field.field)\" \n [loading]=\"savingField\"\n [disabled]=\"form.get(field.field)?.invalid\">\n </p-button>\n <p-button \n type=\"button\" \n icon=\"pi pi-times\" \n [rounded]=\"true\"\n severity=\"secondary\"\n (onClick)=\"cancelInlineEdit()\"\n [disabled]=\"savingField\">\n </p-button>\n </div>\n \n <!-- Error Message -->\n <div class=\"field-error\" *ngIf=\"form.get(field.field)?.invalid && form.get(field.field)?.touched\">\n <small class=\"p-error\">\n {{ form.get(field.field)?.errors?.['required'] ? ('crmx.business.required_field' | translate) : '' }}\n </small>\n </div>\n </div>\n </div>\n</ng-template>\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider, APP_INITIALIZER, Injector } from '@angular/core';\nimport { providePrimeNG } from 'primeng/config';\nimport Aura from '@primeuix/themes/aura';\nimport { definePreset } from '@primeuix/themes';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { LocaleService } from '../services/locale.service';\n\n/**\n * Preset customizado do tema Aura para Senior Sistemas\n * Baseado nas cores e design system da empresa\n */\nexport const SeniorPreset = definePreset(Aura, {\n semantic: {\n primary: {\n 50: '#e8f2f9',\n 100: '#c7e1f1',\n 200: '#a3cfe8',\n 300: '#7fbddf',\n 400: '#61a4d5',\n 500: '#428BCA',\n 600: '#3c7fb8',\n 700: '#336fa3',\n 800: '#2b5f8e',\n 900: '#1f4469',\n 950: '#16304a'\n },\n secondary: {\n 50: '#f0f3f5',\n 100: '#dce3e7',\n 200: '#bac8d0',\n 300: '#97adb9',\n 400: '#7892A1',\n 500: '#7892A1',\n 600: '#6a8291',\n 700: '#5a6e7a',\n 800: '#4a5a63',\n 900: '#3a464d',\n 950: '#2a3337'\n },\n danger: {\n 50: '#fef2f0',\n 100: '#fde4e0',\n 200: '#fbcdc6',\n 300: '#f7ab9f',\n 400: '#f17d68',\n 500: '#C13018',\n 600: '#ad2b16',\n 700: '#912413',\n 800: '#781f10',\n 900: '#631b0e',\n 950: '#4a140a'\n },\n warning: {\n 50: '#fef8ed',\n 100: '#fdefd1',\n 200: '#fbdda3',\n 300: '#f9c66a',\n 400: '#F8931F',\n 500: '#F8931F',\n 600: '#df841c',\n 700: '#ba6f17',\n 800: '#985b13',\n 900: '#7d4b10',\n 950: '#5e380c'\n },\n success: {\n 50: '#e8f7f0',\n 100: '#c7edd9',\n 200: '#92dbb8',\n 300: '#5cc593',\n 400: '#2fae6f',\n 500: '#0C9348',\n 600: '#0b8441',\n 700: '#096e36',\n 800: '#07592c',\n 900: '#064924',\n 950: '#04361b'\n },\n info: {\n 50: '#e8f2f9',\n 100: '#c7e1f1',\n 200: '#a3cfe8',\n 300: '#7fbddf',\n 400: '#61a4d5',\n 500: '#428BCA',\n 600: '#3c7fb8',\n 700: '#336fa3',\n 800: '#2b5f8e',\n 900: '#1f4469',\n 950: '#16304a'\n }\n }\n});\n\n/**\n * Opções de configuração para o PrimeNG\n */\nexport interface SeniorPrimeNGConfig {\n /**\n * Preset do tema a ser usado\n * @default SeniorPreset\n */\n preset?: any;\n \n /**\n * Seletor CSS para modo escuro\n * @default '.p-dark'\n */\n darkModeSelector?: string;\n \n /**\n * Se deve usar CSS Layer\n * @default false\n */\n cssLayer?: boolean;\n \n /**\n * Prefixo para classes CSS\n * @default 'p'\n */\n prefix?: string;\n \n /**\n * Se deve habilitar efeito ripple\n * @default true\n */\n ripple?: boolean;\n \n /**\n * Se deve incluir os serviços ConfirmationService e MessageService\n * @default true\n */\n includeServices?: boolean;\n}\n\n/**\n * Provê a configuração padrão do PrimeNG para aplicações Senior Sistemas\n * \n * @param config Configuração opcional para customizar o comportamento\n * @returns EnvironmentProviders para uso no app.config.ts\n * \n * @example\n * ```typescript\n * // app.config.ts\n * import { provideSeniorPrimeNG } from '@seniorsistemas/components-ai';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * // ... outros providers\n * provideSeniorPrimeNG()\n * ]\n * };\n * ```\n * \n * @example\n * ```typescript\n * // Com customização\n * provideSeniorPrimeNG({\n * darkModeSelector: '.app-dark',\n * ripple: false\n * })\n * ```\n */\nexport function provideSeniorPrimeNG(config?: SeniorPrimeNGConfig): EnvironmentProviders {\n const {\n preset = SeniorPreset,\n darkModeSelector = '.p-dark',\n cssLayer = false,\n prefix = 'p',\n ripple = true,\n includeServices = true\n } = config || {};\n\n const providers: (Provider | EnvironmentProviders)[] = [\n providePrimeNG({\n theme: {\n preset,\n options: {\n darkModeSelector,\n cssLayer,\n prefix\n }\n },\n ripple\n })\n ];\n\n if (includeServices) {\n providers.push(ConfirmationService, MessageService);\n }\n\n // Inicializar LocaleService para configurar locale do PrimeNG automaticamente\n providers.push({\n provide: APP_INITIALIZER,\n useFactory: (injector: Injector) => () => { injector.get(LocaleService); },\n deps: [Injector],\n multi: true\n });\n\n return makeEnvironmentProviders(providers);\n}\n","import { HttpInterceptorFn, HttpRequest, HttpHandlerFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError, throwError } from 'rxjs';\nimport { MessageService } from 'primeng/api';\nimport { AuthService } from '../services/auth.service';\nimport { TranslationService } from '../services/translation.service';\n\nexport const apiInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const authService = inject(AuthService);\n const injector = inject(Injector);\n \n // Get the access token, token type, and base URL\n const accessToken = authService.getAccessToken();\n const tokenType = authService.getTokenType();\n const baseUrl = authService.getApiBaseUrl();\n \n let modifiedReq = req;\n\n // Add Authorization header if token exists\n if (accessToken && tokenType) {\n const authHeader = `${tokenType} ${accessToken}`;\n modifiedReq = modifiedReq.clone({\n setHeaders: {\n Authorization: authHeader\n }\n });\n }\n\n // Prepend base URL if it exists and the request URL is relative\n if (baseUrl && !isAbsoluteUrl(modifiedReq.url)) {\n const fullUrl = combineUrls(baseUrl, modifiedReq.url);\n modifiedReq = modifiedReq.clone({\n url: fullUrl\n });\n }\n\n return next(modifiedReq).pipe(\n catchError((error: HttpErrorResponse) => {\n // Try to get MessageService and TranslationService\n let messageService: MessageService | null = null;\n let translationService: TranslationService | null = null;\n \n try {\n messageService = injector.get(MessageService);\n translationService = injector.get(TranslationService);\n } catch (e) {\n console.warn('MessageService or TranslationService not available');\n }\n\n // Handle 401 Unauthorized errors\n if (error.status === 401) {\n try {\n const router = injector.get(Router);\n router.navigate(['/forbidden']);\n } catch (e) {\n console.warn('Router not available for navigation on 401 error');\n }\n }\n // Handle 4xx errors (except 401)\n else if (error.status >= 400 && error.status < 500) {\n if (messageService && translationService) {\n const errorMessage = extractErrorMessage(error);\n messageService.add({\n severity: 'error',\n summary: translationService.translate('design.components_ai.error') || 'Erro',\n detail: errorMessage,\n life: 5000\n });\n }\n }\n // Handle 5xx errors\n else if (error.status >= 500) {\n if (messageService && translationService) {\n messageService.add({\n severity: 'error',\n summary: translationService.translate('design.components_ai.server_error') || 'Erro no Servidor',\n detail: translationService.translate('design.components_ai.server_error_message') || 'Ocorreu um erro no servidor. Tente novamente mais tarde.',\n life: 5000\n });\n }\n }\n \n // Re-throw the error so other error handlers can process it\n return throwError(() => error);\n })\n );\n};\n\n/**\n * Check if URL is absolute\n */\nfunction isAbsoluteUrl(url: string): boolean {\n return /^https?:\\/\\//.test(url);\n}\n\n/**\n * Combine base URL with relative URL\n */\nfunction combineUrls(baseUrl: string, relativeUrl: string): string {\n // Remove trailing slash from base URL\n const cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n \n // Remove leading slash from relative URL\n const cleanRelativeUrl = relativeUrl.replace(/^\\//, '');\n \n return `${cleanBaseUrl}/${cleanRelativeUrl}`;\n}\n\n/**\n * Extract error message from HttpErrorResponse\n * Supports multiple error response formats\n */\nfunction extractErrorMessage(error: HttpErrorResponse): string {\n // Check if error.error exists and has a message property\n if (error.error && typeof error.error === 'object') {\n // Format: { message: \"...\", errorCode: \"...\", reason: \"...\", domain: \"...\", service: \"...\" }\n if (error.error.message) {\n return error.error.message;\n }\n \n // Format: { error: \"...\", error_description: \"...\" }\n if (error.error.error_description) {\n return error.error.error_description;\n }\n \n // Format: { detail: \"...\" }\n if (error.error.detail) {\n return error.error.detail;\n }\n \n // Format: { errors: [...] }\n if (error.error.errors && Array.isArray(error.error.errors) && error.error.errors.length > 0) {\n return error.error.errors.map((e: any) => e.message || e).join(', ');\n }\n }\n \n // Fallback to error.message or statusText\n return error.message || error.statusText || 'Erro desconhecido';\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Directive para máscara de valor monetário em inputs\n * Uso: <input siaMoneyMask /> -> usa locale do cookie\n * Uso: <input siaMoneyMask [moneyLocale]=\"'en-US'\" /> -> força locale\n * Uso: <input siaMoneyMask [moneyCurrency]=\"'EUR'\" /> -> força moeda\n */\n@Directive({\n selector: '[siaMoneyMask]',\n standalone: true\n})\nexport class MoneyMaskDirective {\n @Input() moneyLocale?: SupportedLanguage;\n @Input() moneyCurrency?: string;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n const value = event.target.value;\n if (!value) return;\n\n // Remove tudo exceto números, vírgula e ponto\n const cleaned = value.replace(/[^\\d.,-]/g, '');\n // Converte para número\n const config = this.maskService.getMoneyConfig(this.moneyLocale);\n let numValue: number;\n\n if (config.locale === 'pt-BR' || config.locale === 'es-ES') {\n // Formato: 1.234,56\n numValue = parseFloat(cleaned.replace(/\\./g, '').replace(',', '.'));\n } else {\n // Formato: 1,234.56\n numValue = parseFloat(cleaned.replace(/,/g, ''));\n }\n\n if (isNaN(numValue)) {\n this.el.nativeElement.value = '';\n return;\n }\n\n this.el.nativeElement.value = this.maskService.formatMoney(numValue, this.moneyLocale, this.moneyCurrency);\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n@Pipe({ name: 'cpf', standalone: true })\nexport class CpfPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return this.maskService.applyCpfMask(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n@Pipe({ name: 'cnpj', standalone: true })\nexport class CnpjPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return this.maskService.applyCnpjMask(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n/**\n * Pipe para formatar documentos (CPF/CNPJ)\n * Uso: {{ value | document:'NATURAL_PERSON' }}\n * Uso: {{ value | document:'JURIDICAL_PERSON' }}\n */\n@Pipe({ name: 'document', standalone: true })\nexport class DocumentPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, typePerson: 'NATURAL_PERSON' | 'JURIDICAL_PERSON' = 'JURIDICAL_PERSON'): string {\n if (!value) return '';\n return this.maskService.applyDocumentMask(value, typePerson);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar telefone baseado no locale\n * Uso: {{ value | phone }} -> usa locale do cookie\n * Uso: {{ value | phone:'en-US' }} -> força locale específico\n */\n@Pipe({ name: 'phone', standalone: true })\nexport class PhonePipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.maskService.applyPhoneMask(value, locale);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar código postal baseado no locale\n * Uso: {{ value | postalCode }} -> usa locale do cookie (CEP no Brasil)\n * Uso: {{ value | postalCode:'en-US' }} -> formato ZIP Code\n */\n@Pipe({ name: 'postalCode', standalone: true })\nexport class PostalCodePipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.maskService.applyPostalCodeMask(value, locale);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar valores monetários baseado no locale\n * Uso: {{ value | money }} -> usa locale do cookie (R$ no Brasil)\n * Uso: {{ value | money:'en-US' }} -> formato USD\n * Uso: {{ value | money:'pt-BR':'EUR' }} -> formato EUR com locale pt-BR\n */\n@Pipe({ name: 'money', standalone: true })\nexport class MoneyPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: number | string | null | undefined, locale?: SupportedLanguage, currency?: string): string {\n if (value === null || value === undefined || value === '') return '';\n return this.maskService.formatMoney(value, locale, currency);\n }\n}\n","import { Pipe, PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslationService } from '../services/translation.service';\n\n/**\n * Pipe para formatar datas respeitando o idioma configurado\n * \n * Uso: {{ '2026-03-04' | dateFormat }} -> 04/03/2026 (pt-BR)\n * Uso: {{ dateObj | dateFormat }} -> 04/03/2026 (pt-BR)\n * Uso: {{ '2026-03-04' | dateFormat:'short' }} -> 04/03/26 (pt-BR)\n * Uso: {{ '2026-03-04' | dateFormat:'long' }} -> 4 de março de 2026 (pt-BR)\n */\n@Pipe({\n name: 'dateFormat',\n pure: false,\n standalone: true\n})\nexport class DateFormatPipe implements PipeTransform, OnDestroy {\n private subscription?: Subscription;\n private lastValue?: string | Date | null;\n private lastFormat?: string;\n private lastResult = '';\n\n constructor(\n private localeService: LocaleService,\n private translationService: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n transform(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): string {\n if (!value) return '';\n\n if (this.shouldUpdate(value, format)) {\n this.updateResult(value, format);\n }\n\n return this.lastResult;\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private shouldUpdate(value: string | Date | null | undefined, format?: string): boolean {\n const valueStr = value instanceof Date ? value.toISOString() : value;\n const lastStr = this.lastValue instanceof Date ? this.lastValue.toISOString() : this.lastValue;\n return valueStr !== lastStr || format !== this.lastFormat || !this.subscription;\n }\n\n private updateResult(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): void {\n this.lastValue = value;\n this.lastFormat = format;\n\n this.subscription?.unsubscribe();\n\n this.subscription = this.translationService.currentLanguage$.subscribe(() => {\n this.lastResult = this.formatValue(value, format);\n this.cdr.markForCheck();\n });\n }\n\n private formatValue(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): string {\n if (!value) return '';\n\n const date = typeof value === 'string'\n ? new Date(value + (value.length === 10 ? 'T00:00:00' : ''))\n : value;\n\n if (isNaN(date.getTime())) return String(value);\n\n const locale = this.localeService.getIntlLocale();\n\n switch (format) {\n case 'short':\n return date.toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: '2-digit' });\n case 'long':\n return date.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' });\n case 'medium':\n default:\n return date.toLocaleDateString(locale);\n }\n }\n}\n","import { TranslationService } from '../services/translation.service';\n\nexport enum FieldType {\n String = 'String',\n Integer = 'Integer',\n Double = 'Double',\n Boolean = 'Boolean',\n Date = 'Date',\n Time = 'Time',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Enum = 'Enum',\n Lookup = 'Lookup'\n}\n\nexport interface FormField {\n name: string;\n type: FieldType;\n label: string;\n multiple?: boolean;\n searchFields?: FormField[];\n options?: Option[];\n}\n\nexport interface Option {\n value: any;\n label: string;\n}\n\nexport interface FilterToken {\n id: string;\n label: string;\n}\n\nconst numberTypes = [FieldType.Integer, FieldType.Double];\nconst numberPattern = /^\\d+\\b$/;\n\n/**\n * Merge two arrays removing duplicates\n */\nexport const mergeUnique = (array: Array<string>, otherArray: Array<string>): Array<string> => {\n return array.concat(otherArray.filter((item) => !array.includes(item)));\n};\n\n/**\n * Get type information for validation\n */\nexport const getTypeInformation = (type: FieldType, value: any) => {\n switch (type) {\n case FieldType.Time:\n case FieldType.Date:\n case FieldType.LocalDateTime:\n case FieldType.DateTime:\n return { isValidValue: false, typeExists: true };\n case FieldType.Integer:\n case FieldType.Double:\n return {\n isValidValue: value.match(numberPattern),\n typeExists: numberTypes.includes(type),\n };\n default:\n return {\n isValidValue: value.match(numberPattern),\n typeExists: numberTypes.includes(type),\n };\n }\n};\n\n/**\n * Validate if filter value is valid for field type\n */\nexport const isValidFilter = (type: FieldType, value: any): boolean => {\n const { isValidValue, typeExists } = getTypeInformation(type, value);\n return !(typeExists && !isValidValue);\n};\n\n/**\n * Get nested property value from object using dot notation\n */\nexport const getProp = (obj: any, path: string): any => {\n if (!obj || !path) return '';\n return path.split('.').reduce((result: any, prop: any) => {\n return (result && result[prop] !== undefined) ? result[prop] : '';\n }, obj);\n};\n\n/**\n * Set nested property value in object using dot notation\n */\nexport const setProp = (obj: any, path: string, value: any): void => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n \n if (!lastKey) return;\n \n const target = keys.reduce((current, key) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n \n target[lastKey] = value;\n};\n\n/**\n * Create label-value pairs for display\n */\nexport const getLabelValueRequest = (contents: any[], displayFields: string[]): any[] => {\n return contents.map((item: any) => ({\n ...item,\n label: displayFields.map((field) => getProp(item, field)).join(' - '),\n }));\n};\n\n/**\n * Get suggestion value for autocomplete\n */\nexport const getSuggestionValue = (\n displayFields: string[], \n ownerEntity: string, \n value: any, \n separator: string = ' - '\n): string => {\n return displayFields\n .map((field) => getProp(value, `${ownerEntity}.${field}`))\n .filter(val => val !== null && val !== undefined && val !== '')\n .join(separator);\n};\n\n/**\n * Create enum query filter\n */\nexport const getEnumQuery = (name: string, value: any, multiple: boolean = false): string => {\n if (multiple && Array.isArray(value)) {\n return `(${value.map((selected: any) => `${name} eq '${selected}'`).join(' or ')})`;\n }\n return `${name} eq '${value}'`;\n};\n\n/**\n * Escape special characters in filter strings\n */\nexport const escapeFilterValue = (value: string): string => {\n return value.replace(/'/g, \"''\");\n};\n\n/**\n * Create filter string for different field types\n */\nexport const createFilterString = (formField: FormField, value: any): string => {\n const { name, type, multiple } = formField;\n \n if (value === null || value === undefined) {\n return `${name} eq null`;\n }\n \n if (typeof value === 'number') {\n return `${name} eq ${value}`;\n }\n\n switch (type) {\n case FieldType.Date: {\n const dateValue = value instanceof Date ? value : new Date(value);\n const dateStr = dateValue.toISOString().split('T')[0];\n return `${name} eq '${dateStr}'`;\n }\n \n case FieldType.Time: {\n const timeValue = value instanceof Date ? value : new Date(value);\n const timeStr = timeValue.toTimeString().split(' ')[0];\n return `${name} eq '${timeStr}'`;\n }\n \n case FieldType.DateTime: {\n const dateTimeValue = value instanceof Date ? value : new Date(value);\n return `${name} eq '${dateTimeValue.toISOString()}'`;\n }\n \n case FieldType.LocalDateTime: {\n const localDateTimeValue = value instanceof Date ? value : new Date(value);\n const localDateTimeStr = localDateTimeValue.toISOString().replace('Z', '');\n return `${name} eq '${localDateTimeStr}'`;\n }\n \n case FieldType.Enum:\n return getEnumQuery(name, value, multiple);\n \n case FieldType.String: {\n const escapedValue = escapeFilterValue(String(value));\n return `upper(${name}) like upper('${escapedValue}%')`;\n }\n \n case FieldType.Lookup: {\n const lookupId = typeof value === 'object' ? value.id : value;\n return `${name} eq '${lookupId}'`;\n }\n \n case FieldType.Boolean:\n return `${name} eq ${value ? 'true' : 'false'}`;\n \n case FieldType.Integer:\n case FieldType.Double:\n return `${name} eq ${value}`;\n \n default:\n return `${name} eq '${escapeFilterValue(String(value))}'`;\n }\n};\n\n/**\n * Create filter tokens for UI display\n */\nexport const createFilterTokens = (\n formField: FormField, \n value: any, \n translationService: TranslationService\n): FilterToken => {\n const { name, type, label, searchFields, options } = formField as any;\n let labelValue = value;\n\n switch (type) {\n case FieldType.Date:\n labelValue = value.toLocaleDateString ? value.toLocaleDateString() : value;\n break;\n \n case FieldType.Time:\n labelValue = value.toLocaleTimeString ? value.toLocaleTimeString() : value;\n break;\n \n case FieldType.LocalDateTime:\n case FieldType.DateTime:\n labelValue = value.toLocaleString ? value.toLocaleString() : value;\n break;\n \n case FieldType.Lookup:\n if (searchFields && searchFields.length) {\n labelValue = searchFields.map((field: FormField) => getProp(value, field.name)).join(' - ');\n } else {\n labelValue = value.label || value.name || value.id;\n }\n break;\n \n case FieldType.Enum:\n if (options) {\n const option = options.find((opt: Option) => opt.value === value);\n labelValue = option ? option.label : value;\n }\n break;\n \n case FieldType.Boolean:\n labelValue = value \n ? translationService.translate('boolean.true') \n : translationService.translate('boolean.false');\n break;\n \n case FieldType.Integer:\n case FieldType.Double:\n labelValue = typeof value === 'number' ? value.toLocaleString() : value;\n break;\n }\n\n return { \n id: name, \n label: `${label}: ${labelValue}` \n };\n};\n\n/**\n * Resolve $ref references in JSON objects\n */\nexport const resolveRefs = (payload: any): any => {\n const getDataFromRef = (ref: string, rootObj: any): any => {\n const regex = /\\[\"(.*?)\"\\]/g;\n const result = [];\n let match;\n\n while ((match = regex.exec(ref)) !== null) {\n result.push(match[1]);\n }\n\n return result.reduce((acc, part) => acc && acc[part], rootObj);\n };\n\n const resolve = (obj: any, rootObj: any): void => {\n if (Array.isArray(obj)) {\n obj.forEach((item) => resolve(item, rootObj));\n } else if (obj !== null && typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n if (key === '$ref' && obj[key]) {\n const refPath = obj[key];\n const refData = getDataFromRef(refPath, rootObj);\n if (refData) {\n Object.assign(obj, refData);\n delete obj[key];\n }\n } else {\n resolve(obj[key], rootObj);\n }\n });\n }\n };\n\n const clonedPayload = JSON.parse(JSON.stringify(payload));\n resolve(clonedPayload, clonedPayload);\n return clonedPayload;\n};\n\n/**\n * Deep clone an object\n */\nexport const deepClone = <T>(obj: T): T => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n \n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(item => deepClone(item)) as any;\n }\n \n const cloned = {} as T;\n Object.keys(obj).forEach(key => {\n (cloned as any)[key] = deepClone((obj as any)[key]);\n });\n \n return cloned;\n};\n\n/**\n * Check if two objects are deeply equal\n */\nexport const deepEqual = (obj1: any, obj2: any): boolean => {\n if (obj1 === obj2) {\n return true;\n }\n \n if (obj1 == null || obj2 == null) {\n return obj1 === obj2;\n }\n \n if (typeof obj1 !== typeof obj2) {\n return false;\n }\n \n if (typeof obj1 !== 'object') {\n return obj1 === obj2;\n }\n \n if (Array.isArray(obj1) !== Array.isArray(obj2)) {\n return false;\n }\n \n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n return keys1.every(key => deepEqual(obj1[key], obj2[key]));\n};\n\n/**\n * Debounce function execution\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): ((...args: Parameters<T>) => void) => {\n let timeout: any;\n \n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n};\n\n/**\n * Throttle function execution\n */\nexport const throttle = <T extends (...args: any[]) => any>(\n func: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle: boolean;\n \n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n};\n","/*\n * Public API Surface of @seniorsistemas/components-ai\n * \n * Este arquivo será populado conforme os componentes forem migrados.\n * Por enquanto, exporta apenas o módulo principal.\n */\n\n// ============================================================================\n// MODULE\n// ============================================================================\nexport * from './lib/angular-components.module';\n\n// ============================================================================\n// SERVICES\n// ============================================================================\nexport { EntityService, type SortMeta, type ListParams, type BodyParams, type EntityListResponse, type TranslationService as TranslationServiceInterface } from './lib/services/entity.service';\nexport { AuthService, type UserToken } from './lib/services/auth.service';\nexport { CookieService } from './lib/services/cookie.service';\nexport { PermissionService, type PermissionRequest, type PermissionResponse, type CheckAccessRequest, type CheckAccessResponse, type AuthServiceInterface } from './lib/services/permission.service';\nexport { SeniorTokenService, type SeniorTokenData } from './lib/services/senior-token.service';\nexport { ThemeService } from './lib/services/theme.service';\nexport { TranslationService, type SupportedLanguage, type TranslationLoader } from './lib/services/translation.service';\nexport { MaskService } from './lib/services/mask.service';\nexport { LocaleService } from './lib/services/locale.service';\n\n// ============================================================================\n// COMPONENTS\n// ============================================================================\nexport { ExportDialogComponent, type ColumnOption } from './lib/components/export-dialog/export-dialog.component';\nexport { BulkDeleteDialogComponent } from './lib/components/bulk-delete-dialog/bulk-delete-dialog.component';\nexport { BreadcrumbComponent } from './lib/components/breadcrumb/breadcrumb.component';\nexport { EntityListBaseComponent } from './lib/components/base/entity-list-base.component';\n\n// Dynamic Form\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/dynamic-form/models/dynamic-form.models';\nexport * from './lib/components/dynamic-form/fields';\n\n// ============================================================================\n// MODELS\n// ============================================================================\nexport type { BaseEntity } from './lib/models/base-entity.interface';\nexport type { \n TableColumn, \n FormField as EntityFormField, \n FilterField, \n ExportField, \n EntityConfig \n} from './lib/models/entity-config.interface';\nexport type { \n ColumnConfig, \n LookupColumn, \n FilterFieldSize, \n FilterSection, \n FilterConfig, \n FormFieldConfig as EntityFormFieldConfig, \n EntityListConfig \n} from './lib/models/entity-list.config';\n\n// ============================================================================\n// CONFIG\n// ============================================================================\nexport { TRANSLATION_CONFIG, SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, mapTokenLocaleToLanguage, getLanguageInfo, type LanguageConfig } from './lib/config/translation.config';\nexport { provideSeniorPrimeNG, SeniorPreset, type SeniorPrimeNGConfig } from './lib/config/primeng.config';\n\n// ============================================================================\n// INTERCEPTORS\n// ============================================================================\nexport { apiInterceptor } from './lib/interceptors/api.interceptor';\n\n// ============================================================================\n// NOTA: Os exports abaixo serão descomentados conforme os arquivos forem migrados\n// ============================================================================\n\n// COMPONENTS - BASE\n// export * from './lib/components/base/entity-list-base/entity-list-base.component';\n// export * from './lib/components/base/entity-form-base/entity-form-base.component';\n\n// COMPONENTS - FORMS\n// export * from './lib/components/forms/entity-form-fields/entity-form-fields.component';\n// export * from './lib/components/forms/entity-form-dialog/entity-form-dialog.component';\n// export * from './lib/components/forms/entity-form-drawer/entity-form-drawer.component';\n// export * from './lib/components/forms/sub-resource-form-dialog/sub-resource-form-dialog.component';\n\n// COMPONENTS - LISTS\n// export * from './lib/components/lists/form-filter/form-filter.component';\n// export * from './lib/components/lists/export-dialog/export-dialog.component';\n// export * from './lib/components/lists/bulk-delete-dialog/bulk-delete-dialog.component';\n\n// COMPONENTS - UI\n// export * from './lib/components/ui/breadcrumb/breadcrumb.component';\n// export * from './lib/components/ui/edit-inline/edit-inline.component';\n// export * from './lib/components/ui/lookup-field/lookup-field.component';\n// export * from './lib/components/ui/kanban-board/kanban-board.component';\n// export * from './lib/components/ui/theme-toggle/theme-toggle.component';\n\n// SERVICES\n// export * from './lib/services/entity.service';\n// export * from './lib/services/auth.service';\n// export * from './lib/services/translation.service';\n// export * from './lib/services/theme.service';\n// export * from './lib/services/permission.service';\n// export * from './lib/services/cookie.service';\n// export * from './lib/services/senior-token.service';\n// export * from './lib/services/mask.service';\n\n// DIRECTIVES\nexport { PostalCodeMaskDirective } from './lib/directives/postal-code-mask.directive';\nexport { DocumentMaskDirective } from './lib/directives/document-mask.directive';\nexport { PhoneMaskDirective } from './lib/directives/phone-mask.directive';\nexport { MoneyMaskDirective } from './lib/directives/money-mask.directive';\n\n// PIPES\nexport { TranslatePipe } from './lib/pipes/translate.pipe';\nexport { CpfPipe } from './lib/pipes/cpf.pipe';\nexport { CnpjPipe } from './lib/pipes/cnpj.pipe';\nexport { DocumentPipe } from './lib/pipes/document.pipe';\nexport { PhonePipe } from './lib/pipes/phone.pipe';\nexport { PostalCodePipe } from './lib/pipes/postal-code.pipe';\nexport { MoneyPipe } from './lib/pipes/money.pipe';\nexport { DateFormatPipe } from './lib/pipes/date-format.pipe';\n\n// UTILS\nexport { TranslationHelper } from './lib/utils/translation.helper';\nexport { \n FieldType,\n type FormField as UtilsFormField,\n type Option,\n type FilterToken,\n mergeUnique,\n getTypeInformation,\n isValidFilter,\n getProp,\n setProp,\n getLabelValueRequest,\n getSuggestionValue,\n getEnumQuery,\n escapeFilterValue,\n createFilterString,\n createFilterTokens,\n resolveRefs,\n deepClone,\n deepEqual,\n debounce,\n throttle\n} from './lib/utils/utils';\n\n// INTERCEPTORS\n// export * from './lib/interceptors/api.interceptor';\n\n// MODELS - INTERFACES\n// export * from './lib/models/interfaces/base-entity.interface';\n// export * from './lib/models/interfaces/entity-config.interface';\n// export * from './lib/models/interfaces/entity-list.config';\n\n// MODELS - ENUMS\n// export * from './lib/models/enums/status.enum';\n// export * from './lib/models/enums/type-person.enum';\n\n// UTILS\n// export * from './lib/utils/utils';\n\n// I18N\n// export * from './lib/i18n/translation.config';\n// export * from './lib/i18n/locale.config';\n// export * from './lib/i18n/fallback';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CookieService","i1.TranslationService","i1","i2.TranslationService","i5","catchError","i2","i3","i4","i1.EntityService","i3.TranslationService","i1.MaskService","i2.MaskService","i2.LocaleService","i6","i8","i3.MaskService","i4.LocaleService","i7","i9","i10","i1.LocaleService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-components-ai.mjs","sources":["../../projects/components-ai/src/lib/angular-components.module.ts","../../projects/components-ai/src/lib/services/entity.service.ts","../../projects/components-ai/src/lib/services/cookie.service.ts","../../projects/components-ai/src/lib/services/auth.service.ts","../../projects/components-ai/src/lib/services/permission.service.ts","../../projects/components-ai/src/lib/services/senior-token.service.ts","../../projects/components-ai/src/lib/services/theme.service.ts","../../projects/components-ai/src/lib/config/translation.config.ts","../../projects/components-ai/src/lib/services/translation.service.ts","../../projects/components-ai/src/lib/services/mask.service.ts","../../projects/components-ai/src/lib/services/locale.service.ts","../../projects/components-ai/src/lib/pipes/translate.pipe.ts","../../projects/components-ai/src/lib/components/export-dialog/export-dialog.component.ts","../../projects/components-ai/src/lib/components/export-dialog/export-dialog.component.html","../../projects/components-ai/src/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.ts","../../projects/components-ai/src/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.html","../../projects/components-ai/src/lib/components/breadcrumb/breadcrumb.component.ts","../../projects/components-ai/src/lib/components/loading/loading.component.ts","../../projects/components-ai/src/lib/components/base/entity-list-base.component.ts","../../projects/components-ai/src/lib/directives/postal-code-mask.directive.ts","../../projects/components-ai/src/lib/directives/phone-mask.directive.ts","../../projects/components-ai/src/lib/directives/document-mask.directive.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.ts","../../projects/components-ai/src/lib/utils/translation.helper.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-base.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-text.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-number.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-date.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-datetime.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-lookup.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/fields/dynamic-field-textarea.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/dynamic-form.component.ts","../../projects/components-ai/src/lib/components/dynamic-form/dynamic-form.component.html","../../projects/components-ai/src/lib/config/primeng.config.ts","../../projects/components-ai/src/lib/interceptors/api.interceptor.ts","../../projects/components-ai/src/lib/directives/money-mask.directive.ts","../../projects/components-ai/src/lib/directives/table-loading/table-loading.directive.ts","../../projects/components-ai/src/lib/pipes/cpf.pipe.ts","../../projects/components-ai/src/lib/pipes/cnpj.pipe.ts","../../projects/components-ai/src/lib/pipes/document.pipe.ts","../../projects/components-ai/src/lib/pipes/phone.pipe.ts","../../projects/components-ai/src/lib/pipes/postal-code.pipe.ts","../../projects/components-ai/src/lib/pipes/money.pipe.ts","../../projects/components-ai/src/lib/pipes/date-format.pipe.ts","../../projects/components-ai/src/lib/utils/utils.ts","../../projects/components-ai/src/public-api.ts","../../projects/components-ai/src/seniorsistemas-components-ai.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Módulo principal da biblioteca @seniorsistemas/components-ai\n * \n * Este módulo será populado conforme os componentes forem migrados.\n * Por enquanto, é um módulo vazio para permitir o build inicial.\n */\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n exports: []\n})\nexport class AngularComponentsModule { }\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface SortMeta {\n field: string;\n order: number; // 1 for asc, -1 for desc\n}\n\nexport interface ListParams {\n page?: number;\n size?: number;\n sort?: SortMeta[];\n filterQuery?: string;\n displayFields?: string[];\n}\n\nexport interface BodyParams {\n offset?: number;\n size?: number;\n orderBy?: string;\n filter?: string;\n displayfields?: string;\n}\n\nexport interface EntityListResponse<T> {\n contents: T[];\n totalElements: number;\n totalPages: number;\n size?: number;\n number?: number;\n first?: boolean;\n last?: boolean;\n}\n\n// Interface para o serviço de tradução (duck typing)\nexport interface TranslationService {\n translate(key: string, params?: any): string;\n}\n\n@Injectable()\nexport abstract class EntityService<T> {\n protected abstract entityUrl: string;\n protected abstract actionsUrl: string;\n protected queriesUrl: string = '';\n\n constructor(\n protected http: HttpClient,\n protected translationService?: TranslationService\n ) {\n // Initialize queriesUrl in ngOnInit or a separate method\n // since abstract properties can't be accessed in constructor\n }\n\n /**\n * Initialize the service - call this after setting actionsUrl\n */\n protected initializeService(): void {\n this.queriesUrl = this.actionsUrl.replace('actions', 'queries');\n }\n\n /**\n * Convert ListParams to HttpParams for GET requests\n */\n protected getListQueryParams(listParams: ListParams): HttpParams {\n const { page = 0, size = 10, sort = [], filterQuery = '', displayFields = [] } = listParams;\n let params = new HttpParams();\n \n params = params.append('size', String(size));\n params = params.append('offset', String(page));\n \n if (sort && sort.length) {\n const orderBy = sort\n .map((s) => {\n let order = '';\n if (s.order === 1) order = ' asc';\n else if (s.order === -1) order = ' desc';\n return `${s.field}${order}`;\n })\n .join(', ');\n params = params.append('orderby', orderBy);\n }\n\n if (filterQuery) {\n params = params.append('filter', filterQuery);\n }\n\n if (displayFields && displayFields.length) {\n params = params.append('displayfields', displayFields.join(','));\n }\n\n return params;\n }\n\n /**\n * Convert ListParams to body parameters for POST requests\n */\n protected getBodyParams(listParams: ListParams): BodyParams {\n const { page = 0, size = 10, sort = [], filterQuery = '', displayFields = [] } = listParams;\n const bodyParams: BodyParams = {};\n\n bodyParams.size = size;\n bodyParams.offset = page;\n\n if (sort && sort.length) {\n bodyParams.orderBy = sort\n .map((s) => {\n let order = '';\n if (s.order === 1) order = ' asc';\n else if (s.order === -1) order = ' desc';\n return `${s.field}${order}`;\n })\n .join(', ');\n }\n\n if (filterQuery) {\n bodyParams.filter = filterQuery;\n }\n\n if (displayFields && displayFields.length) {\n bodyParams.displayfields = displayFields.join(',');\n }\n\n return bodyParams;\n }\n\n /**\n * Default error handler\n * Note: This just logs the error and re-throws the original HttpErrorResponse\n * so that the HTTP interceptor can handle it properly (show toast, etc.)\n */\n protected handleError = (error: any): Observable<never> => {\n console.error('EntityService Error:', error);\n // Re-throw the original error so the interceptor can handle it\n return throwError(() => error);\n };\n\n /**\n * List entities with pagination, sorting, and filtering\n */\n list(listParams: ListParams = {}): Observable<EntityListResponse<T>> {\n const params = this.getListQueryParams(listParams);\n return this.http.get<EntityListResponse<T>>(this.entityUrl, { params })\n .pipe(\n map(response => this.sanitizeEntity(response)),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get entity by ID\n */\n get(id: any): Observable<T> {\n return this.http.get<T>(`${this.entityUrl}/${id}`)\n .pipe(\n map(response => this.sanitizeEntity(response)),\n catchError(this.handleError)\n );\n }\n\n /**\n * Sanitiza a entidade/resposta removendo propriedades $ref que vêm do\n * backend (Jackson @JsonIdentityInfo), substituindo-as pelo objeto real\n * referenciado no payload original.\n */\n protected sanitizeEntity(entity: any): any {\n const cloned = JSON.parse(JSON.stringify(entity));\n this.resolveRefs(cloned, cloned);\n return cloned;\n }\n\n /**\n * Percorre recursivamente o objeto e resolve qualquer { $ref: \"...\" }\n * buscando o valor real no root do payload usando o path JSON.\n */\n private resolveRefs(obj: any, root: any): void {\n if (!obj || typeof obj !== 'object') return;\n\n const keys = Array.isArray(obj) ? obj.map((_: any, i: number) => i) : Object.keys(obj);\n for (const key of keys) {\n const value = obj[key];\n if (value && typeof value === 'object') {\n if (value['$ref'] && typeof value['$ref'] === 'string') {\n const resolved = this.resolveJsonPath(root, value['$ref']);\n if (resolved !== undefined) {\n obj[key] = JSON.parse(JSON.stringify(resolved));\n }\n } else {\n this.resolveRefs(value, root);\n }\n }\n }\n }\n\n /**\n * Resolve um path JSON no formato $[\"key\"][index][\"key\"] ou $.key.key[index]\n */\n private resolveJsonPath(root: any, path: string): any {\n try {\n const tokens: string[] = [];\n const regex = /\\[\"([^\"]+)\"\\]|\\[(\\d+)\\]|\\.(\\w+)/g;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(path)) !== null) {\n tokens.push(match[1] ?? match[2] ?? match[3]);\n }\n let current = root;\n for (const token of tokens) {\n if (current == null) return undefined;\n current = current[token] ?? current[Number(token)];\n }\n return current;\n } catch {\n return undefined;\n }\n }\n\n\n /**\n * Create new entity\n */\n insert(entity: T): Observable<T> {\n return this.http.post<T>(this.entityUrl, this.sanitizeEntity(entity))\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Update existing entity\n */\n update(id: any, entity: T): Observable<T> {\n return this.http.put<T>(`${this.entityUrl}/${id}`, this.sanitizeEntity(entity))\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Delete entity by ID\n */\n delete(id: any): Observable<void> {\n return this.http.delete<void>(`${this.entityUrl}/${id}`, { observe: 'response' })\n .pipe(\n map(() => undefined),\n catchError(this.handleError)\n );\n }\n\n /**\n * Execute custom filter action\n */\n listCustomFilter(listParams: ListParams, action: string): Observable<EntityListResponse<T>> {\n const bodyParams = this.getBodyParams(listParams);\n return this.http.post<EntityListResponse<T>>(`${this.actionsUrl}/${action}`, bodyParams)\n .pipe(\n map(response => this.sanitizeEntity(response)),\n catchError(this.handleError)\n );\n }\n\n /**\n * Execute custom query\n */\n executeQuery(queryName: string, params: any = {}): Observable<any> {\n return this.http.post<any>(`${this.queriesUrl}/${queryName}`, params)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Execute custom action\n */\n executeAction(actionName: string, params: any = {}): Observable<any> {\n return this.http.post<any>(`${this.actionsUrl}/${actionName}`, params)\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Check if entity exists by ID\n */\n exists(id: any): Observable<boolean> {\n return this.http.head(`${this.entityUrl}/${id}`)\n .pipe(\n map(() => true),\n catchError((error) => {\n if (error.status === 404) {\n return [false];\n }\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Bulk delete entities\n */\n bulkDelete(ids: any[]): Observable<void> {\n return this.http.post<void>(`${this.actionsUrl}/bulkDelete`, { ids }, { observe: 'response' })\n .pipe(\n map(() => undefined),\n catchError(this.handleError)\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CookieService {\n\n /**\n * Obtém o valor de um cookie pelo nome\n */\n getCookie(name: string): string | null {\n if (typeof document === 'undefined') {\n return null; // SSR protection\n }\n\n const nameEQ = name + '=';\n const cookies = document.cookie.split(';');\n \n for (let cookie of cookies) {\n cookie = cookie.trim();\n if (cookie.indexOf(nameEQ) === 0) {\n const value = decodeURIComponent(cookie.substring(nameEQ.length));\n return value;\n }\n }\n \n return null;\n }\n\n /**\n * Define um cookie\n */\n setCookie(name: string, value: string, days?: number, path: string = '/'): void {\n if (typeof document === 'undefined') {\n return; // SSR protection\n }\n\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toUTCString();\n }\n \n document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=${path}`;\n }\n\n /**\n * Remove um cookie\n */\n deleteCookie(name: string, path: string = '/'): void {\n this.setCookie(name, '', -1, path);\n }\n\n /**\n * Verifica se um cookie existe\n */\n hasCookie(name: string): boolean {\n return this.getCookie(name) !== null;\n }\n\n /**\n * Obtém todos os cookies como objeto\n */\n getAllCookies(): { [key: string]: string } {\n if (typeof document === 'undefined') {\n return {}; // SSR protection\n }\n\n const cookies: { [key: string]: string } = {};\n const cookieArray = document.cookie.split(';');\n \n for (let cookie of cookieArray) {\n cookie = cookie.trim();\n const [name, value] = cookie.split('=');\n if (name && value) {\n cookies[name] = decodeURIComponent(value);\n }\n }\n \n return cookies;\n }\n\n /**\n * Debug: Lista todos os cookies disponíveis\n */\n debugAllCookies(): void {\n console.log('[CookieService] All available cookies:');\n const allCookies = this.getAllCookies();\n \n Object.keys(allCookies).forEach(name => {\n const value = allCookies[name];\n console.log(`[CookieService] ${name}: ${value.length > 100 ? value.substring(0, 100) + '...' : value}`);\n });\n \n if (Object.keys(allCookies).length === 0) {\n console.log('[CookieService] No cookies found');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CookieService } from './cookie.service';\n\nexport interface UserToken {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n token_type: string;\n refresh_expires_in: number;\n username: string;\n email: string;\n fullName: string;\n tenantName: string;\n locale: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n private readonly TOKEN_COOKIE_NAME = 'com.senior.token';\n private readonly API_URL_COOKIE_NAME = 'com.senior.base.url';\n private readonly API_PATH_SUFFIX = '/t/senior.com.br/bridge/1.0/rest';\n \n private currentUserSubject = new BehaviorSubject<UserToken | null>(null);\n public currentUser$ = this.currentUserSubject.asObservable();\n\n constructor(private cookieService: CookieService) {\n this.loadUserFromCookie();\n }\n\n /**\n * Load user token from cookie\n */\n private loadUserFromCookie(): void {\n const tokenString = this.cookieService.getCookie(this.TOKEN_COOKIE_NAME);\n \n if (tokenString) {\n try {\n const token = JSON.parse(tokenString) as UserToken;\n \n if (this.isTokenValid(token)) {\n this.currentUserSubject.next(token);\n } else {\n this.currentUserSubject.next(null);\n }\n } catch (error) {\n console.error('[AuthService] Error parsing token from cookie:', error);\n this.currentUserSubject.next(null);\n }\n }\n }\n\n /**\n * Get current user token\n */\n getCurrentUser(): UserToken | null {\n return this.currentUserSubject.value;\n }\n\n /**\n * Get access token\n */\n getAccessToken(): string | null {\n const user = this.getCurrentUser();\n return user?.access_token || null;\n }\n\n /**\n * Get token type (e.g., \"Bearer\")\n */\n getTokenType(): string {\n const user = this.getCurrentUser();\n return user?.token_type || 'Bearer';\n }\n\n /**\n * Get refresh token\n */\n getRefreshToken(): string | null {\n const user = this.getCurrentUser();\n return user?.refresh_token || null;\n }\n\n /**\n * Get API base URL from cookie\n */\n getApiBaseUrl(): string | null {\n const baseUrl = this.cookieService.getCookie(this.API_URL_COOKIE_NAME);\n \n // In development, use proxy\n if (!baseUrl) {\n // Check if we're in development mode\n const isDevelopment = !window.location.hostname.includes('senior.com.br');\n if (isDevelopment) {\n return '/api';\n }\n return null;\n }\n \n // Remove trailing slash from base URL\n const cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n \n // Combine with API path suffix\n return `${cleanBaseUrl}${this.API_PATH_SUFFIX}`;\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n const user = this.getCurrentUser();\n return user !== null && this.isTokenValid(user);\n }\n\n /**\n * Check if token is valid (not expired)\n */\n private isTokenValid(token: UserToken): boolean {\n if (!token || !token.access_token) {\n return false;\n }\n\n // Check if token is expired\n const now = Math.floor(Date.now() / 1000);\n const tokenExpiry = token.expires_in;\n \n // If expires_in is a timestamp, compare directly\n // If it's a duration, we'd need the token creation time\n // For now, assume it's a timestamp\n // If expires_in is very large (like a duration in seconds), skip expiry check\n if (tokenExpiry > 1000000000) {\n // Looks like a timestamp\n return tokenExpiry > now;\n } else {\n // Looks like a duration, assume token is valid\n return true;\n }\n }\n\n /**\n * Check if refresh token is valid\n */\n isRefreshTokenValid(): boolean {\n const user = this.getCurrentUser();\n if (!user || !user.refresh_token) {\n return false;\n }\n\n const now = Math.floor(Date.now() / 1000);\n const refreshExpiry = user.refresh_expires_in;\n \n return refreshExpiry > now;\n }\n\n /**\n * Get user locale\n */\n getUserLocale(): string {\n const user = this.getCurrentUser();\n return user?.locale || 'pt-BR';\n }\n\n /**\n * Get user full name\n */\n getUserFullName(): string {\n const user = this.getCurrentUser();\n return user?.fullName || '';\n }\n\n /**\n * Get user email\n */\n getUserEmail(): string {\n const user = this.getCurrentUser();\n return user?.email || '';\n }\n\n /**\n * Get tenant name\n */\n getTenantName(): string {\n const user = this.getCurrentUser();\n return user?.tenantName || '';\n }\n\n /**\n * Get username\n */\n getUsername(): string {\n const user = this.getCurrentUser();\n return user?.username || '';\n }\n}\n","import { Injectable, Optional, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nexport interface PermissionRequest {\n resource: string;\n action: string;\n context?: { [key: string]: any };\n}\n\nexport interface PermissionResponse {\n allowed: boolean;\n resource: string;\n action: string;\n reason?: string;\n}\n\nexport interface CheckAccessRequest {\n permissions: PermissionRequest[];\n}\n\nexport interface CheckAccessResponse {\n results: PermissionResponse[];\n}\n\n// Interface para AuthService (duck typing)\nexport interface AuthServiceInterface {\n isAuthenticated(): boolean;\n getAccessToken(): string | null;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionService {\n private readonly PERMISSION_ENDPOINT = 'platform/authorization/queries/checkAccess';\n private permissionCache = new Map<string, PermissionResponse>();\n private cacheExpiry = new Map<string, number>();\n private readonly CACHE_DURATION = 5 * 60 * 1000; // 5 minutes in milliseconds\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject('AuthService') private authService?: AuthServiceInterface\n ) {}\n\n /**\n * Check access for a single permission\n */\n checkAccess(resource: string, action: string, context?: { [key: string]: any }): Observable<boolean> {\n const cacheKey = this.getCacheKey(resource, action, context);\n \n // Check cache first\n const cachedResult = this.getCachedPermission(cacheKey);\n if (cachedResult !== null) {\n return of(cachedResult.allowed);\n }\n\n // Make API request\n const request: CheckAccessRequest = {\n permissions: [{ resource, action, context }]\n };\n\n return this.http.post<CheckAccessResponse>(this.PERMISSION_ENDPOINT, request).pipe(\n map(response => {\n if (response.results && response.results.length > 0) {\n const result = response.results[0];\n this.cachePermission(cacheKey, result);\n return result.allowed;\n }\n return false;\n }),\n catchError(error => {\n console.error('Permission check failed:', error);\n // On error, deny access by default\n return of(false);\n })\n );\n }\n\n /**\n * Check access for multiple permissions\n */\n checkMultipleAccess(permissions: PermissionRequest[]): Observable<PermissionResponse[]> {\n const uncachedPermissions: PermissionRequest[] = [];\n const results: PermissionResponse[] = [];\n\n // Check cache for each permission\n permissions.forEach(permission => {\n const cacheKey = this.getCacheKey(permission.resource, permission.action, permission.context);\n const cachedResult = this.getCachedPermission(cacheKey);\n \n if (cachedResult !== null) {\n results.push(cachedResult);\n } else {\n uncachedPermissions.push(permission);\n }\n });\n\n // If all permissions are cached, return immediately\n if (uncachedPermissions.length === 0) {\n return of(results);\n }\n\n // Make API request for uncached permissions\n const request: CheckAccessRequest = {\n permissions: uncachedPermissions\n };\n\n return this.http.post<CheckAccessResponse>(this.PERMISSION_ENDPOINT, request).pipe(\n map(response => {\n if (response.results) {\n // Cache the new results\n response.results.forEach(result => {\n const cacheKey = this.getCacheKey(result.resource, result.action);\n this.cachePermission(cacheKey, result);\n });\n \n // Combine cached and new results\n return [...results, ...response.results];\n }\n return results;\n }),\n catchError(error => {\n console.error('Multiple permission check failed:', error);\n // On error, return cached results and deny uncached ones\n const deniedResults = uncachedPermissions.map(permission => ({\n allowed: false,\n resource: permission.resource,\n action: permission.action,\n reason: 'Permission check failed'\n }));\n return of([...results, ...deniedResults]);\n })\n );\n }\n\n /**\n * Check if user can read a resource\n */\n canRead(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'read', context);\n }\n\n /**\n * Check if user can write to a resource\n */\n canWrite(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'write', context);\n }\n\n /**\n * Check if user can delete a resource\n */\n canDelete(resource: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, 'delete', context);\n }\n\n /**\n * Check if user can execute an action on a resource\n */\n canExecute(resource: string, action: string, context?: { [key: string]: any }): Observable<boolean> {\n return this.checkAccess(resource, action, context);\n }\n\n /**\n * Clear permission cache\n */\n clearCache(): void {\n this.permissionCache.clear();\n this.cacheExpiry.clear();\n }\n\n /**\n * Clear expired cache entries\n */\n clearExpiredCache(): void {\n const now = Date.now();\n const expiredKeys: string[] = [];\n\n this.cacheExpiry.forEach((expiry, key) => {\n if (expiry < now) {\n expiredKeys.push(key);\n }\n });\n\n expiredKeys.forEach(key => {\n this.permissionCache.delete(key);\n this.cacheExpiry.delete(key);\n });\n }\n\n /**\n * Generate cache key for permission\n */\n private getCacheKey(resource: string, action: string, context?: { [key: string]: any }): string {\n const contextStr = context ? JSON.stringify(context) : '';\n return `${resource}:${action}:${contextStr}`;\n }\n\n /**\n * Get cached permission result\n */\n private getCachedPermission(cacheKey: string): PermissionResponse | null {\n const expiry = this.cacheExpiry.get(cacheKey);\n if (expiry && expiry > Date.now()) {\n return this.permissionCache.get(cacheKey) || null;\n }\n \n // Remove expired entry\n this.permissionCache.delete(cacheKey);\n this.cacheExpiry.delete(cacheKey);\n return null;\n }\n\n /**\n * Cache permission result\n */\n private cachePermission(cacheKey: string, result: PermissionResponse): void {\n this.permissionCache.set(cacheKey, result);\n this.cacheExpiry.set(cacheKey, Date.now() + this.CACHE_DURATION);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CookieService } from './cookie.service';\n\nexport interface SeniorTokenData {\n locale?: string;\n userId?: string;\n userName?: string;\n access_token?: string;\n expires_in?: number;\n refresh_token?: string;\n token_type?: string;\n refresh_expires_in?: number;\n username?: string;\n email?: string;\n fullName?: string;\n tenantName?: string;\n type?: string;\n [key: string]: any;\n}\n\n/**\n * Serviço para gerenciar o token Senior e extrair informações específicas\n * para o sistema de traduções.\n * \n * Nota: Este serviço foca especificamente na extração do locale e informações\n * básicas do usuário. Para funcionalidades completas de autenticação,\n * use o AuthService que tem uma interface mais robusta.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SeniorTokenService {\n private readonly SENIOR_TOKEN_COOKIE = 'com.senior.token';\n\n constructor(private cookieService: CookieService) {}\n\n /**\n * Obtém o token Senior completo do cookie\n */\n getSeniorToken(): string | null {\n // Tentar o nome padrão primeiro\n let token = this.cookieService.getCookie(this.SENIOR_TOKEN_COOKIE);\n \n if (!token) {\n // Tentar nomes alternativos comuns\n const alternativeNames = [\n 'com.senior.token',\n 'senior.token',\n 'senior_token',\n 'seniorToken',\n 'token',\n 'authToken',\n 'auth_token'\n ];\n \n for (const name of alternativeNames) {\n token = this.cookieService.getCookie(name);\n if (token) {\n break;\n }\n }\n }\n \n return token;\n }\n\n /**\n * Decodifica e obtém os dados do token Senior\n */\n getSeniorTokenData(): SeniorTokenData | null {\n const token = this.getSeniorToken();\n \n if (!token) {\n return null;\n }\n\n try {\n let tokenData: any;\n \n // Primeiro, tentar como JSON direto (mais provável baseado na informação fornecida)\n try {\n tokenData = JSON.parse(token);\n } catch (jsonError) {\n // Se falhar, tentar como JWT\n if (token.includes('.')) {\n const parts = token.split('.');\n if (parts.length >= 2) {\n const payload = parts[1];\n // Adicionar padding se necessário\n const paddedPayload = payload + '='.repeat((4 - payload.length % 4) % 4);\n const decodedPayload = atob(paddedPayload);\n tokenData = JSON.parse(decodedPayload);\n } else {\n throw new Error('Invalid JWT format');\n }\n } else {\n throw jsonError; // Re-throw original JSON error\n }\n }\n\n return tokenData as SeniorTokenData;\n } catch (error) {\n console.error('[SeniorTokenService] Error parsing Senior token:', error);\n return null;\n }\n }\n\n /**\n * Obtém o locale do usuário do token Senior\n */\n getUserLocale(): string | null {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return null;\n }\n\n // O locale deve estar no mesmo nível do access_token\n if (tokenData.locale) {\n return tokenData.locale;\n }\n\n // Fallback: tentar outros campos comuns\n const possibleLocaleFields = [\n 'language', \n 'lang',\n 'user_locale',\n 'userLocale',\n 'preferred_language',\n 'preferredLanguage'\n ];\n\n for (const field of possibleLocaleFields) {\n if (tokenData[field]) {\n return tokenData[field];\n }\n }\n \n return null;\n }\n\n /**\n * Obtém informações do usuário do token Senior\n */\n getUserInfo(): { userId?: string; userName?: string; locale?: string; email?: string; fullName?: string } | null {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return null;\n }\n\n // Baseado na estrutura do AuthService, os campos devem estar no nível raiz\n return {\n userId: tokenData.userId || tokenData['sub'] || tokenData['user_id'] || tokenData.username,\n userName: tokenData.userName || tokenData['name'] || tokenData['user_name'] || tokenData.username || tokenData.fullName,\n locale: tokenData.locale,\n email: tokenData.email,\n fullName: tokenData.fullName\n };\n }\n\n /**\n * Verifica se o usuário está logado (token existe e é válido)\n */\n isUserLoggedIn(): boolean {\n const tokenData = this.getSeniorTokenData();\n \n if (!tokenData) {\n return false;\n }\n\n // Verificar expiração se existir\n if (tokenData['exp']) {\n const now = Math.floor(Date.now() / 1000);\n if (tokenData['exp'] < now) {\n console.warn('Senior token has expired');\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Monitora mudanças no cookie do token (para detectar login/logout)\n */\n watchTokenChanges(callback: (tokenData: SeniorTokenData | null) => void): void {\n let lastToken = this.getSeniorToken();\n \n const checkToken = () => {\n const currentToken = this.getSeniorToken();\n \n if (currentToken !== lastToken) {\n lastToken = currentToken;\n const tokenData = this.getSeniorTokenData();\n callback(tokenData);\n }\n };\n\n // Verificar a cada 5 segundos\n setInterval(checkToken, 5000);\n }\n\n /**\n * Valida se o token tem a estrutura esperada do Senior\n */\n validateTokenStructure(): { isValid: boolean; issues: string[] } {\n const tokenData = this.getSeniorTokenData();\n const issues: string[] = [];\n \n if (!tokenData) {\n issues.push('Token not found or could not be parsed');\n return { isValid: false, issues };\n }\n \n // Verificar campos obrigatórios esperados\n const requiredFields = ['access_token'];\n const recommendedFields = ['locale', 'username', 'email'];\n \n for (const field of requiredFields) {\n if (!tokenData[field]) {\n issues.push(`Missing required field: ${field}`);\n }\n }\n \n for (const field of recommendedFields) {\n if (!tokenData[field]) {\n issues.push(`Missing recommended field: ${field}`);\n }\n }\n \n // Verificar se locale está presente e é válido\n if (tokenData.locale) {\n // Importar a função de mapeamento seria circular, então fazer verificação básica\n const supportedLocales = ['pt-BR', 'en-US', 'es-ES', 'pt', 'en', 'es'];\n const locale = tokenData.locale;\n const isSupported = supportedLocales.some(supportedLocale => \n locale.toLowerCase().includes(supportedLocale.toLowerCase())\n );\n \n if (!isSupported) {\n issues.push(`Locale '${locale}' might not be supported`);\n }\n }\n \n const isValid = issues.filter(issue => issue.includes('required')).length === 0;\n \n console.log('[SeniorTokenService] Token validation result:', { isValid, issues });\n \n return { isValid, issues };\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n private isDarkModeSubject = new BehaviorSubject<boolean>(false);\n public isDarkMode$ = this.isDarkModeSubject.asObservable();\n private mediaQuery: MediaQueryList;\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n // Create media query to watch for system theme changes (kept for compatibility)\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n \n // Check for saved theme preference, default to light theme\n const savedTheme = localStorage.getItem('theme');\n \n if (savedTheme === 'dark') {\n // Only use dark theme if explicitly saved as dark\n this.setTheme(true);\n } else {\n // Default to light theme, ignoring system preference\n this.setTheme(false);\n // Set default theme preference if not exists\n if (!savedTheme) {\n localStorage.setItem('theme', 'light');\n }\n }\n }\n\n private followSystemTheme(): void {\n // This method is kept for compatibility but no longer used by default\n // Set theme based on system preference only when explicitly requested\n this.setTheme(this.mediaQuery.matches);\n \n // Listen for system theme changes only when in auto mode\n this.mediaQuery.addEventListener('change', (e) => {\n const savedTheme = localStorage.getItem('theme');\n if (savedTheme === 'auto') {\n this.setTheme(e.matches);\n }\n });\n }\n\n toggleTheme(): void {\n const currentTheme = this.isDarkModeSubject.value;\n this.setTheme(!currentTheme);\n // When manually toggling, save the specific preference\n localStorage.setItem('theme', !currentTheme ? 'dark' : 'light');\n }\n\n setThemeMode(mode: 'light' | 'dark' | 'auto'): void {\n localStorage.setItem('theme', mode);\n \n if (mode === 'auto') {\n this.followSystemTheme();\n } else {\n this.setTheme(mode === 'dark');\n }\n }\n\n private setTheme(isDark: boolean): void {\n this.isDarkModeSubject.next(isDark);\n \n // Apply theme to document\n if (isDark) {\n this.document.documentElement.classList.add('app-dark');\n } else {\n this.document.documentElement.classList.remove('app-dark');\n }\n }\n\n get isDarkMode(): boolean {\n return this.isDarkModeSubject.value;\n }\n\n get currentThemeMode(): 'light' | 'dark' | 'auto' {\n const savedTheme = localStorage.getItem('theme');\n return (savedTheme as 'light' | 'dark' | 'auto') || 'light'; // Default to light instead of auto\n }\n}\n","export interface LanguageConfig {\n code: string;\n name: string;\n flag: string;\n rtl?: boolean;\n aliases?: string[]; // Aliases para compatibilidade\n}\n\nexport const SUPPORTED_LANGUAGES: LanguageConfig[] = [\n { \n code: 'pt-BR', \n name: 'Português (Brasil)', \n flag: '🇧🇷',\n aliases: ['pt', 'pt_BR', 'portuguese', 'br'] \n },\n { \n code: 'en-US', \n name: 'English (US)', \n flag: '🇺🇸',\n aliases: ['en', 'en_US', 'english', 'us'] \n },\n { \n code: 'es-ES', \n name: 'Español (España)', \n flag: '🇪🇸',\n aliases: ['es', 'es_ES', 'spanish', 'spain'] \n }\n];\n\nexport const DEFAULT_LANGUAGE = 'pt-BR';\n\nexport const TRANSLATION_CONFIG = {\n supportedLanguages: SUPPORTED_LANGUAGES,\n defaultLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: 'pt-BR',\n storageKey: 'selectedLanguage',\n assetsPath: './app/locale'\n};\n\n/**\n * Mapeia um locale do token Senior para um código de idioma suportado\n */\nexport function mapTokenLocaleToLanguage(tokenLocale: string): string | null {\n if (!tokenLocale) return null;\n \n // Normalizar o locale (remover case sensitivity e caracteres especiais)\n const normalizedLocale = tokenLocale.toLowerCase().replace(/[_-]/g, '');\n \n // Procurar correspondência exata primeiro\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang.code.toLowerCase().replace(/[_-]/g, '') === normalizedLocale) {\n return lang.code;\n }\n }\n \n // Procurar por aliases\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang.aliases) {\n for (const alias of lang.aliases) {\n if (alias.toLowerCase().replace(/[_-]/g, '') === normalizedLocale) {\n return lang.code;\n }\n }\n }\n }\n \n // Tentar correspondência parcial (apenas o idioma, ignorando país)\n const languageOnly = normalizedLocale.substring(0, 2);\n for (const lang of SUPPORTED_LANGUAGES) {\n const langCode = lang.code.toLowerCase().substring(0, 2);\n if (langCode === languageOnly) {\n return lang.code;\n }\n }\n \n console.warn(`Unsupported locale from token: ${tokenLocale}`);\n return null;\n}\n\n/**\n * Obtém informações de um idioma pelo código\n */\nexport function getLanguageInfo(code: string): LanguageConfig | null {\n return SUPPORTED_LANGUAGES.find(lang => lang.code === code) || null;\n}\n","import { Injectable, Optional, Inject } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TRANSLATION_CONFIG, LanguageConfig, mapTokenLocaleToLanguage } from '../config/translation.config';\nimport { SeniorTokenService } from './senior-token.service';\n\n// Importar traduções estaticamente\nimport translationsPtBR from '../i18n/pt-BR.json';\nimport translationsEnUS from '../i18n/en-US.json';\nimport translationsEsES from '../i18n/es-ES.json';\n\nexport type SupportedLanguage = 'pt-BR' | 'en-US' | 'es-ES';\n\n// Mapa de traduções internas da biblioteca\nconst LIBRARY_TRANSLATIONS: Record<SupportedLanguage, any> = {\n 'pt-BR': translationsPtBR,\n 'en-US': translationsEnUS,\n 'es-ES': translationsEsES\n};\n\n// Interface para o loader de traduções (duck typing)\nexport interface TranslationLoader {\n loadTranslations(language: string): Promise<any>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private currentLanguage!: BehaviorSubject<SupportedLanguage>;\n private translations: { [key: string]: any } = {};\n private loadingLanguages = new Set<string>();\n private translationLoader?: TranslationLoader;\n\n constructor(\n private seniorTokenService: SeniorTokenService,\n @Optional() @Inject('TranslationLoader') loader?: TranslationLoader\n ) {\n // Inicializar o BehaviorSubject no construtor\n this.currentLanguage = new BehaviorSubject<SupportedLanguage>(\n TRANSLATION_CONFIG.defaultLanguage as SupportedLanguage\n );\n this.translationLoader = loader;\n \n this.loadStoredLanguage();\n // Carregar traduções do idioma inicial imediatamente\n this.loadTranslations();\n \n // Monitorar mudanças no token para atualizar idioma\n this.watchTokenChanges();\n }\n\n get currentLanguage$(): Observable<SupportedLanguage> {\n return this.currentLanguage.asObservable();\n }\n\n getCurrentLanguage(): SupportedLanguage {\n return this.currentLanguage.value;\n }\n\n async setLanguage(language: SupportedLanguage): Promise<void> {\n this.currentLanguage.next(language);\n localStorage.setItem(TRANSLATION_CONFIG.storageKey, language);\n await this.loadTranslations();\n }\n\n async waitForTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n if (!this.isLanguageLoaded(language)) {\n await this.loadTranslations();\n }\n }\n\n /**\n * Verifica se as traduções do idioma atual estão carregadas\n */\n isLanguageLoaded(language?: SupportedLanguage): boolean {\n const lang = language || this.currentLanguage.value;\n return !!this.translations[lang] && Object.keys(this.translations[lang]).length > 0;\n }\n\n translate(key: string, params?: { [key: string]: any }): string {\n const currentLang = this.currentLanguage.value;\n const translations = this.translations[currentLang];\n \n if (!translations || Object.keys(translations).length === 0) {\n // Se as traduções não estão carregadas, tentar carregar de forma assíncrona\n if (!this.loadingLanguages.has(currentLang)) {\n this.loadTranslations().catch(error => {\n console.error('Error loading translations:', error);\n });\n }\n console.warn(`No translations loaded for language: ${currentLang}`);\n return key;\n }\n\n // Buscar tradução (suporta estrutura plana e aninhada)\n const translation = this.getNestedTranslation(translations, key);\n \n if (!translation) {\n console.warn(`Translation key not found: ${key}`);\n return key;\n }\n\n if (typeof translation !== 'string') {\n console.warn(`Translation key is not a string: ${key}`);\n return key;\n }\n\n // Replace parameters if provided\n if (params) {\n return this.replaceParams(translation, params);\n }\n\n return translation;\n }\n\n /**\n * Busca tradução em estrutura aninhada ou plana\n */\n private getNestedTranslation(translations: any, key: string): string | undefined {\n // Primeiro tenta buscar diretamente (estrutura plana)\n if (translations[key]) {\n return translations[key];\n }\n\n // Se não encontrou, tenta buscar em estrutura aninhada\n const keys = key.split('.');\n let current = translations;\n \n for (const k of keys) {\n if (current && typeof current === 'object' && k in current) {\n current = current[k];\n } else {\n return undefined;\n }\n }\n \n return typeof current === 'string' ? current : undefined;\n }\n\n private async loadTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n \n // Se já está carregado, não carregar novamente\n if (this.isLanguageLoaded(language)) {\n return;\n }\n \n // Evitar carregamentos duplicados\n if (this.loadingLanguages.has(language)) {\n // Aguardar um pouco e tentar novamente\n await new Promise(resolve => setTimeout(resolve, 100));\n if (this.isLanguageLoaded(language)) {\n return;\n }\n }\n \n this.loadingLanguages.add(language);\n \n try {\n await this.doLoadTranslations(language);\n } catch (error) {\n console.error('Error in loadTranslations:', error);\n } finally {\n this.loadingLanguages.delete(language);\n }\n }\n \n private async doLoadTranslations(language: SupportedLanguage): Promise<void> {\n try {\n // 1. Carregar traduções internas da biblioteca\n const libTranslations = await this.loadLibraryTranslations(language);\n \n // 2. Se há um loader customizado, carregar traduções da aplicação\n if (this.translationLoader) {\n const appTranslations = await this.translationLoader.loadTranslations(language);\n // Merge: traduções da app sobrescrevem as da lib\n this.translations[language] = { ...libTranslations, ...appTranslations };\n console.log(`Translations loaded for ${language}:`, Object.keys(this.translations[language]).length, 'keys');\n return;\n }\n \n // Se não há loader, usar apenas traduções da lib\n this.translations[language] = libTranslations;\n console.log(`Library translations loaded for ${language}:`, Object.keys(this.translations[language]).length, 'keys');\n } catch (error) {\n console.error(`Error loading translations for ${language}:`, error);\n // Fallback para o idioma padrão se houver erro\n if (language !== TRANSLATION_CONFIG.fallbackLanguage) {\n try {\n const fallbackLibTranslations = await this.loadLibraryTranslations(TRANSLATION_CONFIG.fallbackLanguage as SupportedLanguage);\n if (this.translationLoader) {\n const fallbackAppTranslations = await this.translationLoader.loadTranslations(TRANSLATION_CONFIG.fallbackLanguage);\n this.translations[language] = { ...fallbackLibTranslations, ...fallbackAppTranslations };\n } else {\n this.translations[language] = fallbackLibTranslations;\n }\n console.log(`Fallback translations loaded for ${language}`);\n } catch (fallbackError) {\n console.error(`Error loading fallback translations:`, fallbackError);\n this.translations[language] = {};\n }\n }\n }\n }\n\n /**\n * Carrega traduções internas da biblioteca\n */\n private async loadLibraryTranslations(language: SupportedLanguage): Promise<any> {\n try {\n return LIBRARY_TRANSLATIONS[language] || {};\n } catch (error) {\n console.warn(`No library translations found for ${language}`);\n return {};\n }\n }\n\n private loadStoredLanguage(): void {\n // 1. Primeiro, tentar obter do token Senior\n const tokenLocale = this.seniorTokenService.getUserLocale();\n if (tokenLocale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenLocale);\n if (mappedLanguage) {\n console.log(`Using language from Senior token: ${tokenLocale} -> ${mappedLanguage}`);\n this.currentLanguage.next(mappedLanguage as SupportedLanguage);\n return;\n }\n }\n\n // 2. Segundo, tentar obter do localStorage\n const stored = localStorage.getItem(TRANSLATION_CONFIG.storageKey) as SupportedLanguage;\n const supportedCodes = TRANSLATION_CONFIG.supportedLanguages.map(lang => lang.code);\n if (stored && supportedCodes.includes(stored)) {\n console.log('Using language from localStorage:', stored);\n this.currentLanguage.next(stored);\n return;\n }\n\n // 3. Por último, usar idioma padrão\n console.log('Using default language:', TRANSLATION_CONFIG.defaultLanguage);\n this.currentLanguage.next(TRANSLATION_CONFIG.defaultLanguage as SupportedLanguage);\n }\n\n private replaceParams(text: string, params: { [key: string]: any }): string {\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return params[key] !== undefined ? params[key] : match;\n });\n }\n\n getSupportedLanguages(): LanguageConfig[] {\n return TRANSLATION_CONFIG.supportedLanguages;\n }\n\n /**\n * Força o recarregamento das traduções (útil para desenvolvimento)\n */\n async reloadTranslations(): Promise<void> {\n const language = this.currentLanguage.value;\n delete this.translations[language];\n await this.loadTranslations();\n }\n\n /**\n * Obtém todas as chaves de tradução carregadas\n */\n getLoadedKeys(): string[] {\n const language = this.currentLanguage.value;\n const translations = this.translations[language];\n return translations ? Object.keys(translations) : [];\n }\n\n /**\n * Verifica se um código de idioma é suportado\n */\n private isValidLanguage(locale: string): boolean {\n const supportedCodes = TRANSLATION_CONFIG.supportedLanguages.map(lang => lang.code);\n return supportedCodes.includes(locale);\n }\n\n /**\n * Monitora mudanças no token Senior para atualizar idioma automaticamente\n */\n private watchTokenChanges(): void {\n this.seniorTokenService.watchTokenChanges((tokenData) => {\n if (tokenData?.locale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenData.locale);\n if (mappedLanguage) {\n const newLocale = mappedLanguage as SupportedLanguage;\n const currentLocale = this.currentLanguage.value;\n \n if (newLocale !== currentLocale) {\n console.log(`Token locale changed: ${tokenData.locale} -> ${newLocale}`);\n this.setLanguage(newLocale);\n }\n }\n }\n });\n }\n\n /**\n * Força atualização do idioma baseado no token atual\n */\n async syncWithToken(): Promise<void> {\n const tokenLocale = this.seniorTokenService.getUserLocale();\n if (tokenLocale) {\n const mappedLanguage = mapTokenLocaleToLanguage(tokenLocale);\n if (mappedLanguage) {\n const newLocale = mappedLanguage as SupportedLanguage;\n const currentLocale = this.currentLanguage.value;\n \n if (newLocale !== currentLocale) {\n console.log(`Syncing language with token: ${tokenLocale} -> ${newLocale}`);\n await this.setLanguage(newLocale);\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslationService, SupportedLanguage } from './translation.service';\n\n/**\n * Configuração de máscara por locale\n */\ninterface LocaleMaskConfig {\n phone: {\n mask: (value: string) => string;\n maxDigits: number;\n };\n postalCode: {\n mask: (value: string) => string;\n maxDigits: number;\n label: string;\n };\n money: {\n locale: string;\n currency: string;\n symbol: string;\n };\n}\n\nconst LOCALE_CONFIGS: Record<SupportedLanguage, LocaleMaskConfig> = {\n 'pt-BR': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 11);\n if (n.length <= 2) return n;\n if (n.length <= 6) return n.replace(/(\\d{2})(\\d+)/, '($1) $2');\n if (n.length <= 10) return n.replace(/(\\d{2})(\\d{4})(\\d+)/, '($1) $2-$3');\n return n.replace(/(\\d{2})(\\d{5})(\\d{4})/, '($1) $2-$3');\n },\n maxDigits: 11\n },\n postalCode: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 8);\n if (n.length <= 5) return n;\n return n.replace(/(\\d{5})(\\d+)/, '$1-$2');\n },\n maxDigits: 8,\n label: 'CEP'\n },\n money: { locale: 'pt-BR', currency: 'BRL', symbol: 'R$' }\n },\n 'en-US': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 10);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '($1) $2');\n return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '($1) $2-$3');\n },\n maxDigits: 10\n },\n postalCode: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 9);\n if (n.length <= 5) return n;\n return n.replace(/(\\d{5})(\\d+)/, '$1-$2');\n },\n maxDigits: 9,\n label: 'ZIP Code'\n },\n money: { locale: 'en-US', currency: 'USD', symbol: '$' }\n },\n 'es-ES': {\n phone: {\n mask: (value: string) => {\n const n = value.replace(/\\D/g, '').substring(0, 9);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '$1 $2');\n return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '$1 $2 $3');\n },\n maxDigits: 9\n },\n postalCode: {\n mask: (value: string) => {\n return value.replace(/\\D/g, '').substring(0, 5);\n },\n maxDigits: 5,\n label: 'Código Postal'\n },\n money: { locale: 'es-ES', currency: 'EUR', symbol: '€' }\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaskService {\n\n constructor(private translationService: TranslationService) {}\n\n /**\n * Obtém o locale atual ou usa o fornecido por parâmetro\n */\n private getLocale(locale?: SupportedLanguage): SupportedLanguage {\n return locale || this.translationService.getCurrentLanguage();\n }\n\n private getConfig(locale?: SupportedLanguage): LocaleMaskConfig {\n return LOCALE_CONFIGS[this.getLocale(locale)];\n }\n\n // =========================================================================\n // CPF (Brasil - fixo, não depende de locale)\n // =========================================================================\n\n applyCpfMask(value: string): string {\n if (!value) return '';\n const n = value.replace(/\\D/g, '').substring(0, 11);\n if (n.length <= 3) return n;\n if (n.length <= 6) return n.replace(/(\\d{3})(\\d+)/, '$1.$2');\n if (n.length <= 9) return n.replace(/(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3');\n return n.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3-$4');\n }\n\n // =========================================================================\n // CNPJ (Brasil - fixo, alfanumérico conforme IN RFB 2229)\n // =========================================================================\n\n applyCnpjMask(value: string): string {\n if (!value) return '';\n const cleaned = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n const root = cleaned.substring(0, 12);\n const checkDigits = cleaned.substring(12, 14).replace(/[^0-9]/g, '');\n const chars = root + checkDigits;\n const len = chars.length;\n if (len <= 2) return chars;\n if (len <= 5) return chars.replace(/(\\w{2})(\\w+)/, '$1.$2');\n if (len <= 8) return chars.replace(/(\\w{2})(\\w{3})(\\w+)/, '$1.$2.$3');\n if (len <= 12) return chars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w+)/, '$1.$2.$3/$4');\n return chars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w{4})(\\w+)/, '$1.$2.$3/$4-$5');\n }\n\n // =========================================================================\n // Document (CPF ou CNPJ baseado no tipo de pessoa)\n // =========================================================================\n\n applyDocumentMask(value: string, typePerson: 'NATURAL_PERSON' | 'JURIDICAL_PERSON'): string {\n if (!value) return '';\n return typePerson === 'NATURAL_PERSON' ? this.applyCpfMask(value) : this.applyCnpjMask(value);\n }\n\n // =========================================================================\n // Phone (depende do locale)\n // =========================================================================\n\n applyPhoneMask(value: string, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.getConfig(locale).phone.mask(value);\n }\n\n getPhoneMaxDigits(locale?: SupportedLanguage): number {\n return this.getConfig(locale).phone.maxDigits;\n }\n\n // =========================================================================\n // Postal Code (depende do locale)\n // =========================================================================\n\n applyPostalCodeMask(value: string, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.getConfig(locale).postalCode.mask(value);\n }\n\n getPostalCodeMaxDigits(locale?: SupportedLanguage): number {\n return this.getConfig(locale).postalCode.maxDigits;\n }\n\n getPostalCodeLabel(locale?: SupportedLanguage): string {\n return this.getConfig(locale).postalCode.label;\n }\n\n // =========================================================================\n // Money (depende do locale)\n // =========================================================================\n\n formatMoney(value: number | string, locale?: SupportedLanguage, currency?: string): string {\n if (value === null || value === undefined || value === '') return '';\n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return '';\n const config = this.getConfig(locale).money;\n return new Intl.NumberFormat(config.locale, {\n style: 'currency',\n currency: currency || config.currency\n }).format(numValue);\n }\n\n getMoneyConfig(locale?: SupportedLanguage): { locale: string; currency: string; symbol: string } {\n return this.getConfig(locale).money;\n }\n\n // =========================================================================\n // Utilitários\n // =========================================================================\n\n removeMask(value: string): string {\n if (!value) return '';\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n removeNumericMask(value: string): string {\n if (!value) return '';\n return value.replace(/\\D/g, '');\n }\n\n getDocumentType(value: string): 'cpf' | 'cnpj' | 'unknown' {\n if (!value) return 'unknown';\n const cleaned = this.removeMask(value);\n if (cleaned.length <= 11) return 'cpf';\n if (cleaned.length <= 14) return 'cnpj';\n return 'unknown';\n }\n\n isValidCpfFormat(value: string): boolean {\n if (!value) return false;\n const cleaned = value.replace(/\\D/g, '');\n return cleaned.length === 11 && /^\\d{11}$/.test(cleaned);\n }\n\n isValidCnpjFormat(value: string): boolean {\n if (!value) return false;\n const cleaned = this.removeMask(value);\n if (cleaned.length !== 14) return false;\n const root = cleaned.substring(0, 12);\n const checkDigits = cleaned.substring(12, 14);\n return /^[A-Z0-9]{12}$/i.test(root) && /^\\d{2}$/.test(checkDigits);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PrimeNG } from 'primeng/config';\nimport { Translation } from 'primeng/api';\nimport { TranslationService, SupportedLanguage } from './translation.service';\n\n/**\n * Mapa de traduções do PrimeNG Calendar por idioma\n */\nconst PRIMENG_LOCALE: Record<SupportedLanguage, Translation> = {\n 'pt-BR': {\n dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['Do', 'Se', 'Te', 'Qa', 'Qi', 'Sx', 'Sa'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n today: 'Hoje',\n clear: 'Limpar',\n weekHeader: 'Sm',\n firstDayOfWeek: 0,\n dateFormat: 'dd/mm/yy',\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n pending: 'Pendente',\n emptyMessage: 'Nenhum resultado encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM'\n },\n 'en-US': {\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n today: 'Today',\n clear: 'Clear',\n weekHeader: 'Wk',\n firstDayOfWeek: 0,\n dateFormat: 'mm/dd/yy',\n accept: 'Yes',\n reject: 'No',\n choose: 'Choose',\n upload: 'Upload',\n cancel: 'Cancel',\n pending: 'Pending',\n emptyMessage: 'No results found',\n emptyFilterMessage: 'No results found',\n chooseYear: 'Choose Year',\n chooseMonth: 'Choose Month',\n chooseDate: 'Choose Date',\n prevDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n prevYear: 'Previous Year',\n nextYear: 'Next Year',\n prevMonth: 'Previous Month',\n nextMonth: 'Next Month',\n prevHour: 'Previous Hour',\n nextHour: 'Next Hour',\n prevMinute: 'Previous Minute',\n nextMinute: 'Next Minute',\n prevSecond: 'Previous Second',\n nextSecond: 'Next Second',\n am: 'AM',\n pm: 'PM'\n },\n 'es-ES': {\n dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],\n dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],\n monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\n monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\n today: 'Hoy',\n clear: 'Limpiar',\n weekHeader: 'Sm',\n firstDayOfWeek: 1,\n dateFormat: 'dd/mm/yy',\n accept: 'Sí',\n reject: 'No',\n choose: 'Elegir',\n upload: 'Subir',\n cancel: 'Cancelar',\n pending: 'Pendiente',\n emptyMessage: 'No se encontraron resultados',\n emptyFilterMessage: 'No se encontraron resultados',\n chooseYear: 'Elegir año',\n chooseMonth: 'Elegir mes',\n chooseDate: 'Elegir fecha',\n prevDecade: 'Década anterior',\n nextDecade: 'Siguiente década',\n prevYear: 'Año anterior',\n nextYear: 'Siguiente año',\n prevMonth: 'Mes anterior',\n nextMonth: 'Siguiente mes',\n prevHour: 'Hora anterior',\n nextHour: 'Siguiente hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Siguiente minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Siguiente segundo',\n am: 'AM',\n pm: 'PM'\n }\n};\n\n/**\n * Formatos de data por idioma para uso em pipes e formatação\n */\nconst DATE_FORMATS: Record<SupportedLanguage, string> = {\n 'pt-BR': 'dd/MM/yyyy',\n 'en-US': 'MM/dd/yyyy',\n 'es-ES': 'dd/MM/yyyy'\n};\n\n/**\n * Locales do Intl por idioma\n */\nconst INTL_LOCALES: Record<SupportedLanguage, string> = {\n 'pt-BR': 'pt-BR',\n 'en-US': 'en-US',\n 'es-ES': 'es-ES'\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocaleService {\n private initialized = false;\n\n constructor(\n private primeNG: PrimeNG,\n private translationService: TranslationService\n ) {\n this.init();\n }\n\n private init(): void {\n if (this.initialized) return;\n this.initialized = true;\n\n // Aplicar locale inicial\n this.applyLocale(this.translationService.getCurrentLanguage());\n\n // Reagir a mudanças de idioma\n this.translationService.currentLanguage$.subscribe((language) => {\n this.applyLocale(language);\n });\n }\n\n private applyLocale(language: SupportedLanguage): void {\n const locale = PRIMENG_LOCALE[language] || PRIMENG_LOCALE['pt-BR'];\n this.primeNG.setTranslation(locale);\n }\n\n /**\n * Retorna o formato de data PrimeNG (p-calendar) para o idioma atual\n */\n getPrimeNGDateFormat(): string {\n const language = this.translationService.getCurrentLanguage();\n return PRIMENG_LOCALE[language]?.dateFormat || 'dd/mm/yy';\n }\n\n /**\n * Retorna o formato de data Angular (DatePipe) para o idioma atual\n */\n getDateFormat(): string {\n return DATE_FORMATS[this.translationService.getCurrentLanguage()] || DATE_FORMATS['pt-BR'];\n }\n\n /**\n * Retorna o locale Intl para o idioma atual\n */\n getIntlLocale(): string {\n return INTL_LOCALES[this.translationService.getCurrentLanguage()] || INTL_LOCALES['pt-BR'];\n }\n\n /**\n * Formata uma data string (yyyy-MM-dd ou ISO) para o formato do idioma atual\n */\n formatDate(value: string | Date | null | undefined): string {\n if (!value) return '';\n const date = typeof value === 'string' ? new Date(value + (value.length === 10 ? 'T00:00:00' : '')) : value;\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString(this.getIntlLocale());\n }\n}\n","import { Pipe, PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslationService } from '../services/translation.service';\n\n@Pipe({\n name: 'translate',\n pure: false,\n standalone: true\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private subscription?: Subscription;\n private lastKey?: string;\n private lastParams?: any;\n private lastTranslation?: string;\n private isLoading = false;\n\n constructor(\n private translationService: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n transform(key: string, params?: { [key: string]: any }): string {\n if (!key) return '';\n\n // Check if we need to update the translation\n if (this.shouldUpdate(key, params)) {\n this.updateTranslation(key, params);\n }\n\n return this.lastTranslation || key;\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private shouldUpdate(key: string, params?: any): boolean {\n return this.lastKey !== key || \n JSON.stringify(this.lastParams) !== JSON.stringify(params) ||\n !this.subscription;\n }\n\n private updateTranslation(key: string, params?: any): void {\n this.lastKey = key;\n this.lastParams = params;\n \n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // Aguardar carregamento das traduções se necessário\n if (!this.translationService.isLanguageLoaded()) {\n if (!this.isLoading) {\n this.isLoading = true;\n this.translationService.waitForTranslations().then(() => {\n this.isLoading = false;\n this.lastTranslation = this.translationService.translate(key, params);\n this.cdr.markForCheck();\n }).catch(error => {\n this.isLoading = false;\n console.error('Error waiting for translations:', error);\n this.lastTranslation = key;\n this.cdr.markForCheck();\n });\n }\n return;\n }\n\n this.subscription = this.translationService.currentLanguage$.subscribe(() => {\n this.lastTranslation = this.translationService.translate(key, params);\n this.cdr.markForCheck();\n });\n }\n}","import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DividerModule } from 'primeng/divider';\nimport * as XLSX from 'xlsx';\nimport jsPDF from 'jspdf';\nimport 'jspdf-autotable';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslationService } from '../../services/translation.service';\n\nexport interface ColumnOption {\n field: string;\n header: string;\n selected: boolean;\n}\n\ninterface ExportFormat {\n value: 'xlsx' | 'pdf';\n label: string;\n icon: string;\n description: string;\n}\n\ninterface ExportScope {\n value: 'all' | 'selected';\n label: string;\n icon: string;\n description: string;\n}\n\n@Component({\n selector: 'sia-export-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n DialogModule,\n ButtonModule,\n RadioButtonModule,\n CheckboxModule,\n DividerModule,\n TranslatePipe\n ],\n templateUrl: './export-dialog.component.html',\n styleUrl: './export-dialog.component.scss'\n})\nexport class ExportDialogComponent implements OnChanges {\n @Input() visible: boolean = false;\n @Input() allRecords: any[] = [];\n @Input() selectedRecords: any[] = [];\n @Input() statusLabels?: { [key: string]: string };\n @Input() translationPrefix: string = 'design.components_ai';\n @Input() set availableColumns(columns: ColumnOption[]) {\n if (columns && columns.length > 0) {\n this.columns = columns;\n }\n }\n @Output() visibleChange = new EventEmitter<boolean>();\n\n exportFormat: 'xlsx' | 'pdf' = 'xlsx';\n exportScope: 'all' | 'selected' = 'all';\n\n formats: ExportFormat[] = [];\n scopes: ExportScope[] = [];\n columns: ColumnOption[] = [];\n\n constructor(private translationService: TranslationService) {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n ngOnChanges(): void {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n private initializeFormats(): void {\n this.formats = [\n {\n value: 'xlsx',\n label: 'Excel',\n icon: 'pi-file-excel',\n description: this.translationService.translate('design.components_ai.export_excel_description')\n },\n {\n value: 'pdf',\n label: 'PDF',\n icon: 'pi-file-pdf',\n description: this.translationService.translate('design.components_ai.export_pdf_description')\n }\n ];\n }\n\n private initializeScopes(): void {\n this.scopes = [\n {\n value: 'all',\n label: this.translationService.translate('design.components_ai.export_all_records'),\n icon: 'pi-list',\n description: this.translationService.translate('design.components_ai.export_all_records_description')\n },\n {\n value: 'selected',\n label: this.translationService.translate('design.components_ai.export_selected_records'),\n icon: 'pi-check-square',\n description: this.translationService.translate('design.components_ai.export_selected_records_description')\n }\n ];\n }\n\n get recordsToExport(): any[] {\n return this.exportScope === 'all' ? this.allRecords : this.selectedRecords;\n }\n\n get selectedColumnsCount(): number {\n return this.columns.filter(col => col.selected).length;\n }\n\n get canExport(): boolean {\n return this.selectedColumnsCount > 0 && this.recordsToExport.length > 0;\n }\n\n onHide(): void {\n this.visibleChange.emit(false);\n }\n\n selectAllColumns(): void {\n this.columns.forEach(col => col.selected = true);\n }\n\n deselectAllColumns(): void {\n this.columns.forEach(col => col.selected = false);\n }\n\n export(): void {\n if (!this.canExport) return;\n\n if (this.exportFormat === 'xlsx') {\n this.exportToExcel();\n } else {\n this.exportToPDF();\n }\n\n this.onHide();\n }\n\n private exportToExcel(): void {\n const selectedColumns = this.columns.filter(col => col.selected);\n const data = this.recordsToExport.map(record => {\n const row: any = {};\n selectedColumns.forEach(col => {\n if (col.field === 'status' && record.status && this.statusLabels) {\n row[col.header] = this.statusLabels[record.status];\n } else {\n row[col.header] = record[col.field];\n }\n });\n return row;\n });\n\n const worksheet = XLSX.utils.json_to_sheet(data);\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, this.translationService.translate('design.components_ai.export_data_sheet_name'));\n\n // Ajustar largura das colunas\n const maxWidth = 30;\n const colWidths = selectedColumns.map(col => ({\n wch: Math.min(col.header.length + 5, maxWidth)\n }));\n worksheet['!cols'] = colWidths;\n\n const fileName = `export-${new Date().getTime()}.xlsx`;\n XLSX.writeFile(workbook, fileName);\n }\n\n private exportToPDF(): void {\n const doc = new jsPDF();\n const selectedColumns = this.columns.filter(col => col.selected);\n\n // Título\n doc.setFontSize(18);\n doc.setTextColor(18, 168, 133);\n doc.text(this.translationService.translate('design.components_ai.export_pdf_title'), 14, 20);\n\n // Subtítulo\n doc.setFontSize(10);\n doc.setTextColor(100);\n doc.text(`${this.translationService.translate('design.components_ai.export_exported_at')}: ${new Date().toLocaleString('pt-BR')}`, 14, 28);\n doc.text(`${this.translationService.translate('design.components_ai.export_total_records')}: ${this.recordsToExport.length}`, 14, 34);\n\n // Preparar dados\n const headers = selectedColumns.map(col => col.header);\n const data = this.recordsToExport.map(record => {\n return selectedColumns.map(col => {\n if (col.field === 'status' && record.status && this.statusLabels) {\n return this.statusLabels[record.status];\n }\n return String(record[col.field] || '');\n });\n });\n\n // Tabela\n (doc as any).autoTable({\n head: [headers],\n body: data,\n startY: 40,\n theme: 'grid',\n headStyles: {\n fillColor: [18, 168, 133],\n textColor: [255, 255, 255],\n fontStyle: 'bold',\n halign: 'center'\n },\n styles: {\n fontSize: 9,\n cellPadding: 3\n },\n alternateRowStyles: {\n fillColor: [248, 255, 254]\n }\n });\n\n const fileName = `export-${new Date().getTime()}.pdf`;\n doc.save(fileName);\n }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n (onHide)=\"onHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '700px' }\"\n styleClass=\"export-dialog\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'design.components_ai.export_data_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n <!-- Formato de Exportação -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_format_title' | translate }}</h3>\n </div>\n <div class=\"format-options\">\n <div\n *ngFor=\"let format of formats\"\n class=\"format-card\"\n [class.selected]=\"exportFormat === format.value\"\n (click)=\"exportFormat = format.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"format.value\"\n [(ngModel)]=\"exportFormat\"\n [inputId]=\"format.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"format.value === 'xlsx'\" [class.pdf]=\"format.value === 'pdf'\">\n <i class=\"pi\" [ngClass]=\"format.icon\"></i>\n </div>\n <div class=\"card-info\">\n <label [for]=\"format.value\" class=\"card-label\">{{ format.label }}</label>\n <span class=\"card-description\">{{ format.description }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Escopo de Exportação -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-filter\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_scope_title' | translate }}</h3>\n </div>\n <div class=\"scope-options\">\n <div\n *ngFor=\"let scope of scopes\"\n class=\"scope-card\"\n [class.selected]=\"exportScope === scope.value\"\n [class.disabled]=\"scope.value === 'selected' && selectedRecords.length === 0\"\n (click)=\"scope.value === 'selected' && selectedRecords.length === 0 ? null : exportScope = scope.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"scope.value\"\n [(ngModel)]=\"exportScope\"\n [inputId]=\"scope.value\"\n [disabled]=\"scope.value === 'selected' && selectedRecords.length === 0\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"scope.icon\"></i>\n </div>\n <div class=\"card-info\">\n <label [for]=\"scope.value\" class=\"card-label\">{{ scope.label }}</label>\n <span class=\"card-description\">{{ scope.description }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ scope.value === 'all' ? allRecords.length : selectedRecords.length }} {{ 'design.components_ai.export_records_count' | translate }}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Seleção de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\">\n <i class=\"pi pi-table\"></i>\n </div>\n <h3>{{ 'design.components_ai.export_columns_title' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'design.components_ai.export_select_all_columns' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'design.components_ai.export_clear_selection' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <div\n *ngFor=\"let column of columns\"\n class=\"column-item\"\n [class.selected]=\"column.selected\"\n (click)=\"column.selected = !column.selected\"\n >\n <p-checkbox\n [(ngModel)]=\"column.selected\"\n [binary]=\"true\"\n [inputId]=\"column.field\"\n ></p-checkbox>\n <label [for]=\"column.field\" class=\"column-label\">\n {{ column.header }}\n </label>\n </div>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ selectedColumnsCount }} {{ 'design.components_ai.export_columns_summary' | translate }} {{ columns.length }} {{ 'design.components_ai.export_columns_selected' | translate }}</span>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'design.components_ai.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onHide()\"\n ></p-button>\n <p-button\n [label]=\"'design.components_ai.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport\"\n (onClick)=\"export()\"\n ></p-button>\n </ng-template>\n</p-dialog>\n","import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { ButtonModule } from 'primeng/button';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { TagModule } from 'primeng/tag';\nimport { catchError, concatMap, from, of, Observable } from 'rxjs';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { TranslationService } from '../../services/translation.service';\n\ninterface DeleteStatus {\n entity: any;\n status: 'pending' | 'processing' | 'success' | 'error';\n errorMessage?: string;\n}\n\n// Interface para o serviço de entidade (duck typing)\nexport interface EntityService {\n delete(id: any): Observable<any>;\n}\n\n@Component({\n selector: 'sia-bulk-delete-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DialogModule,\n ButtonModule,\n ProgressBarModule,\n TagModule,\n TranslatePipe\n ],\n templateUrl: './bulk-delete-dialog.component.html',\n styleUrl: './bulk-delete-dialog.component.scss'\n})\nexport class BulkDeleteDialogComponent implements OnChanges {\n @Input() visible: boolean = false;\n @Input() stages: any[] = []; // Generic entities\n @Input() service!: EntityService; // Generic service\n @Input() entityNameField: string = 'name'; // Field to display entity name\n @Input() entityCodeField: string = 'code'; // Field to display entity code (optional)\n @Input() translationPrefix: string = 'design.components_ai';\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onComplete = new EventEmitter<void>();\n\n deleteStatuses: DeleteStatus[] = [];\n isProcessing: boolean = false;\n isCompleted: boolean = false;\n currentIndex: number = 0;\n successCount: number = 0;\n errorCount: number = 0;\n\n constructor(private translationService: TranslationService) {}\n\n ngOnChanges(): void {\n if (this.visible && this.stages.length > 0) {\n this.initializeStatuses();\n }\n }\n\n initializeStatuses(): void {\n this.deleteStatuses = this.stages.map(entity => ({\n entity,\n status: 'pending'\n }));\n this.isProcessing = false;\n this.isCompleted = false;\n this.currentIndex = 0;\n this.successCount = 0;\n this.errorCount = 0;\n }\n\n get progress(): number {\n if (this.deleteStatuses.length === 0) return 0;\n return Math.round((this.currentIndex / this.deleteStatuses.length) * 100);\n }\n\n get canClose(): boolean {\n return !this.isProcessing || this.isCompleted;\n }\n\n startDeletion(): void {\n if (!this.service) {\n console.error('Service not provided to BulkDeleteDialogComponent');\n return;\n }\n\n this.isProcessing = true;\n this.isCompleted = false;\n\n // Process deletions sequentially\n from(this.deleteStatuses)\n .pipe(\n concatMap((deleteStatus, index) => {\n this.currentIndex = index;\n deleteStatus.status = 'processing';\n \n return this.service.delete(deleteStatus.entity.id).pipe(\n concatMap(() => {\n deleteStatus.status = 'success';\n this.successCount++;\n return of(null);\n }),\n catchError((error: any) => {\n // Check if it's actually a success (204 No Content)\n if (error?.status === 204) {\n deleteStatus.status = 'success';\n this.successCount++;\n } else {\n deleteStatus.status = 'error';\n deleteStatus.errorMessage = error?.message || error?.statusText || this.translationService.translate('design.components_ai.bulk_delete_error_generic');\n this.errorCount++;\n }\n \n return of(null);\n })\n );\n })\n )\n .subscribe({\n complete: () => {\n this.currentIndex = this.deleteStatuses.length;\n this.isCompleted = true;\n this.isProcessing = false;\n }\n });\n }\n\n onHide(): void {\n if (!this.canClose) return;\n \n this.visible = false;\n this.visibleChange.emit(false);\n \n if (this.isCompleted && this.successCount > 0) {\n this.onComplete.emit();\n }\n }\n\n onClose(): void {\n this.onHide();\n }\n\n getStatusSeverity(status: string): 'secondary' | 'info' | 'success' | 'danger' {\n switch (status) {\n case 'pending': return 'secondary';\n case 'processing': return 'info';\n case 'success': return 'success';\n case 'error': return 'danger';\n default: return 'secondary';\n }\n }\n\n getStatusLabel(status: string): string {\n return this.translationService.translate(`design.components_ai.bulk_delete_status_${status}`);\n }\n\n getStatusIcon(status: string): string {\n switch (status) {\n case 'pending': return 'pi pi-clock';\n case 'processing': return 'pi pi-spin pi-spinner';\n case 'success': return 'pi pi-check';\n case 'error': return 'pi pi-times';\n default: return 'pi pi-question';\n }\n }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n [modal]=\"true\"\n [closable]=\"canClose\"\n [closeOnEscape]=\"canClose\"\n [dismissableMask]=\"false\"\n [style]=\"{ width: '700px', maxWidth: '90vw' }\"\n (onHide)=\"onHide()\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"dialog-header\">\n <i class=\"pi pi-trash header-icon\"></i>\n <h2>{{ 'design.components_ai.bulk_delete_title' | translate }}</h2>\n </div>\n </ng-template>\n\n <div class=\"dialog-content\">\n <!-- Summary -->\n @if (!isProcessing && !isCompleted) {\n <div class=\"summary-section\">\n <p class=\"summary-text\">\n <i class=\"pi pi-exclamation-triangle warning-icon\"></i>\n <span [innerHTML]=\"'design.components_ai.bulk_delete_warning' | translate:{ count: stages.length }\"></span>\n </p>\n <p class=\"summary-description\">\n {{ 'design.components_ai.bulk_delete_description' | translate }}\n </p>\n </div>\n }\n\n <!-- Progress Bar -->\n @if (isProcessing || isCompleted) {\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <span class=\"progress-label\">{{ 'design.components_ai.bulk_delete_progress' | translate }}</span>\n <span class=\"progress-count\">{{ currentIndex }} / {{ deleteStatuses.length }}</span>\n </div>\n <p-progressBar \n [value]=\"progress\" \n [showValue]=\"false\"\n styleClass=\"custom-progress\"\n ></p-progressBar>\n \n <div class=\"progress-stats\">\n <div class=\"stat success\">\n <i class=\"pi pi-check-circle\"></i>\n <span>{{ successCount }} {{ 'design.components_ai.bulk_delete_success_count' | translate }}</span>\n </div>\n @if (errorCount > 0) {\n <div class=\"stat error\">\n <i class=\"pi pi-times-circle\"></i>\n <span>{{ errorCount }} {{ 'design.components_ai.bulk_delete_error_count' | translate }}</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Status List -->\n @if (isProcessing || isCompleted) {\n <div class=\"status-list\">\n @for (item of deleteStatuses; track item.entity) {\n <div class=\"status-item\">\n <div class=\"status-info\">\n <i [class]=\"getStatusIcon(item.status)\" class=\"status-icon\"></i>\n <div class=\"status-details\">\n <span class=\"stage-name\">{{ item.entity[entityNameField] }}</span>\n @if (item.entity[entityCodeField]) {\n <span class=\"stage-code\">{{ 'design.components_ai.bulk_delete_code_label' | translate }}: {{ item.entity[entityCodeField] }}</span>\n }\n </div>\n </div>\n <div class=\"status-badge\">\n <p-tag \n [value]=\"getStatusLabel(item.status)\" \n [severity]=\"getStatusSeverity(item.status)\"\n >\n @if (item.status === 'processing') {\n <i class=\"pi pi-spin pi-spinner\"></i>\n }\n </p-tag>\n @if (item.status === 'error' && item.errorMessage) {\n <small class=\"error-message\">\n {{ item.errorMessage }}\n </small>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Completion Message -->\n @if (isCompleted) {\n <div class=\"completion-section\">\n <div class=\"completion-message\" [class.has-errors]=\"errorCount > 0\">\n <i [class]=\"errorCount > 0 ? 'pi pi-exclamation-circle' : 'pi pi-check-circle'\" class=\"completion-icon\"></i>\n @if (errorCount === 0) {\n <p>\n {{ 'design.components_ai.bulk_delete_success_message' | translate }}\n </p>\n }\n @if (errorCount > 0) {\n <p>\n {{ 'design.components_ai.bulk_delete_completed_with_errors' | translate:{ count: errorCount } }}\n </p>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"dialog-footer\">\n @if (!isProcessing && !isCompleted) {\n <p-button\n [label]=\"'design.components_ai.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onClose()\"\n ></p-button>\n <p-button\n [label]=\"'design.components_ai.bulk_delete_confirm' | translate\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n (onClick)=\"startDeletion()\"\n ></p-button>\n }\n @if (isCompleted) {\n <p-button\n [label]=\"'design.components_ai.close' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onClose()\"\n ></p-button>\n }\n </div>\n </ng-template>\n</p-dialog>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { TranslationService } from '../../services/translation.service';\n\ninterface BreadcrumbData {\n title: string;\n icon?: string;\n}\n\ninterface BreadcrumbItem {\n label: string;\n icon?: string;\n url?: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'sia-breadcrumb',\n standalone: true,\n imports: [CommonModule],\n template: `\n <nav class=\"breadcrumb-container\" aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb-list\">\n <li class=\"breadcrumb-item\" [class.disabled]=\"homeItem.disabled\">\n <a *ngIf=\"!homeItem.disabled && homeItem.url\" \n [href]=\"homeItem.url\" \n class=\"breadcrumb-link\"\n [title]=\"homeItem.label\">\n <i *ngIf=\"homeItem.icon\" [class]=\"homeItem.icon\"></i>\n </a>\n <span *ngIf=\"homeItem.disabled || !homeItem.url\" class=\"breadcrumb-text\">\n <i *ngIf=\"homeItem.icon\" [class]=\"homeItem.icon\"></i>\n </span>\n </li>\n \n <ng-container *ngFor=\"let item of breadcrumbItems; let last = last\">\n <li class=\"breadcrumb-separator\" aria-hidden=\"true\">/</li>\n <li class=\"breadcrumb-item\" [class.active]=\"last\" [class.disabled]=\"item.disabled\">\n <a *ngIf=\"!item.disabled && item.url\" \n [href]=\"item.url\" \n class=\"breadcrumb-link\"\n [title]=\"item.label\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </a>\n <span *ngIf=\"item.disabled || !item.url\" class=\"breadcrumb-text\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\"></i>\n <span>{{ item.label }}</span>\n </span>\n </li>\n </ng-container>\n </ol>\n </nav>\n `,\n styles: [`\n .breadcrumb-container {\n background: transparent;\n padding: 0;\n margin-bottom: 1rem;\n }\n \n .breadcrumb-list {\n display: flex;\n align-items: center;\n list-style: none;\n padding: 0;\n margin: 0;\n flex-wrap: wrap;\n }\n \n .breadcrumb-item {\n display: flex;\n align-items: center;\n }\n \n .breadcrumb-link {\n color: var(--p-text-secondary-color, #64748b);\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n border-radius: 6px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .breadcrumb-link:hover {\n background: var(--p-primary-50, #eff6ff);\n color: var(--p-primary-600, #2563eb);\n }\n \n .breadcrumb-text {\n color: var(--p-text-secondary-color, #64748b);\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .breadcrumb-item.active .breadcrumb-text,\n .breadcrumb-item.active .breadcrumb-link {\n color: var(--p-primary-600, #2563eb);\n font-weight: 600;\n background: var(--p-primary-50, #eff6ff);\n }\n \n .breadcrumb-item.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n \n .breadcrumb-separator {\n color: var(--p-text-muted-color, #94a3b8);\n margin: 0 8px;\n font-size: 14px;\n }\n \n .breadcrumb-link i,\n .breadcrumb-text i {\n font-size: 16px;\n }\n `]\n})\nexport class BreadcrumbComponent implements OnInit {\n @Input() translationPrefix: string = 'design.components_ai';\n @Input() isProduction: boolean = false;\n \n breadcrumbItems: BreadcrumbItem[] = [];\n homeItem: BreadcrumbItem = { label: 'Home', icon: 'pi pi-home', disabled: true };\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private translationService: TranslationService\n ) {}\n\n ngOnInit(): void {\n this.updateHomeItem();\n this.buildBreadcrumbs();\n \n // Atualiza breadcrumbs quando a navegação muda\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(() => this.buildBreadcrumbs());\n }\n\n private updateHomeItem(): void {\n // Só mostra o link do home em desenvolvimento\n if (!this.isProduction) {\n this.homeItem = {\n icon: 'pi pi-home',\n url: '#/main',\n label: this.t('breadcrumb_home'),\n disabled: false\n };\n } else {\n // Em produção, o home não tem link (apenas ícone)\n this.homeItem = {\n icon: 'pi pi-home',\n label: this.t('breadcrumb_home'),\n disabled: true\n };\n }\n }\n\n private buildBreadcrumbs(): void {\n const breadcrumbs: BreadcrumbItem[] = [];\n let currentRoute: ActivatedRoute | null = this.activatedRoute.root;\n let url = '';\n let lastBreadcrumbLabel = '';\n\n // Percorre toda a árvore de rotas\n while (currentRoute) {\n // Verifica se há segmentos de URL\n if (currentRoute.snapshot.url.length > 0) {\n const routeURL = currentRoute.snapshot.url.map(segment => segment.path).join('/');\n url += `/${routeURL}`;\n }\n \n // Verifica se a rota tem dados de breadcrumb\n const breadcrumbData = currentRoute.snapshot.data['breadcrumb'] as BreadcrumbData;\n \n // Adiciona o breadcrumb se existir e não for duplicado\n if (breadcrumbData) {\n const label = this.t(breadcrumbData.title);\n \n // Só adiciona se não for o mesmo label do anterior (evita duplicação)\n if (label !== lastBreadcrumbLabel) {\n breadcrumbs.push({\n label: label,\n icon: breadcrumbData.icon,\n url: url ? `#${url}` : undefined\n });\n lastBreadcrumbLabel = label;\n }\n }\n\n // Move para a próxima rota filha\n currentRoute = currentRoute.firstChild;\n }\n\n // O último item não deve ter link (está desabilitado)\n if (breadcrumbs.length > 0) {\n const lastItem = breadcrumbs[breadcrumbs.length - 1];\n lastItem.url = undefined;\n lastItem.disabled = true;\n }\n\n this.breadcrumbItems = breadcrumbs;\n }\n\n private t(key: string): string {\n return this.translationService.translate(key);\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type LoadingVariant =\n | 'dots' | 'pulse' | 'bars' | 'orbit' | 'morph' | 'wave' | 'skeleton'\n | 'senior-draw' | 'senior-pulse' | 'senior-glow' | 'senior-flip' | 'senior-bounce' | 'senior-reveal';\nexport type LoadingColor = 'primary' | 'secondary' | 'success' | 'warn' | 'danger' | 'info' | 'senior';\n\nconst COLOR_MAP: Record<LoadingColor, { base: string; light: string }> = {\n primary: { base: 'var(--p-primary-500, #3b82f6)', light: 'var(--p-primary-300, #93c5fd)' },\n secondary: { base: 'var(--p-surface-500, #64748b)', light: 'var(--p-surface-300, #cbd5e1)' },\n success: { base: 'var(--p-green-500, #22c55e)', light: 'var(--p-green-300, #86efac)' },\n warn: { base: 'var(--p-yellow-500, #eab308)', light: 'var(--p-yellow-300, #fde047)' },\n danger: { base: 'var(--p-red-500, #ef4444)', light: 'var(--p-red-300, #fca5a5)' },\n info: { base: 'var(--p-blue-500, #3b82f6)', light: 'var(--p-blue-300, #93c5fd)' },\n senior: { base: '#0d9488', light: '#00c89a' },\n};\n\nconst SENIOR_PATH_RIGHT = 'M174.719 518.932L258.161 439.782C264.546 433.762 269.614 426.603 273.072 418.719C276.53 410.834 278.31 402.378 278.31 393.838C278.31 385.298 276.53 376.843 273.072 368.958C269.614 361.073 264.546 353.915 258.161 347.895L174.719 269.199C168.45 263.304 163.474 256.289 160.077 248.56C156.681 240.83 154.933 232.539 154.933 224.165C154.933 215.792 156.681 207.501 160.077 199.771C163.474 192.042 168.45 185.027 174.719 179.132L303.718 301.496C329.517 326.089 344 359.371 344 394.066C344 428.76 329.517 462.043 303.718 486.635L174.719 609C168.45 603.105 163.474 596.09 160.077 588.36C156.681 580.631 154.933 572.34 154.933 563.966C154.933 555.592 156.681 547.301 160.077 539.572C163.474 531.842 168.45 524.828 174.719 518.932Z';\nconst SENIOR_PATH_LEFT = 'M173.76 94.0677L90.3189 173.218C83.9334 179.238 78.8659 186.397 75.408 194.281C71.95 202.166 70.1698 210.622 70.1698 219.162C70.1698 227.702 71.95 236.157 75.408 244.042C78.8659 251.927 83.9334 259.085 90.3189 265.105L173.76 344.256C180.03 350.151 185.006 357.166 188.402 364.895C191.798 372.625 193.547 380.916 193.547 389.289C193.547 397.663 191.798 405.954 188.402 413.684C185.006 421.413 180.03 428.428 173.76 434.323L44.2823 311.504C18.4832 286.911 4 253.629 4 218.934C4 184.24 18.4832 150.957 44.2823 126.365L173.76 4C186.213 16.0129 193.192 32.1861 193.192 49.0338C193.192 65.8815 186.213 82.0547 173.76 94.0677Z';\nconst SENIOR_PATH_FULL = SENIOR_PATH_RIGHT + ' ' + SENIOR_PATH_LEFT;\n\n@Component({\n selector: 'sia-loading',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n template: `\n <div class=\"sia-loading\" [style.padding]=\"padding\"\n [class.sia-loading--skeleton]=\"variant === 'skeleton'\"\n [style.--sia-c]=\"colorBase\" [style.--sia-cl]=\"colorLight\">\n\n <div class=\"sia-dots\" *ngIf=\"variant === 'dots'\">\n <span class=\"dot\" *ngFor=\"let d of [0,1,2]\" [style.--i]=\"d\"></span>\n </div>\n\n <div class=\"sia-pulse\" *ngIf=\"variant === 'pulse'\" [style.--size]=\"size + 'px'\">\n <span class=\"ring ring-1\"></span>\n <span class=\"ring ring-2\"></span>\n <span class=\"core\"></span>\n </div>\n\n <div class=\"sia-bars\" *ngIf=\"variant === 'bars'\" [style.--h]=\"size + 'px'\">\n <span class=\"bar\" *ngFor=\"let b of [0,1,2,3,4]\" [style.--i]=\"b\"></span>\n </div>\n\n <div class=\"sia-orbit\" *ngIf=\"variant === 'orbit'\" [style.--size]=\"size + 'px'\">\n <span class=\"orbit-track\"></span>\n <span class=\"orbit-dot orbit-dot-1\"></span>\n <span class=\"orbit-dot orbit-dot-2\"></span>\n </div>\n\n <div class=\"sia-morph\" *ngIf=\"variant === 'morph'\" [style.--size]=\"size + 'px'\">\n <span class=\"morph-shape\"></span>\n </div>\n\n <div class=\"sia-wave\" *ngIf=\"variant === 'wave'\">\n <span class=\"wave-dot\" *ngFor=\"let w of [0,1,2,3,4,5,6]\" [style.--i]=\"w\"></span>\n </div>\n\n <div class=\"sia-skeleton\" *ngIf=\"variant === 'skeleton'\">\n <div class=\"skel-row skel-row--header\">\n <div class=\"skel-circle\"></div>\n <div class=\"skel-lines\">\n <div class=\"skel-line skel-line--md\"></div>\n <div class=\"skel-line skel-line--sm\"></div>\n </div>\n </div>\n <div class=\"skel-line skel-line--full\"></div>\n <div class=\"skel-line skel-line--lg\"></div>\n <div class=\"skel-line skel-line--md\"></div>\n </div>\n\n <!-- ═══ SENIOR VARIANTS ═══ -->\n\n <!-- senior-draw: stroke draw animation -->\n <div class=\"sia-senior-draw\" *ngIf=\"variant === 'senior-draw'\" [style.--size]=\"size + 'px'\">\n <svg [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 348 613\" fill=\"none\">\n <path class=\"sp sp-r\" [attr.d]=\"pathRight\"\n [attr.stroke]=\"colorBase\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path class=\"sp sp-l\" [attr.d]=\"pathLeft\"\n [attr.stroke]=\"colorBase\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- senior-pulse: circle with logo, pulse + scale -->\n <div class=\"sia-senior-pulse\" *ngIf=\"variant === 'senior-pulse'\" [style.--size]=\"size + 'px'\">\n <div class=\"sp-circle\">\n <svg [attr.width]=\"size * 0.5\" [attr.height]=\"size * 0.88\" viewBox=\"0 0 348 613\" fill=\"none\">\n <path [attr.d]=\"pathFull\" fill=\"white\" />\n </svg>\n </div>\n </div>\n\n <!-- senior-glow: neon glow with breathing -->\n <div class=\"sia-senior-glow\" *ngIf=\"variant === 'senior-glow'\" [style.--size]=\"size + 'px'\">\n <svg [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 348 613\" fill=\"none\">\n <path class=\"glow-shadow\" [attr.d]=\"pathFull\" [attr.stroke]=\"colorLight\" stroke-width=\"12\" fill=\"none\" />\n <path class=\"glow-main\" [attr.d]=\"pathFull\" [attr.stroke]=\"colorBase\" stroke-width=\"4\" fill=\"none\" />\n </svg>\n </div>\n\n <!-- senior-flip: 3D Y-axis flip -->\n <div class=\"sia-senior-flip\" *ngIf=\"variant === 'senior-flip'\" [style.--size]=\"size + 'px'\">\n <svg [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 348 613\" fill=\"none\">\n <path [attr.d]=\"pathFull\" [attr.fill]=\"colorBase\" />\n </svg>\n </div>\n\n <!-- senior-bounce: alternating halves bounce -->\n <div class=\"sia-senior-bounce\" *ngIf=\"variant === 'senior-bounce'\" [style.--size]=\"size + 'px'\">\n <svg [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 348 613\" fill=\"none\">\n <path class=\"bounce-r\" [attr.d]=\"pathRight\" [attr.fill]=\"colorBase\" />\n <path class=\"bounce-l\" [attr.d]=\"pathLeft\" [attr.fill]=\"colorLight\" />\n </svg>\n </div>\n\n <!-- senior-reveal: tennis ball bouncing with Senior logo inside -->\n <div class=\"sia-senior-reveal\" *ngIf=\"variant === 'senior-reveal'\" [style.--size]=\"size * 1.3 + 'px'\">\n <!-- Tennis ball with Senior logo inside -->\n <svg class=\"sr-ball\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <clipPath id=\"sr-clip\"><circle cx=\"50\" cy=\"50\" r=\"48\" /></clipPath>\n </defs>\n <circle cx=\"50\" cy=\"50\" r=\"48\" [attr.fill]=\"colorBase\" />\n <g clip-path=\"url(#sr-clip)\">\n <!-- top-right seam curve -->\n <path d=\"M38 -2 C58 18, 62 38, 102 48\" stroke=\"white\" stroke-width=\"9\" fill=\"none\" stroke-linecap=\"round\" opacity=\"0.15\" />\n <path d=\"M38 -2 C58 18, 62 38, 102 48\" stroke=\"white\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\" opacity=\"0.8\" />\n <!-- bottom-left seam curve -->\n <path d=\"M-2 52 C38 62, 42 82, 62 102\" stroke=\"white\" stroke-width=\"9\" fill=\"none\" stroke-linecap=\"round\" opacity=\"0.15\" />\n <path d=\"M-2 52 C38 62, 42 82, 62 102\" stroke=\"white\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\" opacity=\"0.8\" />\n <g transform=\"translate(32.6, 19.4) scale(0.10)\">\n <path [attr.d]=\"pathFull\" fill=\"white\" opacity=\"0.8\" />\n </g>\n </g>\n </svg>\n <div class=\"sr-shadow\"></div>\n </div>\n\n <span class=\"sia-loading-text\" *ngIf=\"text && variant !== 'skeleton'\">{{ text }}</span>\n </div>\n `,\n styles: [`\n :host { display: block; }\n .sia-loading {\n display: flex; flex-direction: column; justify-content: center;\n align-items: center; gap: 0.75rem; padding: 3rem 0;\n }\n .sia-loading--skeleton { align-items: stretch; }\n .sia-loading-text { color: var(--p-text-muted-color, #94a3b8); font-size: 0.8rem; letter-spacing: 0.02em; }\n\n /* ── Dots ── */\n .sia-dots { display: flex; gap: 6px; align-items: center; }\n .sia-dots .dot {\n width: 10px; height: 10px; border-radius: 50%; background: var(--sia-c);\n animation: sia-dot-bounce 1.2s calc(var(--i) * 0.15s) ease-in-out infinite;\n }\n @keyframes sia-dot-bounce {\n 0%, 60%, 100% { transform: translateY(0) scale(1); opacity: 0.4; }\n 30% { transform: translateY(-12px) scale(1.15); opacity: 1; }\n }\n\n /* ── Pulse ── */\n .sia-pulse { position: relative; width: var(--size, 40px); height: var(--size, 40px); }\n .sia-pulse .ring {\n position: absolute; inset: 0; border-radius: 50%;\n border: 2px solid var(--sia-c); opacity: 0;\n }\n .sia-pulse .ring-1 { animation: sia-ripple 1.8s 0s ease-out infinite; }\n .sia-pulse .ring-2 { animation: sia-ripple 1.8s 0.6s ease-out infinite; }\n .sia-pulse .core {\n position: absolute; top: 50%; left: 50%; width: 10px; height: 10px;\n margin: -5px 0 0 -5px; border-radius: 50%; background: var(--sia-c);\n animation: sia-core-pulse 1.8s ease-in-out infinite;\n }\n @keyframes sia-ripple { 0% { transform: scale(0.3); opacity: 0.8; } 100% { transform: scale(1); opacity: 0; } }\n @keyframes sia-core-pulse { 0%, 100% { transform: scale(1); opacity: 0.6; } 50% { transform: scale(1.3); opacity: 1; } }\n\n /* ── Bars ── */\n .sia-bars { display: flex; align-items: center; gap: 3px; height: var(--h, 40px); }\n .sia-bars .bar {\n width: 4px; height: 40%; border-radius: 2px; background: var(--sia-c);\n animation: sia-bar-wave 1s calc(var(--i) * 0.1s) ease-in-out infinite;\n }\n @keyframes sia-bar-wave { 0%, 100% { height: 20%; opacity: 0.4; } 50% { height: 100%; opacity: 1; } }\n\n /* ── Orbit ── */\n .sia-orbit { position: relative; width: var(--size, 40px); height: var(--size, 40px); }\n .sia-orbit .orbit-track { position: absolute; inset: 0; border-radius: 50%; border: 1.5px solid var(--p-surface-200, #e2e8f0); }\n .sia-orbit .orbit-dot { position: absolute; width: 8px; height: 8px; border-radius: 50%; top: -4px; left: calc(50% - 4px); }\n .sia-orbit .orbit-dot-1 {\n background: var(--sia-c); animation: sia-orbit-spin 1.4s linear infinite;\n transform-origin: 50% calc(var(--size, 40px) / 2 + 4px);\n }\n .sia-orbit .orbit-dot-2 {\n background: var(--sia-cl); animation: sia-orbit-spin 1.4s 0.7s linear infinite;\n transform-origin: 50% calc(var(--size, 40px) / 2 + 4px);\n }\n @keyframes sia-orbit-spin { to { transform: rotate(360deg); } }\n\n /* ── Morph ── */\n .sia-morph { width: var(--size, 40px); height: var(--size, 40px); display: flex; align-items: center; justify-content: center; }\n .sia-morph .morph-shape {\n width: 70%; height: 70%; background: var(--sia-c);\n animation: sia-morph 2.4s ease-in-out infinite;\n }\n @keyframes sia-morph {\n 0% { border-radius: 50% 50% 50% 50%; transform: rotate(0deg) scale(1); }\n 25% { border-radius: 30% 70% 50% 50%; transform: rotate(90deg) scale(0.85); }\n 50% { border-radius: 50% 30% 70% 30%; transform: rotate(180deg) scale(1); }\n 75% { border-radius: 70% 50% 30% 70%; transform: rotate(270deg) scale(0.85); }\n 100% { border-radius: 50% 50% 50% 50%; transform: rotate(360deg) scale(1); }\n }\n\n /* ── Wave ── */\n .sia-wave { display: flex; align-items: center; gap: 3px; }\n .sia-wave .wave-dot {\n width: 6px; height: 6px; border-radius: 50%; background: var(--sia-c);\n animation: sia-wave-flow 1.6s calc(var(--i) * 0.12s) ease-in-out infinite;\n }\n @keyframes sia-wave-flow {\n 0%, 100% { transform: translateY(0) scale(0.6); opacity: 0.3; }\n 50% { transform: translateY(-10px) scale(1); opacity: 1; }\n }\n\n /* ── Skeleton ── */\n .sia-skeleton { display: flex; flex-direction: column; gap: 0.75rem; padding: 0 1rem; width: 100%; }\n .skel-row { display: flex; align-items: center; gap: 0.75rem; }\n .skel-row--header { margin-bottom: 0.25rem; }\n .skel-circle {\n width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0;\n background: var(--p-surface-200, #e2e8f0); animation: sia-shimmer 1.6s ease-in-out infinite;\n }\n .skel-lines { flex: 1; display: flex; flex-direction: column; gap: 0.4rem; }\n .skel-line {\n height: 10px; border-radius: 4px; background: var(--p-surface-200, #e2e8f0);\n animation: sia-shimmer 1.6s ease-in-out infinite;\n }\n .skel-line--full { width: 100%; animation-delay: 0.1s; }\n .skel-line--lg { width: 75%; animation-delay: 0.2s; }\n .skel-line--md { width: 55%; animation-delay: 0.3s; }\n .skel-line--sm { width: 35%; animation-delay: 0.15s; }\n @keyframes sia-shimmer { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n\n /* ══════════════════════════════════════════════════════════════\n SENIOR VARIANTS\n ══════════════════════════════════════════════════════════════ */\n\n /* ── senior-draw: stroke draw animation ── */\n .sia-senior-draw { width: var(--size, 40px); height: var(--size, 40px); display: flex; align-items: center; justify-content: center; }\n .sia-senior-draw .sp { stroke-dasharray: 1200; stroke-dashoffset: 1200; }\n .sia-senior-draw .sp-r { animation: sia-sd-r 2s ease-in-out infinite; }\n .sia-senior-draw .sp-l { animation: sia-sd-l 2s ease-in-out infinite; }\n @keyframes sia-sd-r {\n 0% { stroke-dashoffset: 1200; opacity: 0.2; }\n 35% { stroke-dashoffset: 0; opacity: 1; }\n 60% { stroke-dashoffset: 0; opacity: 1; }\n 100% { stroke-dashoffset: -1200; opacity: 0.2; }\n }\n @keyframes sia-sd-l {\n 0% { stroke-dashoffset: 1200; opacity: 0.2; }\n 15% { stroke-dashoffset: 1200; opacity: 0.2; }\n 50% { stroke-dashoffset: 0; opacity: 1; }\n 65% { stroke-dashoffset: 0; opacity: 1; }\n 100% { stroke-dashoffset: -1200; opacity: 0.2; }\n }\n\n /* ── senior-pulse: circle with logo, pulse + scale ── */\n .sia-senior-pulse { display: flex; align-items: center; justify-content: center; }\n .sia-senior-pulse .sp-circle {\n width: var(--size, 64px); height: var(--size, 64px); border-radius: 50%;\n background-color: var(--sia-c); display: flex; align-items: center; justify-content: center;\n position: relative;\n animation: sia-sp-pulse 1.4s ease-out infinite, sia-sp-scale 1.4s ease-in-out infinite;\n }\n @keyframes sia-sp-pulse {\n 0% { box-shadow: 0 0 0 0 var(--sia-cl); }\n 70% { box-shadow: 0 0 0 20px transparent; }\n 100%{ box-shadow: 0 0 0 0 transparent; }\n }\n @keyframes sia-sp-scale { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.12); } }\n\n /* ── senior-glow: neon glow breathing ── */\n .sia-senior-glow { width: var(--size, 40px); height: var(--size, 40px); display: flex; align-items: center; justify-content: center; }\n .sia-senior-glow .glow-shadow {\n opacity: 0.3; filter: blur(4px);\n animation: sia-sg-breathe 2s ease-in-out infinite;\n }\n .sia-senior-glow .glow-main {\n animation: sia-sg-breathe 2s ease-in-out infinite;\n }\n @keyframes sia-sg-breathe {\n 0%, 100% { opacity: 0.4; filter: drop-shadow(0 0 2px var(--sia-cl)); }\n 50% { opacity: 1; filter: drop-shadow(0 0 10px var(--sia-cl)) drop-shadow(0 0 20px var(--sia-c)); }\n }\n\n /* ── senior-flip: 3D Y-axis flip ── */\n .sia-senior-flip {\n width: var(--size, 40px); height: var(--size, 40px);\n display: flex; align-items: center; justify-content: center;\n perspective: 300px;\n }\n .sia-senior-flip svg {\n animation: sia-sf-flip 2s ease-in-out infinite;\n transform-style: preserve-3d;\n }\n @keyframes sia-sf-flip {\n 0% { transform: rotateY(0deg); }\n 50% { transform: rotateY(180deg); }\n 100% { transform: rotateY(360deg); }\n }\n\n /* ── senior-bounce: alternating halves bounce ── */\n .sia-senior-bounce { width: var(--size, 40px); height: var(--size, 40px); display: flex; align-items: center; justify-content: center; }\n .sia-senior-bounce .bounce-r {\n animation: sia-sb-r 1.2s ease-in-out infinite;\n transform-origin: center center;\n }\n .sia-senior-bounce .bounce-l {\n animation: sia-sb-l 1.2s ease-in-out infinite;\n transform-origin: center center;\n }\n @keyframes sia-sb-r {\n 0%, 100% { transform: translateY(0) scale(1); opacity: 0.7; }\n 50% { transform: translateY(-8px) scale(1.05); opacity: 1; }\n }\n @keyframes sia-sb-l {\n 0%, 100% { transform: translateY(-8px) scale(1.05); opacity: 1; }\n 50% { transform: translateY(0) scale(1); opacity: 0.7; }\n }\n\n /* ── senior-reveal: tennis ball bounce ── */\n .sia-senior-reveal {\n width: var(--size, 64px); height: calc(var(--size, 64px) * 1.4);\n position: relative; display: flex; align-items: center; justify-content: center;\n }\n .sia-senior-reveal .sr-ball {\n position: absolute; width: var(--size, 64px); height: var(--size, 64px);\n border-radius: 50%; overflow: hidden;\n animation: sia-sr-bounce 1.2s ease-in-out infinite;\n }\n .sia-senior-reveal .sr-shadow {\n position: absolute; bottom: 0; width: 60%; height: 6px;\n border-radius: 50%; background: rgba(0,0,0,0.12);\n animation: sia-sr-shadow 1.2s ease-in-out infinite;\n }\n\n @keyframes sia-sr-bounce {\n 0%, 100% { transform: translateY(20%) scaleX(1.06) scaleY(0.94); }\n 50% { transform: translateY(-25%) scaleX(0.96) scaleY(1.04); }\n }\n @keyframes sia-sr-shadow {\n 0%, 100% { transform: scaleX(1); opacity: 0.12; }\n 50% { transform: scaleX(0.6); opacity: 0.06; }\n }\n `]\n})\nexport class LoadingComponent {\n @Input() variant: LoadingVariant = 'senior-reveal';\n @Input() color: LoadingColor = 'senior';\n @Input() size: number = 40;\n @Input() text: string = '';\n @Input() padding: string = '3rem 0';\n\n get colorBase(): string {\n return (COLOR_MAP[this.color] || COLOR_MAP['senior']).base;\n }\n\n get colorLight(): string {\n return (COLOR_MAP[this.color] || COLOR_MAP['senior']).light;\n }\n\n pathRight = SENIOR_PATH_RIGHT;\n pathLeft = SENIOR_PATH_LEFT;\n pathFull = SENIOR_PATH_FULL;\n}\n","import { Directive, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { TableLazyLoadEvent } from 'primeng/table';\nimport { MessageService, ConfirmationService } from 'primeng/api';\nimport { TranslationService } from '../../services/translation.service';\nimport { EntityService } from '../../services/entity.service';\nimport { ColumnOption } from '../export-dialog/export-dialog.component';\n\n/**\n * Base class for entity list components\n * Eliminates code duplication between feature list components\n */\n@Directive()\nexport abstract class EntityListBaseComponent<T extends { id?: string; name?: string }> implements OnInit {\n // Data\n entities: T[] = [];\n selectedEntities: T[] = [];\n totalRecords: number = 0;\n \n // Filters\n filterValues: { [key: string]: any } = {};\n \n // Pagination and sorting\n currentPage: number = 0;\n pageSize: number = 10;\n sortField: string = '';\n sortOrder: number = 1;\n\n // UI control\n loading: boolean = false;\n showExportDialog: boolean = false;\n showFormDialog: boolean = false;\n showBulkDeleteDialog: boolean = false;\n selectedEntityForEdit: T | null = null;\n firstLoad: boolean = true;\n\n // Configuration\n config: any;\n exportColumns: ColumnOption[] = [];\n\n constructor(\n protected service: EntityService<T>,\n protected messageService: MessageService,\n protected confirmationService: ConfirmationService,\n protected translationService: TranslationService,\n protected cdr: ChangeDetectorRef\n ) {}\n\n abstract ngOnInit(): void;\n abstract getEntityTranslationKey(): string;\n abstract getEntityPluralTranslationKey(): string;\n abstract buildFilterQuery(): string;\n\n /**\n * Load data from API\n */\n loadData(event?: TableLazyLoadEvent): void {\n if (this.firstLoad && !event) {\n this.firstLoad = false;\n return;\n }\n\n this.loading = true;\n\n if (event) {\n this.currentPage = event.first! / event.rows!;\n this.pageSize = event.rows!;\n \n if (event.sortField) {\n this.sortField = event.sortField as string;\n this.sortOrder = event.sortOrder!;\n }\n }\n\n const filterQuery = this.buildFilterQuery();\n\n const listParams: any = {\n page: this.currentPage,\n size: this.pageSize\n };\n\n if (filterQuery) {\n listParams.filterQuery = filterQuery;\n }\n\n if (this.sortField) {\n const sortDirection = this.sortOrder === 1 ? 'asc' : 'desc';\n listParams.sort = [`${this.sortField},${sortDirection}`];\n }\n\n this.service.list(listParams).subscribe({\n next: (response: any) => {\n this.entities = response.contents || [];\n this.totalRecords = response.totalElements || 0;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (error: any) => {\n console.error(`Error loading ${this.getEntityPluralTranslationKey()}:`, error);\n this.messageService.add({\n severity: 'error',\n summary: this.translationService.translate('design.components_ai.error'),\n detail: this.translationService.translate('design.components_ai.load_error', { \n entityType: this.translationService.translate(this.getEntityPluralTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n /**\n * Apply filters and reload data\n */\n onApplyFilters(filterValues: any): void {\n this.filterValues = filterValues;\n this.currentPage = 0;\n this.selectedEntities = [];\n \n const event: TableLazyLoadEvent = {\n first: 0,\n rows: this.pageSize,\n sortField: this.sortField,\n sortOrder: this.sortOrder\n };\n \n this.loadData(event);\n }\n\n /**\n * Clear filters and reload data\n */\n onClearFilters(): void {\n this.filterValues = {};\n this.onApplyFilters({});\n }\n\n clearSelection(): void {\n this.selectedEntities = [];\n }\n\n onAdd(): void {\n this.selectedEntityForEdit = null;\n this.showFormDialog = true;\n }\n\n onEdit(entity: T): void {\n this.selectedEntityForEdit = entity;\n this.showFormDialog = true;\n }\n\n onFormSave(): void {\n this.reloadData();\n }\n\n onDelete(entity: T): void {\n this.confirmationService.confirm({\n message: this.translationService.translate('design.components_ai.confirm_delete_message', { \n itemName: entity.name || entity.id \n }),\n header: this.translationService.translate('design.components_ai.confirm_delete'),\n icon: 'pi pi-exclamation-triangle',\n acceptLabel: this.translationService.translate('design.components_ai.yes'),\n rejectLabel: this.translationService.translate('design.components_ai.no'),\n accept: () => {\n this.loading = true;\n this.service.delete(entity.id).subscribe({\n next: () => {\n this.showDeleteSuccess();\n this.reloadData();\n },\n error: (error) => {\n console.error(`Error deleting ${this.getEntityTranslationKey()}:`, error);\n \n if (error.status === 204) {\n this.showDeleteSuccess();\n this.reloadData();\n } else {\n this.showDeleteError();\n }\n }\n });\n }\n });\n }\n\n private showDeleteSuccess(): void {\n this.messageService.add({\n severity: 'success',\n summary: this.translationService.translate('design.components_ai.success'),\n detail: this.translationService.translate('design.components_ai.entity_deleted_success', { \n entityName: this.translationService.translate(this.getEntityTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n\n private showDeleteError(): void {\n this.messageService.add({\n severity: 'error',\n summary: this.translationService.translate('design.components_ai.error'),\n detail: this.translationService.translate('design.components_ai.entity_delete_error', { \n entityName: this.translationService.translate(this.getEntityTranslationKey()) \n }),\n life: 3000\n });\n this.loading = false;\n this.cdr.detectChanges();\n }\n\n onDeleteSelected(): void {\n if (this.selectedEntities.length === 0) return;\n this.showBulkDeleteDialog = true;\n }\n\n onBulkDeleteComplete(): void {\n this.selectedEntities = [];\n this.reloadData();\n }\n\n /**\n * Reload data (force reload)\n */\n reloadData(): void {\n const event: TableLazyLoadEvent = {\n first: this.currentPage * this.pageSize,\n rows: this.pageSize,\n sortField: this.sortField,\n sortOrder: this.sortOrder\n };\n \n this.loadData(event);\n }\n\n onExport(): void {\n this.showExportDialog = true;\n }\n\n /**\n * Get status label for display (override in child class if needed)\n */\n getStatusLabel(status: string): string {\n return this.translationService.translate(`status_${status.toLowerCase()}`);\n }\n\n /**\n * Get status severity for PrimeNG tag (override in child class if needed)\n */\n getStatusSeverity(status: string): 'success' | 'warn' | 'danger' {\n const statusUpper = status.toUpperCase();\n if (statusUpper === 'ACTIVE') return 'success';\n if (statusUpper === 'INACTIVE') return 'warn';\n if (statusUpper === 'DELETED') return 'danger';\n return 'warn';\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Directive para máscara de código postal\n * Usa o locale do cookie por padrão, ou aceita locale por parâmetro\n * Uso: <input siaPostalCodeMask /> -> usa locale do cookie\n * Uso: <input siaPostalCodeMask [postalCodeLocale]=\"'en-US'\" /> -> força ZIP Code\n */\n@Directive({\n selector: '[siaPostalCodeMask]',\n standalone: true\n})\nexport class PostalCodeMaskDirective {\n @Input() postalCodeLocale?: SupportedLanguage;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('keypress', ['$event'])\n onKeyPress(event: KeyboardEvent) {\n const charCode = event.which ? event.which : event.keyCode;\n if (charCode > 31 && (charCode < 48 || charCode > 57)) {\n event.preventDefault();\n return false;\n }\n return true;\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n this.applyMask(pastedText);\n }\n\n private applyMask(value: string) {\n if (!value) {\n this.el.nativeElement.value = '';\n return;\n }\n const masked = this.maskService.applyPostalCodeMask(value, this.postalCodeLocale);\n this.el.nativeElement.value = masked;\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n@Directive({\n selector: '[siaPhoneMask]',\n standalone: true\n})\nexport class PhoneMaskDirective {\n @Input() phoneMaskLocale?: SupportedLanguage;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n this.applyMask(event.target.value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n this.applyMask(pastedText);\n }\n\n private applyMask(value: string) {\n if (!value) return;\n const masked = this.maskService.applyPhoneMask(value, this.phoneMaskLocale);\n if (masked !== value) {\n this.el.nativeElement.value = masked;\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgControl, FormGroup } from '@angular/forms';\nimport { MaskService } from '../services/mask.service';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n selector: '[siaDocumentMask]',\n standalone: true\n})\nexport class DocumentMaskDirective implements OnInit, OnDestroy, OnChanges {\n @Input() documentType: 'cpf' | 'cnpj' | 'auto' = 'auto';\n @Input() typePerson?: 'NATURAL_PERSON' | 'JURIDICAL_PERSON' | null;\n @Input() typePersonField?: string; // Nome do campo no form que determina o tipo\n @Input() parentForm?: FormGroup; // Referência ao form pai\n\n private typePersonSubscription?: Subscription;\n\n constructor(\n private el: ElementRef,\n private control: NgControl,\n private maskService: MaskService\n ) {}\n\n ngOnInit() {\n this.setupTypePersonWatcher();\n if (this.control.value) {\n this.applyMask(this.control.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['typePerson'] && this.control.value) {\n this.applyMask(this.control.value);\n }\n if (changes['parentForm'] || changes['typePersonField']) {\n this.setupTypePersonWatcher();\n }\n }\n\n ngOnDestroy() {\n this.typePersonSubscription?.unsubscribe();\n }\n\n private setupTypePersonWatcher(): void {\n this.typePersonSubscription?.unsubscribe();\n\n if (this.parentForm && this.typePersonField) {\n const typePersonControl = this.parentForm.get(this.typePersonField);\n if (typePersonControl) {\n // Set initial value\n this.typePerson = typePersonControl.value || 'JURIDICAL_PERSON';\n\n // Watch for changes\n this.typePersonSubscription = typePersonControl.valueChanges.subscribe(value => {\n this.typePerson = value || 'JURIDICAL_PERSON';\n if (this.control.value) {\n // Re-apply mask with new type\n const raw = this.maskService.removeMask(this.control.value);\n this.applyMask(raw);\n }\n });\n }\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any): void {\n this.applyMask(event.target.value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any): void {\n this.applyMask(event.target.value);\n }\n\n private applyMask(value: string): void {\n if (!value) {\n this.control.control?.setValue('', { emitEvent: false });\n return;\n }\n\n const type = this.typePerson || 'JURIDICAL_PERSON';\n const masked = this.maskService.applyDocumentMask(value, type);\n this.control.control?.setValue(masked, { emitEvent: false });\n this.el.nativeElement.value = masked;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup } from '@angular/forms';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslatePipe } from '../../../pipes/translate.pipe';\nimport { TranslationService } from '../../../services/translation.service';\n\n/**\n * Componente wrapper para campos de formulário dinâmico\n * Centraliza a renderização de label, campo e mensagem de erro\n */\n@Component({\n selector: 'sia-dynamic-field-wrapper',\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe\n ],\n template: `\n <div class=\"field\">\n <label [for]=\"field.field\">\n {{ field.label | translate }}\n <span *ngIf=\"isRequired()\" class=\"required-asterisk\">*</span>\n </label>\n \n <!-- Conteúdo do campo (projetado via ng-content) -->\n <ng-content></ng-content>\n \n <small *ngIf=\"isFieldInvalid()\" class=\"p-error\">\n {{ getFieldError() }}\n </small>\n </div>\n `,\n styles: [`\n .field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n\n label {\n font-weight: 500;\n color: var(--text-color);\n\n .required-asterisk {\n color: var(--p-red-500);\n margin-left: 0.25rem;\n }\n }\n\n small.p-error {\n margin-top: 0.25rem;\n color: var(--p-red-500);\n }\n }\n `]\n})\nexport class DynamicFieldWrapperComponent {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\n\n isRequired(): boolean {\n return this.field.required === true && this.mode === 'form';\n }\n\n isFieldInvalid(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n getFieldError(): string {\n const control = this.form.get(this.field.field);\n \n if (control?.hasError('required')) {\n return this.translationService.translate('design.components_ai.required_field');\n }\n if (control?.hasError('minlength')) {\n const minLength = this.field.minLength || control.errors?.['minlength'].requiredLength;\n return this.translationService.translate('design.components_ai.min_length_error', { length: minLength });\n }\n if (control?.hasError('maxlength')) {\n const maxLength = this.field.maxLength || control.errors?.['maxlength'].requiredLength;\n return this.translationService.translate('design.components_ai.max_length_error', { length: maxLength });\n }\n if (control?.hasError('min')) {\n const min = this.field.min || control.errors?.['min'].min;\n return this.translationService.translate('design.components_ai.min_value_error', { value: min });\n }\n if (control?.hasError('max')) {\n const max = this.field.max || control.errors?.['max'].max;\n return this.translationService.translate('design.components_ai.max_value_error', { value: max });\n }\n return '';\n }\n}\n","/**\n * Helper para métodos de tradução comuns\n */\nexport class TranslationHelper {\n /**\n * Traduz uma chave usando o prefixo da biblioteca\n */\n static translate(\n translationService: any,\n key: string,\n params?: { [key: string]: any }\n ): string {\n if (!translationService) {\n return key;\n }\n\n // Se a chave já tem o prefixo, usa diretamente\n const fullKey = key.includes('.') ? key : `design.components_ai.${key}`;\n const translated = translationService.translate(fullKey, params);\n\n // Se params foi fornecido e a tradução contém placeholders, fazer replace manual\n if (params && translated.includes('{{')) {\n return Object.keys(params).reduce((text, paramKey) => {\n return text.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), params[paramKey]);\n }, translated);\n }\n\n return translated;\n }\n\n /**\n * Gera placeholder para campos de filtro\n */\n static getFilterPlaceholder(\n translationService: any,\n mode: 'form' | 'filter',\n fieldLabel: string,\n customPlaceholder?: string,\n isSelect: boolean = false\n ): string {\n if (mode === 'filter') {\n const key = isSelect ? 'filter_select_placeholder' : 'filter_search_placeholder';\n return this.translate(translationService, key, { label: fieldLabel.toLowerCase() });\n }\n return customPlaceholder || '';\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { TranslationHelper } from '../../../utils/translation.helper';\n\n/**\n * Classe base abstrata para todos os campos do dynamic-form\n * Centraliza lógica comum de validação e placeholder\n */\n@Directive()\nexport abstract class DynamicFieldBaseComponent {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(protected translationService: TranslationService) {}\n\n /**\n * Verifica se o campo está inválido e foi tocado/modificado\n */\n isFieldInvalid(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n /**\n * Verifica se o campo foi modificado\n */\n isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n /**\n * Retorna o placeholder apropriado baseado no modo (form/filter)\n */\n getPlaceholder(isSelect: boolean = false): string {\n return TranslationHelper.getFilterPlaceholder(\n this.translationService,\n this.mode,\n this.field.label,\n this.field.placeholder,\n isSelect\n );\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TranslationService } from '../../../services/translation.service';\nimport { PostalCodeMaskDirective } from '../../../directives/postal-code-mask.directive';\nimport { PhoneMaskDirective } from '../../../directives/phone-mask.directive';\nimport { DocumentMaskDirective } from '../../../directives/document-mask.directive';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-text',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n PostalCodeMaskDirective,\n PhoneMaskDirective,\n DocumentMaskDirective,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <input\n *ngIf=\"!field.mask && !field.usePostalCodeMask && !field.usePhoneMask\"\n pInputText\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Código Postal -->\n <input\n *ngIf=\"field.mask === 'cep' || field.mask === 'postalCode' || field.usePostalCodeMask\"\n pInputText\n siaPostalCodeMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Telefone -->\n <input\n *ngIf=\"field.mask === 'phone' || field.usePhoneMask\"\n pInputText\n siaPhoneMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n \n <!-- Input com máscara Documento (dinâmica baseada em typePerson) -->\n <input\n *ngIf=\"field.mask === 'document'\"\n pInputText\n siaDocumentMask\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [parentForm]=\"form\"\n [typePersonField]=\"field.maskDependsOn || 'typePerson'\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n\n <!-- Input com máscara CPF fixa -->\n <input\n *ngIf=\"field.mask === 'cpf'\"\n pInputText\n siaDocumentMask\n [typePerson]=\"'NATURAL_PERSON'\"\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n\n <!-- Input com máscara CNPJ fixa (alfanumérico) -->\n <input\n *ngIf=\"field.mask === 'cnpj'\"\n pInputText\n siaDocumentMask\n [typePerson]=\"'JURIDICAL_PERSON'\"\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\" />\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n input {\n width: 100%;\n }\n `]\n})\nexport class DynamicFieldTextComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-number',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputNumberModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-inputNumber\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [min]=\"field.min\"\n [max]=\"field.max\"\n [minFractionDigits]=\"field.minFractionDigits || 0\"\n [maxFractionDigits]=\"field.maxFractionDigits || 2\"\n [mode]=\"field.numberMode || 'decimal'\"\n [currency]=\"field.currency || 'BRL'\"\n [locale]=\"field.locale || 'pt-BR'\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n styleClass=\"w-full\">\n </p-inputNumber>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-inputNumber {\n width: 100%;\n\n .p-inputnumber {\n width: 100%;\n }\n\n input {\n width: 100%;\n }\n }\n `]\n})\nexport class DynamicFieldNumberComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CalendarModule } from 'primeng/calendar';\nimport { Subscription } from 'rxjs';\nimport { TranslationService } from '../../../services/translation.service';\nimport { LocaleService } from '../../../services/locale.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-date',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CalendarModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-calendar\n *ngIf=\"calendarVisible\"\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [dateFormat]=\"currentDateFormat\"\n [showIcon]=\"true\"\n [showButtonBar]=\"true\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n [appendTo]=\"'body'\"\n styleClass=\"w-full\">\n </p-calendar>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-calendar {\n width: 100%;\n .p-calendar { width: 100%; }\n input { width: 100%; }\n }\n `]\n})\nexport class DynamicFieldDateComponent extends DynamicFieldBaseComponent implements OnInit, OnDestroy {\n currentDateFormat = 'dd/mm/yy';\n calendarVisible = true;\n private langSub?: Subscription;\n\n constructor(\n translationService: TranslationService,\n private localeService: LocaleService,\n private cdr: ChangeDetectorRef\n ) {\n super(translationService);\n }\n\n ngOnInit(): void {\n this.updateDateFormat();\n this.langSub = this.translationService.currentLanguage$.subscribe(() => {\n this.refreshCalendar();\n });\n }\n\n ngOnDestroy(): void {\n this.langSub?.unsubscribe();\n }\n\n /**\n * Força re-criação do p-calendar para aplicar novo dateFormat e locale\n */\n private refreshCalendar(): void {\n this.calendarVisible = false;\n this.cdr.detectChanges();\n this.updateDateFormat();\n this.calendarVisible = true;\n this.cdr.detectChanges();\n }\n\n private updateDateFormat(): void {\n this.currentDateFormat = this.field?.dateFormat || this.localeService.getPrimeNGDateFormat();\n }\n\n override getPlaceholder(): string {\n return super.getPlaceholder(true);\n }\n}\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CalendarModule } from 'primeng/calendar';\nimport { Subscription } from 'rxjs';\nimport { TranslationService } from '../../../services/translation.service';\nimport { LocaleService } from '../../../services/locale.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-datetime',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CalendarModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-calendar\n *ngIf=\"calendarVisible\"\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [dateFormat]=\"currentDateFormat\"\n [showTime]=\"true\"\n [showSeconds]=\"false\"\n [hourFormat]=\"'24'\"\n [showIcon]=\"true\"\n [showButtonBar]=\"true\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n [appendTo]=\"'body'\"\n styleClass=\"w-full\">\n </p-calendar>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-calendar {\n width: 100%;\n .p-calendar { width: 100%; }\n input { width: 100%; }\n }\n `]\n})\nexport class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent implements OnInit, OnDestroy {\n currentDateFormat = 'dd/mm/yy';\n calendarVisible = true;\n private langSub?: Subscription;\n\n constructor(\n translationService: TranslationService,\n private localeService: LocaleService,\n private cdr: ChangeDetectorRef\n ) {\n super(translationService);\n }\n\n ngOnInit(): void {\n this.updateDateFormat();\n this.langSub = this.translationService.currentLanguage$.subscribe(() => {\n this.refreshCalendar();\n });\n }\n\n ngOnDestroy(): void {\n this.langSub?.unsubscribe();\n }\n\n private refreshCalendar(): void {\n this.calendarVisible = false;\n this.cdr.detectChanges();\n this.updateDateFormat();\n this.calendarVisible = true;\n this.cdr.detectChanges();\n }\n\n private updateDateFormat(): void {\n this.currentDateFormat = this.field?.dateFormat || this.localeService.getPrimeNGDateFormat();\n }\n\n override getPlaceholder(): string {\n return super.getPlaceholder(true);\n }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\nimport { TranslationHelper } from '../../../utils/translation.helper';\n\n@Component({\n selector: 'sia-dynamic-field-dropdown',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DropdownModule,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <p-dropdown\n [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [options]=\"getOptions()\"\n [optionLabel]=\"field.optionLabel || 'label'\"\n [optionValue]=\"field.optionValue || 'value'\"\n [placeholder]=\"getPlaceholder()\"\n [showClear]=\"mode === 'filter' || field.showClear\"\n [filter]=\"field.filter || false\"\n [filterBy]=\"field.filterBy\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\"\n [appendTo]=\"'body'\"\n panelStyleClass=\"dynamic-form-dropdown-panel\"\n styleClass=\"w-full\">\n </p-dropdown>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n ::ng-deep p-dropdown {\n width: 100%;\n\n .p-dropdown {\n width: 100%;\n }\n }\n\n /* Estilos para o painel do dropdown */\n .dynamic-form-dropdown-panel {\n min-width: 100% !important;\n }\n `],\n // Estilos globais para o painel do dropdown\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFieldDropdownComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n\n // Override customizado para dropdown\n override getPlaceholder(): string {\n if (this.mode === 'filter') {\n return TranslationHelper.translate(\n this.translationService,\n 'filter_select_placeholder',\n { label: this.field.label.toLowerCase() }\n );\n }\n return this.field.placeholder || TranslationHelper.translate(this.translationService, 'select_option');\n }\n\n getOptions(): any[] {\n if (this.field.type === 'enum' && this.field.enumValues) {\n return this.field.enumValues.map(value => ({\n label: this.field.enumLabels?.[value] || value,\n value: value\n }));\n }\n if (this.field.type === 'enum' && this.field.enumOptions) {\n return this.field.enumOptions;\n }\n return this.field.options || [];\n }\n}\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DialogModule } from 'primeng/dialog';\nimport { TableModule } from 'primeng/table';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslatePipe } from '../../../pipes/translate.pipe';\nimport { TranslationHelper } from '../../../utils/translation.helper';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { LookupColumn } from '../../../models/entity-list.config';\nimport { LoadingComponent } from '../../loading/loading.component';\n\n@Component({\n selector: 'sia-dynamic-field-lookup',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n ButtonModule,\n InputTextModule,\n DialogModule,\n TableModule,\n TooltipModule,\n TranslatePipe,\n DynamicFieldWrapperComponent,\n LoadingComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\" class=\"lookup-field\" [ngClass]=\"{'disabled': isFieldDisabled()}\">\n <!-- Hidden input para o formControl -->\n <input type=\"hidden\" [formControlName]=\"field.field\" />\n \n <div class=\"lookup-input-group\">\n <input\n pInputText\n [value]=\"displayValue\"\n [placeholder]=\"getPlaceholder()\"\n [class.p-invalid]=\"isFieldInvalid()\"\n [disabled]=\"isFieldDisabled()\"\n readonly\n class=\"lookup-display\"\n (click)=\"openLookup()\"\n />\n <div class=\"lookup-buttons\">\n <p-button\n *ngIf=\"currentValue\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"clearValue()\"\n [disabled]=\"isFieldDisabled()\"\n pTooltip=\"Limpar\"\n tooltipPosition=\"top\"\n size=\"small\"\n ></p-button>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"openLookup()\"\n [disabled]=\"isFieldDisabled()\"\n pTooltip=\"Buscar\"\n tooltipPosition=\"top\"\n size=\"small\"\n ></p-button>\n </div>\n </div>\n </div>\n\n <!-- Lookup Dialog -->\n <p-dialog\n [(visible)]=\"showLookupDialog\"\n [modal]=\"true\"\n [style]=\"{ width: '800px', maxHeight: '80vh' }\"\n [contentStyle]=\"{ maxHeight: 'calc(80vh - 120px)', overflow: 'auto' }\"\n [draggable]=\"false\"\n [resizable]=\"true\"\n [header]=\"'Selecionar ' + (field.label | translate)\"\n [appendTo]=\"'body'\"\n (onHide)=\"onDialogHide()\"\n >\n <div class=\"lookup-dialog-content\">\n <!-- Search Input -->\n <div class=\"search-wrapper\">\n <input\n pInputText\n [(ngModel)]=\"searchTerm\"\n [placeholder]=\"'Buscar ' + (field.label | translate).toLowerCase() + '...'\"\n (keydown.enter)=\"onSearch()\"\n class=\"search-input-full\"\n />\n <div class=\"search-buttons-inside\">\n <p-button\n *ngIf=\"searchTerm\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"clearSearch()\"\n class=\"search-button-clear\"\n pTooltip=\"Limpar busca\"\n tooltipPosition=\"top\"\n ></p-button>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n [text]=\"true\"\n [rounded]=\"true\"\n (onClick)=\"onSearch()\"\n class=\"search-button-search\"\n pTooltip=\"Buscar\"\n tooltipPosition=\"top\"\n ></p-button>\n </div>\n </div>\n\n <!-- Loading State -->\n <sia-loading *ngIf=\"loading\" padding=\"2rem 0\" [size]=\"48\"></sia-loading>\n\n <!-- Data Table -->\n <p-table\n *ngIf=\"!loading\"\n [value]=\"filteredData\"\n [paginator]=\"true\"\n [rows]=\"pageSize\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Mostrando {first} a {last} de {totalRecords} registros\"\n dataKey=\"id\"\n [rowHover]=\"true\"\n responsiveLayout=\"scroll\"\n styleClass=\"p-datatable-striped lookup-table\"\n [(selection)]=\"selectedItem\"\n (onRowSelect)=\"onRowSelect($event)\"\n selectionMode=\"single\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\" [style.width]=\"col.width\">\n {{ col.header }}\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item>\n <tr [pSelectableRow]=\"item\">\n <td *ngFor=\"let col of columns\">\n {{ getFieldValue(item, col.field) }}\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"columns.length\" class=\"empty-message\">\n <div class=\"empty-state\">\n <i class=\"pi pi-search\"></i>\n <p>Nenhum registro encontrado</p>\n <small>Tente ajustar os termos de busca</small>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </p-dialog>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n .lookup-field {\n width: 100%;\n position: relative;\n }\n\n .lookup-input-group {\n position: relative;\n width: 100%;\n \n .lookup-display {\n width: 100%;\n cursor: pointer;\n height: 2.857rem;\n padding: 0.75rem 4rem 0.75rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n \n &:focus {\n outline: none;\n }\n \n &:hover {\n background: transparent;\n }\n }\n\n .lookup-buttons {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 2px;\n z-index: 10;\n }\n\n ::ng-deep .p-button {\n width: 2rem !important;\n height: 2rem !important;\n min-width: 2rem !important;\n min-height: 2rem !important;\n padding: 0 !important;\n margin: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n box-sizing: border-box !important;\n \n .p-button-icon {\n margin: 0 !important;\n font-size: 0.875rem !important;\n }\n \n .p-button-label {\n display: none !important;\n }\n }\n }\n\n .lookup-dialog-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n padding: 0;\n\n .search-wrapper {\n position: relative;\n margin-bottom: 16px;\n width: 100%;\n\n .search-input-full {\n width: 100%;\n padding-right: 5.5rem;\n }\n\n .search-buttons-inside {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 2px;\n \n ::ng-deep .p-button {\n width: 2.5rem !important;\n height: 2.5rem !important;\n }\n }\n }\n\n .lookup-table {\n flex: 1;\n \n .empty-state {\n text-align: center;\n padding: 32px;\n color: var(--p-text-color-secondary);\n\n i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n }\n\n p {\n margin: 8px 0;\n font-size: 16px;\n }\n\n small {\n font-size: 14px;\n }\n }\n }\n }\n `]\n})\nexport class DynamicFieldLookupComponent implements OnInit {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() formGroup!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n displayValue: string = '';\n showLookupDialog: boolean = false;\n loading: boolean = false;\n searchTerm: string = '';\n \n data: any[] = [];\n filteredData: any[] = [];\n totalRecords: number = 0;\n currentPage: number = 0;\n pageSize: number = 5;\n selectedItem: any = null;\n private skipNextLazyLoad: boolean = false;\n \n columns: LookupColumn[] = [];\n displayField: string = 'name';\n valueField: string = 'id';\n searchFields: string[] = ['name'];\n\n constructor(private translationService: TranslationService, private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.setupLookupConfig();\n this.watchValueChanges();\n }\n\n private watchValueChanges(): void {\n const control = this.getFormControl();\n if (control) {\n // Carregar valor inicial\n if (control.value) {\n this.handleValueDisplay(control.value);\n }\n \n // Observar mudanças\n control.valueChanges.subscribe((value: any) => {\n if (value !== null && value !== undefined && value !== '') {\n this.handleValueDisplay(value);\n } else {\n this.displayValue = '';\n }\n });\n }\n }\n\n /**\n * Obtém o FormControl, lidando com campos aninhados (com ponto no nome)\n */\n private getFormControl() {\n if (!this.field?.field) {\n return null;\n }\n\n // Acessa diretamente via controls[] pois form.get() não funciona com campos que têm ponto\n return this.form.controls[this.field.field];\n }\n\n private get value(): any {\n const control = this.getFormControl();\n return control?.value;\n }\n\n get currentValue(): any {\n return this.value;\n }\n\n private setValue(value: any): void {\n const control = this.getFormControl();\n control?.setValue(value);\n }\n\n private setupLookupConfig(): void {\n if (this.field) {\n this.displayField = this.field.lookupDisplayField || 'name';\n this.valueField = this.field.lookupValueField || 'id';\n this.searchFields = this.field.lookupSearchFields || ['name'];\n this.columns = this.field.lookupColumns || [\n { field: this.displayField, header: 'Nome', width: '100%' }\n ];\n }\n }\n\n private handleValueDisplay(value: any): void {\n if (value === null || value === undefined || value === '') {\n this.displayValue = '';\n return;\n }\n \n if (typeof value === 'object' && value !== null) {\n this.displayValue = this.formatDisplayValue(value);\n // Keep the full object in the form control\n return;\n }\n \n // Se é um ID (string ou number), não fazer requisição\n // Deixar vazio e só carregar quando abrir o lookup\n if (typeof value === 'string' || typeof value === 'number') {\n this.displayValue = '';\n return;\n }\n }\n\n private formatDisplayValue(item: any): string {\n if (!item) return '';\n \n if (this.field?.lookupDisplayFields && this.field.lookupDisplayFields.length > 0) {\n const values = this.field.lookupDisplayFields\n .map(fieldName => this.getFieldValue(item, fieldName))\n .filter(value => value !== null && value !== undefined && value !== '');\n \n return values.join(' - ');\n }\n \n return this.getFieldValue(item, this.displayField) || '';\n }\n\n isFieldInvalid(): boolean {\n const control = this.getFormControl();\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n isFieldDisabled(): boolean {\n const control = this.getFormControl();\n return control?.disabled || false;\n }\n\n getPlaceholder(): string {\n return TranslationHelper.getFilterPlaceholder(\n this.translationService,\n this.mode,\n this.field.label,\n this.field.placeholder\n );\n }\n\n openLookup(): void {\n if (this.isFieldDisabled()) {\n return;\n }\n \n this.updateSelectedItem();\n \n this.showLookupDialog = true;\n this.currentPage = 0;\n this.searchTerm = '';\n // Delay loadData to next macrotask to avoid NG0100\n // (p-dialog triggers a CD cycle on open that conflicts with loading state change)\n setTimeout(() => this.loadData(), 0);\n }\n\n onDialogHide(): void {\n this.searchTerm = '';\n this.currentPage = 0;\n }\n\n onPageChange(event: any): void {\n if (!this.showLookupDialog) {\n return;\n }\n\n // p-table fires onLazyLoad when it first renders — skip it since\n // openLookup already triggered loadData\n if (this.skipNextLazyLoad) {\n this.skipNextLazyLoad = false;\n return;\n }\n \n this.currentPage = event.first / event.rows;\n this.loadData();\n }\n\n private loadData(): void {\n if (!this.field?.lookupService) {\n return;\n }\n\n this.loading = true;\n \n const listParams: any = { \n page: this.currentPage,\n size: this.pageSize\n };\n\n if (this.field.lookupSort) {\n listParams.sort = this.field.lookupSort;\n }\n \n if (this.searchTerm.trim()) {\n const term = this.searchTerm.trim();\n const filterConditions: string[] = [];\n const isNumericTerm = !isNaN(Number(term)) && term !== '';\n \n this.searchFields.forEach(field => {\n const column = this.columns.find(col => col.field === field);\n const fieldType = column?.type || 'text';\n \n if (fieldType === 'number') {\n if (isNumericTerm) {\n filterConditions.push(`${field} eq ${term}`);\n }\n } else {\n const upperTerm = term.toUpperCase();\n filterConditions.push(`UPPER(${field}) like '%${upperTerm}%'`);\n }\n });\n \n if (filterConditions.length > 0) {\n listParams.filterQuery = filterConditions.join(' or ');\n }\n }\n \n if (this.field.lookupFilters) {\n Object.keys(this.field.lookupFilters).forEach(key => {\n listParams[key] = this.field.lookupFilters![key];\n });\n }\n \n if (this.field.lookupDynamicFilters && this.formGroup) {\n const dynamicFilters = this.field.lookupDynamicFilters(this.formGroup.value);\n \n const dynamicFilterConditions: string[] = [];\n Object.keys(dynamicFilters).forEach(key => {\n const value = dynamicFilters[key];\n if (value !== null && value !== undefined) {\n dynamicFilterConditions.push(`${key} eq '${value}'`);\n }\n });\n \n if (dynamicFilterConditions.length > 0) {\n const dynamicFilterQuery = dynamicFilterConditions.join(' and ');\n if (listParams.filterQuery) {\n listParams.filterQuery = `(${listParams.filterQuery}) and (${dynamicFilterQuery})`;\n } else {\n listParams.filterQuery = dynamicFilterQuery;\n }\n }\n }\n \n this.field.lookupService.list(listParams).subscribe({\n next: (response: any) => {\n this.data = response.contents || [];\n this.filteredData = [...this.data];\n this.totalRecords = response.totalElements || 0;\n \n this.updateSelectedItem();\n \n // Após carregar os dados da grid, se temos um valor selecionado mas sem displayValue,\n // tentar encontrar o item nos dados carregados\n if (this.value && !this.displayValue) {\n const item = this.filteredData.find(i => i[this.valueField] === this.value);\n if (item) {\n this.displayValue = this.formatDisplayValue(item);\n }\n }\n \n this.loading = false;\n // The table will fire onLazyLoad when it first renders — skip it\n this.skipNextLazyLoad = true;\n },\n error: (_error: unknown) => {\n this.data = [];\n this.filteredData = [];\n this.totalRecords = 0;\n this.loading = false;\n this.skipNextLazyLoad = true;\n }\n });\n }\n\n private updateSelectedItem(): void {\n if (!this.value) {\n this.selectedItem = null;\n return;\n }\n \n const item = this.filteredData.find(i => i[this.valueField] === this.value);\n if (item) {\n this.selectedItem = item;\n }\n }\n\n onSearch(): void {\n if (!this.showLookupDialog) {\n return;\n }\n \n this.currentPage = 0;\n this.loadData();\n }\n\n clearSearch(): void {\n this.searchTerm = '';\n this.currentPage = 0;\n this.loadData();\n }\n\n selectItem(item: any): void {\n // Always set the full object, not just the ID\n this.setValue(item);\n this.displayValue = this.formatDisplayValue(item);\n this.showLookupDialog = false;\n }\n\n onRowSelect(event: any): void {\n this.selectItem(event.data);\n }\n\n clearValue(): void {\n this.setValue(null);\n this.displayValue = '';\n this.selectedItem = null;\n }\n\n getFieldValue(item: any, field: string): any {\n return field.split('.').reduce((obj, key) => obj?.[key], item) || '';\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { InputTextarea } from 'primeng/inputtextarea';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\nimport { DynamicFieldBaseComponent } from './dynamic-field-base.component';\n\n@Component({\n selector: 'sia-dynamic-field-textarea',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextarea,\n DynamicFieldWrapperComponent\n ],\n template: `\n <sia-dynamic-field-wrapper [field]=\"field\" [form]=\"form\" [mode]=\"mode\">\n <div [formGroup]=\"form\">\n <textarea\n pInputTextarea\n [id]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [rows]=\"field.rows || 3\"\n [maxlength]=\"field.maxLength || 524288\"\n [class.ng-invalid]=\"isFieldInvalid()\"\n [class.ng-dirty]=\"isFieldDirty()\">\n </textarea>\n </div>\n </sia-dynamic-field-wrapper>\n `,\n styles: [`\n textarea {\n width: 100%;\n resize: vertical;\n }\n `]\n})\nexport class DynamicFieldTextareaComponent extends DynamicFieldBaseComponent {\n constructor(translationService: TranslationService) {\n super(translationService);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PanelModule } from 'primeng/panel';\nimport { DialogModule } from 'primeng/dialog';\nimport { DrawerModule } from 'primeng/drawer';\nimport { ButtonModule } from 'primeng/button';\nimport { \n DynamicFormFieldConfig, \n DynamicFormSection,\n DynamicFormDisplayMode,\n DynamicFormDialogConfig,\n DynamicFormDrawerConfig\n} from './models/dynamic-form.models';\nimport { TranslationService } from '../../services/translation.service';\nimport { MaskService } from '../../services/mask.service';\nimport { LocaleService } from '../../services/locale.service';\nimport { TranslatePipe } from '../../pipes/translate.pipe';\nimport { DynamicFieldTextComponent } from './fields/dynamic-field-text.component';\nimport { DynamicFieldNumberComponent } from './fields/dynamic-field-number.component';\nimport { DynamicFieldDateComponent } from './fields/dynamic-field-date.component';\nimport { DynamicFieldDatetimeComponent } from './fields/dynamic-field-datetime.component';\nimport { DynamicFieldDropdownComponent } from './fields/dynamic-field-dropdown.component';\nimport { DynamicFieldLookupComponent } from './fields/dynamic-field-lookup.component';\nimport { DynamicFieldTextareaComponent } from './fields/dynamic-field-textarea.component';\n\n@Component({\n selector: 'sia-dynamic-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PanelModule,\n DialogModule,\n DrawerModule,\n ButtonModule,\n TranslatePipe,\n DynamicFieldTextComponent,\n DynamicFieldNumberComponent,\n DynamicFieldDateComponent,\n DynamicFieldDatetimeComponent,\n DynamicFieldDropdownComponent,\n DynamicFieldLookupComponent,\n DynamicFieldTextareaComponent\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss'\n})\nexport class DynamicFormComponent implements OnInit, OnChanges {\n @Input() formFields: DynamicFormFieldConfig[] = [];\n @Input() formSections: DynamicFormSection[] = [];\n @Input() fixedFilters: DynamicFormFieldConfig[] = []; // Filtros fixos (sempre visíveis no topo)\n @Input() filterSections: DynamicFormSection[] = []; // Seções de filtros (colapsáveis)\n @Input() entityData: any = null;\n @Input() mode: 'form' | 'filter' | 'inline-edit' = 'form';\n \n // Display Mode Configuration\n @Input() displayMode: DynamicFormDisplayMode = 'inline';\n @Input() visible: boolean = false;\n @Input() dialogConfig: DynamicFormDialogConfig = {};\n @Input() drawerConfig: DynamicFormDrawerConfig = {};\n \n // Button Configuration\n @Input() showSubmitButton: boolean = false;\n @Input() showCancelButton: boolean = false;\n @Input() submitButtonLabel?: string;\n @Input() cancelButtonLabel?: string;\n @Input() submitButtonIcon: string = 'pi pi-check';\n @Input() cancelButtonIcon: string = 'pi pi-times';\n \n @Output() formReady = new EventEmitter<FormGroup>();\n @Output() formSubmit = new EventEmitter<any>();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() onCancel = new EventEmitter<void>();\n @Output() fieldSave = new EventEmitter<{ field: string, value: any }>();\n\n form!: FormGroup;\n loading: boolean = false;\n \n // Inline edit mode state\n editingField: string | null = null;\n savingField: boolean = false;\n\n get hasFields(): boolean {\n return this.formFields.length > 0;\n }\n\n get hasSections(): boolean {\n return this.formSections.length > 0;\n }\n\n get hasFixedFilters(): boolean {\n return this.fixedFilters.length > 0;\n }\n\n get hasFilterSections(): boolean {\n return this.filterSections.length > 0;\n }\n\n get allFields(): DynamicFormFieldConfig[] {\n // Retorna todos os campos (diretos + das seções + filtros fixos + seções de filtros)\n const sectionFields = this.formSections.flatMap(section => section.fields);\n const filterSectionFields = this.filterSections.flatMap(section => section.fields);\n return [...this.formFields, ...sectionFields, ...this.fixedFilters, ...filterSectionFields];\n }\n\n get isInlineMode(): boolean {\n return this.displayMode === 'inline';\n }\n\n get isInlineEditMode(): boolean {\n return this.mode === 'inline-edit';\n }\n\n get fieldMode(): 'form' | 'filter' {\n return this.isInlineEditMode ? 'form' : this.mode as 'form' | 'filter';\n }\n\n get isDialogMode(): boolean {\n return this.displayMode === 'dialog';\n }\n\n get isDrawerMode(): boolean {\n return this.displayMode === 'drawer';\n }\n\n // Dialog configuration with defaults\n get dialogHeader(): string {\n return this.dialogConfig.header || this.translationService.translate('design.components_ai.form');\n }\n\n get dialogWidth(): string {\n return this.dialogConfig.width || '600px';\n }\n\n get dialogDraggable(): boolean {\n return this.dialogConfig.draggable !== undefined ? this.dialogConfig.draggable : false;\n }\n\n get dialogResizable(): boolean {\n return this.dialogConfig.resizable !== undefined ? this.dialogConfig.resizable : false;\n }\n\n get dialogMaximizable(): boolean {\n return this.dialogConfig.maximizable !== undefined ? this.dialogConfig.maximizable : false;\n }\n\n get dialogCloseOnEscape(): boolean {\n return this.dialogConfig.closeOnEscape !== undefined ? this.dialogConfig.closeOnEscape : true;\n }\n\n get dialogDismissableMask(): boolean {\n return this.dialogConfig.dismissableMask !== undefined ? this.dialogConfig.dismissableMask : false;\n }\n\n // Drawer configuration with defaults\n get drawerHeader(): string {\n return this.drawerConfig.header || this.translationService.translate('design.components_ai.form');\n }\n\n get drawerPosition(): 'left' | 'right' | 'top' | 'bottom' {\n return this.drawerConfig.position || 'right';\n }\n\n get drawerShowCloseIcon(): boolean {\n return this.drawerConfig.showCloseIcon !== undefined ? this.drawerConfig.showCloseIcon : true;\n }\n\n get drawerCloseOnEscape(): boolean {\n return this.drawerConfig.closeOnEscape !== undefined ? this.drawerConfig.closeOnEscape : true;\n }\n\n get drawerDismissable(): boolean {\n return this.drawerConfig.dismissable !== undefined ? this.drawerConfig.dismissable : true;\n }\n\n get drawerStyle(): { [key: string]: string } {\n const position = this.drawerPosition;\n const isHorizontal = position === 'left' || position === 'right';\n \n // Se tem customWidth, usa ela\n if (this.drawerConfig.customWidth) {\n return isHorizontal \n ? { width: this.drawerConfig.customWidth }\n : { height: this.drawerConfig.customWidth };\n }\n \n // Usa o tamanho padronizado\n const size = this.drawerConfig.size || 'medium';\n const sizeMap = {\n 'small': isHorizontal ? '25%' : '25vh',\n 'medium': isHorizontal ? '40%' : '40vh',\n 'large': isHorizontal ? '60%' : '60vh',\n 'xlarge': isHorizontal ? '80%' : '80vh',\n 'full': isHorizontal ? '100%' : '100vh'\n };\n \n const sizeValue = sizeMap[size];\n return isHorizontal \n ? { width: sizeValue }\n : { height: sizeValue };\n }\n\n get submitLabel(): string {\n return this.submitButtonLabel || this.translationService.translate('design.components_ai.save');\n }\n\n get cancelLabel(): string {\n return this.cancelButtonLabel || this.translationService.translate('design.components_ai.cancel');\n }\n\n constructor(\n private fb: FormBuilder,\n private translationService: TranslationService,\n private maskService: MaskService,\n private localeService: LocaleService\n ) {}\n\n ngOnInit(): void {\n this.initForm();\n if (this.entityData) {\n this.loadEntityData();\n }\n this.setupConditionalFieldsWatcher();\n this.formReady.emit(this.form);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle entityData changes first\n if (changes['entityData'] && this.form) {\n if (this.entityData) {\n this.loadEntityData();\n } else {\n this.resetForm();\n }\n }\n \n // When dialog/drawer opens, ensure form is loaded with entityData\n if (changes['visible'] && changes['visible'].currentValue === true) {\n this.loading = false;\n \n // If opening with entityData, reload it to ensure form is populated\n if (this.entityData && this.form) {\n this.loadEntityData();\n } else if (!this.entityData && this.form) {\n // If opening without entityData (new record), reset form\n this.resetForm();\n }\n }\n }\n\n initForm(): void {\n const formControls: any = {};\n \n // Processa todos os campos (diretos + das seções)\n this.allFields.forEach(field => {\n const defaultValue = this.getDefaultValue(field);\n const validators = this.mode === 'filter' ? [] : (field.validators || []);\n \n const control = this.fb.control(\n { value: defaultValue, disabled: field.disabled || false },\n validators\n );\n \n formControls[field.field] = control;\n });\n \n this.form = this.fb.group(formControls);\n this.applyInitialDisabledState();\n }\n\n private getDefaultValue(field: DynamicFormFieldConfig): any {\n if (field.defaultValue !== undefined) {\n return field.defaultValue;\n }\n\n switch (field.type) {\n case 'number':\n case 'date':\n return null;\n case 'dropdown':\n case 'enum':\n return this.mode === 'filter' ? null : '';\n default:\n return '';\n }\n }\n\n private applyInitialDisabledState(): void {\n this.allFields.forEach(field => {\n if (field.disabledWhen) {\n const control = this.form.get(field.field);\n if (control && this.isFieldDisabled(field)) {\n control.disable();\n }\n }\n });\n }\n\n loadEntityData(): void {\n if (this.entityData && this.form) {\n const processedData = this.processEntityData(this.entityData);\n this.form.patchValue(processedData);\n }\n }\n\n private processEntityData(entity: any): any {\n const processedData = { ...entity };\n \n this.allFields.forEach(field => {\n if (field.type === 'date' && processedData[field.field]) {\n const dateValue = processedData[field.field];\n if (typeof dateValue === 'string') {\n // Convert date string (yyyy-MM-dd or ISO) to Date object for p-calendar\n // Use date-only constructor to avoid timezone/hour issues\n const parts = dateValue.substring(0, 10).split('-');\n if (parts.length === 3) {\n const date = new Date(+parts[0], +parts[1] - 1, +parts[2]);\n if (!isNaN(date.getTime())) {\n processedData[field.field] = date;\n }\n }\n }\n }\n\n if (field.type === 'lookup' && processedData[field.field]) {\n const lookupValue = processedData[field.field];\n // Keep the full object if it has display data, otherwise extract ID\n if (typeof lookupValue === 'object' && lookupValue.id) {\n const hasDisplayData = field.lookupDisplayFields \n ? field.lookupDisplayFields.some(f => this.getNestedValue(lookupValue, f))\n : lookupValue[field.lookupDisplayField || 'name'];\n \n if (hasDisplayData) {\n // Keep the full object to avoid unnecessary API calls\n processedData[field.field] = lookupValue;\n } else {\n // Only has ID, extract it\n processedData[field.field] = lookupValue.id;\n }\n }\n }\n });\n \n return processedData;\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n resetForm(): void {\n if (this.form) {\n const resetValues: any = {};\n this.allFields.forEach(field => {\n resetValues[field.field] = this.getDefaultValue(field);\n });\n this.form.reset(resetValues);\n }\n }\n\n private processFilterValue(formValue: any): any {\n const processedValue = { ...formValue };\n \n this.allFields.forEach(field => {\n const fieldValue = processedValue[field.field];\n \n if (field.type === 'lookup') {\n if (fieldValue && typeof fieldValue === 'object' && fieldValue.id) {\n processedValue[field.field] = fieldValue;\n } else if (fieldValue && typeof fieldValue === 'string') {\n processedValue[field.field] = { id: fieldValue };\n } else {\n processedValue[field.field] = null;\n }\n }\n });\n \n return processedValue;\n }\n\n private processFormValue(formValue: any): any {\n const processedValue = { ...formValue };\n \n if (this.entityData?.id) {\n processedValue.id = this.entityData.id;\n }\n \n this.allFields.forEach(field => {\n const fieldValue = processedValue[field.field];\n \n if (field.type === 'lookup') {\n // Keep the full object for lookup fields\n if (fieldValue && typeof fieldValue === 'object') {\n // Object is already complete, keep it as is\n processedValue[field.field] = fieldValue;\n } else if (fieldValue && fieldValue !== '') {\n // If it's just an ID, wrap it in an object\n processedValue[field.field] = { id: fieldValue };\n } else {\n processedValue[field.field] = null;\n }\n } else if (field.type === 'date') {\n if (fieldValue instanceof Date) {\n // Serialize as yyyy-MM-dd using local date components (no UTC shift)\n const y = fieldValue.getFullYear();\n const m = String(fieldValue.getMonth() + 1).padStart(2, '0');\n const d = String(fieldValue.getDate()).padStart(2, '0');\n processedValue[field.field] = `${y}-${m}-${d}`;\n } else if (!fieldValue) {\n processedValue[field.field] = null;\n }\n } else if (['text', 'textarea', 'number', 'enum', 'dropdown'].includes(field.type)) {\n if (fieldValue === '' || fieldValue === undefined) {\n processedValue[field.field] = null;\n }\n }\n });\n \n return processedValue;\n }\n\n getFieldGridClass(field: DynamicFormFieldConfig): string {\n const classes: string[] = [];\n \n // Colspan base (padrão: 6)\n let baseColspan = field.colspan || 6;\n \n // Verifica condições de colspan dinâmico\n if (field.colspanWhen && field.colspanWhen.length > 0) {\n for (const condition of field.colspanWhen) {\n const dependentFieldValue = this.form.get(condition.field)?.value;\n if (dependentFieldValue === condition.value) {\n baseColspan = condition.colspan;\n break;\n }\n }\n }\n \n // Adiciona classe base\n classes.push(`col-${baseColspan}`);\n \n // Suporta tanto o objeto size quanto as propriedades antigas (para compatibilidade)\n const sizeXs = field.size?.xs ?? field.colspanXs;\n const sizeSm = field.size?.sm ?? field.colspanSm;\n const sizeMd = field.size?.md ?? field.colspanMd;\n const sizeLg = field.size?.lg ?? field.colspanLg;\n const sizeXl = field.size?.xl ?? field.colspanXl;\n \n // Adiciona classes responsivas se definidas\n if (sizeXs !== undefined) {\n classes.push(`col-xs-${sizeXs}`);\n }\n if (sizeSm !== undefined) {\n classes.push(`col-sm-${sizeSm}`);\n }\n if (sizeMd !== undefined) {\n classes.push(`col-md-${sizeMd}`);\n }\n if (sizeLg !== undefined) {\n classes.push(`col-lg-${sizeLg}`);\n }\n if (sizeXl !== undefined) {\n classes.push(`col-xl-${sizeXl}`);\n }\n \n return classes.join(' ');\n }\n\n isFieldVisible(field: DynamicFormFieldConfig): boolean {\n if (!field.visibleWhen) {\n return true;\n }\n\n const dependentFieldValue = this.form.get(field.visibleWhen.field)?.value;\n return dependentFieldValue === field.visibleWhen.value;\n }\n\n isFieldDisabled(field: DynamicFormFieldConfig): boolean {\n if (field.disabled) {\n return true;\n }\n \n if (!('disabledWhen' in field) || !field.disabledWhen) {\n return false;\n }\n\n const dependentFieldValue = this.form.get(field.disabledWhen!.field)?.value;\n \n if (field.disabledWhen!.value === null) {\n return !dependentFieldValue;\n }\n \n return dependentFieldValue === field.disabledWhen!.value;\n }\n\n setupConditionalFieldsWatcher(): void {\n const visibleDependentFields = this.allFields.filter(field => field.visibleWhen);\n const visibleWatchedFields = [...new Set(visibleDependentFields.map(field => field.visibleWhen!.field))];\n\n const disabledDependentFields = this.allFields.filter(field => field.disabledWhen);\n const disabledWatchedFields = [...new Set(disabledDependentFields.map(field => field.disabledWhen!.field))];\n\n const allWatchedFields = [...new Set([...visibleWatchedFields, ...disabledWatchedFields])];\n\n allWatchedFields.forEach(fieldName => {\n const control = this.form.get(fieldName);\n if (control) {\n control.valueChanges.subscribe(() => {\n this.clearHiddenFields();\n this.updateDisabledFields();\n });\n }\n });\n }\n\n updateDisabledFields(): void {\n this.allFields.forEach(field => {\n if (field.disabledWhen) {\n const control = this.form.get(field.field);\n if (control) {\n const shouldBeDisabled = this.isFieldDisabled(field);\n \n if (shouldBeDisabled && control.enabled) {\n control.setValue(null);\n control.disable();\n } else if (!shouldBeDisabled && control.disabled && !field.disabled) {\n control.enable();\n }\n }\n }\n });\n }\n\n clearHiddenFields(): void {\n this.allFields.forEach(field => {\n if (field.visibleWhen && !this.isFieldVisible(field)) {\n const control = this.form.get(field.field);\n if (control) {\n const resetValue = this.getDefaultValue(field);\n control.setValue(resetValue);\n control.markAsUntouched();\n control.markAsPristine();\n }\n }\n });\n }\n\n getForm(): FormGroup {\n return this.form;\n }\n\n clearFilters(): void {\n if (this.mode === 'filter') {\n this.resetForm();\n }\n }\n\n getTypePersonValue(): 'NATURAL_PERSON' | 'JURIDICAL_PERSON' {\n const typePersonValue = this.form?.get('typePerson')?.value;\n return typePersonValue || 'JURIDICAL_PERSON';\n }\n\n // Display Mode Control Methods\n open(entity?: any): void {\n if (entity) {\n this.entityData = entity;\n } else {\n this.entityData = null;\n this.resetForm(); // Reset form when opening for new entity\n }\n this.loading = false; // Reset loading state\n this.visible = true;\n this.visibleChange.emit(true);\n }\n\n close(): void {\n this.loading = false; // Reset loading state\n this.visible = false;\n this.visibleChange.emit(false);\n this.resetForm(); // Reset form when closing\n this.onCancel.emit();\n }\n\n handleCancel(): void {\n this.close();\n }\n\n handleSubmit(): void {\n if (this.mode === 'form' && this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n \n if (this.mode !== 'filter') {\n this.loading = true;\n }\n \n const formValue = this.mode === 'filter' \n ? this.processFilterValue(this.form.value)\n : this.processFormValue(this.form.value);\n \n this.formSubmit.emit(formValue);\n }\n\n // Inline Edit Mode Methods\n startEditField(fieldName: string): void {\n if (this.isInlineEditMode) {\n this.editingField = fieldName;\n \n // Ensure the field has the current value from entityData\n if (this.entityData) {\n const control = this.form.get(fieldName);\n if (control) {\n const field = this.allFields.find(f => f.field === fieldName);\n const value = this.entityData[fieldName];\n \n // For lookup fields in inline-edit mode, keep the full object\n // This prevents unnecessary API calls since we already have the data\n if (field?.type === 'lookup' && value && typeof value === 'object') {\n // Keep the full object - the lookup component will use it\n control.setValue(value);\n } else if (field?.type === 'date' && value && typeof value === 'string') {\n // Convert date string to Date object for p-calendar (date-only, no time component)\n const parts = value.substring(0, 10).split('-');\n if (parts.length === 3) {\n const date = new Date(+parts[0], +parts[1] - 1, +parts[2]);\n control.setValue(!isNaN(date.getTime()) ? date : value);\n } else {\n control.setValue(value);\n }\n } else {\n control.setValue(value);\n }\n }\n }\n }\n }\n\n isFieldEditing(fieldName: string): boolean {\n return this.editingField === fieldName;\n }\n\n saveInlineField(fieldName: string): void {\n if (!this.isInlineEditMode) return;\n\n const control = this.form.get(fieldName);\n if (!control || control.invalid) {\n control?.markAsTouched();\n return;\n }\n\n this.savingField = true;\n \n let fieldValue = control.value;\n \n // For lookup fields, keep the full object (don't extract ID)\n const field = this.allFields.find(f => f.field === fieldName);\n if (field?.type === 'lookup' && fieldValue && typeof fieldValue !== 'object') {\n // If it's just an ID, wrap it in an object\n fieldValue = { id: fieldValue };\n }\n\n // For date fields, serialize as yyyy-MM-dd (no time component)\n if (field?.type === 'date' && fieldValue instanceof Date) {\n const y = fieldValue.getFullYear();\n const m = String(fieldValue.getMonth() + 1).padStart(2, '0');\n const d = String(fieldValue.getDate()).padStart(2, '0');\n fieldValue = `${y}-${m}-${d}`;\n }\n \n this.fieldSave.emit({ field: fieldName, value: fieldValue });\n }\n\n cancelInlineEdit(): void {\n if (this.isInlineEditMode && this.editingField) {\n const control = this.form.get(this.editingField);\n if (control && this.entityData) {\n // Restore original value\n const originalValue = this.entityData[this.editingField];\n control.setValue(originalValue);\n control.markAsPristine();\n control.markAsUntouched();\n }\n this.editingField = null;\n this.savingField = false;\n }\n }\n\n // Method to be called by parent after save completes\n completeInlineEdit(): void {\n this.editingField = null;\n this.savingField = false;\n }\n\n getFieldDisplayValue(fieldName: string): string {\n if (!this.entityData) return '';\n\n const field = this.allFields.find(f => f.field === fieldName);\n const value = this.entityData[fieldName];\n\n if (!value) return '';\n\n // For lookup fields, return the display name\n if (field?.type === 'lookup' && typeof value === 'object' && value.name) {\n return value.name;\n }\n\n // For lookup fields with multiple display fields\n if (field?.type === 'lookup' && typeof value === 'object' && field.lookupDisplayFields) {\n return field.lookupDisplayFields\n .map(f => this.getNestedValue(value, f))\n .filter(v => v)\n .join(' - ');\n }\n\n // For dropdown/enum fields, find the matching option label\n if ((field?.type === 'dropdown' || field?.type === 'enum') && field) {\n const options = field.options || field.enumOptions || [];\n const optionValue = field.optionValue || 'value';\n const optionLabel = field.optionLabel || 'label';\n const matchingOption = options.find((opt: any) => {\n const optVal = typeof opt === 'object' ? opt[optionValue] : opt;\n return optVal === value;\n });\n if (matchingOption) {\n return typeof matchingOption === 'object' ? matchingOption[optionLabel] : matchingOption;\n }\n }\n\n // For number fields, format appropriately\n if (field?.type === 'number' && typeof value === 'number') {\n if (field.numberMode === 'currency') {\n return new Intl.NumberFormat(field.locale || 'pt-BR', {\n style: 'currency',\n currency: field.currency || 'BRL'\n }).format(value);\n }\n return new Intl.NumberFormat(field.locale || 'pt-BR', {\n minimumFractionDigits: field.minFractionDigits || 0,\n maximumFractionDigits: field.maxFractionDigits || 2\n }).format(value);\n }\n\n // For date fields, format as date\n if (field?.type === 'date' && value) {\n return this.localeService.formatDate(value);\n }\n\n // For text fields with document mask, format the value\n if (field?.type === 'text' && field.mask === 'document' && value) {\n const dependsOn = field.maskDependsOn || 'typePerson';\n const typePerson = this.entityData[dependsOn] || 'JURIDICAL_PERSON';\n return this.maskService.applyDocumentMask(String(value), typePerson);\n }\n if (field?.type === 'text' && field.mask === 'cpf' && value) {\n return this.maskService.applyCpfMask(String(value));\n }\n if (field?.type === 'text' && field.mask === 'cnpj' && value) {\n return this.maskService.applyCnpjMask(String(value));\n }\n\n return String(value);\n }\n}\n","<!-- Modo Inline (padrão) -->\n<ng-container *ngIf=\"isInlineMode\">\n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n</ng-container>\n\n<!-- Modo Dialog -->\n<p-dialog\n *ngIf=\"isDialogMode\"\n [(visible)]=\"visible\"\n [header]=\"dialogHeader | translate\"\n [modal]=\"true\"\n [style]=\"{ width: dialogWidth }\"\n [draggable]=\"dialogDraggable\"\n [resizable]=\"dialogResizable\"\n [maximizable]=\"dialogMaximizable\"\n [closeOnEscape]=\"dialogCloseOnEscape\"\n [dismissableMask]=\"dialogDismissableMask\"\n (onHide)=\"close()\">\n \n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n \n <ng-template pTemplate=\"footer\" *ngIf=\"showSubmitButton || showCancelButton\">\n <div class=\"dialog-footer\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n </ng-template>\n</p-dialog>\n\n<!-- Modo Drawer -->\n<p-drawer\n *ngIf=\"isDrawerMode\"\n [(visible)]=\"visible\"\n [header]=\"drawerHeader | translate\"\n [position]=\"drawerPosition\"\n [style]=\"drawerStyle\"\n [showCloseIcon]=\"drawerShowCloseIcon\"\n [closeOnEscape]=\"drawerCloseOnEscape\"\n [modal]=\"drawerDismissable\"\n (onHide)=\"close()\">\n \n <ng-container *ngTemplateOutlet=\"formContent\"></ng-container>\n \n <ng-template pTemplate=\"footer\" *ngIf=\"showSubmitButton || showCancelButton\">\n <div class=\"drawer-footer\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n </ng-template>\n</p-drawer>\n\n<!-- Template do Formulário (reutilizável) -->\n<ng-template #formContent>\n <form [formGroup]=\"form\" class=\"dynamic-form\">\n \n <!-- Filtros Fixos (apenas no modo filter) -->\n <div *ngIf=\"mode === 'filter' && hasFixedFilters\" class=\"fixed-filters-section\">\n <div class=\"grid\">\n <ng-container *ngFor=\"let field of fixedFilters\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Campos Diretos (sem seção) -->\n <div *ngIf=\"hasFields\">\n <!-- Modo Inline Edit -->\n <div *ngIf=\"isInlineEditMode\" class=\"inline-edit-fields\">\n <ng-container *ngFor=\"let field of formFields\">\n <div *ngIf=\"isFieldVisible(field)\" class=\"inline-edit-field\">\n <ng-container *ngTemplateOutlet=\"inlineEditFieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n\n <!-- Modo Form Normal -->\n <div *ngIf=\"!isInlineEditMode\" class=\"grid\">\n <ng-container *ngFor=\"let field of formFields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Seções de Campos (modo form) -->\n <div *ngIf=\"hasSections\" class=\"sections-container\">\n <p-panel \n *ngFor=\"let section of formSections\"\n [toggleable]=\"section.toggleable !== false\"\n [collapsed]=\"section.collapsed || false\"\n [styleClass]=\"'section-panel'\">\n \n <ng-template pTemplate=\"header\">\n <div class=\"section-header\">\n <i *ngIf=\"section.icon\" [class]=\"section.icon + ' section-icon'\"></i>\n <span class=\"section-title\">{{ section.title }}</span>\n </div>\n </ng-template>\n\n <!-- Modo Inline Edit -->\n <div *ngIf=\"isInlineEditMode\" class=\"inline-edit-fields\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" class=\"inline-edit-field\">\n <ng-container *ngTemplateOutlet=\"inlineEditFieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n\n <!-- Modo Form Normal -->\n <div *ngIf=\"!isInlineEditMode\" class=\"grid\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </p-panel>\n </div>\n\n <!-- Seções de Filtros (apenas no modo filter) -->\n <div *ngIf=\"mode === 'filter' && hasFilterSections\" class=\"filter-sections-container\">\n <p-panel \n *ngFor=\"let section of filterSections\"\n [header]=\"section.title\"\n [toggleable]=\"true\"\n [collapsed]=\"true\">\n\n <div class=\"grid\">\n <ng-container *ngFor=\"let field of section.fields\">\n <div *ngIf=\"isFieldVisible(field)\" [ngClass]=\"getFieldGridClass(field)\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n </ng-container>\n </div>\n </p-panel>\n </div>\n\n <!-- Botões inline (apenas para modo inline) -->\n <div *ngIf=\"isInlineMode && (showSubmitButton || showCancelButton)\" class=\"form-actions\">\n <p-button\n *ngIf=\"showCancelButton\"\n [label]=\"cancelLabel | translate\"\n [icon]=\"cancelButtonIcon\"\n severity=\"secondary\"\n (onClick)=\"handleCancel()\"\n [disabled]=\"loading\">\n </p-button>\n <p-button\n *ngIf=\"showSubmitButton\"\n [label]=\"submitLabel | translate\"\n [icon]=\"submitButtonIcon\"\n (onClick)=\"handleSubmit()\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid\">\n </p-button>\n </div>\n\n </form>\n</ng-template>\n\n<!-- Template de Campo (reutilizável) -->\n<ng-template #fieldTemplate let-field=\"field\">\n <!-- Text Field -->\n <sia-dynamic-field-text\n *ngIf=\"field.type === 'text'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-text>\n\n <!-- Textarea Field -->\n <sia-dynamic-field-textarea\n *ngIf=\"field.type === 'textarea'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-textarea>\n\n <!-- Number Field -->\n <sia-dynamic-field-number\n *ngIf=\"field.type === 'number'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-number>\n\n <!-- Date Field -->\n <sia-dynamic-field-date\n *ngIf=\"field.type === 'date'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-date>\n\n <!-- Datetime Field -->\n <sia-dynamic-field-datetime\n *ngIf=\"field.type === 'datetime'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-datetime>\n\n <!-- Dropdown/Enum Field -->\n <sia-dynamic-field-dropdown\n *ngIf=\"field.type === 'dropdown' || field.type === 'enum'\"\n [field]=\"field\"\n [form]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-dropdown>\n\n <!-- Lookup Field -->\n <sia-dynamic-field-lookup\n *ngIf=\"field.type === 'lookup'\"\n [field]=\"field\"\n [form]=\"form\"\n [formGroup]=\"form\"\n [mode]=\"fieldMode\">\n </sia-dynamic-field-lookup>\n</ng-template>\n\n\n<!-- Template de Campo Inline Edit -->\n<ng-template #inlineEditFieldTemplate let-field=\"field\">\n <div class=\"edit-inline-field\">\n <label class=\"field-label\">{{ field.label | translate }}</label>\n \n <!-- Display Mode -->\n <div class=\"field-display\" \n *ngIf=\"!isFieldEditing(field.field)\" \n (click)=\"startEditField(field.field)\"\n [class.disabled]=\"field.disabled\">\n <span class=\"display-value\" \n [attr.data-placeholder]=\"field.placeholder || ('crmx.business.not_informed' | translate)\">\n {{ getFieldDisplayValue(field.field) }}\n </span>\n <i class=\"pi pi-pencil edit-icon\" *ngIf=\"!field.disabled\"></i>\n </div>\n \n <!-- Edit Mode -->\n <div class=\"field-edit\" *ngIf=\"isFieldEditing(field.field)\">\n <div class=\"input-container\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { field: field }\"></ng-container>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"edit-actions\">\n <p-button \n type=\"button\" \n icon=\"pi pi-check\" \n [rounded]=\"true\"\n severity=\"primary\"\n (onClick)=\"saveInlineField(field.field)\" \n [loading]=\"savingField\"\n [disabled]=\"form.get(field.field)?.invalid\">\n </p-button>\n <p-button \n type=\"button\" \n icon=\"pi pi-times\" \n [rounded]=\"true\"\n severity=\"secondary\"\n (onClick)=\"cancelInlineEdit()\"\n [disabled]=\"savingField\">\n </p-button>\n </div>\n \n <!-- Error Message -->\n <div class=\"field-error\" *ngIf=\"form.get(field.field)?.invalid && form.get(field.field)?.touched\">\n <small class=\"p-error\">\n {{ form.get(field.field)?.errors?.['required'] ? ('crmx.business.required_field' | translate) : '' }}\n </small>\n </div>\n </div>\n </div>\n</ng-template>\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider, APP_INITIALIZER, Injector } from '@angular/core';\nimport { providePrimeNG } from 'primeng/config';\nimport Aura from '@primeuix/themes/aura';\nimport { definePreset } from '@primeuix/themes';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { LocaleService } from '../services/locale.service';\n\n/**\n * Preset customizado do tema Aura para Senior Sistemas\n * Baseado nas cores e design system da empresa\n */\nexport const SeniorPreset = definePreset(Aura, {\n semantic: {\n primary: {\n 50: '#e8f2f9',\n 100: '#c7e1f1',\n 200: '#a3cfe8',\n 300: '#7fbddf',\n 400: '#61a4d5',\n 500: '#428BCA',\n 600: '#3c7fb8',\n 700: '#336fa3',\n 800: '#2b5f8e',\n 900: '#1f4469',\n 950: '#16304a'\n },\n secondary: {\n 50: '#f0f3f5',\n 100: '#dce3e7',\n 200: '#bac8d0',\n 300: '#97adb9',\n 400: '#7892A1',\n 500: '#7892A1',\n 600: '#6a8291',\n 700: '#5a6e7a',\n 800: '#4a5a63',\n 900: '#3a464d',\n 950: '#2a3337'\n },\n danger: {\n 50: '#fef2f0',\n 100: '#fde4e0',\n 200: '#fbcdc6',\n 300: '#f7ab9f',\n 400: '#f17d68',\n 500: '#C13018',\n 600: '#ad2b16',\n 700: '#912413',\n 800: '#781f10',\n 900: '#631b0e',\n 950: '#4a140a'\n },\n warning: {\n 50: '#fef8ed',\n 100: '#fdefd1',\n 200: '#fbdda3',\n 300: '#f9c66a',\n 400: '#F8931F',\n 500: '#F8931F',\n 600: '#df841c',\n 700: '#ba6f17',\n 800: '#985b13',\n 900: '#7d4b10',\n 950: '#5e380c'\n },\n success: {\n 50: '#e8f7f0',\n 100: '#c7edd9',\n 200: '#92dbb8',\n 300: '#5cc593',\n 400: '#2fae6f',\n 500: '#0C9348',\n 600: '#0b8441',\n 700: '#096e36',\n 800: '#07592c',\n 900: '#064924',\n 950: '#04361b'\n },\n info: {\n 50: '#e8f2f9',\n 100: '#c7e1f1',\n 200: '#a3cfe8',\n 300: '#7fbddf',\n 400: '#61a4d5',\n 500: '#428BCA',\n 600: '#3c7fb8',\n 700: '#336fa3',\n 800: '#2b5f8e',\n 900: '#1f4469',\n 950: '#16304a'\n }\n }\n});\n\n/**\n * Opções de configuração para o PrimeNG\n */\nexport interface SeniorPrimeNGConfig {\n /**\n * Preset do tema a ser usado\n * @default SeniorPreset\n */\n preset?: any;\n \n /**\n * Seletor CSS para modo escuro\n * @default '.p-dark'\n */\n darkModeSelector?: string;\n \n /**\n * Se deve usar CSS Layer\n * @default false\n */\n cssLayer?: boolean;\n \n /**\n * Prefixo para classes CSS\n * @default 'p'\n */\n prefix?: string;\n \n /**\n * Se deve habilitar efeito ripple\n * @default true\n */\n ripple?: boolean;\n \n /**\n * Se deve incluir os serviços ConfirmationService e MessageService\n * @default true\n */\n includeServices?: boolean;\n}\n\n/**\n * Provê a configuração padrão do PrimeNG para aplicações Senior Sistemas\n * \n * @param config Configuração opcional para customizar o comportamento\n * @returns EnvironmentProviders para uso no app.config.ts\n * \n * @example\n * ```typescript\n * // app.config.ts\n * import { provideSeniorPrimeNG } from '@seniorsistemas/components-ai';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * // ... outros providers\n * provideSeniorPrimeNG()\n * ]\n * };\n * ```\n * \n * @example\n * ```typescript\n * // Com customização\n * provideSeniorPrimeNG({\n * darkModeSelector: '.app-dark',\n * ripple: false\n * })\n * ```\n */\nexport function provideSeniorPrimeNG(config?: SeniorPrimeNGConfig): EnvironmentProviders {\n const {\n preset = SeniorPreset,\n darkModeSelector = '.p-dark',\n cssLayer = false,\n prefix = 'p',\n ripple = true,\n includeServices = true\n } = config || {};\n\n const providers: (Provider | EnvironmentProviders)[] = [\n providePrimeNG({\n theme: {\n preset,\n options: {\n darkModeSelector,\n cssLayer,\n prefix\n }\n },\n ripple\n })\n ];\n\n if (includeServices) {\n providers.push(ConfirmationService, MessageService);\n }\n\n // Inicializar LocaleService para configurar locale do PrimeNG automaticamente\n providers.push({\n provide: APP_INITIALIZER,\n useFactory: (injector: Injector) => () => { injector.get(LocaleService); },\n deps: [Injector],\n multi: true\n });\n\n return makeEnvironmentProviders(providers);\n}\n","import { HttpInterceptorFn, HttpRequest, HttpHandlerFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError, throwError } from 'rxjs';\nimport { MessageService } from 'primeng/api';\nimport { AuthService } from '../services/auth.service';\nimport { TranslationService } from '../services/translation.service';\n\nexport const apiInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const authService = inject(AuthService);\n const injector = inject(Injector);\n \n // Get the access token, token type, and base URL\n const accessToken = authService.getAccessToken();\n const tokenType = authService.getTokenType();\n const baseUrl = authService.getApiBaseUrl();\n \n let modifiedReq = req;\n\n // Add Authorization header if token exists\n if (accessToken && tokenType) {\n const authHeader = `${tokenType} ${accessToken}`;\n modifiedReq = modifiedReq.clone({\n setHeaders: {\n Authorization: authHeader\n }\n });\n }\n\n // Prepend base URL if it exists and the request URL is relative\n if (baseUrl && !isAbsoluteUrl(modifiedReq.url)) {\n const fullUrl = combineUrls(baseUrl, modifiedReq.url);\n modifiedReq = modifiedReq.clone({\n url: fullUrl\n });\n }\n\n return next(modifiedReq).pipe(\n catchError((error: HttpErrorResponse) => {\n // Try to get MessageService and TranslationService\n let messageService: MessageService | null = null;\n let translationService: TranslationService | null = null;\n \n try {\n messageService = injector.get(MessageService);\n translationService = injector.get(TranslationService);\n } catch (e) {\n console.warn('MessageService or TranslationService not available');\n }\n\n // Handle 401 Unauthorized errors\n if (error.status === 401) {\n try {\n const router = injector.get(Router);\n router.navigate(['/forbidden']);\n } catch (e) {\n console.warn('Router not available for navigation on 401 error');\n }\n }\n // Handle 4xx errors (except 401)\n else if (error.status >= 400 && error.status < 500) {\n if (messageService && translationService) {\n const errorMessage = extractErrorMessage(error);\n messageService.add({\n severity: 'error',\n summary: translationService.translate('design.components_ai.error') || 'Erro',\n detail: errorMessage,\n life: 5000\n });\n }\n }\n // Handle 5xx errors\n else if (error.status >= 500) {\n if (messageService && translationService) {\n messageService.add({\n severity: 'error',\n summary: translationService.translate('design.components_ai.server_error') || 'Erro no Servidor',\n detail: translationService.translate('design.components_ai.server_error_message') || 'Ocorreu um erro no servidor. Tente novamente mais tarde.',\n life: 5000\n });\n }\n }\n \n // Re-throw the error so other error handlers can process it\n return throwError(() => error);\n })\n );\n};\n\n/**\n * Check if URL is absolute\n */\nfunction isAbsoluteUrl(url: string): boolean {\n return /^https?:\\/\\//.test(url);\n}\n\n/**\n * Combine base URL with relative URL\n */\nfunction combineUrls(baseUrl: string, relativeUrl: string): string {\n // Remove trailing slash from base URL\n const cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n \n // Remove leading slash from relative URL\n const cleanRelativeUrl = relativeUrl.replace(/^\\//, '');\n \n return `${cleanBaseUrl}/${cleanRelativeUrl}`;\n}\n\n/**\n * Extract error message from HttpErrorResponse\n * Supports multiple error response formats\n */\nfunction extractErrorMessage(error: HttpErrorResponse): string {\n // Check if error.error exists and has a message property\n if (error.error && typeof error.error === 'object') {\n // Format: { message: \"...\", errorCode: \"...\", reason: \"...\", domain: \"...\", service: \"...\" }\n if (error.error.message) {\n return error.error.message;\n }\n \n // Format: { error: \"...\", error_description: \"...\" }\n if (error.error.error_description) {\n return error.error.error_description;\n }\n \n // Format: { detail: \"...\" }\n if (error.error.detail) {\n return error.error.detail;\n }\n \n // Format: { errors: [...] }\n if (error.error.errors && Array.isArray(error.error.errors) && error.error.errors.length > 0) {\n return error.error.errors.map((e: any) => e.message || e).join(', ');\n }\n }\n \n // Fallback to error.message or statusText\n return error.message || error.statusText || 'Erro desconhecido';\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Directive para máscara de valor monetário em inputs\n * Uso: <input siaMoneyMask /> -> usa locale do cookie\n * Uso: <input siaMoneyMask [moneyLocale]=\"'en-US'\" /> -> força locale\n * Uso: <input siaMoneyMask [moneyCurrency]=\"'EUR'\" /> -> força moeda\n */\n@Directive({\n selector: '[siaMoneyMask]',\n standalone: true\n})\nexport class MoneyMaskDirective {\n @Input() moneyLocale?: SupportedLanguage;\n @Input() moneyCurrency?: string;\n\n constructor(private el: ElementRef, private maskService: MaskService) {}\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n const value = event.target.value;\n if (!value) return;\n\n // Remove tudo exceto números, vírgula e ponto\n const cleaned = value.replace(/[^\\d.,-]/g, '');\n // Converte para número\n const config = this.maskService.getMoneyConfig(this.moneyLocale);\n let numValue: number;\n\n if (config.locale === 'pt-BR' || config.locale === 'es-ES') {\n // Formato: 1.234,56\n numValue = parseFloat(cleaned.replace(/\\./g, '').replace(',', '.'));\n } else {\n // Formato: 1,234.56\n numValue = parseFloat(cleaned.replace(/,/g, ''));\n }\n\n if (isNaN(numValue)) {\n this.el.nativeElement.value = '';\n return;\n }\n\n this.el.nativeElement.value = this.maskService.formatMoney(numValue, this.moneyLocale, this.moneyCurrency);\n this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n","import {\n Directive,\n Input,\n OnChanges,\n SimpleChanges,\n ElementRef,\n Renderer2,\n ComponentRef,\n ViewContainerRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport { LoadingComponent, LoadingVariant, LoadingColor } from '../../components/loading/loading.component';\n\n/**\n * Directive that replaces PrimeNG p-table's default loading spinner\n * with the sia-loading component injected as a table row in the tbody.\n *\n * Usage:\n * <p-table [loading]=\"loading\" siaTableLoading>\n */\n@Directive({\n selector: 'p-table[siaTableLoading]',\n standalone: true,\n})\nexport class TableLoadingDirective implements OnChanges, AfterViewInit, OnDestroy {\n @Input() loading = false;\n @Input() siaLoadingVariant: LoadingVariant = 'senior-reveal';\n @Input() siaLoadingColor: LoadingColor = 'senior';\n @Input() siaLoadingSize: number = 36;\n\n private loadingRow: HTMLTableRowElement | null = null;\n private loadingRef: ComponentRef<LoadingComponent> | null = null;\n private observer: MutationObserver | null = null;\n private styleEl: HTMLStyleElement | null = null;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n private vcr: ViewContainerRef\n ) {}\n\n ngAfterViewInit(): void {\n this.injectHideStyles();\n this.setupObserver();\n if (this.loading) {\n this.showLoading();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['loading'] && !changes['loading'].firstChange) {\n if (this.loading) {\n this.showLoading();\n } else {\n this.removeLoading();\n }\n }\n if (this.loadingRef) {\n if (changes['siaLoadingVariant']) this.loadingRef.instance.variant = this.siaLoadingVariant;\n if (changes['siaLoadingColor']) this.loadingRef.instance.color = this.siaLoadingColor;\n if (changes['siaLoadingSize']) this.loadingRef.instance.size = this.siaLoadingSize;\n }\n }\n\n ngOnDestroy(): void {\n this.removeLoading();\n this.observer?.disconnect();\n this.observer = null;\n this.styleEl?.remove();\n this.styleEl = null;\n }\n\n private injectHideStyles(): void {\n const host = this.el.nativeElement as HTMLElement;\n this.styleEl = this.renderer.createElement('style');\n this.styleEl!.textContent = `\n .p-datatable-loading-overlay,\n .p-datatable-mask {\n display: none !important;\n }\n `;\n this.renderer.appendChild(host, this.styleEl);\n }\n\n private setupObserver(): void {\n const host = this.el.nativeElement as HTMLElement;\n this.observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n m.addedNodes.forEach((node) => {\n if (node instanceof HTMLElement) {\n if (\n node.classList.contains('p-datatable-loading-overlay') ||\n node.classList.contains('p-datatable-mask')\n ) {\n node.style.display = 'none';\n }\n }\n });\n }\n });\n this.observer.observe(host, { childList: true, subtree: true });\n }\n\n private showLoading(): void {\n if (this.loadingRow) return;\n\n const host = this.el.nativeElement as HTMLElement;\n const tbody = host.querySelector('tbody');\n if (!tbody) return;\n\n // Hide existing data rows\n const existingRows = tbody.querySelectorAll('tr');\n existingRows.forEach((row) => {\n this.renderer.setStyle(row, 'display', 'none');\n });\n\n // Count columns from thead\n const colCount = this.getColumnCount(host);\n\n // Create <tr>\n this.loadingRow = this.renderer.createElement('tr');\n this.renderer.addClass(this.loadingRow, 'sia-table-loading-row');\n\n // Create <td colspan=\"N\">\n const td = this.renderer.createElement('td');\n this.renderer.setAttribute(td, 'colspan', String(colCount || 99));\n this.renderer.setStyle(td, 'text-align', 'center');\n this.renderer.setStyle(td, 'padding', '2rem 0');\n this.renderer.setStyle(td, 'border', 'none');\n\n // Create LoadingComponent\n this.loadingRef = this.vcr.createComponent(LoadingComponent);\n this.loadingRef.instance.variant = this.siaLoadingVariant;\n this.loadingRef.instance.color = this.siaLoadingColor;\n this.loadingRef.instance.size = this.siaLoadingSize;\n this.loadingRef.instance.padding = '0';\n\n const loadingEl = this.loadingRef.location.nativeElement;\n this.renderer.appendChild(td, loadingEl);\n this.renderer.appendChild(this.loadingRow, td);\n this.renderer.appendChild(tbody, this.loadingRow);\n }\n\n private removeLoading(): void {\n const host = this.el.nativeElement as HTMLElement;\n const tbody = host.querySelector('tbody');\n\n // Remove loading row\n if (this.loadingRow?.parentNode) {\n this.renderer.removeChild(this.loadingRow.parentNode, this.loadingRow);\n }\n this.loadingRow = null;\n if (this.loadingRef) {\n this.loadingRef.destroy();\n this.loadingRef = null;\n }\n\n // Restore hidden data rows\n if (tbody) {\n const rows = tbody.querySelectorAll('tr');\n rows.forEach((row) => {\n this.renderer.removeStyle(row, 'display');\n });\n }\n }\n\n private getColumnCount(host: HTMLElement): number {\n const headerRow = host.querySelector('thead tr');\n if (headerRow) {\n return headerRow.querySelectorAll('th').length;\n }\n return 99;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n@Pipe({ name: 'cpf', standalone: true })\nexport class CpfPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return this.maskService.applyCpfMask(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n@Pipe({ name: 'cnpj', standalone: true })\nexport class CnpjPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined): string {\n if (!value) return '';\n return this.maskService.applyCnpjMask(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\n\n/**\n * Pipe para formatar documentos (CPF/CNPJ)\n * Uso: {{ value | document:'NATURAL_PERSON' }}\n * Uso: {{ value | document:'JURIDICAL_PERSON' }}\n */\n@Pipe({ name: 'document', standalone: true })\nexport class DocumentPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, typePerson: 'NATURAL_PERSON' | 'JURIDICAL_PERSON' = 'JURIDICAL_PERSON'): string {\n if (!value) return '';\n return this.maskService.applyDocumentMask(value, typePerson);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar telefone baseado no locale\n * Uso: {{ value | phone }} -> usa locale do cookie\n * Uso: {{ value | phone:'en-US' }} -> força locale específico\n */\n@Pipe({ name: 'phone', standalone: true })\nexport class PhonePipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.maskService.applyPhoneMask(value, locale);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar código postal baseado no locale\n * Uso: {{ value | postalCode }} -> usa locale do cookie (CEP no Brasil)\n * Uso: {{ value | postalCode:'en-US' }} -> formato ZIP Code\n */\n@Pipe({ name: 'postalCode', standalone: true })\nexport class PostalCodePipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: string | null | undefined, locale?: SupportedLanguage): string {\n if (!value) return '';\n return this.maskService.applyPostalCodeMask(value, locale);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskService } from '../services/mask.service';\nimport { SupportedLanguage } from '../services/translation.service';\n\n/**\n * Pipe para formatar valores monetários baseado no locale\n * Uso: {{ value | money }} -> usa locale do cookie (R$ no Brasil)\n * Uso: {{ value | money:'en-US' }} -> formato USD\n * Uso: {{ value | money:'pt-BR':'EUR' }} -> formato EUR com locale pt-BR\n */\n@Pipe({ name: 'money', standalone: true })\nexport class MoneyPipe implements PipeTransform {\n constructor(private maskService: MaskService) {}\n\n transform(value: number | string | null | undefined, locale?: SupportedLanguage, currency?: string): string {\n if (value === null || value === undefined || value === '') return '';\n return this.maskService.formatMoney(value, locale, currency);\n }\n}\n","import { Pipe, PipeTransform, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslationService } from '../services/translation.service';\n\n/**\n * Pipe para formatar datas respeitando o idioma configurado\n * \n * Uso: {{ '2026-03-04' | dateFormat }} -> 04/03/2026 (pt-BR)\n * Uso: {{ dateObj | dateFormat }} -> 04/03/2026 (pt-BR)\n * Uso: {{ '2026-03-04' | dateFormat:'short' }} -> 04/03/26 (pt-BR)\n * Uso: {{ '2026-03-04' | dateFormat:'long' }} -> 4 de março de 2026 (pt-BR)\n */\n@Pipe({\n name: 'dateFormat',\n pure: false,\n standalone: true\n})\nexport class DateFormatPipe implements PipeTransform, OnDestroy {\n private subscription?: Subscription;\n private lastValue?: string | Date | null;\n private lastFormat?: string;\n private lastResult = '';\n\n constructor(\n private localeService: LocaleService,\n private translationService: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n transform(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): string {\n if (!value) return '';\n\n if (this.shouldUpdate(value, format)) {\n this.updateResult(value, format);\n }\n\n return this.lastResult;\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n private shouldUpdate(value: string | Date | null | undefined, format?: string): boolean {\n const valueStr = value instanceof Date ? value.toISOString() : value;\n const lastStr = this.lastValue instanceof Date ? this.lastValue.toISOString() : this.lastValue;\n return valueStr !== lastStr || format !== this.lastFormat || !this.subscription;\n }\n\n private updateResult(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): void {\n this.lastValue = value;\n this.lastFormat = format;\n\n this.subscription?.unsubscribe();\n\n this.subscription = this.translationService.currentLanguage$.subscribe(() => {\n this.lastResult = this.formatValue(value, format);\n this.cdr.markForCheck();\n });\n }\n\n private formatValue(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long'): string {\n if (!value) return '';\n\n const date = typeof value === 'string'\n ? new Date(value + (value.length === 10 ? 'T00:00:00' : ''))\n : value;\n\n if (isNaN(date.getTime())) return String(value);\n\n const locale = this.localeService.getIntlLocale();\n\n switch (format) {\n case 'short':\n return date.toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: '2-digit' });\n case 'long':\n return date.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' });\n case 'medium':\n default:\n return date.toLocaleDateString(locale);\n }\n }\n}\n","import { TranslationService } from '../services/translation.service';\n\nexport enum FieldType {\n String = 'String',\n Integer = 'Integer',\n Double = 'Double',\n Boolean = 'Boolean',\n Date = 'Date',\n Time = 'Time',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Enum = 'Enum',\n Lookup = 'Lookup'\n}\n\nexport interface FormField {\n name: string;\n type: FieldType;\n label: string;\n multiple?: boolean;\n searchFields?: FormField[];\n options?: Option[];\n}\n\nexport interface Option {\n value: any;\n label: string;\n}\n\nexport interface FilterToken {\n id: string;\n label: string;\n}\n\nconst numberTypes = [FieldType.Integer, FieldType.Double];\nconst numberPattern = /^\\d+\\b$/;\n\n/**\n * Merge two arrays removing duplicates\n */\nexport const mergeUnique = (array: Array<string>, otherArray: Array<string>): Array<string> => {\n return array.concat(otherArray.filter((item) => !array.includes(item)));\n};\n\n/**\n * Get type information for validation\n */\nexport const getTypeInformation = (type: FieldType, value: any) => {\n switch (type) {\n case FieldType.Time:\n case FieldType.Date:\n case FieldType.LocalDateTime:\n case FieldType.DateTime:\n return { isValidValue: false, typeExists: true };\n case FieldType.Integer:\n case FieldType.Double:\n return {\n isValidValue: value.match(numberPattern),\n typeExists: numberTypes.includes(type),\n };\n default:\n return {\n isValidValue: value.match(numberPattern),\n typeExists: numberTypes.includes(type),\n };\n }\n};\n\n/**\n * Validate if filter value is valid for field type\n */\nexport const isValidFilter = (type: FieldType, value: any): boolean => {\n const { isValidValue, typeExists } = getTypeInformation(type, value);\n return !(typeExists && !isValidValue);\n};\n\n/**\n * Get nested property value from object using dot notation\n */\nexport const getProp = (obj: any, path: string): any => {\n if (!obj || !path) return '';\n return path.split('.').reduce((result: any, prop: any) => {\n return (result && result[prop] !== undefined) ? result[prop] : '';\n }, obj);\n};\n\n/**\n * Set nested property value in object using dot notation\n */\nexport const setProp = (obj: any, path: string, value: any): void => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n \n if (!lastKey) return;\n \n const target = keys.reduce((current, key) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n \n target[lastKey] = value;\n};\n\n/**\n * Create label-value pairs for display\n */\nexport const getLabelValueRequest = (contents: any[], displayFields: string[]): any[] => {\n return contents.map((item: any) => ({\n ...item,\n label: displayFields.map((field) => getProp(item, field)).join(' - '),\n }));\n};\n\n/**\n * Get suggestion value for autocomplete\n */\nexport const getSuggestionValue = (\n displayFields: string[], \n ownerEntity: string, \n value: any, \n separator: string = ' - '\n): string => {\n return displayFields\n .map((field) => getProp(value, `${ownerEntity}.${field}`))\n .filter(val => val !== null && val !== undefined && val !== '')\n .join(separator);\n};\n\n/**\n * Create enum query filter\n */\nexport const getEnumQuery = (name: string, value: any, multiple: boolean = false): string => {\n if (multiple && Array.isArray(value)) {\n return `(${value.map((selected: any) => `${name} eq '${selected}'`).join(' or ')})`;\n }\n return `${name} eq '${value}'`;\n};\n\n/**\n * Escape special characters in filter strings\n */\nexport const escapeFilterValue = (value: string): string => {\n return value.replace(/'/g, \"''\");\n};\n\n/**\n * Create filter string for different field types\n */\nexport const createFilterString = (formField: FormField, value: any): string => {\n const { name, type, multiple } = formField;\n \n if (value === null || value === undefined) {\n return `${name} eq null`;\n }\n \n if (typeof value === 'number') {\n return `${name} eq ${value}`;\n }\n\n switch (type) {\n case FieldType.Date: {\n const dateValue = value instanceof Date ? value : new Date(value);\n const dateStr = dateValue.toISOString().split('T')[0];\n return `${name} eq '${dateStr}'`;\n }\n \n case FieldType.Time: {\n const timeValue = value instanceof Date ? value : new Date(value);\n const timeStr = timeValue.toTimeString().split(' ')[0];\n return `${name} eq '${timeStr}'`;\n }\n \n case FieldType.DateTime: {\n const dateTimeValue = value instanceof Date ? value : new Date(value);\n return `${name} eq '${dateTimeValue.toISOString()}'`;\n }\n \n case FieldType.LocalDateTime: {\n const localDateTimeValue = value instanceof Date ? value : new Date(value);\n const localDateTimeStr = localDateTimeValue.toISOString().replace('Z', '');\n return `${name} eq '${localDateTimeStr}'`;\n }\n \n case FieldType.Enum:\n return getEnumQuery(name, value, multiple);\n \n case FieldType.String: {\n const escapedValue = escapeFilterValue(String(value));\n return `upper(${name}) like upper('${escapedValue}%')`;\n }\n \n case FieldType.Lookup: {\n const lookupId = typeof value === 'object' ? value.id : value;\n return `${name} eq '${lookupId}'`;\n }\n \n case FieldType.Boolean:\n return `${name} eq ${value ? 'true' : 'false'}`;\n \n case FieldType.Integer:\n case FieldType.Double:\n return `${name} eq ${value}`;\n \n default:\n return `${name} eq '${escapeFilterValue(String(value))}'`;\n }\n};\n\n/**\n * Create filter tokens for UI display\n */\nexport const createFilterTokens = (\n formField: FormField, \n value: any, \n translationService: TranslationService\n): FilterToken => {\n const { name, type, label, searchFields, options } = formField as any;\n let labelValue = value;\n\n switch (type) {\n case FieldType.Date:\n labelValue = value.toLocaleDateString ? value.toLocaleDateString() : value;\n break;\n \n case FieldType.Time:\n labelValue = value.toLocaleTimeString ? value.toLocaleTimeString() : value;\n break;\n \n case FieldType.LocalDateTime:\n case FieldType.DateTime:\n labelValue = value.toLocaleString ? value.toLocaleString() : value;\n break;\n \n case FieldType.Lookup:\n if (searchFields && searchFields.length) {\n labelValue = searchFields.map((field: FormField) => getProp(value, field.name)).join(' - ');\n } else {\n labelValue = value.label || value.name || value.id;\n }\n break;\n \n case FieldType.Enum:\n if (options) {\n const option = options.find((opt: Option) => opt.value === value);\n labelValue = option ? option.label : value;\n }\n break;\n \n case FieldType.Boolean:\n labelValue = value \n ? translationService.translate('boolean.true') \n : translationService.translate('boolean.false');\n break;\n \n case FieldType.Integer:\n case FieldType.Double:\n labelValue = typeof value === 'number' ? value.toLocaleString() : value;\n break;\n }\n\n return { \n id: name, \n label: `${label}: ${labelValue}` \n };\n};\n\n/**\n * Resolve $ref references in JSON objects\n */\nexport const resolveRefs = (payload: any): any => {\n const getDataFromRef = (ref: string, rootObj: any): any => {\n const regex = /\\[\"(.*?)\"\\]/g;\n const result = [];\n let match;\n\n while ((match = regex.exec(ref)) !== null) {\n result.push(match[1]);\n }\n\n return result.reduce((acc, part) => acc && acc[part], rootObj);\n };\n\n const resolve = (obj: any, rootObj: any): void => {\n if (Array.isArray(obj)) {\n obj.forEach((item) => resolve(item, rootObj));\n } else if (obj !== null && typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n if (key === '$ref' && obj[key]) {\n const refPath = obj[key];\n const refData = getDataFromRef(refPath, rootObj);\n if (refData) {\n Object.assign(obj, refData);\n delete obj[key];\n }\n } else {\n resolve(obj[key], rootObj);\n }\n });\n }\n };\n\n const clonedPayload = JSON.parse(JSON.stringify(payload));\n resolve(clonedPayload, clonedPayload);\n return clonedPayload;\n};\n\n/**\n * Deep clone an object\n */\nexport const deepClone = <T>(obj: T): T => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n \n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(item => deepClone(item)) as any;\n }\n \n const cloned = {} as T;\n Object.keys(obj).forEach(key => {\n (cloned as any)[key] = deepClone((obj as any)[key]);\n });\n \n return cloned;\n};\n\n/**\n * Check if two objects are deeply equal\n */\nexport const deepEqual = (obj1: any, obj2: any): boolean => {\n if (obj1 === obj2) {\n return true;\n }\n \n if (obj1 == null || obj2 == null) {\n return obj1 === obj2;\n }\n \n if (typeof obj1 !== typeof obj2) {\n return false;\n }\n \n if (typeof obj1 !== 'object') {\n return obj1 === obj2;\n }\n \n if (Array.isArray(obj1) !== Array.isArray(obj2)) {\n return false;\n }\n \n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n return keys1.every(key => deepEqual(obj1[key], obj2[key]));\n};\n\n/**\n * Debounce function execution\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): ((...args: Parameters<T>) => void) => {\n let timeout: any;\n \n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n};\n\n/**\n * Throttle function execution\n */\nexport const throttle = <T extends (...args: any[]) => any>(\n func: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle: boolean;\n \n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n};\n","/*\n * Public API Surface of @seniorsistemas/components-ai\n * \n * Este arquivo será populado conforme os componentes forem migrados.\n * Por enquanto, exporta apenas o módulo principal.\n */\n\n// ============================================================================\n// MODULE\n// ============================================================================\nexport * from './lib/angular-components.module';\n\n// ============================================================================\n// SERVICES\n// ============================================================================\nexport { EntityService, type SortMeta, type ListParams, type BodyParams, type EntityListResponse, type TranslationService as TranslationServiceInterface } from './lib/services/entity.service';\nexport { AuthService, type UserToken } from './lib/services/auth.service';\nexport { CookieService } from './lib/services/cookie.service';\nexport { PermissionService, type PermissionRequest, type PermissionResponse, type CheckAccessRequest, type CheckAccessResponse, type AuthServiceInterface } from './lib/services/permission.service';\nexport { SeniorTokenService, type SeniorTokenData } from './lib/services/senior-token.service';\nexport { ThemeService } from './lib/services/theme.service';\nexport { TranslationService, type SupportedLanguage, type TranslationLoader } from './lib/services/translation.service';\nexport { MaskService } from './lib/services/mask.service';\nexport { LocaleService } from './lib/services/locale.service';\n\n// ============================================================================\n// COMPONENTS\n// ============================================================================\nexport { ExportDialogComponent, type ColumnOption } from './lib/components/export-dialog/export-dialog.component';\nexport { BulkDeleteDialogComponent } from './lib/components/bulk-delete-dialog/bulk-delete-dialog.component';\nexport { BreadcrumbComponent } from './lib/components/breadcrumb/breadcrumb.component';\nexport { LoadingComponent } from './lib/components/loading/loading.component';\nexport { EntityListBaseComponent } from './lib/components/base/entity-list-base.component';\n\n// Dynamic Form\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/dynamic-form/models/dynamic-form.models';\nexport * from './lib/components/dynamic-form/fields';\n\n// ============================================================================\n// MODELS\n// ============================================================================\nexport type { BaseEntity } from './lib/models/base-entity.interface';\nexport type { \n TableColumn, \n FormField as EntityFormField, \n FilterField, \n ExportField, \n EntityConfig \n} from './lib/models/entity-config.interface';\nexport type { \n ColumnConfig, \n LookupColumn, \n FilterFieldSize, \n FilterSection, \n FilterConfig, \n FormFieldConfig as EntityFormFieldConfig, \n EntityListConfig \n} from './lib/models/entity-list.config';\n\n// ============================================================================\n// CONFIG\n// ============================================================================\nexport { TRANSLATION_CONFIG, SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, mapTokenLocaleToLanguage, getLanguageInfo, type LanguageConfig } from './lib/config/translation.config';\nexport { provideSeniorPrimeNG, SeniorPreset, type SeniorPrimeNGConfig } from './lib/config/primeng.config';\n\n// ============================================================================\n// INTERCEPTORS\n// ============================================================================\nexport { apiInterceptor } from './lib/interceptors/api.interceptor';\n\n// ============================================================================\n// NOTA: Os exports abaixo serão descomentados conforme os arquivos forem migrados\n// ============================================================================\n\n// COMPONENTS - BASE\n// export * from './lib/components/base/entity-list-base/entity-list-base.component';\n// export * from './lib/components/base/entity-form-base/entity-form-base.component';\n\n// COMPONENTS - FORMS\n// export * from './lib/components/forms/entity-form-fields/entity-form-fields.component';\n// export * from './lib/components/forms/entity-form-dialog/entity-form-dialog.component';\n// export * from './lib/components/forms/entity-form-drawer/entity-form-drawer.component';\n// export * from './lib/components/forms/sub-resource-form-dialog/sub-resource-form-dialog.component';\n\n// COMPONENTS - LISTS\n// export * from './lib/components/lists/form-filter/form-filter.component';\n// export * from './lib/components/lists/export-dialog/export-dialog.component';\n// export * from './lib/components/lists/bulk-delete-dialog/bulk-delete-dialog.component';\n\n// COMPONENTS - UI\n// export * from './lib/components/ui/breadcrumb/breadcrumb.component';\n// export * from './lib/components/ui/edit-inline/edit-inline.component';\n// export * from './lib/components/ui/lookup-field/lookup-field.component';\n// export * from './lib/components/ui/kanban-board/kanban-board.component';\n// export * from './lib/components/ui/theme-toggle/theme-toggle.component';\n\n// SERVICES\n// export * from './lib/services/entity.service';\n// export * from './lib/services/auth.service';\n// export * from './lib/services/translation.service';\n// export * from './lib/services/theme.service';\n// export * from './lib/services/permission.service';\n// export * from './lib/services/cookie.service';\n// export * from './lib/services/senior-token.service';\n// export * from './lib/services/mask.service';\n\n// DIRECTIVES\nexport { PostalCodeMaskDirective } from './lib/directives/postal-code-mask.directive';\nexport { DocumentMaskDirective } from './lib/directives/document-mask.directive';\nexport { PhoneMaskDirective } from './lib/directives/phone-mask.directive';\nexport { MoneyMaskDirective } from './lib/directives/money-mask.directive';\nexport { TableLoadingDirective } from './lib/directives/table-loading/table-loading.directive';\n\n// PIPES\nexport { TranslatePipe } from './lib/pipes/translate.pipe';\nexport { CpfPipe } from './lib/pipes/cpf.pipe';\nexport { CnpjPipe } from './lib/pipes/cnpj.pipe';\nexport { DocumentPipe } from './lib/pipes/document.pipe';\nexport { PhonePipe } from './lib/pipes/phone.pipe';\nexport { PostalCodePipe } from './lib/pipes/postal-code.pipe';\nexport { MoneyPipe } from './lib/pipes/money.pipe';\nexport { DateFormatPipe } from './lib/pipes/date-format.pipe';\n\n// UTILS\nexport { TranslationHelper } from './lib/utils/translation.helper';\nexport { \n FieldType,\n type FormField as UtilsFormField,\n type Option,\n type FilterToken,\n mergeUnique,\n getTypeInformation,\n isValidFilter,\n getProp,\n setProp,\n getLabelValueRequest,\n getSuggestionValue,\n getEnumQuery,\n escapeFilterValue,\n createFilterString,\n createFilterTokens,\n resolveRefs,\n deepClone,\n deepEqual,\n debounce,\n throttle\n} from './lib/utils/utils';\n\n// INTERCEPTORS\n// export * from './lib/interceptors/api.interceptor';\n\n// MODELS - INTERFACES\n// export * from './lib/models/interfaces/base-entity.interface';\n// export * from './lib/models/interfaces/entity-config.interface';\n// export * from './lib/models/interfaces/entity-list.config';\n\n// MODELS - ENUMS\n// export * from './lib/models/enums/status.enum';\n// export * from './lib/models/enums/type-person.enum';\n\n// UTILS\n// export * from './lib/utils/utils';\n\n// I18N\n// export * from './lib/i18n/translation.config';\n// export * from './lib/i18n/locale.config';\n// export * from './lib/i18n/fallback';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CookieService","i1.TranslationService","i1","i2.TranslationService","i5","catchError","i2","i3","i4","i1.EntityService","i3.TranslationService","i1.MaskService","i2.MaskService","i2.LocaleService","i6","i7","i3.MaskService","i4.LocaleService","i8","i9","i10","i1.LocaleService"],"mappings":"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"}
|